{"version":3,"file":"vts-voffice-ng-vts-graph.mjs","sources":["../../components/graph/interface.ts","../../components/graph/data-source/base-graph-source.ts","../../components/graph/data-source/graph-data-source.ts","../../components/graph/graph-defs.component.ts","../../components/graph/graph-edge.component.ts","../../components/graph/graph-edge.directive.ts","../../components/graph/graph-group-node.directive.ts","../../components/graph/core/minimap.ts","../../components/graph/graph-minimap.component.ts","../../components/graph/graph-node.component.ts","../../components/graph/graph-node.directive.ts","../../components/graph/core/utils.ts","../../components/graph/graph-zoom.directive.ts","../../components/graph/graph.component.ts","../../components/graph/graph.module.ts","../../components/graph/public-api.ts","../../components/graph/vts-voffice-ng-vts-graph.ts"],"sourcesContent":["/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport {\r\n  HierarchyBaseEdgeInfo,\r\n  HierarchyBaseNodeInfo,\r\n  HierarchyGraphDef,\r\n  HierarchyGraphEdgeDef,\r\n  HierarchyGraphNodeDef,\r\n  HierarchyGraphNodeInfo,\r\n  HierarchyGraphOption,\r\n  LayoutConfig\r\n} from 'dagre-compound';\r\nimport { VtsSafeAny } from '@vts-voffice/ng-vts/core/types';\r\n\r\nexport interface VtsGraphDataDef extends HierarchyGraphDef {\r\n  nodes: VtsGraphNodeDef[];\r\n  edges: VtsGraphEdgeDef[];\r\n}\r\n\r\nexport interface VtsGraphNodeDef extends HierarchyGraphNodeDef {\r\n  label?: string;\r\n}\r\n\r\nexport interface VtsGraphEdgeDef extends HierarchyGraphEdgeDef {\r\n  label?: string;\r\n}\r\n\r\n// tslint:disable-next-line:no-empty-interface\r\nexport interface VtsGraphOption extends HierarchyGraphOption {}\r\nexport declare type VtsRankDirection = 'TB' | 'BT' | 'LR' | 'RL';\r\n\r\nexport interface VtsGraphGroupNode extends HierarchyGraphNodeInfo {\r\n  nodes: Array<VtsGraphNode | VtsGraphGroupNode>;\r\n  edges: VtsGraphEdge[];\r\n  [key: string]: VtsSafeAny;\r\n}\r\n\r\nexport interface VtsGraphNode extends HierarchyBaseNodeInfo {\r\n  id: VtsSafeAny;\r\n  // TODO\r\n  name: VtsSafeAny;\r\n  label?: string;\r\n  [key: string]: VtsSafeAny;\r\n}\r\n\r\nexport interface VtsGraphEdge extends HierarchyBaseEdgeInfo {\r\n  id: VtsSafeAny;\r\n  v: VtsSafeAny;\r\n  w: VtsSafeAny;\r\n  label?: string;\r\n}\r\n\r\n// tslint:disable-next-line:no-empty-interface\r\nexport interface VtsLayoutSetting extends LayoutConfig {}\r\n\r\nexport interface VtsGraphBaseLayout {\r\n  layout: {\r\n    nodeSep: number;\r\n    rankSep: number;\r\n    edgeSep: number;\r\n  };\r\n  subScene: {\r\n    paddingTop: number;\r\n    paddingBottom: number;\r\n    paddingLeft: number;\r\n    paddingRight: number;\r\n    labelHeight: number;\r\n  };\r\n  defaultCompoundNode: {\r\n    width: number;\r\n    height: number;\r\n    maxLabelWidth: number;\r\n  };\r\n  defaultNode: {\r\n    width: number;\r\n    height: number;\r\n    labelOffset: number;\r\n    maxLabelWidth: number;\r\n  };\r\n}\r\n\r\nexport function vtsTypeDefinition<T>(): (item: unknown) => T {\r\n  return item => item as T;\r\n}\r\n\r\n// tslint:disable:no-shadowed-variable\r\nexport type VtsDeepPartial<T> = {\r\n  [P in keyof T]?: T[P] extends Array<infer U>\r\n    ? Array<VtsDeepPartial<U>>\r\n    : T[P] extends ReadonlyArray<infer U>\r\n    ? ReadonlyArray<VtsDeepPartial<U>>\r\n    : VtsDeepPartial<T[P]>;\r\n};\r\n\r\nexport type VtsGraphLayoutConfig = VtsDeepPartial<VtsGraphBaseLayout>;\r\nexport const VTS_GRAPH_LAYOUT_SETTING: VtsLayoutSetting = {\r\n  graph: {\r\n    meta: {\r\n      nodeSep: 50,\r\n      rankSep: 50,\r\n      edgeSep: 5\r\n    }\r\n  },\r\n  subScene: {\r\n    meta: {\r\n      paddingTop: 20,\r\n      paddingBottom: 20,\r\n      paddingLeft: 20,\r\n      paddingRight: 20,\r\n      labelHeight: 20\r\n    }\r\n  },\r\n  nodeSize: {\r\n    meta: {\r\n      width: 50,\r\n      maxLabelWidth: 0,\r\n      height: 50\r\n    },\r\n    node: {\r\n      width: 50,\r\n      height: 50,\r\n      labelOffset: 10,\r\n      maxLabelWidth: 40\r\n    },\r\n    bridge: {\r\n      width: 5,\r\n      height: 5,\r\n      radius: 2,\r\n      labelOffset: 0\r\n    }\r\n  }\r\n};\r\n\r\n// Zoom interface\r\n\r\nexport interface VtsZoomTransform {\r\n  x: number;\r\n  y: number;\r\n  k: number;\r\n}\r\n\r\nexport interface RelativePositionInfo {\r\n  topLeft: { x: number; y: number };\r\n  bottomRight: { x: number; y: number };\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\n\r\nexport interface VtsGraphBaseSource<T, K> {\r\n  /** The saved graph nodes data for `expandAll` action. */\r\n  dataSource: T;\r\n\r\n  /** The expansion model */\r\n  expansionModel: SelectionModel<K>;\r\n\r\n  /** Whether the data node is expanded or collapsed. Return true if it's expanded. */\r\n  isExpanded(dataNode: K): boolean;\r\n\r\n  /** Expand or collapse data node */\r\n  toggle(dataNode: K): void;\r\n\r\n  /** Expand one data node */\r\n  expand(dataNode: K): void;\r\n\r\n  /** Collapse one data node */\r\n  collapse(dataNode: K): void;\r\n\r\n  /** Expand all the dataNodes in the tree */\r\n  expandAll(): void;\r\n\r\n  /** Collapse all the dataNodes in the tree */\r\n  collapseAll(): void;\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { BehaviorSubject, merge, Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { VtsGraphDataDef } from '../interface';\r\nimport { VtsGraphBaseSource } from './base-graph-source';\r\n\r\nexport class VtsGraphData implements VtsGraphBaseSource<VtsGraphDataDef, string> {\r\n  private _data = new BehaviorSubject<VtsGraphDataDef>({} as VtsGraphDataDef);\r\n  dataSource!: VtsGraphDataDef;\r\n  /** A selection model with multi-selection to track expansion status. */\r\n  expansionModel: SelectionModel<string> = new SelectionModel<string>(true);\r\n\r\n  /** Toggles one single data node's expanded/collapsed state. */\r\n  toggle(nodeName: string): void {\r\n    this.expansionModel.toggle(nodeName);\r\n  }\r\n\r\n  /** Expands one single data node. */\r\n  expand(nodeName: string): void {\r\n    this.expansionModel.select(nodeName);\r\n  }\r\n\r\n  /** Collapses one single data node. */\r\n  collapse(nodeName: string): void {\r\n    this.expansionModel.deselect(nodeName);\r\n  }\r\n\r\n  /** Whether a given data node is expanded or not. Returns true if the data node is expanded. */\r\n  isExpanded(nodeName: string): boolean {\r\n    return this.expansionModel.isSelected(nodeName);\r\n  }\r\n\r\n  /** Collapse all dataNodes in the tree. */\r\n  collapseAll(): void {\r\n    this.expansionModel.clear();\r\n  }\r\n\r\n  expandAll(): void {\r\n    this.expansionModel.select(...Object.keys(this._data.value.compound || {}));\r\n  }\r\n\r\n  setData(data: VtsGraphDataDef): void {\r\n    this.expansionModel?.clear();\r\n    this.dataSource = data;\r\n    this._data.next(data);\r\n  }\r\n\r\n  constructor(source?: VtsGraphDataDef) {\r\n    if (source) {\r\n      this.expansionModel?.clear();\r\n      this.dataSource = source;\r\n      this._data.next(source);\r\n    }\r\n  }\r\n\r\n  connect(): Observable<VtsGraphDataDef> {\r\n    const changes = [this._data, this.expansionModel.changed];\r\n    return merge(...changes).pipe(map(() => this._data.value));\r\n  }\r\n\r\n  disconnect(): void {\r\n    // do nothing for now\r\n  }\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'svg:defs[vts-graph-defs]',\r\n  template: `\r\n    <svg:marker\r\n      class=\"vts-graph-edge-marker\"\r\n      id=\"edge-end-arrow\"\r\n      viewBox=\"1 0 20 20\"\r\n      refX=\"8\"\r\n      refY=\"3.5\"\r\n      markerWidth=\"10\"\r\n      markerHeight=\"10\"\r\n      orient=\"auto\"\r\n    >\r\n      <svg:polygon points=\"0 0, 10 3.5, 0 7\"></svg:polygon>\r\n    </svg:marker>\r\n  `\r\n})\r\nexport class VtsGraphDefsComponent {\r\n  constructor() {}\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  NgZone,\r\n  OnChanges,\r\n  OnInit,\r\n  SimpleChanges,\r\n  TemplateRef\r\n} from '@angular/core';\r\nimport { curveBasis, line } from 'd3-shape';\r\nimport { take } from 'rxjs/operators';\r\nimport { VtsGraphEdge } from './interface';\r\n\r\n@Component({\r\n  selector: '[vts-graph-edge]',\r\n  template: `\r\n    <ng-container\r\n      *ngIf=\"customTemplate\"\r\n      [ngTemplateOutlet]=\"customTemplate\"\r\n      [ngTemplateOutletContext]=\"{ $implicit: edge }\"\r\n    ></ng-container>\r\n    <svg:g *ngIf=\"!customTemplate\">\r\n      <path class=\"vts-graph-edge-line\" [attr.marker-end]=\"'url(#edge-end-arrow)'\"></path>\r\n      <svg:text class=\"vts-graph-edge-text\" text-anchor=\"middle\" dy=\"10\" *ngIf=\"edge.label\">\r\n        <textPath [attr.href]=\"'#' + id\" startOffset=\"50%\">\r\n          {{ edge.label }}\r\n        </textPath>\r\n      </svg:text>\r\n    </svg:g>\r\n  `,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class VtsGraphEdgeComponent implements OnInit, OnChanges {\r\n  @Input() edge!: VtsGraphEdge;\r\n  @Input() customTemplate?: TemplateRef<{\r\n    $implicit: VtsGraphEdge;\r\n  }>;\r\n\r\n  public get id(): string {\r\n    return this.edge?.id || `${this.edge.v}--${this.edge.w}`;\r\n  }\r\n  private el!: SVGGElement;\r\n  private path!: SVGPathElement;\r\n\r\n  private readonly line = line<{ x: number; y: number }>()\r\n    .x(d => d.x)\r\n    .y(d => d.y)\r\n    .curve(curveBasis);\r\n\r\n  constructor(\r\n    private elementRef: ElementRef<SVGGElement>,\r\n    private ngZone: NgZone,\r\n    private cdr: ChangeDetectorRef\r\n  ) {\r\n    this.el = this.elementRef.nativeElement;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initElementStyle();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const { edge, customTemplate } = changes;\r\n    if (edge) {\r\n      this.ngZone.onStable.pipe(take(1)).subscribe(() => {\r\n        // Update path element if customTemplate set\r\n        if (customTemplate) {\r\n          this.initElementStyle();\r\n        }\r\n\r\n        this.setLine();\r\n        this.cdr.markForCheck();\r\n      });\r\n    }\r\n  }\r\n\r\n  initElementStyle(): void {\r\n    this.path = this.el.querySelector('path')!;\r\n    this.setElementData();\r\n  }\r\n\r\n  setLine(): void {\r\n    this.setPath(this.line(this.edge.points)!);\r\n  }\r\n\r\n  setPath(d: string): void {\r\n    this.path.setAttribute('d', d);\r\n  }\r\n\r\n  setElementData(): void {\r\n    if (!this.path) {\r\n      return;\r\n    }\r\n    this.path.setAttribute('id', this.id);\r\n    this.path.setAttribute('data-edge', this.id);\r\n    this.path.setAttribute('data-v', `${this.edge.v}`);\r\n    this.path.setAttribute('data-w', `${this.edge.w}`);\r\n  }\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[vtsGraphEdge]',\r\n  exportAs: 'vtsGraphEdge'\r\n})\r\nexport class VtsGraphEdgeDirective {}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[vtsGraphGroupNode]',\r\n  exportAs: 'vtsGraphGroupNode'\r\n})\r\nexport class VtsGraphGroupNodeDirective {}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { drag } from 'd3-drag';\r\nimport { pointer, select } from 'd3-selection';\r\nimport { ZoomBehavior, zoomIdentity, ZoomTransform } from 'd3-zoom';\r\nimport { VtsSafeAny } from '@vts-voffice/ng-vts/core/types';\r\nimport { VtsZoomTransform } from '../interface';\r\n\r\nconst FRAC_VIEWPOINT_AREA = 0.8;\r\n\r\nexport class Minimap {\r\n  private minimap: HTMLElement;\r\n  private canvas: HTMLCanvasElement;\r\n  private canvasRect: ClientRect;\r\n  private canvasBuffer: HTMLCanvasElement;\r\n  private minimapSvg: SVGSVGElement;\r\n  private viewpoint: SVGRectElement;\r\n  private scaleMinimap!: number;\r\n  private scaleMain!: number;\r\n  private maxWidth: number;\r\n  private translate!: [number, number];\r\n  private viewpointCoord: { x: number; y: number };\r\n  private minimapSize!: { width: number; height: number };\r\n  private labelPadding: number;\r\n\r\n  private svg: SVGSVGElement;\r\n  private zoomG: SVGGElement;\r\n  private mainZoom: ZoomBehavior<VtsSafeAny, VtsSafeAny>;\r\n\r\n  constructor(\r\n    svg: SVGSVGElement,\r\n    zoomG: SVGGElement,\r\n    mainZoom: ZoomBehavior<VtsSafeAny, VtsSafeAny>,\r\n    minimap: HTMLElement,\r\n    maxWidth: number,\r\n    labelPadding: number\r\n  ) {\r\n    this.svg = svg;\r\n    this.labelPadding = labelPadding;\r\n    this.zoomG = zoomG;\r\n    this.mainZoom = mainZoom;\r\n    this.maxWidth = maxWidth;\r\n    const minimapElement = select(minimap);\r\n    const minimapSvgElement = minimapElement.select('svg');\r\n    const viewpointElement = minimapSvgElement.select('rect');\r\n    this.canvas = minimapElement.select('canvas.viewport').node() as HTMLCanvasElement;\r\n    this.canvasRect = this.canvas.getBoundingClientRect();\r\n\r\n    const handleEvent = (event: VtsSafeAny): void => {\r\n      const minimapOffset = this.minimapOffset();\r\n      const width = Number(viewpointElement.attr('width'));\r\n      const height = Number(viewpointElement.attr('height'));\r\n      const clickCoords = pointer(event, minimapSvgElement.node() as VtsSafeAny);\r\n      this.viewpointCoord.x = clickCoords[0] - width / 2 - minimapOffset.x;\r\n      this.viewpointCoord.y = clickCoords[1] - height / 2 - minimapOffset.y;\r\n      this.updateViewpoint();\r\n    };\r\n    this.viewpointCoord = { x: 0, y: 0 };\r\n    const dragEvent = drag().subject(Object).on('drag', handleEvent);\r\n    viewpointElement.datum(this.viewpointCoord as VtsSafeAny).call(dragEvent as VtsSafeAny);\r\n\r\n    // Make the minimap clickable.\r\n    minimapSvgElement.on('click', event => {\r\n      if ((event as Event).defaultPrevented) {\r\n        // This click was part of a drag event, so suppress it.\r\n        return;\r\n      }\r\n      handleEvent(event);\r\n    });\r\n    this.viewpoint = viewpointElement.node() as SVGRectElement;\r\n    this.minimapSvg = minimapSvgElement.node() as SVGSVGElement;\r\n    this.minimap = minimap;\r\n    this.canvasBuffer = minimapElement.select('canvas.buffer').node() as HTMLCanvasElement;\r\n    this.update();\r\n  }\r\n\r\n  private minimapOffset(): { x: number; y: number } {\r\n    return {\r\n      x: (this.canvasRect.width - this.minimapSize.width) / 2,\r\n      y: (this.canvasRect.height - this.minimapSize.height) / 2\r\n    };\r\n  }\r\n\r\n  private updateViewpoint(): void {\r\n    // Update the coordinates of the viewpoint rectangle.\r\n    select(this.viewpoint).attr('x', this.viewpointCoord.x).attr('y', this.viewpointCoord.y);\r\n    // Update the translation vector of the main svg to reflect the\r\n    // new viewpoint.\r\n    const mainX = (-this.viewpointCoord.x * this.scaleMain) / this.scaleMinimap;\r\n    const mainY = (-this.viewpointCoord.y * this.scaleMain) / this.scaleMinimap;\r\n    select(this.svg).call(\r\n      this.mainZoom.transform,\r\n      zoomIdentity.translate(mainX, mainY).scale(this.scaleMain)\r\n    );\r\n  }\r\n\r\n  update(): void {\r\n    let sceneSize = null;\r\n    try {\r\n      // Get the size of the entire scene.\r\n      sceneSize = this.zoomG.getBBox();\r\n      if (sceneSize.width === 0) {\r\n        // There is no scene anymore. We have been detached from the dom.\r\n        return;\r\n      }\r\n    } catch (e) {\r\n      // Firefox produced NS_ERROR_FAILURE if we have been\r\n      // detached from the dom.\r\n      return;\r\n    }\r\n\r\n    const svgSelection = select(this.svg);\r\n    // Read all the style rules in the document and embed them into the svg.\r\n    // The svg needs to be self contained, i.e. all the style rules need to be\r\n    // embedded so the canvas output matches the origin.\r\n    let stylesText = '';\r\n\r\n    for (const k of new Array(document.styleSheets.length).keys()) {\r\n      try {\r\n        const cssRules =\r\n          (document.styleSheets[k] as VtsSafeAny).cssRules ||\r\n          (document.styleSheets[k] as VtsSafeAny).rules;\r\n        if (cssRules == null) {\r\n          continue;\r\n        }\r\n        for (const i of new Array(cssRules.length).keys()) {\r\n          // Remove tf-* selectors from the styles.\r\n          stylesText += cssRules[i].cssText.replace(/ ?tf-[\\w-]+ ?/g, '') + '\\n';\r\n        }\r\n      } catch (e: VtsSafeAny) {\r\n        if (e.name !== 'SecurityError') {\r\n          throw e;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Temporarily add the css rules to the main svg.\r\n    const svgStyle = svgSelection.append('style');\r\n    svgStyle.text(stylesText);\r\n\r\n    // Temporarily remove the zoom/pan transform from the main svg since we\r\n    // want the minimap to show a zoomed-out and centered view.\r\n    const zoomGSelection = select(this.zoomG);\r\n    const zoomTransform = zoomGSelection.attr('transform');\r\n    zoomGSelection.attr('transform', null);\r\n\r\n    // Since we add padding, account for that here.\r\n    sceneSize.height += this.labelPadding * 2;\r\n    sceneSize.width += this.labelPadding * 2;\r\n\r\n    // Temporarily assign an explicit width/height to the main svg, since\r\n    // it doesn't have one (uses flex-box), but we need it for the canvas\r\n    // to work.\r\n    svgSelection.attr('width', sceneSize.width).attr('height', sceneSize.height);\r\n\r\n    // Since the content inside the svg changed (e.g. a node was expanded),\r\n    // the aspect ratio have also changed. Thus, we need to update the scale\r\n    // factor of the minimap. The scale factor is determined such that both\r\n    // the width and height of the minimap are <= maximum specified w/h.\r\n    this.scaleMinimap = this.maxWidth / Math.max(sceneSize.width, sceneSize.height);\r\n    this.minimapSize = {\r\n      width: sceneSize.width * this.scaleMinimap,\r\n      height: sceneSize.height * this.scaleMinimap\r\n    };\r\n\r\n    const minimapOffset = this.minimapOffset();\r\n\r\n    // Update the size of the minimap's svg, the buffer canvas and the\r\n    // viewpoint rect.\r\n    select(this.minimapSvg).attr(this.minimapSize as VtsSafeAny);\r\n    select(this.canvasBuffer).attr(this.minimapSize as VtsSafeAny);\r\n\r\n    if (this.translate != null && this.zoom != null) {\r\n      // Update the viewpoint rectangle shape since the aspect ratio of the\r\n      // map has changed.\r\n      requestAnimationFrame(() => this.zoom());\r\n    }\r\n\r\n    // Serialize the main svg to a string which will be used as the rendering\r\n    // content for the canvas.\r\n    const svgXml = new XMLSerializer().serializeToString(this.svg);\r\n\r\n    // Now that the svg is serialized for rendering, remove the temporarily\r\n    // assigned styles, explicit width and height and bring back the pan/zoom\r\n    // transform.\r\n    svgStyle.remove();\r\n    svgSelection.attr('width', '100%').attr('height', '100%');\r\n\r\n    zoomGSelection.attr('transform', zoomTransform);\r\n\r\n    const image = new Image();\r\n    image.onload = () => {\r\n      // Draw the svg content onto the buffer canvas.\r\n      const context = this.canvasBuffer.getContext('2d');\r\n      context!.clearRect(0, 0, this.canvasBuffer.width, this.canvasBuffer.height);\r\n\r\n      context!.drawImage(\r\n        image,\r\n        minimapOffset.x,\r\n        minimapOffset.y,\r\n        this.minimapSize.width,\r\n        this.minimapSize.height\r\n      );\r\n      requestAnimationFrame(() => {\r\n        // Hide the old canvas and show the new buffer canvas.\r\n        select(this.canvasBuffer).style('display', 'block');\r\n        select(this.canvas).style('display', 'none');\r\n        // Swap the two canvases.\r\n        [this.canvas, this.canvasBuffer] = [this.canvasBuffer, this.canvas];\r\n      });\r\n    };\r\n    image.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svgXml);\r\n  }\r\n\r\n  /**\r\n   * Handles changes in zooming/panning. Should be called from the main svg\r\n   * to notify that a zoom/pan was performed and this minimap will update it's\r\n   * viewpoint rectangle.\r\n   * @param transform\r\n   */\r\n  zoom(transform?: ZoomTransform | VtsZoomTransform): void {\r\n    if (this.scaleMinimap == null) {\r\n      // Scene is not ready yet.\r\n      return;\r\n    }\r\n    // Update the new translate and scale params, only if specified.\r\n    if (transform) {\r\n      this.translate = [transform.x, transform.y];\r\n      this.scaleMain = transform.k;\r\n    }\r\n\r\n    // Update the location of the viewpoint rectangle.\r\n    const svgRect = this.svg.getBoundingClientRect();\r\n    const minimapOffset = this.minimapOffset();\r\n    const viewpointSelection = select(this.viewpoint);\r\n    this.viewpointCoord.x = (-this.translate[0] * this.scaleMinimap) / this.scaleMain;\r\n    this.viewpointCoord.y = (-this.translate[1] * this.scaleMinimap) / this.scaleMain;\r\n    const viewpointWidth = (svgRect.width * this.scaleMinimap) / this.scaleMain;\r\n    const viewpointHeight = (svgRect.height * this.scaleMinimap) / this.scaleMain;\r\n    viewpointSelection\r\n      .attr('x', this.viewpointCoord.x + minimapOffset.x)\r\n      .attr('y', this.viewpointCoord.y + minimapOffset.y)\r\n      .attr('width', viewpointWidth)\r\n      .attr('height', viewpointHeight);\r\n    // Show/hide the minimap depending on the viewpoint area as fraction of the\r\n    // whole minimap.\r\n    const mapWidth = this.minimapSize.width;\r\n    const mapHeight = this.minimapSize.height;\r\n    const x = this.viewpointCoord.x;\r\n    const y = this.viewpointCoord.y;\r\n    const w =\r\n      Math.min(Math.max(0, x + viewpointWidth), mapWidth) - Math.min(Math.max(0, x), mapWidth);\r\n    const h =\r\n      Math.min(Math.max(0, y + viewpointHeight), mapHeight) - Math.min(Math.max(0, y), mapHeight);\r\n    const fracIntersect = (w * h) / (mapWidth * mapHeight);\r\n    if (fracIntersect < FRAC_VIEWPOINT_AREA) {\r\n      this.minimap.classList.remove('hidden');\r\n    } else {\r\n      this.minimap.classList.add('hidden');\r\n    }\r\n  }\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, ElementRef, OnInit } from '@angular/core';\r\nimport { ZoomBehavior } from 'd3-zoom';\r\nimport { VtsSafeAny } from '@vts-voffice/ng-vts/core/types';\r\nimport { Minimap } from './core/minimap';\r\nimport { VtsZoomTransform } from './interface';\r\n\r\n@Component({\r\n  selector: 'vts-graph-minimap',\r\n  template: `\r\n    <svg>\r\n      <defs>\r\n        <filter id=\"minimapDropShadow\" x=\"-20%\" y=\"-20%\" width=\"150%\" height=\"150%\">\r\n          <feOffset result=\"offOut\" in=\"SourceGraphic\" dx=\"1\" dy=\"1\"></feOffset>\r\n          <feColorMatrix\r\n            result=\"matrixOut\"\r\n            in=\"offOut\"\r\n            type=\"matrix\"\r\n            values=\"0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.5 0\"\r\n          ></feColorMatrix>\r\n          <feGaussianBlur result=\"blurOut\" in=\"matrixOut\" stdDeviation=\"2\"></feGaussianBlur>\r\n          <feBlend in=\"SourceGraphic\" in2=\"blurOut\" mode=\"normal\"></feBlend>\r\n        </filter>\r\n      </defs>\r\n      <rect></rect>\r\n    </svg>\r\n    <canvas class=\"viewport\"></canvas>\r\n    <!-- Additional canvas to use as buffer to avoid flickering between updates -->\r\n    <canvas class=\"buffer\"></canvas>\r\n  `,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    '[class.vts-graph-minimap]': 'true'\r\n  }\r\n})\r\nexport class VtsGraphMinimapComponent implements OnInit {\r\n  minimap?: Minimap;\r\n  constructor(private elementRef: ElementRef<HTMLElement>) {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  init(containerEle: ElementRef, zoomBehavior: ZoomBehavior<VtsSafeAny, VtsSafeAny>): void {\r\n    const svgEle = containerEle.nativeElement.querySelector('svg');\r\n    const zoomEle = containerEle.nativeElement.querySelector('svg > g');\r\n    this.minimap = new Minimap(\r\n      svgEle,\r\n      zoomEle,\r\n      zoomBehavior,\r\n      this.elementRef.nativeElement,\r\n      150,\r\n      0\r\n    );\r\n  }\r\n\r\n  zoom(transform: VtsZoomTransform): void {\r\n    if (this.minimap) {\r\n      this.minimap.zoom(transform);\r\n    }\r\n  }\r\n\r\n  update(): void {\r\n    if (this.minimap) {\r\n      this.minimap.update();\r\n    }\r\n  }\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport {\r\n  animate,\r\n  AnimationBuilder,\r\n  AnimationFactory,\r\n  AnimationPlayer,\r\n  group,\r\n  query,\r\n  style\r\n} from '@angular/animations';\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  Renderer2,\r\n  TemplateRef\r\n} from '@angular/core';\r\nimport { InputBoolean } from '@vts-voffice/ng-vts/core/util';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { VtsGraphGroupNode, VtsGraphNode } from './interface';\r\n\r\ninterface Info {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n}\r\n@Component({\r\n  selector: '[vts-graph-node]',\r\n  template: `\r\n    <svg:g>\r\n      <ng-container\r\n        *ngIf=\"customTemplate\"\r\n        [ngTemplateOutlet]=\"customTemplate\"\r\n        [ngTemplateOutletContext]=\"{ $implicit: node }\"\r\n      ></ng-container>\r\n      <ng-container *ngIf=\"!customTemplate\">\r\n        <svg:rect\r\n          class=\"vts-graph-node-rect\"\r\n          [attr.width]=\"node.width\"\r\n          [attr.height]=\"node.height\"\r\n        ></svg:rect>\r\n        <svg:text x=\"10\" y=\"20\">{{ node.id || node.name }}</svg:text>\r\n      </ng-container>\r\n    </svg:g>\r\n  `,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    '[id]': 'node.id || node.name',\r\n    '[class.vts-graph-node-expanded]': 'node.expanded',\r\n    '[class.vts-graph-group-node]': 'node.type===0',\r\n    '[class.vts-graph-base-node]': 'node.type===1',\r\n    '(click)': 'triggerClick($event)'\r\n  }\r\n})\r\nexport class VtsGraphNodeComponent {\r\n  @Input() node!: VtsGraphNode | VtsGraphGroupNode;\r\n  @Input() @InputBoolean() noAnimation?: boolean;\r\n  @Input() customTemplate?: TemplateRef<{\r\n    $implicit: VtsGraphNode | VtsGraphGroupNode;\r\n  }>;\r\n\r\n  @Output() readonly nodeClick: EventEmitter<VtsGraphNode | VtsGraphGroupNode> = new EventEmitter();\r\n\r\n  triggerClick(event: MouseEvent): void {\r\n    event.preventDefault();\r\n    this.nodeClick.emit(this.node);\r\n  }\r\n\r\n  animationInfo: Info | null = null;\r\n  initialState = true;\r\n\r\n  private animationPlayer: AnimationPlayer | null = null;\r\n\r\n  constructor(\r\n    private el: ElementRef,\r\n    private builder: AnimationBuilder,\r\n    private renderer2: Renderer2\r\n  ) {}\r\n\r\n  makeAnimation(): Observable<void> {\r\n    const cur = this.getAnimationInfo();\r\n    if (this.animationPlayer) {\r\n      this.animationPlayer.destroy();\r\n    }\r\n    let animationFactory: AnimationFactory;\r\n    const pre = { ...this.animationInfo } as Info;\r\n\r\n    if (this.initialState) {\r\n      animationFactory = this.builder.build([\r\n        style({ transform: `translate(${cur.x}px, ${cur.y}px)` }),\r\n        query('g', [\r\n          style({\r\n            width: `${cur.width}px`,\r\n            height: `${cur.height}px`\r\n          })\r\n        ])\r\n      ]);\r\n      this.initialState = false;\r\n    } else {\r\n      animationFactory = this.builder.build([\r\n        style({ transform: `translate(${pre!.x}px, ${pre!.y}px)` }),\r\n        query('g', [\r\n          style({\r\n            width: `${pre!.width}px`,\r\n            height: `${pre!.height}px`\r\n          })\r\n        ]),\r\n        group([\r\n          query('g', [\r\n            animate(\r\n              '150ms ease-out',\r\n              style({\r\n                width: `${cur.width}px`,\r\n                height: `${cur.height}px`\r\n              })\r\n            )\r\n          ]),\r\n          animate('150ms ease-out', style({ transform: `translate(${cur.x}px, ${cur.y}px)` }))\r\n        ])\r\n      ]);\r\n    }\r\n    this.animationInfo = cur;\r\n    this.animationPlayer = animationFactory.create(this.el.nativeElement);\r\n    this.animationPlayer.play();\r\n    const done$ = new Subject<void>();\r\n    this.animationPlayer.onDone(() => {\r\n      // Need this for canvas for now.\r\n      this.renderer2.setAttribute(\r\n        this.el.nativeElement,\r\n        'transform',\r\n        `translate(${cur.x}, ${cur.y})`\r\n      );\r\n      done$.next();\r\n      done$.complete();\r\n    });\r\n    return done$.asObservable();\r\n  }\r\n\r\n  makeNoAnimation(): void {\r\n    const cur = this.getAnimationInfo();\r\n    // Need this for canvas for now.\r\n    this.renderer2.setAttribute(\r\n      this.el.nativeElement,\r\n      'transform',\r\n      `translate(${cur.x}, ${cur.y})`\r\n    );\r\n  }\r\n\r\n  getAnimationInfo(): Info {\r\n    const { x, y } = this.nodeTransform();\r\n    return {\r\n      width: this.node.width,\r\n      height: this.node.height,\r\n      x,\r\n      y\r\n    };\r\n  }\r\n\r\n  nodeTransform(): { x: number; y: number } {\r\n    const x = this.computeCXPositionOfNodeShape() - this.node.width / 2;\r\n    const y = this.node.y - this.node.height / 2;\r\n    return { x, y };\r\n  }\r\n\r\n  computeCXPositionOfNodeShape(): number {\r\n    if ((this.node as VtsGraphGroupNode).expanded) {\r\n      return this.node.x;\r\n    }\r\n    return this.node.x - this.node.width / 2 + this.node.coreBox.width / 2;\r\n  }\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[vtsGraphNode]',\r\n  exportAs: 'vtsGraphNode'\r\n})\r\nexport class VtsGraphNodeDirective {}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { VtsZoomTransform } from '../interface';\r\n\r\n/**\r\n * Calculate position and scale\r\n * @param containerEle\r\n * @param targetEle\r\n * @param scale: if scale is set, skip calculate scale value\r\n */\r\nexport const calculateTransform = (\r\n  containerEle: SVGSVGElement,\r\n  targetEle: SVGGElement,\r\n  scale?: number\r\n): VtsZoomTransform | null => {\r\n  const containerEleSize = containerEle.getBoundingClientRect();\r\n  const targetEleSize = targetEle.getBBox();\r\n  if (!targetEleSize.width) {\r\n    // There is no g element anymore.\r\n    return null;\r\n  }\r\n\r\n  // TODO\r\n  // leave some place when re-scale\r\n  const scaleUnit = (containerEleSize.width - 48) / containerEleSize.width;\r\n  const k =\r\n    scale ||\r\n    Math.min(\r\n      containerEleSize.width / targetEleSize.width,\r\n      containerEleSize.height / targetEleSize.height,\r\n      1\r\n    ) * scaleUnit;\r\n  const x = (containerEleSize.width - targetEleSize.width * k) / 2;\r\n  const y = (containerEleSize.height - targetEleSize.height * k) / 2;\r\n  return {\r\n    x,\r\n    y,\r\n    k\r\n  };\r\n};\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  Output\r\n} from '@angular/core';\r\nimport { select, Selection } from 'd3-selection';\r\nimport { transition as d3Transition } from 'd3-transition';\r\nimport { zoom, ZoomBehavior, zoomIdentity, zoomTransform } from 'd3-zoom';\r\nimport { VtsSafeAny } from '@vts-voffice/ng-vts/core/types';\r\nimport { Subject } from 'rxjs';\r\nimport { calculateTransform } from './core/utils';\r\nimport { VtsZoomTransform, RelativePositionInfo } from './interface';\r\nSelection.bind(d3Transition);\r\n\r\n@Directive({\r\n  selector: '[vts-graph-zoom]',\r\n  exportAs: 'vtsGraphZoom'\r\n})\r\nexport class VtsGraphZoomDirective implements OnDestroy, AfterViewInit {\r\n  @Input() vtsZoom?: number;\r\n  @Input() vtsMinZoom = 0.1;\r\n  @Input() vtsMaxZoom = 10;\r\n\r\n  @Output()\r\n  readonly vtsTransformEvent: EventEmitter<VtsZoomTransform> = new EventEmitter();\r\n  @Output() readonly vtsZoomChange: EventEmitter<number> = new EventEmitter();\r\n\r\n  svgSelection!: Selection<VtsSafeAny, VtsSafeAny, VtsSafeAny, VtsSafeAny>;\r\n  zoomBehavior!: ZoomBehavior<VtsSafeAny, VtsSafeAny>;\r\n\r\n  // TODO\r\n  // Support svg element only now\r\n  svgElement!: SVGSVGElement;\r\n  gZoomElement!: SVGGElement;\r\n\r\n  private destroy$ = new Subject<void>();\r\n\r\n  constructor(private element: ElementRef, private cdr: ChangeDetectorRef) {}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.bind();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.unbind();\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n  }\r\n\r\n  bind(): void {\r\n    this.svgElement = this.element.nativeElement.querySelector('svg') as SVGSVGElement;\r\n    this.gZoomElement = this.element.nativeElement.querySelector('svg > g') as SVGGElement;\r\n    const { width, height } = this.element.nativeElement.getBoundingClientRect();\r\n    this.svgSelection = select(this.svgElement);\r\n    this.zoomBehavior = zoom()\r\n      .extent([\r\n        [0, 0],\r\n        [width, height]\r\n      ])\r\n      .scaleExtent([this.vtsMinZoom, this.vtsMaxZoom])\r\n      .on('zoom', e => {\r\n        this.zoomed(e);\r\n      });\r\n    this.svgSelection.call(\r\n      this.zoomBehavior,\r\n      zoomIdentity.translate(0, 0).scale(this.vtsZoom || 1)\r\n    );\r\n    // Init with vtsZoom\r\n    this.reScale(0, this.vtsZoom);\r\n  }\r\n\r\n  unbind(): void {\r\n    // Destroy listener\r\n    this.svgSelection?.interrupt().selectAll('*').interrupt();\r\n    if (this.zoomBehavior) {\r\n      this.zoomBehavior.on('end', null).on('zoom', null);\r\n    }\r\n  }\r\n\r\n  // Methods\r\n  fitCenter(duration: number = 0): void {\r\n    this.reScale(duration);\r\n  }\r\n\r\n  focus(id: VtsSafeAny, duration: number = 0): void {\r\n    // Make sure this node is under SVG container\r\n    if (!this.svgElement.getElementById(`${id}`)) {\r\n      return;\r\n    }\r\n\r\n    const node = this.svgElement.getElementById(`${id}`) as SVGGElement;\r\n    const svgRect = this.svgElement.getBoundingClientRect();\r\n    const position = this.getRelativePositionInfo(node);\r\n    const svgTransform = zoomTransform(this.svgElement);\r\n\r\n    const centerX = (position.topLeft.x + position.bottomRight.x) / 2;\r\n    const centerY = (position.topLeft.y + position.bottomRight.y) / 2;\r\n    const dx = svgRect.left + svgRect.width / 2 - centerX;\r\n    const dy = svgRect.top + svgRect.height / 2 - centerY;\r\n\r\n    this.svgSelection\r\n      .transition()\r\n      .duration(duration)\r\n      .call(this.zoomBehavior.translateBy, dx / svgTransform.k, dy / svgTransform.k);\r\n  }\r\n\r\n  /**\r\n   * Handle zoom event\r\n   * @param transform\r\n   */\r\n  private zoomed({ transform }: VtsSafeAny): void {\r\n    const { x, y, k } = transform;\r\n    // Update g element transform\r\n    (this.gZoomElement as SVGGElement).setAttribute(\r\n      'transform',\r\n      `translate(${x}, ${y})scale(${k})`\r\n    );\r\n    this.vtsZoom = k;\r\n    this.vtsZoomChange.emit(this.vtsZoom);\r\n    this.vtsTransformEvent.emit(transform);\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Scale with zoom and duration\r\n   * @param duration\r\n   * @param scale\r\n   * @private\r\n   */\r\n  private reScale(duration: number, scale?: number): void {\r\n    const transform = calculateTransform(this.svgElement, this.gZoomElement, scale);\r\n    if (!transform) {\r\n      return;\r\n    }\r\n    const { x, y, k } = transform;\r\n    const zTransform = zoomIdentity.translate(x, y).scale(Math.max(k, this.vtsMinZoom));\r\n    this.svgSelection\r\n      .transition()\r\n      .duration(duration)\r\n      .call(this.zoomBehavior.transform, zTransform)\r\n      .on('end.fitted', () => {\r\n        this.zoomBehavior.on('end.fitted', null);\r\n      });\r\n  }\r\n\r\n  private getRelativePositionInfo(node: SVGGElement): RelativePositionInfo {\r\n    const nodeBox = node.getBBox();\r\n    const nodeCtm = node.getScreenCTM();\r\n    let pointTL = this.svgElement.createSVGPoint();\r\n    let pointBR = this.svgElement.createSVGPoint();\r\n\r\n    pointTL.x = nodeBox.x;\r\n    pointTL.y = nodeBox.y;\r\n    pointBR.x = nodeBox.x + nodeBox.width;\r\n    pointBR.y = nodeBox.y + nodeBox.height;\r\n    pointTL = pointTL.matrixTransform(nodeCtm!);\r\n    pointBR = pointBR.matrixTransform(nodeCtm!);\r\n    return {\r\n      topLeft: pointTL,\r\n      bottomRight: pointBR\r\n    };\r\n  }\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport {\r\n  AfterContentChecked,\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ContentChild,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Host,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  QueryList,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n  ViewChildren,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\n\r\nimport { buildGraph } from 'dagre-compound';\r\n\r\nimport { forkJoin, Observable, ReplaySubject, Subject, Subscription } from 'rxjs';\r\nimport { finalize, take, takeUntil } from 'rxjs/operators';\r\nimport { calculateTransform } from './core/utils';\r\n\r\nimport { VtsNoAnimationDirective } from '@vts-voffice/ng-vts/core/no-animation';\r\nimport { cancelRequestAnimationFrame } from '@vts-voffice/ng-vts/core/polyfill';\r\nimport { BooleanInput, VtsSafeAny } from '@vts-voffice/ng-vts/core/types';\r\nimport { InputBoolean } from '@vts-voffice/ng-vts/core/util';\r\n\r\nimport { VtsGraphData } from './data-source/graph-data-source';\r\nimport { VtsGraphEdgeDirective } from './graph-edge.directive';\r\nimport { VtsGraphGroupNodeDirective } from './graph-group-node.directive';\r\nimport { VtsGraphNodeComponent } from './graph-node.component';\r\nimport { VtsGraphNodeDirective } from './graph-node.directive';\r\nimport { VtsGraphZoomDirective } from './graph-zoom.directive';\r\nimport {\r\n  VtsGraphDataDef,\r\n  VtsGraphEdge,\r\n  VtsGraphEdgeDef,\r\n  VtsGraphGroupNode,\r\n  VtsGraphLayoutConfig,\r\n  VtsGraphNode,\r\n  VtsGraphNodeDef,\r\n  VtsGraphOption,\r\n  VtsLayoutSetting,\r\n  VtsRankDirection,\r\n  vtsTypeDefinition,\r\n  VTS_GRAPH_LAYOUT_SETTING\r\n} from './interface';\r\n\r\n/** Checks whether an object is a data source. */\r\nexport function isDataSource(value: VtsSafeAny): value is VtsGraphData {\r\n  // Check if the value is a DataSource by observing if it has a connect function. Cannot\r\n  // be checked as an `instanceof DataSource` since people could create their own sources\r\n  // that match the interface, but don't extend DataSource.\r\n  return value && typeof value.connect === 'function';\r\n}\r\n\r\n@Component({\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  selector: 'vts-graph',\r\n  exportAs: 'vtsGraph',\r\n  template: `\r\n    <ng-content></ng-content>\r\n    <svg width=\"100%\" height=\"100%\">\r\n      <svg:defs vts-graph-defs></svg:defs>\r\n      <svg:g [attr.transform]=\"transformStyle\">\r\n        <ng-container\r\n          [ngTemplateOutlet]=\"groupTemplate\"\r\n          [ngTemplateOutletContext]=\"{\r\n            renderNode: renderInfo,\r\n            type: 'root'\r\n          }\"\r\n        ></ng-container>\r\n      </svg:g>\r\n    </svg>\r\n\r\n    <ng-template #groupTemplate let-renderNode=\"renderNode\" let-type=\"type\">\r\n      <svg:g [attr.transform]=\"type === 'sub' ? subGraphTransform(renderNode) : null\">\r\n        <svg:g class=\"core\" [attr.transform]=\"coreTransform(renderNode)\">\r\n          <svg:g class=\"vts-graph-edges\">\r\n            <ng-container *ngFor=\"let edge of renderNode.edges; trackBy: edgeTrackByFun\">\r\n              <g\r\n                class=\"vts-graph-edge\"\r\n                vts-graph-edge\r\n                [edge]=\"edge\"\r\n                [customTemplate]=\"customGraphEdgeTemplate\"\r\n              ></g>\r\n            </ng-container>\r\n          </svg:g>\r\n\r\n          <svg:g class=\"vts-graph-nodes\">\r\n            <ng-container\r\n              *ngFor=\"let node of typedNodes(renderNode.nodes); trackBy: nodeTrackByFun\"\r\n            >\r\n              <g\r\n                *ngIf=\"node.type === 1\"\r\n                class=\"vts-graph-node\"\r\n                vts-graph-node\r\n                [node]=\"node\"\r\n                [customTemplate]=\"nodeTemplate\"\r\n                (nodeClick)=\"clickNode($event)\"\r\n              ></g>\r\n              <g\r\n                *ngIf=\"node.type === 0\"\r\n                class=\"vts-graph-node\"\r\n                vts-graph-node\r\n                [node]=\"node\"\r\n                [customTemplate]=\"groupNodeTemplate\"\r\n                (nodeClick)=\"clickNode($event)\"\r\n              ></g>\r\n              <ng-container\r\n                *ngIf=\"node.expanded\"\r\n                [ngTemplateOutlet]=\"groupTemplate\"\r\n                [ngTemplateOutletContext]=\"{\r\n                  renderNode: node,\r\n                  type: 'sub'\r\n                }\"\r\n              ></ng-container>\r\n            </ng-container>\r\n          </svg:g>\r\n        </svg:g>\r\n      </svg:g>\r\n    </ng-template>\r\n  `,\r\n  host: {\r\n    '[class.vts-graph]': 'true',\r\n    '[class.vts-graph-auto-size]': 'vtsAutoSize'\r\n  }\r\n})\r\nexport class VtsGraphComponent\r\n  implements OnInit, OnChanges, AfterViewInit, AfterContentChecked, OnDestroy\r\n{\r\n  static ngAcceptInputType_vtsAutoSize: BooleanInput;\r\n\r\n  @ViewChildren(VtsGraphNodeComponent, { read: ElementRef })\r\n  listOfNodeElement!: QueryList<ElementRef>;\r\n  @ViewChildren(VtsGraphNodeComponent)\r\n  listOfNodeComponent!: QueryList<VtsGraphNodeComponent>;\r\n\r\n  @ContentChild(VtsGraphNodeDirective, { static: true, read: TemplateRef })\r\n  nodeTemplate?: TemplateRef<{\r\n    $implicit: VtsGraphNode;\r\n  }>;\r\n  @ContentChild(VtsGraphGroupNodeDirective, { static: true, read: TemplateRef })\r\n  groupNodeTemplate?: TemplateRef<{\r\n    $implicit: VtsGraphGroupNode;\r\n  }>;\r\n  @ContentChild(VtsGraphEdgeDirective, { static: true, read: TemplateRef })\r\n  customGraphEdgeTemplate?: TemplateRef<{\r\n    $implicit: VtsGraphEdge;\r\n  }>;\r\n  /**\r\n   * Provides a stream containing the latest data array to render.\r\n   * Data source can be an observable of VtsGraphData, or a VtsGraphData to render.\r\n   */\r\n  @Input() vtsGraphData!: VtsGraphData;\r\n  @Input() vtsRankDirection: VtsRankDirection = 'LR';\r\n  @Input() vtsGraphLayoutConfig?: VtsGraphLayoutConfig;\r\n  @Input() @InputBoolean() vtsAutoSize = false;\r\n\r\n  @Output()\r\n  readonly vtsGraphInitialized = new EventEmitter<VtsGraphComponent>();\r\n  @Output() readonly vtsGraphRendered = new EventEmitter<VtsGraphComponent>();\r\n  @Output() readonly vtsNodeClick: EventEmitter<VtsGraphNode | VtsGraphGroupNode> =\r\n    new EventEmitter();\r\n\r\n  requestId: number = -1;\r\n  transformStyle = '';\r\n  graphRenderedSubject$ = new ReplaySubject<void>(1);\r\n  renderInfo: VtsGraphGroupNode = { labelHeight: 0 } as VtsGraphGroupNode;\r\n  mapOfNodeAttr: { [key: string]: VtsGraphNodeDef } = {};\r\n  mapOfEdgeAttr: { [key: string]: VtsGraphEdgeDef } = {};\r\n  zoom = 1;\r\n\r\n  public readonly typedNodes = vtsTypeDefinition<Array<VtsGraphNode | VtsGraphGroupNode>>();\r\n  private dataSource?: VtsGraphData;\r\n  private layoutSetting: VtsLayoutSetting = VTS_GRAPH_LAYOUT_SETTING;\r\n  /** Data subscription */\r\n  private _dataSubscription?: Subscription | null;\r\n  private destroy$ = new Subject<void>();\r\n\r\n  nodeTrackByFun = (_: number, node: VtsGraphNode | VtsGraphGroupNode) => node.name;\r\n  edgeTrackByFun = (_: number, edge: VtsGraphEdge) => `${edge.v}-${edge.w}`;\r\n\r\n  subGraphTransform = (node: VtsGraphGroupNode) => {\r\n    const x = node.x - node.coreBox.width / 2.0;\r\n    const y = node.y - node.height / 2.0 + node.paddingTop;\r\n    return `translate(${x}, ${y})`;\r\n  };\r\n\r\n  coreTransform = (node: VtsGraphGroupNode) => {\r\n    return `translate(0, ${node.parentNodeName ? node.labelHeight : 0})`;\r\n  };\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    private elementRef: ElementRef,\r\n    @Host() @Optional() public noAnimation?: VtsNoAnimationDirective,\r\n    @Optional() public vtsGraphZoom?: VtsGraphZoomDirective\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.graphRenderedSubject$.pipe(take(1), takeUntil(this.destroy$)).subscribe(() => {\r\n      // Only zooming is not set, move graph to center\r\n      if (!this.vtsGraphZoom) {\r\n        this.fitCenter();\r\n      }\r\n      this.vtsGraphInitialized.emit(this);\r\n    });\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const { vtsAutoFit, vtsRankDirection, vtsGraphData, vtsGraphLayoutConfig } = changes;\r\n    if (vtsGraphLayoutConfig) {\r\n      this.layoutSetting = this.mergeConfig(vtsGraphLayoutConfig.currentValue);\r\n      // Object.assign(this.layoutSetting, this.vtsGraphLayoutSetting || {});\r\n    }\r\n\r\n    if (vtsGraphData) {\r\n      if (this.dataSource !== this.vtsGraphData) {\r\n        this._switchDataSource(this.vtsGraphData);\r\n      }\r\n    }\r\n\r\n    if (\r\n      (vtsAutoFit && !vtsAutoFit.firstChange) ||\r\n      (vtsRankDirection && !vtsRankDirection.firstChange)\r\n    ) {\r\n      // Render graph\r\n      if (this.dataSource!.dataSource) {\r\n        this.drawGraph(this.dataSource!.dataSource, {\r\n          rankDirection: this.vtsRankDirection,\r\n          expanded: this.dataSource!.expansionModel.selected || []\r\n        }).then(() => {\r\n          this.cdr.markForCheck();\r\n        });\r\n      }\r\n    }\r\n\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  ngAfterViewInit(): void {}\r\n\r\n  ngAfterContentChecked(): void {\r\n    if (this.dataSource && !this._dataSubscription) {\r\n      this.observeRenderChanges();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n\r\n    if (this.dataSource && typeof this.dataSource.disconnect === 'function') {\r\n      this.dataSource.disconnect();\r\n    }\r\n\r\n    if (this._dataSubscription) {\r\n      this._dataSubscription.unsubscribe();\r\n      this._dataSubscription = null;\r\n    }\r\n    cancelRequestAnimationFrame(this.requestId);\r\n  }\r\n\r\n  /**\r\n   * Emit event\r\n   */\r\n  clickNode(node: VtsGraphNode | VtsGraphGroupNode): void {\r\n    this.vtsNodeClick.emit(node);\r\n  }\r\n\r\n  /**\r\n   * Move graph to center and scale automatically\r\n   */\r\n  fitCenter(): void {\r\n    const { x, y, k } = calculateTransform(\r\n      this.elementRef.nativeElement.querySelector('svg'),\r\n      this.elementRef.nativeElement.querySelector('svg > g')\r\n    )!;\r\n    if (k) {\r\n      this.zoom = k;\r\n      this.transformStyle = `translate(${x}, ${y})scale(${k})`;\r\n    }\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * re-Draw graph\r\n   * @param data\r\n   * @param options\r\n   * @param needResize\r\n   */\r\n  drawGraph(\r\n    data: VtsGraphDataDef,\r\n    options: VtsGraphOption,\r\n    needResize: boolean = false\r\n  ): Promise<void> {\r\n    return new Promise(resolve => {\r\n      this.requestId = requestAnimationFrame(() => {\r\n        const renderInfo = this.buildGraphInfo(data, options);\r\n        // TODO\r\n        // Need better performance\r\n        this.renderInfo = renderInfo;\r\n        this.cdr.markForCheck();\r\n        this.requestId = requestAnimationFrame(() => {\r\n          this.drawNodes(!this.noAnimation?.vtsNoAnimation).then(() => {\r\n            // Update element\r\n            this.cdr.markForCheck();\r\n            if (needResize) {\r\n              this.resizeNodeSize().then(() => {\r\n                const dataSource: VtsGraphDataDef = this.dataSource!.dataSource!;\r\n                this.drawGraph(dataSource, options, false).then(() => resolve());\r\n              });\r\n            } else {\r\n              this.graphRenderedSubject$.next();\r\n              this.vtsGraphRendered.emit(this);\r\n              resolve();\r\n            }\r\n          });\r\n        });\r\n      });\r\n      this.cdr.markForCheck();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Redraw all nodes\r\n   * @param animate\r\n   */\r\n  drawNodes(animate: boolean = true): Promise<void> {\r\n    return new Promise(resolve => {\r\n      if (animate) {\r\n        this.makeNodesAnimation().subscribe(() => {\r\n          resolve();\r\n        });\r\n      } else {\r\n        this.listOfNodeComponent.map(node => {\r\n          node.makeNoAnimation();\r\n        });\r\n        resolve();\r\n      }\r\n    });\r\n  }\r\n\r\n  private resizeNodeSize(): Promise<void> {\r\n    return new Promise(resolve => {\r\n      const dataSource: VtsGraphDataDef = this.dataSource!.dataSource!;\r\n      let scale = this.vtsGraphZoom?.vtsZoom || this.zoom || 1;\r\n      this.listOfNodeElement.forEach(nodeEle => {\r\n        const contentEle = nodeEle.nativeElement;\r\n        if (contentEle) {\r\n          let width: number;\r\n          let height: number;\r\n          // Check if foreignObject is set\r\n          const clientRect = contentEle\r\n            .querySelector('foreignObject > :first-child')\r\n            ?.getBoundingClientRect();\r\n          if (clientRect) {\r\n            width = clientRect.width;\r\n            height = clientRect.height;\r\n          } else {\r\n            const bBoxRect = contentEle.getBBox();\r\n            width = bBoxRect.width;\r\n            height = bBoxRect.height;\r\n            // getBBox will return actual value\r\n            scale = 1;\r\n          }\r\n          // Element id type is string\r\n          const node = dataSource.nodes.find(n => `${n.id}` === nodeEle.nativeElement.id);\r\n          if (node && width && height) {\r\n            node.height = height / scale;\r\n            node.width = width / scale;\r\n          }\r\n        }\r\n      });\r\n      resolve();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Switch to the provided data source by resetting the data and unsubscribing from the current\r\n   * render change subscription if one exists. If the data source is null, interpret this by\r\n   * clearing the node outlet. Otherwise start listening for new data.\r\n   */\r\n  private _switchDataSource(dataSource: VtsGraphData): void {\r\n    if (this.dataSource && typeof this.dataSource.disconnect === 'function') {\r\n      this.vtsGraphData.disconnect();\r\n    }\r\n\r\n    if (this._dataSubscription) {\r\n      this._dataSubscription.unsubscribe();\r\n      this._dataSubscription = null;\r\n    }\r\n\r\n    this.dataSource = dataSource;\r\n    this.observeRenderChanges();\r\n  }\r\n\r\n  /** Set up a subscription for the data provided by the data source. */\r\n  private observeRenderChanges(): void {\r\n    let dataStream: Observable<VtsGraphDataDef> | undefined;\r\n    let graphOptions: VtsGraphOption = {\r\n      rankDirection: this.vtsRankDirection\r\n    };\r\n    if (isDataSource(this.dataSource)) {\r\n      dataStream = this.dataSource.connect();\r\n    }\r\n\r\n    if (dataStream) {\r\n      this._dataSubscription = dataStream.pipe(takeUntil(this.destroy$)).subscribe(data => {\r\n        graphOptions = {\r\n          rankDirection: this.vtsRankDirection,\r\n          expanded: this.vtsGraphData.expansionModel.selected\r\n        };\r\n        this.drawGraph(data, graphOptions, this.vtsAutoSize).then(() => {\r\n          this.cdr.detectChanges();\r\n        });\r\n      });\r\n    } else {\r\n      throw Error(`A valid data source must be provided.`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get renderInfo and prepare some data\r\n   * @param data\r\n   * @param options\r\n   * @private\r\n   */\r\n  private buildGraphInfo(data: VtsGraphDataDef, options: VtsGraphOption): VtsGraphGroupNode {\r\n    this.parseInfo(data);\r\n    const renderInfo = buildGraph(data, options, this.layoutSetting) as VtsGraphGroupNode;\r\n    const dig = (nodes: Array<VtsGraphNode | VtsGraphGroupNode>): void => {\r\n      nodes.forEach(node => {\r\n        if (node.type === 1 && this.mapOfNodeAttr.hasOwnProperty(node.name)) {\r\n          Object.assign(node, this.mapOfNodeAttr[node.name]);\r\n        } else if (node.type === 0) {\r\n          (node as VtsGraphGroupNode).edges.forEach(edge => {\r\n            if (this.mapOfEdgeAttr.hasOwnProperty(`${edge.v}-${edge.w}`)) {\r\n              Object.assign(edge, this.mapOfEdgeAttr[`${edge.v}-${edge.w}`]);\r\n            }\r\n          });\r\n          dig(node.nodes);\r\n        }\r\n      });\r\n    };\r\n    dig(renderInfo.nodes);\r\n    // Assign data to edges of root graph\r\n    renderInfo.edges.forEach(edge => {\r\n      if (this.mapOfEdgeAttr.hasOwnProperty(`${edge.v}-${edge.w}`)) {\r\n        Object.assign(edge, this.mapOfEdgeAttr[`${edge.v}-${edge.w}`]);\r\n      }\r\n    });\r\n    return renderInfo;\r\n  }\r\n\r\n  /**\r\n   * Play with animation\r\n   * @private\r\n   */\r\n  private makeNodesAnimation(): Observable<void> {\r\n    return forkJoin(...this.listOfNodeComponent.map(node => node.makeAnimation())).pipe(\r\n      finalize(() => {\r\n        this.cdr.detectChanges();\r\n      })\r\n    );\r\n  }\r\n\r\n  private parseInfo(data: VtsGraphDataDef): void {\r\n    data.nodes.forEach(n => {\r\n      this.mapOfNodeAttr[n.id] = n;\r\n    });\r\n    data.edges.forEach(e => {\r\n      this.mapOfEdgeAttr[`${e.v}-${e.w}`] = e;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Merge config with user inputs\r\n   * @param config\r\n   * @private\r\n   */\r\n  private mergeConfig(config: VtsGraphLayoutConfig): VtsLayoutSetting {\r\n    const graphMeta = config?.layout || {};\r\n    const subSceneMeta = config?.subScene || {};\r\n    const defaultNodeMeta = config?.defaultNode || {};\r\n    const defaultCompoundNodeMeta = config?.defaultCompoundNode || {};\r\n    const bridge = VTS_GRAPH_LAYOUT_SETTING.nodeSize.bridge;\r\n\r\n    const graph: VtsLayoutSetting['graph'] = {\r\n      meta: { ...VTS_GRAPH_LAYOUT_SETTING.graph.meta, ...graphMeta }\r\n    };\r\n    const subScene: VtsLayoutSetting['subScene'] = {\r\n      meta: { ...VTS_GRAPH_LAYOUT_SETTING.subScene.meta, ...subSceneMeta }\r\n    };\r\n    const nodeSize: VtsLayoutSetting['nodeSize'] = {\r\n      meta: {\r\n        ...VTS_GRAPH_LAYOUT_SETTING.nodeSize.meta,\r\n        ...defaultCompoundNodeMeta\r\n      },\r\n      node: { ...VTS_GRAPH_LAYOUT_SETTING.nodeSize.node, ...defaultNodeMeta },\r\n      bridge\r\n    };\r\n\r\n    return { graph, subScene, nodeSize };\r\n  }\r\n}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { VtsNoAnimationModule } from '@vts-voffice/ng-vts/core/no-animation';\r\nimport { VtsIconModule } from '@vts-voffice/ng-vts/icon';\r\nimport { VtsSpinModule } from '@vts-voffice/ng-vts/spin';\r\n\r\nimport { VtsGraphDefsComponent } from './graph-defs.component';\r\nimport { VtsGraphEdgeComponent } from './graph-edge.component';\r\nimport { VtsGraphEdgeDirective } from './graph-edge.directive';\r\nimport { VtsGraphGroupNodeDirective } from './graph-group-node.directive';\r\nimport { VtsGraphMinimapComponent } from './graph-minimap.component';\r\nimport { VtsGraphNodeComponent } from './graph-node.component';\r\nimport { VtsGraphNodeDirective } from './graph-node.directive';\r\nimport { VtsGraphZoomDirective } from './graph-zoom.directive';\r\nimport { VtsGraphComponent } from './graph.component';\r\n\r\nconst COMPONENTS = [\r\n  VtsGraphComponent,\r\n  VtsGraphMinimapComponent,\r\n  VtsGraphDefsComponent,\r\n  VtsGraphNodeDirective,\r\n  VtsGraphGroupNodeDirective,\r\n  VtsGraphZoomDirective,\r\n  VtsGraphNodeComponent,\r\n  VtsGraphEdgeComponent,\r\n  VtsGraphEdgeDirective\r\n];\r\n\r\n@NgModule({\r\n  declarations: [...COMPONENTS],\r\n  imports: [CommonModule, VtsIconModule, VtsSpinModule, VtsNoAnimationModule],\r\n  exports: [...COMPONENTS]\r\n})\r\nexport class VtsGraphModule {}\r\n","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\r\n */\r\n\r\nexport * from './interface';\r\nexport * from './data-source/base-graph-source';\r\nexport * from './data-source/graph-data-source';\r\nexport * from './graph.module';\r\nexport * from './graph.component';\r\nexport * from './graph-node.directive';\r\nexport * from './graph-group-node.directive';\r\nexport * from './graph-zoom.directive';\r\nexport * from './graph-node.component';\r\nexport * from './graph-edge.component';\r\nexport * from './graph-edge.directive';\r\nexport * from './graph-minimap.component';\r\nexport * from './graph-defs.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","d3Transition","i2.VtsGraphZoomDirective","i4.VtsGraphDefsComponent","i5.VtsGraphNodeComponent","i6.VtsGraphEdgeComponent"],"mappings":"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"}