ng-zorro-antd-graph.mjs.map 97 KB

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