{"version":3,"file":"swimlane-ngx-graph.mjs","sources":["../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/layout-layered-constants.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/id.ts","../../../projects/swimlane/ngx-graph/src/lib/enums/panning.enum.ts","../../../projects/swimlane/ngx-graph/src/lib/enums/mini-map-position.enum.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/throttle.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/color-sets.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/color.helper.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/view-dimensions.helper.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/visibility-observer.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/mouse-wheel.directive.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/transition.model.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/edge-geometry.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/dagre.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/dagreCluster.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/dagreNodesOnly.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/d3ForceDirected.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/colaForceDirected.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/layout.service.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/graph.component.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/graph.component.html","../../../projects/swimlane/ngx-graph/src/lib/graph/graph.module.ts","../../../projects/swimlane/ngx-graph/src/lib/ngx-graph.module.ts","../../../projects/swimlane/ngx-graph/src/public_api.ts","../../../projects/swimlane/ngx-graph/src/swimlane-ngx-graph.ts"],"sourcesContent":["/**\n * Default inter-layer node spacing (px) used when seeding provisional node positions for layered layouts.\n * Align with `elk.layered.spacing.nodeNodeBetweenLayers` when using ELK-style `layoutSettings.properties`.\n */\nexport const LAYERED_NODE_NODE_BETWEEN_LAYERS_PX = 72;\n","const cache = {};\n\n/**\n * Generates a short id.\n *\n */\nexport function id(): string {\n  let newId = ('0000' + ((Math.random() * Math.pow(36, 4)) << 0).toString(36)).slice(-4);\n\n  newId = `a${newId}`;\n\n  // ensure not already used\n  if (!cache[newId]) {\n    cache[newId] = true;\n    return newId;\n  }\n\n  return id();\n}\n","export enum PanningAxis {\n  Both = 'both',\n  Horizontal = 'horizontal',\n  Vertical = 'vertical'\n}\n","export enum MiniMapPosition {\n  UpperLeft = 'UpperLeft',\n  UpperRight = 'UpperRight',\n  LowerLeft = 'LowerLeft',\n  LowerRight = 'LowerRight'\n}\n\nexport interface MiniMapMargin {\n  top: number;\n  right: number;\n  bottom: number;\n  left: number;\n}\n\nexport const DefaultMiniMapMargin = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0\n};\n","/**\n * Throttle a function\n *\n * @export\n * @param {*}      func\n * @param {number} wait\n * @param {*}      [options]\n * @returns\n */\nexport function throttle(context: any, func: any, wait: number, options?: any) {\n  options = options || {};\n  let args: any;\n  let result: any;\n  let timeout = null;\n  let previous = 0;\n\n  function later() {\n    previous = options.leading === false ? 0 : +new Date();\n    timeout = null;\n    result = func.apply(context, args);\n  }\n\n  return function (..._arguments: any[]) {\n    const now = +new Date();\n\n    if (!previous && options.leading === false) {\n      previous = now;\n    }\n\n    const remaining = wait - (now - previous);\n    args = _arguments;\n\n    if (remaining <= 0) {\n      clearTimeout(timeout);\n      timeout = null;\n      previous = now;\n      result = func.apply(context, args);\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining);\n    }\n\n    return result;\n  };\n}\n\n/**\n * Throttle decorator\n *\n *  class MyClass {\n *    throttleable(10)\n *    myFn() { ... }\n *  }\n *\n * @export\n * @param {number} duration\n * @param {*} [options]\n * @returns\n */\nexport function throttleable(duration: number, options?: any) {\n  return function innerDecorator(target, key, descriptor) {\n    return {\n      configurable: true,\n      enumerable: descriptor.enumerable,\n      get: function getter() {\n        Object.defineProperty(this, key, {\n          configurable: true,\n          enumerable: descriptor.enumerable,\n          value: throttle(this, descriptor.value, duration, options)\n        });\n\n        return this[key];\n      }\n    };\n  };\n}\n","export const colorSets = [\n  {\n    name: 'vivid',\n    selectable: true,\n    group: 'Ordinal',\n    domain: [\n      '#647c8a',\n      '#3f51b5',\n      '#2196f3',\n      '#00b862',\n      '#afdf0a',\n      '#a7b61a',\n      '#f3e562',\n      '#ff9800',\n      '#ff5722',\n      '#ff4514'\n    ]\n  },\n  {\n    name: 'natural',\n    selectable: true,\n    group: 'Ordinal',\n    domain: [\n      '#bf9d76',\n      '#e99450',\n      '#d89f59',\n      '#f2dfa7',\n      '#a5d7c6',\n      '#7794b1',\n      '#afafaf',\n      '#707160',\n      '#ba9383',\n      '#d9d5c3'\n    ]\n  },\n  {\n    name: 'cool',\n    selectable: true,\n    group: 'Ordinal',\n    domain: [\n      '#a8385d',\n      '#7aa3e5',\n      '#a27ea8',\n      '#aae3f5',\n      '#adcded',\n      '#a95963',\n      '#8796c0',\n      '#7ed3ed',\n      '#50abcc',\n      '#ad6886'\n    ]\n  },\n  {\n    name: 'fire',\n    selectable: true,\n    group: 'Ordinal',\n    domain: ['#ff3d00', '#bf360c', '#ff8f00', '#ff6f00', '#ff5722', '#e65100', '#ffca28', '#ffab00']\n  },\n  {\n    name: 'solar',\n    selectable: true,\n    group: 'Continuous',\n    domain: [\n      '#fff8e1',\n      '#ffecb3',\n      '#ffe082',\n      '#ffd54f',\n      '#ffca28',\n      '#ffc107',\n      '#ffb300',\n      '#ffa000',\n      '#ff8f00',\n      '#ff6f00'\n    ]\n  },\n  {\n    name: 'air',\n    selectable: true,\n    group: 'Continuous',\n    domain: [\n      '#e1f5fe',\n      '#b3e5fc',\n      '#81d4fa',\n      '#4fc3f7',\n      '#29b6f6',\n      '#03a9f4',\n      '#039be5',\n      '#0288d1',\n      '#0277bd',\n      '#01579b'\n    ]\n  },\n  {\n    name: 'aqua',\n    selectable: true,\n    group: 'Continuous',\n    domain: [\n      '#e0f7fa',\n      '#b2ebf2',\n      '#80deea',\n      '#4dd0e1',\n      '#26c6da',\n      '#00bcd4',\n      '#00acc1',\n      '#0097a7',\n      '#00838f',\n      '#006064'\n    ]\n  },\n  {\n    name: 'flame',\n    selectable: false,\n    group: 'Ordinal',\n    domain: [\n      '#A10A28',\n      '#D3342D',\n      '#EF6D49',\n      '#FAAD67',\n      '#FDDE90',\n      '#DBED91',\n      '#A9D770',\n      '#6CBA67',\n      '#2C9653',\n      '#146738'\n    ]\n  },\n  {\n    name: 'ocean',\n    selectable: false,\n    group: 'Ordinal',\n    domain: [\n      '#1D68FB',\n      '#33C0FC',\n      '#4AFFFE',\n      '#AFFFFF',\n      '#FFFC63',\n      '#FDBD2D',\n      '#FC8A25',\n      '#FA4F1E',\n      '#FA141B',\n      '#BA38D1'\n    ]\n  },\n  {\n    name: 'forest',\n    selectable: false,\n    group: 'Ordinal',\n    domain: [\n      '#55C22D',\n      '#C1F33D',\n      '#3CC099',\n      '#AFFFFF',\n      '#8CFC9D',\n      '#76CFFA',\n      '#BA60FB',\n      '#EE6490',\n      '#C42A1C',\n      '#FC9F32'\n    ]\n  },\n  {\n    name: 'horizon',\n    selectable: false,\n    group: 'Ordinal',\n    domain: [\n      '#2597FB',\n      '#65EBFD',\n      '#99FDD0',\n      '#FCEE4B',\n      '#FEFCFA',\n      '#FDD6E3',\n      '#FCB1A8',\n      '#EF6F7B',\n      '#CB96E8',\n      '#EFDEE0'\n    ]\n  },\n  {\n    name: 'neons',\n    selectable: false,\n    group: 'Ordinal',\n    domain: [\n      '#FF3333',\n      '#FF33FF',\n      '#CC33FF',\n      '#0000FF',\n      '#33CCFF',\n      '#33FFFF',\n      '#33FF66',\n      '#CCFF33',\n      '#FFCC00',\n      '#FF6600'\n    ]\n  },\n  {\n    name: 'picnic',\n    selectable: false,\n    group: 'Ordinal',\n    domain: [\n      '#FAC51D',\n      '#66BD6D',\n      '#FAA026',\n      '#29BB9C',\n      '#E96B56',\n      '#55ACD2',\n      '#B7332F',\n      '#2C83C9',\n      '#9166B8',\n      '#92E7E8'\n    ]\n  },\n  {\n    name: 'night',\n    selectable: false,\n    group: 'Ordinal',\n    domain: [\n      '#2B1B5A',\n      '#501356',\n      '#183356',\n      '#28203F',\n      '#391B3C',\n      '#1E2B3C',\n      '#120634',\n      '#2D0432',\n      '#051932',\n      '#453080',\n      '#75267D',\n      '#2C507D',\n      '#4B3880',\n      '#752F7D',\n      '#35547D'\n    ]\n  },\n  {\n    name: 'nightLights',\n    selectable: false,\n    group: 'Ordinal',\n    domain: [\n      '#4e31a5',\n      '#9c25a7',\n      '#3065ab',\n      '#57468b',\n      '#904497',\n      '#46648b',\n      '#32118d',\n      '#a00fb3',\n      '#1052a2',\n      '#6e51bd',\n      '#b63cc3',\n      '#6c97cb',\n      '#8671c1',\n      '#b455be',\n      '#7496c3'\n    ]\n  }\n];\n","import { range } from 'd3-array';\nimport { scaleBand, scaleLinear, scaleOrdinal, scaleQuantile } from 'd3-scale';\n\nimport { colorSets } from './color-sets';\n\nexport class ColorHelper {\n  scale: any;\n  colorDomain: any[];\n  domain: any;\n  customColors: any;\n\n  constructor(scheme, domain, customColors?) {\n    if (typeof scheme === 'string') {\n      scheme = colorSets.find(cs => {\n        return cs.name === scheme;\n      });\n    }\n    this.colorDomain = scheme.domain;\n    this.domain = domain;\n    this.customColors = customColors;\n\n    this.scale = this.generateColorScheme(scheme, this.domain);\n  }\n\n  generateColorScheme(scheme, domain) {\n    if (typeof scheme === 'string') {\n      scheme = colorSets.find(cs => {\n        return cs.name === scheme;\n      });\n    }\n    return scaleOrdinal().range(scheme.domain).domain(domain);\n  }\n\n  getColor(value) {\n    if (value === undefined || value === null) {\n      throw new Error('Value can not be null');\n    }\n\n    if (typeof this.customColors === 'function') {\n      return this.customColors(value);\n    }\n\n    const formattedValue = value.toString();\n    let found: any; // todo type customColors\n    if (this.customColors && this.customColors.length > 0) {\n      found = this.customColors.find(mapping => {\n        return mapping.name.toLowerCase() === formattedValue.toLowerCase();\n      });\n    }\n\n    if (found) {\n      return found.value;\n    } else {\n      return this.scale(value);\n    }\n  }\n}\n","export interface ViewDimensions {\n  width: number;\n  height: number;\n}\n\nexport function calculateViewDimensions({ width, height }): ViewDimensions {\n  let chartWidth = width;\n  let chartHeight = height;\n\n  chartWidth = Math.max(0, chartWidth);\n  chartHeight = Math.max(0, chartHeight);\n\n  return {\n    width: Math.floor(chartWidth),\n    height: Math.floor(chartHeight)\n  };\n}\n","import { Output, EventEmitter, NgZone, Directive, ElementRef } from '@angular/core';\n\n/**\n * Visibility Observer\n */\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: 'visibility-observer'\n})\nexport class VisibilityObserver {\n  @Output() visible: EventEmitter<any> = new EventEmitter();\n\n  timeout: any;\n  isVisible: boolean = false;\n\n  constructor(\n    private element: ElementRef,\n    private zone: NgZone\n  ) {\n    this.runCheck();\n  }\n\n  destroy(): void {\n    clearTimeout(this.timeout);\n  }\n\n  onVisibilityChange(): void {\n    // trigger zone recalc for columns\n    this.zone.run(() => {\n      this.isVisible = true;\n      this.visible.emit(true);\n    });\n  }\n\n  runCheck(): void {\n    const check = () => {\n      if (!this.element) {\n        return;\n      }\n\n      // https://davidwalsh.name/offsetheight-visibility\n      const { offsetHeight, offsetWidth } = this.element.nativeElement;\n\n      if (offsetHeight && offsetWidth) {\n        clearTimeout(this.timeout);\n        this.onVisibilityChange();\n      } else {\n        clearTimeout(this.timeout);\n        this.zone.runOutsideAngular(() => {\n          this.timeout = setTimeout(() => check(), 100);\n        });\n      }\n    };\n\n    this.zone.runOutsideAngular(() => {\n      this.timeout = setTimeout(() => check());\n    });\n  }\n}\n","import { Directive, HostListener, output } from '@angular/core';\n\n/**\n * Mousewheel directive\n * https://github.com/SodhanaLibrary/angular2-examples/blob/master/app/mouseWheelDirective/mousewheel.directive.ts\n *\n * @export\n */\n// tslint:disable-next-line: directive-selector\n@Directive({\n  selector: '[mouseWheel]'\n})\nexport class MouseWheelDirective {\n  readonly mouseWheelUp = output<WheelEvent>();\n  readonly mouseWheelDown = output<WheelEvent>();\n\n  @HostListener('mousewheel', ['$event'])\n  onMouseWheelChrome(event: any): void {\n    this.mouseWheelFunc(event);\n  }\n\n  @HostListener('DOMMouseScroll', ['$event'])\n  onMouseWheelFirefox(event: any): void {\n    this.mouseWheelFunc(event);\n  }\n\n  @HostListener('wheel', ['$event'])\n  onWheel(event: any): void {\n    this.mouseWheelFunc(event);\n  }\n\n  @HostListener('onmousewheel', ['$event'])\n  onMouseWheelIE(event: any): void {\n    this.mouseWheelFunc(event);\n  }\n\n  mouseWheelFunc(event: any): void {\n    if (window.event) {\n      event = window.event;\n    }\n\n    const delta: number = Math.max(-1, Math.min(1, event.wheelDelta || -event.detail || event.deltaY || event.deltaX));\n    // Firefox don't have native support for wheel event, as a result delta values are reverse\n    const isWheelMouseUp: boolean = event.wheelDelta ? delta > 0 : delta < 0;\n    const isWheelMouseDown: boolean = event.wheelDelta ? delta < 0 : delta > 0;\n    if (isWheelMouseUp) {\n      this.mouseWheelUp.emit(event);\n    } else if (isWheelMouseDown) {\n      this.mouseWheelDown.emit(event);\n    }\n\n    // for IE\n    event.returnValue = false;\n\n    // for Chrome and Firefox\n    if (event.preventDefault) {\n      event.preventDefault();\n    }\n  }\n}\n","import * as d3ease from 'd3-ease';\n\n/** Named easings mapped to d3-ease factories (same as layout morph animations). */\nexport type GraphTransitionEasingName = 'linear' | 'cubicIn' | 'cubicOut' | 'cubicInOut' | 'quadInOut' | 'elasticOut';\n\nexport type GraphLayoutTransitionMode = 'none' | 'instant' | 'tween';\n\n/**\n * Where **previous** `translate(tx,ty)` values come from before the graph model is replaced (layout morph).\n * Applies to **nodes, clusters, and compound nodes** equally (`g.node-group[id]` under `.graph.chart`).\n * Does **not** affect cluster/compound **size** morph: prior width/height for that tween always come from the\n * graph model at capture time, not from the DOM.\n */\nexport type LayoutMorphPreviousSource =\n  /** Read `transform` on the graph model only (backward compatible). */\n  | 'model-transform'\n  /** Read `g.node-group[id]` under `.graph.chart` (excludes minimap). */\n  | 'dom-svg'\n  /** DOM first; if translate is near zero, use model `position` / `transform` (see `degenerateEpsilon`). */\n  | 'dom-with-model-fallback';\n\n/**\n * Options for capturing prior node-group translates when `mode: 'tween'`.\n * With `scope: 'full'`, the same unified rAF tween drives **nodes, clusters, and compounds** (translate lerp plus,\n * for clusters/compounds only, optional width/height lerp from model snapshots).\n */\nexport interface LayoutMorphCapture {\n  /**\n   * Default `model-transform` (backward compatible).\n   * DOM modes read the same `g.node-group` elements used for regular nodes; clusters and compounds use the same\n   * `class=\"node-group\"` + `id` wiring in the graph template.\n   */\n  previousSource?: LayoutMorphPreviousSource;\n  /** Used with `dom-with-model-fallback`. Default `1e-3`. */\n  degenerateEpsilon?: number;\n  /**\n   * Order when resolving a node id on the **model** graph for fallback math.\n   * Default `['compound', 'cluster', 'node']`.\n   */\n  modelResolutionOrder?: Array<'compound' | 'cluster' | 'node'>;\n  /**\n   * After `tick()`, for `scope: 'full'` only, recompute `layoutAnimationTargets` from layout `position` (and\n   * `dimension` via `centerNodesOnPositionChange`) for every id already in the target map — **including clusters and\n   * compounds**. Runs before transforms are reset to “previous” for the tween, so endpoints match the new layout.\n   * Default false.\n   */\n  syncTargetsFromPositionAfterTick?: boolean;\n  /**\n   * When true: new **node** ids also get `previousLayoutTransforms` snapped to the current target so they do not tween\n   * from a missing or bogus origin; plus degenerate-stable snap for clusters/compounds (see `degenerateEpsilon`).\n   * Role changes (same id moving between `nodes` / `clusters` / `compoundNodes`) and **new** cluster/compound ids snap\n   * even when this flag is false. Default false.\n   */\n  snapAddedNodeIds?: boolean;\n}\n\nexport const DEFAULT_LAYOUT_MORPH_CAPTURE: LayoutMorphCapture = {\n  previousSource: 'model-transform',\n  degenerateEpsilon: 1e-3,\n  modelResolutionOrder: ['compound', 'cluster', 'node'],\n  syncTargetsFromPositionAfterTick: false,\n  snapAddedNodeIds: false\n};\n\nexport function mergeLayoutMorphCapture(partial: LayoutMorphCapture | null | undefined): LayoutMorphCapture {\n  return { ...DEFAULT_LAYOUT_MORPH_CAPTURE, ...partial };\n}\n\n/**\n * Layout transition after graph model / layout output changes.\n * - `none` / `instant`: keep prior snapshot for continuity, then snap to final layout in one frame (no rAF morph).\n * - `tween`: interpolate node-group translates and edge paths over `durationMs` with `easing`. Full scope tweens\n *   **nodes, clusters, and compounds** together; cluster/compound rects can also tween width/height from prior model\n *   dimensions to the new layout’s dimensions (`scope: 'additive'` skips positional and size tweens on groups).\n */\nexport interface GraphLayoutTransition {\n  mode: GraphLayoutTransitionMode;\n  /** When `tween`, only new ids interpolate in additive mode; stable nodes/edges snap. */\n  scope: 'full' | 'additive';\n  durationMs: number;\n  easing: GraphTransitionEasingName | ((t: number) => number);\n  /** When `mode: 'tween'`, how **prior translates** are captured; see {@link LayoutMorphPreviousSource}. */\n  morphCapture?: LayoutMorphCapture;\n}\n\nexport const DEFAULT_GRAPH_LAYOUT_TRANSITION: GraphLayoutTransition = {\n  mode: 'instant',\n  scope: 'full',\n  durationMs: 500,\n  easing: 'cubicInOut',\n  morphCapture: mergeLayoutMorphCapture(undefined)\n};\n\n/** Programmatic viewport pan (panTo, center, minimap, zoomToFit autoCenter): optional eased translation only; zoom scale unchanged. */\nexport interface ViewportTranslationTransition {\n  enabled: boolean;\n  durationMs: number;\n  easing: GraphTransitionEasingName | ((t: number) => number);\n}\n\nexport const DEFAULT_VIEWPORT_TRANSLATION_TRANSITION: ViewportTranslationTransition = {\n  enabled: false,\n  durationMs: 280,\n  easing: 'cubicOut'\n};\n\n/** Optional flair during layout tween only (default off). */\nexport interface LayoutTransitionEffect {\n  kind: 'none' | 'perspectiveFlip' | 'rotate';\n  /** Max rotation in degrees (perspective flip uses rotateX). */\n  peakDegrees?: number;\n  /** For `rotate`: pivot in graph coordinates. */\n  rotatePivot?: 'graphCenter' | 'viewportCenter' | { nodeId: string };\n}\n\nexport const DEFAULT_LAYOUT_TRANSITION_EFFECT: LayoutTransitionEffect = {\n  kind: 'none',\n  peakDegrees: 12\n};\n\nexport function resolveGraphTransitionEasing(\n  easing: GraphLayoutTransition['easing'] | ViewportTranslationTransition['easing']\n): (t: number) => number {\n  if (typeof easing === 'function') {\n    return easing;\n  }\n  switch (easing) {\n    case 'linear':\n      return d3ease.easeLinear;\n    case 'cubicIn':\n      return d3ease.easeCubicIn;\n    case 'cubicOut':\n      return d3ease.easeCubicOut;\n    case 'quadInOut':\n      return d3ease.easeQuadInOut;\n    case 'elasticOut':\n      return d3ease.easeElasticOut;\n    case 'cubicInOut':\n    default:\n      return d3ease.easeCubicInOut;\n  }\n}\n\n/**\n * Resolves final layout transition from the graph `transitionAfterChanges` input merged with defaults.\n * When unset or empty, returns {@link DEFAULT_GRAPH_LAYOUT_TRANSITION} (`mode: 'instant'`).\n */\nexport function mergeGraphLayoutTransition(\n  explicit: Partial<GraphLayoutTransition> | null | undefined\n): GraphLayoutTransition {\n  const baseMorph = mergeLayoutMorphCapture(DEFAULT_GRAPH_LAYOUT_TRANSITION.morphCapture);\n  const base: GraphLayoutTransition = { ...DEFAULT_GRAPH_LAYOUT_TRANSITION, morphCapture: baseMorph };\n  if (explicit != null) {\n    const defined = Object.fromEntries(\n      Object.entries(explicit).filter(([, v]) => v !== undefined)\n    ) as Partial<GraphLayoutTransition>;\n    if (Object.keys(defined).length > 0) {\n      const { morphCapture: morphPartial, ...rest } = defined;\n      return {\n        ...base,\n        ...rest,\n        morphCapture: mergeLayoutMorphCapture(morphPartial ?? base.morphCapture)\n      };\n    }\n  }\n  return base;\n}\n\nexport function mergeViewportTransition(\n  explicit: Partial<ViewportTranslationTransition> | null | undefined\n): ViewportTranslationTransition {\n  if (explicit != null) {\n    const defined = Object.fromEntries(\n      Object.entries(explicit).filter(([, v]) => v !== undefined)\n    ) as Partial<ViewportTranslationTransition>;\n    if (Object.keys(defined).length > 0) {\n      return { ...DEFAULT_VIEWPORT_TRANSLATION_TRANSITION, ...defined };\n    }\n  }\n  return { ...DEFAULT_VIEWPORT_TRANSLATION_TRANSITION };\n}\n\nexport function mergeLayoutEffect(\n  explicit: Partial<LayoutTransitionEffect> | null | undefined\n): LayoutTransitionEffect {\n  if (explicit != null) {\n    const defined = Object.fromEntries(\n      Object.entries(explicit).filter(([, v]) => v !== undefined)\n    ) as Partial<LayoutTransitionEffect>;\n    if (Object.keys(defined).length > 0) {\n      return { ...DEFAULT_LAYOUT_TRANSITION_EFFECT, ...defined };\n    }\n  }\n  return { ...DEFAULT_LAYOUT_TRANSITION_EFFECT };\n}\n","import type { Node } from '../../models/node.model';\n\nconst AXIS_EPS = 1e-3;\n\n/** Dagre `rankdir` string (e.g. LR, TB). */\nexport type DagreRankdir = string | undefined;\n\n/** ELK `elk.direction` value (e.g. RIGHT, DOWN). */\nexport type ElkDirection = string | undefined;\n\nexport interface RankOrderAxes {\n  rankAxis: 'x' | 'y';\n  orderAxis: 'x' | 'y';\n}\n\n/**\n * Maps Dagre `rankdir` to rank (layer) vs order (within layer) axes, matching\n * {@link DagreNodesOnlyLayout} / graphlib conventions.\n */\nexport function rankOrderAxesFromDagreRankdir(rankdir: DagreRankdir): RankOrderAxes {\n  const r = rankdir ?? 'LR';\n  const rankAxis: 'x' | 'y' = r === 'BT' || r === 'TB' ? 'y' : 'x';\n  const orderAxis: 'x' | 'y' = rankAxis === 'y' ? 'x' : 'y';\n  return { rankAxis, orderAxis };\n}\n\n/**\n * Maps ELK layered `elk.direction` to rank vs order axes for drag-time edge ports.\n */\nexport function rankOrderAxesFromElkDirection(direction: ElkDirection): RankOrderAxes {\n  const u = (direction ?? 'DOWN').toUpperCase();\n  if (u === 'LEFT' || u === 'RIGHT') {\n    return { rankAxis: 'x', orderAxis: 'y' };\n  }\n  return { rankAxis: 'y', orderAxis: 'x' };\n}\n\nexport interface DragEdgePointsOptions {\n  curveDistance: number;\n  rankAxis: 'x' | 'y';\n  orderAxis: 'x' | 'y';\n}\n\n/** Drag-time edge style for Dagre-family layouts (`layoutSettings` on `ngx-graph`). */\nexport type DagreDragEdgeStyle = 'auto' | 'orthogonal' | 'smooth' | 'straight';\n\n/** Resolved style after `auto` heuristic. */\nexport type ResolvedDagreDragStyle = 'orthogonal' | 'smooth' | 'straight';\n\nfunction withRankOrder(\n  rankAxis: 'x' | 'y',\n  orderAxis: 'x' | 'y',\n  rank: number,\n  order: number\n): { x: number; y: number } {\n  return rankAxis === 'x' ? { x: rank, y: order } : { x: order, y: rank };\n}\n\n/**\n * Rank-facing attachment points (centers projected to box faces toward the other node),\n * matching the endpoints used by {@link edgePointsAfterDrag}.\n */\nexport function rankFacePortPoints(\n  source: Node,\n  target: Node,\n  axes: RankOrderAxes\n): [{ x: number; y: number }, { x: number; y: number }] {\n  const { rankAxis, orderAxis } = axes;\n  const sp = source.position ?? { x: 0, y: 0 };\n  const tp = target.position ?? { x: 0, y: 0 };\n  const sw = source.dimension?.width ?? 0;\n  const sh = source.dimension?.height ?? 0;\n  const tw = target.dimension?.width ?? 0;\n  const th = target.dimension?.height ?? 0;\n  const halfRankS = (rankAxis === 'x' ? sw : sh) / 2;\n  const halfRankT = (rankAxis === 'x' ? tw : th) / 2;\n  const dir = sp[rankAxis] <= tp[rankAxis] ? -1 : 1;\n  const sRank = sp[rankAxis] - dir * halfRankS;\n  const tRank = tp[rankAxis] + dir * halfRankT;\n  const sOrd = sp[orderAxis];\n  const tOrd = tp[orderAxis];\n  return [withRankOrder(rankAxis, orderAxis, sRank, sOrd), withRankOrder(rankAxis, orderAxis, tRank, tOrd)];\n}\n\n/** Axis-aligned Manhattan path (one bend) between two ports. */\nexport function orthogonalManhattanPolyline(\n  p0: { x: number; y: number },\n  p1: { x: number; y: number }\n): Array<{ x: number; y: number }> {\n  if (Math.abs(p0.x - p1.x) < AXIS_EPS || Math.abs(p0.y - p1.y) < AXIS_EPS) {\n    return [p0, p1];\n  }\n  return [p0, { x: p1.x, y: p0.y }, p1];\n}\n\n/** Normalize ELK `elk.edgeRouting` for branching. */\nexport function normalizeElkEdgeRouting(value: string | undefined): 'SPLINES' | 'ORTHOGONAL' | 'POLYLINE' | 'UNKNOWN' {\n  const u = (value ?? '').toUpperCase();\n  if (u.includes('SPLINE') || u === 'SPLINES') {\n    return 'SPLINES';\n  }\n  if (u === 'ORTHOGONAL') {\n    return 'ORTHOGONAL';\n  }\n  if (u === 'POLYLINE') {\n    return 'POLYLINE';\n  }\n  return 'UNKNOWN';\n}\n\nfunction segmentAxisAligned(a: { x: number; y: number }, b: { x: number; y: number }): boolean {\n  return Math.abs(a.x - b.x) < AXIS_EPS || Math.abs(a.y - b.y) < AXIS_EPS;\n}\n\n/**\n * Classify last laid-out polyline for `dragEdgeStyle: 'auto'`.\n */\nexport function inferDragStyleFromPoints(\n  points: Array<{ x: number; y: number }> | undefined | null\n): ResolvedDagreDragStyle {\n  if (!points || points.length < 2) {\n    return 'smooth';\n  }\n  if (points.length === 2) {\n    return 'straight';\n  }\n  let allOrtho = true;\n  for (let i = 0; i < points.length - 1; i++) {\n    if (!segmentAxisAligned(points[i], points[i + 1])) {\n      allOrtho = false;\n      break;\n    }\n  }\n  if (allOrtho) {\n    return 'orthogonal';\n  }\n  if (points.length >= 3) {\n    return 'smooth';\n  }\n  return 'straight';\n}\n\n/**\n * Resolves `auto` using prior `edge.points`, otherwise returns the explicit style.\n */\nexport function resolveDagreDragEdgeStyle(\n  dragEdgeStyle: DagreDragEdgeStyle | undefined,\n  priorPoints: Array<{ x: number; y: number }> | undefined\n): ResolvedDagreDragStyle {\n  const mode = dragEdgeStyle ?? 'auto';\n  if (mode === 'auto') {\n    return inferDragStyleFromPoints(priorPoints);\n  }\n  return mode;\n}\n\n/**\n * Builds drag polyline for Dagre / DagreCluster / DagreNodesOnly from resolved style.\n * `smooth` uses {@link edgePointsAfterDrag} (rank-offset interior points) for curved spline-style strokes;\n * `orthogonal` uses {@link orthogonalManhattanPolyline}; `straight` uses two port points only.\n */\nexport function dagreDragPolyline(\n  source: Node,\n  target: Node,\n  axes: RankOrderAxes,\n  curveDistance: number,\n  style: ResolvedDagreDragStyle\n): Array<{ x: number; y: number }> {\n  if (style === 'straight') {\n    const [p0, p1] = rankFacePortPoints(source, target, axes);\n    return [p0, p1];\n  }\n  if (style === 'orthogonal') {\n    const [p0, p1] = rankFacePortPoints(source, target, axes);\n    return orthogonalManhattanPolyline(p0, p1);\n  }\n  return edgePointsAfterDrag(source, target, { curveDistance, ...axes });\n}\n\n/**\n * Drag-time polyline for ElkLayout from normalized `elk.edgeRouting`.\n * `UNKNOWN` defaults to smooth spline-style segments (four-point rank path).\n */\nexport function elkDragPolyline(\n  source: Node,\n  target: Node,\n  axes: RankOrderAxes,\n  curveDistance: number,\n  routing: ReturnType<typeof normalizeElkEdgeRouting>\n): Array<{ x: number; y: number }> {\n  const mode = routing === 'UNKNOWN' ? 'SPLINES' : routing;\n  const [p0, p1] = rankFacePortPoints(source, target, axes);\n  if (mode === 'ORTHOGONAL' || mode === 'POLYLINE') {\n    return orthogonalManhattanPolyline(p0, p1);\n  }\n  return edgePointsAfterDrag(source, target, { curveDistance, ...axes });\n}\n\n/**\n * Builds a 4-point polyline for interactive drag updates: ports on the rank-facing\n * sides of each node box (using node centers + dimensions), plus two interior\n * control points so d3 curve generators (e.g. `curveBasis`) have knots to bend.\n *\n * Aligns with {@link DagreNodesOnlyLayout.updateEdge}, with explicit rank/order axes\n * so LR/RL/TB/BT and ELK directions attach on the correct face.\n */\nexport function edgePointsAfterDrag(\n  source: Node,\n  target: Node,\n  options: DragEdgePointsOptions\n): Array<{ x: number; y: number }> {\n  const { rankAxis, orderAxis, curveDistance } = options;\n  const sp = source.position ?? { x: 0, y: 0 };\n  const tp = target.position ?? { x: 0, y: 0 };\n  const dir = sp[rankAxis] <= tp[rankAxis] ? -1 : 1;\n  const cd = Math.max(0, curveDistance);\n  const axes = { rankAxis, orderAxis };\n  const [startingPoint, endingPoint] = rankFacePortPoints(source, target, axes);\n\n  return [\n    startingPoint,\n    withRankOrder(rankAxis, orderAxis, startingPoint[rankAxis] - dir * cd, startingPoint[orderAxis]),\n    withRankOrder(rankAxis, orderAxis, endingPoint[rankAxis] + dir * cd, endingPoint[orderAxis]),\n    endingPoint\n  ];\n}\n\n/**\n * When `style` is `linear`, returns only the two port points (straight segment).\n * Otherwise returns the full 4-point drag polyline.\n */\nexport function edgePointsForDragMode(\n  source: Node,\n  target: Node,\n  options: DragEdgePointsOptions & { style?: 'linear' | 'smooth' }\n): Array<{ x: number; y: number }> {\n  const pts = edgePointsAfterDrag(source, target, options);\n  if (options.style === 'linear') {\n    return [pts[0], pts[pts.length - 1]];\n  }\n  return pts;\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { id } from '../../utils/id';\nimport * as dagre from 'dagre';\nimport { Edge } from '../../models/edge.model';\nimport {\n  dagreDragPolyline,\n  rankOrderAxesFromDagreRankdir,\n  resolveDagreDragEdgeStyle,\n  type DagreDragEdgeStyle\n} from './edge-geometry';\n\nexport enum Orientation {\n  LEFT_TO_RIGHT = 'LR',\n  RIGHT_TO_LEFT = 'RL',\n  TOP_TO_BOTTOM = 'TB',\n  BOTTOM_TO_TOM = 'BT'\n}\nexport enum Alignment {\n  CENTER = 'C',\n  UP_LEFT = 'UL',\n  UP_RIGHT = 'UR',\n  DOWN_LEFT = 'DL',\n  DOWN_RIGHT = 'DR'\n}\n\nexport interface DagreSettings {\n  orientation?: Orientation;\n  marginX?: number;\n  marginY?: number;\n  edgePadding?: number;\n  rankPadding?: number;\n  nodePadding?: number;\n  align?: Alignment;\n  acyclicer?: 'greedy' | undefined;\n  ranker?: 'network-simplex' | 'tight-tree' | 'longest-path';\n  multigraph?: boolean;\n  compound?: boolean;\n  /** Offset along rank axis for drag-time edge control points (default 20). */\n  curveDistance?: number;\n  /**\n   * How to rebuild edge polylines while dragging: `auto` infers from the last laid-out `edge.points`,\n   * or set explicitly (`orthogonal` / `smooth` / `straight`).\n   */\n  dragEdgeStyle?: DagreDragEdgeStyle;\n}\n\nexport class DagreLayout implements Layout {\n  defaultSettings: DagreSettings = {\n    orientation: Orientation.LEFT_TO_RIGHT,\n    marginX: 20,\n    marginY: 20,\n    edgePadding: 100,\n    rankPadding: 100,\n    nodePadding: 50,\n    curveDistance: 20,\n    multigraph: true,\n    compound: true\n  };\n  settings: DagreSettings = {};\n\n  dagreGraph: any;\n  dagreNodes: any;\n  dagreEdges: any;\n\n  run(graph: Graph): Graph {\n    this.createDagreGraph(graph);\n    dagre.layout(this.dagreGraph);\n\n    graph.edgeLabels = this.dagreGraph._edgeLabels;\n\n    for (const dagreNodeId in this.dagreGraph._nodes) {\n      const dagreNode = this.dagreGraph._nodes[dagreNodeId];\n      const node = graph.nodes.find(n => n.id === dagreNode.id);\n      node.position = {\n        x: dagreNode.x,\n        y: dagreNode.y\n      };\n      node.dimension = {\n        width: dagreNode.width,\n        height: dagreNode.height\n      };\n    }\n\n    return graph;\n  }\n\n  updateEdge(graph: Graph, edge: Edge): Graph {\n    const sourceNode = graph.nodes.find(n => n.id === edge.source);\n    const targetNode = graph.nodes.find(n => n.id === edge.target);\n    if (!sourceNode?.position || !targetNode?.position) {\n      return graph;\n    }\n    const settings = Object.assign({}, this.defaultSettings, this.settings);\n    const axes = rankOrderAxesFromDagreRankdir(settings.orientation);\n    const curveDistance = settings.curveDistance ?? 20;\n    const resolved = resolveDagreDragEdgeStyle(settings.dragEdgeStyle ?? 'auto', edge.points);\n    edge.points = dagreDragPolyline(sourceNode, targetNode, axes, curveDistance, resolved);\n    return graph;\n  }\n\n  createDagreGraph(graph: Graph): any {\n    const settings = Object.assign({}, this.defaultSettings, this.settings);\n    this.dagreGraph = new dagre.graphlib.Graph({ compound: settings.compound, multigraph: settings.multigraph });\n\n    this.dagreGraph.setGraph({\n      rankdir: settings.orientation,\n      marginx: settings.marginX,\n      marginy: settings.marginY,\n      edgesep: settings.edgePadding,\n      ranksep: settings.rankPadding,\n      nodesep: settings.nodePadding,\n      align: settings.align,\n      acyclicer: settings.acyclicer,\n      ranker: settings.ranker,\n      multigraph: settings.multigraph,\n      compound: settings.compound\n    });\n\n    // Default to assigning a new object as a label for each new edge.\n    this.dagreGraph.setDefaultEdgeLabel(() => {\n      return {\n        /* empty */\n      };\n    });\n\n    this.dagreNodes = graph.nodes.map(n => {\n      const node: any = Object.assign({}, n);\n      node.width = n.dimension.width;\n      node.height = n.dimension.height;\n      node.x = n.position.x;\n      node.y = n.position.y;\n      return node;\n    });\n\n    this.dagreEdges = graph.edges.map(l => {\n      const newLink: any = Object.assign({}, l);\n      if (!newLink.id) {\n        newLink.id = id();\n      }\n      return newLink;\n    });\n\n    for (const node of this.dagreNodes) {\n      if (!node.width) {\n        node.width = 20;\n      }\n      if (!node.height) {\n        node.height = 30;\n      }\n\n      // update dagre\n      this.dagreGraph.setNode(node.id, node);\n    }\n\n    // update dagre\n    for (const edge of this.dagreEdges) {\n      if (settings.multigraph) {\n        this.dagreGraph.setEdge(edge.source, edge.target, edge, edge.id);\n      } else {\n        this.dagreGraph.setEdge(edge.source, edge.target);\n      }\n    }\n\n    return this.dagreGraph;\n  }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { id } from '../../utils/id';\nimport * as dagre from 'dagre';\nimport { Edge } from '../../models/edge.model';\nimport { Node, ClusterNode } from '../../models/node.model';\nimport { DagreSettings, Orientation } from './dagre';\nimport { dagreDragPolyline, rankOrderAxesFromDagreRankdir, resolveDagreDragEdgeStyle } from './edge-geometry';\n\nexport class DagreClusterLayout implements Layout {\n  defaultSettings: DagreSettings = {\n    orientation: Orientation.LEFT_TO_RIGHT,\n    marginX: 20,\n    marginY: 20,\n    edgePadding: 100,\n    rankPadding: 100,\n    nodePadding: 50,\n    curveDistance: 20,\n    multigraph: true,\n    compound: true\n  };\n  settings: DagreSettings = {};\n\n  dagreGraph: any;\n  dagreNodes: Node[];\n  dagreClusters: ClusterNode[];\n  dagreEdges: any;\n\n  run(graph: Graph): Graph {\n    this.createDagreGraph(graph);\n    dagre.layout(this.dagreGraph);\n\n    graph.edgeLabels = this.dagreGraph._edgeLabels;\n\n    const dagreToOutput = node => {\n      const dagreNode = this.dagreGraph._nodes[node.id];\n      return {\n        ...node,\n        position: {\n          x: dagreNode.x,\n          y: dagreNode.y\n        },\n        dimension: {\n          width: dagreNode.width,\n          height: dagreNode.height\n        }\n      };\n    };\n\n    graph.clusters = (graph.clusters || []).map(dagreToOutput);\n    graph.nodes = graph.nodes.map(dagreToOutput);\n\n    return graph;\n  }\n\n  updateEdge(graph: Graph, edge: Edge): Graph {\n    const sourceNode = graph.nodes.find(n => n.id === edge.source);\n    const targetNode = graph.nodes.find(n => n.id === edge.target);\n    if (!sourceNode?.position || !targetNode?.position) {\n      return graph;\n    }\n    const settings = Object.assign({}, this.defaultSettings, this.settings);\n    const axes = rankOrderAxesFromDagreRankdir(settings.orientation);\n    const curveDistance = settings.curveDistance ?? 20;\n    const resolved = resolveDagreDragEdgeStyle(settings.dragEdgeStyle ?? 'auto', edge.points);\n    edge.points = dagreDragPolyline(sourceNode, targetNode, axes, curveDistance, resolved);\n    return graph;\n  }\n\n  createDagreGraph(graph: Graph): any {\n    const settings = Object.assign({}, this.defaultSettings, this.settings);\n    this.dagreGraph = new dagre.graphlib.Graph({ compound: settings.compound, multigraph: settings.multigraph });\n    this.dagreGraph.setGraph({\n      rankdir: settings.orientation,\n      marginx: settings.marginX,\n      marginy: settings.marginY,\n      edgesep: settings.edgePadding,\n      ranksep: settings.rankPadding,\n      nodesep: settings.nodePadding,\n      align: settings.align,\n      acyclicer: settings.acyclicer,\n      ranker: settings.ranker,\n      multigraph: settings.multigraph,\n      compound: settings.compound\n    });\n\n    // Default to assigning a new object as a label for each new edge.\n    this.dagreGraph.setDefaultEdgeLabel(() => {\n      return {\n        /* empty */\n      };\n    });\n\n    this.dagreNodes = graph.nodes.map((n: Node) => {\n      const node: any = Object.assign({}, n);\n      node.width = n.dimension.width;\n      node.height = n.dimension.height;\n      node.x = n.position.x;\n      node.y = n.position.y;\n      return node;\n    });\n\n    this.dagreClusters = graph.clusters || [];\n\n    this.dagreEdges = graph.edges.map(l => {\n      const newLink: any = Object.assign({}, l);\n      if (!newLink.id) {\n        newLink.id = id();\n      }\n      return newLink;\n    });\n\n    for (const node of this.dagreNodes) {\n      this.dagreGraph.setNode(node.id, node);\n    }\n\n    for (const cluster of this.dagreClusters) {\n      this.dagreGraph.setNode(cluster.id, cluster);\n      cluster.childNodeIds.forEach(childNodeId => {\n        this.dagreGraph.setParent(childNodeId, cluster.id);\n      });\n    }\n\n    // update dagre\n    for (const edge of this.dagreEdges) {\n      if (settings.multigraph) {\n        this.dagreGraph.setEdge(edge.source, edge.target, edge, edge.id);\n      } else {\n        this.dagreGraph.setEdge(edge.source, edge.target);\n      }\n    }\n\n    return this.dagreGraph;\n  }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { id } from '../../utils/id';\nimport * as dagre from 'dagre';\nimport { Edge } from '../../models/edge.model';\nimport { DagreSettings, Orientation } from './dagre';\nimport { dagreDragPolyline, rankOrderAxesFromDagreRankdir, resolveDagreDragEdgeStyle } from './edge-geometry';\n\nexport interface DagreNodesOnlySettings extends DagreSettings {\n  curveDistance?: number;\n}\n\nconst DEFAULT_EDGE_NAME = '\\x00';\nconst GRAPH_NODE = '\\x00';\nconst EDGE_KEY_DELIM = '\\x01';\n\nexport class DagreNodesOnlyLayout implements Layout {\n  defaultSettings: DagreNodesOnlySettings = {\n    orientation: Orientation.LEFT_TO_RIGHT,\n    marginX: 20,\n    marginY: 20,\n    edgePadding: 100,\n    rankPadding: 100,\n    nodePadding: 50,\n    curveDistance: 20,\n    multigraph: true,\n    compound: true\n  };\n  settings: DagreNodesOnlySettings = {};\n\n  dagreGraph: any;\n  dagreNodes: any;\n  dagreEdges: any;\n\n  run(graph: Graph): Graph {\n    this.createDagreGraph(graph);\n    dagre.layout(this.dagreGraph);\n\n    graph.edgeLabels = this.dagreGraph._edgeLabels;\n\n    for (const dagreNodeId in this.dagreGraph._nodes) {\n      const dagreNode = this.dagreGraph._nodes[dagreNodeId];\n      const node = graph.nodes.find(n => n.id === dagreNode.id);\n      node.position = {\n        x: dagreNode.x,\n        y: dagreNode.y\n      };\n      node.dimension = {\n        width: dagreNode.width,\n        height: dagreNode.height\n      };\n    }\n    for (const edge of graph.edges) {\n      this.updateEdge(graph, edge);\n    }\n\n    return graph;\n  }\n\n  updateEdge(graph: Graph, edge: Edge): Graph {\n    const sourceNode = graph.nodes.find(n => n.id === edge.source);\n    const targetNode = graph.nodes.find(n => n.id === edge.target);\n    if (!sourceNode?.position || !targetNode?.position) {\n      return graph;\n    }\n    const settings = Object.assign({}, this.defaultSettings, this.settings);\n    const axes = rankOrderAxesFromDagreRankdir(settings.orientation);\n    const curveDistance = settings.curveDistance ?? this.defaultSettings.curveDistance ?? 20;\n    const resolved = resolveDagreDragEdgeStyle(settings.dragEdgeStyle ?? 'auto', edge.points);\n    edge.points = dagreDragPolyline(sourceNode, targetNode, axes, curveDistance, resolved);\n    const edgeLabelId = `${edge.source}${EDGE_KEY_DELIM}${edge.target}${EDGE_KEY_DELIM}${DEFAULT_EDGE_NAME}`;\n    const matchingEdgeLabel = graph.edgeLabels[edgeLabelId];\n    if (matchingEdgeLabel) {\n      matchingEdgeLabel.points = edge.points;\n    }\n    return graph;\n  }\n\n  createDagreGraph(graph: Graph): any {\n    const settings = Object.assign({}, this.defaultSettings, this.settings);\n    this.dagreGraph = new dagre.graphlib.Graph({ compound: settings.compound, multigraph: settings.multigraph });\n    this.dagreGraph.setGraph({\n      rankdir: settings.orientation,\n      marginx: settings.marginX,\n      marginy: settings.marginY,\n      edgesep: settings.edgePadding,\n      ranksep: settings.rankPadding,\n      nodesep: settings.nodePadding,\n      align: settings.align,\n      acyclicer: settings.acyclicer,\n      ranker: settings.ranker,\n      multigraph: settings.multigraph,\n      compound: settings.compound\n    });\n\n    // Default to assigning a new object as a label for each new edge.\n    this.dagreGraph.setDefaultEdgeLabel(() => {\n      return {\n        /* empty */\n      };\n    });\n\n    this.dagreNodes = graph.nodes.map(n => {\n      const node: any = Object.assign({}, n);\n      node.width = n.dimension.width;\n      node.height = n.dimension.height;\n      node.x = n.position.x;\n      node.y = n.position.y;\n      return node;\n    });\n\n    this.dagreEdges = graph.edges.map(l => {\n      const newLink: any = Object.assign({}, l);\n      if (!newLink.id) {\n        newLink.id = id();\n      }\n      return newLink;\n    });\n\n    for (const node of this.dagreNodes) {\n      if (!node.width) {\n        node.width = 20;\n      }\n      if (!node.height) {\n        node.height = 30;\n      }\n\n      // update dagre\n      this.dagreGraph.setNode(node.id, node);\n    }\n\n    // update dagre\n    for (const edge of this.dagreEdges) {\n      if (settings.multigraph) {\n        this.dagreGraph.setEdge(edge.source, edge.target, edge, edge.id);\n      } else {\n        this.dagreGraph.setEdge(edge.source, edge.target);\n      }\n    }\n\n    return this.dagreGraph;\n  }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { Node } from '../../models/node.model';\nimport { id } from '../../utils/id';\nimport { forceCollide, forceLink, forceManyBody, forceSimulation } from 'd3-force';\nimport { Edge } from '../../models/edge.model';\nimport { Observable, Subject } from 'rxjs';\nimport { NodePosition } from '../../models';\n\nexport interface D3ForceDirectedSettings {\n  force?: any;\n  forceLink?: any;\n}\nexport interface D3Node {\n  id?: string;\n  x: number;\n  y: number;\n  width?: number;\n  height?: number;\n  fx?: number;\n  fy?: number;\n}\nexport interface D3Edge {\n  source: string | D3Node;\n  target: string | D3Node;\n  midPoint: NodePosition;\n}\nexport interface D3Graph {\n  nodes: D3Node[];\n  edges: D3Edge[];\n}\nexport interface MergedNode extends D3Node, Node {\n  id: string;\n}\n\nexport function toD3Node(maybeNode: string | D3Node): D3Node {\n  if (typeof maybeNode === 'string') {\n    return {\n      id: maybeNode,\n      x: 0,\n      y: 0\n    };\n  }\n  return maybeNode;\n}\n\nexport class D3ForceDirectedLayout implements Layout {\n  defaultSettings: D3ForceDirectedSettings = {\n    force: forceSimulation<any>().force('charge', forceManyBody().strength(-150)).force('collide', forceCollide(5)),\n    forceLink: forceLink<any, any>()\n      .id(node => node.id)\n      .distance(() => 100)\n  };\n  settings: D3ForceDirectedSettings = {};\n\n  inputGraph: Graph;\n  outputGraph: Graph;\n  d3Graph: D3Graph;\n  outputGraph$: Subject<Graph> = new Subject();\n\n  draggingStart: { x: number; y: number };\n\n  run(graph: Graph): Observable<Graph> {\n    this.inputGraph = graph;\n    this.d3Graph = {\n      nodes: [...this.inputGraph.nodes.map(n => ({ ...n }))] as any,\n      edges: [...this.inputGraph.edges.map(e => ({ ...e }))] as any\n    };\n    this.outputGraph = {\n      nodes: [],\n      edges: [],\n      edgeLabels: []\n    };\n    this.outputGraph$.next(this.outputGraph);\n    this.settings = Object.assign({}, this.defaultSettings, this.settings);\n    if (this.settings.force) {\n      this.settings.force\n        .nodes(this.d3Graph.nodes)\n        .force('link', this.settings.forceLink.links(this.d3Graph.edges))\n        .alpha(0.5)\n        .restart()\n        .on('tick', () => {\n          this.outputGraph$.next(this.d3GraphToOutputGraph(this.d3Graph));\n        });\n    }\n\n    return this.outputGraph$.asObservable();\n  }\n\n  updateEdge(graph: Graph, edge: Edge): Observable<Graph> {\n    const settings = Object.assign({}, this.defaultSettings, this.settings);\n    if (settings.force) {\n      settings.force\n        .nodes(this.d3Graph.nodes)\n        .force('link', settings.forceLink.links(this.d3Graph.edges))\n        .alpha(0.5)\n        .restart()\n        .on('tick', () => {\n          this.outputGraph$.next(this.d3GraphToOutputGraph(this.d3Graph));\n        });\n    }\n\n    return this.outputGraph$.asObservable();\n  }\n\n  d3GraphToOutputGraph(d3Graph: D3Graph): Graph {\n    this.outputGraph.nodes = this.d3Graph.nodes.map((node: MergedNode) => ({\n      ...node,\n      id: node.id || id(),\n      position: {\n        x: node.x,\n        y: node.y\n      },\n      dimension: {\n        width: (node.dimension && node.dimension.width) || 20,\n        height: (node.dimension && node.dimension.height) || 20\n      },\n      transform: `translate(${node.x - ((node.dimension && node.dimension.width) || 20) / 2 || 0}, ${\n        node.y - ((node.dimension && node.dimension.height) || 20) / 2 || 0\n      })`\n    }));\n\n    this.outputGraph.edges = this.d3Graph.edges.map(edge => ({\n      ...edge,\n      source: toD3Node(edge.source).id,\n      target: toD3Node(edge.target).id,\n      points: [\n        {\n          x: toD3Node(edge.source).x,\n          y: toD3Node(edge.source).y\n        },\n        {\n          x: toD3Node(edge.target).x,\n          y: toD3Node(edge.target).y\n        }\n      ]\n    }));\n\n    this.outputGraph.edgeLabels = this.outputGraph.edges;\n    return this.outputGraph;\n  }\n\n  onDragStart(draggingNode: Node, $event: MouseEvent): void {\n    this.settings.force.alphaTarget(0.3).restart();\n    const node = this.d3Graph.nodes.find(d3Node => d3Node.id === draggingNode.id);\n    if (!node) {\n      return;\n    }\n    this.draggingStart = { x: $event.x - node.x, y: $event.y - node.y };\n    node.fx = $event.x - this.draggingStart.x;\n    node.fy = $event.y - this.draggingStart.y;\n  }\n\n  onDrag(draggingNode: Node, $event: MouseEvent): void {\n    if (!draggingNode) {\n      return;\n    }\n    const node = this.d3Graph.nodes.find(d3Node => d3Node.id === draggingNode.id);\n    if (!node) {\n      return;\n    }\n    node.fx = $event.x - this.draggingStart.x;\n    node.fy = $event.y - this.draggingStart.y;\n  }\n\n  onDragEnd(draggingNode: Node, $event: MouseEvent): void {\n    if (!draggingNode) {\n      return;\n    }\n    const node = this.d3Graph.nodes.find(d3Node => d3Node.id === draggingNode.id);\n    if (!node) {\n      return;\n    }\n\n    this.settings.force.alphaTarget(0);\n    node.fx = undefined;\n    node.fy = undefined;\n  }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { Node, ClusterNode } from '../../models/node.model';\nimport { id } from '../../utils/id';\nimport { d3adaptor, ID3StyleLayoutAdaptor, Layout as ColaLayout, Group, InputNode, Link, Rectangle } from 'webcola';\nimport * as d3Dispatch from 'd3-dispatch';\nimport * as d3Force from 'd3-force';\nimport * as d3Timer from 'd3-timer';\nimport { Edge } from '../../models/edge.model';\nimport { Observable, Subject } from 'rxjs';\nimport { ViewDimensions } from '../../utils/view-dimensions.helper';\n\nexport interface ColaForceDirectedSettings {\n  force?: ColaLayout & ID3StyleLayoutAdaptor;\n  forceModifierFn?: (force: ColaLayout & ID3StyleLayoutAdaptor) => ColaLayout & ID3StyleLayoutAdaptor;\n  onTickListener?: (internalGraph: ColaGraph) => void;\n  viewDimensions?: ViewDimensions;\n}\nexport interface ColaGraph {\n  groups: Group[];\n  nodes: InputNode[];\n  links: Array<Link<number>>;\n}\nexport function toNode(nodes: InputNode[], nodeRef: InputNode | number): InputNode {\n  if (typeof nodeRef === 'number') {\n    return nodes[nodeRef];\n  }\n  return nodeRef;\n}\n\nexport class ColaForceDirectedLayout implements Layout {\n  defaultSettings: ColaForceDirectedSettings = {\n    force: d3adaptor({\n      ...d3Dispatch,\n      ...d3Force,\n      ...d3Timer\n    })\n      .linkDistance(150)\n      .avoidOverlaps(true),\n    viewDimensions: {\n      width: 600,\n      height: 600\n    }\n  };\n  settings: ColaForceDirectedSettings = {};\n\n  inputGraph: Graph;\n  outputGraph: Graph;\n  internalGraph: ColaGraph & { groupLinks?: Edge[] };\n  outputGraph$: Subject<Graph> = new Subject();\n\n  draggingStart: { x: number; y: number };\n\n  run(graph: Graph): Observable<Graph> {\n    this.inputGraph = graph;\n    if (!this.inputGraph.clusters) {\n      this.inputGraph.clusters = [];\n    }\n    this.internalGraph = {\n      nodes: [\n        ...this.inputGraph.nodes.map(n => ({\n          ...n,\n          width: n.dimension ? n.dimension.width : 20,\n          height: n.dimension ? n.dimension.height : 20\n        }))\n      ] as any,\n      groups: [\n        ...this.inputGraph.clusters.map(\n          (cluster): Group => ({\n            padding: 5,\n            groups: cluster.childNodeIds\n              .map(nodeId => <any>this.inputGraph.clusters.findIndex(node => node.id === nodeId))\n              .filter(x => x >= 0),\n            leaves: cluster.childNodeIds\n              .map(nodeId => <any>this.inputGraph.nodes.findIndex(node => node.id === nodeId))\n              .filter(x => x >= 0)\n          })\n        )\n      ],\n      links: [\n        ...this.inputGraph.edges\n          .map(e => {\n            const sourceNodeIndex = this.inputGraph.nodes.findIndex(node => e.source === node.id);\n            const targetNodeIndex = this.inputGraph.nodes.findIndex(node => e.target === node.id);\n            if (sourceNodeIndex === -1 || targetNodeIndex === -1) {\n              return undefined;\n            }\n            return {\n              ...e,\n              source: sourceNodeIndex,\n              target: targetNodeIndex\n            };\n          })\n          .filter(x => !!x)\n      ] as any,\n      groupLinks: [\n        ...this.inputGraph.edges\n          .map(e => {\n            const sourceNodeIndex = this.inputGraph.nodes.findIndex(node => e.source === node.id);\n            const targetNodeIndex = this.inputGraph.nodes.findIndex(node => e.target === node.id);\n            if (sourceNodeIndex >= 0 && targetNodeIndex >= 0) {\n              return undefined;\n            }\n            return e;\n          })\n          .filter(x => !!x)\n      ]\n    };\n    this.outputGraph = {\n      nodes: [],\n      clusters: [],\n      edges: [],\n      edgeLabels: []\n    };\n    this.outputGraph$.next(this.outputGraph);\n    this.settings = Object.assign({}, this.defaultSettings, this.settings);\n    if (this.settings.force) {\n      this.settings.force = this.settings.force\n        .nodes(this.internalGraph.nodes)\n        .groups(this.internalGraph.groups)\n        .links(this.internalGraph.links)\n        .alpha(0.5)\n        .on('tick', () => {\n          if (this.settings.onTickListener) {\n            this.settings.onTickListener(this.internalGraph);\n          }\n          this.outputGraph$.next(this.internalGraphToOutputGraph(this.internalGraph));\n        });\n      if (this.settings.viewDimensions) {\n        this.settings.force = this.settings.force.size([\n          this.settings.viewDimensions.width,\n          this.settings.viewDimensions.height\n        ]);\n      }\n      if (this.settings.forceModifierFn) {\n        this.settings.force = this.settings.forceModifierFn(this.settings.force);\n      }\n      this.settings.force.start();\n    }\n\n    return this.outputGraph$.asObservable();\n  }\n\n  updateEdge(graph: Graph, edge: Edge): Observable<Graph> {\n    const settings = Object.assign({}, this.defaultSettings, this.settings);\n    if (settings.force) {\n      settings.force.start();\n    }\n\n    return this.outputGraph$.asObservable();\n  }\n\n  internalGraphToOutputGraph(internalGraph: any): Graph {\n    this.outputGraph.nodes = internalGraph.nodes.map(node => ({\n      ...node,\n      id: node.id || id(),\n      position: {\n        x: node.x,\n        y: node.y\n      },\n      dimension: {\n        width: (node.dimension && node.dimension.width) || 20,\n        height: (node.dimension && node.dimension.height) || 20\n      },\n      transform: `translate(${node.x - ((node.dimension && node.dimension.width) || 20) / 2 || 0}, ${\n        node.y - ((node.dimension && node.dimension.height) || 20) / 2 || 0\n      })`\n    }));\n\n    this.outputGraph.edges = internalGraph.links\n      .map(edge => {\n        const source: any = toNode(internalGraph.nodes, edge.source);\n        const target: any = toNode(internalGraph.nodes, edge.target);\n        const p0 = (source.bounds as Rectangle).rayIntersection(target.bounds.cx(), target.bounds.cy());\n        const p1 = (target.bounds as Rectangle).rayIntersection(source.bounds.cx(), source.bounds.cy());\n        return {\n          ...edge,\n          source: source.id,\n          target: target.id,\n          points: [p0, p1]\n        };\n      })\n      .concat(\n        internalGraph.groupLinks.map(groupLink => {\n          const sourceNode = internalGraph.nodes.find(foundNode => (foundNode as any).id === groupLink.source);\n          const targetNode = internalGraph.nodes.find(foundNode => (foundNode as any).id === groupLink.target);\n          const source =\n            sourceNode || internalGraph.groups.find(foundGroup => (foundGroup as any).id === groupLink.source);\n          const target =\n            targetNode || internalGraph.groups.find(foundGroup => (foundGroup as any).id === groupLink.target);\n          const p0 = (source.bounds as Rectangle).rayIntersection(target.bounds.cx(), target.bounds.cy());\n          const p1 = (target.bounds as Rectangle).rayIntersection(source.bounds.cx(), source.bounds.cy());\n          return {\n            ...groupLink,\n            source: source.id,\n            target: target.id,\n            points: [p0, p1]\n          };\n        })\n      );\n\n    this.outputGraph.clusters = internalGraph.groups.map((group, index): ClusterNode => {\n      const inputGroup = this.inputGraph.clusters[index];\n      return {\n        ...inputGroup,\n        dimension: {\n          width: group.bounds ? group.bounds.width() : 20,\n          height: group.bounds ? group.bounds.height() : 20\n        },\n        position: {\n          x: group.bounds ? group.bounds.x + group.bounds.width() / 2 : 0,\n          y: group.bounds ? group.bounds.y + group.bounds.height() / 2 : 0\n        }\n      };\n    });\n    this.outputGraph.edgeLabels = this.outputGraph.edges;\n    return this.outputGraph;\n  }\n\n  onDragStart(draggingNode: Node, $event: MouseEvent): void {\n    const nodeIndex = this.outputGraph.nodes.findIndex(foundNode => foundNode.id === draggingNode.id);\n    const node = this.internalGraph.nodes[nodeIndex];\n    if (!node) {\n      return;\n    }\n    this.draggingStart = { x: node.x - $event.x, y: node.y - $event.y };\n    node.fixed = 1;\n    this.settings.force.start();\n  }\n\n  onDrag(draggingNode: Node, $event: MouseEvent): void {\n    if (!draggingNode) {\n      return;\n    }\n    const nodeIndex = this.outputGraph.nodes.findIndex(foundNode => foundNode.id === draggingNode.id);\n    const node = this.internalGraph.nodes[nodeIndex];\n    if (!node) {\n      return;\n    }\n    node.x = this.draggingStart.x + $event.x;\n    node.y = this.draggingStart.y + $event.y;\n  }\n\n  onDragEnd(draggingNode: Node, $event: MouseEvent): void {\n    if (!draggingNode) {\n      return;\n    }\n    const nodeIndex = this.outputGraph.nodes.findIndex(foundNode => foundNode.id === draggingNode.id);\n    const node = this.internalGraph.nodes[nodeIndex];\n    if (!node) {\n      return;\n    }\n\n    node.fixed = 0;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Layout } from '../../models/layout.model';\nimport { DagreLayout } from './dagre';\nimport { DagreClusterLayout } from './dagreCluster';\nimport { DagreNodesOnlyLayout } from './dagreNodesOnly';\nimport { D3ForceDirectedLayout } from './d3ForceDirected';\nimport { ColaForceDirectedLayout } from './colaForceDirected';\n\nconst layouts = {\n  dagre: DagreLayout,\n  dagreCluster: DagreClusterLayout,\n  dagreNodesOnly: DagreNodesOnlyLayout,\n  d3ForceDirected: D3ForceDirectedLayout,\n  colaForceDirected: ColaForceDirectedLayout\n};\n\n@Injectable()\nexport class LayoutService {\n  getLayout(name: string): Layout {\n    if (layouts[name]) {\n      return new layouts[name]();\n    } else {\n      throw new Error(`Unknown layout type '${name}'`);\n    }\n  }\n}\n","// rename transition due to conflict with d3 transition\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  HostListener,\n  inject,\n  Injector,\n  OnDestroy,\n  OnInit,\n  TemplateRef,\n  ViewEncapsulation,\n  NgZone,\n  ChangeDetectorRef,\n  OnChanges,\n  SimpleChanges,\n  afterNextRender,\n  isDevMode,\n  effect,\n  input,\n  model,\n  output,\n  contentChild,\n  viewChildren\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { select } from 'd3-selection';\nimport * as shape from 'd3-shape';\nimport { Observable, Subscription, of, fromEvent as observableFromEvent, Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { identity, scale, smoothMatrix, toSVG, transform, translate } from 'transformation-matrix';\nimport { Layout } from '../models/layout.model';\nimport { LayoutService } from './layouts/layout.service';\nimport { LAYERED_NODE_NODE_BETWEEN_LAYERS_PX } from './layouts/layout-layered-constants';\nimport { Edge } from '../models/edge.model';\nimport { Node, ClusterNode, CompoundNode } from '../models/node.model';\nimport { Graph } from '../models/graph.model';\nimport { id } from '../utils/id';\nimport { PanningAxis } from '../enums/panning.enum';\nimport { MiniMapPosition, DefaultMiniMapMargin, MiniMapMargin } from '../enums/mini-map-position.enum';\nimport { throttleable } from '../utils/throttle';\nimport { ColorHelper } from '../utils/color.helper';\nimport { ViewDimensions, calculateViewDimensions } from '../utils/view-dimensions.helper';\nimport { VisibilityObserver } from '../utils/visibility-observer';\nimport { MouseWheelDirective } from './mouse-wheel.directive';\nimport {\n  mergeGraphLayoutTransition,\n  mergeViewportTransition,\n  mergeLayoutEffect,\n  resolveGraphTransitionEasing,\n  type GraphLayoutTransition,\n  type LayoutMorphCapture,\n  type ViewportTranslationTransition,\n  type LayoutTransitionEffect\n} from './transition.model';\n\n/**\n * Matrix\n */\nexport interface Matrix {\n  a: number;\n  b: number;\n  c: number;\n  d: number;\n  e: number;\n  f: number;\n}\n\nexport interface NgxGraphZoomOptions {\n  autoCenter?: boolean;\n  force?: boolean;\n}\n\nexport enum NgxGraphStates {\n  Init = 'init',\n  Subscribe = 'subscribe',\n  Transform = 'transform',\n  /* eslint-disable @typescript-eslint/no-shadow */\n  Output = 'output'\n}\n\nexport interface NgxGraphStateChangeEvent {\n  state: NgxGraphStates;\n}\n\n/**\n * Root graph component (`ngx-graph`).\n *\n * **Layout transitions:** JS-driven morphing (`transitionAfterChanges` with `mode: 'tween'`) is **opt-in**; if the input is\n * omitted, merged defaults use `mode: 'instant'` (no rAF tween). The host may carry `layout-js-driven` (see\n * {@link useLayoutTransitions}): when present, styles set `transition: none` on `.node-group` so imperative\n * `transform` updates do not fight CSS. **`smooth-layout`** is set only while tweening is active.\n *\n * **Template outlets:** Context objects are stable per graph id (see `outletContextGraphNode` / `outletContextLink` / …): `transitionAfterChangesActive` and `$implicit` are updated in place so consumer templates are not recreated on viewport-only CD.\n */\n@Component({\n  selector: 'ngx-graph',\n  styleUrls: ['./graph.component.scss'],\n  templateUrl: 'graph.component.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgTemplateOutlet, MouseWheelDirective]\n})\nexport class GraphComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  private readonly injector = inject(Injector);\n  readonly nodes = input<Node[]>([]);\n  readonly clusters = input<ClusterNode[]>([]);\n  readonly compoundNodes = input<CompoundNode[]>([]);\n  readonly links = input<Edge[]>([]);\n  readonly activeEntries = model<any[]>([]);\n  readonly curve = model<any>(undefined);\n  readonly enableDrag = model(true);\n  readonly nodeHeight = input<number>(undefined);\n  readonly nodeMaxHeight = input<number>(undefined);\n  readonly nodeMinHeight = input<number>(undefined);\n  readonly nodeWidth = input<number>(undefined);\n  readonly nodeMinWidth = input<number>(undefined);\n  readonly nodeMaxWidth = input<number>(undefined);\n  readonly enablePan = model<boolean>(true);\n  readonly panningAxis = input<PanningAxis>(PanningAxis.Both);\n  readonly enableZoom = model(true);\n  readonly zoomSpeed = input(0.1);\n  readonly minZoomLevel = input(0.1);\n  readonly maxZoomLevel = input(4.0);\n  readonly autoZoom = input(false);\n  readonly panOnZoom = input(true);\n  readonly animate = input<boolean>(false);\n  readonly autoCenter = input(false);\n  readonly update$ = input<Observable<any>>(undefined);\n  readonly center$ = input<Observable<any>>(undefined);\n  readonly zoomToFit$ = input<Observable<NgxGraphZoomOptions>>(undefined);\n  readonly panToNode$ = input<Observable<any>>(undefined);\n  readonly layout = model<string | Layout>(undefined);\n  readonly layoutSettings = input<any>(undefined);\n  readonly enableTrackpadSupport = input(false);\n  readonly showMiniMap = input<boolean>(false);\n  readonly miniMapMaxWidth = input<number>(100);\n  readonly miniMapMaxHeight = input<number>(undefined);\n  readonly miniMapPosition = input<MiniMapPosition>(MiniMapPosition.UpperRight);\n  readonly miniMapMargin = input<MiniMapMargin>(DefaultMiniMapMargin);\n  readonly view = input<[number, number]>(undefined);\n  readonly scheme = input<any>('cool');\n  readonly customColors = input<any>(undefined);\n  readonly deferDisplayUntilPosition = input<boolean>(false);\n  readonly centerNodesOnPositionChange = input(true);\n  readonly enablePreUpdateTransform = input(true);\n  /**\n   * Layout transition after nodes/links change. Merged with defaults via {@link mergeGraphLayoutTransition}; when omitted or\n   * empty, defaults apply (`mode: 'instant'`). Use `{ mode: 'tween', scope: 'full' }` for full-graph interpolation, or\n   * `{ mode: 'tween', scope: 'additive', durationMs: 0 }` for additive-only tweening.\n   *\n   * **`mode: 'tween'` is opt-in** (no tween unless you pass a partial that resolves to tween after merge).\n   */\n  readonly transitionAfterChanges = input<Partial<GraphLayoutTransition>>(undefined);\n  /**\n   * Number of samples along each edge polyline when building `line` / morph segments (layout tick, drag\n   * {@link redrawEdge}, unified morph). Clamped to `[2, 512]`; default `48` when unset or non-finite.\n   */\n  readonly edgePathSampleCount = input<number>(undefined);\n  /**\n   * When `true` (default), the host always has the `layout-js-driven` class so CSS does not animate `.node-group`\n   * `transform` (matches historical behavior). When `false`, `layout-js-driven` is applied only while JS layout morphing\n   * is active ({@link layoutJsMorphEnabled}), allowing host CSS transitions on node groups when not using `mode: 'tween'`.\n   */\n  readonly useLayoutTransitions = input(true);\n  /** Optional eased translation for programmatic pan only (`panTo`, `center`, minimap, `zoomToFit` autoCenter). Zoom scale is never animated. */\n  readonly transitionDuringTransform = input<Partial<ViewportTranslationTransition>>(undefined);\n  /** Optional perspective / rotate flair during layout morph only (`mode: 'tween'`). */\n  readonly layoutTransitionEffect = input<Partial<LayoutTransitionEffect>>(undefined);\n\n  /** Template alias `zoomLevel` — imperatively sets zoom; see {@link zoomTo}. */\n  readonly zoomLevelInput = input<number | undefined>(undefined, { alias: 'zoomLevel' });\n  /** Template alias `panOffsetX` — imperatively pans; see {@link panTo}. */\n  readonly panOffsetXInput = input<number | undefined>(undefined, { alias: 'panOffsetX' });\n  /** Template alias `panOffsetY` — imperatively pans; see {@link panTo}. */\n  readonly panOffsetYInput = input<number | undefined>(undefined, { alias: 'panOffsetY' });\n\n  readonly select = output();\n  readonly activate = output<any>();\n  readonly deactivate = output<any>();\n  readonly zoomChange = output<number>();\n  readonly clickHandler = output<MouseEvent>();\n  readonly stateChange = output<NgxGraphStateChangeEvent>();\n  readonly drawComplete = output<void>();\n\n  readonly linkTemplate = contentChild<TemplateRef<any>>('linkTemplate');\n  readonly nodeTemplate = contentChild<TemplateRef<any>>('nodeTemplate');\n  readonly clusterTemplate = contentChild<TemplateRef<any>>('clusterTemplate');\n  readonly defsTemplate = contentChild<TemplateRef<any>>('defsTemplate');\n  readonly miniMapNodeTemplate = contentChild<TemplateRef<any>>('miniMapNodeTemplate');\n\n  readonly nodeElements = viewChildren<ElementRef>('nodeElement');\n  readonly clusterElements = viewChildren<ElementRef>('clusterElement');\n  readonly linkElements = viewChildren<ElementRef>('linkElement');\n\n  public chartWidth: any;\n\n  private isMouseMoveCalled: boolean = false;\n\n  graphSubscription: Subscription = new Subscription();\n  colors: ColorHelper;\n  dims: ViewDimensions;\n  seriesDomain: any;\n  transform: string;\n  isPanning = false;\n  isDragging = false;\n  draggingNode: Node;\n  initialized = false;\n  graph: Graph;\n  graphDims: any = { width: 0, height: 0 };\n  _oldLinks: Edge[] = [];\n  oldNodes: Set<string> = new Set();\n  oldClusters: Set<string> = new Set();\n  oldCompoundNodes: Set<string> = new Set();\n  /** Incremented at the start of each {@link tick}; completion callbacks only emit when this matches. */\n  private drawCompleteTickId = 0;\n  private _graphDestroyed = false;\n  transformationMatrix: Matrix = identity();\n  _touchLastX = null;\n  _touchLastY = null;\n  minimapScaleCoefficient: number = 3;\n  minimapTransform: string;\n  minimapOffsetX: number = 0;\n  minimapOffsetY: number = 0;\n  isMinimapPanning = false;\n  minimapClipPathId: string;\n  width: number;\n  height: number;\n  resizeSubscription: any;\n  visibilityObserver: VisibilityObserver;\n  private waitForGraphDims: ReturnType<typeof setInterval>;\n  private destroy$ = new Subject<void>();\n\n  /** Latest requestAnimationFrame id per edge for imperative path morphing (cancel on layout / drag). */\n  private readonly edgePathRafIds = new Map<string, number>();\n\n  /**\n   * Stable {@link NgTemplateOutlet} context objects keyed by graph id so consumer templates (tooltips, nested\n   * directives) are not destroyed/recreated every CD when only the viewport or `$implicit` reference changes.\n   */\n  private readonly graphMainNodeOutletCtx = new Map<\n    string,\n    { $implicit: Node; transitionAfterChangesActive: boolean }\n  >();\n  private readonly graphMinimapNodeOutletCtx = new Map<\n    string,\n    { $implicit: Node; transitionAfterChangesActive: boolean }\n  >();\n  private readonly graphClusterOutletCtx = new Map<\n    string,\n    { $implicit: Node; transitionAfterChangesActive: boolean }\n  >();\n  private readonly graphCompoundOutletCtx = new Map<\n    string,\n    { $implicit: Node; transitionAfterChangesActive: boolean }\n  >();\n  private readonly graphLinkOutletCtx = new Map<string, { $implicit: Edge; transitionAfterChangesActive: boolean }>();\n\n  /** Single rAF when layout morph unifies node transforms + edge paths. */\n  private layoutUnifiedRafId: number | null = null;\n\n  /** rAF for programmatic viewport pan easing (translation only). */\n  private viewportPanAnimRafId: number | null = null;\n\n  /** CSS `transform` on `.ngx-graph-outer` during optional layout flair (perspective / rotate). */\n  layoutOuterTransform: string | null = null;\n\n  /** `transform-origin` for {@link layoutOuterTransform} when using rotate pivot modes. */\n  layoutEffectTransformOrigin = '50% 50%';\n\n  /** Parsed `translate(tx,ty)` from the graph before a new layout is applied. */\n  private previousLayoutTransforms: Map<string, { tx: number; ty: number }> | null = null;\n\n  /** Target `translate(tx,ty)` after tick applyTransforms (before reset to previous for animation). */\n  private layoutAnimationTargets: Map<string, { tx: number; ty: number }> | null = null;\n\n  /**\n   * Prior layout `dimension` for cluster and compound ids (single map; compounds overwrite clusters on id clash).\n   * Always taken from the **graph model** at {@link capturePreviousLayoutTransforms} time — not from the DOM, even\n   * when {@link LayoutMorphCapture.previousSource} uses DOM for translates. Cleared with {@link previousLayoutTransforms}.\n   */\n  private previousLayoutClusterCompoundDimensions: Map<string, { width: number; height: number }> | null = null;\n\n  /**\n   * Target dimensions after `applyTransforms` for the current morph tick (clusters then compounds). Cleared with\n   * {@link layoutAnimationTargets}. Only set for non-`additive` scope. During the tween, translate is lerped between\n   * fixed endpoints while dimensions interpolate separately; with {@link centerNodesOnPositionChange} and large size\n   * changes, the visual center can drift slightly mid-tween though start and end states match layout.\n   */\n  private layoutAnimationClusterCompoundDimensions: Map<string, { width: number; height: number }> | null = null;\n\n  /** Node ids present after the previous completed `tick` (for additive smooth transitions). */\n  private priorTickGraphNodeIds = new Set<string>();\n  /**\n   * Which graph collection owned each id after the previous `tick` (`nodes`, `clusters`, or `compoundNodes`).\n   * Used with {@link priorTickGraphNodeIds} so layout morph does not treat an id as “stable” when it moved between\n   * collections (e.g. same id reused for a node then a compound). Duplicate ids across lists are resolved like\n   * {@link collectPreviousTranslatesFromModelTransforms}: later collections overwrite earlier ones.\n   */\n  private priorTickGraphKindById = new Map<string, 'node' | 'cluster' | 'compound'>();\n  /** Edge keys present after the previous completed `tick` (aligned with {@link linkKeyForLookup}). */\n  private priorTickEdgeKeys = new Set<string>();\n  /** Snapshot of {@link priorTickEdgeKeys} at the start of the current `tick` (for classifying new edges). */\n  private edgeKeysAtLayoutTickStart = new Set<string>();\n\n  /** Skip layout morph on the next `tick()` when an update follows viewport-only zoom (unchanged host inputs). */\n  private suppressLayoutMorphThisTick = false;\n  /** True for the current {@link tick} when node/edge layout morph is suppressed (viewport-only zoom). */\n  private morphSuppressedThisTick = false;\n  /** Until this timestamp, `createGraph` may set {@link suppressLayoutMorphThisTick} when inputs are unchanged. */\n  private viewportZoomMorphSuppressUntilMs = 0;\n  private static readonly WHEEL_ZOOM_MORPH_SUPPRESS_MS = 700;\n  /** Sorted host-input id/edge signature; used for viewport-only zoom morph suppress. */\n  private lastInputTopologySignature = '';\n  /** Container size from the last full `update()` (not viewport-only fast path). */\n  private lastFullUpdateWidth = 0;\n  private lastFullUpdateHeight = 0;\n\n  constructor(\n    private el: ElementRef,\n    public zone: NgZone,\n    public cd: ChangeDetectorRef,\n    private layoutService: LayoutService\n  ) {\n    effect(() => {\n      const level = this.zoomLevelInput();\n      if (level == null || isNaN(Number(level))) {\n        return;\n      }\n      const n = Number(level);\n      if (Math.abs(n - this.zoomLevel) < 1e-6) {\n        return;\n      }\n      this.zoomTo(n, { layout: false });\n    });\n    effect(() => {\n      const x = this.panOffsetXInput();\n      if (x == null || isNaN(Number(x))) {\n        return;\n      }\n      this.panTo(Number(x), null);\n    });\n    effect(() => {\n      const y = this.panOffsetYInput();\n      if (y == null || isNaN(Number(y))) {\n        return;\n      }\n      this.panTo(null, Number(y));\n    });\n    effect(() => {\n      if (!this.enablePan()) {\n        this.isPanning = false;\n        this.isMinimapPanning = false;\n      }\n    });\n    effect(() => {\n      if (!this.enableDrag() && this.isDragging) {\n        this.isDragging = false;\n        const layout = this.layout();\n        if (layout && typeof layout !== 'string' && layout.onDragEnd) {\n          layout.onDragEnd(this.draggingNode, new MouseEvent('mouseup'));\n        }\n      }\n    });\n  }\n\n  /**\n   * Updates pan, zoom, and/or node-drag interaction flags in one call. Only keys present are applied.\n   *\n   * @example graph.setViewportInteractions({ pan: false, zoom: false, drag: false })\n   */\n  setViewportInteractions(options: { pan?: boolean; zoom?: boolean; drag?: boolean }): void {\n    if (options.pan !== undefined) {\n      this.enablePan.set(options.pan);\n    }\n    if (options.zoom !== undefined) {\n      this.enableZoom.set(options.zoom);\n    }\n    if (options.drag !== undefined) {\n      this.enableDrag.set(options.drag);\n    }\n  }\n\n  /** Starts canvas pan on mouse down only when {@link enablePan} is true. */\n  onPanningSurfaceMouseDown(): void {\n    if (this.enablePan()) {\n      this.isPanning = true;\n    }\n  }\n\n  /** Coloring domain key; default coalesces `label`, then `id`, then `''` so {@link ColorHelper} never receives null/undefined. */\n  readonly groupResultsBy = input<(node: any) => string>(node => node.label ?? node.id ?? '');\n\n  /** Merged layout transition config from {@link transitionAfterChanges} and defaults. */\n  get effectiveLayoutTransition(): GraphLayoutTransition {\n    return mergeGraphLayoutTransition(this.transitionAfterChanges());\n  }\n\n  /** `true` when rAF morph should run after layout (`mode: 'tween'`). */\n  get layoutMorphActive(): boolean {\n    return this.effectiveLayoutTransition.mode === 'tween';\n  }\n\n  /** Whether layout morphing is active (`transitionAfterChanges` resolved to `mode: 'tween'`). Exposed on template outlets as `transitionAfterChangesActive`. */\n  get layoutJsMorphEnabled(): boolean {\n    return this.layoutMorphActive;\n  }\n\n  /** Host `layout-js-driven` class: always on when {@link useLayoutTransitions} is `true`; otherwise only when {@link layoutJsMorphEnabled}. */\n  get layoutJsDrivenHostClass(): boolean {\n    return this.useLayoutTransitions() ? true : this.layoutJsMorphEnabled;\n  }\n\n  get effectiveViewportTransition() {\n    return mergeViewportTransition(this.transitionDuringTransform());\n  }\n\n  get effectiveLayoutEffect(): LayoutTransitionEffect {\n    return mergeLayoutEffect(this.layoutTransitionEffect());\n  }\n\n  /**\n   * Get the current zoom level\n   */\n  get zoomLevel() {\n    return this.transformationMatrix.a;\n  }\n\n  /**\n   * Get the current `x` position of the graph\n   */\n  get panOffsetX() {\n    return this.transformationMatrix.e;\n  }\n\n  /**\n   * Get the current `y` position of the graph\n   */\n  get panOffsetY() {\n    return this.transformationMatrix.f;\n  }\n\n  /**\n   * Angular lifecycle event\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  ngOnInit(): void {\n    const update$ = this.update$();\n    if (update$) {\n      update$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n        this.update();\n      });\n    }\n\n    const center$ = this.center$();\n    if (center$) {\n      center$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n        this.center();\n      });\n    }\n\n    const zoomToFit$ = this.zoomToFit$();\n    if (zoomToFit$) {\n      zoomToFit$.pipe(takeUntil(this.destroy$)).subscribe(options => {\n        this.zoomToFit(options ? options : {});\n      });\n    }\n\n    const panToNode$ = this.panToNode$();\n    if (panToNode$) {\n      panToNode$.pipe(takeUntil(this.destroy$)).subscribe((nodeId: string) => {\n        this.panToNodeId(nodeId);\n      });\n    }\n\n    this.waitForGraphDims = setInterval(() => {\n      if (this.hasDims()) {\n        clearInterval(this.waitForGraphDims);\n        this.drawComplete.emit();\n      }\n    }, 1000);\n\n    this.minimapClipPathId = `minimapClip${id()}`;\n    this.stateChange.emit({ state: NgxGraphStates.Subscribe });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    this.basicUpdate();\n    const { layoutSettings } = changes;\n    const layout = this.layout();\n    this.setLayout(layout, !!changes['layout']);\n    if (layoutSettings) {\n      this.setLayoutSettings(this.layoutSettings());\n    }\n    const nodes = this.nodes() ?? [];\n    const links = this.links() ?? [];\n    if (layout && nodes.length && links.length) {\n      this.update();\n    }\n  }\n\n  /**\n   * @param layoutInputChanged - When true, clears `initialized` so `@if (initialized && graph)` does not\n   * flash empty on unrelated input updates (nodes/links only). Only layout identity changes should reset.\n   */\n  setLayout(layout: string | Layout, layoutInputChanged = false): void {\n    if (layoutInputChanged) {\n      this.initialized = false;\n    }\n    if (!layout) {\n      layout = 'dagre';\n    }\n    if (typeof layout === 'string') {\n      this.layout.set(this.layoutService.getLayout(layout));\n      this.setLayoutSettings(this.layoutSettings());\n    }\n  }\n\n  setLayoutSettings(settings: any): void {\n    const layout = this.layout();\n    if (layout && typeof layout !== 'string') {\n      layout.settings = settings;\n    }\n  }\n\n  /**\n   * Angular lifecycle event\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  ngOnDestroy(): void {\n    this._graphDestroyed = true;\n    this.cancelLayoutUnifiedAnimation();\n    this.cancelAllEdgePathAnimations();\n    this.cancelViewportPanAnimation();\n    this.unbindEvents();\n    if (this.visibilityObserver) {\n      this.visibilityObserver.visible.unsubscribe();\n      this.visibilityObserver.destroy();\n    }\n    if (this.waitForGraphDims) {\n      clearInterval(this.waitForGraphDims);\n    }\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.graphMainNodeOutletCtx.clear();\n    this.graphMinimapNodeOutletCtx.clear();\n    this.graphClusterOutletCtx.clear();\n    this.graphCompoundOutletCtx.clear();\n    this.graphLinkOutletCtx.clear();\n  }\n\n  /**\n   * Angular lifecycle event\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  ngAfterViewInit(): void {\n    this.bindWindowResizeEvent();\n\n    // listen for visibility of the element for hidden by default scenario\n    this.visibilityObserver = new VisibilityObserver(this.el, this.zone);\n    this.visibilityObserver.visible.subscribe(this.update.bind(this));\n\n    setTimeout(() => this.update());\n  }\n\n  /**\n   * Base class update implementation for the dag graph\n   *\n   * @param options.forceRelayout When true, always run the full layout path (used by {@link zoomTo} with `layout: true`).\n   * @memberOf GraphComponent\n   */\n  update(options?: { forceRelayout?: boolean }): void {\n    this.basicUpdate();\n    if (!this.curve()) {\n      this.curve.set(shape.curveBundle.beta(1));\n    }\n\n    const inputSig = this.buildInputTopology();\n    const inputTopologyUnchanged =\n      this.lastInputTopologySignature !== '' && inputSig === this.lastInputTopologySignature;\n    if (\n      !options?.forceRelayout &&\n      this.initialized &&\n      inputTopologyUnchanged &&\n      !this.hasContainerSizeChangedSinceLastFullUpdate() &&\n      this.isViewportMorphSuppressActive()\n    ) {\n      this.zone.run(() => {\n        this.updateTransform();\n      });\n      return;\n    }\n\n    this.zone.run(() => {\n      this.dims = calculateViewDimensions({\n        width: this.width,\n        height: this.height\n      });\n\n      this.seriesDomain = this.getSeriesDomain();\n      this.setColors();\n\n      this.createGraph();\n      this.updateTransform();\n      if (!this.initialized) {\n        this.stateChange.emit({ state: NgxGraphStates.Init });\n      }\n      this.initialized = true;\n      this.lastFullUpdateWidth = this.width;\n      this.lastFullUpdateHeight = this.height;\n    });\n  }\n\n  /**\n   * Creates the dagre graph engine\n   *\n   * @memberOf GraphComponent\n   */\n  createGraph(): void {\n    this.graphSubscription.unsubscribe();\n    this.graphSubscription = new Subscription();\n    // Prior async layout's tick() may never run after unsubscribe; do not carry suppress forward.\n    this.suppressLayoutMorphThisTick = false;\n    const initializeNode = (n: Node) => {\n      if (!n.meta) {\n        n.meta = {};\n      }\n      if (!n.id) {\n        n.id = id();\n      }\n      if (!n.dimension) {\n        const nodeWidth = this.nodeWidth();\n        const nodeHeight = this.nodeHeight();\n        n.dimension = {\n          width: nodeWidth ? nodeWidth : 30,\n          height: nodeHeight ? nodeHeight : 30\n        };\n        n.meta.forceDimensions = false;\n      } else {\n        n.meta.forceDimensions = n.meta.forceDimensions === undefined ? true : n.meta.forceDimensions;\n      }\n      if (!n.position) {\n        n.position = {\n          x: 0,\n          y: 0\n        };\n        if (this.deferDisplayUntilPosition()) {\n          n.hidden = true;\n        }\n      }\n      n.data = n.data ? n.data : {};\n      return n;\n    };\n\n    const initializeEdge = (e: Edge) => {\n      if (!e.id) {\n        e.id = id();\n      }\n      return e;\n    };\n\n    const priorGraph = this.graph;\n\n    const nextGraph: Graph = {\n      nodes: (this.nodes() ?? []).map(n => initializeNode(n)),\n      clusters: (this.clusters() ?? []).map(n => initializeNode(n)),\n      compoundNodes: (this.compoundNodes() ?? []).map(n => initializeNode(n)),\n      edges: (this.links() ?? []).map(e => initializeEdge(e))\n    };\n\n    const incomingInputSig = this.buildInputTopology();\n    if (this.shouldSuppressLayoutMorphForViewport(incomingInputSig)) {\n      this.suppressLayoutMorphThisTick = true;\n    }\n\n    this.applyVisualContinuityBeforeLayout(nextGraph, priorGraph);\n\n    this.graph = nextGraph;\n    this.draw();\n  }\n\n  /** Host-input topology (not post-layout internal graph shape). */\n  private buildInputTopology(): string {\n    const mg = this.isLayoutMultigraph();\n    const nodeIds = [...(this.nodes() ?? []).map(n => n.id)].sort();\n    const clusterIds = [...(this.clusters() ?? []).map(n => `c:${n.id}`)].sort();\n    const compoundIds = [...(this.compoundNodes() ?? []).map(n => `p:${n.id}`)].sort();\n    const edgeKeys = [...(this.links() ?? []).map(e => this.linkKeyForLookup(e, mg))].sort();\n    return JSON.stringify({ nodeIds, clusterIds, compoundIds, edgeKeys });\n  }\n\n  private isViewportMorphSuppressActive(): boolean {\n    return performance.now() < this.viewportZoomMorphSuppressUntilMs;\n  }\n\n  private hasContainerSizeChangedSinceLastFullUpdate(): boolean {\n    return this.width !== this.lastFullUpdateWidth || this.height !== this.lastFullUpdateHeight;\n  }\n\n  /** Host-input topology unchanged while the post-zoom morph-suppress window is active. */\n  private shouldSuppressLayoutMorphForViewport(inputSig?: string): boolean {\n    const sig = inputSig ?? this.buildInputTopology();\n    return (\n      this.lastInputTopologySignature !== '' &&\n      sig === this.lastInputTopologySignature &&\n      this.isViewportMorphSuppressActive()\n    );\n  }\n\n  private setViewportMorphSuppress(): void {\n    this.viewportZoomMorphSuppressUntilMs = performance.now() + GraphComponent.WHEEL_ZOOM_MORPH_SUPPRESS_MS;\n  }\n\n  /**\n   * While async layout (e.g. ELK) runs, keep showing the previous snapshot's positions and edge routes\n   * so inputs without x/y do not flash to (0,0). Seeds `capturePreviousLayoutTransforms` with real geometry.\n   */\n  private applyVisualContinuityBeforeLayout(next: Graph, prior: Graph | undefined): void {\n    if (!prior?.nodes?.length) {\n      this.markDefaultOriginNodesHiddenUntilLayout(next.nodes);\n      this.markDefaultOriginNodesHiddenUntilLayout(next.clusters as Node[] | undefined);\n      this.markDefaultOriginNodesHiddenUntilLayout(next.compoundNodes as Node[] | undefined);\n      this.setDisplayTransformsFromPositions(next.nodes, next.clusters ?? [], next.compoundNodes ?? []);\n      return;\n    }\n\n    const incremental = this._oldLinks.length > 0;\n    const prevNodeById = new Map(prior.nodes.map(n => [n.id, n]));\n    const prevClusterById = new Map((prior.clusters ?? []).map(n => [n.id, n]));\n    const prevCompoundById = new Map((prior.compoundNodes ?? []).map(n => [n.id, n]));\n    const mergeNodes = (items: Node[] | undefined) => {\n      if (!items) {\n        return;\n      }\n      for (const n of items) {\n        const p = prevNodeById.get(n.id);\n        if (p?.position) {\n          n.position = { ...p.position };\n        }\n        if (p?.dimension) {\n          n.dimension = { ...p.dimension };\n        }\n        if (incremental && !prevNodeById.has(n.id)) {\n          n.hidden = true;\n        }\n      }\n    };\n    mergeNodes(next.nodes);\n    if (incremental) {\n      for (const n of next.nodes ?? []) {\n        if (!prevNodeById.has(n.id)) {\n          this.seedProvisionalPositionFromParentEdge(n, next.edges, prevNodeById);\n        }\n      }\n    }\n    const nextNodeById = new Map(next.nodes.map(n => [n.id, n]));\n    if (next.clusters?.length) {\n      for (const n of next.clusters) {\n        const p = prevClusterById.get(n.id);\n        if (p?.position) {\n          n.position = { ...p.position };\n        }\n        if (p?.dimension) {\n          n.dimension = { ...p.dimension };\n        }\n        if (incremental && !prevClusterById.has(n.id)) {\n          n.hidden = true;\n          this.seedProvisionalGroupPositionFromChildren(n, nextNodeById);\n        }\n      }\n    }\n    if (next.compoundNodes?.length) {\n      for (const n of next.compoundNodes) {\n        const p = prevCompoundById.get(n.id);\n        if (p?.position) {\n          n.position = { ...p.position };\n        }\n        if (p?.dimension) {\n          n.dimension = { ...p.dimension };\n        }\n        if (incremental && !prevCompoundById.has(n.id)) {\n          n.hidden = true;\n          this.seedProvisionalGroupPositionFromChildren(n, nextNodeById);\n        }\n      }\n    }\n\n    const mg = this.isLayoutMultigraph();\n    if (this._oldLinks.length > 0 && next.edges?.length) {\n      const prevEdgeByKey = new Map<string, Edge>();\n      for (const e of this._oldLinks) {\n        prevEdgeByKey.set(this.linkKeyForLookup(e, mg), e);\n      }\n      for (const e of next.edges) {\n        const pe = prevEdgeByKey.get(this.linkKeyForLookup(e, mg));\n        if (pe?.points && pe.points.length >= 2) {\n          e.points = this.clonePoints(pe.points as Array<{ x: number; y: number }>);\n          if (pe.line) {\n            e.line = pe.line;\n          }\n          if (pe.oldLine) {\n            e.oldLine = pe.oldLine;\n          }\n          if (pe.textPath) {\n            e.textPath = pe.textPath;\n          }\n        }\n      }\n    }\n\n    this.setDisplayTransformsFromPositions(next.nodes, next.clusters ?? [], next.compoundNodes ?? []);\n\n    // Do not pass heuristic `position` into ELK (`...node` in elk createNodeTree). With semiInteractive layout, a wrong\n    // hint skews the first solve; the next segment masks it. `hidden` + transform already set for pre-layout paint.\n    if (incremental) {\n      for (const n of next.nodes ?? []) {\n        if (!prevNodeById.has(n.id)) {\n          delete n.position;\n        }\n      }\n      for (const n of next.clusters ?? []) {\n        if (!prevClusterById.has(n.id)) {\n          delete n.position;\n        }\n      }\n      for (const n of next.compoundNodes ?? []) {\n        if (!prevCompoundById.has(n.id)) {\n          delete n.position;\n        }\n      }\n    }\n  }\n  private setDisplayTransformsFromPositions(\n    nodes: Node[],\n    clusters: ClusterNode[] | undefined,\n    compoundNodes: CompoundNode[] | undefined\n  ): void {\n    const apply = (items: Node[] | undefined) => {\n      if (!items) {\n        return;\n      }\n      for (const n of items) {\n        if (!n.data) {\n          n.data = {};\n        }\n        n.data.color = this.colors.getColor(this.groupResultsBy()(n));\n        this.updateNodeGroupTransform(n);\n      }\n    };\n    apply(nodes);\n    apply(clusters);\n    apply(compoundNodes);\n  }\n\n  private edgeEndpointNodeId(ref: Edge['source'] | Edge['target']): string {\n    return typeof ref === 'string' ? ref : String((ref as { id?: string }).id ?? '');\n  }\n\n  /** Merged ELK `properties` from the active layout (defaults + instance settings). */\n  private elkMergedProperties(): Record<string, string | undefined> {\n    const L = this.layout() as {\n      defaultSettings?: { properties?: Record<string, string> };\n      settings?: { properties?: Record<string, string> };\n    };\n    return { ...L?.defaultSettings?.properties, ...L?.settings?.properties };\n  }\n\n  /**\n   * Inter-layer gap for provisional seeding. Graph-level merged props often carry `20` from ElkLayout defaults while\n   * `createNodeTree` applies {@link LAYERED_NODE_NODE_BETWEEN_LAYERS_PX} per-node — match the latter for seed math.\n   */\n  private getElkLayerSpacingGapPx(): number {\n    const raw = this.elkMergedProperties()['elk.layered.spacing.nodeNodeBetweenLayers'];\n    if (raw == null || raw === '') {\n      return LAYERED_NODE_NODE_BETWEEN_LAYERS_PX;\n    }\n    const n = parseFloat(String(raw));\n    if (!Number.isFinite(n)) {\n      return LAYERED_NODE_NODE_BETWEEN_LAYERS_PX;\n    }\n    if (n === 20) {\n      return LAYERED_NODE_NODE_BETWEEN_LAYERS_PX;\n    }\n    return n;\n  }\n\n  private elkDirectionOrDown(): string {\n    const d = this.elkMergedProperties()['elk.direction'];\n    return typeof d === 'string' && d.length ? d : 'DOWN';\n  }\n\n  /**\n   * Place the new node center where layered ELK will approximately put it: half parent + inter-layer gap + half child,\n   * along the layout axis. Aligns with `buildFallbackEdgePoints` (center-to-center) better than a flat pixel delta.\n   */\n  private seedProvisionalPositionFromParentEdge(\n    n: Node,\n    edges: Edge[] | undefined,\n    prevNodeById: Map<string, Node>\n  ): void {\n    if (!edges?.length) {\n      return;\n    }\n    const edge = edges.find(e => this.edgeEndpointNodeId(e.target) === n.id);\n    if (!edge) {\n      return;\n    }\n    const src = prevNodeById.get(this.edgeEndpointNodeId(edge.source));\n    if (!src?.position) {\n      return;\n    }\n    const gap = this.getElkLayerSpacingGapPx();\n    const sw = src.dimension?.width ?? 30;\n    const sh = src.dimension?.height ?? 30;\n    const tw = n.dimension?.width ?? 30;\n    const th = n.dimension?.height ?? 30;\n    const sx = src.position.x;\n    const sy = src.position.y;\n    switch (this.elkDirectionOrDown()) {\n      case 'RIGHT':\n        n.position = { x: sx + sw / 2 + gap + tw / 2, y: sy };\n        break;\n      case 'LEFT':\n        n.position = { x: sx - sw / 2 - gap - tw / 2, y: sy };\n        break;\n      case 'UP':\n        n.position = { x: sx, y: sy - sh / 2 - gap - th / 2 };\n        break;\n      default:\n        n.position = { x: sx, y: sy + sh / 2 + gap + th / 2 };\n    }\n  }\n\n  /**\n   * For a new cluster/compound before layout, approximate group center from child node positions already merged\n   * onto `next.nodes` (avoids a (0,0) flash at the top-left).\n   */\n  private seedProvisionalGroupPositionFromChildren(\n    n: Node & { childNodeIds?: string[] },\n    nodeById: Map<string, Node>\n  ): void {\n    const ids = n.childNodeIds;\n    if (!ids?.length) {\n      return;\n    }\n    let sx = 0;\n    let sy = 0;\n    let count = 0;\n    for (const cid of ids) {\n      const ch = nodeById.get(cid);\n      if (ch?.position) {\n        sx += ch.position.x;\n        sy += ch.position.y;\n        count++;\n      }\n    }\n    if (count > 0) {\n      n.position = { x: sx / count, y: sy / count };\n    }\n  }\n\n  /** Bootstrap: hide nodes still at default origin until first ELK `tick()` supplies real positions. */\n  private markDefaultOriginNodesHiddenUntilLayout(items: Node[] | undefined): void {\n    if (!items?.length) {\n      return;\n    }\n    for (const n of items) {\n      const x = n.position?.x ?? 0;\n      const y = n.position?.y ?? 0;\n      if (x === 0 && y === 0) {\n        n.hidden = true;\n      }\n    }\n  }\n\n  /**\n   * Draws the graph using dagre layouts\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  draw(): void {\n    // Recalculate the layout\n    const result = (this.layout() as Layout)?.run(this.graph);\n    const result$ = result instanceof Observable ? result : of(result);\n    this.graphSubscription.add(\n      result$.subscribe(graph => {\n        this.capturePreviousLayoutTransforms();\n        this.graph = graph;\n        this.tick();\n      })\n    );\n  }\n\n  /** Default: first `translate(a, b)` in the node-group transform string. */\n  private parseTranslateDefault(transformStr: string | undefined): { tx: number; ty: number } {\n    const m = /translate\\(\\s*([\\d.-]+)\\s*,\\s*([\\d.-]+)\\s*\\)/.exec(transformStr || '');\n    if (m) {\n      return { tx: +m[1], ty: +m[2] };\n    }\n    return { tx: 0, ty: 0 };\n  }\n\n  /** Prefers `Layout.parseTranslate` on the resolved layout object when present. */\n  public resolveTranslateFromTransform(transformStr: string | undefined): { tx: number; ty: number } {\n    const L = this.layout();\n    if (L && typeof L !== 'string' && typeof (L as Layout).parseTranslate === 'function') {\n      return (L as Layout).parseTranslate!(transformStr);\n    }\n    return this.parseTranslateDefault(transformStr);\n  }\n\n  /** Same key shape as dagre/graphlib `_edgeLabels` keys and as used in tick edge maps. */\n  private linkKeyForLookup(edge: Pick<Edge, 'source' | 'target' | 'id'>, multigraph: boolean): string {\n    const source = typeof edge.source === 'string' ? edge.source : String((edge.source as { id?: string }).id ?? '');\n    const target = typeof edge.target === 'string' ? edge.target : String((edge.target as { id?: string }).id ?? '');\n    return multigraph ? `${source}${target}${edge.id ?? ''}` : `${source}${target}`;\n  }\n\n  /** Matches layout engines that merge `defaultSettings` with `settings` (e.g. DagreNodesOnly multigraph). */\n  private isLayoutMultigraph(): boolean {\n    const layoutValue = this.layout();\n    if (!layoutValue || typeof layoutValue === 'string') {\n      return false;\n    }\n    const layout = layoutValue as { defaultSettings?: { multigraph?: boolean }; settings?: { multigraph?: boolean } };\n    const merged = Object.assign({}, layout.defaultSettings ?? {}, layout.settings ?? {});\n    return !!merged.multigraph;\n  }\n\n  /**\n   * graphlib `edgeArgsToId`: v + \\\\x01 + w + \\\\x01 + name (name defaults to \\\\x00).\n   * Aligns with {@link linkKeyForLookup}; falls back to legacy regex when the id is not graphlib-shaped.\n   */\n  private graphlibEdgeLabelIdToLookupKey(edgeLabelId: string, multigraph: boolean): string {\n    const EDGE_KEY_DELIM = '\\x01';\n    const DEFAULT_EDGE_NAME = '\\x00';\n    const parts = edgeLabelId.split(EDGE_KEY_DELIM);\n    if (parts.length >= 2) {\n      const v = parts[0];\n      const w = parts[1];\n      if (!multigraph) {\n        return `${v}${w}`;\n      }\n      const name = parts.length >= 3 ? parts[2] : DEFAULT_EDGE_NAME;\n      if (name === DEFAULT_EDGE_NAME || name === '') {\n        return `${v}${w}`;\n      }\n      return `${v}${w}${name}`;\n    }\n    return edgeLabelId.replace(/[^\\w-]*/g, '');\n  }\n\n  /**\n   * Snapshot current node-group translates (and cluster/compound dimensions) before replacing `graph` for layout morph.\n   * {@link LayoutMorphCapture.previousSource} controls **translates only** (`previousLayoutTransforms`): DOM modes read\n   * `g.node-group[id]` for nodes, clusters, and compounds. Prior cluster/compound size always use the model\n   * (`previousLayoutClusterCompoundDimensions`). Requires `_oldLinks` so the first paint does not run an empty morph.\n   */\n  public capturePreviousLayoutTransforms(): void {\n    if (!this.initialized || !this.graph) {\n      this.previousLayoutTransforms = null;\n      this.previousLayoutClusterCompoundDimensions = null;\n      return;\n    }\n    // No prior tick edges: first paint should not run unified layout tween.\n    if (!this._oldLinks.length) {\n      this.previousLayoutTransforms = null;\n      this.previousLayoutClusterCompoundDimensions = null;\n      return;\n    }\n    const morph = this.effectiveLayoutTransition.morphCapture;\n    const source = morph.previousSource ?? 'model-transform';\n    if (source === 'model-transform') {\n      this.previousLayoutTransforms = this.collectPreviousTranslatesFromModelTransforms();\n      this.previousLayoutClusterCompoundDimensions = this.collectPreviousClusterCompoundDimensionsFromModel();\n      return;\n    }\n    const chartG = this.getMainChartGroupElement();\n    this.previousLayoutTransforms = chartG\n      ? this.collectPreviousTranslatesFromDom(chartG, morph, source === 'dom-with-model-fallback')\n      : this.collectPreviousTranslatesFromModelTransforms();\n    this.previousLayoutClusterCompoundDimensions = this.collectPreviousClusterCompoundDimensionsFromModel();\n  }\n\n  /** Resample count for edge polylines (layout, morph, drag). */\n  private effectiveEdgePathSampleCount(): number {\n    const raw = this.edgePathSampleCount();\n    const n = typeof raw === 'number' && Number.isFinite(raw) ? Math.floor(raw) : 48;\n    return Math.min(512, Math.max(2, n));\n  }\n\n  private collectPreviousTranslatesFromModelTransforms(): Map<string, { tx: number; ty: number }> {\n    const m = new Map<string, { tx: number; ty: number }>();\n    const collect = (items: Node[] | undefined) => {\n      items?.forEach(n => {\n        if (n.transform) {\n          m.set(n.id, this.resolveTranslateFromTransform(n.transform));\n        }\n      });\n    };\n    collect(this.graph.nodes);\n    collect(this.graph.clusters);\n    collect(this.graph.compoundNodes);\n    return m;\n  }\n\n  /** Prior `dimension` for clusters then compounds (model graph; used with layout morph size tween). */\n  private collectPreviousClusterCompoundDimensionsFromModel(): Map<string, { width: number; height: number }> {\n    const m = new Map<string, { width: number; height: number }>();\n    const collect = (items: Node[] | undefined) => {\n      items?.forEach(n => {\n        const w = n.dimension?.width;\n        const h = n.dimension?.height;\n        if (w != null && h != null && Number.isFinite(w) && Number.isFinite(h) && w > 0 && h > 0) {\n          m.set(n.id, { width: w, height: h });\n        }\n      });\n    };\n    collect(this.graph.clusters);\n    collect(this.graph.compoundNodes);\n    return m;\n  }\n\n  private getMainChartGroupElement(): SVGGElement | null {\n    const g = (this.el.nativeElement as HTMLElement).querySelector('g.graph.chart');\n    return g instanceof SVGGElement ? g : null;\n  }\n\n  /** Main-chart `g.node-group` only (not minimap duplicates). */\n  private findMainChartNodeGroup(chartG: SVGGElement, nodeId: string): SVGGElement | null {\n    const el = chartG.querySelector(`g.node-group#${CSS.escape(nodeId)}`);\n    if (!(el instanceof SVGGElement) || el.closest('.minimap')) {\n      return null;\n    }\n    return el;\n  }\n\n  private translateFromLayoutPositionForNode(n: Node): { tx: number; ty: number } {\n    const center = this.centerNodesOnPositionChange();\n    const dx = center ? (n.dimension?.width ?? 0) / 2 : 0;\n    const dy = center ? (n.dimension?.height ?? 0) / 2 : 0;\n    const px = n.position?.x ?? 0;\n    const py = n.position?.y ?? 0;\n    return { tx: px - dx || 0, ty: py - dy || 0 };\n  }\n\n  private findMorphNodeById(\n    nodeId: string,\n    order: NonNullable<LayoutMorphCapture['modelResolutionOrder']>\n  ): Node | undefined {\n    for (const kind of order) {\n      if (kind === 'compound') {\n        const hit = this.graph.compoundNodes?.find(x => x.id === nodeId);\n        if (hit) {\n          return hit;\n        }\n      } else if (kind === 'cluster') {\n        const hit = this.graph.clusters?.find(x => x.id === nodeId);\n        if (hit) {\n          return hit;\n        }\n      } else {\n        const hit = this.graph.nodes.find(x => x.id === nodeId);\n        if (hit) {\n          return hit;\n        }\n      }\n    }\n    return undefined;\n  }\n\n  private modelTranslateForMorphFallback(nodeId: string, morph: LayoutMorphCapture): { tx: number; ty: number } {\n    const order = morph.modelResolutionOrder ?? ['compound', 'cluster', 'node'];\n    const n = this.findMorphNodeById(nodeId, order);\n    if (!n) {\n      return { tx: 0, ty: 0 };\n    }\n    if (n.transform) {\n      return this.resolveTranslateFromTransform(n.transform);\n    }\n    return this.translateFromLayoutPositionForNode(n);\n  }\n\n  private isDegenerateTranslate(t: { tx: number; ty: number }, eps: number): boolean {\n    return Math.hypot(t.tx, t.ty) <= eps;\n  }\n\n  /** `translate` of `nodeEl`'s origin in `chartG` user space (pan/zoom excluded from node-local chain). */\n  private translateNodeGroupInChartUserSpace(\n    nodeEl: SVGGElement,\n    chartG: SVGGElement\n  ): { tx: number; ty: number } | null {\n    try {\n      const nodeCtm = nodeEl.getCTM();\n      const chartCtm = chartG.getCTM();\n      if (!nodeCtm || !chartCtm) {\n        return null;\n      }\n      const m = chartCtm.inverse().multiply(nodeCtm);\n      return { tx: m.e, ty: m.f };\n    } catch {\n      return null;\n    }\n  }\n\n  private collectPreviousTranslatesFromDom(\n    chartG: SVGGElement,\n    morph: LayoutMorphCapture,\n    hybrid: boolean\n  ): Map<string, { tx: number; ty: number }> {\n    const eps = morph.degenerateEpsilon ?? 1e-3;\n    const m = new Map<string, { tx: number; ty: number }>();\n    const forNode = (n: Node) => {\n      const nodeEl = this.findMainChartNodeGroup(chartG, n.id);\n      const attr = nodeEl?.getAttribute('transform')?.trim() ?? '';\n      let t: { tx: number; ty: number };\n\n      if (nodeEl && attr.length > 0) {\n        t = this.resolveTranslateFromTransform(attr);\n        if (hybrid && this.isDegenerateTranslate(t, eps)) {\n          t = this.modelTranslateForMorphFallback(n.id, morph);\n        }\n      } else if (nodeEl && attr.length === 0 && hybrid) {\n        const ctmT = this.translateNodeGroupInChartUserSpace(nodeEl, chartG);\n        t = ctmT && !this.isDegenerateTranslate(ctmT, eps) ? ctmT : this.modelTranslateForMorphFallback(n.id, morph);\n      } else if (n.transform) {\n        t = this.resolveTranslateFromTransform(n.transform);\n      } else {\n        t = this.translateFromLayoutPositionForNode(n);\n      }\n      m.set(n.id, t);\n    };\n    this.graph.nodes.forEach(forNode);\n    this.graph.clusters?.forEach(forNode);\n    this.graph.compoundNodes?.forEach(forNode);\n    return m;\n  }\n\n  /** When {@link LayoutMorphCapture.syncTargetsFromPositionAfterTick} is on, recompute targets from `position`. */\n  private syncLayoutAnimationTargetsFromPositions(): void {\n    const targets = this.layoutAnimationTargets;\n    if (!targets?.size) {\n      return;\n    }\n    const sync = (items: Node[] | undefined) => {\n      items?.forEach(n => {\n        if (targets.has(n.id)) {\n          targets.set(n.id, this.translateFromLayoutPositionForNode(n));\n        }\n      });\n    };\n    sync(this.graph.nodes);\n    sync(this.graph.clusters);\n    sync(this.graph.compoundNodes);\n  }\n\n  /**\n   * Aligns `previousLayoutTransforms` with layout targets before `resetToPrevious` when:\n   * - The same `id` moved between `nodes` / `clusters` / `compoundNodes` (always; does not require\n   *   {@link LayoutMorphCapture.snapAddedNodeIds}),\n   * - A cluster or compound id is new since the last tick (always, so new groups do not tween from a missing origin),\n   * - With {@link LayoutMorphCapture.snapAddedNodeIds}: any new id (including plain nodes), plus degenerate-stable snap\n   *   for clusters/compounds (see {@link isDegenerateTranslate} and `morphCapture.degenerateEpsilon`).\n   */\n  private snapMorphPreviousForAddedNodes(\n    priorTickGraphIds: Set<string>,\n    priorTickGraphKindById: Map<string, 'node' | 'cluster' | 'compound'>,\n    snapAddedNodeIds: boolean\n  ): void {\n    const prevs = this.previousLayoutTransforms;\n    const targets = this.layoutAnimationTargets;\n    if (!prevs?.size || !targets?.size) {\n      return;\n    }\n    const morph = this.effectiveLayoutTransition.morphCapture;\n    const eps = morph.degenerateEpsilon ?? 1e-3;\n\n    const snapOne = (n: Node, kind: 'node' | 'cluster' | 'compound', degenerateStableClusterOrCompound: boolean) => {\n      const tgt = targets.get(n.id);\n      if (!tgt) {\n        return;\n      }\n      const priorKind = priorTickGraphKindById.get(n.id);\n      const inPriorIds = priorTickGraphIds.has(n.id);\n      const sameIdRoleChanged = inPriorIds && priorKind !== undefined && priorKind !== kind;\n      const snapAsNewIdWithFlag = snapAddedNodeIds && !inPriorIds;\n      const snapNewClusterOrCompoundWithoutFlag =\n        !snapAddedNodeIds && !inPriorIds && (kind === 'cluster' || kind === 'compound');\n      const prev = prevs.get(n.id);\n      const snapDegenerateStableClusterOrCompound =\n        snapAddedNodeIds &&\n        degenerateStableClusterOrCompound &&\n        inPriorIds &&\n        priorKind === kind &&\n        prev !== undefined &&\n        this.isDegenerateTranslate(prev, eps);\n      if (\n        sameIdRoleChanged ||\n        snapAsNewIdWithFlag ||\n        snapNewClusterOrCompoundWithoutFlag ||\n        snapDegenerateStableClusterOrCompound\n      ) {\n        prevs.set(n.id, { tx: tgt.tx, ty: tgt.ty });\n      }\n    };\n\n    const snap = (\n      items: Node[] | undefined,\n      kind: 'node' | 'cluster' | 'compound',\n      degenerateStableClusterOrCompound: boolean\n    ) => {\n      items?.forEach(n => snapOne(n, kind, degenerateStableClusterOrCompound));\n    };\n    snap(this.graph.nodes, 'node', false);\n    snap(this.graph.clusters, 'cluster', true);\n    snap(this.graph.compoundNodes, 'compound', true);\n  }\n\n  public applyAdditiveSmoothTransitionFilters(\n    targets: Map<string, { tx: number; ty: number }>,\n    priorTickGraphIds: Set<string>,\n    priorTickGraphKindById: Map<string, 'node' | 'cluster' | 'compound'>\n  ): void {\n    if (\n      this.effectiveLayoutTransition.scope !== 'additive' ||\n      priorTickGraphIds.size === 0 ||\n      !this.previousLayoutTransforms\n    ) {\n      return;\n    }\n    const prevs = this.previousLayoutTransforms;\n    const currentKindById = new Map<string, 'node' | 'cluster' | 'compound'>();\n    const register = (items: Node[] | undefined, kind: 'node' | 'cluster' | 'compound') => {\n      items?.forEach(n => currentKindById.set(n.id, kind));\n    };\n    register(this.graph.nodes, 'node');\n    register(this.graph.clusters, 'cluster');\n    register(this.graph.compoundNodes, 'compound');\n\n    const allIds = new Set<string>();\n    for (const coll of [this.graph.nodes, this.graph.clusters, this.graph.compoundNodes]) {\n      coll?.forEach(n => allIds.add(n.id));\n    }\n    for (const id of allIds) {\n      const currentKind = currentKindById.get(id)!;\n      const priorKind = priorTickGraphKindById.get(id);\n      const stableSameRole = priorTickGraphIds.has(id) && priorKind === currentKind;\n      if (stableSameRole) {\n        targets.delete(id);\n        prevs.delete(id);\n      } else if (!prevs.has(id)) {\n        const tgt = targets.get(id);\n        if (tgt) {\n          // New nodes: do not tween from parent anchor (or a bad 0,0) — appear at final layout coordinates. Edge routes\n          // still morph via `runUnifiedLayoutAnimation` / `redrawLines` when maps stay populated.\n          prevs.set(id, { tx: tgt.tx, ty: tgt.ty });\n        }\n      }\n    }\n  }\n\n  private refreshPriorTickGraphIds(multigraph: boolean): void {\n    const ids = new Set<string>();\n    const kindById = new Map<string, 'node' | 'cluster' | 'compound'>();\n    const collect = (items: Node[] | undefined, kind: 'node' | 'cluster' | 'compound') => {\n      items?.forEach(n => {\n        ids.add(n.id);\n        kindById.set(n.id, kind);\n      });\n    };\n    collect(this.graph.nodes, 'node');\n    collect(this.graph.clusters, 'cluster');\n    collect(this.graph.compoundNodes, 'compound');\n    this.priorTickGraphNodeIds = ids;\n    this.priorTickGraphKindById = kindById;\n\n    const keys = new Set<string>();\n    for (const e of this.graph.edges ?? []) {\n      keys.add(this.linkKeyForLookup(e, multigraph));\n    }\n    this.priorTickEdgeKeys = keys;\n  }\n\n  /**\n   * Builds one edge entry for {@link tick}. `lookupKey` / `legacyKey` must match {@link linkKeyForLookup} /\n   * `_oldLinks` (graphlib uses string ids; ELK uses array `edgeLabels` and real keys from the edge).\n   */\n  private pushTickEdgeLink(\n    newLinks: Edge[],\n    edgeLabel: Edge,\n    lookupKey: string,\n    legacyKey: string,\n    oldLinkMap: Map<string, Edge>,\n    graphEdgeMap: Map<string, Edge>,\n    mg: boolean\n  ): void {\n    let oldLink = oldLinkMap.get(lookupKey) ?? oldLinkMap.get(legacyKey);\n    const linkFromGraph = graphEdgeMap.get(lookupKey) ?? graphEdgeMap.get(legacyKey);\n\n    if (!oldLink) {\n      // Prefer a prior tick edge (has route data) over the fresh graph stub, which often has no `points`.\n      oldLink =\n        this._oldLinks.find(ol => {\n          const k = this.linkKeyForLookup(ol, mg);\n          return k === lookupKey || k === legacyKey;\n        }) ??\n        linkFromGraph ??\n        edgeLabel;\n    } else if (\n      oldLink.data &&\n      linkFromGraph &&\n      linkFromGraph.data &&\n      JSON.stringify(oldLink.data) !== JSON.stringify(linkFromGraph.data)\n    ) {\n      oldLink.data = linkFromGraph.data;\n    }\n\n    oldLink.oldLine = oldLink.line;\n\n    const baseEdge = (oldLink || linkFromGraph || edgeLabel) as Edge;\n    let points = edgeLabel.points as Array<{ x: number; y: number }>;\n    if (!points || points.length < 2) {\n      const fb = this.buildFallbackEdgePoints(baseEdge);\n      if (fb.length >= 2) {\n        points = fb;\n      }\n    }\n    if (!points || points.length < 2) {\n      points = [\n        { x: 0, y: 0 },\n        { x: 0, y: 0 }\n      ];\n    }\n\n    // Build `line` from resampled geometry so static paths match drag and morph (same curve + sample count).\n    const { line, displayPoints } = this.lineAndDisplayFromRoutePoints(points);\n\n    const newLink = Object.assign({}, oldLink);\n    newLink.line = line;\n    newLink.points = points;\n    const hadPreviousRoute = oldLink?.points && Array.isArray(oldLink.points) && (oldLink.points as any[]).length >= 2;\n    // Raw prior layout polyline; redrawLines resamples to N for morphing (single resampling site).\n    let previousPoints: Array<{ x: number; y: number }> | undefined = hadPreviousRoute\n      ? this.clonePoints(oldLink.points as Array<{ x: number; y: number }>)\n      : undefined;\n    if (\n      this.effectiveLayoutTransition.scope === 'additive' &&\n      this.layoutMorphActive &&\n      !hadPreviousRoute &&\n      points.length >= 2 &&\n      this.edgeKeysAtLayoutTickStart.size > 0\n    ) {\n      const ek = this.linkKeyForLookup(baseEdge, mg);\n      if (!this.edgeKeysAtLayoutTickStart.has(ek)) {\n        const s = points[0];\n        previousPoints = [\n          { x: s.x, y: s.y },\n          { x: s.x, y: s.y }\n        ];\n      }\n    }\n    if (\n      this.effectiveLayoutTransition.scope === 'additive' &&\n      this.layoutMorphActive &&\n      this.edgeKeysAtLayoutTickStart.size > 0\n    ) {\n      const ekStable = this.linkKeyForLookup(baseEdge, mg);\n      if (this.edgeKeysAtLayoutTickStart.has(ekStable)) {\n        previousPoints = undefined;\n      }\n    }\n    if (\n      this.layoutMorphActive &&\n      this.effectiveLayoutTransition.scope === 'full' &&\n      this.previousLayoutTransforms?.size &&\n      !this.edgeKeysAtLayoutTickStart.has(this.linkKeyForLookup(baseEdge, mg))\n    ) {\n      const syn = this.syntheticPreviousEdgePointsFromPriorTransforms(baseEdge);\n      if (syn && syn.length >= 2) {\n        previousPoints = this.clonePoints(syn);\n      }\n    }\n    if (this.morphSuppressedThisTick) {\n      previousPoints = undefined;\n    }\n    newLink.previousPoints = previousPoints;\n\n    this.updateMidpointOnEdge(newLink, points);\n\n    const textPos = points[Math.floor(points.length / 2)];\n    if (textPos) {\n      newLink.textTransform = `translate(${textPos.x || 0},${textPos.y || 0})`;\n    }\n\n    newLink.textAngle = 0;\n    if (!newLink.oldLine) {\n      newLink.oldLine = newLink.line;\n    }\n\n    this.calcDominantBaseline(newLink, displayPoints);\n    newLinks.push(newLink);\n  }\n\n  /** Drop outlet contexts for ids no longer in the graph so templates do not retain stale references. */\n  private pruneTemplateOutletContextCaches(): void {\n    const g = this.graph;\n    if (!g) {\n      this.graphMainNodeOutletCtx.clear();\n      this.graphMinimapNodeOutletCtx.clear();\n      this.graphClusterOutletCtx.clear();\n      this.graphCompoundOutletCtx.clear();\n      this.graphLinkOutletCtx.clear();\n      return;\n    }\n    const nodeIds = new Set(g.nodes?.map(n => n.id) ?? []);\n    const clusterIds = new Set(g.clusters?.map(c => c.id) ?? []);\n    const compoundIds = new Set(g.compoundNodes?.map(c => c.id) ?? []);\n    const linkIds = new Set(g.edges?.map(e => e.id) ?? []);\n\n    for (const id of [...this.graphMainNodeOutletCtx.keys()]) {\n      if (!nodeIds.has(id)) {\n        this.graphMainNodeOutletCtx.delete(id);\n      }\n    }\n    for (const id of [...this.graphMinimapNodeOutletCtx.keys()]) {\n      if (!nodeIds.has(id)) {\n        this.graphMinimapNodeOutletCtx.delete(id);\n      }\n    }\n    for (const id of [...this.graphClusterOutletCtx.keys()]) {\n      if (!clusterIds.has(id)) {\n        this.graphClusterOutletCtx.delete(id);\n      }\n    }\n    for (const id of [...this.graphCompoundOutletCtx.keys()]) {\n      if (!compoundIds.has(id)) {\n        this.graphCompoundOutletCtx.delete(id);\n      }\n    }\n    for (const id of [...this.graphLinkOutletCtx.keys()]) {\n      if (!linkIds.has(id)) {\n        this.graphLinkOutletCtx.delete(id);\n      }\n    }\n  }\n\n  /** Stable context for `#nodeTemplate` on the main chart (see {@link graphMainNodeOutletCtx}). */\n  outletContextGraphNode(node: Node): { $implicit: Node; transitionAfterChangesActive: boolean } {\n    const morph = this.layoutJsMorphEnabled;\n    let o = this.graphMainNodeOutletCtx.get(node.id);\n    if (!o) {\n      o = { $implicit: node, transitionAfterChangesActive: morph };\n      this.graphMainNodeOutletCtx.set(node.id, o);\n    } else {\n      o.$implicit = node;\n      o.transitionAfterChangesActive = morph;\n    }\n    return o;\n  }\n\n  /** Stable context for `#nodeTemplate` / `#miniMapNodeTemplate` on the minimap. */\n  outletContextMinimapNode(node: Node): { $implicit: Node; transitionAfterChangesActive: boolean } {\n    const morph = this.layoutJsMorphEnabled;\n    let o = this.graphMinimapNodeOutletCtx.get(node.id);\n    if (!o) {\n      o = { $implicit: node, transitionAfterChangesActive: morph };\n      this.graphMinimapNodeOutletCtx.set(node.id, o);\n    } else {\n      o.$implicit = node;\n      o.transitionAfterChangesActive = morph;\n    }\n    return o;\n  }\n\n  /** Stable context for `#clusterTemplate`. */\n  outletContextCluster(node: Node): { $implicit: Node; transitionAfterChangesActive: boolean } {\n    const morph = this.layoutJsMorphEnabled;\n    let o = this.graphClusterOutletCtx.get(node.id);\n    if (!o) {\n      o = { $implicit: node, transitionAfterChangesActive: morph };\n      this.graphClusterOutletCtx.set(node.id, o);\n    } else {\n      o.$implicit = node;\n      o.transitionAfterChangesActive = morph;\n    }\n    return o;\n  }\n\n  /** Stable context for `#nodeTemplate` on compound nodes. */\n  outletContextCompoundNode(node: Node): { $implicit: Node; transitionAfterChangesActive: boolean } {\n    const morph = this.layoutJsMorphEnabled;\n    let o = this.graphCompoundOutletCtx.get(node.id);\n    if (!o) {\n      o = { $implicit: node, transitionAfterChangesActive: morph };\n      this.graphCompoundOutletCtx.set(node.id, o);\n    } else {\n      o.$implicit = node;\n      o.transitionAfterChangesActive = morph;\n    }\n    return o;\n  }\n\n  /** Stable context for `#linkTemplate`. */\n  outletContextLink(link: Edge): { $implicit: Edge; transitionAfterChangesActive: boolean } {\n    const morph = this.layoutJsMorphEnabled;\n    const id = link.id;\n    let o = this.graphLinkOutletCtx.get(id);\n    if (!o) {\n      o = { $implicit: link, transitionAfterChangesActive: morph };\n      this.graphLinkOutletCtx.set(id, o);\n    } else {\n      o.$implicit = link;\n      o.transitionAfterChangesActive = morph;\n    }\n    return o;\n  }\n\n  tick() {\n    this.pruneTemplateOutletContextCaches();\n    const tickId = ++this.drawCompleteTickId;\n    const suppressThisTick = this.suppressLayoutMorphThisTick || this.shouldSuppressLayoutMorphForViewport();\n    this.morphSuppressedThisTick = suppressThisTick;\n    this.edgeKeysAtLayoutTickStart = new Set(this.priorTickEdgeKeys);\n    const priorTickGraphIds = new Set(this.priorTickGraphNodeIds);\n    const priorTickGraphKinds = new Map(this.priorTickGraphKindById);\n    const mg = this.isLayoutMultigraph();\n\n    const newNodeIds: Set<string> = new Set();\n    const newClusterIds: Set<string> = new Set();\n    const newCompoundNodeIds: Set<string> = new Set();\n\n    this.applyTransforms(this.graph.nodes, newNodeIds);\n    this.applyTransforms(this.graph.clusters || [], newClusterIds);\n    this.applyTransforms(this.graph.compoundNodes || [], newCompoundNodeIds);\n\n    this.layoutAnimationTargets = null;\n    this.layoutAnimationClusterCompoundDimensions = null;\n    if (\n      !suppressThisTick &&\n      !this.isDragging &&\n      this.layoutMorphActive &&\n      this.previousLayoutTransforms?.size &&\n      this._oldLinks.length\n    ) {\n      const targets = new Map<string, { tx: number; ty: number }>();\n      const captureTargets = (items: Node[] | undefined) => {\n        if (!items) {\n          return;\n        }\n        for (const n of items) {\n          targets.set(n.id, this.resolveTranslateFromTransform(n.transform));\n        }\n      };\n      captureTargets(this.graph.nodes);\n      captureTargets(this.graph.clusters);\n      captureTargets(this.graph.compoundNodes);\n      this.layoutAnimationTargets = targets;\n\n      if (this.effectiveLayoutTransition.scope !== 'additive') {\n        const dimTargets = new Map<string, { width: number; height: number }>();\n        const captureDimTargets = (items: Node[] | undefined) => {\n          if (!items) {\n            return;\n          }\n          for (const n of items) {\n            const w = n.dimension?.width;\n            const h = n.dimension?.height;\n            if (w != null && h != null && Number.isFinite(w) && Number.isFinite(h) && w > 0 && h > 0) {\n              dimTargets.set(n.id, { width: w, height: h });\n            }\n          }\n        };\n        captureDimTargets(this.graph.clusters);\n        captureDimTargets(this.graph.compoundNodes);\n        this.layoutAnimationClusterCompoundDimensions = dimTargets;\n      }\n\n      this.applyAdditiveSmoothTransitionFilters(targets, priorTickGraphIds, priorTickGraphKinds);\n\n      const morph = this.effectiveLayoutTransition.morphCapture;\n      if (morph.syncTargetsFromPositionAfterTick && this.effectiveLayoutTransition.scope === 'full') {\n        this.syncLayoutAnimationTargetsFromPositions();\n      }\n      if (this.previousLayoutTransforms) {\n        this.snapMorphPreviousForAddedNodes(priorTickGraphIds, priorTickGraphKinds, !!morph.snapAddedNodeIds);\n      }\n\n      const resetToPrevious = (items: Node[] | undefined) => {\n        if (!items) {\n          return;\n        }\n        const prevs = this.previousLayoutTransforms!;\n        for (const n of items) {\n          if (prevs.has(n.id)) {\n            const prev = prevs.get(n.id)!;\n            n.transform = `translate(${prev.tx},${prev.ty})`;\n          }\n        }\n      };\n      resetToPrevious(this.graph.nodes);\n      resetToPrevious(this.graph.clusters);\n      resetToPrevious(this.graph.compoundNodes);\n\n      if (this.effectiveLayoutTransition.scope !== 'additive' && this.previousLayoutClusterCompoundDimensions?.size) {\n        const dimPrevs = this.previousLayoutClusterCompoundDimensions;\n        const seedDims = (items: Node[] | undefined) => {\n          items?.forEach(n => {\n            const d = dimPrevs.get(n.id);\n            if (d) {\n              n.dimension = { width: d.width, height: d.height };\n            }\n          });\n        };\n        seedDims(this.graph.clusters);\n        seedDims(this.graph.compoundNodes);\n      }\n    } else if (suppressThisTick) {\n      this.suppressLayoutMorphThisTick = false;\n      this.cancelLayoutUnifiedAnimation();\n      this.cancelAllEdgePathAnimations();\n      this.previousLayoutTransforms = null;\n      this.layoutAnimationTargets = null;\n      this.layoutAnimationClusterCompoundDimensions = null;\n      this.previousLayoutClusterCompoundDimensions = null;\n    }\n\n    const oldLinkMap = new Map<string, Edge>();\n    for (const ol of this._oldLinks) {\n      const key = this.linkKeyForLookup(ol, mg);\n      oldLinkMap.set(key, ol);\n    }\n\n    const graphEdgeMap = new Map<string, Edge>();\n    for (const nl of this.graph.edges) {\n      const key = this.linkKeyForLookup(nl, mg);\n      graphEdgeMap.set(key, nl);\n    }\n\n    const newLinks: Edge[] = [];\n    if (Array.isArray(this.graph.edgeLabels)) {\n      for (const edgeLabel of this.graph.edgeLabels) {\n        const lookupKey = this.linkKeyForLookup(edgeLabel, mg);\n        const legacyKey = String(edgeLabel.id ?? '').replace(/[^\\w-]*/g, '');\n        this.pushTickEdgeLink(newLinks, edgeLabel, lookupKey, legacyKey, oldLinkMap, graphEdgeMap, mg);\n      }\n    } else if (this.graph.edgeLabels != null) {\n      for (const edgeLabelId in this.graph.edgeLabels) {\n        const edgeLabel = this.graph.edgeLabels[edgeLabelId];\n        const lookupKey = this.graphlibEdgeLabelIdToLookupKey(edgeLabelId, mg);\n        const legacyKey = edgeLabelId.replace(/[^\\w-]*/g, '');\n        this.pushTickEdgeLink(newLinks, edgeLabel, lookupKey, legacyKey, oldLinkMap, graphEdgeMap, mg);\n      }\n    } else {\n      for (const edgeLabel of this.graph.edges ?? []) {\n        const lookupKey = this.linkKeyForLookup(edgeLabel, mg);\n        const legacyKey = String(edgeLabel.id ?? '').replace(/[^\\w-]*/g, '');\n        this.pushTickEdgeLink(newLinks, edgeLabel, lookupKey, legacyKey, oldLinkMap, graphEdgeMap, mg);\n      }\n    }\n\n    this.graph.edges = newLinks;\n\n    this.refreshPriorTickGraphIds(mg);\n\n    if (this.graph.edges) {\n      this._oldLinks = this.graph.edges.map(l => {\n        const newL = Object.assign({}, l);\n        newL.oldLine = l.line;\n        return newL;\n      });\n    }\n\n    // Before post-tick rAF so `[class.old-node]` matches every current id (avoids new-only flicker on zoom CD with tween).\n    this.oldNodes = newNodeIds;\n    this.oldClusters = newClusterIds;\n    this.oldCompoundNodes = newCompoundNodeIds;\n\n    requestAnimationFrame(() => {\n      // Full-scope morph keeps `node.transform` at previous layout until unified rAF; do not sync from `position` or\n      // refresh bounds/pan from the new layout here — that would wipe `resetToPrevious` and desync the viewport.\n      const nodeTweenActive =\n        !!this.layoutAnimationTargets && this.layoutMorphActive && this.effectiveLayoutTransition.scope !== 'additive';\n      if (!nodeTweenActive) {\n        this.applyNodeDimensions();\n      }\n      // `applyTransforms` used ELK dimensions; `applyNodeDimensions` may change width/height from the DOM.\n      // Recompute `translate` so the layout center (`position`) stays fixed while the box grows — otherwise edges\n      // (anchored to ELK geometry) stop meeting the node glyph.\n      if (!nodeTweenActive) {\n        this.syncNodeTransformsFromLayoutPositions();\n      }\n      const animateValue = this.animate();\n      const layoutMorphAfterView = (animateValue || this.layoutJsMorphEnabled) && !suppressThisTick;\n      if (animateValue || this.layoutJsMorphEnabled) {\n        this.cd.detectChanges();\n      }\n      this.scheduleRedrawLinesAfterView(layoutMorphAfterView, tickId);\n      if (this.hasGraphNodeLikeContent() && !nodeTweenActive) {\n        this.updateGraphDims();\n      }\n      if (!nodeTweenActive) {\n        this.updateMinimap();\n      }\n\n      if (!nodeTweenActive) {\n        const autoZoom = this.autoZoom();\n        if (autoZoom) {\n          const autoCenter = this.autoCenter();\n          this.zoomToFit({ autoCenter: autoCenter ? autoCenter : false });\n        } else if (this.autoCenter() && !autoZoom) {\n          this.center();\n        }\n      }\n    });\n\n    if (!suppressThisTick) {\n      this.lastInputTopologySignature = this.buildInputTopology();\n    }\n\n    this.morphSuppressedThisTick = false;\n    this.cd.markForCheck();\n  }\n\n  private applyTransforms(items: Node[], idCollector: Set<string>): void {\n    for (const n of items) {\n      this.updateNodeGroupTransform(n);\n      if (!n.data) {\n        n.data = {};\n      }\n      n.data.color = this.colors.getColor(this.groupResultsBy()(n));\n      // Pre-layout hooks may set `hidden` (e.g. `applyVisualContinuityBeforeLayout` for incremental smooth transitions,\n      // or `initializeNode` when `deferDisplayUntilPosition`). `tick` runs after layout positions exist — show nodes.\n      n.hidden = false;\n      idCollector.add(n.id);\n    }\n  }\n\n  /** `translate` for `<g class=\"node-group\">` from `position` (center when `centerNodesOnPositionChange`). */\n  private updateNodeGroupTransform(n: Node): void {\n    const center = this.centerNodesOnPositionChange();\n    const dx = center ? (n.dimension?.width ?? 0) / 2 : 0;\n    const dy = center ? (n.dimension?.height ?? 0) / 2 : 0;\n    const px = n.position?.x ?? 0;\n    const py = n.position?.y ?? 0;\n    n.transform = `translate(${px - dx || 0}, ${py - dy || 0})`;\n  }\n\n  /** Call after `applyNodeDimensions` when node box size changes but `position` (center) must stay fixed. */\n  private syncNodeTransformsFromLayoutPositions(): void {\n    const sync = (items: Node[] | undefined) => {\n      items?.forEach(n => this.updateNodeGroupTransform(n));\n    };\n    sync(this.graph.nodes);\n    sync(this.graph.clusters);\n    sync(this.graph.compoundNodes);\n  }\n\n  /** Optional CSS transform on the chart host during layout morph (`layoutTransitionEffect`). */\n  private applyLayoutOuterEffect(tscalar: number): void {\n    const eff = this.effectiveLayoutEffect;\n    const lt = this.effectiveLayoutTransition;\n    if (eff.kind === 'none' || lt.mode !== 'tween') {\n      this.layoutOuterTransform = null;\n      return;\n    }\n    const peak = eff.peakDegrees ?? 12;\n    const w = Math.sin(Math.PI * tscalar) * peak;\n    if (eff.kind === 'perspectiveFlip') {\n      this.layoutOuterTransform = `perspective(900px) rotateX(${w}deg)`;\n      return;\n    }\n    if (eff.kind === 'rotate') {\n      const pivot = eff.rotatePivot;\n      if (pivot === 'graphCenter' && this.graphDims?.width) {\n        this.layoutEffectTransformOrigin = `${(this.graphDims.width / 2 / Math.max(this.width || 1, 1)) * 100}% ${(this.graphDims.height / 2 / Math.max(this.height || 1, 1)) * 100}%`;\n      } else if (typeof pivot === 'object' && pivot?.nodeId) {\n        const n = this.graph?.nodes?.find(nd => nd.id === pivot.nodeId);\n        if (n?.position && this.width && this.height) {\n          this.layoutEffectTransformOrigin = `${(n.position.x / this.width) * 100}% ${(n.position.y / this.height) * 100}%`;\n        } else {\n          this.layoutEffectTransformOrigin = '50% 50%';\n        }\n      } else {\n        this.layoutEffectTransformOrigin = '50% 50%';\n      }\n      this.layoutOuterTransform = `rotate(${w}deg)`;\n      return;\n    }\n    this.layoutOuterTransform = null;\n  }\n\n  private cancelViewportPanAnimation(): void {\n    if (this.viewportPanAnimRafId != null) {\n      cancelAnimationFrame(this.viewportPanAnimRafId);\n      this.viewportPanAnimRafId = null;\n    }\n  }\n\n  /** Applies one programmatic pan step with optional viewport easing (translation only). */\n  private animateViewportPanDelta(dx: number, dy: number): void {\n    const cfg = this.effectiveViewportTransition;\n    if (!cfg.enabled || cfg.durationMs <= 0) {\n      this.transformationMatrix = transform(this.transformationMatrix, translate(dx, dy));\n      this.updateTransform();\n      return;\n    }\n    this.cancelViewportPanAnimation();\n    const easeFn = resolveGraphTransitionEasing(cfg.easing);\n    const startE = this.transformationMatrix.e;\n    const startF = this.transformationMatrix.f;\n    const endE = startE + dx;\n    const endF = startF + dy;\n    const duration = cfg.durationMs;\n    const startMs = performance.now();\n    const step = () => {\n      const u = Math.min(1, (performance.now() - startMs) / duration);\n      const t = easeFn(u);\n      this.transformationMatrix.e = startE + t * (endE - startE);\n      this.transformationMatrix.f = startF + t * (endF - startF);\n      this.updateTransform();\n      if (u >= 1) {\n        this.viewportPanAnimRafId = null;\n        return;\n      }\n      this.viewportPanAnimRafId = requestAnimationFrame(step);\n    };\n    this.viewportPanAnimRafId = requestAnimationFrame(step);\n  }\n\n  /**\n   * Default node template: circle inscribed in the layout box so ELK/Dagre edge ports (box edges) meet the glyph.\n   */\n  defaultNodeCircleRadius(node: Node): number {\n    const w = node.dimension?.width ?? 0;\n    const h = node.dimension?.height ?? 0;\n    if (w > 0 && h > 0) {\n      return Math.min(w, h) / 2;\n    }\n    return 10;\n  }\n\n  getMinimapTransform(): string {\n    switch (this.miniMapPosition()) {\n      case MiniMapPosition.UpperLeft: {\n        return 'translate(' + this.miniMapMargin().left + ',' + this.miniMapMargin().top + ')';\n      }\n      case MiniMapPosition.UpperRight: {\n        return (\n          'translate(' +\n          (this.dims.width - this.graphDims.width / this.minimapScaleCoefficient - this.miniMapMargin().right) +\n          ',' +\n          this.miniMapMargin().top +\n          ')'\n        );\n      }\n      case MiniMapPosition.LowerLeft: {\n        return (\n          'translate(' +\n          this.miniMapMargin().left +\n          ',' +\n          (this.dims.height - this.graphDims.height / this.minimapScaleCoefficient - this.miniMapMargin().bottom) +\n          ')'\n        );\n      }\n      case MiniMapPosition.LowerRight: {\n        return (\n          'translate(' +\n          (this.dims.width - this.graphDims.width / this.minimapScaleCoefficient - this.miniMapMargin().right) +\n          ',' +\n          (this.dims.height - this.graphDims.height / this.minimapScaleCoefficient - this.miniMapMargin().bottom) +\n          ')'\n        );\n      }\n      default: {\n        return '';\n      }\n    }\n  }\n\n  updateGraphDims() {\n    let minX = +Infinity;\n    let maxX = -Infinity;\n    let minY = +Infinity;\n    let maxY = -Infinity;\n\n    const center = this.centerNodesOnPositionChange();\n    const accumulate = (items: Node[] | undefined) => {\n      if (!items?.length) {\n        return;\n      }\n      for (let i = 0; i < items.length; i++) {\n        const node = items[i];\n        const w = node.dimension?.width ?? 0;\n        const h = node.dimension?.height ?? 0;\n        const px = node.position?.x ?? 0;\n        const py = node.position?.y ?? 0;\n        let left: number;\n        let right: number;\n        let top: number;\n        let bottom: number;\n        if (center) {\n          left = px - w / 2;\n          right = px + w / 2;\n          top = py - h / 2;\n          bottom = py + h / 2;\n        } else {\n          left = px;\n          right = px + w;\n          top = py;\n          bottom = py + h;\n        }\n        minX = left < minX ? left : minX;\n        maxX = right > maxX ? right : maxX;\n        minY = top < minY ? top : minY;\n        maxY = bottom > maxY ? bottom : maxY;\n      }\n    };\n    accumulate(this.graph.nodes);\n    accumulate(this.graph.compoundNodes);\n    accumulate(this.graph.clusters);\n\n    if (!isFinite(minX) || !isFinite(maxX) || !isFinite(minY) || !isFinite(maxY)) {\n      this.graphDims.width = 0;\n      this.graphDims.height = 0;\n      this.minimapOffsetX = 0;\n      this.minimapOffsetY = 0;\n      return;\n    }\n\n    minX -= 100;\n    minY -= 100;\n    maxX += 100;\n    maxY += 100;\n    this.graphDims.width = maxX - minX;\n    this.graphDims.height = maxY - minY;\n    this.minimapOffsetX = minX;\n    this.minimapOffsetY = minY;\n  }\n\n  /** True when the graph has at least one node, compound node, or cluster (for bounds / minimap). */\n  private hasGraphNodeLikeContent(): boolean {\n    return (\n      (this.graph?.nodes?.length ?? 0) +\n        (this.graph?.compoundNodes?.length ?? 0) +\n        (this.graph?.clusters?.length ?? 0) >\n      0\n    );\n  }\n\n  @throttleable(500)\n  updateMinimap() {\n    // Calculate the height/width total when there is drawable graph content\n    if (this.hasGraphNodeLikeContent()) {\n      this.updateGraphDims();\n\n      const miniMapMaxWidth = this.miniMapMaxWidth();\n      if (miniMapMaxWidth) {\n        this.minimapScaleCoefficient = this.graphDims.width / miniMapMaxWidth;\n      }\n      const miniMapMaxHeight = this.miniMapMaxHeight();\n      if (miniMapMaxHeight) {\n        this.minimapScaleCoefficient = Math.max(this.minimapScaleCoefficient, this.graphDims.height / miniMapMaxHeight);\n      }\n\n      this.minimapTransform = this.getMinimapTransform();\n    }\n  }\n\n  /**\n   * Resolves a layout node, compound node, or cluster by the `<g>` element `id`.\n   */\n  private findLayoutNodeByElementId(elementId: string): Node | undefined {\n    return (\n      this.graph.nodes.find(n => n.id === elementId) ??\n      this.graph.compoundNodes?.find(n => n.id === elementId) ??\n      this.graph.clusters?.find(c => c.id === elementId)\n    );\n  }\n\n  /**\n   * Measures one node-group SVG element and writes `dimension` on the model node.\n   */\n  private applyNodeDimensionFromSvgGroup(nativeElement: SVGGraphicsElement, node: Node): void {\n    // calculate the height\n    let dims: DOMRect;\n    try {\n      dims = nativeElement.getBBox();\n      if (!dims.width || !dims.height) {\n        return;\n      }\n    } catch {\n      // Skip drawing if element is not displayed - Firefox would throw an error here\n      return;\n    }\n    const nodeHeight = this.nodeHeight();\n    if (nodeHeight) {\n      node.dimension.height = node.dimension.height && node.meta.forceDimensions ? node.dimension.height : nodeHeight;\n    } else {\n      node.dimension.height = node.dimension.height && node.meta.forceDimensions ? node.dimension.height : dims.height;\n    }\n\n    const nodeMaxHeight = this.nodeMaxHeight();\n    if (nodeMaxHeight) {\n      node.dimension.height = Math.max(node.dimension.height, nodeMaxHeight);\n    }\n    const nodeMinHeight = this.nodeMinHeight();\n    if (nodeMinHeight) {\n      node.dimension.height = Math.min(node.dimension.height, nodeMinHeight);\n    }\n\n    const nodeWidth = this.nodeWidth();\n    if (nodeWidth) {\n      node.dimension.width = node.dimension.width && node.meta.forceDimensions ? node.dimension.width : nodeWidth;\n    } else {\n      // calculate the width\n      if (nativeElement.getElementsByTagName('text').length) {\n        let maxTextDims: { width: number; height: number } | undefined;\n        try {\n          for (const textElem of nativeElement.getElementsByTagName('text')) {\n            const currentBBox = textElem.getBBox();\n            if (!maxTextDims) {\n              maxTextDims = currentBBox;\n            } else {\n              if (currentBBox.width > maxTextDims.width) {\n                maxTextDims.width = currentBBox.width;\n              }\n              if (currentBBox.height > maxTextDims.height) {\n                maxTextDims.height = currentBBox.height;\n              }\n            }\n          }\n        } catch {\n          // Skip drawing if element is not displayed - Firefox would throw an error here\n          return;\n        }\n        if (!maxTextDims) {\n          return;\n        }\n        node.dimension.width =\n          node.dimension.width && node.meta.forceDimensions ? node.dimension.width : maxTextDims.width + 20;\n      } else {\n        node.dimension.width = node.dimension.width && node.meta.forceDimensions ? node.dimension.width : dims.width;\n      }\n    }\n\n    const nodeMaxWidth = this.nodeMaxWidth();\n    if (nodeMaxWidth) {\n      node.dimension.width = Math.max(node.dimension.width, nodeMaxWidth);\n    }\n    const nodeMinWidth = this.nodeMinWidth();\n    if (nodeMinWidth) {\n      node.dimension.width = Math.min(node.dimension.width, nodeMinWidth);\n    }\n  }\n\n  /**\n   * Measures the node element and applies the dimensions\n   *\n   * @memberOf GraphComponent\n   */\n  applyNodeDimensions(): void {\n    const measureRefs = (refs: readonly ElementRef[] | undefined) => {\n      refs?.forEach(elem => {\n        const nativeElement = elem.nativeElement as SVGGraphicsElement;\n        const node = this.findLayoutNodeByElementId(nativeElement.id);\n        if (!node) {\n          return;\n        }\n        this.applyNodeDimensionFromSvgGroup(nativeElement, node);\n      });\n    };\n    measureRefs(this.nodeElements());\n    measureRefs(this.clusterElements());\n  }\n\n  /**\n   * Runs after Angular commits the template so D3 binds to the live link `<path>` elements\n   * (OnPush + rAF alone can run too early). Retries once after `requestAnimationFrame` if link\n   * groups are not ready yet — avoids two immediate `afterNextRender` passes that cancel unified RAF.\n   */\n  private scheduleRedrawLinesAfterView(morph: boolean, tickId: number): void {\n    afterNextRender(\n      () => {\n        this.tryRedrawLinesAfterView(morph, 0, tickId);\n      },\n      { injector: this.injector }\n    );\n  }\n\n  /**\n   * d3 `select('#…')` for a host subtree element by HTML `id`. Raw ids may contain `--`, leading digits, etc., which are\n   * invalid in unescaped CSS id selectors.\n   */\n  private selectTextPathInHostById(id: string): any {\n    return select(this.el.nativeElement).select(`#${CSS.escape(id)}`);\n  }\n\n  /**\n   * Imperative paint from `edge.line` / `edge.textPath` only — does not cancel unified layout morph or per-edge rAF.\n   */\n  private repaintLinkPathsDomFromModel(): void {\n    this.linkElements()?.forEach(linkEl => {\n      const edge = this.graph.edges.find(lin => lin.id === linkEl.nativeElement.id);\n      if (!edge) {\n        return;\n      }\n      let pathSelection: any = select(linkEl.nativeElement).select('path.edge, path.line');\n      if (pathSelection.empty()) {\n        pathSelection = select(linkEl.nativeElement).select('path');\n      }\n      const textPathEl = edge.id ? this.selectTextPathInHostById(edge.id) : null;\n      if (!pathSelection.empty()) {\n        pathSelection.attr('d', edge.line);\n      }\n      if (textPathEl && !textPathEl.empty()) {\n        textPathEl.attr('d', edge.textPath);\n      }\n      this.updateMidpointOnEdge(edge, edge.points);\n    });\n  }\n\n  /**\n   * Binds D3 to link `<path>` elements, then emits {@link stateChange} (Output) and {@link drawComplete}\n   * when link groups match edge count (or after bounded retries).\n   *\n   * Observable layouts (Cola, D3 force) can emit faster than `afterNextRender`; callbacks may run with a\n   * superseded `tickId`. Those passes must not call {@link redrawLines} with morph enabled — it would\n   * {@link cancelLayoutUnifiedAnimation} and interrupt full-graph layout morphs. Instead, repaint paths\n   * from the current model when no rAF tween owns the paths; the latest `tickId` still runs full {@link redrawLines}.\n   * {@link finalizeTickOutput} alone enforces `drawCompleteTickId`.\n   */\n  private tryRedrawLinesAfterView(morph: boolean, retryDepth: number, tickId: number): void {\n    if (this._graphDestroyed) {\n      return;\n    }\n    const currentPass = tickId === this.drawCompleteTickId;\n    if (currentPass) {\n      this.redrawLines(morph);\n    } else if (this.layoutUnifiedRafId == null && this.edgePathRafIds.size === 0) {\n      this.repaintLinkPathsDomFromModel();\n    }\n    const expected = this.graph.edges?.length ?? 0;\n    const got = this.linkElements()?.length ?? 0;\n    const linksReady = expected === 0 || got === expected;\n    if (linksReady) {\n      this.finalizeTickOutput(tickId);\n      return;\n    }\n    if (retryDepth < 2) {\n      requestAnimationFrame(() => {\n        afterNextRender(\n          () => {\n            this.tryRedrawLinesAfterView(morph, retryDepth + 1, tickId);\n          },\n          { injector: this.injector }\n        );\n      });\n      return;\n    }\n    if (isDevMode()) {\n      console.warn(\n        '[ngx-graph] Link group count did not match edge count after retries; emitting drawComplete anyway.',\n        { expected, got }\n      );\n    }\n    this.finalizeTickOutput(tickId);\n  }\n\n  private finalizeTickOutput(tickId: number): void {\n    if (this._graphDestroyed || tickId !== this.drawCompleteTickId) {\n      return;\n    }\n    this.stateChange.emit({ state: NgxGraphStates.Output });\n  }\n\n  private cancelEdgePathAnimation(edgeId: string): void {\n    const rafId = this.edgePathRafIds.get(edgeId);\n    if (rafId != null) {\n      cancelAnimationFrame(rafId);\n      this.edgePathRafIds.delete(edgeId);\n    }\n  }\n\n  private cancelAllEdgePathAnimations(): void {\n    for (const rafId of this.edgePathRafIds.values()) {\n      cancelAnimationFrame(rafId);\n    }\n    this.edgePathRafIds.clear();\n  }\n\n  private cancelLayoutUnifiedAnimation(): void {\n    if (this.layoutUnifiedRafId != null) {\n      cancelAnimationFrame(this.layoutUnifiedRafId);\n      this.layoutUnifiedRafId = null;\n    }\n  }\n\n  /**\n   * One rAF driver: same eased t for node transforms (lerp) and edge path d (interpolatePinnedEdgeRoute).\n   * In `additive` mode, only edges morph; node transforms stay at layout output from `tick()` (no positional tween).\n   * Full scope lerps translates for nodes, clusters, and compounds; clusters/compounds also lerp `dimension` when both\n   * prior and target dimension maps are populated (see {@link layoutAnimationClusterCompoundDimensions}).\n   */\n  private runUnifiedLayoutAnimation(\n    edgeMorphs: Array<{\n      pathSelection: any;\n      textPathEl: any;\n      prevRaw: Array<{ x: number; y: number }>;\n      nextRaw: Array<{ x: number; y: number }>;\n      resampledPrev: Array<{ x: number; y: number }>;\n      resampledNext: Array<{ x: number; y: number }>;\n    }>,\n    durationMs: number\n  ): void {\n    const targets = this.layoutAnimationTargets!;\n    const prevs = this.previousLayoutTransforms!;\n    const dimPrevs = this.previousLayoutClusterCompoundDimensions;\n    const dimTgts = this.layoutAnimationClusterCompoundDimensions;\n    const easeFn = resolveGraphTransitionEasing(this.effectiveLayoutTransition.easing);\n    const skipNodePositionTween = this.effectiveLayoutTransition.scope === 'additive';\n\n    this.zone.runOutsideAngular(() => {\n      for (const m of edgeMorphs) {\n        const pts0 = this.interpolatePinnedEdgeRoute(m.prevRaw, m.nextRaw, m.resampledPrev, m.resampledNext, 0);\n        m.pathSelection.attr('d', this.generateLine(pts0));\n        if (m.textPathEl && !m.textPathEl.empty()) {\n          const { textPath } = this.lineAndTextPathFromPoints(pts0);\n          m.textPathEl.attr('d', textPath);\n        }\n      }\n      this.applyLayoutOuterEffect(0);\n\n      const startMs = performance.now();\n\n      const applyNodeTransforms = (tscalar: number) => {\n        if (skipNodePositionTween) {\n          return;\n        }\n        const apply = (items: Node[] | undefined) => {\n          if (!items) {\n            return;\n          }\n          for (const n of items) {\n            const tgt = targets.get(n.id);\n            const prv = prevs.get(n.id);\n            if (tgt && prv) {\n              const tx = prv.tx + tscalar * (tgt.tx - prv.tx);\n              const ty = prv.ty + tscalar * (tgt.ty - prv.ty);\n              n.transform = `translate(${tx},${ty})`;\n            }\n          }\n        };\n        apply(this.graph.nodes);\n        apply(this.graph.clusters);\n        apply(this.graph.compoundNodes);\n\n        if (dimPrevs?.size && dimTgts?.size) {\n          const lerpDims = (items: Node[] | undefined) => {\n            if (!items) {\n              return;\n            }\n            for (const n of items) {\n              const pv = dimPrevs.get(n.id);\n              const tg = dimTgts.get(n.id);\n              if (pv && tg) {\n                n.dimension = {\n                  width: pv.width + tscalar * (tg.width - pv.width),\n                  height: pv.height + tscalar * (tg.height - pv.height)\n                };\n              }\n            }\n          };\n          lerpDims(this.graph.clusters);\n          lerpDims(this.graph.compoundNodes);\n        }\n      };\n\n      const step = () => {\n        const elapsed = performance.now() - startMs;\n        const u = durationMs <= 0 ? 1 : Math.min(1, elapsed / durationMs);\n        const tscalar = easeFn(u);\n\n        for (const m of edgeMorphs) {\n          const pts = this.interpolatePinnedEdgeRoute(m.prevRaw, m.nextRaw, m.resampledPrev, m.resampledNext, tscalar);\n          m.pathSelection.attr('d', this.generateLine(pts));\n          if (m.textPathEl && !m.textPathEl.empty()) {\n            const { textPath } = this.lineAndTextPathFromPoints(pts);\n            m.textPathEl.attr('d', textPath);\n          }\n        }\n\n        // Apply node transforms in the same synchronous turn as D3 path updates so one paint\n        // shows edges and nodes at the same eased t (avoids nodes leading or lagging edge splines).\n        applyNodeTransforms(tscalar);\n        this.applyLayoutOuterEffect(tscalar);\n        this.zone.run(() => {\n          this.cd.markForCheck();\n        });\n\n        if (u >= 1) {\n          this.zone.run(() => {\n            if (!skipNodePositionTween) {\n              const finalize = (items: Node[] | undefined) => {\n                if (!items) {\n                  return;\n                }\n                for (const n of items) {\n                  const tgt = targets.get(n.id);\n                  if (tgt) {\n                    n.transform = `translate(${tgt.tx},${tgt.ty})`;\n                  }\n                }\n              };\n              finalize(this.graph.nodes);\n              finalize(this.graph.clusters);\n              finalize(this.graph.compoundNodes);\n\n              if (dimTgts?.size) {\n                const finalizeDims = (items: Node[] | undefined) => {\n                  if (!items) {\n                    return;\n                  }\n                  for (const n of items) {\n                    const d = dimTgts.get(n.id);\n                    if (d) {\n                      n.dimension = { width: d.width, height: d.height };\n                    }\n                  }\n                };\n                finalizeDims(this.graph.clusters);\n                finalizeDims(this.graph.compoundNodes);\n              }\n            }\n            for (const e of this.graph.edges) {\n              e.previousPoints = undefined;\n            }\n            this.layoutAnimationTargets = null;\n            this.previousLayoutTransforms = null;\n            this.layoutAnimationClusterCompoundDimensions = null;\n            this.previousLayoutClusterCompoundDimensions = null;\n            this.layoutOuterTransform = null;\n            this.repaintLinkPathsDomFromModel();\n            this.cd.markForCheck();\n            if (!skipNodePositionTween) {\n              if (this.hasGraphNodeLikeContent()) {\n                this.updateGraphDims();\n              }\n              this.updateMinimap();\n              if (this.autoCenter() && !this.autoZoom()) {\n                this.center();\n              }\n            }\n          });\n          this.layoutUnifiedRafId = null;\n          return;\n        }\n\n        this.layoutUnifiedRafId = requestAnimationFrame(step);\n      };\n\n      this.layoutUnifiedRafId = requestAnimationFrame(step);\n    });\n  }\n\n  /**\n   * Imperative path morph: D3 transitions do not reliably repaint `d` under Zone; rAF does.\n   */\n  private runEdgePathMorphAnimation(\n    edgeKey: string,\n    pathSelection: any,\n    textPathEl: any,\n    edge: Edge,\n    prevRaw: Array<{ x: number; y: number }>,\n    nextRaw: Array<{ x: number; y: number }>,\n    resampledPrev: Array<{ x: number; y: number }>,\n    resampledNext: Array<{ x: number; y: number }>,\n    durationMs: number,\n    startLine: string,\n    startText: string\n  ): void {\n    this.cancelEdgePathAnimation(edgeKey);\n\n    const easeFn = resolveGraphTransitionEasing(this.effectiveLayoutTransition.easing);\n\n    this.zone.runOutsideAngular(() => {\n      pathSelection.attr('d', startLine);\n      if (textPathEl && !textPathEl.empty()) {\n        textPathEl.attr('d', startText);\n      }\n\n      const startMs = performance.now();\n\n      const step = () => {\n        const elapsed = performance.now() - startMs;\n        const u = durationMs <= 0 ? 1 : Math.min(1, elapsed / durationMs);\n        const t = easeFn(u);\n        const pts = this.interpolatePinnedEdgeRoute(prevRaw, nextRaw, resampledPrev, resampledNext, t);\n        pathSelection.attr('d', this.generateLine(pts));\n        if (textPathEl && !textPathEl.empty()) {\n          const { textPath } = this.lineAndTextPathFromPoints(pts);\n          textPathEl.attr('d', textPath);\n        }\n\n        if (u >= 1) {\n          this.edgePathRafIds.delete(edgeKey);\n          this.zone.run(() => {\n            edge.previousPoints = undefined;\n          });\n          return;\n        }\n\n        const rafId = requestAnimationFrame(step);\n        this.edgePathRafIds.set(edgeKey, rafId);\n      };\n\n      const rafId = requestAnimationFrame(step);\n      this.edgePathRafIds.set(edgeKey, rafId);\n    });\n  }\n\n  /**\n   * Redraws the lines when dragged or viewport updated\n   *\n   * @memberOf GraphComponent\n   */\n  redrawLines(_animate = this.animate()): void {\n    const lt = this.effectiveLayoutTransition;\n    const duration = !_animate || !this.layoutMorphActive ? 0 : Math.max(0, lt.durationMs);\n\n    if (!_animate) {\n      this.cancelLayoutUnifiedAnimation();\n      this.cancelAllEdgePathAnimations();\n      this.layoutAnimationTargets = null;\n      this.previousLayoutTransforms = null;\n      this.layoutAnimationClusterCompoundDimensions = null;\n      this.previousLayoutClusterCompoundDimensions = null;\n    }\n\n    const unifiedLayout =\n      _animate &&\n      this.layoutMorphActive &&\n      !!this.layoutAnimationTargets?.size &&\n      !!this.previousLayoutTransforms?.size;\n\n    if (unifiedLayout) {\n      this.cancelLayoutUnifiedAnimation();\n      this.cancelAllEdgePathAnimations();\n\n      const mgUnified = this.isLayoutMultigraph();\n\n      const edgeMorphs: Array<{\n        pathSelection: any;\n        textPathEl: any;\n        prevRaw: Array<{ x: number; y: number }>;\n        nextRaw: Array<{ x: number; y: number }>;\n        resampledPrev: Array<{ x: number; y: number }>;\n        resampledNext: Array<{ x: number; y: number }>;\n      }> = [];\n\n      this.linkElements()?.forEach(linkEl => {\n        const edge = this.graph.edges.find(lin => lin.id === linkEl.nativeElement.id);\n\n        if (!edge) {\n          return;\n        }\n\n        let pathSelection: any = select(linkEl.nativeElement).select('path.edge, path.line');\n        if (pathSelection.empty()) {\n          pathSelection = select(linkEl.nativeElement).select('path');\n        }\n\n        const textPathEl = edge.id ? this.selectTextPathInHostById(edge.id) : null;\n\n        const prevRaw = edge.previousPoints;\n        const nextRaw = edge.points;\n        const n = this.effectiveEdgePathSampleCount();\n        const hasPrev = !!(prevRaw && prevRaw.length >= 2);\n        const prevN = hasPrev ? this.resamplePolyline(prevRaw, n) : [];\n        const nextN = nextRaw && nextRaw.length >= 2 ? this.resamplePolyline(nextRaw, n) : [];\n\n        let skipStableEdgeMorph = false;\n        if (\n          this.effectiveLayoutTransition.scope === 'additive' &&\n          this.edgeKeysAtLayoutTickStart.size > 0 &&\n          _animate\n        ) {\n          const ek = this.linkKeyForLookup(edge, mgUnified);\n          skipStableEdgeMorph = this.edgeKeysAtLayoutTickStart.has(ek);\n        }\n\n        const canMorph =\n          !skipStableEdgeMorph &&\n          hasPrev &&\n          nextRaw &&\n          nextRaw.length >= 2 &&\n          prevN.length >= 2 &&\n          nextN.length >= 2 &&\n          prevN.length === nextN.length;\n\n        if (!pathSelection.empty()) {\n          if (canMorph) {\n            edgeMorphs.push({\n              pathSelection,\n              textPathEl,\n              prevRaw: this.clonePoints(prevRaw as Array<{ x: number; y: number }>),\n              nextRaw,\n              resampledPrev: prevN,\n              resampledNext: nextN\n            });\n          } else {\n            // Keep prior route on the path while node `<g>` transforms still reflect `resetToPrevious`; snapping to\n            // `edge.line` here desyncs edges from nodes for the whole tween (Elk orientation full-scope blip).\n            pathSelection.attr('d', edge.oldLine ?? edge.line);\n          }\n        }\n\n        if (textPathEl && !textPathEl.empty() && !canMorph) {\n          textPathEl.attr('d', edge.oldTextPath ?? edge.textPath);\n        }\n\n        this.updateMidpointOnEdge(edge, edge.points);\n      });\n\n      this.runUnifiedLayoutAnimation(edgeMorphs, duration);\n      return;\n    }\n\n    this.linkElements()?.forEach(linkEl => {\n      const edge = this.graph.edges.find(lin => lin.id === linkEl.nativeElement.id);\n\n      if (!edge) {\n        return;\n      }\n\n      const edgeKey = String(edge.id ?? linkEl.nativeElement.id);\n\n      let pathSelection: any = select(linkEl.nativeElement).select('path.edge, path.line');\n      if (pathSelection.empty()) {\n        pathSelection = select(linkEl.nativeElement).select('path');\n      }\n\n      const textPathEl = edge.id ? this.selectTextPathInHostById(edge.id) : null;\n\n      const prevRaw = edge.previousPoints;\n      const nextRaw = edge.points;\n      const n = this.effectiveEdgePathSampleCount();\n      const hasPrev = !!(prevRaw && prevRaw.length >= 2);\n      const prevN = hasPrev ? this.resamplePolyline(prevRaw, n) : [];\n      const nextN = nextRaw && nextRaw.length >= 2 ? this.resamplePolyline(nextRaw, n) : [];\n\n      const canMorph =\n        _animate &&\n        hasPrev &&\n        nextRaw &&\n        nextRaw.length >= 2 &&\n        prevN.length >= 2 &&\n        nextN.length >= 2 &&\n        prevN.length === nextN.length;\n\n      const resampledPrev = canMorph ? prevN : [];\n      const resampledNext = canMorph ? nextN : [];\n\n      if (!pathSelection.empty()) {\n        if (canMorph) {\n          const startLine = this.generateLine(\n            this.interpolatePinnedEdgeRoute(prevRaw!, nextRaw, resampledPrev, resampledNext, 0)\n          );\n          const startText = edge.oldTextPath ?? edge.textPath ?? '';\n          this.runEdgePathMorphAnimation(\n            edgeKey,\n            pathSelection,\n            textPathEl,\n            edge,\n            prevRaw!,\n            nextRaw,\n            resampledPrev,\n            resampledNext,\n            duration,\n            startLine,\n            startText\n          );\n        } else {\n          pathSelection.attr('d', edge.line);\n        }\n      }\n\n      if (textPathEl && !textPathEl.empty() && !canMorph) {\n        textPathEl.attr('d', edge.textPath);\n      }\n\n      this.updateMidpointOnEdge(edge, edge.points);\n    });\n  }\n\n  private clonePoints(points: Array<{ x: number; y: number }>): Array<{ x: number; y: number }> {\n    return points.map(p => ({ x: p.x, y: p.y }));\n  }\n\n  /** Resample a polyline to `count` points along cumulative arc length. */\n  private resamplePolyline(points: Array<{ x: number; y: number }>, count: number): Array<{ x: number; y: number }> {\n    if (!points?.length || count < 2) {\n      return points?.length ? this.clonePoints(points) : [];\n    }\n    if (points.length === 1) {\n      return Array.from({ length: count }, () => ({ ...points[0] }));\n    }\n\n    const segLens: number[] = [];\n    let total = 0;\n    for (let i = 1; i < points.length; i++) {\n      const d = Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y);\n      segLens.push(d);\n      total += d;\n    }\n    if (total === 0) {\n      return Array.from({ length: count }, () => ({ ...points[0] }));\n    }\n\n    const result: Array<{ x: number; y: number }> = [];\n    for (let k = 0; k < count; k++) {\n      const targetDist = (k / (count - 1)) * total;\n      let acc = 0;\n      for (let s = 0; s < segLens.length; s++) {\n        const sl = segLens[s];\n        if (acc + sl >= targetDist || s === segLens.length - 1) {\n          const t = sl === 0 ? 0 : Math.min(1, Math.max(0, (targetDist - acc) / sl));\n          const a = points[s];\n          const b = points[s + 1];\n          result.push({\n            x: a.x + t * (b.x - a.x),\n            y: a.y + t * (b.y - a.y)\n          });\n          break;\n        }\n        acc += sl;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Interpolate between two layout snapshots. The first and last points always follow\n   * the raw layout endpoints (ports on source/target nodes); interior points blend the\n   * arc-length–resampled routes so straight, orthogonal, and curved polylines all morph smoothly.\n   */\n  private interpolatePinnedEdgeRoute(\n    prev: Array<{ x: number; y: number }>,\n    next: Array<{ x: number; y: number }>,\n    resampledPrev: Array<{ x: number; y: number }>,\n    resampledNext: Array<{ x: number; y: number }>,\n    s: number\n  ): Array<{ x: number; y: number }> {\n    const n = resampledPrev.length;\n    if (n < 2 || resampledNext.length !== n) {\n      return prev?.length ? this.clonePoints(prev) : [];\n    }\n    const start = {\n      x: prev[0].x + s * (next[0].x - prev[0].x),\n      y: prev[0].y + s * (next[0].y - prev[0].y)\n    };\n    const pe = prev[prev.length - 1];\n    const ne = next[next.length - 1];\n    const end = {\n      x: pe.x + s * (ne.x - pe.x),\n      y: pe.y + s * (ne.y - pe.y)\n    };\n    const out: Array<{ x: number; y: number }> = [];\n    for (let i = 0; i < n; i++) {\n      const a = resampledPrev[i];\n      const b = resampledNext[i];\n      out.push({\n        x: a.x + s * (b.x - a.x),\n        y: a.y + s * (b.y - a.y)\n      });\n    }\n    out[0] = start;\n    out[n - 1] = end;\n    return out;\n  }\n\n  private lineAndTextPathFromPoints(points: Array<{ x: number; y: number }>): {\n    line: string;\n    textPath: string;\n  } {\n    if (!points?.length) {\n      return { line: '', textPath: '' };\n    }\n    const line = this.generateLine(points);\n    const firstPoint = points[0];\n    const lastPoint = points[points.length - 1];\n    if (lastPoint.x < firstPoint.x) {\n      return { line, textPath: this.generateLine([...points].reverse()) };\n    }\n    return { line, textPath: line };\n  }\n\n  /**\n   * Layout-space node center from a prior `translate(tx,ty)` (inverse of {@link updateNodeGroupTransform}).\n   */\n  private layoutCenterFromPreviousTransform(node: Node, prev: { tx: number; ty: number }): { x: number; y: number } {\n    const center = this.centerNodesOnPositionChange();\n    const dx = center ? (node.dimension?.width ?? 0) / 2 : 0;\n    const dy = center ? (node.dimension?.height ?? 0) / 2 : 0;\n    return { x: prev.tx + dx, y: prev.ty + dy };\n  }\n\n  /** Same curve template as {@link buildFallbackEdgePoints} — smooth polyline between two layout centers. */\n  private polylineBetweenLayoutCenters(\n    s: { x: number; y: number },\n    t: { x: number; y: number }\n  ): Array<{ x: number; y: number }> {\n    const dx = t.x - s.x;\n    const dy = t.y - s.y;\n    const dist = Math.hypot(dx, dy) || 1;\n    const ox = (dx / dist) * Math.min(dist * 0.35, 120);\n    const oy = (dy / dist) * Math.min(dist * 0.35, 120);\n    return [s, { x: s.x + ox, y: s.y + oy }, { x: t.x - ox, y: t.y - oy }, t];\n  }\n\n  /**\n   * Prior-tick polyline for a brand-new edge key so full-scope morph starts from anchors aligned with\n   * `previousLayoutTransforms` (and current position for endpoints without a prior transform).\n   */\n  private syntheticPreviousEdgePointsFromPriorTransforms(edge: Edge): Array<{ x: number; y: number }> | undefined {\n    const prevs = this.previousLayoutTransforms;\n    if (!prevs?.size) {\n      return undefined;\n    }\n    const srcId = typeof edge.source === 'string' ? edge.source : (edge.source as { id?: string })?.id;\n    const tgtId = typeof edge.target === 'string' ? edge.target : (edge.target as { id?: string })?.id;\n    const src = this.graph.nodes?.find(n => n.id === srcId);\n    const tgt = this.graph.nodes?.find(n => n.id === tgtId);\n    const s = this.layoutCenterForSyntheticEdgeEndpoint(src, prevs);\n    const t = this.layoutCenterForSyntheticEdgeEndpoint(tgt, prevs);\n    if (s === undefined || t === undefined) {\n      return undefined;\n    }\n    return this.polylineBetweenLayoutCenters(s, t);\n  }\n\n  private layoutCenterForSyntheticEdgeEndpoint(\n    node: Node | undefined,\n    prevs: Map<string, { tx: number; ty: number }>\n  ): { x: number; y: number } | undefined {\n    if (!node) {\n      return undefined;\n    }\n    const p = prevs.get(node.id);\n    if (p) {\n      return this.layoutCenterFromPreviousTransform(node, p);\n    }\n    if (node.position) {\n      return { x: node.position.x, y: node.position.y };\n    }\n    return undefined;\n  }\n\n  /**\n   * When layout does not provide edge routes, build a smooth polyline between node centers (Bezier-friendly).\n   */\n  private buildFallbackEdgePoints(edge: Edge): Array<{ x: number; y: number }> {\n    const srcId = typeof edge.source === 'string' ? edge.source : (edge.source as any)?.id;\n    const tgtId = typeof edge.target === 'string' ? edge.target : (edge.target as any)?.id;\n    const src = this.graph.nodes.find(n => n.id === srcId);\n    const tgt = this.graph.nodes.find(n => n.id === tgtId);\n    if (!src?.position || !tgt?.position) {\n      return [];\n    }\n    const s = { x: src.position.x, y: src.position.y };\n    const t = { x: tgt.position.x, y: tgt.position.y };\n    return this.polylineBetweenLayoutCenters(s, t);\n  }\n\n  /**\n   * Calculate the text directions / flipping\n   *\n   * @memberOf GraphComponent\n   */\n  calcDominantBaseline(link: any, displayPoints?: Array<{ x: number; y: number }>): void {\n    const firstPoint = link.points[0];\n    const lastPoint = link.points[link.points.length - 1];\n    link.oldTextPath = link.textPath;\n\n    if (lastPoint.x < firstPoint.x) {\n      link.dominantBaseline = 'text-before-edge';\n\n      const rev =\n        displayPoints && displayPoints.length >= 2 ? [...displayPoints].reverse() : [...link.points].reverse();\n      link.textPath = this.generateLine(rev);\n    } else {\n      link.dominantBaseline = 'text-after-edge';\n      link.textPath = link.line;\n    }\n  }\n\n  /**\n   * Generate the new line path\n   *\n   * @memberOf GraphComponent\n   */\n  generateLine(points: any): any {\n    const lineFunction = shape\n      .line<any>()\n      .x(d => d.x)\n      .y(d => d.y)\n      .curve(this.curve());\n    return lineFunction(points);\n  }\n\n  /**\n   * Resamples the route polyline to {@link edgePathSampleCount} (via {@link effectiveEdgePathSampleCount}) and builds\n   * the stroke with {@link generateLine} so drag-time paths match layout ticks and morphs (same d3 `curve` + density).\n   */\n  private lineAndDisplayFromRoutePoints(points: Array<{ x: number; y: number }>): {\n    line: string;\n    displayPoints: Array<{ x: number; y: number }>;\n  } {\n    const n = this.effectiveEdgePathSampleCount();\n    const displayPoints = this.resamplePolyline(points, n);\n    return { line: this.generateLine(displayPoints), displayPoints };\n  }\n\n  /**\n   * Zoom was invoked from event\n   *\n   * @memberOf GraphComponent\n   */\n  onZoom($event: WheelEvent, direction: string): void {\n    if (this.enableTrackpadSupport() && !$event.ctrlKey) {\n      this.pan($event.deltaX * -1, $event.deltaY * -1);\n      return;\n    }\n\n    const zoomFactor = 1 + (direction === 'in' ? this.zoomSpeed() : -this.zoomSpeed());\n\n    // Check that zooming wouldn't put us out of bounds\n    const newZoomLevel = this.zoomLevel * zoomFactor;\n    if (newZoomLevel <= this.minZoomLevel() || newZoomLevel >= this.maxZoomLevel()) {\n      return;\n    }\n\n    // Check if zooming is enabled or not\n    if (!this.enableZoom()) {\n      return;\n    }\n\n    this.setViewportMorphSuppress();\n\n    if (this.panOnZoom() === true && $event) {\n      // Absolute mouse X/Y on the screen\n      const mouseX = $event.clientX;\n      const mouseY = $event.clientY;\n\n      // Transform the mouse X/Y into a SVG X/Y\n      const svg = this.el.nativeElement.querySelector('svg');\n      const svgGroup = svg.querySelector('g.chart');\n\n      const point = svg.createSVGPoint();\n      point.x = mouseX;\n      point.y = mouseY;\n      const svgPoint = point.matrixTransform(svgGroup.getScreenCTM().inverse());\n\n      // Panzoom\n      this.pan(svgPoint.x, svgPoint.y, true);\n      this.zoom(zoomFactor);\n      this.pan(-svgPoint.x, -svgPoint.y, true);\n    } else {\n      this.zoom(zoomFactor);\n    }\n  }\n\n  /**\n   * Pan by x/y\n   *\n   * @param x\n   * @param y\n   */\n  pan(x: number, y: number, ignoreZoomLevel: boolean = false): void {\n    this.cancelViewportPanAnimation();\n    const zoomLevel = ignoreZoomLevel ? 1 : this.zoomLevel;\n    this.transformationMatrix = transform(this.transformationMatrix, translate(x / zoomLevel, y / zoomLevel));\n\n    this.updateTransform();\n  }\n\n  /**\n   * Pan to a fixed x/y\n   *\n   */\n  panTo(x: number, y: number): void {\n    if (x === null || x === undefined || isNaN(x) || y === null || y === undefined || isNaN(y)) {\n      return;\n    }\n\n    const panX = -this.panOffsetX - x * this.zoomLevel + this.dims.width / 2;\n    const panY = -this.panOffsetY - y * this.zoomLevel + this.dims.height / 2;\n\n    const dx = panX / this.zoomLevel;\n    const dy = panY / this.zoomLevel;\n    this.animateViewportPanDelta(dx, dy);\n  }\n\n  /**\n   * Zoom by a factor\n   *\n   */\n  zoom(factor: number): void {\n    this.cancelViewportPanAnimation();\n    this.transformationMatrix = transform(this.transformationMatrix, scale(factor, factor));\n    this.zoomChange.emit(this.zoomLevel);\n    this.updateTransform();\n  }\n\n  /**\n   * Zoom to a fixed level. Pass `{ layout: false }` for viewport-only sync (e.g. `[zoomLevel]` binding).\n   */\n  zoomTo(level: number, options?: { layout?: boolean }): void {\n    const relayout = options?.layout ?? true;\n    this.cancelViewportPanAnimation();\n    this.transformationMatrix.a = isNaN(level) ? this.transformationMatrix.a : Number(level);\n    this.transformationMatrix.d = isNaN(level) ? this.transformationMatrix.d : Number(level);\n    this.zoomChange.emit(this.zoomLevel);\n    if (relayout) {\n      if (this.enablePreUpdateTransform()) {\n        this.updateTransform();\n      }\n      this.update({ forceRelayout: true });\n    } else {\n      this.setViewportMorphSuppress();\n      this.updateTransform();\n    }\n  }\n\n  /**\n   * Drag was invoked from an event\n   *\n   * @memberOf GraphComponent\n   */\n  onDrag(event: MouseEvent): void {\n    if (!this.enableDrag()) {\n      return;\n    }\n    const node = this.draggingNode;\n    const layout = this.layout();\n    if (layout && typeof layout !== 'string' && layout.onDrag) {\n      layout.onDrag(node, event);\n    }\n\n    node.position.x += event.movementX / this.zoomLevel;\n    node.position.y += event.movementY / this.zoomLevel;\n\n    // move the node\n    const x = node.position.x - (this.centerNodesOnPositionChange() ? node.dimension.width / 2 : 0);\n    const y = node.position.y - (this.centerNodesOnPositionChange() ? node.dimension.height / 2 : 0);\n    node.transform = `translate(${x}, ${y})`;\n\n    for (const link of this.graph.edges) {\n      if (\n        link.target === node.id ||\n        link.source === node.id ||\n        (link.target as any).id === node.id ||\n        (link.source as any).id === node.id\n      ) {\n        if (layout && typeof layout !== 'string') {\n          const result = layout.updateEdge(this.graph, link);\n          const result$ = result instanceof Observable ? result : of(result);\n          this.graphSubscription.add(\n            result$.subscribe(graph => {\n              this.graph = graph;\n              this.redrawEdge(link);\n            })\n          );\n        }\n      }\n    }\n\n    this.redrawLines(false);\n    this.updateMinimap();\n  }\n\n  redrawEdge(edge: Edge) {\n    let points = edge.points as Array<{ x: number; y: number }>;\n    if (!points || points.length < 2) {\n      const fb = this.buildFallbackEdgePoints(edge);\n      if (fb.length >= 2) {\n        points = fb;\n      }\n    }\n    if (!points || points.length < 2) {\n      points = [\n        { x: 0, y: 0 },\n        { x: 0, y: 0 }\n      ];\n    }\n    const { line, displayPoints } = this.lineAndDisplayFromRoutePoints(points);\n    edge.oldLine = edge.line;\n    edge.line = line;\n    this.calcDominantBaseline(edge, displayPoints);\n  }\n\n  /**\n   * Update the entire view for the new pan position\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  updateTransform(): void {\n    this.transform = toSVG(smoothMatrix(this.transformationMatrix, 100));\n    this.stateChange.emit({ state: NgxGraphStates.Transform });\n  }\n\n  /**\n   * Node was clicked\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  onClick(event: any): void {\n    this.select.emit(event);\n  }\n\n  /**\n   * Node was focused\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  onActivate(event): void {\n    if (this.activeEntries().indexOf(event) > -1) {\n      return;\n    }\n    this.activeEntries.set([event, ...this.activeEntries()]);\n    this.activate.emit({ value: event, entries: this.activeEntries() });\n  }\n\n  /**\n   * Node was defocused\n   *\n   * @memberOf GraphComponent\n   */\n  onDeactivate(event): void {\n    const idx = this.activeEntries().indexOf(event);\n\n    const next = [...this.activeEntries()];\n    next.splice(idx, 1);\n    this.activeEntries.set(next);\n\n    this.deactivate.emit({ value: event, entries: this.activeEntries() });\n  }\n\n  /**\n   * Get the domain series for the nodes\n   *\n   * @memberOf GraphComponent\n   */\n  getSeriesDomain(): any[] {\n    return (this.nodes() ?? [])\n      .map(d => this.groupResultsBy()(d))\n      .reduce((nodes: string[], node): any[] => (nodes.indexOf(node) !== -1 ? nodes : nodes.concat([node])), [])\n      .sort();\n  }\n\n  /**\n   * Tracking for the link\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  trackLinkBy(index: number, link: Edge): any {\n    return link.id;\n  }\n\n  /**\n   * Tracking for the node\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  trackNodeBy(index: number, node: Node): any {\n    return node.id;\n  }\n\n  /**\n   * Sets the colors the nodes\n   *\n   *\n   * @memberOf GraphComponent\n   */\n  setColors(): void {\n    this.colors = new ColorHelper(this.scheme(), this.seriesDomain, this.customColors());\n  }\n\n  /**\n   * On mouse move event, used for panning and dragging.\n   *\n   * @memberOf GraphComponent\n   */\n  @HostListener('document:mousemove', ['$event'])\n  onMouseMove($event: MouseEvent): void {\n    this.isMouseMoveCalled = true;\n    if ((this.isPanning || this.isMinimapPanning) && this.enablePan()) {\n      this.panWithConstraints(this.panningAxis(), $event);\n    } else if (this.isDragging && this.enableDrag()) {\n      this.onDrag($event);\n    }\n  }\n\n  @HostListener('document:mousedown', ['$event'])\n  onMouseDown(event: MouseEvent): void {\n    this.isMouseMoveCalled = false;\n  }\n\n  @HostListener('document:click', ['$event'])\n  graphClick(event: MouseEvent): void {\n    if (!this.isMouseMoveCalled) this.clickHandler.emit(event);\n  }\n\n  /**\n   * On touch start event to enable panning.\n   *\n   * @memberOf GraphComponent\n   */\n  onTouchStart(event: any): void {\n    if (!this.enablePan()) {\n      return;\n    }\n    this.cancelViewportPanAnimation();\n    this._touchLastX = event.changedTouches[0].clientX;\n    this._touchLastY = event.changedTouches[0].clientY;\n\n    this.isPanning = true;\n  }\n\n  /**\n   * On touch move event, used for panning.\n   *\n   */\n  @HostListener('document:touchmove', ['$event'])\n  onTouchMove($event: any): void {\n    if (this.isPanning && this.enablePan()) {\n      const clientX = $event.changedTouches[0].clientX;\n      const clientY = $event.changedTouches[0].clientY;\n      const movementX = clientX - this._touchLastX;\n      const movementY = clientY - this._touchLastY;\n      this._touchLastX = clientX;\n      this._touchLastY = clientY;\n\n      this.pan(movementX, movementY);\n    }\n  }\n\n  /**\n   * On touch end event to disable panning.\n   *\n   * @memberOf GraphComponent\n   */\n  onTouchEnd() {\n    this.isPanning = false;\n  }\n\n  /**\n   * On mouse up event to disable panning/dragging.\n   *\n   * @memberOf GraphComponent\n   */\n  @HostListener('document:mouseup', ['$event'])\n  onMouseUp(event: MouseEvent): void {\n    this.isDragging = false;\n    this.isPanning = false;\n    this.isMinimapPanning = false;\n    const layout = this.layout();\n    if (layout && typeof layout !== 'string' && layout.onDragEnd) {\n      layout.onDragEnd(this.draggingNode, event);\n    }\n  }\n\n  /**\n   * On node mouse down to kick off dragging\n   *\n   * @memberOf GraphComponent\n   */\n  onNodeMouseDown(event: MouseEvent, node: any): void {\n    if (!this.enableDrag()) {\n      return;\n    }\n    this.isDragging = true;\n    this.draggingNode = node;\n\n    const layout = this.layout();\n    if (layout && typeof layout !== 'string' && layout.onDragStart) {\n      layout.onDragStart(node, event);\n    }\n  }\n\n  /**\n   * On minimap drag mouse down to kick off minimap panning\n   *\n   * @memberOf GraphComponent\n   */\n  onMinimapDragMouseDown(): void {\n    if (!this.enablePan()) {\n      return;\n    }\n    this.isMinimapPanning = true;\n  }\n\n  /**\n   * On minimap pan event. Pans the graph to the clicked position.\n   * Uses screen→local conversion so it works for any `miniMapPosition` (the old formula assumed UpperRight).\n   *\n   * @memberOf GraphComponent\n   */\n  onMinimapPanTo(event: MouseEvent): void {\n    if (!this.enablePan()) {\n      return;\n    }\n    const p = this.minimapClientEventToGraphCoords(event);\n    if (!p) {\n      return;\n    }\n    this.panTo(p.gx, p.gy);\n    this.isMinimapPanning = true;\n  }\n\n  /**\n   * Map a click on the minimap background to graph (world) coordinates. `minimapTransform` is applied on the host\n   * `<g class=\"minimap\">`; `getScreenCTM()` on the target rect includes that transform so all corners behave the same.\n   */\n  private minimapClientEventToGraphCoords(event: MouseEvent): { gx: number; gy: number } | null {\n    const el = event.currentTarget;\n    if (!(el instanceof SVGGraphicsElement)) {\n      return null;\n    }\n    const svg = el.ownerSVGElement;\n    if (!svg) {\n      return null;\n    }\n    const pt = svg.createSVGPoint();\n    pt.x = event.clientX;\n    pt.y = event.clientY;\n    const ctm = el.getScreenCTM();\n    if (!ctm) {\n      return null;\n    }\n    const local = pt.matrixTransform(ctm.inverse());\n    const s = this.minimapScaleCoefficient;\n    return {\n      gx: this.minimapOffsetX + local.x * s,\n      gy: this.minimapOffsetY + local.y * s\n    };\n  }\n\n  /**\n   * Center the graph in the viewport\n   */\n  center(): void {\n    this.panTo(this.graphDims.width / 2, this.graphDims.height / 2);\n  }\n\n  /**\n   * Zooms to fit the entire graph\n   */\n  zoomToFit(zoomOptions?: NgxGraphZoomOptions): void {\n    this.dims = calculateViewDimensions({\n      width: this.width,\n      height: this.height\n    });\n    this.updateGraphDims();\n    const heightZoom = this.dims.height / this.graphDims.height;\n    const widthZoom = this.dims.width / this.graphDims.width;\n    let zoomLevel = Math.min(heightZoom, widthZoom, 1);\n\n    if (zoomLevel < this.minZoomLevel()) {\n      zoomLevel = this.minZoomLevel();\n    }\n\n    if (zoomLevel > this.maxZoomLevel()) {\n      zoomLevel = this.maxZoomLevel();\n    }\n\n    if (zoomOptions?.force === true || zoomLevel !== this.zoomLevel) {\n      this.zoomTo(zoomLevel);\n\n      if (zoomOptions?.autoCenter !== true) {\n        this.updateTransform();\n      }\n      if (zoomOptions?.autoCenter === true) {\n        this.center();\n      }\n      this.zoomChange.emit(this.zoomLevel);\n    }\n  }\n\n  /**\n   * Pans to the node\n   * @param nodeId\n   */\n  panToNodeId(nodeId: string): void {\n    const node = this.graph.nodes.find(n => n.id === nodeId);\n    if (!node) {\n      return;\n    }\n\n    this.panTo(node.position.x, node.position.y);\n  }\n\n  getCompoundNodeChildren(ids: Array<string>) {\n    return this.nodes().filter(node => ids.includes(node.id));\n  }\n\n  private panWithConstraints(key: string, event: MouseEvent) {\n    let x = event.movementX;\n    let y = event.movementY;\n    if (this.isMinimapPanning) {\n      x = -this.minimapScaleCoefficient * x * this.zoomLevel;\n      y = -this.minimapScaleCoefficient * y * this.zoomLevel;\n    }\n\n    switch (key) {\n      case PanningAxis.Horizontal:\n        this.pan(x, 0);\n        break;\n      case PanningAxis.Vertical:\n        this.pan(0, y);\n        break;\n      default:\n        this.pan(x, y);\n        break;\n    }\n  }\n\n  private updateMidpointOnEdge(edge: Edge, points: any): void {\n    if (!edge || !points) {\n      return;\n    }\n\n    if (points.length % 2 === 1) {\n      edge.midPoint = points[Math.floor(points.length / 2)];\n    } else {\n      // Checking if the current layout is Elk\n      if ((this.layout() as Layout)?.settings?.properties?.['elk.direction']) {\n        this._calcMidPointElk(edge, points);\n      } else {\n        const _first = points[points.length / 2];\n        const _second = points[points.length / 2 - 1];\n        edge.midPoint = {\n          x: (_first.x + _second.x) / 2,\n          y: (_first.y + _second.y) / 2\n        };\n      }\n    }\n  }\n\n  private _calcMidPointElk(edge: Edge, points: any): void {\n    let _firstX = null;\n    let _secondX = null;\n    let _firstY = null;\n    let _secondY = null;\n    const orientation = (this.layout() as Layout).settings?.properties['elk.direction'];\n    const hasBend =\n      orientation === 'RIGHT' ? points.some(p => p.y !== points[0].y) : points.some(p => p.x !== points[0].x);\n\n    if (hasBend) {\n      // getting the last two points\n      _firstX = points[points.length - 1];\n      _secondX = points[points.length - 2];\n      _firstY = points[points.length - 1];\n      _secondY = points[points.length - 2];\n    } else {\n      if (orientation === 'RIGHT') {\n        _firstX = points[0];\n        _secondX = points[points.length - 1];\n        _firstY = points[points.length / 2];\n        _secondY = points[points.length / 2 - 1];\n      } else {\n        _firstX = points[points.length / 2];\n        _secondX = points[points.length / 2 - 1];\n        _firstY = points[0];\n        _secondY = points[points.length - 1];\n      }\n    }\n\n    edge.midPoint = {\n      x: (_firstX.x + _secondX.x) / 2,\n      y: (_firstY.y + _secondY.y) / 2\n    };\n  }\n\n  public basicUpdate(): void {\n    const view = this.view();\n    if (view) {\n      this.width = view[0];\n      this.height = view[1];\n    } else {\n      const dims = this.getContainerDims();\n      if (dims) {\n        this.width = dims.width;\n        this.height = dims.height;\n      }\n    }\n\n    // default values if width or height are 0 or undefined\n    if (!this.width) {\n      this.width = 600;\n    }\n\n    if (!this.height) {\n      this.height = 400;\n    }\n\n    this.width = Math.floor(this.width);\n    this.height = Math.floor(this.height);\n\n    if (this.cd) {\n      this.cd.markForCheck();\n    }\n  }\n\n  public getContainerDims(): any {\n    let width;\n    let height;\n    const hostElem = this.el.nativeElement;\n\n    if (hostElem.parentNode !== null) {\n      // Get the container dimensions\n      const dims = hostElem.parentNode.getBoundingClientRect();\n      width = dims.width;\n      height = dims.height;\n    }\n\n    if (width && height) {\n      return { width, height };\n    }\n\n    return null;\n  }\n\n  /**\n   * Checks if the graph has dimensions\n   */\n  public hasGraphDims(): boolean {\n    return this.graphDims.width > 0 && this.graphDims.height > 0;\n  }\n\n  /**\n   * Checks if all nodes have dimension\n   */\n  public hasNodeDims(): boolean {\n    return this.graph.nodes?.every(node => node.dimension.width > 0 && node.dimension.height > 0);\n  }\n\n  /**\n   * Checks if all compound nodes have dimension\n   */\n  public hasCompoundNodeDims(): boolean {\n    return this.graph.compoundNodes?.every(node => node.dimension.width > 0 && node.dimension.height > 0);\n  }\n\n  /**\n   * Checks if all clusters have dimension\n   */\n  public hasClusterDims(): boolean {\n    return this.graph.clusters?.every(node => node.dimension.width > 0 && node.dimension.height > 0);\n  }\n\n  /**\n   * Checks if the graph and all nodes have dimension.\n   */\n  public hasDims(): boolean {\n    return (\n      this.hasGraphDims() &&\n      this.hasNodeDims() &&\n      ((this.compoundNodes()?.length ? this.hasCompoundNodeDims() : true) ||\n        (this.clusters()?.length ? this.hasClusterDims() : true))\n    );\n  }\n\n  protected unbindEvents(): void {\n    if (this.resizeSubscription) {\n      this.resizeSubscription.unsubscribe();\n    }\n  }\n\n  private bindWindowResizeEvent(): void {\n    const source = observableFromEvent(window, 'resize');\n    const subscription = source.pipe(debounceTime(200)).subscribe(e => {\n      this.update();\n      if (this.cd) {\n        this.cd.markForCheck();\n      }\n    });\n    this.resizeSubscription = subscription;\n  }\n}\n","<div\n  class=\"ngx-graph-outer\"\n  [class.layout-js-driven]=\"layoutJsDrivenHostClass\"\n  [class.smooth-layout]=\"layoutJsMorphEnabled\"\n  [style.transform]=\"layoutOuterTransform\"\n  [style.transform-origin]=\"layoutEffectTransformOrigin\"\n  [style.width.px]=\"width\"\n  [animate.enter]=\"animate() ? 'ngx-graph-outer-fade' : null\"\n  (mouseWheelUp)=\"onZoom($event, 'in')\"\n  (mouseWheelDown)=\"onZoom($event, 'out')\"\n  mouseWheel\n>\n  <svg:svg class=\"ngx-graph\" [attr.width]=\"width\" [attr.height]=\"height\">\n    @if (initialized && graph) {\n      <svg:g\n        [attr.transform]=\"transform\"\n        (touchstart)=\"onTouchStart($event)\"\n        (touchend)=\"onTouchEnd()\"\n        class=\"graph chart\"\n      >\n        <defs>\n          @if (defsTemplate()) {\n            <ng-container [ngTemplateOutlet]=\"defsTemplate()\"></ng-container>\n          }\n          @for (link of graph.edges; track trackLinkBy($index, link)) {\n            <svg:path class=\"text-path\" [attr.id]=\"link.id\"></svg:path>\n          }\n        </defs>\n        <svg:rect\n          class=\"panning-rect\"\n          [attr.width]=\"dims.width * 100\"\n          [attr.height]=\"dims.height * 100\"\n          [attr.transform]=\"'translate(' + (-dims.width || 0) * 50 + ',' + (-dims.height || 0) * 50 + ')'\"\n          (mousedown)=\"onPanningSurfaceMouseDown()\"\n        />\n        <ng-content></ng-content>\n        <svg:g class=\"clusters\">\n          @for (node of graph.clusters; track trackNodeBy($index, node)) {\n            <svg:g\n              #clusterElement\n              class=\"node-group\"\n              [class.old-node]=\"(animate() || layoutJsMorphEnabled) && oldClusters.has(node.id)\"\n              [id]=\"node.id\"\n              [attr.transform]=\"node.transform\"\n              (click)=\"onClick(node)\"\n            >\n              @if (clusterTemplate() && !node.hidden) {\n                <ng-container\n                  [ngTemplateOutlet]=\"clusterTemplate()\"\n                  [ngTemplateOutletContext]=\"outletContextCluster(node)\"\n                ></ng-container>\n              }\n              @if (!clusterTemplate() && !node.hidden) {\n                <svg:g class=\"node cluster\">\n                  <svg:rect\n                    [attr.width]=\"node.dimension.width\"\n                    [attr.height]=\"node.dimension.height\"\n                    [attr.fill]=\"node.data?.color\"\n                  />\n                  <svg:text alignment-baseline=\"central\" [attr.x]=\"10\" [attr.y]=\"node.dimension.height / 2\">\n                    {{ node.label }}\n                  </svg:text>\n                </svg:g>\n              }\n            </svg:g>\n          }\n        </svg:g>\n        <svg:g class=\"compound-nodes\">\n          @for (node of graph.compoundNodes; track trackNodeBy($index, node)) {\n            <svg:g\n              #nodeElement\n              class=\"node-group\"\n              [class.old-node]=\"(animate() || layoutJsMorphEnabled) && oldCompoundNodes.has(node.id)\"\n              [id]=\"node.id\"\n              [attr.transform]=\"node.transform\"\n              (click)=\"onClick(node)\"\n              (mousedown)=\"onNodeMouseDown($event, node)\"\n            >\n              @if (nodeTemplate() && !node.hidden) {\n                <ng-container\n                  [ngTemplateOutlet]=\"nodeTemplate()\"\n                  [ngTemplateOutletContext]=\"outletContextCompoundNode(node)\"\n                ></ng-container>\n              }\n              @if (!nodeTemplate() && !node.hidden) {\n                <svg:g class=\"node compound-node\">\n                  <svg:rect\n                    [attr.width]=\"node.dimension.width\"\n                    [attr.height]=\"node.dimension.height\"\n                    [attr.fill]=\"node.data?.color\"\n                  />\n                  <svg:text alignment-baseline=\"central\" [attr.x]=\"10\" [attr.y]=\"node.dimension.height / 2\">\n                    {{ node.label }}\n                  </svg:text>\n                </svg:g>\n              }\n            </svg:g>\n          }\n        </svg:g>\n        <svg:g class=\"links\">\n          @for (link of graph.edges; track trackLinkBy($index, link)) {\n            <svg:g #linkElement class=\"link-group\" [id]=\"link.id\">\n              @if (linkTemplate()) {\n                <ng-container\n                  [ngTemplateOutlet]=\"linkTemplate()\"\n                  [ngTemplateOutletContext]=\"outletContextLink(link)\"\n                ></ng-container>\n              }\n              @if (!linkTemplate()) {\n                <svg:path class=\"edge line\" />\n              }\n            </svg:g>\n          }\n        </svg:g>\n        <svg:g class=\"nodes\" #nodeGroup>\n          @for (node of graph.nodes; track trackNodeBy($index, node)) {\n            <svg:g\n              #nodeElement\n              class=\"node-group\"\n              [class.old-node]=\"(animate() || layoutJsMorphEnabled) && oldNodes.has(node.id)\"\n              [id]=\"node.id\"\n              [attr.transform]=\"node.transform\"\n              (click)=\"onClick(node)\"\n              (mousedown)=\"onNodeMouseDown($event, node)\"\n            >\n              @if (nodeTemplate() && !node.hidden) {\n                <ng-container\n                  [ngTemplateOutlet]=\"nodeTemplate()\"\n                  [ngTemplateOutletContext]=\"outletContextGraphNode(node)\"\n                ></ng-container>\n              }\n              @if (!nodeTemplate() && !node.hidden) {\n                <svg:circle\n                  [attr.r]=\"defaultNodeCircleRadius(node)\"\n                  [attr.cx]=\"(node.dimension?.width ?? 0) / 2\"\n                  [attr.cy]=\"(node.dimension?.height ?? 0) / 2\"\n                  [attr.fill]=\"node.data?.color\"\n                />\n              }\n            </svg:g>\n          }\n        </svg:g>\n      </svg:g>\n    }\n\n    <svg:clipPath [attr.id]=\"minimapClipPathId\">\n      <svg:rect\n        [attr.width]=\"graphDims.width / minimapScaleCoefficient\"\n        [attr.height]=\"graphDims.height / minimapScaleCoefficient\"\n      ></svg:rect>\n    </svg:clipPath>\n\n    @if (showMiniMap()) {\n      <svg:g class=\"minimap\" [attr.transform]=\"minimapTransform\" [attr.clip-path]=\"'url(#' + minimapClipPathId + ')'\">\n        <svg:rect\n          class=\"minimap-background\"\n          [attr.width]=\"graphDims.width / minimapScaleCoefficient\"\n          [attr.height]=\"graphDims.height / minimapScaleCoefficient\"\n          (mousedown)=\"onMinimapPanTo($event)\"\n        ></svg:rect>\n        <svg:g\n          [style.transform]=\"\n            'translate(' +\n            -minimapOffsetX / minimapScaleCoefficient +\n            'px,' +\n            -minimapOffsetY / minimapScaleCoefficient +\n            'px)'\n          \"\n        >\n          <svg:g class=\"minimap-nodes\" [style.transform]=\"'scale(' + 1 / minimapScaleCoefficient + ')'\">\n            @for (node of graph?.nodes ?? []; track trackNodeBy($index, node)) {\n              <svg:g\n                #nodeElement\n                class=\"node-group\"\n                [class.old-node]=\"(animate() || layoutJsMorphEnabled) && oldNodes.has(node.id)\"\n                [id]=\"node.id\"\n                [attr.transform]=\"node.transform\"\n              >\n                @if (miniMapNodeTemplate()) {\n                  <ng-container\n                    [ngTemplateOutlet]=\"miniMapNodeTemplate()\"\n                    [ngTemplateOutletContext]=\"outletContextMinimapNode(node)\"\n                  ></ng-container>\n                }\n                @if (!miniMapNodeTemplate() && nodeTemplate()) {\n                  <ng-container\n                    [ngTemplateOutlet]=\"nodeTemplate()\"\n                    [ngTemplateOutletContext]=\"outletContextMinimapNode(node)\"\n                  ></ng-container>\n                }\n                @if (!nodeTemplate() && !miniMapNodeTemplate() && !node.hidden) {\n                  <svg:circle\n                    [attr.r]=\"defaultNodeCircleRadius(node) / minimapScaleCoefficient\"\n                    [attr.cx]=\"(node.dimension?.width ?? 0) / 2 / minimapScaleCoefficient\"\n                    [attr.cy]=\"(node.dimension?.height ?? 0) / 2 / minimapScaleCoefficient\"\n                    [attr.fill]=\"node.data?.color\"\n                  />\n                }\n              </svg:g>\n            }\n          </svg:g>\n          <svg:rect\n            [attr.transform]=\"\n              'translate(' +\n              panOffsetX / zoomLevel / -minimapScaleCoefficient +\n              ',' +\n              panOffsetY / zoomLevel / -minimapScaleCoefficient +\n              ')'\n            \"\n            class=\"minimap-drag\"\n            [class.panning]=\"isMinimapPanning\"\n            [attr.width]=\"width / minimapScaleCoefficient / zoomLevel\"\n            [attr.height]=\"height / minimapScaleCoefficient / zoomLevel\"\n            (mousedown)=\"onMinimapDragMouseDown()\"\n          ></svg:rect>\n        </svg:g>\n      </svg:g>\n    }\n  </svg:svg>\n</div>\n","import { NgModule } from '@angular/core';\nimport { GraphComponent } from './graph.component';\nimport { MouseWheelDirective } from './mouse-wheel.directive';\nimport { LayoutService } from './layouts/layout.service';\nimport { CommonModule } from '@angular/common';\nimport { VisibilityObserver } from '../utils/visibility-observer';\nexport { GraphComponent, LayoutService };\n\n/**\n * @deprecated `GraphComponent`, `MouseWheelDirective`, and `VisibilityObserver` are now standalone.\n * Import them directly into your component's `imports` array instead of importing this module.\n */\n@NgModule({\n  imports: [CommonModule, GraphComponent, MouseWheelDirective, VisibilityObserver],\n  exports: [GraphComponent, MouseWheelDirective],\n  providers: [LayoutService]\n})\nexport class GraphModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraphModule } from './graph/graph.module';\n\n/**\n * @deprecated `GraphComponent` is now standalone. Import it directly into your component's\n * `imports` array instead of importing `NgxGraphModule`.\n */\n@NgModule({\n  imports: [CommonModule, GraphModule],\n  exports: [GraphModule]\n})\nexport class NgxGraphModule {}\n","/*\n * Public API Surface of ngx-graph\n */\n\nexport * from './lib/ngx-graph.module';\n\nexport * from './lib/models/edge.model';\nexport * from './lib/models/graph.model';\nexport * from './lib/models/layout.model';\nexport * from './lib/models/node.model';\n\nexport * from './lib/graph/graph.component';\nexport * from './lib/graph/graph.module';\nexport * from './lib/graph/transition.model';\n\nexport * from './lib/graph/mouse-wheel.directive';\nexport * from './lib/graph/layouts/colaForceDirected';\nexport * from './lib/graph/layouts/customLayouts';\nexport * from './lib/graph/layouts/d3ForceDirected';\nexport * from './lib/graph/layouts/dagre';\nexport * from './lib/graph/layouts/dagreCluster';\nexport * from './lib/graph/layouts/dagreNodesOnly';\nexport * from './lib/graph/layouts/layout-layered-constants';\nexport * from './lib/graph/layouts/edge-geometry';\n\nexport * from './lib/enums/mini-map-position.enum';\nexport * from './lib/enums/panning.enum';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["observableFromEvent","i1.LayoutService"],"mappings":"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"}