{
  "version": 3,
  "sources": ["../src/index.ts", "../src/graph-data/arrow-graph-data-builder.ts", "../src/graph/graph-normalization.ts", "../src/graph/node.ts", "../src/graph/edge.ts", "../src/utils/log.ts", "../src/core/cache.ts", "../src/graph/graph.ts", "../src/graph/classic-graph.ts", "../src/graph-data/plain-graph-data-builder.ts", "../src/graph/functions/arrow-utils.ts", "../src/graph/arrow-graph.ts", "../src/core/graph-layout.ts", "../src/style/graph-style-engine.ts", "../src/style/style-property.ts", "../src/style/stylesheet-engine.ts", "../src/style/graph-stylesheet-schema.ts", "../src/style/graph-style-accessor-map.ts", "../src/core/graph-engine.ts", "../src/layouts/simple-layout.ts", "../src/layouts/d3-force/d3-force-layout.ts", "../src/layouts/d3-dag/d3-dag-layout.ts", "../src/layouts/d3-dag/collapsable-d3-dag-layout.ts", "../src/layouts/gpu-force/gpu-force-layout.ts", "../src/layouts/experimental/radial-layout.ts", "../src/layouts/experimental/force-multi-graph-layout.ts", "../src/layouts/experimental/hive-plot-layout.ts", "../src/layers/graph-layer.ts", "../src/style/graph-layer-stylesheet.ts", "../src/layers/node-layers/circle-layer.ts", "../src/layers/node-layers/image-layer.ts", "../src/layers/node-layers/label-layer.ts", "../src/layers/common-layers/zoomable-text-layer/zoomable-text-layer.ts", "../src/layers/node-layers/rectangle-layer.ts", "../src/layers/node-layers/rounded-rectangle-layer-fragment.ts", "../src/layers/node-layers/rounded-rectangle-layer.ts", "../src/layers/node-layers/path-rounded-rectangle-layer.ts", "../src/utils/polygon-calculations.ts", "../src/layers/node-layers/zoomable-marker-layer.ts", "../src/layers/common-layers/marker-layer/marker-layer.ts", "../src/layers/common-layers/marker-layer/marker-mapping.ts", "../src/layers/common-layers/marker-layer/atlas-data-url.ts", "../src/layers/edge-layer.ts", "../src/layers/edge-layers/straight-line-edge-layer.ts", "../src/layers/edge-layers/path-edge-layer.ts", "../src/layers/edge-layers/curved-edge-layer.ts", "../src/layers/common-layers/spline-layer/spline-layer.ts", "../src/layers/edge-layers/edge-label-layer.ts", "../src/layers/edge-layers/flow-layer.ts", "../src/layers/common-layers/flow-path-layer/flow-path-layer.ts", "../src/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.ts", "../src/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.ts", "../src/layers/edge-layers/edge-arrow-layer.ts", "../src/layers/edge-layers/arrow-2d-geometry.ts", "../src/utils/node-boundary.ts", "../src/layers/edge-attachment-helper.ts", "../src/layers/common-layers/grid-layer/grid-layer.ts", "../src/utils/layer-utils.ts", "../src/utils/collapsed-chains.ts", "../src/core/interaction-manager.ts", "../src/utils/rank-grid.ts", "../src/graph-data/graph-data.ts", "../src/graph/functions/create-graph-from-data.ts", "../src/loaders/json-graph-loader.ts", "../src/loaders/dot-graph-loader.ts", "../src/_deprecated/old-constants.ts"],
  "sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// Graph Data - output from loaders, input to writers\n\nexport type {\n  GraphData,\n  PlainGraphData,\n  ArrowGraphData /* , GraphNodeData, GraphEdgeData */\n} from './graph-data/graph-data';\nexport type {\n  GraphDataBuilder /* , GraphDataBuilderOptions */\n} from './graph-data/graph-data-builder';\nexport {\n  ArrowGraphDataBuilder,\n  type ArrowGraphDataBuilderOptions\n} from './graph-data/arrow-graph-data-builder';\n\n// core - Graph representation and layout\nexport type {Graph, NodeInterface, EdgeInterface} from './graph/graph';\nexport {Node} from './graph/node';\nexport {Edge} from './graph/edge';\n\nexport {ClassicGraph} from './graph/classic-graph';\nexport {ArrowGraph} from './graph/arrow-graph';\n// export {\n//   TabularGraph,\n//   TabularNode,\n//   TabularEdge,\n//   type NodeIndex,\n//   type EdgeIndex,\n//   type TabularGraphSource,\n//   type TabularGraphAccessors,\n//   type TabularNodeAccessors,\n//   type TabularEdgeAccessors\n// } from './graph/tabular-graph';\n\n// Graph Engine\n\nexport {GraphEngine} from './core/graph-engine';\n\n// graph-layers layouts\nexport type {GraphLayoutProps, GraphLayoutState, GraphLayoutEventDetail} from './core/graph-layout';\nexport {GraphLayout} from './core/graph-layout';\n\nexport {SimpleLayout} from './layouts/simple-layout';\nexport {D3ForceLayout} from './layouts/d3-force/d3-force-layout';\nexport {D3DagLayout} from './layouts/d3-dag/d3-dag-layout';\nexport {CollapsableD3DagLayout} from './layouts/d3-dag/collapsable-d3-dag-layout';\nexport {GPUForceLayout} from './layouts/gpu-force/gpu-force-layout';\nexport {RadialLayout} from './layouts/experimental/radial-layout';\nexport {ForceMultiGraphLayout} from './layouts/experimental/force-multi-graph-layout';\nexport {HivePlotLayout} from './layouts/experimental/hive-plot-layout';\n\nexport type {\n  Marker,\n  NodeState,\n  EdgeState,\n  NodeType,\n  EdgeType,\n  EdgeDecoratorType,\n  LayoutState\n} from './core/constants';\n\n// deck.gl components\nexport {GraphLayer} from './layers/graph-layer';\nexport type {GraphLayerProps, RankGridConfig} from './layers/graph-layer';\nexport {EdgeLayer} from './layers/edge-layer';\nexport {\n  GridLayer,\n  type GridLayerProps,\n  type GridLineDatum\n} from './layers/common-layers/grid-layer/grid-layer';\nexport {StylesheetEngine} from './style/stylesheet-engine';\nexport {GraphStylesheetEngine, GraphStyleEngine} from './style/graph-style-engine';\nexport type {\n  GraphStylesheet,\n  GraphStyleRule,\n  GraphStyleRuleParsed,\n  GraphStylesheetParsed,\n  GraphStyleAttributeReference,\n  GraphStyleScale,\n  GraphStyleScaleType,\n  GraphStyleValue\n} from './style/graph-style-engine';\nexport {GraphStylesheetSchema} from './style/graph-style-engine';\nexport {\n  DEFAULT_GRAPH_LAYER_STYLESHEET,\n  type GraphLayerStylesheet,\n  type GraphLayerEdgeStyle,\n  type GraphLayerNodeStyle\n} from './style/graph-layer-stylesheet';\n\n// utils\nexport {mixedGetPosition} from './utils/layer-utils';\nexport {log} from './utils/log';\nexport {\n  mapRanksToYPositions,\n  selectRankLines,\n  type RankAccessor,\n  type LabelAccessor,\n  type RankPosition,\n  type MapRanksToYPositionsOptions,\n  type SelectRankLinesOptions\n} from './utils/rank-grid';\n\n// graph format loaders\nexport {JSONGraphLoader, type JSONGraphLoaderOptions} from './loaders/json-graph-loader';\n\nexport {\n  DOTGraphLoader,\n  type DOTGraphLoaderOptions,\n  type DOTGraphLoaderMetadata\n} from './loaders/dot-graph-loader';\n\n// Deprecated exports\nexport {\n  MARKER_TYPE,\n  NODE_STATE,\n  EDGE_STATE,\n  NODE_TYPE,\n  EDGE_TYPE,\n  EDGE_DECORATOR_TYPE,\n  LAYOUT_STATE\n} from './_deprecated/old-constants';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// eslint-disable-next-line import/no-unresolved\nimport * as arrow from 'apache-arrow';\n\nimport type {EdgeState, NodeState} from '../core/constants';\nimport type {GraphEdgeData, GraphNodeData, ArrowGraphData} from './graph-data';\nimport {\n  cloneRecord,\n  normalizeEdgeState,\n  normalizeNodeState,\n  normalizeVersion\n} from '../graph/graph-normalization';\n\ntype Builder = ReturnType<typeof arrow.makeBuilder>;\ntype ArrowVector = ReturnType<Builder['toVector']>;\ntype ColumnArray = ReturnType<ArrowVector['toArray']>;\ntype ColumnBuilderMap = Map<string, Builder>;\n\nexport type ArrowGraphDataBuilderOptions = {\n  version?: number;\n};\n\nexport class ArrowGraphDataBuilder {\n  private readonly nodeBuilders: ColumnBuilderMap = new Map();\n  private readonly edgeBuilders: ColumnBuilderMap = new Map();\n\n  private nodeLength = 0;\n  private edgeLength = 0;\n\n  private _version: number;\n\n  constructor(options: ArrowGraphDataBuilderOptions = {}) {\n    this._version = normalizeVersion(options.version);\n  }\n\n  get version(): number {\n    return this._version;\n  }\n\n  setVersion(version: unknown): void {\n    this._version = normalizeVersion(version);\n  }\n\n  addNode(node: GraphNodeData): number {\n    if (typeof node?.id === 'undefined') {\n      throw new Error('Graph node requires an \"id\" field.');\n    }\n\n    const index = this.nodeLength++;\n    const attributes = cloneRecord(node.attributes);\n\n    if (typeof node.label !== 'undefined') {\n      attributes.label = node.label;\n    }\n\n    if (typeof node.weight !== 'undefined') {\n      attributes.weight = node.weight;\n    }\n\n    const stateCandidate = node.state ?? (attributes.state as NodeState | undefined);\n    const selectableCandidate = node.selectable ?? (attributes.selectable as boolean | undefined);\n    const highlightCandidate =\n      node.highlightConnectedEdges ?? (attributes.highlightConnectedEdges as boolean | undefined);\n\n    this.appendUtf8(this.nodeBuilders, 'id', node.id);\n    this.appendUtf8(this.nodeBuilders, 'state', normalizeNodeState(stateCandidate));\n    this.appendBoolean(this.nodeBuilders, 'selectable', Boolean(selectableCandidate));\n    this.appendBoolean(this.nodeBuilders, 'highlightConnectedEdges', Boolean(highlightCandidate));\n    this.appendJson(this.nodeBuilders, 'data', attributes);\n\n    return index;\n  }\n\n  addEdge(edge: GraphEdgeData): number {\n    if (\n      typeof edge?.id === 'undefined' ||\n      typeof edge?.sourceId === 'undefined' ||\n      typeof edge?.targetId === 'undefined'\n    ) {\n      throw new Error('Graph edge requires \"id\", \"sourceId\", and \"targetId\" fields.');\n    }\n\n    const index = this.edgeLength++;\n    const attributes = cloneRecord(edge.attributes);\n\n    if (typeof edge.label !== 'undefined') {\n      attributes.label = edge.label;\n    }\n\n    if (typeof edge.weight !== 'undefined') {\n      attributes.weight = edge.weight;\n    }\n\n    const stateCandidate = edge.state ?? (attributes.state as EdgeState | undefined);\n    const directedCandidate = edge.directed ?? (attributes.directed as boolean | undefined);\n\n    this.appendUtf8(this.edgeBuilders, 'id', edge.id);\n    this.appendUtf8(this.edgeBuilders, 'sourceId', edge.sourceId);\n    this.appendUtf8(this.edgeBuilders, 'targetId', edge.targetId);\n    this.appendBoolean(this.edgeBuilders, 'directed', Boolean(directedCandidate));\n    this.appendUtf8(this.edgeBuilders, 'state', normalizeEdgeState(stateCandidate));\n    this.appendJson(this.edgeBuilders, 'data', attributes);\n\n    return index;\n  }\n\n  finish(): ArrowGraphData {\n    return {\n      shape: 'arrow-graph-data',\n      version: this._version,\n      nodes: tableFromBuilders(this.nodeBuilders),\n      edges: tableFromBuilders(this.edgeBuilders)\n    };\n  }\n\n  private appendUtf8(builders: ColumnBuilderMap, columnName: string, value: string | number): void {\n    const builder = this.getOrCreateBuilder(builders, columnName, () =>\n      arrow.makeBuilder({type: new arrow.Utf8(), nullValues: [null, undefined]})\n    );\n    builder.append(typeof value === 'number' ? String(value) : value);\n  }\n\n  private appendBoolean(builders: ColumnBuilderMap, columnName: string, value: boolean): void {\n    const builder = this.getOrCreateBuilder(builders, columnName, () =>\n      arrow.makeBuilder({type: new arrow.Bool(), nullValues: [null, undefined]})\n    );\n    builder.append(value);\n  }\n\n  private appendJson(\n    builders: ColumnBuilderMap,\n    columnName: string,\n    value: Record<string, unknown>\n  ): void {\n    const builder = this.getOrCreateBuilder(builders, columnName, () =>\n      arrow.makeBuilder({type: new arrow.Utf8(), nullValues: [null, undefined]})\n    );\n    builder.append(JSON.stringify(value));\n  }\n\n  private getOrCreateBuilder(\n    builders: ColumnBuilderMap,\n    columnName: string,\n    factory: () => Builder\n  ): Builder {\n    let builder = builders.get(columnName);\n    if (!builder) {\n      builder = factory();\n      builders.set(columnName, builder);\n    }\n    return builder;\n  }\n}\n\nfunction tableFromBuilders(builders: ColumnBuilderMap): arrow.Table {\n  const columns: Record<string, ColumnArray> = {};\n\n  for (const [columnName, builder] of builders.entries()) {\n    builder.finish();\n    const vector = builder.toVector();\n    columns[columnName] = vector.toArray();\n  }\n\n  return arrow.tableFromArrays(columns);\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NodeState, EdgeState} from '../core/constants';\n\nconst NODE_STATES: ReadonlySet<NodeState> = new Set(['default', 'hover', 'dragging', 'selected']);\nconst EDGE_STATES: ReadonlySet<EdgeState> = new Set(['default', 'hover', 'dragging', 'selected']);\n\nexport function normalizeNodeState(state: NodeState | undefined): NodeState {\n  if (state && NODE_STATES.has(state)) {\n    return state;\n  }\n  return 'default';\n}\n\nexport function normalizeEdgeState(state: EdgeState | undefined): EdgeState {\n  if (state && EDGE_STATES.has(state)) {\n    return state;\n  }\n  return 'default';\n}\n\nexport function normalizeNodeStateColumn(\n  source: NodeState[] | undefined,\n  length: number\n): NodeState[] {\n  const result: NodeState[] = new Array(length);\n  for (let i = 0; i < length; i++) {\n    result[i] = normalizeNodeState(source?.[i]);\n  }\n  return result;\n}\n\nexport function normalizeEdgeStateColumn(\n  source: EdgeState[] | undefined,\n  length: number\n): EdgeState[] {\n  const result: EdgeState[] = new Array(length);\n  for (let i = 0; i < length; i++) {\n    result[i] = normalizeEdgeState(source?.[i]);\n  }\n  return result;\n}\n\nexport function normalizeBooleanColumn(\n  source: boolean[] | undefined,\n  length: number,\n  fallback: boolean\n): boolean[] {\n  const result: boolean[] = new Array(length);\n  for (let i = 0; i < length; i++) {\n    const candidate = source?.[i];\n    result[i] = typeof candidate === 'boolean' ? candidate : fallback;\n  }\n  return result;\n}\n\nexport function normalizeDataColumn(\n  source: Record<string, unknown>[] | undefined,\n  length: number\n): Record<string, unknown>[] {\n  const result: Record<string, unknown>[] = new Array(length);\n  for (let i = 0; i < length; i++) {\n    result[i] = cloneRecord(source?.[i]);\n  }\n  return result;\n}\n\nexport function normalizeVersion(version: unknown): number {\n  if (typeof version === 'number' && Number.isFinite(version)) {\n    return version;\n  }\n  return 0;\n}\n\nexport function cloneRecord(value: unknown): Record<string, unknown> {\n  if (value && typeof value === 'object') {\n    return {...(value as Record<string, unknown>)};\n  }\n  return {};\n}\n\nexport function cloneDataColumn(\n  source: Record<string, unknown>[],\n  length: number\n): Record<string, unknown>[] {\n  const result: Record<string, unknown>[] = new Array(length);\n  for (let i = 0; i < length; i++) {\n    result[i] = cloneRecord(source[i]);\n  }\n  return result;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NodeState} from '../core/constants';\nimport type {EdgeInterface, NodeInterface} from './graph';\n\n/** Properties for creating a new node */\nexport interface NodeOptions {\n  /** the unique ID of the node */\n  id: number | string;\n  selectable?: boolean;\n  highlightConnectedEdges?: boolean;\n  /* origin data reference */\n  data?: Record<string, unknown>;\n}\n\n/** Basic data structure of a node */\nexport class Node implements NodeInterface {\n  public readonly id: string | number;\n  /** Keep a reference to origin data. */\n  private _data: Record<string, unknown>;\n  /** List edges. */\n  private _connectedEdges: Record<string, EdgeInterface> = {};\n  /** Interaction state of the node. */\n  public state: NodeState = 'default';\n  /** Can the node be selected? */\n  private _selectable: boolean;\n  /** Should the state of this node affect the state of the connected edges? */\n  private _highlightConnectedEdges: boolean;\n  /** Check the type of the object when picking engine gets it. */\n  public readonly isNode = true;\n  /**\n   * The constructor of a node\n   */\n  constructor({id, selectable = false, highlightConnectedEdges = false, data = {}}: NodeOptions) {\n    this.id = id;\n    this._data = data;\n    this._selectable = selectable;\n    this._highlightConnectedEdges = highlightConnectedEdges;\n  }\n\n  /**\n   * Return the ID of the node\n   * @return - the ID of the node.\n   */\n  getId(): string | number {\n    return this.id;\n  }\n\n  /**\n   * Return the degree of the node -- includes in-degree and out-degree\n   * @return {Number} - the degree of the node.\n   */\n  getDegree(): number {\n    return Object.keys(this._connectedEdges).length;\n  }\n\n  /**\n   * Return the in-degree of the node.\n   * @return - the in-degree of the node.\n   */\n  getInDegree(): number {\n    const nodeId = this.getId();\n    return this.getConnectedEdges().reduce((count, e) => {\n      const isDirected = e.isDirected();\n      if (isDirected && e.getTargetNodeId() === nodeId) {\n        count += 1;\n      }\n      return count;\n    }, 0);\n  }\n\n  /**\n   * Return the out-degree of the node.\n   * @return - the out-degree of the node.\n   */\n  getOutDegree(): number {\n    const nodeId = this.getId();\n    return this.getConnectedEdges().reduce((count, e) => {\n      const isDirected = e.isDirected();\n      if (isDirected && e.getSourceNodeId() === nodeId) {\n        count += 1;\n      }\n      return count;\n    }, 0);\n  }\n\n  /**\n   * Return all the IDs of the sibling nodes.\n   * @return [description]\n   */\n  getSiblingIds(): (string | number)[] {\n    const nodeId = this.getId();\n    return this.getConnectedEdges().reduce(\n      (siblings, e) => {\n        if (e.getTargetNodeId() === nodeId) {\n          siblings.push(e.getSourceNodeId());\n        } else {\n          siblings.push(e.getTargetNodeId());\n        }\n        return siblings;\n      },\n      [] as (string | number)[]\n    );\n  }\n\n  /**\n   * Return all the connected edges.\n   * @return - an array of the connected edges.\n   */\n  getConnectedEdges(): EdgeInterface[] {\n    return Object.values(this._connectedEdges);\n  }\n\n  /**\n   * Return of the value of the selected property key.\n   * @param key - property key.\n   * @return - the value of the property or undefined (not found).\n   */\n  getPropertyValue(key: string): unknown {\n    // try to search the key within this object\n    if (this.hasOwnProperty(key)) {\n      return this[key];\n    }\n    // try to search the key in the original data reference\n    else if (this._data.hasOwnProperty(key)) {\n      return this._data[key];\n    }\n    // otherwise, not found\n    return undefined;\n  }\n\n  /**\n   * Set the new node data.\n   * @param data - the new data of the node\n   */\n  setData(data: Record<string, unknown>): void {\n    this._data = data;\n  }\n\n  /**\n   * Update a data property.\n   * @param key - the key of the property\n   * @param value - the value of the property.\n   */\n  setDataProperty(key: string, value: unknown): void {\n    this._data[key] = value;\n  }\n\n  /**\n   * Set node state\n   * @param state - the new interaction state of the node\n   */\n  setState(state: NodeState): void {\n    this.state = state;\n  }\n\n  /**\n   * Get node state\n   * @returns state - the current interaction state of the node\n   */\n  getState(): NodeState {\n    return this.state;\n  }\n\n  /**\n   * Add connected edges to the node\n   * @param edge an edge or an array of edges to be added to this._connectedEdges\n   */\n  addConnectedEdges(edge: EdgeInterface | EdgeInterface[]): void {\n    const iterableEdges = Array.isArray(edge) ? edge : [edge];\n    iterableEdges.forEach(e => {\n      this._connectedEdges[e.getId()] = e;\n      e.addNode(this);\n    });\n  }\n\n  /**\n   * Remove edges from this._connectedEdges\n   * @param edge an edge or an array of edges to be removed from this._connectedEdges\n   */\n  removeConnectedEdges(edge: EdgeInterface | EdgeInterface[]): void {\n    const iterableEdges = Array.isArray(edge) ? edge : [edge];\n    iterableEdges.forEach(e => {\n      e.removeNode(this);\n      delete this._connectedEdges[e.getId()];\n    });\n  }\n\n  /**\n   * Clear this._connectedEdges\n   */\n  clearConnectedEdges(): void {\n    Object.values(this._connectedEdges).forEach(e => e.removeNode(this));\n    this._connectedEdges = {};\n  }\n\n  isSelectable(): boolean {\n    return this._selectable;\n  }\n\n  shouldHighlightConnectedEdges(): boolean {\n    return this._highlightConnectedEdges;\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// Basic data structure of an edge\nimport type {EdgeState} from '../core/constants';\nimport type {EdgeInterface, NodeInterface} from './graph';\n\nexport interface EdgeOptions {\n  /** the unique ID of the edge */\n  id: string | number;\n  /** the ID of the source node */\n  sourceId: string | number;\n  /** the ID of the target node */\n  targetId: string | number;\n  /** whether the edge is directed or not */\n  directed?: boolean;\n  /** origin data reference */\n  data?: Record<string, unknown>;\n}\n\n/** Basic edge data structure */\nexport class Edge implements EdgeInterface {\n  /** Unique uuid of the edge. */\n  public readonly id: string | number;\n  /** ID of the source node. */\n  private _sourceId: string | number;\n  /** ID of the target node. */\n  private _targetId: string | number;\n  /** Whether the edge is directed or not. */\n  private _directed: boolean;\n  /** Origin data reference of the edge. */\n  private _data: Record<string, unknown>;\n  /** Check the type of the object when picking engine gets it. */\n  public readonly isEdge = true;\n  /** Nodes at either end of this edge. */\n  private readonly _connectedNodes: Record<string, NodeInterface> = {};\n  /** Edge state. */\n  public state: EdgeState = 'default';\n\n  /**\n   * The constructor\n   * @param options.id - information about the edge\n   */\n  constructor({id, sourceId, targetId, data, directed = false}: EdgeOptions) {\n    this.id = id;\n    this._sourceId = sourceId;\n    this._targetId = targetId;\n    this._directed = directed;\n    this._data = data;\n  }\n\n  /**\n   * Return the ID of the edge\n   * @return {String|Number} - the ID of the edge.\n   */\n  getId(): string | number {\n    return this.id;\n  }\n\n  /**\n   * Return whether the edge is directed or not.\n   * @return {Boolean} true if the edge is directed.\n   */\n  isDirected(): boolean {\n    return this._directed;\n  }\n\n  /**\n   * Get the ID of the source node.\n   * @return the ID of the source node.\n   */\n  getSourceNodeId(): string | number {\n    return this._sourceId;\n  }\n\n  /**\n   * Get the ID of the target node.\n   * @return the ID of the target node.\n   */\n  getTargetNodeId(): string | number {\n    return this._targetId;\n  }\n\n  /**\n   * Return of the value of the selected property key.\n   * @param  key - property key.\n   * @return - the value of the property.\n   */\n  getPropertyValue(key: string): unknown {\n    // try to search the key within this object\n    if (this.hasOwnProperty(key)) {\n      return this[key];\n    }\n    // try to search the key in the original data reference\n    else if (this._data.hasOwnProperty(key)) {\n      return this._data[key];\n    }\n    // otherwise, not found\n    return undefined;\n  }\n\n  /**\n   * Set the origin data as a reference.\n   * @param data - the origin data.\n   */\n  setData(data: Record<string, unknown>): void {\n    this._data = data;\n  }\n\n  /**\n   * Update a data property.\n   * @param key - the key of the property\n   * @param value - the value of the property.\n   */\n  setDataProperty(key: string, value: unknown): void {\n    this._data[key] = value;\n  }\n\n  /**\n   * Set edge state\n   * @param state - the new interaction state for the edge\n   */\n  setState(state: EdgeState): void {\n    this.state = state;\n  }\n\n  /**\n   * Get edge state\n   * @returns state - the current interaction state for the edge\n   */\n  getState(): EdgeState {\n    return this.state;\n  }\n\n  addNode(node: NodeInterface): void {\n    this._connectedNodes[node.getId()] = node;\n  }\n\n  removeNode(node: NodeInterface): void {\n    delete this._connectedNodes[node.getId()];\n  }\n\n  getConnectedNodes(): NodeInterface[] {\n    return Object.values(this._connectedNodes);\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Log, COLOR} from '@probe.gl/log';\n\nexport const log = new Log({id: 'graph-layers'}).enable();\n\nlog.log({color: COLOR.CYAN}, 'Initialize graph-layers logger.');\n\nfunction invokeLogFunction(result: unknown) {\n  if (typeof result === 'function') {\n    result();\n  }\n}\n\nexport function warn(message: string, ...args: unknown[]) {\n  invokeLogFunction(log.warn(message, ...args));\n}\n\nexport function error(message: string, ...args: unknown[]) {\n  invokeLogFunction(log.error(message, ...args));\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport class Cache<K, V> {\n  private readonly _keys = new Map<K, {value: V; version: number}>();\n\n  /**\n   * @param key The key of the cache\n   * @returns {*} The value of the cache as set by the `set` method.\n   */\n  get(key: K): V | undefined {\n    return this._keys.get(key)?.value;\n  }\n\n  /**\n   * @param key The key of the cache\n   * @param createValue A callback to create the value of the cache if it is needed.\n   * @param version The version of the cache. If the version is smaller than the current version, the cache will not be updated.\n   */\n  set(key: K, createValue: (...args: unknown[]) => V, version: number): void {\n    const cached = this._keys.get(key);\n\n    const keyUpdated = cached === undefined || version > cached.version;\n    if (!keyUpdated) {\n      return;\n    }\n\n    this._keys.set(key, {version, value: createValue()});\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NodeState, EdgeState} from '../core/constants';\n\n/** Shared interface for graph nodes used by the rendering runtime. */\nexport interface NodeInterface {\n  readonly isNode: boolean;\n  readonly id: string | number;\n  getId(): string | number;\n  getDegree(): number;\n  getInDegree(): number;\n  getOutDegree(): number;\n  getSiblingIds(): (string | number)[];\n  getConnectedEdges(): EdgeInterface[];\n  addConnectedEdges(edge: EdgeInterface | EdgeInterface[]): void;\n  removeConnectedEdges(edge: EdgeInterface | EdgeInterface[]): void;\n  clearConnectedEdges(): void;\n  getPropertyValue(key: string): unknown;\n  setData(data: Record<string, unknown>): void;\n  setDataProperty(key: string, value: unknown): void;\n  setState(state: NodeState): void;\n  getState(): NodeState;\n  isSelectable(): boolean;\n  shouldHighlightConnectedEdges(): boolean;\n}\n\n/** Shared interface for graph edges used by the rendering runtime. */\nexport interface EdgeInterface {\n  readonly isEdge: boolean;\n  readonly id: string | number;\n  getId(): string | number;\n  isDirected(): boolean;\n  getSourceNodeId(): string | number;\n  getTargetNodeId(): string | number;\n  getConnectedNodes(): NodeInterface[];\n  addNode(node: NodeInterface): void;\n  removeNode(node: NodeInterface): void;\n  getPropertyValue(key: string): unknown;\n  setData(data: Record<string, unknown>): void;\n  setDataProperty(key: string, value: unknown): void;\n  setState(state: EdgeState): void;\n  getState(): EdgeState;\n}\n\nexport type GraphProps = {\n  onTransactionStart?: () => void;\n  onTransactionEnd?: () => void;\n  onNodeAdded?: (node: NodeInterface) => void;\n  onNodeRemoved?: (node: NodeInterface) => void;\n  onNodeUpdated?: (node: NodeInterface) => void;\n  onEdgeAdded?: (edge: EdgeInterface) => void;\n  onEdgeRemoved?: (edge: EdgeInterface) => void;\n  onEdgeUpdated?: (edge: EdgeInterface) => void;\n};\n\n/** Runtime abstraction consumed by the rendering engine. */\nexport abstract class Graph<PropsT extends GraphProps = GraphProps> {\n  private _props: PropsT;\n\n  protected constructor(props: PropsT) {\n    this._props = {...props};\n  }\n\n  get props(): PropsT {\n    return {...this._props};\n  }\n\n  setProps(props: PropsT): void {\n    this._props = {...props};\n  }\n\n  updateProps(props: PropsT): void {\n    this._props = {...this._props, ...props};\n  }\n\n  abstract get version(): number;\n  abstract getNodes(): Iterable<NodeInterface>;\n  abstract getEdges(): Iterable<EdgeInterface>;\n  abstract findNode(id: string | number): NodeInterface | undefined;\n  findNodeById?(id: string | number): NodeInterface | undefined;\n  getGraphName?(): string;\n  triggerUpdate?(): void;\n  abstract destroy?(): void;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {warn} from '../utils/log';\nimport {Cache} from '../core/cache';\nimport {Edge} from './edge';\nimport {Node} from './node';\nimport type {EdgeInterface, NodeInterface, GraphProps} from './graph';\nimport {Graph} from './graph';\nimport type {PlainGraphData, GraphNodeData, GraphEdgeData} from '../graph-data/graph-data';\nimport {\n  cloneRecord,\n  normalizeEdgeState,\n  normalizeNodeState,\n  normalizeVersion\n} from './graph-normalization';\n\nexport type ClassicGraphProps = GraphProps & {\n  data: PlainGraphData;\n};\n\n/** Basic graph data structure */\nexport class ClassicGraph extends Graph {\n  /** List object of nodes. */\n  private _nodeMap: Record<string, Node> = {};\n  /** List of object edges. */\n  private _edgeMap: Record<string, Edge> = {};\n\n  /**\n   * Identifies whether performing dirty check when streaming new data. If\n   * the name of the graph is not specified, will fall back to current time stamp.\n   */\n  private _name: string = Date.now().toString();\n  /** Version the graph. A version is a number that is incremented every time the graph is updated. */\n  public version = 0;\n  /** Cached data: create array data from maps. */\n  private _cache = new Cache<'nodes' | 'edges', Node[] | Edge[]>();\n  private _suspendVersionUpdates = false;\n\n  /**\n   * The constructor of the graph class.\n   * @param props -\n   */\n  constructor(props: ClassicGraphProps) {\n    super(props);\n\n    const data = props.data;\n    const nodes = createNodesFromPlainGraphData(data?.nodes);\n    const edges = createEdgesFromPlainGraphData(data?.edges);\n\n    this._name = `unnamed-graph-${Date.now().toString()}`;\n    this._suspendVersionUpdates = true;\n    this.version = normalizeVersion(data?.version);\n    try {\n      this.batchAddNodes(nodes);\n      this.batchAddEdges(edges);\n    } finally {\n      this._suspendVersionUpdates = false;\n    }\n  }\n\n  /**\n   * Set graph name\n   * @param name\n   */\n  setGraphName(name: string): void {\n    this._name = name;\n  }\n\n  /** Get the name of the graph. Default value is the time stamp when creating this graph.\n   * @return graph name.\n   */\n  getGraphName(): string {\n    return this._name.toString();\n  }\n\n  /**\n   * Perform a batch of operations defined by cb before indicating graph is updated\n   * @param {function} cb - a callback function containing the operations to perform\n   */\n  transaction<T>(cb: (...args: unknown[]) => T): T {\n    try {\n      this.props.onTransactionStart?.();\n      return cb();\n    } finally {\n      this.props.onTransactionEnd?.();\n    }\n  }\n\n  /**\n   * Add a new node to the graph.\n   * @paramnode - expect a Node object to be added to the graph.\n   */\n  addNode(node: Node): void {\n    // add it to the list and map\n    this._nodeMap[node.getId()] = node;\n    // update last update time stamp\n    this._bumpVersion();\n    this.props.onNodeAdded?.(node);\n  }\n\n  /**\n   * Batch add nodes to the graph.\n   * @param nodes - a list of nodes to be added.\n   */\n  batchAddNodes(nodes: Node[]): void {\n    // convert an array of objects to an object\n    this._nodeMap = nodes.reduce(\n      (res, node) => {\n        res[node.getId()] = node;\n        this.props.onNodeAdded?.(node);\n        return res;\n      },\n      {...this._nodeMap}\n    );\n    this._bumpVersion();\n  }\n\n  /**\n   * Get all the nodes of the graph.\n   * @return {Node[]} - get all the nodes in the graph.\n   */\n  getNodes(): NodeInterface[] {\n    this._updateCache('nodes', () => Object.values(this._nodeMap));\n\n    return (this._cache.get('nodes') as Node[]) ?? [];\n  }\n\n  /**\n   * Get the node map of the graph. The key of the map is the ID of the nodes.\n   * @return - a map of nodes keyed by node IDs.\n   */\n  getNodeMap(): Record<string | number, Node> {\n    return this._nodeMap;\n  }\n\n  /**\n   * Find a node by id\n   * @param nodeId The id of the node\n   * @return  Node\n   */\n  findNode(nodeId: string | number): Node | undefined {\n    return this._nodeMap[nodeId];\n  }\n\n  findNodeById(nodeId: string | number): NodeInterface | undefined {\n    return this.findNode(nodeId);\n  }\n\n  /**\n   * Update the indicated node to the provided value\n   * @param node\n   */\n  updateNode(node: Node): void {\n    this._nodeMap[node.getId()] = node;\n    this._bumpVersion();\n    this.props.onNodeUpdated?.(node);\n  }\n\n  /**\n   * Add a new edge to the graph.\n   * @param edge - expect a Edge object to be added to the graph.\n   */\n  addEdge(edge: Edge): void {\n    const sourceNode = this.findNode(edge.getSourceNodeId());\n    const targetNode = this.findNode(edge.getTargetNodeId());\n\n    if (!sourceNode || !targetNode) {\n      warn(`Unable to add edge ${edge.id},  source or target node is missing.`);\n      return;\n    }\n\n    this._edgeMap[edge.getId()] = edge;\n    sourceNode.addConnectedEdges(edge);\n    targetNode.addConnectedEdges(edge);\n    this._bumpVersion();\n    this.props.onEdgeAdded?.(edge);\n  }\n\n  /**\n   * Batch add edges to the graph\n   * @param edges - a list of edges to be added.\n   */\n  batchAddEdges(edges: Edge[]): void {\n    edges.forEach(edge => this.addEdge(edge));\n    this._bumpVersion();\n  }\n\n  /**\n   * Update the indicated edge to the provided value\n   * @param edge\n   */\n  updateEdge(edge: Edge): void {\n    this._edgeMap[edge.getId()] = edge;\n    this._bumpVersion();\n    this.props.onEdgeUpdated?.(edge);\n  }\n\n  /**\n   * Remove a node from the graph by node ID\n   * @param nodeId - the ID of the target node.\n   */\n  removeNode(nodeId: string | number): void {\n    const node = this.findNode(nodeId);\n    if (!node) {\n      warn(`Unable to remove node ${nodeId} - doesn't exist`);\n      return;\n    }\n    // remove all edges connect to this node from map\n    node.getConnectedEdges().forEach(e => {\n      delete this._edgeMap[e.getId()];\n    });\n    // remove the node from map\n    delete this._nodeMap[nodeId];\n    this._bumpVersion();\n    this.props.onNodeRemoved?.(node);\n  }\n\n  /**\n   * Get all the edges of the graph.\n   * @return get all the edges in the graph.\n   */\n  getEdges(): EdgeInterface[] {\n    this._updateCache('edges', () => Object.values(this._edgeMap));\n\n    return (this._cache.get('edges') as Edge[]) ?? [];\n  }\n\n  destroy(): void {\n    // No additional teardown required for the legacy graph implementation.\n  }\n\n  /**\n   * Get the edge map of the graph. The key of the map is the ID of the edges.\n   * @return - a map of edges keyed by edge IDs.\n   */\n  getEdgeMap(): Record<string, Edge> {\n    return this._edgeMap;\n  }\n\n  /**\n   * Remove an edge from the graph by the edge ID\n   * @param  {String|Number} edgeId - the target edge ID.\n   */\n  removeEdge(edgeId: string | number): void {\n    const edge = this.findEdge(edgeId);\n    if (!edge) {\n      warn(`Unable to remove edge ${edgeId} - doesn't exist`);\n      return;\n    }\n    const sourceNode = this.findNode(edge.getSourceNodeId());\n    const targetNode = this.findNode(edge.getTargetNodeId());\n\n    delete this._edgeMap[edgeId];\n    sourceNode.removeConnectedEdges(edge);\n    targetNode.removeConnectedEdges(edge);\n    this._bumpVersion();\n    this.props.onEdgeRemoved?.(edge);\n  }\n\n  /**\n   * Find the edge by edge ID.\n   * @param id - the target edge ID\n   * @return - the target edge.\n   */\n  findEdge(edgeId: string | number): Edge {\n    return this._edgeMap[edgeId];\n  }\n\n  /**\n   * Return all the connected edges of a node by nodeID.\n   * @param  nodeId - the target node ID\n   * @return - an array of the connected edges.\n   */\n  getConnectedEdges(nodeId: string | number): EdgeInterface[] {\n    const node = this.findNode(nodeId);\n    if (!node) {\n      warn(`Unable to find node ${nodeId} - doesn't exist`);\n      return [];\n    }\n    return node.getConnectedEdges();\n  }\n\n  /**\n   * Return all the sibling nodes of a node by nodeID.\n   * @param nodeId - the target node ID\n   * @return - an array of the sibling nodes.\n   */\n  getNodeSiblings(nodeId: string | number): Node[] {\n    const node = this.findNode(nodeId);\n    if (!node) {\n      warn(`Unable to find node ${nodeId} - doesn't exist`);\n      return [];\n    }\n    return node.getSiblingIds().map(siblingNodeId => this.findNode(siblingNodeId));\n  }\n\n  /**\n   * Get the degree of a node.\n   * @param nodeId - the target node ID.\n   * @return - the degree of the node.\n   */\n  getDegree(nodeId: string | number): number {\n    const node = this.findNode(nodeId);\n    if (!node) {\n      warn(`Unable to find node ${nodeId} - doesn't exist`);\n      return 0;\n    }\n    return node.getDegree();\n  }\n\n  /**\n   * Clean up all the nodes in the graph.\n   */\n  resetNodes(): void {\n    this._nodeMap = {};\n    this._bumpVersion();\n  }\n\n  /**\n   * Clean up all the edges in the graph.\n   */\n  resetEdges(): void {\n    this._edgeMap = {};\n    this._bumpVersion();\n  }\n\n  /**\n   * Clean up everything in the graph.\n   */\n  reset(): void {\n    this.resetNodes();\n    this.resetEdges();\n    this._bumpVersion();\n  }\n\n  /**\n   * @deprecated Prefer interacting with this instance directly.\n   */\n  getClassicGraph(): ClassicGraph {\n    return this;\n  }\n\n  /**\n   * Trigger an update to the graph.\n   */\n  triggerUpdate(): void {\n    this._bumpVersion();\n  }\n\n  /**\n   * Return true if the graph is empty.\n   * @return {Boolean} Return true if the graph is empty.\n   */\n  isEmpty(): boolean {\n    return Object.keys(this._nodeMap).length === 0;\n  }\n\n  /**\n   * Check the equality of two graphs data by checking last update time stamp\n   * @param graph Another graph to be compared against itself\n   * @return true if the graph is the same as itself.\n   */\n  equals(graph: ClassicGraph): boolean {\n    if (!graph || !(graph instanceof ClassicGraph)) {\n      return false;\n    }\n    return this.version === graph.version;\n  }\n\n  _bumpVersion(): void {\n    if (this._suspendVersionUpdates) {\n      return;\n    }\n    this.version += 1;\n  }\n\n  _updateCache(key: 'nodes' | 'edges', updateValue: unknown): void {\n    this._cache.set(key, updateValue as any, this.version);\n  }\n}\n\nfunction createNodesFromPlainGraphData(nodes?: GraphNodeData[] | null): Node[] {\n  if (!nodes) {\n    return [];\n  }\n  return nodes.map(nodeData => {\n    const nodeAttributes = createNodeAttributesFromPlainData(nodeData);\n    const selectable =\n      typeof nodeData.selectable === 'boolean'\n        ? nodeData.selectable\n        : Boolean(nodeAttributes.selectable);\n    const highlightConnectedEdges =\n      typeof nodeData.highlightConnectedEdges === 'boolean'\n        ? nodeData.highlightConnectedEdges\n        : Boolean(nodeAttributes.highlightConnectedEdges);\n\n    const node = new Node({\n      id: nodeData.id,\n      selectable,\n      highlightConnectedEdges,\n      data: nodeAttributes\n    });\n    node.setState(normalizeNodeState(nodeData.state));\n    return node;\n  });\n}\n\nfunction createEdgesFromPlainGraphData(edges?: GraphEdgeData[] | null): Edge[] {\n  if (!edges) {\n    return [];\n  }\n  return edges.map(edgeData => {\n    const edgeAttributes = createEdgeAttributesFromPlainData(edgeData);\n    const directed =\n      typeof edgeData.directed === 'boolean' ? edgeData.directed : Boolean(edgeAttributes.directed);\n    const edge = new Edge({\n      id: edgeData.id,\n      sourceId: edgeData.sourceId,\n      targetId: edgeData.targetId,\n      directed,\n      data: edgeAttributes\n    });\n    edge.setState(normalizeEdgeState(edgeData.state));\n    return edge;\n  });\n}\n\nfunction createNodeAttributesFromPlainData(node: GraphNodeData): Record<string, unknown> {\n  const attributes = cloneRecord(node.attributes);\n  if (typeof node.label !== 'undefined') {\n    attributes.label = node.label;\n  }\n  if (typeof node.weight !== 'undefined') {\n    attributes.weight = node.weight;\n  }\n  return attributes;\n}\n\nfunction createEdgeAttributesFromPlainData(edge: GraphEdgeData): Record<string, unknown> {\n  const attributes = cloneRecord(edge.attributes);\n  if (typeof edge.label !== 'undefined') {\n    attributes.label = edge.label;\n  }\n  if (typeof edge.weight !== 'undefined') {\n    attributes.weight = edge.weight;\n  }\n  return attributes;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {PlainGraphData, GraphEdgeData, GraphNodeData} from './graph-data';\nimport {GraphDataBuilder} from './graph-data-builder';\nimport {cloneRecord, normalizeVersion} from '../graph/graph-normalization';\n\nexport type PlainGraphDataBuilderOptions = {\n  version?: number;\n};\n\nexport class PlainGraphDataBuilder implements GraphDataBuilder {\n  private readonly nodes: GraphNodeData[] = [];\n  private readonly edges: GraphEdgeData[] = [];\n\n  private _version: number;\n\n  constructor(options: PlainGraphDataBuilderOptions = {}) {\n    this._version = normalizeVersion(options.version);\n  }\n\n  get version(): number {\n    return this._version;\n  }\n\n  setVersion(version: unknown): void {\n    this._version = normalizeVersion(version);\n  }\n\n  get nodeCount(): number {\n    return this.nodes.length;\n  }\n\n  get edgeCount(): number {\n    return this.edges.length;\n  }\n\n  addNode(node: GraphNodeData): number {\n    if (typeof node?.id === 'undefined') {\n      throw new Error('Graph node requires an \"id\" field.');\n    }\n\n    const attributes = cloneRecord(node.attributes);\n    this._assignNodeAttributes(attributes, node);\n    const record: GraphNodeData = {\n      ...node,\n      attributes\n    };\n\n    this.nodes.push(record);\n    return this.nodes.length - 1;\n  }\n\n  addEdge(edge: GraphEdgeData): number {\n    if (\n      typeof edge?.id === 'undefined' ||\n      typeof edge?.sourceId === 'undefined' ||\n      typeof edge?.targetId === 'undefined'\n    ) {\n      throw new Error('Graph edge requires \"id\", \"sourceId\", and \"targetId\" fields.');\n    }\n\n    const attributes = cloneRecord(edge.attributes);\n    this._assignEdgeAttributes(attributes, edge);\n    const record: GraphEdgeData = {\n      ...edge,\n      attributes\n    };\n\n    this.edges.push(record);\n    return this.edges.length - 1;\n  }\n\n  private _assignNodeAttributes(target: Record<string, unknown>, node: GraphNodeData): void {\n    if (typeof node.label !== 'undefined') {\n      target.label = node.label;\n    }\n    if (typeof node.weight !== 'undefined') {\n      target.weight = node.weight;\n    }\n    if (typeof node.state !== 'undefined') {\n      target.state = node.state;\n    }\n    if (typeof node.selectable !== 'undefined') {\n      target.selectable = node.selectable;\n    }\n    if (typeof node.highlightConnectedEdges !== 'undefined') {\n      target.highlightConnectedEdges = node.highlightConnectedEdges;\n    }\n  }\n\n  private _assignEdgeAttributes(target: Record<string, unknown>, edge: GraphEdgeData): void {\n    if (typeof edge.label !== 'undefined') {\n      target.label = edge.label;\n    }\n    if (typeof edge.weight !== 'undefined') {\n      target.weight = edge.weight;\n    }\n    if (typeof edge.state !== 'undefined') {\n      target.state = edge.state;\n    }\n    if (typeof edge.directed !== 'undefined') {\n      target.directed = edge.directed;\n    }\n  }\n\n  build(): PlainGraphData {\n    return {\n      shape: 'plain-graph-data',\n      version: this._version,\n      nodes: this.nodes.map(cloneNodeData),\n      edges: this.edges.map(cloneEdgeData)\n    };\n  }\n}\n\nfunction cloneNodeData(node: GraphNodeData): GraphNodeData {\n  const attributes = cloneRecord(node.attributes);\n  return {\n    ...node,\n    attributes\n  };\n}\n\nfunction cloneEdgeData(edge: GraphEdgeData): GraphEdgeData {\n  const attributes = cloneRecord(edge.attributes);\n  return {\n    ...edge,\n    attributes\n  };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\n\nexport function getVectorLength(vector: arrow.Vector | null): number {\n  return vector?.length ?? 0;\n}\n\nexport function getVectorValue(vector: arrow.Vector | null, index: number): unknown {\n  return vector ? (vector.get?.(index) ?? vector.toArray?.()[index]) : undefined;\n}\n\nexport function getColumnVector(table: arrow.Table, columnName: string): arrow.Vector | null {\n  const candidate = (\n    table as arrow.Table & {getColumn?: (name: string) => arrow.Vector | null}\n  ).getColumn?.(columnName);\n  if (candidate) {\n    return candidate;\n  }\n  const childAccessor = (table as arrow.Table & {getChild?: (name: string) => arrow.Vector | null})\n    .getChild;\n  if (typeof childAccessor === 'function') {\n    const vector = childAccessor.call(table, columnName);\n    if (vector) {\n      return vector;\n    }\n  }\n  const getChildAt = (table as arrow.Table & {getChildAt?: (index: number) => arrow.Vector | null})\n    .getChildAt;\n  const schema = (table as arrow.Table & {schema?: {fields?: Array<{name: string}>}}).schema;\n  if (schema && Array.isArray(schema.fields) && typeof getChildAt === 'function') {\n    const index = schema.fields.findIndex(field => field?.name === columnName);\n    if (index >= 0) {\n      return getChildAt.call(table, index) ?? null;\n    }\n  }\n  return null;\n}\n\nexport function parseDataRecord(value: unknown): Record<string, unknown> {\n  if (typeof value === 'string') {\n    try {\n      const parsed = JSON.parse(value);\n      if (parsed && typeof parsed === 'object') {\n        return {...(parsed as Record<string, unknown>)};\n      }\n    } catch {\n      return {};\n    }\n  } else if (value && typeof value === 'object') {\n    return {...(value as Record<string, unknown>)};\n  }\n  return {};\n}\n\nexport function coerceIdentifier(value: unknown): string | number {\n  if (typeof value === 'number') {\n    return value;\n  }\n  if (typeof value === 'string') {\n    const trimmed = value.trim();\n    if (trimmed !== '') {\n      const numeric = Number(trimmed);\n      if (!Number.isNaN(numeric) && String(numeric) === trimmed) {\n        return numeric;\n      }\n    }\n    return value;\n  }\n  if (value === null || typeof value === 'undefined') {\n    throw new Error('Arrow graph encountered an undefined identifier.');\n  }\n  return String(value);\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\n\nimport type {NodeState, EdgeState} from '../core/constants';\nimport type {ArrowGraphData} from '../graph-data/graph-data';\nimport {PlainGraphDataBuilder} from '../graph-data/plain-graph-data-builder';\nimport type {GraphProps, NodeInterface, EdgeInterface} from './graph';\nimport {Graph} from './graph';\nimport {ClassicGraph} from './classic-graph';\nimport {cloneRecord, normalizeEdgeState, normalizeNodeState} from './graph-normalization';\n\nimport {\n  getVectorLength,\n  getVectorValue,\n  getColumnVector,\n  parseDataRecord,\n  coerceIdentifier\n} from './functions/arrow-utils';\n\ntype NodeOverride = {\n  state?: NodeState;\n  selectable?: boolean;\n  highlightConnectedEdges?: boolean;\n  data?: Record<string, unknown>;\n};\n\ntype EdgeOverride = {\n  state?: EdgeState;\n  directed?: boolean;\n  data?: Record<string, unknown>;\n};\n\ntype NodeVectors = {\n  id: arrow.Vector | null;\n  state: arrow.Vector | null;\n  selectable: arrow.Vector | null;\n  highlightConnectedEdges: arrow.Vector | null;\n  data: arrow.Vector | null;\n};\n\ntype EdgeVectors = {\n  id: arrow.Vector | null;\n  sourceId: arrow.Vector | null;\n  targetId: arrow.Vector | null;\n  directed: arrow.Vector | null;\n  state: arrow.Vector | null;\n  data: arrow.Vector | null;\n};\n\nexport type ArrowGraphProps = GraphProps & {\n  data: ArrowGraphData;\n};\n\nexport class ArrowGraph extends Graph<ArrowGraphProps> {\n  private readonly nodeTable: arrow.Table;\n  private readonly edgeTable: arrow.Table;\n\n  private readonly nodeVectors: NodeVectors;\n  private readonly edgeVectors: EdgeVectors;\n\n  private readonly nodeOverrides: NodeOverride[];\n  private readonly edgeOverrides: EdgeOverride[];\n\n  private readonly nodeDataCache: Array<Record<string, unknown> | null>;\n  private readonly edgeDataCache: Array<Record<string, unknown> | null>;\n\n  private readonly nodeEdgeIndices: number[][];\n  private nodeIndices: WeakMap<NodeInterface, number> = new WeakMap();\n  private edgeIndices: WeakMap<EdgeInterface, number> = new WeakMap();\n\n  private readonly nodes: ArrowGraphNode[];\n  private readonly edges: ArrowGraphEdge[];\n  private readonly nodeMap: Map<string | number, ArrowGraphNode> = new Map();\n\n  private readonly _version: number;\n\n  constructor(props: ArrowGraphProps) {\n    super(props);\n\n    this._version = props.data.version;\n    this.nodeTable = props.data.nodes;\n    this.edgeTable = props.data.edges;\n\n    this.nodeVectors = this.extractNodeVectors();\n    this.edgeVectors = this.extractEdgeVectors();\n    this.assertRequiredColumns();\n\n    const nodeCount = getVectorLength(this.nodeVectors.id);\n    const edgeCount = getVectorLength(this.edgeVectors.id);\n\n    this.nodeOverrides = new Array(nodeCount);\n    this.edgeOverrides = new Array(edgeCount);\n    this.nodeDataCache = new Array(nodeCount).fill(null);\n    this.edgeDataCache = new Array(edgeCount).fill(null);\n    this.nodeEdgeIndices = Array.from({length: nodeCount}, () => []);\n\n    this.nodes = this.initializeNodes(nodeCount);\n    this.edges = this.initializeEdges(edgeCount);\n\n    this.registerNodes();\n    this.registerEdges();\n  }\n\n  get version(): number {\n    return this._version;\n  }\n\n  getNodes(): Iterable<NodeInterface> {\n    return this.nodes;\n  }\n\n  getEdges(): Iterable<EdgeInterface> {\n    return this.edges;\n  }\n\n  findNode(id: string | number): NodeInterface | undefined {\n    return this.nodeMap.get(id) ?? this.nodeMap.get(String(id));\n  }\n\n  findNodeById(id: string | number): NodeInterface | undefined {\n    return this.findNode(id);\n  }\n\n  destroy(): void {\n    this.nodeMap.clear();\n    this.nodeIndices = new WeakMap();\n    this.edgeIndices = new WeakMap();\n    this.nodeEdgeIndices.length = 0;\n    this.nodes.length = 0;\n    this.edges.length = 0;\n  }\n\n  private getNodeOverride(index: number): NodeOverride {\n    let override = this.nodeOverrides[index];\n    if (!override) {\n      override = {};\n      this.nodeOverrides[index] = override;\n    }\n    return override;\n  }\n\n  private getEdgeOverride(index: number): EdgeOverride {\n    let override = this.edgeOverrides[index];\n    if (!override) {\n      override = {};\n      this.edgeOverrides[index] = override;\n    }\n    return override;\n  }\n\n  getNodeIdByIndex(index: number): string | number {\n    const value = getVectorValue(this.nodeVectors.id, index);\n    if (typeof value === 'undefined') {\n      throw new Error('Arrow graph requires an id column for nodes.');\n    }\n    return coerceIdentifier(value);\n  }\n\n  getNodeStateByIndex(index: number): NodeState {\n    const override = this.nodeOverrides[index]?.state;\n    if (override) {\n      return override;\n    }\n    const value = getVectorValue(this.nodeVectors.state, index);\n    return normalizeNodeState(typeof value === 'string' ? (value as NodeState) : undefined);\n  }\n\n  setNodeStateByIndex(index: number, state: NodeState): void {\n    const override = this.getNodeOverride(index);\n    override.state = state;\n  }\n\n  isNodeSelectableByIndex(index: number): boolean {\n    const override = this.nodeOverrides[index]?.selectable;\n    if (typeof override === 'boolean') {\n      return override;\n    }\n    const value = getVectorValue(this.nodeVectors.selectable, index);\n    return coerceBoolean(value, false);\n  }\n\n  shouldHighlightConnectedEdgesByIndex(index: number): boolean {\n    const override = this.nodeOverrides[index]?.highlightConnectedEdges;\n    if (typeof override === 'boolean') {\n      return override;\n    }\n    const value = getVectorValue(this.nodeVectors.highlightConnectedEdges, index);\n    return coerceBoolean(value, false);\n  }\n\n  getNodeDegreeByIndex(index: number): number {\n    return this.nodeEdgeIndices[index]?.length ?? 0;\n  }\n\n  getNodeInDegreeByIndex(index: number): number {\n    const id = this.getNodeIdByIndex(index);\n    return (this.nodeEdgeIndices[index] ?? []).reduce((count, edgeIndex) => {\n      if (this.getEdgeTargetIdByIndex(edgeIndex) === id && this.isEdgeDirectedByIndex(edgeIndex)) {\n        return count + 1;\n      }\n      return count;\n    }, 0);\n  }\n\n  getNodeOutDegreeByIndex(index: number): number {\n    const id = this.getNodeIdByIndex(index);\n    return (this.nodeEdgeIndices[index] ?? []).reduce((count, edgeIndex) => {\n      if (this.getEdgeSourceIdByIndex(edgeIndex) === id && this.isEdgeDirectedByIndex(edgeIndex)) {\n        return count + 1;\n      }\n      return count;\n    }, 0);\n  }\n\n  getNodeSiblingIdsByIndex(index: number): (string | number)[] {\n    const id = this.getNodeIdByIndex(index);\n    const edges = this.nodeEdgeIndices[index] ?? [];\n    const siblings: (string | number)[] = [];\n    for (const edgeIndex of edges) {\n      const source = this.getEdgeSourceIdByIndex(edgeIndex);\n      const target = this.getEdgeTargetIdByIndex(edgeIndex);\n      if (source === id) {\n        siblings.push(target);\n      } else {\n        siblings.push(source);\n      }\n    }\n    return siblings;\n  }\n\n  getNodeConnectedEdgesByIndex(index: number): EdgeInterface[] {\n    return (this.nodeEdgeIndices[index] ?? [])\n      .map(edgeIndex => this.edges[edgeIndex])\n      .filter((edge): edge is ArrowGraphEdge => Boolean(edge));\n  }\n\n  setNodeDataByIndex(index: number, data: Record<string, unknown>): void {\n    const override = this.getNodeOverride(index);\n    override.data = {...data};\n    this.nodeDataCache[index] = {...data};\n  }\n\n  setNodeDataPropertyByIndex(index: number, key: string, value: unknown): void {\n    const data = this.getNodeDataInternal(index);\n    data[key] = value;\n    const override = this.getNodeOverride(index);\n    override.data = {...data};\n    this.nodeDataCache[index] = {...data};\n  }\n\n  getNodeDataByIndex(index: number): Record<string, unknown> {\n    return cloneRecord(this.getNodeDataInternal(index));\n  }\n\n  getNodePropertyValueByIndex(index: number, key: string): unknown {\n    const data = this.getNodeDataInternal(index);\n    if (key in data) {\n      return data[key];\n    }\n    const accessors = this.nodeVectors.data;\n    if (!accessors) {\n      return undefined;\n    }\n    return undefined;\n  }\n\n  registerEdgeForNode(node: NodeInterface, edge: EdgeInterface): void {\n    const nodeIndex = this.nodeIndices.get(node);\n    const edgeIndex = this.edgeIndices.get(edge);\n    if (nodeIndex === undefined || edgeIndex === undefined) {\n      return;\n    }\n    const edges = this.nodeEdgeIndices[nodeIndex];\n    if (!edges.includes(edgeIndex)) {\n      edges.push(edgeIndex);\n    }\n  }\n\n  unregisterEdgeForNode(node: NodeInterface, edge: EdgeInterface): void {\n    const nodeIndex = this.nodeIndices.get(node);\n    const edgeIndex = this.edgeIndices.get(edge);\n    if (nodeIndex === undefined || edgeIndex === undefined) {\n      return;\n    }\n    const edges = this.nodeEdgeIndices[nodeIndex];\n    const next = edges.filter(candidate => candidate !== edgeIndex);\n    this.nodeEdgeIndices[nodeIndex] = next;\n  }\n\n  getEdgeIdByIndex(index: number): string | number {\n    const value = getVectorValue(this.edgeVectors.id, index);\n    if (typeof value === 'undefined') {\n      throw new Error('Arrow graph requires an id column for edges.');\n    }\n    return coerceIdentifier(value);\n  }\n\n  getEdgeStateByIndex(index: number): EdgeState {\n    const override = this.edgeOverrides[index]?.state;\n    if (override) {\n      return override;\n    }\n    const value = getVectorValue(this.edgeVectors.state, index);\n    return normalizeEdgeState(typeof value === 'string' ? (value as EdgeState) : undefined);\n  }\n\n  setEdgeStateByIndex(index: number, state: EdgeState): void {\n    const override = this.getEdgeOverride(index);\n    override.state = state;\n  }\n\n  isEdgeDirectedByIndex(index: number): boolean {\n    const override = this.edgeOverrides[index]?.directed;\n    if (typeof override === 'boolean') {\n      return override;\n    }\n    const value = getVectorValue(this.edgeVectors.directed, index);\n    return coerceBoolean(value, false);\n  }\n\n  getEdgeSourceIdByIndex(index: number): string | number {\n    const value = getVectorValue(this.edgeVectors.sourceId, index);\n    if (typeof value === 'undefined') {\n      throw new Error('Arrow graph requires a sourceId column.');\n    }\n    return coerceIdentifier(value);\n  }\n\n  getEdgeTargetIdByIndex(index: number): string | number {\n    const value = getVectorValue(this.edgeVectors.targetId, index);\n    if (typeof value === 'undefined') {\n      throw new Error('Arrow graph requires a targetId column.');\n    }\n    return coerceIdentifier(value);\n  }\n\n  getEdgePropertyValueByIndex(index: number, key: string): unknown {\n    const data = this.getEdgeDataInternal(index);\n    return data[key];\n  }\n\n  setEdgeDataByIndex(index: number, data: Record<string, unknown>): void {\n    const override = this.getEdgeOverride(index);\n    override.data = {...data};\n    this.edgeDataCache[index] = {...data};\n  }\n\n  setEdgeDataPropertyByIndex(index: number, key: string, value: unknown): void {\n    const data = this.getEdgeDataInternal(index);\n    data[key] = value;\n    const override = this.getEdgeOverride(index);\n    override.data = {...data};\n    this.edgeDataCache[index] = {...data};\n  }\n\n  getEdgeDataByIndex(index: number): Record<string, unknown> {\n    return cloneRecord(this.getEdgeDataInternal(index));\n  }\n\n  getEdgeConnectedNodesByIndex(index: number): NodeInterface[] {\n    return this.edges[index]?.getConnectedNodes() ?? [];\n  }\n\n  toClassicGraph(): ClassicGraph {\n    const builder = new PlainGraphDataBuilder({version: this._version});\n\n    const nodeCount = getVectorLength(this.nodeVectors.id);\n    for (let index = 0; index < nodeCount; index++) {\n      builder.addNode({\n        id: this.getNodeIdByIndex(index),\n        state: this.getNodeStateByIndex(index),\n        selectable: this.isNodeSelectableByIndex(index),\n        highlightConnectedEdges: this.shouldHighlightConnectedEdgesByIndex(index),\n        attributes: this.getNodeDataByIndex(index)\n      });\n    }\n\n    const edgeCount = getVectorLength(this.edgeVectors.id);\n    for (let index = 0; index < edgeCount; index++) {\n      builder.addEdge({\n        id: this.getEdgeIdByIndex(index),\n        sourceId: this.getEdgeSourceIdByIndex(index),\n        targetId: this.getEdgeTargetIdByIndex(index),\n        directed: this.isEdgeDirectedByIndex(index),\n        state: this.getEdgeStateByIndex(index),\n        attributes: this.getEdgeDataByIndex(index)\n      });\n    }\n\n    return new ClassicGraph({data: builder.build()});\n  }\n\n  private getNodeDataInternal(index: number): Record<string, unknown> {\n    const override = this.nodeOverrides[index]?.data;\n    if (override) {\n      return override;\n    }\n    const cached = this.nodeDataCache[index];\n    if (cached) {\n      return cached;\n    }\n    const value = getVectorValue(this.nodeVectors.data, index);\n    const data = parseDataRecord(value);\n    this.nodeDataCache[index] = data;\n    return data;\n  }\n\n  private getEdgeDataInternal(index: number): Record<string, unknown> {\n    const override = this.edgeOverrides[index]?.data;\n    if (override) {\n      return override;\n    }\n    const cached = this.edgeDataCache[index];\n    if (cached) {\n      return cached;\n    }\n    const value = getVectorValue(this.edgeVectors.data, index);\n    const data = parseDataRecord(value);\n    this.edgeDataCache[index] = data;\n    return data;\n  }\n  private extractNodeVectors(): NodeVectors {\n    return {\n      id: getColumnVector(this.nodeTable, 'id'),\n      state: getColumnVector(this.nodeTable, 'state'),\n      selectable: getColumnVector(this.nodeTable, 'selectable'),\n      highlightConnectedEdges: getColumnVector(this.nodeTable, 'highlightConnectedEdges'),\n      data: getColumnVector(this.nodeTable, 'data')\n    };\n  }\n\n  private extractEdgeVectors(): EdgeVectors {\n    return {\n      id: getColumnVector(this.edgeTable, 'id'),\n      sourceId: getColumnVector(this.edgeTable, 'sourceId'),\n      targetId: getColumnVector(this.edgeTable, 'targetId'),\n      directed: getColumnVector(this.edgeTable, 'directed'),\n      state: getColumnVector(this.edgeTable, 'state'),\n      data: getColumnVector(this.edgeTable, 'data')\n    };\n  }\n\n  private assertRequiredColumns(): void {\n    if (!this.nodeVectors.id) {\n      throw new Error('Arrow graph requires an \"id\" column for nodes.');\n    }\n    if (!this.edgeVectors.id || !this.edgeVectors.sourceId || !this.edgeVectors.targetId) {\n      throw new Error('Arrow graph requires \"id\", \"sourceId\", and \"targetId\" columns for edges.');\n    }\n  }\n\n  private initializeNodes(count: number): ArrowGraphNode[] {\n    return Array.from({length: count}, (_, index) => new ArrowGraphNode(this, index));\n  }\n\n  private initializeEdges(count: number): ArrowGraphEdge[] {\n    return Array.from({length: count}, (_, index) => new ArrowGraphEdge(this, index));\n  }\n\n  private registerNodes(): void {\n    for (let index = 0; index < this.nodes.length; index++) {\n      const node = this.nodes[index];\n      const id = this.getNodeIdByIndex(index);\n      registerNodeVariants(this.nodeMap, id, node);\n      this.nodeIndices.set(node, index);\n    }\n  }\n\n  private registerEdges(): void {\n    for (let index = 0; index < this.edges.length; index++) {\n      const edge = this.edges[index];\n      this.edgeIndices.set(edge, index);\n\n      const source = this.findNodeById(this.getEdgeSourceIdByIndex(index));\n      if (source) {\n        edge.addNode(source);\n      }\n\n      const target = this.findNodeById(this.getEdgeTargetIdByIndex(index));\n      if (target) {\n        edge.addNode(target);\n      }\n    }\n  }\n}\n\nclass ArrowGraphNode implements NodeInterface {\n  public readonly isNode = true;\n\n  get id(): string | number {\n    return this.getId();\n  }\n\n  constructor(\n    private readonly graph: ArrowGraph,\n    private readonly index: number\n  ) {}\n\n  getId(): string | number {\n    return this.graph.getNodeIdByIndex(this.index);\n  }\n\n  getDegree(): number {\n    return this.graph.getNodeDegreeByIndex(this.index);\n  }\n\n  getInDegree(): number {\n    return this.graph.getNodeInDegreeByIndex(this.index);\n  }\n\n  getOutDegree(): number {\n    return this.graph.getNodeOutDegreeByIndex(this.index);\n  }\n\n  getSiblingIds(): (string | number)[] {\n    return this.graph.getNodeSiblingIdsByIndex(this.index);\n  }\n\n  getConnectedEdges(): EdgeInterface[] {\n    return this.graph.getNodeConnectedEdgesByIndex(this.index);\n  }\n\n  addConnectedEdges(edge: EdgeInterface | EdgeInterface[]): void {\n    const edges = Array.isArray(edge) ? edge : [edge];\n    for (const candidate of edges) {\n      candidate.addNode(this);\n    }\n  }\n\n  removeConnectedEdges(edge: EdgeInterface | EdgeInterface[]): void {\n    const edges = Array.isArray(edge) ? edge : [edge];\n    for (const candidate of edges) {\n      candidate.removeNode(this);\n    }\n  }\n\n  clearConnectedEdges(): void {\n    const edges = this.getConnectedEdges();\n    for (const edge of edges) {\n      edge.removeNode(this);\n    }\n  }\n\n  getPropertyValue(key: string): unknown {\n    return this.graph.getNodePropertyValueByIndex(this.index, key);\n  }\n\n  setData(data: Record<string, unknown>): void {\n    this.graph.setNodeDataByIndex(this.index, data);\n  }\n\n  setDataProperty(key: string, value: unknown): void {\n    this.graph.setNodeDataPropertyByIndex(this.index, key, value);\n  }\n\n  setState(state: NodeState): void {\n    this.graph.setNodeStateByIndex(this.index, state);\n  }\n\n  getState(): NodeState {\n    return this.graph.getNodeStateByIndex(this.index);\n  }\n\n  isSelectable(): boolean {\n    return this.graph.isNodeSelectableByIndex(this.index);\n  }\n\n  shouldHighlightConnectedEdges(): boolean {\n    return this.graph.shouldHighlightConnectedEdgesByIndex(this.index);\n  }\n}\n\nclass ArrowGraphEdge implements EdgeInterface {\n  public readonly isEdge = true;\n  private readonly connectedNodes: Map<string | number, NodeInterface> = new Map();\n\n  get id(): string | number {\n    return this.getId();\n  }\n\n  constructor(\n    private readonly graph: ArrowGraph,\n    private readonly index: number\n  ) {}\n\n  getId(): string | number {\n    return this.graph.getEdgeIdByIndex(this.index);\n  }\n\n  isDirected(): boolean {\n    return this.graph.isEdgeDirectedByIndex(this.index);\n  }\n\n  getSourceNodeId(): string | number {\n    return this.graph.getEdgeSourceIdByIndex(this.index);\n  }\n\n  getTargetNodeId(): string | number {\n    return this.graph.getEdgeTargetIdByIndex(this.index);\n  }\n\n  getConnectedNodes(): NodeInterface[] {\n    return [...this.connectedNodes.values()];\n  }\n\n  addNode(node: NodeInterface): void {\n    this.connectedNodes.set(node.getId(), node);\n    this.graph.registerEdgeForNode(node, this);\n  }\n\n  removeNode(node: NodeInterface): void {\n    this.connectedNodes.delete(node.getId());\n    this.graph.unregisterEdgeForNode(node, this);\n  }\n\n  getPropertyValue(key: string): unknown {\n    return this.graph.getEdgePropertyValueByIndex(this.index, key);\n  }\n\n  setData(data: Record<string, unknown>): void {\n    this.graph.setEdgeDataByIndex(this.index, data);\n  }\n\n  setDataProperty(key: string, value: unknown): void {\n    this.graph.setEdgeDataPropertyByIndex(this.index, key, value);\n  }\n\n  setState(state: EdgeState): void {\n    this.graph.setEdgeStateByIndex(this.index, state);\n  }\n\n  getState(): EdgeState {\n    return this.graph.getEdgeStateByIndex(this.index);\n  }\n}\n\nfunction registerNodeVariants(\n  map: Map<string | number, ArrowGraphNode>,\n  id: string | number,\n  node: ArrowGraphNode\n): void {\n  map.set(id, node);\n  if (typeof id === 'string') {\n    const numeric = Number(id);\n    if (!Number.isNaN(numeric) && id.trim() !== '') {\n      map.set(numeric, node);\n    }\n  } else {\n    map.set(String(id), node);\n  }\n}\n\nfunction coerceBoolean(value: unknown, fallback: boolean): boolean {\n  if (typeof value === 'boolean') {\n    return value;\n  }\n  if (typeof value === 'number') {\n    return value !== 0;\n  }\n  if (typeof value === 'string') {\n    const normalized = value.trim().toLowerCase();\n    if (normalized === 'true' || normalized === '1') {\n      return true;\n    }\n    if (normalized === 'false' || normalized === '0' || normalized === '') {\n      return false;\n    }\n  }\n  return fallback;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Bounds2D} from '@math.gl/types';\n\nimport type {Graph, NodeInterface, EdgeInterface} from '../graph/graph';\n\nimport isEqual from 'lodash.isequal';\nimport {log} from '../utils/log';\n\n// the status of the layout\nexport type GraphLayoutState = 'init' | 'start' | 'calculating' | 'done' | 'error';\n\nexport type GraphLayoutEventDetail = {\n  bounds: Bounds2D | null;\n};\n\nexport type GraphLayoutProps = {\n  onLayoutStart?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutChange?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutDone?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutError?: (error?: unknown) => void;\n};\n\nexport abstract class GraphLayout<PropsT extends GraphLayoutProps = GraphLayoutProps> {\n  static defaultProps: Readonly<Required<GraphLayoutProps>> = {\n    onLayoutStart: undefined,\n    onLayoutChange: undefined,\n    onLayoutDone: undefined,\n    onLayoutError: undefined\n  };\n\n  get [Symbol.toStringTag](): string {\n    return 'GraphLayout';\n  }\n\n  /** Extra configuration props of the layout. */\n  protected props: Required<PropsT>;\n\n  /**\n   * Last computed layout bounds in local layout coordinates.\n   *\n   * Subclasses should update this value by overriding {@link _updateBounds}\n   * so it reflects the latest geometry before layout lifecycle events fire.\n   */\n  protected _bounds: Bounds2D | null = null;\n\n  public version = 0;\n  public state: GraphLayoutState = 'init';\n\n  /**\n   * Constructor of GraphLayout\n   * @param props extra configuration props of the layout\n   */\n  constructor(props: PropsT, defaultProps?: Required<PropsT>) {\n    this.props = {\n      ...GraphLayout.defaultProps,\n      ...defaultProps,\n      ...props\n    };\n  }\n\n  getProps(): PropsT {\n    return {...this.props};\n  }\n\n  setProps(props: Partial<PropsT>): void {\n    this.props = {...this.props, ...props};\n  }\n\n  /**\n   * Check the equality of two layouts\n   * @param layout - The layout to be compared.\n   * @return - True if the layout is the same as itself.\n   */\n  equals(layout: GraphLayout): boolean {\n    if (!layout || !(layout instanceof GraphLayout)) {\n      return false;\n    }\n    return this instanceof layout.constructor && isEqual(this.props, layout.props);\n  }\n\n  // Accessors\n\n  /** access the position of the node in the layout */\n  getNodePosition(node: NodeInterface): [number, number] {\n    return [0, 0];\n  }\n\n  /** access the layout information of the edge */\n  getEdgePosition(edge: EdgeInterface) {\n    return {\n      type: 'line',\n      sourcePosition: [0, 0],\n      targetPosition: [0, 0],\n      controlPoints: []\n    };\n  }\n\n  /**\n   * Pin the node to a designated position, and the node won't move anymore\n   * @param  node Node to be locked\n   * @param  x    x coordinate\n   * @param  y    y coordinate\n   */\n  lockNodePosition(node: NodeInterface, x: number, y: number) {}\n\n  /**\n   * Unlock the node, the node will be able to move freely.\n   * @param  {Object} node Node to be unlocked\n   */\n  unlockNodePosition(node: NodeInterface) {}\n\n  /** Returns the last computed layout bounds, if available. */\n  getBounds(): Bounds2D | null {\n    return this._bounds;\n  }\n\n  /** virtual functions: will be implemented in the child class */\n\n  /** first time to pass the graph data into this layout */\n  abstract initializeGraph(graph: Graph): void;\n  /** update the existing graph */\n  abstract updateGraph(graph: Graph): void;\n  /** start the layout calculation */\n  abstract start();\n  /** update the layout calculation */\n  abstract update();\n  /** resume the layout calculation */\n  abstract resume();\n  /** stop the layout calculation */\n  abstract stop();\n\n  // INTERNAL METHODS\n\n  /** Hook for subclasses to update bounds prior to emitting events. */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  protected _updateBounds(): void {}\n\n  /**\n   * Utility for subclasses to derive layout bounds from an iterable of [x, y] positions.\n   * @param positions Iterable of node positions.\n   * @returns Layout bounds for the supplied positions or `null` if none are finite.\n   */\n  protected _calculateBounds(\n    positions: Iterable<Readonly<[number, number]> | null | undefined>\n  ): Bounds2D | null {\n    let minX = Number.POSITIVE_INFINITY;\n    let maxX = Number.NEGATIVE_INFINITY;\n    let minY = Number.POSITIVE_INFINITY;\n    let maxY = Number.NEGATIVE_INFINITY;\n\n    for (const position of positions) {\n      if (!position) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n      const [x, y] = position;\n      if (!Number.isFinite(x) || !Number.isFinite(y)) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      minX = Math.min(minX, x);\n      maxX = Math.max(maxX, x);\n      minY = Math.min(minY, y);\n      maxY = Math.max(maxY, y);\n    }\n\n    if (minX === Number.POSITIVE_INFINITY) {\n      return null;\n    }\n\n    return [\n      [minX, minY],\n      [maxX, maxY]\n    ];\n  }\n\n  /**\n   * Attempt to coerce an arbitrary value into a finite 2D point.\n   * @param value Candidate value that may represent a position.\n   * @returns Finite [x, y] tuple or null if the value cannot be interpreted.\n   */\n  protected _normalizePosition(value: unknown): [number, number] | null {\n    if (Array.isArray(value) && value.length >= 2) {\n      const [x, y] = value as [unknown, unknown];\n      if (this._isFiniteNumber(x) && this._isFiniteNumber(y)) {\n        return [x, y];\n      }\n      return null;\n    }\n\n    if (value && typeof value === 'object') {\n      const {x, y} = value as {x?: unknown; y?: unknown};\n      if (this._isFiniteNumber(x) && this._isFiniteNumber(y)) {\n        return [x, y];\n      }\n    }\n\n    return null;\n  }\n\n  private _isFiniteNumber(value: unknown): value is number {\n    return typeof value === 'number' && Number.isFinite(value);\n  }\n\n  protected _updateState(state: GraphLayoutState) {\n    this.state = state;\n    this.version += 1;\n  }\n\n  /** @fires GraphLayout#onLayoutStart */\n  protected _onLayoutStart = (): void => {\n    log.log(0, `GraphLayout(${this}): start`)();\n    this._updateBounds();\n    this._updateState('calculating');\n\n    /**\n     * Layout calculation start.\n     * @event GraphLayout#onLayoutChange\n     * @type {CustomEvent}\n     */\n    const detail: GraphLayoutEventDetail = {bounds: this._bounds};\n    this.props.onLayoutStart?.(detail);\n  };\n\n  /** @fires GraphLayout#onLayoutChange */\n  protected _onLayoutChange = (): void => {\n    log.log(0, `GraphLayout(${this}): update`)();\n    this._updateBounds();\n    this._updateState('calculating');\n\n    /**\n     * Layout calculation iteration.\n     * @event GraphLayout#onLayoutChange\n     * @type {CustomEvent}\n     */\n    const detail: GraphLayoutEventDetail = {bounds: this._bounds};\n    this.props.onLayoutChange?.(detail);\n  };\n\n  /** @fires GraphLayout#onLayoutDone */\n  protected _onLayoutDone = (): void => {\n    log.log(0, `GraphLayout(${this}): end`)();\n    this._updateBounds();\n    this._updateState('done');\n\n    /**\n     * Layout calculation is done.\n     * @event GraphLayout#onLayoutDone\n     * @type {CustomEvent}\n     */\n    const detail: GraphLayoutEventDetail = {bounds: this._bounds};\n    this.props.onLayoutDone?.(detail);\n  };\n\n  /** @fires GraphLayout#onLayoutError */\n  protected _onLayoutError = (): void => {\n    this._updateState('error');\n\n    /**\n     * Layout calculation went wrong.\n     * @event GraphLayout#onLayoutError\n     * @type {CustomEvent}\n     */\n    this.props.onLayoutError?.();\n  };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-continue */\n\nimport {ZodError, type ZodIssue} from 'zod';\n\nimport {StylesheetEngine, type DeckGLUpdateTriggers} from './stylesheet-engine';\nimport {\n  GraphStyleRuleSchema,\n  type GraphStyleRule,\n  type GraphStyleRuleParsed\n} from './graph-stylesheet-schema';\nimport {GRAPH_DECKGL_ACCESSOR_MAP} from './graph-style-accessor-map';\nimport {warn} from '../utils/log';\n\nconst GRAPH_DECKGL_UPDATE_TRIGGERS: DeckGLUpdateTriggers = {\n  circle: ['getFillColor', 'getRadius', 'getLineColor', 'getLineWidth'],\n  rectangle: ['getFillColor', 'getLineColor', 'getLineWidth'],\n  'rounded-rectangle': ['getFillColor', 'getLineColor', 'getLineWidth', 'getCornerRadius'],\n  'path-rounded-rectangle': ['getFillColor', 'getLineColor', 'getLineWidth', 'getCornerRadius'],\n  label: ['getColor', 'getText', 'getSize', 'getTextAnchor', 'getAlignmentBaseline', 'getAngle'],\n  marker: ['getColor', 'getSize', 'getMarker'],\n  Edge: ['getColor', 'getWidth'],\n  edge: ['getColor', 'getWidth'],\n  'edge-label': ['getColor', 'getText', 'getSize', 'getTextAnchor', 'getAlignmentBaseline'],\n  flow: ['getColor', 'getWidth', 'getSpeed', 'getTailLength'],\n  arrow: ['getColor', 'getSize', 'getOffset']\n};\n\nfunction formatStylesheetError(error: ZodError) {\n  const details = error.issues\n    .map(issue => {\n      const path = issue.path.length ? issue.path.join('.') : 'root';\n      return `  \u2022 ${path}: ${issue.message}`;\n    })\n    .join('\\n');\n  return `Invalid graph stylesheet:\\n${details}`;\n}\n\nexport class GraphStylesheetEngine extends StylesheetEngine {\n  constructor(\n    style: GraphStyleRule | GraphStyleRuleParsed,\n    {stateUpdateTrigger}: {stateUpdateTrigger?: unknown} = {}\n  ) {\n    const result = GraphStyleRuleSchema.safeParse(style);\n    const parsedStyle = result.success\n      ? result.data\n      : sanitizeStylesheet(style, result.error.issues);\n\n    super(parsedStyle as GraphStyleRule, {\n      deckglAccessorMap: GRAPH_DECKGL_ACCESSOR_MAP,\n      deckglUpdateTriggers: GRAPH_DECKGL_UPDATE_TRIGGERS,\n      stateUpdateTrigger\n    });\n  }\n}\n\nexport const GraphStyleEngine = GraphStylesheetEngine;\nexport type GraphStyleEngine = GraphStylesheetEngine;\n\nexport {\n  GraphStyleScaleTypeEnum,\n  GraphStyleScaleSchema,\n  GraphStyleAttributeReferenceSchema,\n  GraphStyleLeafValueSchema,\n  GraphStyleStateMapSchema,\n  GraphStyleValueSchema,\n  GraphStylesheetSchema,\n  GraphStyleRuleSchema\n} from './graph-stylesheet-schema';\n\nexport type {\n  GraphStylesheet,\n  GraphStyleRule,\n  GraphStyleRuleParsed,\n  GraphStylesheetParsed,\n  GraphStyleSelector,\n  GraphStyleType,\n  GraphStyleAttributeReference,\n  GraphStyleLeafValue,\n  GraphStyleScale,\n  GraphStyleScaleType,\n  GraphStyleValue\n} from './graph-stylesheet-schema';\n\nexport {GRAPH_DECKGL_ACCESSOR_MAP} from './graph-style-accessor-map';\n\n// eslint-disable-next-line max-statements, complexity\nfunction sanitizeStylesheet(\n  style: GraphStyleRule | GraphStyleRuleParsed,\n  issues: ZodIssue[]\n): GraphStyleRuleParsed {\n  if (issues.length) {\n    const details = issues\n      .map(issue => {\n        const path = issue.path.length ? issue.path.join('.') : 'root';\n        return `${path}: ${issue.message}`;\n      })\n      .join('\\n  \u2022 ');\n    warn(`GraphStyleEngine: stylesheet issues detected:\\n  \u2022 ${details}`);\n  }\n\n  const fallbackTypeCandidate =\n    typeof (style as {type?: unknown}).type === 'string'\n      ? (style as {type: string}).type\n      : undefined;\n  const fallbackCandidates = Array.from(\n    new Set(\n      [fallbackTypeCandidate, 'edge'].filter(\n        (value): value is string => typeof value === 'string' && value.length > 0\n      )\n    )\n  );\n\n  for (const candidate of fallbackCandidates) {\n    const sanitized = cloneValue(style) as Record<string, unknown>;\n    sanitized.type = candidate;\n\n    for (const issue of issues) {\n      if (!Array.isArray(issue.path) || issue.path.length === 0) {\n        continue;\n      }\n\n      const path = issue.path.filter(\n        (segment): segment is string | number =>\n          typeof segment === 'string' || typeof segment === 'number'\n      );\n\n      if (path.length === 0) {\n        continue;\n      }\n\n      const [rootKey] = path;\n      if (rootKey === undefined || rootKey === 'type') {\n        continue;\n      }\n\n      if (typeof rootKey === 'string' && rootKey.startsWith(':')) {\n        removeNestedProperty(sanitized, path);\n        continue;\n      }\n\n      if (typeof rootKey !== 'string') {\n        continue;\n      }\n\n      delete sanitized[rootKey];\n    }\n\n    const result = GraphStyleRuleSchema.safeParse(sanitized);\n    if (result.success) {\n      return result.data;\n    }\n  }\n\n  // If every fallback failed, rethrow the detailed error so callers know parsing was impossible.\n  throw new Error(formatStylesheetError(new ZodError(issues)));\n}\n\nfunction cloneValue<T>(value: T): T {\n  if (Array.isArray(value)) {\n    return value.map(item => cloneValue(item)) as unknown as T;\n  }\n  if (value && typeof value === 'object') {\n    if (value instanceof Date) {\n      return new Date(value) as unknown as T;\n    }\n    if (value instanceof RegExp) {\n      return new RegExp(value.source, value.flags) as unknown as T;\n    }\n    const cloned: Record<string, unknown> = {};\n    for (const [key, entryValue] of Object.entries(value as Record<string, unknown>)) {\n      cloned[key] = cloneValue(entryValue);\n    }\n    return cloned as unknown as T;\n  }\n  return value;\n}\n\n// eslint-disable-next-line max-statements, complexity\nfunction removeNestedProperty(\n  target: Record<string, unknown> | unknown[],\n  path: (string | number)[]\n) {\n  if (path.length === 0) {\n    return;\n  }\n\n  const [head, ...rest] = path;\n  if (head === undefined) {\n    return;\n  }\n\n  if (Array.isArray(target)) {\n    const index = typeof head === 'number' ? head : Number(head);\n    if (!Number.isInteger(index) || index < 0 || index >= target.length) {\n      return;\n    }\n    if (rest.length === 0) {\n      target.splice(index, 1);\n      return;\n    }\n    const child = target[index];\n    if (!child || typeof child !== 'object') {\n      target.splice(index, 1);\n      return;\n    }\n    removeNestedProperty(child as Record<string, unknown> | unknown[], rest);\n    if (isEmptyObject(child)) {\n      target.splice(index, 1);\n    }\n    return;\n  }\n\n  const recordTarget = target;\n\n  if (rest.length === 0) {\n    delete recordTarget[head as keyof typeof recordTarget];\n    return;\n  }\n\n  const child = recordTarget[head as keyof typeof recordTarget];\n  if (!child || typeof child !== 'object') {\n    delete recordTarget[head as keyof typeof recordTarget];\n    return;\n  }\n\n  removeNestedProperty(child as Record<string, unknown> | unknown[], rest);\n\n  if (isEmptyObject(child)) {\n    delete recordTarget[head as keyof typeof recordTarget];\n  }\n}\n\nfunction isEmptyObject(value: unknown): boolean {\n  if (Array.isArray(value)) {\n    return value.length === 0;\n  }\n  if (!value || typeof value !== 'object') {\n    return false;\n  }\n  return Object.keys(value as Record<string, unknown>).length === 0;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport Color from 'color';\nimport {\n  scaleLinear,\n  scaleLog,\n  scaleOrdinal,\n  scalePow,\n  scaleQuantile,\n  scaleQuantize,\n  scaleSqrt\n} from 'd3-scale';\n\nimport {warn} from '../utils/log';\nimport type {\n  GraphStyleAttributeReference,\n  GraphStyleLeafValue,\n  GraphStyleScale,\n  GraphStyleScaleType\n} from './graph-style-engine';\n\n/* Utils for type check */\nfunction getColor(value) {\n  if (typeof value === 'string') {\n    try {\n      const color = Color.rgb(value).array();\n      if (Number.isFinite(color[3])) {\n        color[3] *= 255;\n      }\n      return color;\n    } catch (_error) {\n      return [0, 0, 0];\n    }\n  }\n  if (Array.isArray(value) && Number.isFinite(value[0])) {\n    return value;\n  }\n  return [0, 0, 0];\n}\n\nfunction getNumber(value) {\n  switch (typeof value) {\n    case 'string':\n      value = Number(value);\n      return Number.isNaN(value) ? null : value;\n\n    case 'number':\n      return value;\n\n    default:\n      return null;\n  }\n}\n\nfunction getBool(value) {\n  switch (typeof value) {\n    case 'boolean':\n      return value;\n\n    case 'string':\n      return value.toLowerCase() !== 'false';\n\n    case 'number':\n      return Boolean(value);\n\n    default:\n      return null;\n  }\n}\n\nfunction getOffset(value) {\n  if (typeof value === 'function') {\n    return value;\n  }\n\n  if (!Array.isArray(value) || value.length !== 2) {\n    return null;\n  }\n  return value.map(getNumber);\n}\n\nconst IDENTITY = x => x;\nconst PROPERTY_FORMATTERS = {\n  opacity: getNumber,\n  zIndex: getNumber,\n\n  width: getNumber,\n  height: getNumber,\n  radius: getNumber,\n\n  fill: getColor,\n  stroke: getColor,\n  strokeWidth: getNumber,\n\n  // for marker\n  marker: String,\n  size: getNumber,\n\n  // text\n  color: getColor,\n  text: String,\n  fontSize: getNumber,\n  textAnchor: String,\n  alignmentBaseline: String,\n  angle: getNumber,\n  textMaxWidth: getNumber,\n  textWordBreak: String,\n  textSizeMinPixels: getNumber,\n\n  // edges\n  speed: getNumber,\n  tailLength: getNumber,\n\n  offset: getOffset,\n  scaleWithZoom: getBool\n};\n\nconst DEFAULT_STYLES = {\n  opacity: 1,\n  zIndex: 0,\n\n  width: 0,\n  height: 0,\n  radius: 1,\n\n  fill: [0, 0, 0],\n  stroke: [0, 0, 0],\n  strokeWidth: 0,\n\n  marker: 'circle',\n  size: 12,\n\n  color: [0, 0, 0],\n  text: '',\n  fontSize: 12,\n  textAnchor: 'middle',\n  alignmentBaseline: 'center',\n  angle: 0,\n  textMaxWidth: -1,\n  textWordBreak: 'break-all',\n  textSizeMinPixels: 9,\n\n  speed: 0,\n  tailLength: 1,\n\n  offset: null,\n  scaleWithZoom: true\n};\n\n/** Union of supported D3 scale implementations. */\ntype SupportedScale =\n  | ReturnType<typeof scaleLinear>\n  | ReturnType<typeof scaleLog>\n  | ReturnType<typeof scalePow>\n  | ReturnType<typeof scaleQuantize>\n  | ReturnType<typeof scaleQuantile>\n  | ReturnType<typeof scaleOrdinal>;\n\nconst SCALE_FACTORIES: Record<GraphStyleScaleType, () => SupportedScale> = {\n  linear: () => scaleLinear(),\n  log: () => scaleLog(),\n  pow: () => scalePow(),\n  sqrt: () => scaleSqrt(),\n  quantize: () => scaleQuantize(),\n  quantile: () => scaleQuantile(),\n  ordinal: () => scaleOrdinal()\n};\n\n/** Resolved attribute reference with guaranteed defaults. */\ntype NormalizedAttributeReference = {\n  attribute: string;\n  fallback: unknown;\n  scale?: (value: unknown) => unknown;\n  scaleConfig?: GraphStyleScale | ((value: unknown) => unknown);\n};\n\n/** Create a D3 scale instance based on a declarative configuration. */\n/* eslint-disable-next-line complexity */\nfunction createScaleFromConfig(config: GraphStyleScale): SupportedScale {\n  const type = config.type ?? 'linear';\n  const factory = SCALE_FACTORIES[type];\n  if (!factory) {\n    warn(`Invalid scale type: ${type}`);\n    throw new Error(`Invalid scale type: ${type}`);\n  }\n  const scale = (factory as () => SupportedScale)();\n  const anyScale = scale as any;\n  if (config.domain && 'domain' in scale) {\n    anyScale.domain(config.domain as never);\n  }\n  if (config.range && 'range' in scale) {\n    anyScale.range(config.range as never);\n  }\n  if (\n    typeof config.clamp === 'boolean' &&\n    'clamp' in scale &&\n    typeof anyScale.clamp === 'function'\n  ) {\n    anyScale.clamp(config.clamp);\n  }\n  if (\n    typeof config.nice !== 'undefined' &&\n    'nice' in scale &&\n    typeof anyScale.nice === 'function'\n  ) {\n    anyScale.nice(config.nice as never);\n  }\n  if (\n    type === 'pow' &&\n    typeof config.exponent === 'number' &&\n    'exponent' in scale &&\n    typeof anyScale.exponent === 'function'\n  ) {\n    anyScale.exponent(config.exponent);\n  }\n  if (\n    type === 'log' &&\n    typeof config.base === 'number' &&\n    'base' in scale &&\n    typeof anyScale.base === 'function'\n  ) {\n    anyScale.base(config.base);\n  }\n  if (\n    typeof config.unknown !== 'undefined' &&\n    'unknown' in scale &&\n    typeof (scale as {unknown?: (value: unknown) => unknown}).unknown === 'function'\n  ) {\n    (scale as {unknown: (value: unknown) => unknown}).unknown(config.unknown);\n  }\n  return scale;\n}\n\n/** Normalize attribute reference definitions into a consistent structure. */\nfunction normalizeAttributeReference(\n  key: string,\n  reference: GraphStyleAttributeReference\n): NormalizedAttributeReference {\n  if (typeof reference === 'string') {\n    const attribute = reference.startsWith('@') ? reference.slice(1) : reference;\n    if (!attribute) {\n      throw new Error(`Invalid attribute reference for ${key}: ${reference}`);\n    }\n    return {\n      attribute,\n      fallback: DEFAULT_STYLES[key]\n    };\n  }\n\n  const {attribute, fallback = DEFAULT_STYLES[key], scale} = reference;\n  if (!attribute) {\n    throw new Error(`Invalid attribute reference for ${key}: ${JSON.stringify(reference)}`);\n  }\n\n  let scaleFn: ((value: unknown) => unknown) | undefined;\n  let scaleConfig: GraphStyleScale | ((value: unknown) => unknown) | undefined;\n\n  if (scale) {\n    if (typeof scale === 'function') {\n      scaleFn = scale;\n      scaleConfig = scale;\n    } else {\n      scaleFn = createScaleFromConfig(scale);\n      scaleConfig = scale;\n    }\n  }\n\n  return {\n    attribute,\n    fallback,\n    scale: scaleFn,\n    scaleConfig\n  };\n}\n\n/** Determine whether a value points to a graph attribute reference. */\nfunction isAttributeReference(value: unknown): value is GraphStyleAttributeReference {\n  if (typeof value === 'string') {\n    return value.startsWith('@');\n  }\n  return (\n    Boolean(value) &&\n    typeof value === 'object' &&\n    !Array.isArray(value) &&\n    'attribute' in (value as Record<string, unknown>)\n  );\n}\n\n/** Determine whether a style value maps interaction states. */\nfunction isStatefulValue(value: unknown): value is Record<string, GraphStyleLeafValue> {\n  return (\n    Boolean(value) &&\n    typeof value === 'object' &&\n    !Array.isArray(value) &&\n    !isAttributeReference(value)\n  );\n}\n\n/** Resolve an attribute from a datum or `Graph` entity. */\nfunction getAttributeValue(datum: any, attribute: string) {\n  if (datum && typeof datum.getPropertyValue === 'function') {\n    return datum.getPropertyValue(attribute);\n  }\n  if (datum && typeof datum === 'object' && attribute in datum) {\n    return datum[attribute];\n  }\n  return undefined;\n}\n\n/** Combine Deck.gl update triggers while filtering falsey entries. */\nfunction mergeUpdateTriggers(...triggers: unknown[]): unknown {\n  const filtered = triggers.filter(\n    trigger => !(trigger === false || trigger === undefined || trigger === null)\n  );\n  if (!filtered.length) {\n    return false;\n  }\n  if (filtered.length === 1) {\n    return filtered[0];\n  }\n  return filtered;\n}\n\n/** Build an accessor that reads and optionally scales an attribute. */\nfunction createAttributeAccessor(\n  key: string,\n  attributeRef: NormalizedAttributeReference,\n  formatter: (value: unknown) => unknown\n) {\n  const accessor = (datum: any) => {\n    let raw = getAttributeValue(datum, attributeRef.attribute);\n    if (raw === undefined || raw === null) {\n      raw = attributeRef.fallback;\n    }\n    if (attributeRef.scale) {\n      raw = attributeRef.scale(raw);\n    }\n    const formatted = formatter(raw);\n    if (formatted === null) {\n      warn(`Invalid ${key} value: ${raw}`);\n      throw new Error(`Invalid ${key} value: ${raw}`);\n    }\n    return formatted;\n  };\n\n  const updateTrigger = {\n    attribute: attributeRef.attribute,\n    scale: attributeRef.scaleConfig ?? null\n  };\n\n  return {accessor, updateTrigger};\n}\n\n/** Result of parsing a leaf style value. */\ntype LeafParseResult = {\n  value: any;\n  isAccessor: boolean;\n  updateTrigger: unknown;\n};\n\nfunction describeStyleValue(value: unknown): string {\n  if (typeof value === 'string') {\n    return value;\n  }\n  if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'undefined') {\n    return String(value);\n  }\n  if (value === null) {\n    return 'null';\n  }\n  if (typeof value === 'function') {\n    return value.name ? `[Function ${value.name}]` : '[Function]';\n  }\n  if (Array.isArray(value)) {\n    return `[${value.map(item => describeStyleValue(item)).join(', ')}]`;\n  }\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n}\n\n/** Parse a non-stateful style value into deck.gl compatible form. */\nfunction parseLeafValue(key: string, value: GraphStyleLeafValue | undefined): LeafParseResult {\n  const formatter = PROPERTY_FORMATTERS[key] || IDENTITY;\n\n  if (typeof value === 'undefined') {\n    const formatted = formatter(DEFAULT_STYLES[key]);\n    if (formatted === null) {\n      const description = describeStyleValue(value);\n      warn(`Invalid ${key} value: ${description}`);\n      throw new Error(`Invalid ${key} value: ${description}`);\n    }\n    return {value: formatted, isAccessor: false, updateTrigger: false};\n  }\n\n  if (isAttributeReference(value)) {\n    const normalized = normalizeAttributeReference(key, value);\n    const {accessor, updateTrigger} = createAttributeAccessor(key, normalized, formatter);\n    return {value: accessor, isAccessor: true, updateTrigger};\n  }\n\n  if (typeof value === 'function') {\n    return {\n      value: datum => formatter(value(datum)),\n      isAccessor: true,\n      updateTrigger: value\n    };\n  }\n\n  const formatted = formatter(value);\n  if (formatted === null) {\n    const description = describeStyleValue(value);\n    warn(`Invalid ${key} value: ${description}`);\n    throw new Error(`Invalid ${key} value: ${description}`);\n  }\n\n  return {value: formatted, isAccessor: false, updateTrigger: false};\n}\n\n/**\n * Create an accessor capable of handling interaction state overrides for a style property.\n */\nfunction createStatefulAccessor(\n  key: string,\n  value: Record<string, GraphStyleLeafValue>,\n  stateUpdateTrigger: unknown\n) {\n  const valueMap: Record<string, any> = {};\n  const attributeTriggers: unknown[] = [];\n\n  for (const state of Object.keys(value)) {\n    const parsed = parseLeafValue(key, value[state]);\n    valueMap[state] = parsed.value;\n    if (parsed.updateTrigger) {\n      attributeTriggers.push(parsed.updateTrigger);\n    }\n  }\n\n  const defaultValue =\n    typeof valueMap.default !== 'undefined'\n      ? valueMap.default\n      : parseLeafValue(key, undefined).value;\n\n  const accessor = (datum: any) => {\n    const stateValue = datum?.state ? valueMap[datum.state] : undefined;\n    const candidate = typeof stateValue !== 'undefined' ? stateValue : defaultValue;\n    return typeof candidate === 'function' ? candidate(datum) : candidate;\n  };\n\n  const updateTrigger = mergeUpdateTriggers(stateUpdateTrigger, ...attributeTriggers);\n\n  return {accessor, updateTrigger};\n}\n\nconst VALUE_TYPE = {\n  ACCESSOR: 'ACCESSOR',\n  PLAIN_VALUE: 'PLAIN_VALUE'\n};\n\nexport class StyleProperty {\n  key: any;\n  _updateTrigger: unknown;\n  _value: any;\n  _valueType: any;\n\n  // for getting default style\n  static getDefault(key) {\n    return DEFAULT_STYLES[key];\n  }\n\n  // pass the key and value of the property\n  // and format the value properly.\n  constructor({key, value, updateTrigger}) {\n    this.key = key;\n    this._updateTrigger = false;\n\n    if (isStatefulValue(value)) {\n      const {accessor, updateTrigger: triggers} = createStatefulAccessor(key, value, updateTrigger);\n      this._value = accessor;\n      this._valueType = VALUE_TYPE.ACCESSOR;\n      this._updateTrigger = triggers;\n    } else {\n      const parsed = parseLeafValue(key, value as GraphStyleLeafValue | undefined);\n      this._value = parsed.value;\n      this._valueType = parsed.isAccessor ? VALUE_TYPE.ACCESSOR : VALUE_TYPE.PLAIN_VALUE;\n      this._updateTrigger = mergeUpdateTriggers(parsed.updateTrigger);\n    }\n\n    if (this._value === null) {\n      warn(`Invalid ${key} value: ${value}`);\n      throw new Error(`Invalid ${key} value: ${value}`);\n    }\n  }\n\n  // get the formatted value\n  getValue() {\n    return this._value;\n  }\n\n  getUpdateTrigger() {\n    return this._updateTrigger;\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {StyleProperty} from './style-property';\nimport {error} from '../utils/log';\n\nexport type DeckGLAccessorMap = Record<string, Record<string, string>>;\nexport type DeckGLUpdateTriggers = Record<string, string[]>;\n\nexport type StylePropertyConstructor<T extends StyleProperty = StyleProperty> = new (args: {\n  key: string;\n  value: unknown;\n  updateTrigger: unknown;\n}) => T;\n\nexport type DefaultStyleValueFn = (property: string) => unknown;\n\nexport type StylesheetEngineOptions<T extends StyleProperty = StyleProperty> = {\n  deckglAccessorMap: DeckGLAccessorMap;\n  deckglUpdateTriggers?: DeckGLUpdateTriggers;\n  stateUpdateTrigger?: unknown;\n  StylePropertyClass?: StylePropertyConstructor<T>;\n  getDefaultStyleValue?: DefaultStyleValueFn;\n};\n\nconst DEFAULT_UPDATE_TRIGGERS: DeckGLUpdateTriggers = {};\n\nexport class StylesheetEngine<TStyleProperty extends StyleProperty = StyleProperty> {\n  type: string;\n  properties: Record<string, TStyleProperty>;\n\n  protected readonly deckglAccessorMap: DeckGLAccessorMap;\n  protected readonly deckglUpdateTriggers: DeckGLUpdateTriggers;\n  protected readonly stateUpdateTrigger: unknown;\n  protected readonly StylePropertyClass: StylePropertyConstructor<TStyleProperty>;\n  protected readonly getDefaultStyleValue: DefaultStyleValueFn;\n\n  constructor(style: Record<string, any>, options: StylesheetEngineOptions<TStyleProperty>) {\n    const {\n      deckglAccessorMap,\n      deckglUpdateTriggers = DEFAULT_UPDATE_TRIGGERS,\n      stateUpdateTrigger = false,\n      StylePropertyClass = StyleProperty as unknown as StylePropertyConstructor<TStyleProperty>,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      getDefaultStyleValue = StyleProperty.getDefault\n    } = options;\n\n    const {type: layerType, ...restStyle} = style;\n\n    if (!layerType || !(layerType in deckglAccessorMap)) {\n      throw new Error(`illegal type: ${layerType}`);\n    }\n\n    this.type = layerType;\n    this.deckglAccessorMap = deckglAccessorMap;\n    this.deckglUpdateTriggers = deckglUpdateTriggers;\n    this.stateUpdateTrigger = stateUpdateTrigger;\n    this.StylePropertyClass = StylePropertyClass;\n    this.getDefaultStyleValue = getDefaultStyleValue;\n\n    const rules = Object.keys(restStyle).reduce(\n      (res, key) => {\n        const isSelector = key.startsWith(':');\n        if (isSelector) {\n          const state = key.substring(1);\n          res[state] = restStyle[key];\n          return res;\n        }\n        res.default[key] = restStyle[key];\n        return res;\n      },\n      {default: {}} as Record<string, Record<string, unknown>>\n    );\n\n    const attributes = Object.values(rules).reduce<string[]>((res, rule) => {\n      const attrs = Object.keys(rule || {});\n      const set = new Set([...res, ...attrs]);\n      return Array.from(set);\n    }, []);\n\n    const attrMap = attributes.reduce(\n      (res, attr) => {\n        res[attr] = Object.entries(rules).reduce(\n          (acc, entry) => {\n            const [state, rule] = entry;\n            if (rule && typeof (rule as any)[attr] !== 'undefined') {\n              (acc as any)[state] = (rule as any)[attr];\n            }\n            return acc;\n          },\n          {} as Record<string, unknown>\n        );\n        return res;\n      },\n      {} as Record<string, any>\n    );\n\n    const simplifiedStyleMap = Object.entries(attrMap).reduce(\n      (res, entry) => {\n        const [attr, valueMap] = entry as [string, Record<string, unknown>];\n        const states = Object.keys(valueMap);\n        const onlyDefault = states.length === 1 && valueMap.default !== undefined;\n        if (onlyDefault) {\n          res[attr] = valueMap.default;\n          return res;\n        }\n        res[attr] = valueMap;\n        return res;\n      },\n      {} as Record<string, unknown>\n    );\n\n    this.properties = {} as Record<string, TStyleProperty>;\n    for (const key in simplifiedStyleMap) {\n      this.properties[key] = new this.StylePropertyClass({\n        key,\n        value: simplifiedStyleMap[key],\n        updateTrigger: this.stateUpdateTrigger\n      });\n    }\n  }\n\n  protected getDeckGLAccessorMapForType() {\n    return this.deckglAccessorMap[this.type];\n  }\n\n  protected getDeckGLUpdateTriggersForType() {\n    return this.deckglUpdateTriggers[this.type] || [];\n  }\n\n  protected _getProperty(deckglAccessor: string) {\n    const map = this.getDeckGLAccessorMapForType();\n    if (!map) {\n      throw new Error(`illegal type: ${this.type}`);\n    }\n    const styleProp = map[deckglAccessor];\n    if (!styleProp) {\n      error(`Invalid DeckGL accessor: ${deckglAccessor}`);\n      throw new Error(`Invalid DeckGL accessor: ${deckglAccessor}`);\n    }\n    return this.properties[styleProp];\n  }\n\n  getDeckGLAccessor(deckglAccessor: string) {\n    const property = this._getProperty(deckglAccessor);\n    if (property) {\n      const value = property.getValue();\n      return typeof value === 'function' ? value : () => value;\n    }\n    const styleProp = this.getDeckGLAccessorMapForType()?.[deckglAccessor];\n    return this.getDefaultStyleValue(styleProp);\n  }\n\n  getDeckGLAccessorUpdateTrigger(deckglAccessor: string) {\n    const property = this._getProperty(deckglAccessor);\n    if (property) {\n      return property.getUpdateTrigger();\n    }\n    return false;\n  }\n\n  getDeckGLAccessors() {\n    const accessorMap = this.getDeckGLAccessorMapForType();\n    return Object.keys(accessorMap).reduce(\n      (res, accessor) => {\n        res[accessor] = this.getDeckGLAccessor(accessor);\n        return res;\n      },\n      {} as Record<string, (...args: any[]) => unknown>\n    );\n  }\n\n  getDeckGLUpdateTriggers() {\n    return this.getDeckGLUpdateTriggersForType().reduce(\n      (res, accessor) => {\n        res[accessor] = this.getDeckGLAccessorUpdateTrigger(accessor);\n        return res;\n      },\n      {} as Record<string, unknown>\n    );\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-continue */\n\nimport {z, type ZodTypeAny} from 'zod';\n\nimport {GRAPH_DECKGL_ACCESSOR_MAP} from './graph-style-accessor-map';\nexport {GRAPH_DECKGL_ACCESSOR_MAP};\n\nconst GraphStylePrimitiveSchema = z.union([\n  z.string(),\n  z.number(),\n  z.boolean(),\n  z.null(),\n  z.array(z.union([z.string(), z.number(), z.boolean(), z.null()]))\n]);\n\nconst GraphStyleFunctionSchema = z.custom<(...args: unknown[]) => unknown>(\n  value => typeof value === 'function',\n  {\n    message: 'Style functions must be callable.'\n  }\n);\n\n/**\n * Supported scale identifiers for mapping data values to visual encodings.\n */\nexport const GraphStyleScaleTypeEnum = z.enum([\n  'linear',\n  'log',\n  'pow',\n  'sqrt',\n  'quantize',\n  'quantile',\n  'ordinal'\n]);\n\n/**\n * TypeScript union of {@link GraphStyleScaleTypeEnum} values.\n */\nexport type GraphStyleScaleType = z.infer<typeof GraphStyleScaleTypeEnum>;\n\n/**\n * Configuration for data-driven style scaling. Supports deck.gl compatible numeric and\n * categorical scaling with optional d3-scale like parameters.\n */\nexport const GraphStyleScaleSchema = z\n  .object({\n    type: GraphStyleScaleTypeEnum.optional(),\n    domain: z.array(z.union([z.number(), z.string()])).optional(),\n    range: z.array(z.any()).optional(),\n    clamp: z.boolean().optional(),\n    nice: z.union([z.boolean(), z.number()]).optional(),\n    base: z.number().optional(),\n    exponent: z.number().optional(),\n    unknown: z.any().optional()\n  })\n  .strict();\n\n/**\n * TypeScript view of {@link GraphStyleScaleSchema} after parsing.\n */\nexport type GraphStyleScale = z.infer<typeof GraphStyleScaleSchema>;\n\n/**\n * Reference to node/edge attributes, optionally including fallback values and scale\n * configuration for data-driven styling.\n */\nexport const GraphStyleAttributeReferenceSchema = z.union([\n  z\n    .string()\n    .regex(\n      /^@.+/,\n      'Attribute reference strings must start with \"@\" and include an attribute name.'\n    ),\n  z\n    .object({\n      attribute: z.string().min(1, 'Attribute name is required.'),\n      fallback: GraphStylePrimitiveSchema.optional(),\n      scale: z.union([GraphStyleScaleSchema, GraphStyleFunctionSchema]).optional()\n    })\n    .strict()\n]);\n\n/**\n * Parsed value produced by {@link GraphStyleAttributeReferenceSchema}.\n */\nexport type GraphStyleAttributeReference = z.infer<typeof GraphStyleAttributeReferenceSchema>;\n\n/**\n * Primitive value allowed in stylesheet definitions. Supports literal values, attribute\n * references and imperative resolver functions.\n */\nexport const GraphStyleLeafValueSchema = z.union([\n  GraphStylePrimitiveSchema,\n  GraphStyleAttributeReferenceSchema,\n  GraphStyleFunctionSchema\n]);\n\n/**\n * Union of literal, attribute-driven and functional style values.\n */\nexport type GraphStyleLeafValue = z.infer<typeof GraphStyleLeafValueSchema>;\n\nconst RESERVED_STATE_KEYS = new Set(['attribute', 'fallback', 'scale']);\n\n/**\n * Mapping of interaction or application state keys to leaf style values.\n */\nexport const GraphStyleStateMapSchema = z.record(\n  z\n    .string()\n    .refine(key => !RESERVED_STATE_KEYS.has(key), 'State overrides must not use reserved keys.'),\n  GraphStyleLeafValueSchema\n);\n\n/**\n * Style value that may be either a simple leaf value or a keyed map of overrides.\n */\nexport const GraphStyleValueSchema = z.union([GraphStyleLeafValueSchema, GraphStyleStateMapSchema]);\n\n/**\n * Parsed style property value that may include state overrides.\n */\nexport type GraphStyleValue = z.infer<typeof GraphStyleValueSchema>;\n\nexport type GraphStyleType = keyof typeof GRAPH_DECKGL_ACCESSOR_MAP;\n\n/**\n * CSS-like pseudo selector supported by the stylesheet for state overrides.\n */\nexport type GraphStyleSelector = `:${string}`;\n\nconst GraphStyleSelectorKeySchema = z.string().regex(/^:[^\\s]+/, 'Selectors must start with \":\".');\n\nfunction createSelectorRefinement(allowedKeys: readonly string[], propertiesSchema: ZodTypeAny) {\n  const allowedKeySet = new Set<string>(allowedKeys);\n\n  return (value: unknown, ctx: z.RefinementCtx) => {\n    if (typeof value !== 'object' || value === null) {\n      return;\n    }\n\n    const record = value as Record<string, unknown>;\n\n    for (const key of Object.keys(record)) {\n      if (key === 'type') continue;\n      if (allowedKeySet.has(key)) continue;\n\n      if (!key.startsWith(':')) {\n        ctx.addIssue({\n          code: z.ZodIssueCode.custom,\n          path: [key],\n          message: `Unknown style property \"${key}\".`\n        });\n        continue;\n      }\n\n      if (!GraphStyleSelectorKeySchema.safeParse(key).success) {\n        ctx.addIssue({\n          code: z.ZodIssueCode.custom,\n          path: [key],\n          message: 'Selectors must start with \":\".'\n        });\n        continue;\n      }\n\n      const selectorResult = propertiesSchema.safeParse(record[key]);\n      if (!selectorResult.success) {\n        for (const issue of selectorResult.error.issues) {\n          ctx.addIssue({\n            ...issue,\n            path: [key, ...(issue.path ?? [])]\n          });\n        }\n      }\n    }\n  };\n}\n\nconst CircleShape = {\n  offset: GraphStyleValueSchema.optional(),\n  opacity: GraphStyleValueSchema.optional(),\n  fill: GraphStyleValueSchema.optional(),\n  stroke: GraphStyleValueSchema.optional(),\n  strokeWidth: GraphStyleValueSchema.optional(),\n  radius: GraphStyleValueSchema.optional()\n} as const;\n\nconst CirclePropertiesSchema = z.object(CircleShape).partial().strict();\n\nconst CircleStylesheetSchema = z\n  .object({\n    type: z.literal('circle'),\n    ...CircleShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(CircleShape), CirclePropertiesSchema));\n\nconst RectangleShape = {\n  offset: GraphStyleValueSchema.optional(),\n  opacity: GraphStyleValueSchema.optional(),\n  width: GraphStyleValueSchema.optional(),\n  height: GraphStyleValueSchema.optional(),\n  fill: GraphStyleValueSchema.optional(),\n  stroke: GraphStyleValueSchema.optional(),\n  strokeWidth: GraphStyleValueSchema.optional()\n} as const;\n\nconst RectanglePropertiesSchema = z.object(RectangleShape).partial().strict();\n\nconst RectangleStylesheetSchema = z\n  .object({\n    type: z.literal('rectangle'),\n    ...RectangleShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(RectangleShape), RectanglePropertiesSchema));\n\nconst RoundedRectangleShape = {\n  offset: GraphStyleValueSchema.optional(),\n  opacity: GraphStyleValueSchema.optional(),\n  cornerRadius: GraphStyleValueSchema.optional(),\n  radius: GraphStyleValueSchema.optional(),\n  width: GraphStyleValueSchema.optional(),\n  height: GraphStyleValueSchema.optional(),\n  fill: GraphStyleValueSchema.optional(),\n  stroke: GraphStyleValueSchema.optional(),\n  strokeWidth: GraphStyleValueSchema.optional()\n} as const;\n\nconst RoundedRectanglePropertiesSchema = z.object(RoundedRectangleShape).partial().strict();\n\nconst RoundedRectangleStylesheetSchema = z\n  .object({\n    type: z.literal('rounded-rectangle'),\n    ...RoundedRectangleShape\n  })\n  .catchall(z.unknown())\n  .superRefine(\n    createSelectorRefinement(Object.keys(RoundedRectangleShape), RoundedRectanglePropertiesSchema)\n  );\n\nconst PathRoundedRectangleShape = {\n  offset: GraphStyleValueSchema.optional(),\n  opacity: GraphStyleValueSchema.optional(),\n  width: GraphStyleValueSchema.optional(),\n  height: GraphStyleValueSchema.optional(),\n  fill: GraphStyleValueSchema.optional(),\n  stroke: GraphStyleValueSchema.optional(),\n  strokeWidth: GraphStyleValueSchema.optional(),\n  cornerRadius: GraphStyleValueSchema.optional()\n} as const;\n\nconst PathRoundedRectanglePropertiesSchema = z.object(PathRoundedRectangleShape).partial().strict();\n\nconst PathRoundedRectangleStylesheetSchema = z\n  .object({\n    type: z.literal('path-rounded-rectangle'),\n    ...PathRoundedRectangleShape\n  })\n  .catchall(z.unknown())\n  .superRefine(\n    createSelectorRefinement(\n      Object.keys(PathRoundedRectangleShape),\n      PathRoundedRectanglePropertiesSchema\n    )\n  );\n\nconst LabelShape = {\n  offset: GraphStyleValueSchema.optional(),\n  opacity: GraphStyleValueSchema.optional(),\n  color: GraphStyleValueSchema.optional(),\n  text: GraphStyleValueSchema.optional(),\n  fontSize: GraphStyleValueSchema.optional(),\n  textAnchor: GraphStyleValueSchema.optional(),\n  alignmentBaseline: GraphStyleValueSchema.optional(),\n  angle: GraphStyleValueSchema.optional(),\n  scaleWithZoom: GraphStyleValueSchema.optional(),\n  textMaxWidth: GraphStyleValueSchema.optional(),\n  textWordBreak: GraphStyleValueSchema.optional(),\n  textSizeMinPixels: GraphStyleValueSchema.optional()\n} as const;\n\nconst LabelPropertiesSchema = z.object(LabelShape).partial().strict();\n\nconst LabelStylesheetSchema = z\n  .object({\n    type: z.literal('label'),\n    ...LabelShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(LabelShape), LabelPropertiesSchema));\n\nconst MarkerShape = {\n  offset: GraphStyleValueSchema.optional(),\n  opacity: GraphStyleValueSchema.optional(),\n  fill: GraphStyleValueSchema.optional(),\n  size: GraphStyleValueSchema.optional(),\n  marker: GraphStyleValueSchema.optional(),\n  scaleWithZoom: GraphStyleValueSchema.optional()\n} as const;\n\nconst MarkerPropertiesSchema = z.object(MarkerShape).partial().strict();\n\nconst MarkerStylesheetSchema = z\n  .object({\n    type: z.literal('marker'),\n    ...MarkerShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(MarkerShape), MarkerPropertiesSchema));\n\nconst EdgeUpperShape = {\n  stroke: GraphStyleValueSchema.optional(),\n  strokeWidth: GraphStyleValueSchema.optional()\n} as const;\n\nconst EdgeUpperPropertiesSchema = z.object(EdgeUpperShape).partial().strict();\n\nconst EdgeUpperStylesheetSchema = z\n  .object({\n    type: z.literal('Edge'),\n    ...EdgeUpperShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(EdgeUpperShape), EdgeUpperPropertiesSchema));\n\nconst EdgeLowerShape = {\n  stroke: GraphStyleValueSchema.optional(),\n  strokeWidth: GraphStyleValueSchema.optional()\n} as const;\n\nconst EdgeLowerPropertiesSchema = z.object(EdgeLowerShape).partial().strict();\n\nconst EdgeLowerStylesheetSchema = z\n  .object({\n    type: z.literal('edge'),\n    ...EdgeLowerShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(EdgeLowerShape), EdgeLowerPropertiesSchema));\n\nconst EdgeLabelShape = {\n  color: GraphStyleValueSchema.optional(),\n  text: GraphStyleValueSchema.optional(),\n  fontSize: GraphStyleValueSchema.optional(),\n  textAnchor: GraphStyleValueSchema.optional(),\n  alignmentBaseline: GraphStyleValueSchema.optional(),\n  scaleWithZoom: GraphStyleValueSchema.optional(),\n  textMaxWidth: GraphStyleValueSchema.optional(),\n  textWordBreak: GraphStyleValueSchema.optional(),\n  textSizeMinPixels: GraphStyleValueSchema.optional()\n} as const;\n\nconst EdgeLabelPropertiesSchema = z.object(EdgeLabelShape).partial().strict();\n\nconst EdgeLabelStylesheetSchema = z\n  .object({\n    type: z.literal('edge-label'),\n    ...EdgeLabelShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(EdgeLabelShape), EdgeLabelPropertiesSchema));\n\nconst FlowShape = {\n  color: GraphStyleValueSchema.optional(),\n  width: GraphStyleValueSchema.optional(),\n  speed: GraphStyleValueSchema.optional(),\n  tailLength: GraphStyleValueSchema.optional()\n} as const;\n\nconst FlowPropertiesSchema = z.object(FlowShape).partial().strict();\n\nconst FlowStylesheetSchema = z\n  .object({\n    type: z.literal('flow'),\n    ...FlowShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(FlowShape), FlowPropertiesSchema));\n\nconst ArrowShape = {\n  color: GraphStyleValueSchema.optional(),\n  size: GraphStyleValueSchema.optional(),\n  offset: GraphStyleValueSchema.optional()\n} as const;\n\nconst ArrowPropertiesSchema = z.object(ArrowShape).partial().strict();\n\nconst ArrowStylesheetSchema = z\n  .object({\n    type: z.literal('arrow'),\n    ...ArrowShape\n  })\n  .catchall(z.unknown())\n  .superRefine(createSelectorRefinement(Object.keys(ArrowShape), ArrowPropertiesSchema));\n\nconst GraphNodeStylesheetVariants = [\n  CircleStylesheetSchema,\n  RectangleStylesheetSchema,\n  RoundedRectangleStylesheetSchema,\n  PathRoundedRectangleStylesheetSchema,\n  LabelStylesheetSchema,\n  MarkerStylesheetSchema\n];\n\nconst GraphEdgeStylesheetVariants = [\n  EdgeUpperStylesheetSchema,\n  EdgeLowerStylesheetSchema,\n  EdgeLabelStylesheetSchema,\n  FlowStylesheetSchema,\n  ArrowStylesheetSchema\n];\n\nconst GraphStyleRuleVariants = [...GraphNodeStylesheetVariants, ...GraphEdgeStylesheetVariants];\n\ntype GraphStyleRuleVariantSchema = (typeof GraphStyleRuleVariants)[number];\n\n/**\n * Schema that validates stylesheet definitions for all graph style primitives.\n */\nexport const GraphStyleRuleSchema = z.discriminatedUnion(\n  'type',\n  GraphStyleRuleVariants as [GraphStyleRuleVariantSchema, ...GraphStyleRuleVariantSchema[]]\n);\n\n/**\n * Runtime type accepted by {@link GraphStyleRuleSchema} before validation.\n */\nexport type GraphStyleRule = z.input<typeof GraphStyleRuleSchema>;\n/**\n * Type returned by {@link GraphStyleRuleSchema} after successful parsing.\n */\nexport type GraphStyleRuleParsed = z.infer<typeof GraphStyleRuleSchema>;\n\nconst GraphNodeStyleRuleSchema = z.discriminatedUnion(\n  'type',\n  GraphNodeStylesheetVariants as [\n    (typeof GraphNodeStylesheetVariants)[number],\n    ...(typeof GraphNodeStylesheetVariants)[number][]\n  ]\n);\n\nconst GraphEdgeDecoratorRuleSchema = z.discriminatedUnion('type', [\n  EdgeLabelStylesheetSchema,\n  FlowStylesheetSchema,\n  ArrowStylesheetSchema\n] as [\n  typeof EdgeLabelStylesheetSchema,\n  typeof FlowStylesheetSchema,\n  typeof ArrowStylesheetSchema,\n  ...Array<\n    typeof EdgeLabelStylesheetSchema | typeof FlowStylesheetSchema | typeof ArrowStylesheetSchema\n  >\n]);\n\nconst EdgeUpperWithDecoratorsSchema = EdgeUpperStylesheetSchema.safeExtend({\n  decorators: z.array(GraphEdgeDecoratorRuleSchema).optional()\n});\n\nconst EdgeLowerWithDecoratorsSchema = EdgeLowerStylesheetSchema.safeExtend({\n  decorators: z.array(GraphEdgeDecoratorRuleSchema).optional()\n});\n\nconst GraphEdgeRuleWithDecoratorsSchema = z.discriminatedUnion('type', [\n  EdgeUpperWithDecoratorsSchema,\n  EdgeLowerWithDecoratorsSchema\n] as [typeof EdgeUpperWithDecoratorsSchema, typeof EdgeLowerWithDecoratorsSchema]);\n\n/**\n * Schema that validates a full graph stylesheet including nodes, edges, and decorators.\n */\nexport const GraphStylesheetSchema = z\n  .object({\n    nodes: z.array(GraphNodeStyleRuleSchema).optional(),\n    edges: z.array(GraphEdgeRuleWithDecoratorsSchema).optional()\n  })\n  .strict();\n\n/**\n * Runtime type accepted by {@link GraphStylesheetSchema} before validation.\n */\nexport type GraphStylesheet = z.input<typeof GraphStylesheetSchema>;\n/**\n * Type returned by {@link GraphStylesheetSchema} after successful parsing.\n */\nexport type GraphStylesheetParsed = z.infer<typeof GraphStylesheetSchema>;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nconst COMMON_DECKGL_PROPS = {\n  getOffset: 'offset',\n  opacity: 'opacity'\n} as const;\n\nexport const GRAPH_DECKGL_ACCESSOR_MAP = {\n  circle: {\n    ...COMMON_DECKGL_PROPS,\n    getFillColor: 'fill',\n    getLineColor: 'stroke',\n    getLineWidth: 'strokeWidth',\n    getRadius: 'radius'\n  },\n\n  rectangle: {\n    ...COMMON_DECKGL_PROPS,\n    getWidth: 'width',\n    getHeight: 'height',\n    getFillColor: 'fill',\n    getLineColor: 'stroke',\n    getLineWidth: 'strokeWidth'\n  },\n\n  'rounded-rectangle': {\n    ...COMMON_DECKGL_PROPS,\n    getCornerRadius: 'cornerRadius',\n    getRadius: 'radius',\n    getWidth: 'width',\n    getHeight: 'height',\n    getFillColor: 'fill',\n    getLineColor: 'stroke',\n    getLineWidth: 'strokeWidth'\n  },\n\n  'path-rounded-rectangle': {\n    ...COMMON_DECKGL_PROPS,\n    getWidth: 'width',\n    getHeight: 'height',\n    getFillColor: 'fill',\n    getLineColor: 'stroke',\n    getLineWidth: 'strokeWidth',\n    getCornerRadius: 'cornerRadius'\n  },\n\n  label: {\n    ...COMMON_DECKGL_PROPS,\n    getColor: 'color',\n    getText: 'text',\n    getSize: 'fontSize',\n    getTextAnchor: 'textAnchor',\n    getAlignmentBaseline: 'alignmentBaseline',\n    getAngle: 'angle',\n    scaleWithZoom: 'scaleWithZoom',\n    textMaxWidth: 'textMaxWidth',\n    textWordBreak: 'textWordBreak',\n    textSizeMinPixels: 'textSizeMinPixels'\n  },\n\n  marker: {\n    ...COMMON_DECKGL_PROPS,\n    getColor: 'fill',\n    getSize: 'size',\n    getMarker: 'marker',\n    scaleWithZoom: 'scaleWithZoom'\n  },\n\n  Edge: {\n    getColor: 'stroke',\n    getWidth: 'strokeWidth'\n  },\n  edge: {\n    getColor: 'stroke',\n    getWidth: 'strokeWidth'\n  },\n  'edge-label': {\n    getColor: 'color',\n    getText: 'text',\n    getSize: 'fontSize',\n    getTextAnchor: 'textAnchor',\n    getAlignmentBaseline: 'alignmentBaseline',\n    scaleWithZoom: 'scaleWithZoom',\n    textMaxWidth: 'textMaxWidth',\n    textWordBreak: 'textWordBreak',\n    textSizeMinPixels: 'textSizeMinPixels'\n  },\n  flow: {\n    getColor: 'color',\n    getWidth: 'width',\n    getSpeed: 'speed',\n    getTailLength: 'tailLength'\n  },\n  arrow: {\n    getColor: 'color',\n    getSize: 'size',\n    getOffset: 'offset'\n  }\n} as const;\n\nexport type GraphDeckGLAccessorMap = typeof GRAPH_DECKGL_ACCESSOR_MAP;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Bounds2D} from '@math.gl/types';\n\nimport type {Graph, EdgeInterface, NodeInterface} from '../graph/graph';\nimport {ClassicGraph} from '../graph/classic-graph';\nimport {GraphLayout, type GraphLayoutEventDetail} from './graph-layout';\nimport {Cache} from './cache';\nimport {log} from '../utils/log';\nimport {\n  GraphStylesheetEngine,\n  type GraphStyleRule,\n  type GraphStyleRuleParsed\n} from '../style/graph-style-engine';\n\ntype ClassicGraphEngineProps = {\n  graph: ClassicGraph;\n  layout: GraphLayout;\n  onLayoutStart?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutChange?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutDone?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutError?: (error?: unknown) => void;\n  onTransactionStart?: () => void;\n  onTransactionEnd?: () => void;\n  onNodeAdded?: (node: NodeInterface) => void;\n  onNodeRemoved?: (node: NodeInterface) => void;\n  onNodeUpdated?: (node: NodeInterface) => void;\n  onEdgeAdded?: (edge: EdgeInterface) => void;\n  onEdgeRemoved?: (edge: EdgeInterface) => void;\n  onEdgeUpdated?: (edge: EdgeInterface) => void;\n};\n\ntype InterfaceGraphEngineProps = {\n  graph: Graph;\n  layout: GraphLayout;\n  onLayoutStart?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutChange?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutDone?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutError?: (error?: unknown) => void;\n  onTransactionStart?: () => void;\n  onTransactionEnd?: () => void;\n  onNodeAdded?: (node: NodeInterface) => void;\n  onNodeRemoved?: (node: NodeInterface) => void;\n  onNodeUpdated?: (node: NodeInterface) => void;\n  onEdgeAdded?: (edge: EdgeInterface) => void;\n  onEdgeRemoved?: (edge: EdgeInterface) => void;\n  onEdgeUpdated?: (edge: EdgeInterface) => void;\n};\n\nexport type GraphEngineProps = ClassicGraphEngineProps | InterfaceGraphEngineProps;\n\n/** Graph engine controls the graph data and layout calculation */\nexport class GraphEngine {\n  private _props: GraphEngineProps;\n  private readonly _graph: Graph;\n  private readonly _layout: GraphLayout;\n  private readonly _cache = new Cache<'nodes' | 'edges', NodeInterface[] | EdgeInterface[]>();\n  private _layoutDirty = false;\n  private _transactionInProgress = false;\n  private _graphCallbacksAttached = false;\n  private _layoutCallbacksAttached = false;\n\n  constructor(props: GraphEngineProps);\n  /** @deprecated Use props constructor: new GraphEngine(props) */\n  constructor(graph: ClassicGraph, layout: GraphLayout);\n\n  constructor(props: GraphEngineProps | ClassicGraph, layout?: GraphLayout) {\n    let normalizedProps: GraphEngineProps;\n    if (props instanceof ClassicGraph) {\n      if (!(layout instanceof GraphLayout)) {\n        throw new Error('GraphEngine: legacy graphs require a GraphLayout instance.');\n      }\n      normalizedProps = {graph: props, layout};\n    } else {\n      normalizedProps = props;\n    }\n\n    this._props = {...normalizedProps};\n\n    this._graph = normalizedProps.graph;\n    this._layout = normalizedProps.layout;\n  }\n\n  get props(): GraphEngineProps {\n    return {...this._props};\n  }\n\n  setProps(props: Partial<Omit<GraphEngineProps, 'graph' | 'layout'>>): void {\n    this._props = {\n      ...this._props,\n      ...props,\n      graph: this._props.graph,\n      layout: this._props.layout\n    } as GraphEngineProps;\n  }\n\n  /** Getters */\n\n  getNodes = (): NodeInterface[] => {\n    this._updateCache('nodes', () =>\n      Array.from(this._graph.getNodes()).filter(node => {\n        const position = this.getNodePosition(node);\n        return position !== null && position !== undefined;\n      })\n    );\n\n    return (this._cache.get('nodes') as NodeInterface[]) ?? [];\n  };\n\n  getEdges = () => {\n    this._updateCache('edges', () =>\n      Array.from(this._graph.getEdges()).filter(edge => {\n        const layout = this.getEdgePosition(edge);\n        return layout !== null && layout !== undefined;\n      })\n    );\n\n    return (this._cache.get('edges') as EdgeInterface[]) ?? [];\n  };\n\n  getNodePosition = (node: NodeInterface) => {\n    return this._layout.getNodePosition(node) ?? null;\n  };\n\n  getEdgePosition = (edge: EdgeInterface) => {\n    return this._layout.getEdgePosition(edge) ?? null;\n  };\n\n  getGraphVersion = () => this._graph.version;\n\n  getLayoutLastUpdate = () => this._layout.version;\n\n  getLayoutState = () => this._layout.state;\n\n  getLayoutBounds = (): Bounds2D | null => this._layout.getBounds() ?? null;\n\n  /** Operations on the graph */\n\n  lockNodePosition = (node: NodeInterface, x: number, y: number) => {\n    this._layout.lockNodePosition(node, x, y);\n  };\n\n  unlockNodePosition = (node: NodeInterface) => {\n    this._layout.unlockNodePosition(node);\n  };\n\n  findNode(nodeId: string | number): NodeInterface | undefined {\n    return this._graph.findNode?.(nodeId) ?? this._graph.findNodeById?.(nodeId);\n  }\n\n  /** Creates a stylesheet engine for a single validated or raw style rule. */\n  createStylesheetEngine(\n    style: GraphStyleRule | GraphStyleRuleParsed,\n    options: {stateUpdateTrigger?: unknown} = {}\n  ): GraphStylesheetEngine {\n    return new GraphStylesheetEngine(style, options);\n  }\n\n  /**\n   * @fires GraphEngine#onLayoutStart\n   */\n  _onLayoutStart = (detail?: GraphLayoutEventDetail) => {\n    log.log(0, 'GraphEngine: layout start')();\n    this._props.onLayoutStart?.(detail);\n  };\n\n  /**\n   * @fires GraphEngine#onLayoutChange\n   */\n  _onLayoutChange = (detail?: GraphLayoutEventDetail) => {\n    log.log(0, 'GraphEngine: layout update event')();\n    this._props.onLayoutChange?.(detail);\n  };\n\n  /**\n   * @fires GraphEngine#onLayoutDone\n   */\n  _onLayoutDone = (detail?: GraphLayoutEventDetail) => {\n    log.log(0, 'GraphEngine: layout end')();\n    this._props.onLayoutDone?.(detail);\n  };\n\n  /**\n   * @fires GraphEngine#onLayoutError\n   */\n  _onLayoutError = (error?: unknown) => {\n    this._props.onLayoutError?.(error);\n  };\n\n  _onGraphStructureChanged = () => {\n    this._layoutDirty = true;\n    this._graphChanged();\n  };\n\n  _onTransactionStart = () => {\n    this._transactionInProgress = true;\n    this._props.onTransactionStart?.();\n  };\n\n  _onTransactionEnd = () => {\n    this._transactionInProgress = false;\n    this._graphChanged();\n    this._props.onTransactionEnd?.();\n  };\n\n  /** Layout calculations */\n\n  run = () => {\n    log.log(1, 'GraphEngine: run');\n    // TODO: throw if running on a cleared engine\n\n    this._attachGraphCallbacks();\n    this._attachLayoutCallbacks();\n\n    this._layout.initializeGraph(this._graph);\n    this._layout.start();\n  };\n\n  clear = () => {\n    log.log(1, 'GraphEngine: end');\n    this._detachGraphCallbacks();\n    this._detachLayoutCallbacks();\n  };\n\n  resume = () => {\n    this._layout.resume();\n  };\n\n  stop = () => {\n    this._layout.stop();\n  };\n\n  _graphChanged = () => {\n    if (this._layoutDirty && !this._transactionInProgress) {\n      this._updateLayout();\n    }\n  };\n\n  _updateLayout = () => {\n    log.log(0, 'GraphEngine: layout update');\n    this._layout.updateGraph(this._graph);\n    this._layout.update();\n    this._layoutDirty = false;\n  };\n\n  _updateCache(key, updateValue) {\n    this._cache.set(key, updateValue, this.getGraphVersion() + this.getLayoutLastUpdate());\n  }\n\n  private _attachGraphCallbacks() {\n    if (this._graphCallbacksAttached) {\n      return;\n    }\n    this._graph.updateProps({\n      onTransactionStart: this._onTransactionStart,\n      onTransactionEnd: this._onTransactionEnd,\n      onNodeAdded: node => {\n        this._onGraphStructureChanged();\n        this._props.onNodeAdded?.(node);\n      },\n      onNodeRemoved: node => {\n        this._onGraphStructureChanged();\n        this._props.onNodeRemoved?.(node);\n      },\n      onNodeUpdated: node => {\n        this._props.onNodeUpdated?.(node);\n      },\n      onEdgeAdded: edge => {\n        this._onGraphStructureChanged();\n        this._props.onEdgeAdded?.(edge);\n      },\n      onEdgeRemoved: edge => {\n        this._onGraphStructureChanged();\n        this._props.onEdgeRemoved?.(edge);\n      },\n      onEdgeUpdated: edge => {\n        this._props.onEdgeUpdated?.(edge);\n      }\n    });\n    this._graphCallbacksAttached = true;\n  }\n\n  private _detachGraphCallbacks() {\n    if (!this._graphCallbacksAttached) {\n      return;\n    }\n    this._graph.updateProps({\n      onTransactionStart: undefined,\n      onTransactionEnd: undefined,\n      onNodeAdded: undefined,\n      onNodeRemoved: undefined,\n      onNodeUpdated: undefined,\n      onEdgeAdded: undefined,\n      onEdgeRemoved: undefined,\n      onEdgeUpdated: undefined\n    });\n    this._graphCallbacksAttached = false;\n  }\n\n  private _attachLayoutCallbacks() {\n    if (this._layoutCallbacksAttached) {\n      return;\n    }\n    this._layout.setProps({\n      onLayoutStart: this._onLayoutStart,\n      onLayoutChange: this._onLayoutChange,\n      onLayoutDone: this._onLayoutDone,\n      onLayoutError: this._onLayoutError\n    });\n    this._layoutCallbacksAttached = true;\n  }\n\n  private _detachLayoutCallbacks() {\n    if (!this._layoutCallbacksAttached) {\n      return;\n    }\n    this._layout.setProps({\n      onLayoutStart: undefined,\n      onLayoutChange: undefined,\n      onLayoutDone: undefined,\n      onLayoutError: undefined\n    });\n    this._layoutCallbacksAttached = false;\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutProps} from '../core/graph-layout';\nimport type {Graph, NodeInterface, EdgeInterface} from '../graph/graph';\n\nexport type SimpleLayoutProps = GraphLayoutProps & {\n  /** The accessor lets the application supply the position ([x, y]) of each node. */\n  nodePositionAccessor?: (node: NodeInterface) => [number, number];\n};\n\n/** A basic layout where the application controls positions of each node */\nexport class SimpleLayout extends GraphLayout<SimpleLayoutProps> {\n  static defaultProps: Required<SimpleLayoutProps> = {\n    ...GraphLayout.defaultProps,\n    nodePositionAccessor: node =>\n      [node.getPropertyValue('x'), node.getPropertyValue('y')] as [number, number]\n  };\n\n  protected readonly _name = 'SimpleLayout';\n  protected _graph: Graph | null = null;\n  protected _nodeMap: Map<string | number, NodeInterface> = new Map();\n  protected _nodePositionMap: Map<string | number, [number, number] | null> = new Map();\n\n  constructor(options: SimpleLayoutProps = {}) {\n    super(options, SimpleLayout.defaultProps);\n  }\n\n  initializeGraph(graph: Graph): void {\n    this.updateGraph(graph);\n  }\n\n  start(): void {\n    this._notifyLayoutComplete();\n  }\n\n  stop(): void {}\n\n  update(): void {\n    this._notifyLayoutComplete();\n  }\n\n  resume(): void {\n    this._notifyLayoutComplete();\n  }\n\n  updateGraph(graph: Graph): void {\n    this._graph = graph;\n    const nodes = Array.from(graph.getNodes());\n    this._nodeMap = new Map(nodes.map(node => [node.getId(), node]));\n    this._nodePositionMap = new Map(\n      nodes.map(node => [\n        node.getId(),\n        this._normalizePosition(this.props.nodePositionAccessor(node))\n      ])\n    );\n  }\n\n  setNodePositionAccessor = accessor => {\n    (this.props as any).nodePositionAccessor = accessor;\n  };\n\n  getNodePosition = (node: NodeInterface | null): [number, number] => {\n    if (!node) {\n      return [0, 0] as [number, number];\n    }\n    const position = this._nodePositionMap.get(node.getId());\n    return position ?? ([0, 0] as [number, number]);\n  };\n\n  getEdgePosition = (edge: EdgeInterface) => {\n    const sourceNode = this._nodeMap.get(edge.getSourceNodeId());\n    const targetNode = this._nodeMap.get(edge.getTargetNodeId());\n    const sourcePos = sourceNode ? this.getNodePosition(sourceNode) : [0, 0];\n    const targetPos = targetNode ? this.getNodePosition(targetNode) : [0, 0];\n    return {\n      type: 'line',\n      sourcePosition: sourcePos,\n      targetPosition: targetPos,\n      controlPoints: []\n    };\n  };\n\n  lockNodePosition = (node: NodeInterface, x: number, y: number) => {\n    this._nodePositionMap.set(node.getId(), [x, y]);\n    this._onLayoutChange();\n    this._onLayoutDone();\n  };\n\n  _notifyLayoutComplete(): void {\n    this._onLayoutStart();\n    this._onLayoutChange();\n    this._onLayoutDone();\n  }\n\n  protected override _updateBounds(): void {\n    const positions = Array.from(this._nodePositionMap.values(), position =>\n      this._normalizePosition(position)\n    );\n    this._bounds = this._calculateBounds(positions);\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';\nimport type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';\nimport {log} from '../../utils/log';\n\nexport type D3ForceLayoutOptions = GraphLayoutProps & {\n  alpha?: number;\n  resumeAlpha?: number;\n  nBodyStrength?: number;\n  nBodyDistanceMin?: number;\n  nBodyDistanceMax?: number;\n  getCollisionRadius?: number;\n};\n\nexport class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {\n  static defaultProps = {\n    ...GraphLayout.defaultProps,\n    alpha: 0.3,\n    resumeAlpha: 0.1,\n    nBodyStrength: -900,\n    nBodyDistanceMin: 100,\n    nBodyDistanceMax: 400,\n    getCollisionRadius: 0\n  } as const satisfies Readonly<Required<D3ForceLayoutOptions>>;\n\n  protected readonly _name = 'D3';\n  private _positionsByNodeId = new Map<string | number, any>();\n  private _graph: Graph | null = null;\n  private _worker: Worker | null = null;\n\n  constructor(props?: D3ForceLayoutOptions) {\n    super(props, D3ForceLayout.defaultProps);\n  }\n\n  initializeGraph(graph: Graph) {\n    this._graph = graph;\n  }\n\n  // for streaming new data on the same graph\n  updateGraph(graph: Graph) {\n    this._graph = graph;\n\n    this._positionsByNodeId = new Map(\n      Array.from(this._graph.getNodes(), node => {\n        const id = node.getId();\n        return [id, this._positionsByNodeId.get(id)];\n      })\n    );\n  }\n\n  start() {\n    this._engageWorker();\n\n    this._onLayoutStart();\n  }\n\n  update() {\n    this._engageWorker();\n  }\n\n  _engageWorker() {\n    // prevent multiple start\n    if (this._worker) {\n      this._worker.terminate();\n    }\n\n    this._worker = new Worker(new URL('./worker.js', import.meta.url).href);\n\n    if (!this._graph) {\n      return;\n    }\n\n    const options = {...this.props};\n    delete options.onLayoutStart;\n    delete options.onLayoutChange;\n    delete options.onLayoutDone;\n    delete options.onLayoutError;\n\n    this._worker.postMessage({\n      nodes: Array.from(this._graph.getNodes(), node => {\n        const id = node.getId();\n        return {\n          id,\n          ...this._positionsByNodeId.get(id)\n        };\n      }),\n      edges: Array.from(this._graph.getEdges(), edge => ({\n        id: edge.getId(),\n        source: edge.getSourceNodeId(),\n        target: edge.getTargetNodeId()\n      })),\n      options\n    });\n\n    this._worker.onmessage = event => {\n      log.log(0, 'D3ForceLayout: worker message', event.data?.type, event.data);\n      if (event.data.type !== 'end') {\n        return;\n      }\n\n      event.data.nodes.forEach(({id, ...d3}) =>\n        this._positionsByNodeId.set(id, {\n          ...d3,\n          // precompute so that when we return the node position we do not need to do the conversion\n          coordinates: [d3.x, d3.y]\n        })\n      );\n\n      this._onLayoutChange();\n      this._onLayoutDone();\n    };\n  }\n\n  resume() {\n    throw new Error('Resume unavailable');\n  }\n\n  stop() {\n    if (this._worker) {\n      this._worker.terminate();\n      this._worker = null;\n    }\n  }\n\n  getEdgePosition = (edge: EdgeInterface) => {\n    if (!this._graph) {\n      return null;\n    }\n\n    const sourceNode = this._graph.findNode(edge.getSourceNodeId());\n    const targetNode = this._graph.findNode(edge.getTargetNodeId());\n    if (!sourceNode || !targetNode) {\n      return null;\n    }\n\n    const sourcePosition = this.getNodePosition(sourceNode);\n    const targetPosition = this.getNodePosition(targetNode);\n\n    if (!sourcePosition || !targetPosition) {\n      return null;\n    }\n\n    return {\n      type: 'line',\n      sourcePosition,\n      targetPosition,\n      controlPoints: []\n    };\n  };\n\n  getNodePosition = (node: NodeInterface | null) => {\n    if (!node) {\n      return null;\n    }\n\n    const d3Node = this._positionsByNodeId.get(node.getId());\n    if (d3Node) {\n      return d3Node.coordinates;\n    }\n\n    return null;\n  };\n\n  lockNodePosition = (node: NodeInterface, x: number, y: number) => {\n    const id = node.getId();\n    const d3Node = this._positionsByNodeId.get(id);\n    this._positionsByNodeId.set(id, {\n      ...d3Node,\n      x,\n      y,\n      fx: x,\n      fy: y,\n      coordinates: [x, y]\n    });\n    this._onLayoutChange();\n    this._onLayoutDone();\n  };\n\n  unlockNodePosition = (node: NodeInterface) => {\n    const id = node.getId();\n    const d3Node = this._positionsByNodeId.get(id);\n    if (!d3Node) {\n      return;\n    }\n    d3Node.fx = null;\n    d3Node.fy = null;\n  };\n\n  protected override _updateBounds(): void {\n    const positions = Array.from(\n      this._positionsByNodeId.values(),\n      data => data?.coordinates as [number, number] | null | undefined\n    );\n    this._bounds = this._calculateBounds(positions);\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-continue, complexity, max-statements */\n\nimport {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';\nimport type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';\nimport {Node} from '../../graph/node';\nimport {\n  coordCenter,\n  coordGreedy,\n  coordQuad,\n  coordSimplex,\n  coordTopological,\n  decrossDfs,\n  decrossOpt,\n  decrossTwoLayer,\n  graph as createDagGraph,\n  graphConnect,\n  graphStratify,\n  grid,\n  layeringLongestPath,\n  layeringSimplex,\n  layeringTopological,\n  sugiyama,\n  zherebko,\n  // type Coord,\n  // type Decross,\n  type DefaultGrid,\n  type DefaultSugiyama,\n  type DefaultZherebko,\n  type LayoutResult,\n  type MutGraph,\n  type MutGraphNode,\n  type MutGraphLink,\n  type NodeSize\n} from 'd3-dag';\nimport {log} from '../../utils/log';\n\nexport type D3DagLayoutProps = GraphLayoutProps & {\n  /** Which high-level layout operator to use. */\n  layout?: 'sugiyama' | 'grid' | 'zherebko';\n  /** Layering operator used by sugiyama layouts. */\n  layering?: 'simplex' | 'longestPath' | 'topological';\n  /** Accessor for node rank for layering */\n  nodeRank?: string | ((node: NodeInterface) => number | undefined);\n  /** Decrossing operator used by sugiyama layouts. */\n  decross?: 'twoLayer' | 'opt' | 'dfs';\n  /** Coordinate assignment operator used by sugiyama layouts. */\n  coord?: 'simplex' | 'greedy' | 'quad' | 'center' | 'topological';\n  /** Node sizing accessor passed to the active layout. */\n  nodeSize?: NodeSize<NodeInterface, EdgeInterface>;\n  /** Optional gap between nodes. Alias: separation. */\n  gap?: readonly [number, number];\n  /** Optional gap between nodes. */\n  separation?: readonly [number, number];\n  /** Orientation transform applied after the layout finishes. */\n  orientation?: 'TB' | 'BT' | 'LR' | 'RL';\n  /** Whether to center the layout along each axis. */\n  center?: boolean | {x?: boolean; y?: boolean};\n  /** How to convert the Graph into a DAG. */\n  dagBuilder?: 'graph' | 'connect' | 'stratify';\n\n  customDagBuilder?: DagBuilder;\n  customLayout?: D3DagLayoutOperator;\n  customLayering?: LayeringOperator;\n  customDecross?: DecrossOperator;\n  customCoord?: CoordOperator;\n};\n\nexport type D3DagLayoutOperator =\n  | DefaultSugiyama\n  | DefaultGrid\n  | DefaultZherebko\n  | ((dag: MutGraph<NodeInterface, EdgeInterface>) => LayoutResult);\n\ntype DagBuilder = (graph: Graph) => MutGraph<NodeInterface, EdgeInterface>;\n\ntype LayeringOperator =\n  | ReturnType<typeof layeringSimplex>\n  | ReturnType<typeof layeringLongestPath>\n  | ReturnType<typeof layeringTopological>;\ntype DecrossOperator =\n  | ReturnType<typeof decrossTwoLayer>\n  | ReturnType<typeof decrossOpt>\n  | ReturnType<typeof decrossDfs>;\ntype CoordOperator =\n  | ReturnType<typeof coordCenter>\n  | ReturnType<typeof coordGreedy>\n  | ReturnType<typeof coordQuad>\n  | ReturnType<typeof coordSimplex>\n  | ReturnType<typeof coordTopological>;\n\ntype LayoutCallable = (dag: MutGraph<NodeInterface, EdgeInterface>) => LayoutResult;\n\ntype LayoutWithConfiguration = LayoutCallable & {\n  layering?: (layer?: any) => any;\n  decross?: (decross?: any) => any;\n  coord?: (coord?: any) => any;\n  nodeSize?: (size?: NodeSize<NodeInterface, EdgeInterface>) => any;\n  gap?: (gap?: readonly [number, number]) => any;\n};\n\ntype DagBounds = {\n  minX: number;\n  maxX: number;\n  minY: number;\n  maxY: number;\n  centerX: number;\n  centerY: number;\n};\n\nconst DAG_ID_SEPARATOR = '::';\n\nconst DEFAULT_NODE_SIZE: readonly [number, number] = [140, 120];\nconst DEFAULT_GAP: readonly [number, number] = [0, 0];\n\nconst LAYERING_FACTORIES = {\n  simplex: layeringSimplex,\n  longestPath: layeringLongestPath,\n  topological: layeringTopological\n} as const satisfies Record<string, () => LayeringOperator>;\n\nconst DECROSS_FACTORIES = {\n  twoLayer: decrossTwoLayer,\n  opt: decrossOpt,\n  dfs: decrossDfs\n} as const satisfies Record<string, () => DecrossOperator>;\n\nconst COORD_FACTORIES = {\n  simplex: coordSimplex,\n  greedy: coordGreedy,\n  quad: coordQuad,\n  center: coordCenter,\n  topological: coordTopological\n} as const satisfies Record<string, () => CoordOperator>;\n\nconst LAYOUT_FACTORIES = {\n  sugiyama: () => sugiyama(),\n  grid: () => grid(),\n  zherebko: () => zherebko()\n} as const satisfies Record<string, () => LayoutWithConfiguration>;\n\nfunction isNodeInterface(value: unknown): value is NodeInterface {\n  return Boolean(value) && typeof value === 'object' && (value as NodeInterface).isNode === true;\n}\n\nfunction isEdgeInterface(value: unknown): value is EdgeInterface {\n  return Boolean(value) && typeof value === 'object' && (value as EdgeInterface).isEdge === true;\n}\n\n/**\n * Layout that orchestrates d3-dag operators from declarative options.\n */\nexport class D3DagLayout<\n  PropsT extends D3DagLayoutProps = D3DagLayoutProps\n> extends GraphLayout<PropsT> {\n  static defaultProps: Readonly<Required<D3DagLayoutProps>> = {\n    ...GraphLayout.defaultProps,\n    layout: 'sugiyama',\n    layering: 'topological',\n    decross: 'twoLayer',\n    coord: 'greedy',\n    nodeRank: undefined,\n    nodeSize: DEFAULT_NODE_SIZE,\n    gap: DEFAULT_GAP,\n    separation: DEFAULT_GAP,\n    orientation: 'TB',\n    center: true,\n    dagBuilder: 'graph',\n\n    customLayout: undefined,\n    customLayering: undefined,\n    customDecross: undefined,\n    customCoord: undefined,\n    customDagBuilder: undefined\n  } as const;\n\n  protected readonly _name = 'D3DagLayout';\n\n  protected _graph: Graph | null = null;\n  private _dag: MutGraph<NodeInterface, EdgeInterface> | null = null;\n  private _layoutOperator: LayoutWithConfiguration | null = null;\n  private _rawNodePositions = new Map<string | number, [number, number]>();\n  private _rawEdgePoints = new Map<string | number, [number, number][]>();\n  private _nodePositions = new Map<string | number, [number, number]>();\n  private _edgePoints = new Map<string | number, [number, number][]>();\n  private _edgeControlPoints = new Map<string | number, [number, number][]>();\n  private _lockedNodePositions = new Map<string | number, [number, number]>();\n  private _dagBounds: DagBounds | null = null;\n\n  protected _nodeLookup = new Map<string | number, NodeInterface>();\n  protected _stringIdLookup = new Map<string, string | number>();\n  protected _edgeLookup = new Map<string, EdgeInterface>();\n  protected _incomingParentMap = new Map<string | number, (string | number)[]>();\n\n  constructor(props: D3DagLayoutProps, defaultProps?: Required<PropsT>) {\n    // @ts-expect-error TS2345 - Type 'Required<D3DagLayoutProps>' is not assignable to type 'Required<PropsT>'.\n    super(props, defaultProps || D3DagLayout.defaultProps);\n  }\n\n  setProps(options: Partial<D3DagLayoutProps>): void {\n    this.props = {...this.props, ...options};\n    if (\n      options.layout !== undefined ||\n      options.layering !== undefined ||\n      options.decross !== undefined ||\n      options.coord !== undefined ||\n      options.nodeSize !== undefined ||\n      options.gap !== undefined ||\n      options.separation !== undefined\n    ) {\n      this._layoutOperator = null;\n    }\n  }\n\n  initializeGraph(graph: Graph): void {\n    this.updateGraph(graph);\n  }\n\n  updateGraph(graph: Graph): void {\n    this._graph = graph;\n    this._nodeLookup = new Map();\n    this._stringIdLookup = new Map();\n    this._edgeLookup = new Map();\n    this._incomingParentMap = new Map();\n\n    for (const node of graph.getNodes()) {\n      const id = node.getId();\n      const key = this._toDagId(id);\n      this._nodeLookup.set(id, node);\n      this._stringIdLookup.set(key, id);\n    }\n\n    for (const edge of graph.getEdges()) {\n      if (!edge.isDirected()) {\n        continue;\n      }\n      const key = this._edgeKey(edge.getSourceNodeId(), edge.getTargetNodeId());\n      this._edgeLookup.set(key, edge);\n\n      const targetId = edge.getTargetNodeId();\n      const parents = this._incomingParentMap.get(targetId) ?? [];\n      parents.push(edge.getSourceNodeId());\n      this._incomingParentMap.set(targetId, parents);\n    }\n  }\n\n  start(): void {\n    this._runLayout();\n  }\n\n  update(): void {\n    this._runLayout();\n  }\n\n  resume(): void {\n    this._runLayout();\n  }\n\n  stop(): void {}\n\n  toggleCollapsedChain(chainId: string): void {\n    log.log(1, `D3DagLayout: toggleCollapsedChain(${chainId}) ignored (collapsing disabled)`);\n  }\n\n  setCollapsedChains(chainIds: Iterable<string>): void {\n    const desired = Array.isArray(chainIds) ? chainIds : Array.from(chainIds);\n    log.log(1, `D3DagLayout: setCollapsedChains(${desired.length}) ignored (collapsing disabled)`);\n  }\n\n  getNodePosition(node: NodeInterface): [number, number] | null {\n    if (this._shouldSkipNode(node.getId())) {\n      return null;\n    }\n    const mappedId = this._mapNodeId(node.getId());\n    return this._nodePositions.get(mappedId) || null;\n  }\n\n  getEdgePosition(edge: EdgeInterface): {\n    type: string;\n    sourcePosition: [number, number];\n    targetPosition: [number, number];\n    controlPoints: [number, number][];\n  } | null {\n    const mappedSourceId = this._mapNodeId(edge.getSourceNodeId());\n    const mappedTargetId = this._mapNodeId(edge.getTargetNodeId());\n    if (mappedSourceId === mappedTargetId) {\n      return null;\n    }\n\n    const sourcePosition = this._nodePositions.get(mappedSourceId);\n    const targetPosition = this._nodePositions.get(mappedTargetId);\n    if (!sourcePosition || !targetPosition) {\n      return null;\n    }\n\n    if (!this._edgePoints.has(edge.getId())) {\n      return null;\n    }\n\n    // const points = this._edgePoints.get(edge.getId()) || [sourcePosition, targetPosition];\n    const controlPoints = this._edgeControlPoints.get(edge.getId()) || [];\n    const edgeType = controlPoints.length ? 'spline-curve' : 'line';\n\n    return {\n      type: edgeType,\n      sourcePosition,\n      targetPosition,\n      controlPoints\n    };\n  }\n\n  getLinkControlPoints(edge: EdgeInterface): [number, number][] {\n    return this._edgeControlPoints.get(edge.getId()) || [];\n  }\n\n  lockNodePosition(node: NodeInterface, x: number, y: number): void {\n    this._lockedNodePositions.set(node.getId(), [x, y]);\n    this._nodePositions.set(node.getId(), [x, y]);\n    this._onLayoutChange();\n    this._onLayoutDone();\n  }\n\n  unlockNodePosition(node: NodeInterface): void {\n    this._lockedNodePositions.delete(node.getId());\n  }\n\n  protected _runLayout(): void {\n    if (!this._graph) {\n      return;\n    }\n    this._refreshCollapsedChains();\n    this._onLayoutStart();\n\n    try {\n      this._dag = this._buildDag();\n      const layout = this._getLayoutOperator();\n      layout(this._dag);\n      this._cacheGeometry();\n      this._onLayoutChange();\n      this._onLayoutDone();\n    } catch (error) {\n      this._onLayoutError();\n      throw error;\n    }\n  }\n\n  protected _refreshCollapsedChains(): void {\n    this._updateCollapsedChainNodeMetadata();\n  }\n\n  private _buildDag(): MutGraph<NodeInterface, EdgeInterface> {\n    if (this.props.customDagBuilder) {\n      const dag = this.props.customDagBuilder(this._graph);\n      return this._ensureEdgeData(dag);\n    }\n\n    switch (this.props.dagBuilder) {\n      case 'connect':\n        return this._buildDagWithConnect();\n      case 'stratify':\n        return this._buildDagWithStratify();\n      case 'graph':\n      default:\n        return this._buildDagWithGraph();\n    }\n  }\n\n  private _buildDagWithGraph(): MutGraph<NodeInterface, EdgeInterface> {\n    const dag = createDagGraph<NodeInterface, EdgeInterface>();\n    const dagNodeLookup = new Map<string | number, MutGraphNode<NodeInterface, EdgeInterface>>();\n\n    for (const node of this._graph.getNodes()) {\n      if (this._shouldSkipNode(node.getId())) {\n        continue;\n      }\n      const dagNode = dag.node(node);\n      dagNodeLookup.set(node.getId(), dagNode);\n    }\n\n    for (const edge of this._graph.getEdges()) {\n      if (!edge.isDirected()) {\n        continue;\n      }\n      const sourceId = this._mapNodeId(edge.getSourceNodeId());\n      const targetId = this._mapNodeId(edge.getTargetNodeId());\n      if (sourceId === targetId) {\n        continue;\n      }\n      const source = dagNodeLookup.get(sourceId);\n      const target = dagNodeLookup.get(targetId);\n      if (!source || !target) {\n        continue;\n      }\n      dag.link(source, target, edge);\n    }\n\n    return dag;\n  }\n\n  private _buildDagWithConnect(): MutGraph<NodeInterface, EdgeInterface> {\n    type ConnectDatum = {source: string; target: string; edge: EdgeInterface};\n\n    const connect = graphConnect()\n      .sourceId(({source}: ConnectDatum): string => source)\n      .targetId(({target}: ConnectDatum): string => target)\n      .nodeDatum(\n        (id: string): NodeInterface => this._nodeLookup.get(this._fromDagId(id)) ?? new Node({id})\n      )\n      .single(true);\n\n    const edges = Array.from(this._graph.getEdges());\n\n    const data: ConnectDatum[] = edges\n      .filter(edge => edge.isDirected())\n      .map(edge => {\n        const sourceId = this._mapNodeId(edge.getSourceNodeId());\n        const targetId = this._mapNodeId(edge.getTargetNodeId());\n        return {sourceId, targetId, edge};\n      })\n      .filter(({sourceId, targetId}) => sourceId !== targetId)\n      .map(({sourceId, targetId, edge}) => ({\n        source: this._toDagId(sourceId),\n        target: this._toDagId(targetId),\n        edge\n      }));\n\n    const dag = connect(data);\n\n    const seenIds = new Set<string | number>();\n    for (const dagNode of dag.nodes()) {\n      const datum = dagNode.data;\n      if (isNodeInterface(datum)) {\n        seenIds.add(datum.getId());\n      }\n    }\n\n    for (const node of this._graph.getNodes()) {\n      if (this._shouldSkipNode(node.getId())) {\n        continue;\n      }\n      if (!seenIds.has(node.getId())) {\n        dag.node(node);\n      }\n    }\n\n    return this._ensureEdgeData(dag);\n  }\n\n  private _buildDagWithStratify(): MutGraph<NodeInterface, EdgeInterface> {\n    const stratify = graphStratify()\n      .id((node: NodeInterface): string => this._toDagId(node.getId()))\n      .parentIds((node: NodeInterface): Iterable<string> => {\n        const parentIds = this._incomingParentMap.get(node.getId()) ?? [];\n        const mapped = new Set<string>();\n        for (const parentId of parentIds) {\n          if (!this._nodeLookup.has(parentId)) {\n            continue;\n          }\n          const mappedId = this._mapNodeId(parentId);\n          if (mappedId === node.getId()) {\n            continue;\n          }\n          mapped.add(this._toDagId(mappedId));\n        }\n        return mapped;\n      });\n\n    const nodes = Array.from(this._graph.getNodes());\n    const dag = stratify(nodes.filter(node => !this._shouldSkipNode(node.getId())));\n    return this._ensureEdgeData(dag);\n  }\n\n  protected _shouldSkipNode(_nodeId: string | number): boolean {\n    return false;\n  }\n\n  protected _mapNodeId(nodeId: string | number): string | number {\n    return nodeId;\n  }\n\n  protected _updateCollapsedChainNodeMetadata(): void {\n    if (!this._graph) {\n      return;\n    }\n    for (const node of this._graph.getNodes()) {\n      node.setDataProperty('collapsedChainId', null);\n      node.setDataProperty('collapsedChainLength', 1);\n      node.setDataProperty('collapsedNodeIds', []);\n      node.setDataProperty('collapsedEdgeIds', []);\n      node.setDataProperty('collapsedChainRepresentativeId', null);\n      node.setDataProperty('isCollapsedChain', false);\n    }\n  }\n\n  protected _getIncomingEdges(node: NodeInterface): EdgeInterface[] {\n    const nodeId = node.getId();\n    return node\n      .getConnectedEdges()\n      .filter(edge => edge.isDirected() && edge.getTargetNodeId() === nodeId);\n  }\n\n  protected _getOutgoingEdges(node: NodeInterface): EdgeInterface[] {\n    const nodeId = node.getId();\n    return node\n      .getConnectedEdges()\n      .filter(edge => edge.isDirected() && edge.getSourceNodeId() === nodeId);\n  }\n\n  private _ensureEdgeData<T>(\n    dag: MutGraph<NodeInterface, T>\n  ): MutGraph<NodeInterface, EdgeInterface> {\n    for (const link of dag.links()) {\n      if (isEdgeInterface(link.data)) {\n        continue;\n      }\n      const sourceNode = link.source.data;\n      const targetNode = link.target.data;\n      if (!isNodeInterface(sourceNode) || !isNodeInterface(targetNode)) {\n        continue;\n      }\n      const key = this._edgeKey(sourceNode.getId(), targetNode.getId());\n      const edge = this._edgeLookup.get(key);\n      if (edge) {\n        (link as unknown as MutGraphLink<NodeInterface, EdgeInterface>).data = edge;\n      }\n    }\n\n    return dag as unknown as MutGraph<NodeInterface, EdgeInterface>;\n  }\n\n  private _getLayoutOperator(): LayoutWithConfiguration {\n    if (this._layoutOperator) {\n      return this._layoutOperator;\n    }\n\n    const layoutOption = this.props.layout ?? D3DagLayout.defaultProps.layout;\n    let layout: LayoutWithConfiguration;\n\n    if (typeof layoutOption === 'string') {\n      layout = LAYOUT_FACTORIES[layoutOption]();\n    } else {\n      layout = layoutOption as LayoutWithConfiguration;\n    }\n\n    // TODO - is 'none' operator an option in d3-dag?\n    if (layout.layering && this.props.layering) {\n      let layeringOperator = this.props.customLayering || LAYERING_FACTORIES[this.props.layering]();\n      layout = layout.layering(layeringOperator);\n      const {nodeRank} = this.props;\n      if (nodeRank) {\n        // @ts-expect-error TS2345 - Argument of type '(dagNode: MutGraphNode<NodeInterface, EdgeInterface>) => number | undefined' is not assignable to parameter of type '(dagNode: MutGraphNode<NodeInterface, EdgeInterface>) => number'.\n        layeringOperator = layeringOperator.rank(dagNode => {\n          const node = dagNode.data as NodeInterface;\n          const rank =\n            typeof nodeRank === 'function'\n              ? nodeRank?.(node)\n              : node?.getPropertyValue(nodeRank) || undefined;\n          // if (rank !== undefined) {\n          //   console.log(`Node ${node.getId()} assigned to rank ${rank}`);\n          // }\n          return rank;\n        });\n      }\n      layout = layout.layering(layeringOperator);\n    }\n\n    if (layout.decross && this.props.decross) {\n      const decrossOperator = this.props.customDecross || DECROSS_FACTORIES[this.props.decross]();\n      layout = layout.decross(decrossOperator);\n    }\n\n    if (layout.coord && this.props.coord) {\n      const coordOperator = this.props.customCoord || COORD_FACTORIES[this.props.coord]();\n      layout = layout.coord(coordOperator);\n    }\n\n    const nodeSize = this.props.nodeSize ?? DEFAULT_NODE_SIZE;\n    if (layout.nodeSize) {\n      layout = layout.nodeSize(nodeSize);\n    }\n\n    const gap = this.props.separation ?? this.props.gap ?? DEFAULT_GAP;\n    if (layout.gap) {\n      layout = layout.gap(gap);\n    }\n\n    this._layoutOperator = layout;\n    return layout;\n  }\n\n  private _cacheGeometry(): void {\n    this._rawNodePositions.clear();\n    this._rawEdgePoints.clear();\n\n    if (!this._dag) {\n      this._dagBounds = null;\n      this._bounds = null;\n      return;\n    }\n\n    let minX = Number.POSITIVE_INFINITY;\n    let maxX = Number.NEGATIVE_INFINITY;\n    let minY = Number.POSITIVE_INFINITY;\n    let maxY = Number.NEGATIVE_INFINITY;\n\n    for (const dagNode of this._dag.nodes()) {\n      const node = dagNode.data;\n      const id = node.getId();\n      const x = dagNode.x ?? 0;\n      const y = dagNode.y ?? 0;\n\n      minX = Math.min(minX, x);\n      maxX = Math.max(maxX, x);\n      minY = Math.min(minY, y);\n      maxY = Math.max(maxY, y);\n\n      this._rawNodePositions.set(id, [x, y]);\n    }\n\n    if (minX === Number.POSITIVE_INFINITY) {\n      this._dagBounds = null;\n      this._bounds = null;\n      this._nodePositions.clear();\n      this._edgePoints.clear();\n      this._edgeControlPoints.clear();\n      return;\n    }\n\n    this._dagBounds = {\n      minX,\n      maxX,\n      minY,\n      maxY,\n      centerX: (minX + maxX) / 2,\n      centerY: (minY + maxY) / 2\n    };\n\n    for (const link of this._dag.links()) {\n      const source = link.source.data;\n      const target = link.target.data;\n      if (!isNodeInterface(source) || !isNodeInterface(target)) {\n        continue;\n      }\n      const edge = isEdgeInterface(link.data)\n        ? link.data\n        : this._edgeLookup.get(this._edgeKey(source.getId(), target.getId()));\n      if (!edge) {\n        continue;\n      }\n      const points =\n        link.points && link.points.length\n          ? link.points\n          : [\n              [link.source.x ?? 0, link.source.y ?? 0],\n              [link.target.x ?? 0, link.target.y ?? 0]\n            ];\n      this._rawEdgePoints.set(\n        edge.getId(),\n        points.map(point => [...point] as [number, number])\n      );\n    }\n\n    this._updateTransformedGeometry();\n  }\n\n  private _updateTransformedGeometry(): void {\n    this._nodePositions.clear();\n    this._edgePoints.clear();\n    this._edgeControlPoints.clear();\n\n    if (!this._dagBounds) {\n      this._bounds = null;\n      return;\n    }\n\n    const {offsetX, offsetY} = this._getOffsets();\n    const orientation = this.props.orientation ?? D3DagLayout.defaultProps.orientation;\n\n    const transform = (x: number, y: number): [number, number] => {\n      const localX = x - offsetX;\n      const localY = y - offsetY;\n      switch (orientation) {\n        case 'BT':\n          return [localX, localY];\n        case 'LR':\n          return [localY, localX];\n        case 'RL':\n          return [-localY, localX];\n        case 'TB':\n        default:\n          return [localX, -localY];\n      }\n    };\n\n    for (const [id, [x, y]] of this._rawNodePositions) {\n      this._nodePositions.set(id, transform(x, y));\n    }\n\n    for (const [edgeId, points] of this._rawEdgePoints) {\n      const transformed = points.map(([x, y]) => transform(x, y));\n      this._edgePoints.set(edgeId, transformed);\n      this._edgeControlPoints.set(edgeId, transformed.length > 2 ? transformed.slice(1, -1) : []);\n    }\n\n    for (const [id, position] of this._lockedNodePositions) {\n      this._nodePositions.set(id, position);\n    }\n\n    this._bounds = this._calculateBounds(this._nodePositions.values());\n  }\n\n  private _getOffsets(): {offsetX: number; offsetY: number} {\n    if (!this._dagBounds) {\n      return {offsetX: 0, offsetY: 0};\n    }\n    const centerOption = this.props.center ?? true;\n    let offsetX = 0;\n    let offsetY = 0;\n    if (centerOption === true) {\n      offsetX = this._dagBounds.centerX;\n      offsetY = this._dagBounds.centerY;\n    } else if (centerOption && typeof centerOption === 'object') {\n      if (centerOption.x) {\n        offsetX = this._dagBounds.centerX;\n      }\n      if (centerOption.y) {\n        offsetY = this._dagBounds.centerY;\n      }\n    }\n    return {offsetX, offsetY};\n  }\n\n  protected override _updateBounds(): void {\n    this._bounds = this._calculateBounds(this._nodePositions.values());\n  }\n\n  protected _edgeKey(sourceId: string | number, targetId: string | number): string {\n    return `${this._toDagId(sourceId)}${DAG_ID_SEPARATOR}${this._toDagId(targetId)}`;\n  }\n\n  protected _toDagId(id: string | number): string {\n    return String(id);\n  }\n\n  protected _fromDagId(id: string): string | number {\n    return this._stringIdLookup.get(id) ?? id;\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-continue, complexity, max-statements */\n\nimport type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';\nimport {log} from '../../utils/log';\n\nimport {D3DagLayout, type D3DagLayoutProps} from './d3-dag-layout';\n\ntype CollapsedChainDescriptor = {\n  id: string;\n  nodeIds: (string | number)[];\n  edgeIds: (string | number)[];\n  representativeId: string | number;\n};\n\nexport type CollapsableD3DagLayoutProps = D3DagLayoutProps & {\n  /** Whether to collapse linear chains of nodes into a single representative. */\n  collapseLinearChains?: boolean;\n};\n\nexport class CollapsableD3DagLayout extends D3DagLayout<CollapsableD3DagLayoutProps> {\n  static override defaultProps: Required<CollapsableD3DagLayoutProps> = {\n    ...D3DagLayout.defaultProps,\n    collapseLinearChains: false\n  };\n\n  private _chainDescriptors = new Map<string, CollapsedChainDescriptor>();\n  private _nodeToChainId = new Map<string | number, string>();\n  private _collapsedChainState = new Map<string, boolean>();\n  private _hiddenNodeIds = new Set<string | number>();\n\n  constructor(props: CollapsableD3DagLayoutProps = {}) {\n    super(props, CollapsableD3DagLayout.defaultProps);\n  }\n\n  override setProps(props: Partial<CollapsableD3DagLayoutProps>): void {\n    super.setProps(props);\n    if (props.collapseLinearChains !== undefined && this._graph) {\n      this._runLayout();\n    }\n  }\n\n  override updateGraph(graph: Graph): void {\n    super.updateGraph(graph);\n    this._chainDescriptors.clear();\n    this._nodeToChainId.clear();\n    this._hiddenNodeIds.clear();\n  }\n\n  override toggleCollapsedChain(chainId: string): void {\n    if (!this._graph) {\n      log.log(1, `CollapsableD3DagLayout: toggleCollapsedChain(${chainId}) ignored (no graph)`);\n      return;\n    }\n\n    if (!this._chainDescriptors.has(chainId)) {\n      this._refreshCollapsedChains();\n    }\n\n    if (!this._chainDescriptors.has(chainId)) {\n      log.log(\n        1,\n        `CollapsableD3DagLayout: toggleCollapsedChain(${chainId}) skipped (unknown chain)`\n      );\n      return;\n    }\n\n    const collapsed = this._isChainCollapsed(chainId);\n    const nextState = !collapsed;\n    log.log(\n      0,\n      `CollapsableD3DagLayout: toggleCollapsedChain(${chainId}) -> ${nextState ? 'collapsed' : 'expanded'}`\n    );\n    // eslint-disable-next-line no-console\n    console.log(\n      `CollapsableD3DagLayout: toggleCollapsedChain(${chainId}) -> ${nextState ? 'collapsed' : 'expanded'}`\n    );\n    this._collapsedChainState.set(chainId, nextState);\n    this._runLayout();\n  }\n\n  override setCollapsedChains(chainIds: Iterable<string>): void {\n    if (!this._graph) {\n      log.log(1, 'CollapsableD3DagLayout: setCollapsedChains ignored (no graph)');\n      return;\n    }\n\n    if (!this._chainDescriptors.size) {\n      this._refreshCollapsedChains();\n    }\n\n    const desired = new Set(chainIds);\n    log.log(0, `CollapsableD3DagLayout: setCollapsedChains(${desired.size}) requested`);\n\n    let changed = false;\n    for (const chainId of this._chainDescriptors.keys()) {\n      const next = desired.has(chainId);\n      if (this._isChainCollapsed(chainId) !== next) {\n        this._collapsedChainState.set(chainId, next);\n        changed = true;\n      }\n    }\n\n    if (changed) {\n      log.log(\n        0,\n        'CollapsableD3DagLayout: setCollapsedChains -> changes detected, rerunning layout'\n      );\n      // eslint-disable-next-line no-console\n      console.log(\n        'CollapsableD3DagLayout: setCollapsedChains -> changes detected, rerunning layout'\n      );\n      this._runLayout();\n    } else {\n      log.log(1, 'CollapsableD3DagLayout: setCollapsedChains -> no changes');\n      // eslint-disable-next-line no-console\n      console.log('CollapsableD3DagLayout: setCollapsedChains -> no changes');\n    }\n  }\n\n  protected override _refreshCollapsedChains(): void {\n    const previousChainCount = this._chainDescriptors.size;\n\n    if (!this._graph) {\n      if (previousChainCount > 0) {\n        log.log(0, 'CollapsableD3DagLayout: clearing collapsed chains (graph unavailable)');\n        // eslint-disable-next-line no-console\n        console.log('CollapsableD3DagLayout: clearing collapsed chains (graph unavailable)');\n      }\n      this._chainDescriptors.clear();\n      this._nodeToChainId.clear();\n      this._hiddenNodeIds.clear();\n      this._updateCollapsedChainNodeMetadata();\n      return;\n    }\n\n    log.log(\n      0,\n      `CollapsableD3DagLayout: refreshing collapsed chains (previous=${previousChainCount})`\n    );\n    // eslint-disable-next-line no-console\n    console.log(\n      `CollapsableD3DagLayout: refreshing collapsed chains (previous=${previousChainCount})`\n    );\n\n    const collapseDefault = this.props.collapseLinearChains;\n\n    const previousStates = new Map(this._collapsedChainState);\n\n    this._chainDescriptors.clear();\n    this._nodeToChainId.clear();\n    this._hiddenNodeIds.clear();\n\n    const nodes = this._graph.getNodes();\n    const candidateNodes = new Set<string | number>();\n    const incomingCache = new Map<string | number, EdgeInterface[]>();\n    const outgoingCache = new Map<string | number, EdgeInterface[]>();\n\n    for (const node of nodes) {\n      const incoming = this._getIncomingEdges(node);\n      const outgoing = this._getOutgoingEdges(node);\n      incomingCache.set(node.getId(), incoming);\n      outgoingCache.set(node.getId(), outgoing);\n      if (incoming.length <= 1 && outgoing.length <= 1 && incoming.length + outgoing.length > 0) {\n        candidateNodes.add(node.getId());\n      }\n    }\n\n    const visited = new Set<string | number>();\n    for (const node of nodes) {\n      const nodeId = node.getId();\n      if (!candidateNodes.has(nodeId) || visited.has(nodeId)) {\n        continue;\n      }\n\n      const incoming = incomingCache.get(nodeId) ?? [];\n      const hasCandidateParent =\n        incoming.length === 1 && candidateNodes.has(incoming[0].getSourceNodeId());\n      if (hasCandidateParent) {\n        continue;\n      }\n\n      const chainNodeIds: (string | number)[] = [];\n      const chainEdgeIds: (string | number)[] = [];\n      let currentNode: NodeInterface | undefined = node;\n\n      while (currentNode) {\n        const currentId = currentNode.getId();\n        if (!candidateNodes.has(currentId) || visited.has(currentId)) {\n          break;\n        }\n\n        visited.add(currentId);\n        chainNodeIds.push(currentId);\n\n        const outgoing = outgoingCache.get(currentId) ?? [];\n        if (outgoing.length !== 1) {\n          break;\n        }\n\n        const nextEdge = outgoing[0];\n        const nextNodeId = nextEdge.getTargetNodeId();\n        if (!candidateNodes.has(nextNodeId)) {\n          break;\n        }\n\n        const nextIncoming = incomingCache.get(nextNodeId) ?? [];\n        if (nextIncoming.length !== 1) {\n          break;\n        }\n\n        chainEdgeIds.push(nextEdge.getId());\n        currentNode = this._nodeLookup.get(nextNodeId);\n      }\n\n      if (chainNodeIds.length > 1) {\n        const chainId = this._createChainId(chainNodeIds);\n        const collapsed = previousStates.has(chainId)\n          ? Boolean(previousStates.get(chainId))\n          : collapseDefault;\n        this._chainDescriptors.set(chainId, {\n          id: chainId,\n          nodeIds: chainNodeIds,\n          edgeIds: chainEdgeIds,\n          representativeId: chainNodeIds[0]\n        });\n        this._collapsedChainState.set(chainId, collapsed);\n        for (const chainNodeId of chainNodeIds) {\n          this._nodeToChainId.set(chainNodeId, chainId);\n        }\n      }\n    }\n\n    for (const key of previousStates.keys()) {\n      if (!this._chainDescriptors.has(key)) {\n        this._collapsedChainState.delete(key);\n      }\n    }\n\n    this._hiddenNodeIds.clear();\n    for (const [chainId, descriptor] of this._chainDescriptors) {\n      const collapsed = this._isChainCollapsed(chainId);\n      if (collapsed) {\n        for (const nodeId of descriptor.nodeIds) {\n          // eslint-disable-next-line max-depth\n          if (nodeId !== descriptor.representativeId) {\n            this._hiddenNodeIds.add(nodeId);\n          }\n        }\n      }\n    }\n\n    this._updateCollapsedChainNodeMetadata();\n\n    let collapsedCount = 0;\n    for (const chainId of this._chainDescriptors.keys()) {\n      if (this._isChainCollapsed(chainId)) {\n        collapsedCount++;\n      }\n    }\n\n    log.log(\n      0,\n      `CollapsableD3DagLayout: refreshed collapsed chains -> total=${this._chainDescriptors.size}, collapsed=${collapsedCount}`\n    );\n  }\n\n  protected override _updateCollapsedChainNodeMetadata(): void {\n    if (!this._graph) {\n      return;\n    }\n\n    for (const node of this._graph.getNodes()) {\n      const nodeId = node.getId();\n      const chainId = this._nodeToChainId.get(nodeId);\n\n      if (!chainId) {\n        node.setDataProperty('collapsedChainId', null);\n        node.setDataProperty('collapsedChainLength', 1);\n        node.setDataProperty('collapsedNodeIds', []);\n        node.setDataProperty('collapsedEdgeIds', []);\n        node.setDataProperty('collapsedChainRepresentativeId', null);\n        node.setDataProperty('isCollapsedChain', false);\n        continue;\n      }\n\n      const descriptor = this._chainDescriptors.get(chainId);\n      if (!descriptor) {\n        node.setDataProperty('collapsedChainId', null);\n        node.setDataProperty('collapsedChainLength', 1);\n        node.setDataProperty('collapsedNodeIds', []);\n        node.setDataProperty('collapsedEdgeIds', []);\n        node.setDataProperty('collapsedChainRepresentativeId', null);\n        node.setDataProperty('isCollapsedChain', false);\n        continue;\n      }\n\n      const collapsed = this._isChainCollapsed(chainId);\n      node.setDataProperty('collapsedChainId', chainId);\n      node.setDataProperty('collapsedChainLength', collapsed ? descriptor.nodeIds.length : 1);\n      node.setDataProperty('collapsedNodeIds', descriptor.nodeIds);\n      node.setDataProperty('collapsedEdgeIds', descriptor.edgeIds);\n      node.setDataProperty('collapsedChainRepresentativeId', descriptor.representativeId);\n      node.setDataProperty('isCollapsedChain', collapsed);\n    }\n  }\n\n  protected override _shouldSkipNode(nodeId: string | number): boolean {\n    return this._hiddenNodeIds.has(nodeId);\n  }\n\n  protected override _mapNodeId(nodeId: string | number): string | number {\n    const chainId = this._nodeToChainId.get(nodeId);\n    if (!chainId) {\n      return nodeId;\n    }\n\n    const descriptor = this._chainDescriptors.get(chainId);\n    if (!descriptor) {\n      return nodeId;\n    }\n\n    return this._isChainCollapsed(chainId) ? descriptor.representativeId : nodeId;\n  }\n\n  private _createChainId(nodeIds: (string | number)[]): string {\n    return `chain:${nodeIds.map(id => this._toDagId(id)).join('>')}`;\n  }\n\n  private _isChainCollapsed(chainId: string): boolean {\n    const collapseDefault = this.props.collapseLinearChains;\n    return this._collapsedChainState.get(chainId) ?? collapseDefault;\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';\nimport type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';\n\nexport type GPUForceLayoutOptions = GraphLayoutProps & {\n  alpha?: number;\n  resumeAlpha?: number;\n  nBodyStrength?: number;\n  nBodyDistanceMin?: number;\n  nBodyDistanceMax?: number;\n  getCollisionRadius?: number;\n};\n\n/**\n * @todo this layout should be updated with the organizational and logic improvements made in d3-force\n */\nexport class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {\n  static defaultProps: Required<GPUForceLayoutOptions> = {\n    ...GraphLayout.defaultProps,\n    alpha: 0.3,\n    resumeAlpha: 0.1,\n    nBodyStrength: -900,\n    nBodyDistanceMin: 100,\n    nBodyDistanceMax: 400,\n    getCollisionRadius: 0\n  };\n\n  protected readonly _name: string = 'GPU';\n  private _d3Graph: {nodes: any[]; edges: any[]};\n  private _nodeMap: Map<string | number, any>;\n  private _edgeMap: Map<string | number, any>;\n  private _graph: Graph | null;\n  private _worker: Worker | null = null;\n\n  constructor(options: GPUForceLayoutOptions = {}) {\n    super(options, GPUForceLayout.defaultProps);\n\n    this._name = 'GPU';\n    // store graph and prepare internal data\n    this._d3Graph = {nodes: [], edges: []};\n    this._nodeMap = new Map();\n    this._edgeMap = new Map();\n    this._graph = null;\n  }\n\n  initializeGraph(graph: Graph) {\n    this._graph = graph;\n    this._nodeMap = new Map();\n    this._edgeMap = new Map();\n    // nodes\n    const d3Nodes = Array.from(graph.getNodes(), node => {\n      const id = node.getId();\n      const locked = node.getPropertyValue('locked') || false;\n      const x = node.getPropertyValue('x') || 0;\n      const y = node.getPropertyValue('y') || 0;\n      const collisionRadius = node.getPropertyValue('collisionRadius') || 0;\n      const d3Node = {\n        id,\n        x,\n        y,\n        fx: locked ? x : null,\n        fy: locked ? y : null,\n        collisionRadius,\n        locked\n      };\n      this._nodeMap.set(id, d3Node);\n      return d3Node;\n    });\n    // edges\n    const d3Edges = Array.from(graph.getEdges(), edge => {\n      const id = edge.getId();\n      const d3Edge = {\n        id,\n        source: this._nodeMap.get(edge.getSourceNodeId()),\n        target: this._nodeMap.get(edge.getTargetNodeId())\n      };\n      this._edgeMap.set(id, d3Edge);\n      return d3Edge;\n    });\n    this._d3Graph = {\n      nodes: d3Nodes,\n      edges: d3Edges\n    };\n  }\n\n  start() {\n    this._engageWorker();\n  }\n\n  update() {\n    this._engageWorker();\n  }\n\n  _engageWorker() {\n    // prevent multiple start\n    if (this._worker) {\n      this._worker.terminate();\n    }\n\n    this._worker = new Worker(new URL('./worker.js', import.meta.url).href);\n    const {alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax, getCollisionRadius} =\n      this.props;\n    this._worker.postMessage({\n      nodes: this._d3Graph.nodes,\n      edges: this._d3Graph.edges,\n      options: {\n        alpha,\n        nBodyStrength,\n        nBodyDistanceMin,\n        nBodyDistanceMax,\n        getCollisionRadius\n      }\n    });\n    this._worker.onmessage = event => {\n      switch (event.data.type) {\n        case 'tick':\n          this.ticked(event.data);\n          break;\n        case 'end':\n          this.ended(event.data);\n          break;\n        default:\n          break;\n      }\n    };\n  }\n  ticked(data) {}\n  ended(data) {\n    const {nodes, edges} = data;\n    this.updateD3Graph({nodes, edges});\n    this._onLayoutChange();\n    this._onLayoutDone();\n  }\n  resume() {\n    throw new Error('Resume unavailable');\n  }\n  stop() {\n    if (this._worker) {\n      this._worker.terminate();\n      this._worker = null;\n    }\n  }\n\n  // for steaming new data on the same graph\n  updateGraph(graph: Graph) {\n    const previousName = this._graph?.getGraphName?.();\n    const nextName = graph.getGraphName?.();\n    const isSameGraph =\n      (previousName && nextName && previousName === nextName) || this._graph === graph;\n    if (!isSameGraph) {\n      // reset the maps\n      this._nodeMap = new Map();\n      this._edgeMap = new Map();\n    }\n    this._graph = graph;\n    // update internal layout data\n    // nodes\n    const newNodeMap = new Map<string | number, any>();\n    const newD3Nodes = Array.from(graph.getNodes(), node => {\n      const id = node.getId();\n      const locked = node.getPropertyValue('locked') || false;\n      const x = node.getPropertyValue('x') || 0;\n      const y = node.getPropertyValue('y') || 0;\n      const fx = locked ? x : null;\n      const fy = locked ? y : null;\n      const collisionRadius = node.getPropertyValue('collisionRadius') || 0;\n\n      const oldD3Node = this._nodeMap.get(id);\n      const newD3Node = oldD3Node ? oldD3Node : {id, x, y, fx, fy, collisionRadius};\n      newNodeMap.set(id, newD3Node);\n      return newD3Node;\n    });\n    this._nodeMap = newNodeMap;\n    this._d3Graph.nodes = newD3Nodes;\n    // edges\n    const newEdgeMap = new Map<string | number, any>();\n    const newD3Edges = Array.from(graph.getEdges(), edge => {\n      const id = edge.getId();\n      const oldD3Edge = this._edgeMap.get(id);\n      const newD3Edge = oldD3Edge || {\n        id,\n        source: newNodeMap.get(edge.getSourceNodeId()),\n        target: newNodeMap.get(edge.getTargetNodeId())\n      };\n      newEdgeMap.set(id, newD3Edge);\n      return newD3Edge;\n    });\n    this._edgeMap = newEdgeMap;\n    this._d3Graph.edges = newD3Edges;\n  }\n\n  updateD3Graph(graph: {nodes: any[]; edges: any[]}): void {\n    const existingNodes = this._graph ? Array.from(this._graph.getNodes()) : [];\n    // update internal layout data\n    // nodes\n    const newNodeMap = new Map<string | number, any>();\n    const newD3Nodes = graph.nodes.map(node => {\n      // Update existing _graph with the new values\n      const existingNode = existingNodes.find(n => n.getId() === node.id);\n      existingNode?.setDataProperty('locked', node.locked);\n      existingNode?.setDataProperty('x', node.x);\n      existingNode?.setDataProperty('y', node.y);\n      existingNode?.setDataProperty('collisionRadius', node.collisionRadius);\n\n      newNodeMap.set(node.id, node);\n      return node;\n    });\n    this._nodeMap = newNodeMap;\n    this._d3Graph.nodes = newD3Nodes;\n    // edges\n    const newEdgeMap = new Map<string | number, any>();\n    const newD3Edges = graph.edges.map(edge => {\n      newEdgeMap.set(edge.id, edge);\n      return edge;\n    });\n    this._graph?.triggerUpdate?.();\n    this._edgeMap = newEdgeMap;\n    this._d3Graph.edges = newD3Edges;\n  }\n\n  getNodePosition = (node: NodeInterface): [number, number] => {\n    const d3Node = this._nodeMap.get(node.getId());\n    if (d3Node) {\n      return [d3Node.x, d3Node.y];\n    }\n    return [0, 0];\n  };\n\n  getEdgePosition = (edge: EdgeInterface) => {\n    const d3Edge = this._edgeMap.get(edge.getId());\n    const sourcePosition = d3Edge && d3Edge.source;\n    const targetPosition = d3Edge && d3Edge.target;\n    if (d3Edge && sourcePosition && targetPosition) {\n      return {\n        type: 'line',\n        sourcePosition: [sourcePosition.x, sourcePosition.y],\n        targetPosition: [targetPosition.x, targetPosition.y],\n        controlPoints: []\n      };\n    }\n    return {\n      type: 'line',\n      sourcePosition: [0, 0],\n      targetPosition: [0, 0],\n      controlPoints: []\n    };\n  };\n\n  lockNodePosition = (node: NodeInterface, x: number, y: number) => {\n    const d3Node = this._nodeMap.get(node.getId());\n    if (!d3Node) {\n      return;\n    }\n    d3Node.x = x;\n    d3Node.y = y;\n    d3Node.fx = x;\n    d3Node.fy = y;\n    this._onLayoutChange();\n    this._onLayoutDone();\n  };\n\n  unlockNodePosition = (node: NodeInterface) => {\n    const d3Node = this._nodeMap.get(node.getId());\n    if (!d3Node) {\n      return;\n    }\n    d3Node.fx = null;\n    d3Node.fy = null;\n  };\n\n  protected override _updateBounds(): void {\n    const positions = Array.from(this._nodeMap.values(), node => this._normalizePosition(node));\n    this._bounds = this._calculateBounds(positions);\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';\nimport type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';\n\nexport type RadialLayoutProps = GraphLayoutProps & {\n  radius?: number;\n  tree?: any;\n};\n\nconst getTreeNode = (\n  nodeId: string,\n  nodeMap: Record<string, {children?: string[]; isLeaf?: boolean}>\n) => {\n  const node = nodeMap[nodeId];\n  if (node) {\n    return node;\n  }\n  return {\n    id: nodeId,\n    children: [],\n    isLeaf: true\n  };\n};\n\nconst traverseTree = (nodeId, nodeMap) => {\n  const node = getTreeNode(nodeId, nodeMap);\n  if (node.isLeaf) {\n    return node;\n  }\n  return {\n    ...node,\n    children: (node.children ?? []).map(nid => traverseTree(nid, nodeMap))\n  };\n};\n\nconst getLeafNodeCount = (node, count) => {\n  if (!node.children || node.children.length === 0) {\n    return count + 1;\n  }\n  const sum = node.children.reduce((res, c) => {\n    return res + getLeafNodeCount(c, 0);\n  }, 0);\n  return count + sum;\n};\n\nconst getTreeDepth = (node, depth = 0) => {\n  if (node.isLeaf) {\n    return depth;\n  }\n  return getTreeDepth(node.children[0], depth + 1);\n};\n\nconst getPath = (node, targetId, path) => {\n  if (!node) {\n    return false;\n  }\n  if (node.id === targetId) {\n    path.push(node.id);\n    return true;\n  }\n  const inChildren = node.children && node.children.some(c => getPath(c, targetId, path));\n  if (inChildren) {\n    path.push(node.id);\n    return true;\n  }\n  return false;\n};\n\nexport class RadialLayout extends GraphLayout<RadialLayoutProps> {\n  static defaultProps = {\n    ...GraphLayout.defaultProps,\n    radius: 500,\n    tree: []\n  } as const satisfies Readonly<Required<RadialLayoutProps>>;\n\n  _name = 'RadialLayout';\n  _graph: Graph | null = null;\n  // custom layout data structure\n  _hierarchicalPoints = {};\n  nestedTree;\n\n  constructor(props: RadialLayoutProps = {}) {\n    super(props, RadialLayout.defaultProps);\n  }\n\n  initializeGraph(graph: Graph): void {\n    this.updateGraph(graph);\n  }\n\n  updateGraph(graph: Graph): void {\n    this._graph = graph;\n  }\n\n  start(): void {\n    if (!this._graph) {\n      return;\n    }\n    const nodes = Array.from(this._graph.getNodes());\n    const nodeCount = nodes.length;\n    if (nodeCount === 0) {\n      return;\n    }\n\n    const {tree} = this.props;\n\n    if (!tree || tree.length === 0) {\n      return;\n    }\n\n    this._onLayoutStart();\n\n    const {radius} = this.props;\n    const unitAngle = 360 / nodeCount;\n\n    // hierarchical positions\n    const rootNode = tree[0];\n\n    const nodeMap = tree.reduce((res, node) => {\n      res[node.id] = {\n        ...node,\n        isLeaf: !node.children || node.children.length === 0\n      };\n      return res;\n    }, {});\n    // nested structure\n    this.nestedTree = traverseTree(rootNode.id, nodeMap);\n\n    const totalLevels = getTreeDepth(this.nestedTree, 0);\n    const distanceBetweenLevels = radius / (totalLevels - 1);\n\n    const calculatePosition = (node, level, startAngle, positionMap) => {\n      const isRoot = node.id === rootNode.id;\n\n      if (node.children && node.children.length !== 0) {\n        const groupSize = getLeafNodeCount(node, 0);\n        // center the pos\n        positionMap[node.id] = isRoot\n          ? [0, 0]\n          : rotate(\n              0,\n              0,\n              0,\n              distanceBetweenLevels * (level + 1),\n              startAngle + unitAngle * (groupSize / 2)\n            );\n        // calculate children position\n        let tempAngle = startAngle;\n        node.children.forEach(n => {\n          calculatePosition(n, level + 1, tempAngle, positionMap);\n          tempAngle += getLeafNodeCount(n, 0) * unitAngle;\n        });\n      } else {\n        positionMap[node.id] = rotate(\n          0,\n          0,\n          0,\n          distanceBetweenLevels * (level + 1),\n          startAngle + unitAngle\n        );\n      }\n    };\n\n    this._hierarchicalPoints = {};\n    calculatePosition(this.nestedTree, 0, 0, this._hierarchicalPoints);\n    // layout completes: notifiy component to re-render\n    this._onLayoutChange();\n    this._onLayoutDone();\n  }\n\n  stop(): void {}\n\n  resume() {}\n\n  update() {}\n\n  getNodePosition = (node: NodeInterface) => {\n    return this._hierarchicalPoints[node.getId()];\n  };\n\n  // spline curve version\n  getEdgePosition = (edge: EdgeInterface) => {\n    const sourceNodeId = edge.getSourceNodeId();\n    const targetNodeId = edge.getTargetNodeId();\n    const sourceNodePos = this._hierarchicalPoints[sourceNodeId];\n    const targetNodePos = this._hierarchicalPoints[targetNodeId];\n\n    const sourcePath = [];\n    getPath(this.nestedTree, sourceNodeId, sourcePath);\n    const targetPath = [];\n    getPath(this.nestedTree, targetNodeId, targetPath);\n\n    const totalLevels = sourcePath.length;\n    let commonAncestorLevel = totalLevels - 1; // root\n    for (let i = 0; i < totalLevels; i++) {\n      if (sourcePath[i] === targetPath[i]) {\n        commonAncestorLevel = i;\n        break;\n      }\n    }\n\n    const wayPoints = [];\n    for (let i = 1; i <= commonAncestorLevel; i++) {\n      const nodeId = sourcePath[i];\n      wayPoints.push(this._hierarchicalPoints[nodeId]);\n    }\n    for (let i = commonAncestorLevel - 1; i > 0; i--) {\n      const nodeId = targetPath[i];\n      wayPoints.push(this._hierarchicalPoints[nodeId]);\n    }\n\n    return {\n      type: 'spline-curve',\n      sourcePosition: sourceNodePos,\n      targetPosition: targetNodePos,\n      controlPoints: wayPoints\n    };\n  };\n\n  lockNodePosition = (node: NodeInterface, x: number, y: number) => {\n    this._hierarchicalPoints[node.getId()] = [x, y];\n    this._onLayoutChange();\n    this._onLayoutDone();\n  };\n\n  protected override _updateBounds(): void {\n    const positions = Object.values(this._hierarchicalPoints ?? {}).map(position =>\n      this._normalizePosition(position)\n    );\n    this._bounds = this._calculateBounds(positions);\n  }\n}\n\nfunction rotate(cx, cy, x, y, angle) {\n  const radians = (Math.PI / 180) * angle;\n  const cos = Math.cos(radians);\n  const sin = Math.sin(radians);\n  const nx = cos * (x - cx) + sin * (y - cy) + cx;\n  const ny = cos * (y - cy) - sin * (x - cx) + cy;\n  return [nx, ny];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';\nimport type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';\nimport * as d3 from 'd3-force';\n\nexport type ForceMultiGraphLayoutProps = GraphLayoutProps & {\n  alpha?: number;\n  nBodyStrength?: number;\n  nBodyDistanceMin?: number;\n  nBodyDistanceMax?: number;\n};\n\nexport class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutProps> {\n  static defaultProps = {\n    ...GraphLayout.defaultProps,\n    alpha: 3,\n    nBodyStrength: -1200,\n    nBodyDistanceMin: 100,\n    nBodyDistanceMax: 1400\n  } as const satisfies Readonly<Required<ForceMultiGraphLayoutProps>>;\n\n  _name = 'ForceMultiGraphLayout';\n  _graph: Graph | null = null;\n\n  // d3 part\n  // custom graph data\n  _d3Graph: {nodes: any[]; edges: any[]} = {nodes: [], edges: []};\n  _nodeMap = new Map<string | number, any>();\n  _edgeMap = new Map<string | number, any>();\n  _simulator: d3.Simulation<any, undefined> | null = null;\n\n  constructor(props: ForceMultiGraphLayoutProps = {}) {\n    super(props, ForceMultiGraphLayout.defaultProps);\n  }\n\n  initializeGraph(graph: Graph): void {\n    this.updateGraph(graph);\n  }\n\n  _strength = d3Edge => {\n    if (d3Edge.isVirtual) {\n      return 1 / d3Edge.edgeCount;\n    }\n    const sourceNode = this._graph?.findNode(d3Edge.source.id);\n    const targetNode = this._graph?.findNode(d3Edge.target.id);\n    const sourceDegree = sourceNode?.getDegree() ?? 0;\n    const targetDegree = targetNode?.getDegree() ?? 0;\n    return 1 / Math.min(sourceDegree, targetDegree);\n  };\n\n  _generateSimulator() {\n    if (this._simulator) {\n      this._simulator.on('tick', null).on('end', null);\n      this._simulator = null;\n    }\n    const {alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax} = this.props;\n\n    const g = this._d3Graph;\n    this._simulator = d3\n      .forceSimulation(g.nodes)\n      .force(\n        'edge',\n        d3\n          .forceLink(g.edges)\n          // @ts-ignore TODO id not defined?\n          .id(n => n.id)\n          .strength(this._strength)\n      )\n      .force(\n        'charge',\n        d3\n          .forceManyBody()\n          .strength(nBodyStrength)\n          .distanceMin(nBodyDistanceMin)\n          .distanceMax(nBodyDistanceMax)\n      )\n      .force('center', d3.forceCenter())\n      .alpha(alpha);\n    // register event callbacks\n    this._simulator.on('tick', this._onLayoutChange).on('end', this._onLayoutDone);\n  }\n\n  start() {\n    this._generateSimulator();\n    this._simulator.restart();\n  }\n\n  resume() {\n    this._simulator.restart();\n  }\n\n  stop() {\n    this._simulator.stop();\n  }\n\n  update(): void {}\n\n  updateGraph(graph: Graph) {\n    this._graph = graph;\n\n    // nodes\n    const newNodeMap = new Map<string | number, any>();\n    const nodes = Array.from(graph.getNodes());\n    const newD3Nodes = nodes.map(node => {\n      const id = node.getId();\n      const oldD3Node = this._nodeMap.get(id);\n      const newD3Node = oldD3Node ? oldD3Node : {id};\n      newNodeMap.set(id, newD3Node);\n      return newD3Node;\n    });\n\n    // edges\n    // bucket edges between the same source/target node pairs.\n    const edges = Array.from(graph.getEdges());\n    const nodePairs = edges.reduce((res, edge) => {\n      const endpoints = [edge.getSourceNodeId(), edge.getTargetNodeId()];\n      // sort the node ids to count the edges with the same pair\n      // but different direction (a -> b or b -> a)\n      const pairId = endpoints.sort().toString();\n      // push this edge into the bucket\n      if (!res[pairId]) {\n        res[pairId] = [edge];\n      } else {\n        res[pairId].push(edge);\n      }\n      return res;\n    }, {});\n\n    // go through each pair of edges,\n    // if only one edge between two nodes, create a straight line\n    // otherwise, create one virtual node and two edges for each edge\n    const newD3Edges: any[] = [];\n    const newEdgeMap = new Map<string | number, any>();\n\n    Object.keys(nodePairs).forEach(pairId => {\n      const betweenEdges = nodePairs[pairId];\n      const firstEdge = betweenEdges[0];\n      if (betweenEdges.length === 1) {\n        // do nothing, this is a real edge\n        const newD3Edge = {\n          type: 'line',\n          id: firstEdge.getId(),\n          source: newNodeMap.get(firstEdge.getSourceNodeId()),\n          target: newNodeMap.get(firstEdge.getTargetNodeId()),\n          isVirtual: false\n        };\n        newEdgeMap.set(firstEdge.getId(), newD3Edge);\n        newD3Edges.push(newD3Edge);\n        return;\n      }\n\n      // else reduce to one virtual edge\n      const newD3Edge = {\n        type: 'line',\n        id: pairId,\n        source: newNodeMap.get(firstEdge.getSourceNodeId()),\n        target: newNodeMap.get(firstEdge.getTargetNodeId()),\n        isVirtual: true,\n        edgeCount: betweenEdges.length\n      };\n      newEdgeMap.set(pairId, newD3Edge);\n      newD3Edges.push(newD3Edge);\n\n      betweenEdges.forEach((e, idx) => {\n        const edgeId = e.getId();\n        newEdgeMap.set(edgeId, {\n          type: 'spline-curve',\n          id: edgeId,\n          source: newNodeMap.get(e.getSourceNodeId()),\n          target: newNodeMap.get(e.getTargetNodeId()),\n          virtualEdgeId: pairId,\n          isVirtual: true,\n          index: idx\n        });\n      });\n    });\n\n    this._nodeMap = newNodeMap;\n    this._d3Graph.nodes = newD3Nodes;\n    this._edgeMap = newEdgeMap;\n    this._d3Graph.edges = newD3Edges;\n  }\n\n  getNodePosition = (node: NodeInterface): [number, number] => {\n    const d3Node = this._nodeMap.get(node.getId());\n    if (d3Node) {\n      return [d3Node.x, d3Node.y];\n    }\n    // default value\n    return [0, 0];\n  };\n\n  getEdgePosition = (edge: EdgeInterface) => {\n    const d3Edge = this._edgeMap.get(edge.getId());\n    if (d3Edge) {\n      if (!d3Edge.isVirtual) {\n        return {\n          type: 'line',\n          sourcePosition: [d3Edge.source.x, d3Edge.source.y],\n          targetPosition: [d3Edge.target.x, d3Edge.target.y],\n          controlPoints: []\n        };\n      }\n      // else, check the referenced virtual edge\n      const virtualEdge = this._edgeMap.get(d3Edge.virtualEdgeId);\n      if (!virtualEdge) {\n        return null;\n      }\n      const edgeCount = virtualEdge.edgeCount;\n      // get the position of source and target nodes\n      const sourcePosition = [virtualEdge.source.x, virtualEdge.source.y];\n      const targetPosition = [virtualEdge.target.x, virtualEdge.target.y];\n      // calculate a symmetric curve\n      const distance = Math.hypot(\n        sourcePosition[0] - targetPosition[0],\n        sourcePosition[1] - targetPosition[1]\n      );\n      const index = d3Edge.index;\n      // curve direction: inward vs. outward\n      const direction = index % 2 ? 1 : -1;\n      // if the number of the parallel edges is an even number => symmetric shape\n      // otherwise, the 0th node will be a staight line, and rest of them are symmetrical.\n      const symmetricShape = edgeCount % 2 === 0;\n      const offset =\n        Math.max(distance / 10, 5) *\n        (symmetricShape ? Math.floor(index / 2 + 1) : Math.ceil(index / 2));\n      const controlPoint = computeControlPoint(sourcePosition, targetPosition, direction, offset);\n      return {\n        type: 'spline-curve',\n        sourcePosition,\n        targetPosition,\n        controlPoints: [controlPoint]\n      };\n    }\n    // default value\n    return {\n      type: 'line',\n      sourcePosition: [0, 0],\n      targetPosition: [0, 0],\n      controlPoints: []\n    };\n  };\n\n  lockNodePosition = (node: NodeInterface, x: number, y: number) => {\n    const d3Node = this._nodeMap.get(node.getId());\n    if (!d3Node) {\n      return;\n    }\n    d3Node.x = x;\n    d3Node.y = y;\n    this._onLayoutChange();\n    this._onLayoutDone();\n  };\n\n  protected override _updateBounds(): void {\n    const positions = Array.from(this._nodeMap.values(), node => this._normalizePosition(node));\n    this._bounds = this._calculateBounds(positions);\n  }\n}\n\n/**\n * A helper function to compute the control point of a curve\n * @param  {number[]} source  - the coordinates of source point, ex: [x, y, z]\n * @param  {number[]} target  - the coordinates of target point, ex: [x, y, z]\n * @param  {number} direction - the direction of the curve, 1 or -1\n * @param  {number} offset    - offset from the midpoint\n * @return {number[]}         - the coordinates of the control point\n */\nfunction computeControlPoint(source, target, direction, offset) {\n  const midPoint = [(source[0] + target[0]) / 2, (source[1] + target[1]) / 2];\n  const dx = target[0] - source[0];\n  const dy = target[1] - source[1];\n  const normal = [dy, -dx];\n  const length = Math.sqrt(Math.pow(normal[0], 2.0) + Math.pow(normal[1], 2.0));\n  const normalized = [normal[0] / length, normal[1] / length];\n  return [\n    midPoint[0] + normalized[0] * offset * direction,\n    midPoint[1] + normalized[1] * offset * direction\n  ];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';\nimport type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';\n\nexport type HivePlotLayoutProps = GraphLayoutProps & {\n  innerRadius?: number;\n  outerRadius?: number;\n  getNodeAxis?: (node: NodeInterface) => any;\n};\n\nexport class HivePlotLayout extends GraphLayout<HivePlotLayoutProps> {\n  static defaultProps = {\n    ...GraphLayout.defaultProps,\n    innerRadius: 100,\n    outerRadius: 500,\n    getNodeAxis: (node: NodeInterface) => node.getPropertyValue('group')\n  } as const satisfies Readonly<Required<HivePlotLayoutProps>>;\n\n  _name = 'HivePlot';\n  _graph: Graph | null = null;\n  _totalAxis: number = 0;\n  _axis: Record<string, NodeInterface[]> = {};\n  _nodeMap = new Map<string | number, NodeInterface>();\n  _nodePositionMap = new Map<string | number, [number, number]>();\n\n  constructor(props: HivePlotLayoutProps = {}) {\n    super(props, HivePlotLayout.defaultProps);\n  }\n\n  initializeGraph(graph: Graph) {\n    this.updateGraph(graph);\n  }\n\n  updateGraph(graph: Graph) {\n    const {getNodeAxis, innerRadius, outerRadius} = this.props;\n    this._graph = graph;\n    const nodes = Array.from(graph.getNodes());\n    this._nodeMap = new Map(nodes.map(node => [node.getId(), node]));\n\n    // bucket nodes into few axis\n\n    this._axis = nodes.reduce((res, node) => {\n      const axis = getNodeAxis(node);\n      if (!res[axis]) {\n        res[axis] = [];\n      }\n      res[axis].push(node);\n      return res;\n    }, {});\n\n    // sort nodes along the same axis by degree\n    this._axis = Object.keys(this._axis).reduce((res, axis) => {\n      const bucketedNodes = this._axis[axis];\n      const sortedNodes = bucketedNodes.sort((a, b) => {\n        if (a.getDegree() > b.getDegree()) {\n          return 1;\n        }\n        if (a.getDegree() === b.getDegree()) {\n          return 0;\n        }\n        return -1;\n      });\n      res[axis] = sortedNodes;\n      return res;\n    }, {});\n    this._totalAxis = Object.keys(this._axis).length;\n    const center = [0, 0];\n    const angleInterval = 360 / Object.keys(this._axis).length;\n\n    // calculate positions\n    this._nodePositionMap = new Map();\n    Object.keys(this._axis).forEach((axis, axisIdx) => {\n      const axisAngle = angleInterval * axisIdx;\n      const bucketedNodes = this._axis[axis];\n      const interval = (outerRadius - innerRadius) / bucketedNodes.length;\n\n      bucketedNodes.forEach((node, idx) => {\n        const radius = innerRadius + idx * interval;\n        const x = Math.cos((axisAngle / 180) * Math.PI) * radius + center[0];\n        const y = Math.sin((axisAngle / 180) * Math.PI) * radius + center[1];\n        this._nodePositionMap.set(node.getId(), [x, y]);\n      });\n    });\n  }\n\n  start() {\n    this._onLayoutStart();\n    this._onLayoutChange();\n    this._onLayoutDone();\n  }\n\n  stop() {}\n\n  update() {}\n\n  resume() {}\n\n  getNodePosition = (node: NodeInterface) => this._nodePositionMap.get(node.getId());\n\n  getEdgePosition = (edge: EdgeInterface) => {\n    const {getNodeAxis} = this.props;\n    const sourceNodeId = edge.getSourceNodeId();\n    const targetNodeId = edge.getTargetNodeId();\n\n    const sourcePosition = this._nodePositionMap.get(sourceNodeId);\n    const targetPosition = this._nodePositionMap.get(targetNodeId);\n\n    if (!sourcePosition || !targetPosition) {\n      return null;\n    }\n\n    const sourceNode = this._nodeMap.get(sourceNodeId);\n    const targetNode = this._nodeMap.get(targetNodeId);\n\n    const sourceNodeAxis = sourceNode ? getNodeAxis(sourceNode) : null;\n    const targetNodeAxis = targetNode ? getNodeAxis(targetNode) : null;\n\n    if (sourceNodeAxis !== null && sourceNodeAxis === targetNodeAxis) {\n      return {\n        type: 'line',\n        sourcePosition,\n        targetPosition,\n        controlPoints: []\n      };\n    }\n\n    const controlPoint = computeControlPoint({\n      sourcePosition,\n      sourceNodeAxis: sourceNodeAxis ?? 0,\n      targetPosition,\n      targetNodeAxis: targetNodeAxis ?? 0,\n      totalAxis: this._totalAxis\n    });\n\n    return {\n      type: 'spline-curve',\n      sourcePosition,\n      targetPosition,\n      controlPoints: [controlPoint]\n    };\n  };\n\n  lockNodePosition = (node: NodeInterface, x: number, y: number) => {\n    this._nodePositionMap.set(node.getId(), [x, y]);\n    this._onLayoutChange();\n    this._onLayoutDone();\n  };\n\n  protected override _updateBounds(): void {\n    const positions = Array.from(this._nodePositionMap.values(), position =>\n      this._normalizePosition(position)\n    );\n    this._bounds = this._calculateBounds(positions);\n  }\n}\n\nfunction computeControlPoint({\n  sourcePosition,\n  sourceNodeAxis,\n  targetPosition,\n  targetNodeAxis,\n  totalAxis\n}): [number, number] {\n  const halfAxis = (totalAxis - 1) / 2;\n  // check whether the source/target are at the same side.\n  const sameSide =\n    (sourceNodeAxis <= halfAxis && targetNodeAxis <= halfAxis) ||\n    (sourceNodeAxis > halfAxis && targetNodeAxis > halfAxis);\n  // curve direction\n  const direction = sameSide && sourceNodeAxis <= halfAxis && targetNodeAxis <= halfAxis ? 1 : -1;\n\n  // flip the source/target to follow the clockwise diretion\n  const source = sourceNodeAxis < targetNodeAxis && sameSide ? sourcePosition : targetPosition;\n  const target = sourceNodeAxis < targetNodeAxis && sameSide ? targetPosition : sourcePosition;\n\n  // calculate offset\n  const distance = Math.hypot(source[0] - target[0], source[1] - target[1]);\n  const offset = distance * 0.2;\n\n  const midPoint = [(source[0] + target[0]) / 2, (source[1] + target[1]) / 2];\n  const dx = target[0] - source[0];\n  const dy = target[1] - source[1];\n  const normal = [dy, -dx];\n  const length = Math.hypot(dy, -dx);\n  const normalized = [normal[0] / length, normal[1] / length];\n  return [\n    midPoint[0] + normalized[0] * offset * direction,\n    midPoint[1] + normalized[1] * offset * direction\n  ];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-continue */\n\nimport type {CompositeLayerProps} from '@deck.gl/core';\nimport {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';\nimport {PolygonLayer} from '@deck.gl/layers';\n\nimport type {Graph, NodeInterface} from '../graph/graph';\nimport {ClassicGraph} from '../graph/classic-graph';\nimport {GraphLayout, type GraphLayoutEventDetail} from '../core/graph-layout';\nimport {GraphEngine} from '../core/graph-engine';\n\nimport {\n  GraphStylesheetEngine,\n  type GraphStylesheet,\n  type GraphStyleRule\n} from '../style/graph-style-engine';\n\nimport {\n  DEFAULT_GRAPH_LAYER_STYLESHEET_INPUT,\n  normalizeGraphLayerStylesheet,\n  type GraphLayerEdgeStyle,\n  type GraphLayerNodeStyle,\n  type NormalizedGraphLayerStylesheet\n} from '../style/graph-layer-stylesheet';\n\n// node layers\nimport {CircleLayer} from './node-layers/circle-layer';\nimport {ImageLayer} from './node-layers/image-layer';\nimport {LabelLayer} from './node-layers/label-layer';\nimport {RectangleLayer} from './node-layers/rectangle-layer';\nimport {RoundedRectangleLayer} from './node-layers/rounded-rectangle-layer';\nimport {PathBasedRoundedRectangleLayer} from './node-layers/path-rounded-rectangle-layer';\nimport {ZoomableMarkerLayer} from './node-layers/zoomable-marker-layer';\n\n// edge layers\nimport {EdgeLayer} from './edge-layer';\nimport {EdgeLabelLayer} from './edge-layers/edge-label-layer';\nimport {FlowLayer} from './edge-layers/flow-layer';\nimport {EdgeArrowLayer} from './edge-layers/edge-arrow-layer';\nimport {EdgeAttachmentHelper} from './edge-attachment-helper';\nimport {GridLayer, type GridLayerProps} from './common-layers/grid-layer/grid-layer';\n\nimport {mixedGetPosition} from '../utils/layer-utils';\nimport {InteractionManager} from '../core/interaction-manager';\nimport {buildCollapsedChainLayers} from '../utils/collapsed-chains';\nimport {\n  mapRanksToYPositions,\n  selectRankLines,\n  type LabelAccessor,\n  type RankAccessor\n} from '../utils/rank-grid';\nimport {createGraphFromData} from '../graph/functions/create-graph-from-data';\n\nimport {warn} from '../utils/log';\n\nconst NODE_LAYER_MAP = {\n  rectangle: RectangleLayer,\n  'rounded-rectangle': RoundedRectangleLayer,\n  'path-rounded-rectangle': PathBasedRoundedRectangleLayer,\n  icon: ImageLayer,\n  circle: CircleLayer,\n  label: LabelLayer,\n  marker: ZoomableMarkerLayer\n};\n\nconst EDGE_DECORATOR_LAYER_MAP = {\n  'edge-label': EdgeLabelLayer,\n  flow: FlowLayer,\n  arrow: EdgeArrowLayer\n};\n\ntype GridLayerOverrides = Partial<Omit<GridLayerProps, 'id' | 'data' | 'direction'>>;\n\nexport type RankGridConfig = {\n  enabled?: boolean;\n  direction?: 'horizontal' | 'vertical';\n  maxLines?: number;\n  rankAccessor?: RankAccessor;\n  labelAccessor?: LabelAccessor;\n  gridProps?: GridLayerOverrides;\n};\n\nconst SHARED_LAYER_PROPS = {\n  coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n  parameters: {\n    depthTest: false\n  }\n};\n\nconst NODE_STYLE_DEPRECATION_MESSAGE =\n  'GraphLayer: `nodeStyle` has been replaced by `stylesheet.nodes` and will be removed in a future release.';\nconst EDGE_STYLE_DEPRECATION_MESSAGE =\n  'GraphLayer: `edgeStyle` has been replaced by `stylesheet.edges` and will be removed in a future release.';\n\nconst GRAPH_PROP_DEPRECATION_MESSAGE =\n  'GraphLayer: `graph` prop is deprecated. Pass graphs via the `data` prop instead.';\nconst LAYOUT_REQUIRED_MESSAGE =\n  'GraphLayer: `layout` must be provided when supplying raw graph data.';\n\nlet NODE_STYLE_DEPRECATION_WARNED = false;\nlet EDGE_STYLE_DEPRECATION_WARNED = false;\nlet GRAPH_PROP_DEPRECATION_WARNED = false;\nlet LAYOUT_REQUIRED_WARNED = false;\nconst DEFAULT_GRAPH_LOADER = ({json}: {json: unknown}) => {\n  if (!json || typeof json !== 'object') {\n    return null;\n  }\n\n  return createGraphFromData(json as any);\n};\n\nexport type GraphLayerRawData = {\n  name?: string;\n  nodes?: unknown[] | null;\n  edges?: unknown[] | null;\n};\n\nexport type GraphLayerDataInput =\n  | GraphEngine\n  | Graph\n  | GraphLayerRawData\n  | unknown[]\n  | string\n  | null;\n\nexport type GraphLayerProps = CompositeLayerProps &\n  _GraphLayerProps & {\n    data?: GraphLayerDataInput | Promise<GraphLayerDataInput>;\n  };\n\ntype EngineResolutionFlags = {\n  force: boolean;\n  dataChanged: boolean;\n  layoutChanged: boolean;\n  graphChanged: boolean;\n  engineChanged: boolean;\n  loaderChanged: boolean;\n};\n\nexport type _GraphLayerProps = {\n  graph?: Graph;\n  layout?: GraphLayout;\n  graphLoader?: (opts: {json: unknown}) => Graph | null;\n  engine?: GraphEngine;\n\n  onLayoutStart?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutChange?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutDone?: (detail?: GraphLayoutEventDetail) => void;\n  onLayoutError?: (error?: unknown) => void;\n\n  stylesheet?: GraphStylesheet;\n  /** @deprecated Use `stylesheet.nodes`. */\n  nodeStyle?: GraphLayerNodeStyle[];\n  /** @deprecated Use `stylesheet.edges`. */\n  edgeStyle?: GraphLayerEdgeStyle | GraphLayerEdgeStyle[];\n  nodeEvents?: {\n    onMouseLeave?: () => void;\n    onHover?: () => void;\n    onMouseEnter?: () => void;\n    onClick?: () => void;\n    onDrag?: () => void;\n  };\n  edgeEvents?: {\n    onClick: () => void;\n    onHover: () => void;\n  };\n  enableDragging?: boolean;\n  rankGrid?: boolean | RankGridConfig;\n  resumeLayoutAfterDragging?: boolean;\n};\n\n/** Composite layer that renders graph nodes, edges, and decorators. */\nexport class GraphLayer extends CompositeLayer<GraphLayerProps> {\n  static layerName = 'GraphLayer';\n\n  static defaultProps: _GraphLayerProps &\n    Pick<CompositeLayerProps, 'pickable'> & {\n      data: {type: string; value: null; async: true};\n    } = {\n    // Composite layer props\n    pickable: true,\n    data: {type: 'object', value: null, async: true},\n\n    // Graph props\n    graphLoader: DEFAULT_GRAPH_LOADER,\n\n    stylesheet: DEFAULT_GRAPH_LAYER_STYLESHEET_INPUT,\n    nodeStyle: undefined as unknown as GraphLayerNodeStyle[],\n    nodeEvents: {\n      onMouseLeave: () => {},\n      onHover: () => {},\n      onMouseEnter: () => {},\n      onClick: () => {},\n      onDrag: () => {}\n    },\n    edgeStyle: undefined as unknown as GraphLayerEdgeStyle | GraphLayerEdgeStyle[],\n    edgeEvents: {\n      onClick: () => {},\n      onHover: () => {}\n    },\n    enableDragging: false,\n    rankGrid: false,\n    resumeLayoutAfterDragging: true\n  };\n\n  // @ts-expect-error Some typescript confusion due to override of base class state\n  state!: CompositeLayer<GraphLayerProps>['state'] & {\n    interactionManager: InteractionManager;\n    graphEngine?: GraphEngine | null;\n    layoutVersion: number;\n    layoutState?: string;\n    interactionVersion: number;\n  };\n\n  private readonly _edgeAttachmentHelper = new EdgeAttachmentHelper();\n  private _suppressNextDeckDataChange = false;\n\n  forceUpdate = () => {\n    if (!this.state) {\n      return;\n    }\n\n    this.setNeedsRedraw();\n    this.setState({interactionVersion: this.state.interactionVersion + 1});\n  };\n\n  constructor(props: GraphLayerProps & CompositeLayerProps) {\n    super(props);\n  }\n\n  initializeState() {\n    const interactionManager = new InteractionManager(\n      {\n        nodeEvents: this.props.nodeEvents,\n        edgeEvents: this.props.edgeEvents,\n        engine: undefined as any,\n        enableDragging: Boolean(this.props.enableDragging),\n        resumeLayoutAfterDragging: Boolean(\n          this.props.resumeLayoutAfterDragging ?? GraphLayer.defaultProps.resumeLayoutAfterDragging\n        )\n      },\n      () => this.forceUpdate()\n    );\n\n    this.state = {\n      interactionManager,\n      graphEngine: null,\n      layoutVersion: 0,\n      layoutState: undefined,\n      interactionVersion: 0\n    } as typeof this.state;\n\n    this._syncInteractionManager(this.props, null);\n    this._refreshEngineFromProps(this.props, {force: true});\n  }\n\n  shouldUpdateState({changeFlags}) {\n    return changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.stateChanged;\n  }\n\n  updateState({props, oldProps, changeFlags}) {\n    const propsDataChanged = props.data !== oldProps.data;\n    const deckDataChanged =\n      changeFlags.dataChanged && !(this._suppressNextDeckDataChange && !propsDataChanged);\n    const dataChanged = deckDataChanged || propsDataChanged;\n    const layoutChanged = props.layout !== oldProps.layout;\n    const graphChanged = props.graph !== oldProps.graph;\n    const engineChanged = props.engine !== oldProps.engine;\n    const loaderChanged = props.graphLoader !== oldProps.graphLoader;\n\n    const engineRefreshed = this._refreshEngineFromProps(props, {\n      dataChanged,\n      layoutChanged,\n      graphChanged,\n      engineChanged,\n      loaderChanged\n    });\n\n    if (!engineRefreshed && changeFlags.propsChanged) {\n      const engine = this.state.graphEngine;\n      if (engine) {\n        this._applyGraphEngineCallbacks(engine);\n      }\n    }\n\n    if (!engineRefreshed && (changeFlags.propsChanged || changeFlags.stateChanged)) {\n      this._syncInteractionManager(props, this.state.graphEngine ?? null);\n    }\n\n    this._suppressNextDeckDataChange = false;\n  }\n\n  finalize() {\n    this._removeGraphEngine();\n    this._syncInteractionManager(this.props, null);\n  }\n\n  private _getResolvedStylesheet(): NormalizedGraphLayerStylesheet {\n    const {stylesheet, nodeStyle, edgeStyle} = this.props;\n\n    const usingNodeStyle = typeof nodeStyle !== 'undefined';\n    if (usingNodeStyle && !NODE_STYLE_DEPRECATION_WARNED) {\n      warn(NODE_STYLE_DEPRECATION_MESSAGE);\n      NODE_STYLE_DEPRECATION_WARNED = true;\n    }\n\n    const usingEdgeStyle = typeof edgeStyle !== 'undefined';\n    if (usingEdgeStyle && !EDGE_STYLE_DEPRECATION_WARNED) {\n      warn(EDGE_STYLE_DEPRECATION_MESSAGE);\n      EDGE_STYLE_DEPRECATION_WARNED = true;\n    }\n\n    return normalizeGraphLayerStylesheet({\n      stylesheet,\n      nodeStyle: usingNodeStyle ? nodeStyle : undefined,\n      edgeStyle: usingEdgeStyle ? edgeStyle : undefined\n    });\n  }\n\n  private _createStylesheetEngine(\n    style: GraphStyleRule,\n    context: string\n  ): GraphStylesheetEngine | null {\n    try {\n      return new GraphStylesheetEngine(style, {\n        stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()\n      });\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      warn(`GraphLayer: Failed to apply ${context}: ${message}`);\n      return null;\n    }\n  }\n\n  private _refreshEngineFromProps(\n    props: GraphLayerProps,\n    {\n      force = false,\n      dataChanged = false,\n      layoutChanged = false,\n      graphChanged = false,\n      engineChanged = false,\n      loaderChanged = false\n    }: {\n      force?: boolean;\n      dataChanged?: boolean;\n      layoutChanged?: boolean;\n      graphChanged?: boolean;\n      engineChanged?: boolean;\n      loaderChanged?: boolean;\n    }\n  ): boolean {\n    const {engine: nextEngine, shouldReplace} = this._resolveEngineCandidate(props, {\n      force,\n      dataChanged,\n      layoutChanged,\n      graphChanged,\n      engineChanged,\n      loaderChanged\n    });\n\n    if (nextEngine === undefined) {\n      return false;\n    }\n\n    const currentEngine = this.state.graphEngine ?? null;\n    if (!shouldReplace && nextEngine === currentEngine) {\n      return false;\n    }\n\n    this._setGraphEngine(nextEngine);\n    this._syncInteractionManager(props, nextEngine);\n    return true;\n  }\n\n  private _resolveEngineCandidate(\n    props: GraphLayerProps,\n    flags: EngineResolutionFlags\n  ): {engine: GraphEngine | null | undefined; shouldReplace: boolean} {\n    const dataResult = this._getEngineFromData(props, flags);\n    if (dataResult) {\n      return dataResult;\n    }\n\n    const engineResult = this._getEngineFromEngineProp(props, flags);\n    if (engineResult) {\n      return engineResult;\n    }\n\n    const graphResult = this._getEngineFromGraphProp(props, flags);\n    if (graphResult) {\n      return graphResult;\n    }\n\n    if (props.data === null || props.graph === null || props.engine === null || flags.force) {\n      return {engine: null, shouldReplace: true};\n    }\n\n    return {engine: undefined, shouldReplace: flags.force};\n  }\n\n  private _getEngineFromData(\n    props: GraphLayerProps,\n    {force, dataChanged, layoutChanged, loaderChanged}: EngineResolutionFlags\n  ): {engine: GraphEngine | null | undefined; shouldReplace: boolean} | null {\n    const dataValue = props.data as GraphLayerDataInput | null | undefined;\n    if (dataValue === null || typeof dataValue === 'undefined') {\n      return null;\n    }\n\n    const shouldRebuild = force || dataChanged || layoutChanged || loaderChanged;\n    if (!shouldRebuild) {\n      return {engine: undefined, shouldReplace: false};\n    }\n\n    const engine = this._deriveEngineFromData(dataValue, props);\n    if (typeof engine === 'undefined') {\n      return {engine: undefined, shouldReplace: false};\n    }\n\n    return {\n      engine,\n      shouldReplace: true\n    };\n  }\n\n  private _getEngineFromEngineProp(\n    props: GraphLayerProps,\n    {force, engineChanged}: EngineResolutionFlags\n  ): {engine: GraphEngine | null | undefined; shouldReplace: boolean} | null {\n    if (typeof props.engine === 'undefined') {\n      return null;\n    }\n\n    if (props.engine === null) {\n      return {engine: null, shouldReplace: true};\n    }\n\n    return {\n      engine: props.engine,\n      shouldReplace: force || engineChanged\n    };\n  }\n\n  private _getEngineFromGraphProp(\n    props: GraphLayerProps,\n    {force, graphChanged, layoutChanged}: EngineResolutionFlags\n  ): {engine: GraphEngine | null | undefined; shouldReplace: boolean} | null {\n    if (typeof props.graph === 'undefined') {\n      return null;\n    }\n\n    if (props.graph === null) {\n      return {engine: null, shouldReplace: true};\n    }\n\n    this._warnGraphProp();\n    return {\n      engine: this._buildEngineFromGraph(props.graph, props.layout),\n      shouldReplace: force || graphChanged || layoutChanged\n    };\n  }\n\n  private _deriveEngineFromData(\n    data: GraphLayerDataInput,\n    props: GraphLayerProps\n  ): GraphEngine | null | undefined {\n    if (data === null || typeof data === 'undefined') {\n      return null;\n    }\n\n    if (typeof (data as PromiseLike<GraphLayerDataInput>)?.then === 'function') {\n      return undefined;\n    }\n\n    if (data instanceof GraphEngine) {\n      return data;\n    }\n\n    const graphCandidate = this._coerceGraph(data);\n    if (graphCandidate) {\n      return this._buildEngineFromGraph(graphCandidate, props.layout);\n    }\n\n    if (typeof data === 'string') {\n      return undefined;\n    }\n\n    if (Array.isArray(data) || isPlainObject(data)) {\n      const loader = props.graphLoader ?? DEFAULT_GRAPH_LOADER;\n      const graph = loader({json: data});\n      if (!graph) {\n        return null;\n      }\n      return this._buildEngineFromGraph(graph, props.layout);\n    }\n\n    return null;\n  }\n\n  private _buildEngineFromGraph(\n    graph: Graph | null,\n    layout?: GraphLayout | null\n  ): GraphEngine | null {\n    if (!graph) {\n      return null;\n    }\n\n    if (!layout) {\n      this._warnLayoutRequired();\n      return null;\n    }\n\n    if (graph instanceof ClassicGraph && layout instanceof GraphLayout) {\n      return new GraphEngine({graph, layout});\n    }\n\n    if (layout instanceof GraphLayout && !(graph instanceof ClassicGraph)) {\n      const legacyGraph = this._convertToClassicGraph(graph);\n      if (legacyGraph) {\n        return new GraphEngine({graph: legacyGraph, layout});\n      }\n      this._warnLayoutRequired();\n      return null;\n    }\n\n    if (layout) {\n      return new GraphEngine({graph, layout});\n    }\n\n    this._warnLayoutRequired();\n    return null;\n  }\n\n  private _syncInteractionManager(props: GraphLayerProps, engine: GraphEngine | null) {\n    const resumeLayoutAfterDragging =\n      props.resumeLayoutAfterDragging ?? GraphLayer.defaultProps.resumeLayoutAfterDragging;\n\n    this.state.interactionManager.updateProps({\n      nodeEvents: props.nodeEvents ?? GraphLayer.defaultProps.nodeEvents,\n      edgeEvents: props.edgeEvents ?? GraphLayer.defaultProps.edgeEvents,\n      engine: (engine ?? props.engine ?? null) as any,\n      enableDragging: Boolean(props.enableDragging),\n      resumeLayoutAfterDragging: Boolean(resumeLayoutAfterDragging)\n    });\n  }\n\n  private _warnGraphProp() {\n    if (!GRAPH_PROP_DEPRECATION_WARNED) {\n      warn(GRAPH_PROP_DEPRECATION_MESSAGE);\n      GRAPH_PROP_DEPRECATION_WARNED = true;\n    }\n  }\n\n  private _warnLayoutRequired() {\n    if (!LAYOUT_REQUIRED_WARNED) {\n      warn(LAYOUT_REQUIRED_MESSAGE);\n      LAYOUT_REQUIRED_WARNED = true;\n    }\n  }\n\n  private _isGraph(value: unknown): value is Graph {\n    if (!value || typeof value !== 'object') {\n      return false;\n    }\n\n    const candidate = value as Graph;\n    return typeof candidate.getNodes === 'function' && typeof candidate.getEdges === 'function';\n  }\n\n  private _coerceGraph(value: unknown): Graph | null {\n    if (value instanceof ClassicGraph) {\n      return value;\n    }\n\n    if (this._isGraph(value)) {\n      return value;\n    }\n\n    return null;\n  }\n\n  private _convertToClassicGraph(graph: Graph): ClassicGraph | null {\n    if (graph instanceof ClassicGraph) {\n      return graph;\n    }\n\n    const candidate = graph as Graph & {toClassicGraph?: () => ClassicGraph | null};\n    if (typeof candidate.toClassicGraph === 'function') {\n      try {\n        return candidate.toClassicGraph() ?? null;\n      } catch (error) {\n        warn(\n          'GraphLayer: failed to convert graph to ClassicGraph for layout compatibility.',\n          error\n        );\n      }\n    }\n\n    return null;\n  }\n\n  private _updateLayoutSnapshot(engine?: GraphEngine | null) {\n    const activeEngine = engine ?? this.state.graphEngine ?? null;\n\n    if (!activeEngine) {\n      if (this.state.layoutVersion !== 0 || typeof this.state.layoutState !== 'undefined') {\n        this._suppressNextDeckDataChange = true;\n        this.setState({layoutVersion: 0, layoutState: undefined});\n      }\n      this.setNeedsRedraw();\n      return;\n    }\n\n    const nextVersion = activeEngine.getLayoutLastUpdate();\n    const nextState = activeEngine.getLayoutState();\n\n    if (this.state.layoutVersion !== nextVersion || this.state.layoutState !== nextState) {\n      this._suppressNextDeckDataChange = true;\n      this.setState({layoutVersion: nextVersion, layoutState: nextState});\n    }\n\n    this.setNeedsRedraw();\n  }\n\n  private _handleLayoutEvent = () => {\n    this._updateLayoutSnapshot();\n  };\n\n  _setGraphEngine(graphEngine: GraphEngine | null) {\n    if (graphEngine === this.state.graphEngine) {\n      if (graphEngine) {\n        this._applyGraphEngineCallbacks(graphEngine);\n      }\n      this._updateLayoutSnapshot(graphEngine);\n      return;\n    }\n\n    this._removeGraphEngine();\n\n    if (graphEngine) {\n      this.state.graphEngine = graphEngine;\n      this._applyGraphEngineCallbacks(graphEngine);\n      graphEngine.run();\n      this._updateLayoutSnapshot(graphEngine);\n    } else {\n      this.state.graphEngine = null;\n      this._updateLayoutSnapshot(null);\n    }\n  }\n\n  _removeGraphEngine() {\n    const engine = this.state.graphEngine;\n    if (engine) {\n      engine.setProps({\n        onLayoutStart: undefined,\n        onLayoutChange: undefined,\n        onLayoutDone: undefined,\n        onLayoutError: undefined\n      });\n      engine.clear();\n      this.state.graphEngine = null;\n      this._updateLayoutSnapshot(null);\n    }\n  }\n\n  private _applyGraphEngineCallbacks(engine: GraphEngine) {\n    engine.setProps({\n      onLayoutStart: detail => {\n        this._handleLayoutEvent();\n        this.props.onLayoutStart?.(detail);\n      },\n      onLayoutChange: detail => {\n        this._handleLayoutEvent();\n        this.props.onLayoutChange?.(detail);\n      },\n      onLayoutDone: detail => {\n        this._handleLayoutEvent();\n        this.props.onLayoutDone?.(detail);\n      },\n      onLayoutError: error => {\n        this._handleLayoutEvent();\n        this.props.onLayoutError?.(error);\n      }\n    });\n  }\n\n  private _createRankGridLayer(): GridLayer | null {\n    const engine = this.state.graphEngine;\n    if (!engine) {\n      return null;\n    }\n\n    const {enabled, config} = this._normalizeRankGridConfig(this.props.rankGrid);\n    if (!enabled) {\n      return null;\n    }\n\n    const bounds = this._resolveRankGridBounds(engine);\n    if (!bounds) {\n      return null;\n    }\n\n    const data = this._buildRankGridData(engine, config, bounds);\n    if (!data) {\n      return null;\n    }\n\n    const direction = config?.direction ?? 'horizontal';\n    const gridProps = config?.gridProps ?? {};\n\n    return new GridLayer({\n      id: `${this.props.id}-rank-grid`,\n      data,\n      direction,\n      xMin: bounds.xMin,\n      xMax: bounds.xMax,\n      yMin: bounds.yMin,\n      yMax: bounds.yMax,\n      pickable: false,\n      ...gridProps\n    });\n  }\n\n  private _normalizeRankGridConfig(value: GraphLayerProps['rankGrid']): {\n    enabled: boolean;\n    config?: RankGridConfig;\n  } {\n    if (typeof value === 'boolean') {\n      return {enabled: value};\n    }\n\n    if (value && typeof value === 'object') {\n      return {enabled: value.enabled ?? true, config: value};\n    }\n\n    return {enabled: false};\n  }\n\n  private _resolveRankGridBounds(\n    engine: GraphEngine\n  ): {xMin: number; xMax: number; yMin: number; yMax: number} | null {\n    const bounds = engine.getLayoutBounds();\n    if (!bounds) {\n      return null;\n    }\n\n    const [[minXRaw, minYRaw], [maxXRaw, maxYRaw]] = bounds;\n    const values = [minXRaw, minYRaw, maxXRaw, maxYRaw];\n    if (!values.every(value => typeof value === 'number' && Number.isFinite(value))) {\n      return null;\n    }\n\n    return {\n      xMin: Math.min(minXRaw, maxXRaw),\n      xMax: Math.max(minXRaw, maxXRaw),\n      yMin: Math.min(minYRaw, maxYRaw),\n      yMax: Math.max(minYRaw, maxYRaw)\n    };\n  }\n\n  private _buildRankGridData(\n    engine: GraphEngine,\n    config: RankGridConfig | undefined,\n    bounds: {yMin: number; yMax: number}\n  ): Array<{\n    label: string;\n    rank: number;\n    originalLabel?: string | number;\n    yPosition: number;\n  }> | null {\n    const rankLabelPrefix = this._resolveRankFieldLabel(config?.rankAccessor);\n    // @ts-ignore iterator type\n    const rankPositions = mapRanksToYPositions(engine.getNodes(), engine.getNodePosition, {\n      rankAccessor: config?.rankAccessor,\n      labelAccessor: config?.labelAccessor,\n      yRange: {min: bounds.yMin, max: bounds.yMax}\n    });\n\n    if (rankPositions.length === 0) {\n      return null;\n    }\n\n    const selectedRanks = selectRankLines(rankPositions, {\n      yMin: bounds.yMin,\n      yMax: bounds.yMax,\n      maxCount: config?.maxLines ?? 8\n    });\n\n    if (selectedRanks.length === 0) {\n      return null;\n    }\n\n    return selectedRanks.map(({rank, label, yPosition}) => ({\n      label: `${rankLabelPrefix} ${rank}`,\n      rank,\n      originalLabel: label === undefined ? undefined : label,\n      yPosition\n    }));\n  }\n\n  private _resolveRankFieldLabel(rankAccessor: RankAccessor | undefined): string {\n    if (!rankAccessor) {\n      return 'srank';\n    }\n    if (typeof rankAccessor === 'string' && rankAccessor.length > 0) {\n      return rankAccessor;\n    }\n    if (typeof rankAccessor === 'function' && rankAccessor.name) {\n      return rankAccessor.name;\n    }\n    return 'rank';\n  }\n\n  createNodeLayers() {\n    const engine = this.state.graphEngine;\n    const {nodes: nodeStyles} = this._getResolvedStylesheet();\n\n    if (!engine || !Array.isArray(nodeStyles) || nodeStyles.length === 0) {\n      return [];\n    }\n\n    const baseLayers = nodeStyles\n      .filter(Boolean)\n      .map((style, idx) => {\n        const {pickable = true, visible = true, data = nodes => nodes, ...restStyle} = style;\n        const LayerType = NODE_LAYER_MAP[style.type];\n        if (!LayerType) {\n          warn(`GraphLayer: Invalid node type \"${style.type}\".`);\n          return null;\n        }\n        const stylesheet = this._createStylesheetEngine(\n          restStyle as unknown as GraphStyleRule,\n          `node stylesheet \"${style.type}\"`\n        );\n        if (!stylesheet) {\n          return null;\n        }\n        const getOffset = stylesheet.getDeckGLAccessor('getOffset');\n        return new LayerType({\n          ...SHARED_LAYER_PROPS,\n          id: `node-rule-${idx}`,\n          data: data(engine.getNodes()),\n          getPosition: mixedGetPosition(engine.getNodePosition, getOffset),\n          pickable,\n          positionUpdateTrigger: [\n            engine.getLayoutLastUpdate(),\n            engine.getLayoutState(),\n            stylesheet.getDeckGLAccessorUpdateTrigger('getOffset')\n          ].join(),\n          stylesheet,\n          visible\n        } as any);\n      })\n      .filter(Boolean) as any[];\n\n    const chainLayers = this._createChainOverlayLayers(engine);\n\n    return [...baseLayers, ...chainLayers];\n  }\n\n  createEdgeLayers() {\n    const engine = this.state.graphEngine;\n    const {edges: edgeStyles, nodes: nodeStyles} = this._getResolvedStylesheet();\n\n    if (!engine || !edgeStyles) {\n      return [];\n    }\n\n    const edgeStyleArray = Array.isArray(edgeStyles) ? edgeStyles : [edgeStyles];\n\n    if (edgeStyleArray.length === 0) {\n      return [];\n    }\n\n    const getLayoutInfo = this._edgeAttachmentHelper.getLayoutAccessor({\n      engine,\n      interactionManager: this.state.interactionManager,\n      nodeStyle: nodeStyles\n    });\n\n    return edgeStyleArray.filter(Boolean).flatMap((style, idx) => {\n      const {decorators, data = edges => edges, visible = true, ...restEdgeStyle} = style;\n      const stylesheet = this._createStylesheetEngine(\n        {\n          type: 'edge',\n          ...restEdgeStyle\n        } as GraphStyleRule,\n        'edge stylesheet'\n      );\n      if (!stylesheet) {\n        return [];\n      }\n\n      const edgeLayer = new EdgeLayer({\n        ...SHARED_LAYER_PROPS,\n        id: `edge-layer-${idx}`,\n        data: data(engine.getEdges()),\n        getLayoutInfo,\n        pickable: true,\n        positionUpdateTrigger: [engine.getLayoutLastUpdate(), engine.getLayoutState()].join(),\n        stylesheet,\n        visible\n      } as any);\n\n      if (!decorators || !Array.isArray(decorators) || decorators.length === 0) {\n        return [edgeLayer];\n      }\n\n      const decoratorLayers = decorators\n        .filter(Boolean)\n        // @ts-ignore eslint-disable-next-line @typescript-eslint/no-unused-vars\n        .map((decoratorStyle, idx2) => {\n          const DecoratorLayer = EDGE_DECORATOR_LAYER_MAP[decoratorStyle.type];\n          if (!DecoratorLayer) {\n            warn(`GraphLayer: Invalid edge decorator type \"${decoratorStyle.type}\".`);\n            return null;\n          }\n          const decoratorStylesheet = this._createStylesheetEngine(\n            decoratorStyle as unknown as GraphStyleRule,\n            `edge decorator stylesheet \"${decoratorStyle.type}\"`\n          );\n          if (!decoratorStylesheet) {\n            return null;\n          }\n          return new DecoratorLayer({\n            ...SHARED_LAYER_PROPS,\n            id: `edge-decorator-${idx2}`,\n            data: data(engine.getEdges()),\n            getLayoutInfo,\n            pickable: true,\n            positionUpdateTrigger: [engine.getLayoutLastUpdate(), engine.getLayoutState()].join(),\n            stylesheet: decoratorStylesheet\n          } as any);\n        })\n        .filter(Boolean);\n\n      return [edgeLayer, ...decoratorLayers];\n    });\n  }\n\n  onClick(info, event): boolean {\n    return (this.state.interactionManager.onClick(info, event) as unknown as boolean) || false;\n  }\n\n  onHover(info, event): boolean {\n    return (this.state.interactionManager.onHover(info, event) as unknown as boolean) || false;\n  }\n\n  onDragStart(info, event) {\n    this.state.interactionManager.onDragStart(info, event);\n  }\n\n  onDrag(info, event) {\n    this.state.interactionManager.onDrag(info, event);\n  }\n\n  onDragEnd(info, event) {\n    this.state.interactionManager.onDragEnd(info, event);\n  }\n\n  renderLayers() {\n    const layers: any[] = [];\n    const gridLayer = this._createRankGridLayer();\n    if (gridLayer) {\n      layers.push(gridLayer);\n    }\n\n    const edgeLayers = this.createEdgeLayers();\n    if (Array.isArray(edgeLayers) && edgeLayers.length > 0) {\n      layers.push(...edgeLayers);\n    }\n\n    const nodeLayers = this.createNodeLayers();\n    if (Array.isArray(nodeLayers) && nodeLayers.length > 0) {\n      layers.push(...nodeLayers);\n    }\n\n    return layers;\n  }\n\n  private _createChainOverlayLayers(engine: GraphEngine) {\n    const chainData = buildCollapsedChainLayers(engine);\n    if (!chainData) {\n      return [];\n    }\n\n    const {\n      collapsedNodes,\n      collapsedOutlineNodes,\n      expandedNodes,\n      expandedOutlineNodes,\n      getChainOutlinePolygon,\n      outlineUpdateTrigger\n    } = chainData;\n\n    const layers: any[] = [];\n\n    if (collapsedOutlineNodes.length > 0) {\n      layers.push(\n        new PolygonLayer({\n          ...SHARED_LAYER_PROPS,\n          id: 'collapsed-chain-outlines',\n          data: collapsedOutlineNodes,\n          getPolygon: (node: NodeInterface) => getChainOutlinePolygon(node),\n          stroked: true,\n          filled: false,\n          getLineColor: [220, 64, 64, 220],\n          getLineWidth: 2,\n          lineWidthUnits: 'pixels',\n          lineWidthMinPixels: 2,\n          pickable: true,\n          updateTriggers: {\n            getPolygon: [outlineUpdateTrigger]\n          }\n        })\n      );\n    }\n\n    const collapsedMarkerStylesheet = this._createStylesheetEngine(\n      {\n        type: 'marker',\n        fill: [64, 96, 192, 255],\n        size: 32,\n        marker: 'circle-plus-filled',\n        offset: [24, -24],\n        scaleWithZoom: false\n      } as GraphStyleRule,\n      'collapsed chain marker stylesheet'\n    );\n\n    if (collapsedMarkerStylesheet && collapsedNodes.length > 0) {\n      const getOffset = collapsedMarkerStylesheet.getDeckGLAccessor('getOffset');\n      layers.push(\n        new ZoomableMarkerLayer({\n          ...SHARED_LAYER_PROPS,\n          id: 'collapsed-chain-markers',\n          data: collapsedNodes,\n          getPosition: mixedGetPosition(engine.getNodePosition, getOffset),\n          pickable: true,\n          positionUpdateTrigger: [\n            engine.getLayoutLastUpdate(),\n            engine.getLayoutState(),\n            collapsedMarkerStylesheet.getDeckGLAccessorUpdateTrigger('getOffset')\n          ].join(),\n          stylesheet: collapsedMarkerStylesheet,\n          visible: true\n        } as any)\n      );\n    }\n\n    if (expandedOutlineNodes.length > 0) {\n      layers.push(\n        new PolygonLayer({\n          ...SHARED_LAYER_PROPS,\n          id: 'expanded-chain-outlines',\n          data: expandedOutlineNodes,\n          getPolygon: (node: NodeInterface) => getChainOutlinePolygon(node),\n          stroked: true,\n          filled: false,\n          getLineColor: [64, 96, 192, 200],\n          getLineWidth: 2,\n          lineWidthUnits: 'pixels',\n          lineWidthMinPixels: 2,\n          pickable: true,\n          updateTriggers: {\n            getPolygon: [outlineUpdateTrigger]\n          }\n        })\n      );\n    }\n\n    const expandedMarkerStylesheet = this._createStylesheetEngine(\n      {\n        type: 'marker',\n        fill: [64, 96, 192, 255],\n        size: 32,\n        marker: 'circle-minus-filled',\n        offset: [24, -24],\n        scaleWithZoom: false\n      } as GraphStyleRule,\n      'expanded chain marker stylesheet'\n    );\n\n    if (expandedMarkerStylesheet && expandedNodes.length > 0) {\n      const getOffset = expandedMarkerStylesheet.getDeckGLAccessor('getOffset');\n      layers.push(\n        new ZoomableMarkerLayer({\n          ...SHARED_LAYER_PROPS,\n          id: 'expanded-chain-markers',\n          data: expandedNodes,\n          getPosition: mixedGetPosition(engine.getNodePosition, getOffset),\n          pickable: true,\n          positionUpdateTrigger: [\n            engine.getLayoutLastUpdate(),\n            engine.getLayoutState(),\n            expandedMarkerStylesheet.getDeckGLAccessorUpdateTrigger('getOffset')\n          ].join(),\n          stylesheet: expandedMarkerStylesheet,\n          visible: true\n        } as any)\n      );\n    }\n\n    return layers;\n  }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string | number | symbol, unknown> {\n  if (!value || typeof value !== 'object') {\n    return false;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {GraphStylesheet, GraphStyleRule, GraphStyleType} from './graph-style-engine';\n\nexport type GraphNodeStyleType = Exclude<\n  GraphStyleType,\n  'Edge' | 'edge' | 'edge-label' | 'flow' | 'arrow'\n>;\n\nexport type GraphEdgeDecoratorType = Extract<GraphStyleType, 'edge-label' | 'flow' | 'arrow'>;\n\nexport type GraphLayerNodeStyle = Extract<GraphStyleRule, {type: GraphNodeStyleType}> & {\n  pickable?: boolean;\n  visible?: boolean;\n  data?: (nodes: any[]) => any;\n};\n\nexport type GraphLayerEdgeDecoratorStyle = Extract<GraphStyleRule, {type: GraphEdgeDecoratorType}>;\n\ntype EdgeStyleType = Extract<GraphStyleType, 'Edge' | 'edge'>;\n\nexport type GraphLayerEdgeStyle = (\n  | Extract<GraphStyleRule, {type: EdgeStyleType}>\n  | (Omit<Extract<GraphStyleRule, {type: EdgeStyleType}>, 'type'> & {type?: EdgeStyleType})\n) & {\n  decorators?: GraphLayerEdgeDecoratorStyle[];\n  data?: (edges: any[]) => any;\n  visible?: boolean;\n};\n\nexport type GraphLayerStylesheet = GraphStylesheet & {\n  nodes?: GraphLayerNodeStyle[];\n  edges?: GraphLayerEdgeStyle | GraphLayerEdgeStyle[];\n};\n\nexport type GraphLayerStylesheetInput = GraphLayerStylesheet | null | undefined;\n\nexport type NormalizedGraphLayerStylesheet = {\n  nodes: GraphLayerNodeStyle[];\n  edges: GraphLayerEdgeStyle[];\n};\n\nexport const DEFAULT_GRAPH_LAYER_STYLESHEET_INPUT: GraphLayerStylesheet = {\n  nodes: [],\n  edges: [\n    {\n      type: 'edge',\n      stroke: 'black',\n      strokeWidth: 1\n    }\n  ]\n};\n\nconst DEFAULT_EDGE_STYLE: GraphLayerEdgeStyle = {\n  ...DEFAULT_GRAPH_LAYER_STYLESHEET_INPUT.edges[0],\n  decorators: []\n};\n\nexport const DEFAULT_GRAPH_LAYER_STYLESHEET: NormalizedGraphLayerStylesheet = {\n  nodes: [],\n  edges: [DEFAULT_EDGE_STYLE]\n};\n\nexport type GraphLayerStylesheetSources = {\n  stylesheet?: GraphLayerStylesheetInput;\n  nodeStyle?: GraphLayerNodeStyle[];\n  edgeStyle?: GraphLayerEdgeStyle | GraphLayerEdgeStyle[];\n};\n\nexport function normalizeGraphLayerStylesheet({\n  stylesheet,\n  nodeStyle,\n  edgeStyle\n}: GraphLayerStylesheetSources): NormalizedGraphLayerStylesheet {\n  const resolvedStylesheet = stylesheet ?? {};\n  const resolvedNodeStyles = Array.isArray(resolvedStylesheet.nodes)\n    ? resolvedStylesheet.nodes\n    : nodeStyle;\n\n  const resolvedEdgeStyles = resolvedStylesheet.edges ?? edgeStyle;\n\n  const nodes = Array.isArray(resolvedNodeStyles)\n    ? resolvedNodeStyles.filter(Boolean)\n    : [...DEFAULT_GRAPH_LAYER_STYLESHEET.nodes];\n\n  const edgeEntries = Array.isArray(resolvedEdgeStyles)\n    ? resolvedEdgeStyles\n    : resolvedEdgeStyles\n      ? [resolvedEdgeStyles]\n      : DEFAULT_GRAPH_LAYER_STYLESHEET.edges;\n\n  const edges: GraphLayerEdgeStyle[] = edgeEntries.filter(Boolean).map(edgeStyleEntry => ({\n    ...edgeStyleEntry,\n    type: edgeStyleEntry.type ?? 'edge',\n    decorators: edgeStyleEntry.decorators ?? []\n  })) as GraphLayerEdgeStyle[];\n\n  return {\n    nodes,\n    edges\n  };\n}\n\nexport type {GraphStyleValue, GraphStylesheet, GraphStyleType} from './graph-style-engine';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ScatterplotLayer} from '@deck.gl/layers';\n\nexport class CircleLayer extends CompositeLayer {\n  static layerName = 'CircleLayer';\n\n  renderLayers() {\n    const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n    return [\n      new ScatterplotLayer(\n        this.getSubLayerProps({\n          id: '__scatterplot-layer',\n          data,\n          getPosition,\n          ...stylesheet.getDeckGLAccessors(),\n          updateTriggers: {\n            getPosition: positionUpdateTrigger,\n            ...stylesheet.getDeckGLUpdateTriggers()\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {IconLayer} from '@deck.gl/layers';\n\nexport class ImageLayer extends CompositeLayer {\n  static layerName = 'ImageLayer';\n\n  renderLayers() {\n    const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n    return [\n      new IconLayer(\n        this.getSubLayerProps({\n          id: '__icon-layer',\n          data,\n          getPosition,\n          ...stylesheet.getDeckGLAccessors(),\n          updateTriggers: {\n            getPosition: positionUpdateTrigger,\n            ...stylesheet.getDeckGLUpdateTriggers()\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ZoomableTextLayer} from '../common-layers/zoomable-text-layer/zoomable-text-layer';\n\nexport class LabelLayer extends CompositeLayer {\n  static layerName = 'LabelLayer';\n\n  renderLayers() {\n    const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n    return [\n      new ZoomableTextLayer(\n        this.getSubLayerProps({\n          id: '__text-layer',\n          data,\n          getPosition,\n          ...stylesheet.getDeckGLAccessors(),\n          updateTriggers: {\n            ...stylesheet.getDeckGLUpdateTriggers(),\n            getPosition: positionUpdateTrigger\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {TextLayer} from '@deck.gl/layers';\n\nexport class ZoomableTextLayer extends CompositeLayer {\n  static layerName = 'ZoomableTextLayer';\n\n  shouldUpdateState({props, changeFlags}) {\n    const {scaleWithZoom} = this.props as any;\n    if (!scaleWithZoom) {\n      return changeFlags.dataChanged || changeFlags.propsChanged;\n    }\n    return changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.viewportChanged;\n  }\n\n  // eslint-disable-next-line complexity\n  renderLayers() {\n    const {\n      data,\n      getPosition,\n      getColor,\n      getText,\n      getSize,\n      getTextAnchor,\n      getAlignmentBaseline,\n      getAngle,\n      scaleWithZoom,\n      updateTriggers,\n      fontFamily,\n      textWordUnits,\n      textWordBreak,\n      textMaxWidth,\n      textSizeMinPixels\n    } = this.props as any;\n\n    const sizeUpdateTrigger = scaleWithZoom ? [getSize, this.context.viewport.zoom] : false;\n    // getText only expects function not plain value (string)\n    const newGetText = typeof getText === 'function' ? getText : () => getText;\n\n    // Filter data to items that have non-empty text to avoid deck.gl 9.3\n    // MultiIconLayer attribute validation errors with undefined/empty labels\n    const filteredData = data\n      ? data.filter((d: any) => {\n          const t = newGetText(d);\n          return t !== null && t !== undefined && t !== '';\n        })\n      : [];\n\n    if (filteredData.length === 0) {\n      return [];\n    }\n\n    // Defensive getText wrapper that guarantees a non-empty string.\n    // TextLayer's internal MultiIconLayer generates NaN in instanceIconDefs\n    // when a character is missing from the font atlas.\n    const safeGetText = (d: any) => String(newGetText(d) ?? '') || ' ';\n\n    return [\n      new TextLayer(\n        this.getSubLayerProps({\n          id: '__text-layer',\n          data: filteredData,\n          sizeScale: scaleWithZoom ? Math.pow(2, this.context.viewport.zoom - 1) : 1,\n          characterSet: 'auto',\n          getPosition,\n          getColor,\n          getSize,\n          getTextAnchor,\n          getAlignmentBaseline,\n          getAngle,\n          getText: safeGetText,\n          maxWidth: textMaxWidth ?? 12,\n          wordBreak: textWordBreak ?? 'break-all',\n          fontFamily: fontFamily ?? 'sans-serif',\n          wordUnits: textWordUnits ?? 'pixels',\n          sizeMinPixels: textSizeMinPixels ?? 9,\n          updateTriggers: {\n            getSize: sizeUpdateTrigger,\n            getAngle: [sizeUpdateTrigger, updateTriggers.getPosition],\n            ...updateTriggers\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {PolygonLayer} from '@deck.gl/layers';\n\nconst generateRectangle = (node, {getWidth, getHeight, getPosition}) => {\n  const pos = getPosition(node);\n  const width = typeof getWidth === 'function' ? getWidth(node._data.label.length * 12) : getWidth;\n  const height = typeof getWidth === 'function' ? getHeight(node) : getHeight;\n  const halfWidth = width / 2;\n  const halfHeight = height / 2;\n  return [\n    [pos[0] - halfWidth, pos[1] - halfHeight],\n    [pos[0] - halfWidth, pos[1] + halfHeight],\n    [pos[0] + halfWidth, pos[1] + halfHeight],\n    [pos[0] + halfWidth, pos[1] - halfHeight]\n  ];\n};\n\nexport class RectangleLayer extends CompositeLayer {\n  static layerName = 'RectangleLayer';\n\n  renderLayers() {\n    const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n    const getFillColor = stylesheet.getDeckGLAccessor('getFillColor');\n    const getLineWidth = stylesheet.getDeckGLAccessor('getLineWidth');\n\n    return [\n      new PolygonLayer(\n        this.getSubLayerProps({\n          id: '__polygon-layer',\n          data,\n          getPolygon: node =>\n            generateRectangle(node, {\n              getPosition,\n              getWidth: stylesheet.getDeckGLAccessor('getWidth'),\n              getHeight: stylesheet.getDeckGLAccessor('getHeight')\n            }),\n          filled: Boolean(getFillColor),\n          jointRounded: true,\n          stroked: Boolean(getLineWidth),\n          ...stylesheet.getDeckGLAccessors(),\n          updateTriggers: {\n            getPolygon: [\n              positionUpdateTrigger,\n              stylesheet.getDeckGLAccessorUpdateTrigger('getWidth'),\n              stylesheet.getDeckGLAccessorUpdateTrigger('getHeight')\n            ],\n            ...stylesheet.getDeckGLUpdateTriggers()\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const fs = /* glsl */ `\\\n#define SHADER_NAME rounded-rectangle-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vFillColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n\n  float distToCenter = length(unitPosition);\n\n  /* Calculate the cutoff radius for the rounded corners */\n  float threshold = sqrt(2.0) * (1.0 - roundedRectangle.cornerRadius) + 1.0 * roundedRectangle.cornerRadius;\n  if (distToCenter <= threshold) {\n    gl_FragColor = vFillColor;\n  } else {\n    discard;\n  }\n\n  gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n  gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import {ScatterplotLayer} from '@deck.gl/layers';\nimport type {ShaderModule} from '@luma.gl/shadertools';\nimport type {Model} from '@luma.gl/engine';\nimport {fs} from './rounded-rectangle-layer-fragment';\nimport {RectangleLayer} from './rectangle-layer';\n\nconst uniformBlock = `\\\nuniform roundedRectangleUniforms {\n  float cornerRadius;\n} roundedRectangle;\n`;\n\nexport type RoundedRectangleProps = {\n  cornerRadius: number;\n};\n\nexport const roundedRectangleUniforms = {\n  name: 'roundedRectangle',\n  vs: uniformBlock,\n  fs: uniformBlock,\n  uniformTypes: {\n    cornerRadius: 'f32'\n  }\n} as const satisfies ShaderModule<RoundedRectangleProps>;\n\nexport class RoundedRectangleLayer extends RectangleLayer {\n  static layerName = 'RoundedRectangleLayer';\n\n  draw(props) {\n    const {cornerRadius} = this.props as any;\n    const roundedRectangleProps: RoundedRectangleProps = {cornerRadius};\n    const model = this.state.model as Model;\n    model.shaderInputs.setProps({roundedRectangle: roundedRectangleProps});\n    super.draw(props);\n  }\n\n  getShaders() {\n    // use object.assign to make sure we don't overwrite existing fields like `vs`, `modules`...\n    const shaders = super.getShaders(undefined!);\n    return {\n      ...shaders,\n      fs,\n      modules: [...shaders.modules, roundedRectangleUniforms]\n    };\n  }\n}\n\nRoundedRectangleLayer.defaultProps = {\n  // cornerRadius: the amount of rounding at the rectangle corners\n  // 0 - rectangle. 1 - circle.\n  cornerRadius: 0.1\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {PolygonLayer} from '@deck.gl/layers';\nimport {generateRoundedCorners} from '../../utils/polygon-calculations';\n\nconst generateRoundedRectangle = (node, {getWidth, getHeight, getPosition, getCornerRadius}) => {\n  const pos = getPosition(node);\n  const width = typeof getWidth === 'function' ? getWidth(node) : getWidth;\n  const height = typeof getWidth === 'function' ? getHeight(node) : getHeight;\n  const cornerRadius =\n    typeof getCornerRadius === 'function' ? getCornerRadius(node) : getCornerRadius;\n  const factor = 20;\n  return generateRoundedCorners(pos, width, height, cornerRadius, factor);\n};\n\nexport class PathBasedRoundedRectangleLayer extends CompositeLayer {\n  static layerName = 'PathBasedRoundedRectangleLayer';\n\n  renderLayers() {\n    const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n    const getFillColor = stylesheet.getDeckGLAccessor('getFillColor');\n    const getLineWidth = stylesheet.getDeckGLAccessor('getLineWidth');\n\n    return [\n      new PolygonLayer(\n        this.getSubLayerProps({\n          id: '__polygon-layer',\n          data,\n          getPolygon: node =>\n            generateRoundedRectangle(node, {\n              getPosition,\n              getWidth: stylesheet.getDeckGLAccessor('getWidth'),\n              getHeight: stylesheet.getDeckGLAccessor('getHeight'),\n              getCornerRadius: stylesheet.getDeckGLAccessor('getCornerRadius')\n            }),\n          filled: Boolean(getFillColor),\n          stroked: Boolean(getLineWidth),\n          ...stylesheet.getDeckGLAccessors(),\n          updateTriggers: {\n            getPolygon: [\n              positionUpdateTrigger,\n              stylesheet.getDeckGLAccessorUpdateTrigger('getWidth'),\n              stylesheet.getDeckGLAccessorUpdateTrigger('getHeight'),\n              stylesheet.getDeckGLAccessorUpdateTrigger('getCornerRadius')\n            ],\n            ...stylesheet.getDeckGLUpdateTriggers()\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport function generateRoundedCorners(pos, width, height, radius, factor = 20) {\n  const halfWidth = width / 2;\n  const halfHeight = height / 2;\n  const bottomLeft = {X: pos[0] - halfWidth, Y: pos[1] - halfHeight};\n  const topLeft = {X: pos[0] - halfWidth, Y: pos[1] + halfHeight};\n  const bottomRight = {X: pos[0] + halfWidth, Y: pos[1] - halfHeight};\n  const topRight = {X: pos[0] + halfWidth, Y: pos[1] + halfHeight};\n\n  const roundedPointsForBottomLeft = getRoundedCorner(\n    bottomLeft,\n    topLeft,\n    bottomRight,\n    radius,\n    factor\n  );\n  const roundedPointsForTopLeft = getRoundedCorner(\n    topLeft,\n    topRight,\n    bottomLeft,\n    radius,\n    factor\n  ).reverse();\n  const roundedPointsForTopRight = getRoundedCorner(\n    topRight,\n    bottomRight,\n    topLeft,\n    radius,\n    factor\n  ).reverse();\n  const roundedPointsForBottomRight = getRoundedCorner(\n    bottomRight,\n    bottomLeft,\n    topRight,\n    radius,\n    factor\n  ).reverse();\n\n  const result = [\n    ...roundedPointsForBottomLeft,\n    ...roundedPointsForTopLeft,\n    ...roundedPointsForTopRight,\n    ...roundedPointsForBottomRight\n  ];\n\n  return result;\n}\n\n/**\n *\n * @param {*} angularPoint = corner point\n * @param {*} p1 = edge one\n * @param {*} p2 = edge two\n * @param {*} radius = corner radius\n * @param {*} factor = affects the points used for curve\n * reference: https://stackoverflow.com/questions/24771828/how-to-calculate-rounded-corners-for-a-polygon\n */\n// eslint-disable-next-line max-statements\nfunction getRoundedCorner(angularPoint, p1, p2, radius, factor) {\n  // Vector 1\n  const dx1 = angularPoint.X - p1.X;\n  const dy1 = angularPoint.Y - p1.Y;\n\n  // Vector 2\n  const dx2 = angularPoint.X - p2.X;\n  const dy2 = angularPoint.Y - p2.Y;\n\n  // Angle between vector 1 and vector 2 divided by 2\n  const angle = (Math.atan2(dy1, dx1) - Math.atan2(dy2, dx2)) / 2;\n\n  // The length of segment between angular point and the\n  // points of intersection with the circle of a given radius\n  const tan = Math.abs(Math.tan(angle));\n  let segment = radius / tan;\n  // var segment = 2;\n\n  // Check the segment\n  const length1 = getLength(dx1, dy1);\n  const length2 = getLength(dx2, dy2);\n\n  const length = Math.min(length1, length2);\n\n  if (segment > length) {\n    segment = length;\n    radius = length * tan;\n  }\n\n  // Points of intersection are calculated by the proportion between\n  // the coordinates of the vector, length of vector and the length of the segment.\n  const p1Cross = getProportionPoint(angularPoint, segment, length1, dx1, dy1);\n  const p2Cross = getProportionPoint(angularPoint, segment, length2, dx2, dy2);\n\n  // Calculation of the coordinates of the circle\n  // center by the addition of angular vectors.\n  const dx = angularPoint.X * 2 - p1Cross.X - p2Cross.X;\n  const dy = angularPoint.Y * 2 - p1Cross.Y - p2Cross.Y;\n\n  const L = getLength(dx, dy);\n  const d = getLength(segment, radius);\n\n  const circlePoint = getProportionPoint(angularPoint, d, L, dx, dy);\n\n  // StartAngle and EndAngle of arc\n  let startAngle = Math.atan2(p1Cross.Y - circlePoint.Y, p1Cross.X - circlePoint.X);\n  const endAngle = Math.atan2(p2Cross.Y - circlePoint.Y, p2Cross.X - circlePoint.X);\n\n  // Sweep angle\n  let sweepAngle = endAngle - startAngle;\n\n  // Some additional checks\n  if (sweepAngle < 0) {\n    startAngle = endAngle;\n    sweepAngle = -sweepAngle;\n  }\n\n  if (sweepAngle > Math.PI) sweepAngle = Math.PI - sweepAngle;\n\n  const degreeFactor = factor / Math.PI;\n\n  return getPointsForArc(sweepAngle, degreeFactor, startAngle, circlePoint, radius);\n}\n\nfunction getLength(dx, dy) {\n  return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction getProportionPoint(point, segment, length, dx, dy) {\n  const factor = segment / length;\n\n  return {\n    X: point.X - dx * factor,\n    Y: point.Y - dy * factor\n  };\n}\n\nfunction getPointsForArc(sweepAngle, degreeFactor, startAngle, circlePoint, radius) {\n  const pointsCount = Math.abs(sweepAngle * degreeFactor);\n  const sign = Math.sign(sweepAngle);\n\n  const points = [];\n\n  for (let i = 0; i < pointsCount; ++i) {\n    const pointX = circlePoint.X + Math.cos(startAngle + (sign * i) / degreeFactor) * radius;\n\n    const pointY = circlePoint.Y + Math.sin(startAngle + (sign * i) / degreeFactor) * radius;\n\n    const point = [pointX, pointY];\n    points.push(point);\n  }\n  return points;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {MarkerLayer} from '../common-layers/marker-layer/marker-layer';\n\nexport class ZoomableMarkerLayer extends CompositeLayer {\n  static layerName = 'ZoomableMarkerLayer';\n\n  shouldUpdateState({props, changeFlags}) {\n    const {stylesheet} = this.props as any;\n    const scaleWithZoom = stylesheet.getDeckGLAccessor('scaleWithZoom');\n    if (!scaleWithZoom) {\n      return changeFlags.somethingChanged;\n    }\n    return changeFlags.somethingChanged || changeFlags.viewportChanged;\n  }\n\n  renderLayers() {\n    const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n    const getSize = stylesheet.getDeckGLAccessor('getSize');\n    const scaleWithZoom = stylesheet.getDeckGLAccessor('scaleWithZoom');\n    const sizeUpdateTrigger = scaleWithZoom ? [getSize, this.context.viewport.zoom] : false;\n    const oiginalGetMarker = stylesheet.getDeckGLAccessor('getMarker');\n    // getMarker only expects function not plain value (string)\n    const getMarker =\n      typeof oiginalGetMarker === 'function' ? oiginalGetMarker : () => oiginalGetMarker;\n\n    return [\n      new MarkerLayer(\n        this.getSubLayerProps({\n          id: 'zoomable-marker-layer',\n          data,\n          getPosition,\n          sizeScale: scaleWithZoom ? Math.max(0, this.context.viewport.zoom) : 1,\n          ...stylesheet.getDeckGLAccessors(),\n          getMarker,\n          updateTriggers: {\n            ...stylesheet.getDeckGLUpdateTriggers(),\n            getPosition: positionUpdateTrigger,\n            getSize: sizeUpdateTrigger\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {IconLayer} from '@deck.gl/layers';\n\nimport {MarkerMapping} from './marker-mapping';\nimport {AtlasDataURL} from './atlas-data-url';\n\nexport class MarkerLayer extends CompositeLayer {\n  static layerName = 'MarkerLayer';\n\n  static defaultProps = {\n    id: 'MarkerLayer',\n    data: [],\n    getMarker: d => d.marker,\n    getColor: _d => [0, 0, 0],\n    getSize: _d => 10\n  };\n\n  renderLayers() {\n    const {getMarker, ...otherProps} = this.props as any;\n    return [\n      new IconLayer(\n        this.getSubLayerProps({\n          id: 'marker-layer',\n          iconAtlas: AtlasDataURL.dataURL,\n          iconMapping: MarkerMapping,\n          getIcon: getMarker,\n          ...otherProps\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable */\nexport const MarkerMapping = {\n  'bell-filled': {\n    x: 0,\n    y: 0,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  bell: {\n    x: 32,\n    y: 0,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'bookmark-filled': {\n    x: 0,\n    y: 32,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  bookmark: {\n    x: 32,\n    y: 32,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'cd-filled': {\n    x: 64,\n    y: 0,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  cd: {\n    x: 64,\n    y: 32,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  checkmark: {\n    x: 0,\n    y: 64,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-check-filled': {\n    x: 32,\n    y: 64,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-check': {\n    x: 64,\n    y: 64,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-filled': {\n    x: 96,\n    y: 0,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-i-filled': {\n    x: 96,\n    y: 32,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-i': {\n    x: 96,\n    y: 64,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-minus-filled': {\n    x: 0,\n    y: 96,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-minus': {\n    x: 32,\n    y: 96,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-plus-filled': {\n    x: 64,\n    y: 96,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-plus': {\n    x: 96,\n    y: 96,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-questionmark-filled': {\n    x: 128,\n    y: 0,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-questionmark': {\n    x: 128,\n    y: 32,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-slash-filled': {\n    x: 128,\n    y: 64,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-slash': {\n    x: 128,\n    y: 96,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-x-filled': {\n    x: 0,\n    y: 128,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'circle-x': {\n    x: 32,\n    y: 128,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  circle: {\n    x: 64,\n    y: 128,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'diamond-filled': {\n    x: 96,\n    y: 128,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  diamond: {\n    x: 128,\n    y: 128,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'flag-filled': {\n    x: 160,\n    y: 0,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  flag: {\n    x: 160,\n    y: 32,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  gear: {\n    x: 160,\n    y: 64,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'heart-filled': {\n    x: 160,\n    y: 96,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  heart: {\n    x: 160,\n    y: 128,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'location-marker-filled': {\n    x: 0,\n    y: 160,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'location-marker': {\n    x: 32,\n    y: 160,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'octagonal-star-filled': {\n    x: 64,\n    y: 160,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'octagonal-star': {\n    x: 96,\n    y: 160,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'person-filled': {\n    x: 128,\n    y: 160,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  person: {\n    x: 160,\n    y: 160,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'pin-filled': {\n    x: 192,\n    y: 0,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  pin: {\n    x: 192,\n    y: 32,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'plus-small': {\n    x: 192,\n    y: 64,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  plus: {\n    x: 192,\n    y: 96,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'rectangle-filled': {\n    x: 192,\n    y: 128,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  rectangle: {\n    x: 192,\n    y: 160,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'star-filled': {\n    x: 0,\n    y: 192,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  star: {\n    x: 32,\n    y: 192,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'tag-filled': {\n    x: 64,\n    y: 192,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  tag: {\n    x: 96,\n    y: 192,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'thumb-down-filled': {\n    x: 128,\n    y: 192,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'thumb-down': {\n    x: 160,\n    y: 192,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'thumb-up': {\n    x: 192,\n    y: 192,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'thumb_up-filled': {\n    x: 224,\n    y: 0,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'triangle-down-filled': {\n    x: 224,\n    y: 32,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'triangle-down': {\n    x: 224,\n    y: 64,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'triangle-left-filled': {\n    x: 224,\n    y: 96,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'triangle-left': {\n    x: 224,\n    y: 128,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'triangle-right-filled': {\n    x: 224,\n    y: 160,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'triangle-right': {\n    x: 224,\n    y: 192,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'triangle-up-filled': {\n    x: 0,\n    y: 224,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'triangle-up': {\n    x: 32,\n    y: 224,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  'x-small': {\n    x: 64,\n    y: 224,\n    width: 32,\n    height: 32,\n    mask: true\n  },\n  x: {\n    x: 96,\n    y: 224,\n    width: 32,\n    height: 32,\n    mask: true\n  }\n};\n/* eslint-enable */\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable */\nexport const AtlasDataURL = {\n  dataURL:\n    'data:image/png;base64,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'\n};\n/* eslint-enable */\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';\n\nimport {StraightLineEdgeLayer} from '../layers/edge-layers/straight-line-edge-layer';\nimport {PathEdgeLayer} from './edge-layers/path-edge-layer';\nimport {CurvedEdgeLayer} from './edge-layers/curved-edge-layer';\n\nconst EDGE_LAYER_MAP = {\n  line: StraightLineEdgeLayer,\n  path: PathEdgeLayer,\n  'spline-curve': CurvedEdgeLayer\n};\n\nexport class EdgeLayer extends CompositeLayer {\n  static layerName = 'EdgeLayer';\n\n  static defaultProps = {\n    data: [],\n    pickable: true,\n    getLayoutInfo: d => ({\n      type: d.type,\n      sourcePosition: d.sourcePosition,\n      targetPosition: d.targetPosition,\n      controlPoints: []\n    }),\n    positionUpdateTrigger: 0\n  };\n\n  updateState({props, oldProps, changeFlags}) {\n    super.updateState({props, oldProps, changeFlags} as any);\n    if (changeFlags.dataChanged) {\n      this.updateStateData();\n    }\n  }\n\n  updateStateData() {\n    const {data, getLayoutInfo} = this.props as any;\n    // bucket edges by types\n    const typedEdgeData = data.reduce(\n      (res, d) => {\n        const {type} = getLayoutInfo(d);\n        res[type].push(d);\n        return res;\n      },\n      {\n        line: [],\n        path: [],\n        'spline-curve': []\n      }\n    );\n    this.setState({typedEdgeData});\n  }\n\n  renderLayers() {\n    const {getLayoutInfo, pickable, positionUpdateTrigger, stylesheet, id} = this.props as any;\n\n    const {typedEdgeData} = this.state;\n\n    // render lines by types (straight line, path, curves)\n    return Object.entries(typedEdgeData).map((e, idx) => {\n      const [type, edgeData] = e;\n      const Layer = EDGE_LAYER_MAP[type];\n      // invalid edge layer type\n      if (!Layer) {\n        return null;\n      }\n      return new Layer({\n        id: `${id}-${idx}`,\n        data: edgeData,\n        getLayoutInfo,\n        getColor: stylesheet.getDeckGLAccessor('getColor'),\n        getWidth: stylesheet.getDeckGLAccessor('getWidth'),\n        colorUpdateTrigger: stylesheet.getDeckGLAccessorUpdateTrigger('getColor'),\n        widthUpdateTrigger: stylesheet.getDeckGLAccessorUpdateTrigger('getWidth'),\n        positionUpdateTrigger,\n        pickable,\n        coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n        parameters: {\n          depthCompare: 'always'\n        }\n      } as any);\n    });\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {LineLayer} from '@deck.gl/layers';\n\nexport class StraightLineEdgeLayer extends CompositeLayer {\n  static layerName = 'StraightLineEdgeLayer';\n\n  renderLayers() {\n    const {\n      data,\n      getLayoutInfo,\n      positionUpdateTrigger = 0,\n      colorUpdateTrigger = 0,\n      widthUpdateTrigger = 0,\n      ...otherProps\n    } = this.props as any;\n    return [\n      new LineLayer(\n        this.getSubLayerProps({\n          id: '__line-layer',\n          data,\n          getSourcePosition: e => getLayoutInfo(e).sourcePosition,\n          getTargetPosition: e => getLayoutInfo(e).targetPosition,\n          updateTriggers: {\n            getColor: colorUpdateTrigger,\n            getSourcePosition: positionUpdateTrigger,\n            getTargetPosition: positionUpdateTrigger,\n            getWidth: widthUpdateTrigger\n          },\n          ...otherProps\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {PathLayer} from '@deck.gl/layers';\n\nexport class PathEdgeLayer extends CompositeLayer {\n  static layerName = 'PathEdgeLayer';\n\n  renderLayers() {\n    const {\n      data,\n      getLayoutInfo,\n      positionUpdateTrigger = 0,\n      colorUpdateTrigger = 0,\n      widthUpdateTrigger = 0,\n      ...otherProps\n    } = this.props as any;\n    return [\n      new PathLayer(\n        this.getSubLayerProps({\n          id: '__line-layer',\n          data,\n          getPath: e => {\n            const {sourcePosition, targetPosition, controlPoints} = getLayoutInfo(e);\n            return [sourcePosition, ...controlPoints, targetPosition];\n          },\n          updateTriggers: {\n            getColor: colorUpdateTrigger,\n            getPath: positionUpdateTrigger,\n            getWidth: widthUpdateTrigger\n          },\n          ...otherProps\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ScatterplotLayer, LineLayer} from '@deck.gl/layers';\nimport {SplineLayer} from '../common-layers/spline-layer/spline-layer';\n\nconst DEBUG = false;\n\nexport class CurvedEdgeLayer extends CompositeLayer {\n  static layerName = 'CurvedEdgeLayer';\n\n  // @ts-expect-error TODO\n  renderLayers() {\n    const {\n      data,\n      getLayoutInfo,\n      positionUpdateTrigger = 0,\n      colorUpdateTrigger = 0,\n      widthUpdateTrigger = 0,\n      ...otherProps\n    } = this.props as any;\n    return [\n      DEBUG &&\n        new ScatterplotLayer(\n          this.getSubLayerProps({\n            id: '__control-points',\n            data,\n            getPosition: e => getLayoutInfo(e).controlPoints[0],\n            getColor: _d => [190, 190, 190, 150],\n            getRadius: _d => 5,\n            updateTriggers: {\n              getPosition: positionUpdateTrigger\n            },\n            ...otherProps\n          })\n        ),\n      DEBUG &&\n        new LineLayer(\n          this.getSubLayerProps({\n            id: '__first_segment',\n            data,\n            getSourcePosition: e => getLayoutInfo(e).sourcePosition,\n            getTargetPosition: e => getLayoutInfo(e).controlPoints[0],\n            getColor: _e => [210, 210, 210, 150],\n            updateTriggers: {\n              getSourcePosition: positionUpdateTrigger,\n              getTargetPosition: positionUpdateTrigger\n            },\n            ...otherProps\n          })\n        ),\n      DEBUG &&\n        new LineLayer(\n          this.getSubLayerProps({\n            id: '__last_segment',\n            data,\n            getSourcePosition: e => getLayoutInfo(e).controlPoints[0],\n            getTargetPosition: e => getLayoutInfo(e).targetPosition,\n            getColor: _e => [210, 210, 210, 150],\n            updateTriggers: {\n              getSourcePosition: positionUpdateTrigger,\n              getTargetPosition: positionUpdateTrigger\n            },\n            ...otherProps\n          })\n        ),\n      new SplineLayer(\n        this.getSubLayerProps({\n          id: '__spline_layer',\n          data,\n          getSourcePosition: e => getLayoutInfo(e).sourcePosition,\n          getTargetPosition: e => getLayoutInfo(e).targetPosition,\n          getControlPoints: e => getLayoutInfo(e).controlPoints,\n          updateTriggers: {\n            getSourcePosition: positionUpdateTrigger,\n            getTargetPosition: positionUpdateTrigger,\n            getControlPoints: positionUpdateTrigger,\n            getColor: colorUpdateTrigger,\n            getWidth: widthUpdateTrigger\n          },\n          ...otherProps\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';\nimport {PathLayer} from '@deck.gl/layers';\nimport {getCurvePoints} from 'cardinal-spline-js';\n// const getCurvePoints = () => {};\n\n/* Constants */\nconst defaultProps = {\n  id: 'spline-layer',\n  getData: d => d.points,\n  getAngle: _x => 0,\n  fontSize: 24,\n  coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n  fp64: false\n};\n\nexport class SplineLayer extends CompositeLayer {\n  static layerName = 'SplineLayer';\n\n  initializeState() {\n    this.state = {typedEdgeData: []};\n  }\n\n  shouldUpdateState({changeFlags}) {\n    return changeFlags.dataChanged || changeFlags.propsChanged;\n  }\n\n  updateState({props, oldProps, changeFlags}) {\n    super.updateState({props, oldProps, changeFlags} as any);\n    if (changeFlags.dataChanged || changeFlags.propsChanged) {\n      this.updateSplineData();\n    }\n  }\n\n  updateSplineData() {\n    const {data} = this.props as any;\n    const paths = data.reduce((res, d) => {\n      const sourcePosition = (this.props as any).getSourcePosition(d);\n      const targetPosition = (this.props as any).getTargetPosition(d);\n      const controlPoints = (this.props as any).getControlPoints(d);\n\n      // Catmull-Rom curve\n      const serializedControlPoints = controlPoints.toString().split(',');\n\n      // NOTE: we might change the number of points according to the length.\n      // so we can render less segements.\n      // points = [x1, y1, x2, y2, ...];\n      const points = getCurvePoints(\n        [...sourcePosition, ...serializedControlPoints, ...targetPosition],\n        0.5,\n        10\n      );\n      // convert points to [[x1, y1], [x2, y2], ...]\n      const path = [];\n      for (let idx = 0; idx < points.length; idx += 2) {\n        path.push([points[idx], points[idx + 1]]);\n      }\n      res.push(path);\n      return res;\n    }, []);\n    this.setState({paths});\n  }\n\n  renderLayers() {\n    const {coordinateSystem, getColor, getWidth, id, updateTriggers} = this.props as any;\n    const {paths} = this.state;\n    return new PathLayer({\n      id: `${id}-splines`,\n      data: paths as any,\n      getPath: d => d,\n      getColor,\n      getWidth,\n      coordinateSystem,\n      updateTriggers\n    });\n  }\n}\n\nSplineLayer.layerName = 'SplineLayer';\nSplineLayer.defaultProps = defaultProps;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ZoomableTextLayer} from '../common-layers/zoomable-text-layer/zoomable-text-layer';\n\nexport class EdgeLabelLayer extends CompositeLayer {\n  static layerName = 'EdgeLabelLayer';\n\n  renderLayers() {\n    const {data, getLayoutInfo, positionUpdateTrigger = 0, stylesheet} = this.props as any;\n    return [\n      new ZoomableTextLayer(\n        this.getSubLayerProps({\n          id: 'edge-label-layer',\n          data,\n          getPosition: e => {\n            const {sourcePosition, targetPosition, controlPoints = []} = getLayoutInfo(e);\n            // consider all the points on this edge\n            const allPoints = [sourcePosition, targetPosition, ...controlPoints];\n            const sumX = allPoints.reduce((res, p) => res + p[0], 0);\n            const sumY = allPoints.reduce((res, p) => res + p[1], 0);\n            // find the centroid of those points\n            return [sumX / allPoints.length, sumY / allPoints.length];\n          },\n          getAngle: e => {\n            const {sourcePosition, targetPosition} = getLayoutInfo(e);\n            // sort the nodes from left to right\n            const [newSourcePosition, newTargetPosition] =\n              sourcePosition[0] < targetPosition[0]\n                ? [sourcePosition, targetPosition]\n                : [targetPosition, sourcePosition];\n            // angle in degrees\n            const deltaX = newTargetPosition[0] - newSourcePosition[0];\n            const deltaY = newTargetPosition[1] - newSourcePosition[1];\n            return (Math.atan2(deltaY, deltaX) * -180) / Math.PI;\n          },\n          ...stylesheet.getDeckGLAccessors(),\n          updateTriggers: {\n            ...stylesheet.getDeckGLUpdateTriggers(),\n            getPosition: positionUpdateTrigger\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\n\nimport {FlowPathLayer} from '../common-layers/flow-path-layer/flow-path-layer';\n\nexport class FlowLayer extends CompositeLayer {\n  static layerName = 'FlowLayer';\n\n  renderLayers() {\n    const {data, getLayoutInfo, positionUpdateTrigger = 0, stylesheet} = this.props as any;\n    return [\n      new FlowPathLayer(\n        this.getSubLayerProps({\n          id: '__flow-layer',\n          data,\n          ...stylesheet.getDeckGLAccessors(),\n          getSourcePosition: e => getLayoutInfo(e).sourcePosition,\n          getTargetPosition: e => getLayoutInfo(e).targetPosition,\n          parameters: {\n            depthTest: false\n          },\n          updateTriggers: {\n            ...stylesheet.getDeckGLUpdateTriggers(),\n            getSourcePosition: positionUpdateTrigger,\n            getTargetPosition: positionUpdateTrigger\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import {Buffer, Transform} from '@luma.gl/core';\nimport {LineLayer} from '@deck.gl/layers';\n\nimport {vs} from './flow-path-layer-vertex.glsl';\nimport {fs} from './flow-path-layer-fragment.glsl';\n// import {tfvs} from './flow-path-layer-vertex-tf.glsl';\n\nconst defaultProps = {\n  ...LineLayer.defaultProps,\n  getWidth: {type: 'accessor', value: 1},\n  getSpeed: {type: 'accessor', value: 0}\n};\n\n/* eslint-disable camelcase */\nexport class FlowPathLayer extends LineLayer {\n  getShaders() {\n    const projectModule = this.use64bitPositions() ? 'project64' : 'project32';\n    return {vs, fs, modules: [projectModule, 'picking']};\n  }\n\n  initializeState() {\n    super.initializeState();\n    this.getAttributeManager().addInstanced({\n      instanceSpeeds: {\n        size: 1,\n        transition: true,\n        accessor: 'getSpeed',\n        defaultValue: 0\n      },\n      instanceTailLengths: {\n        size: 1,\n        transition: true,\n        accessor: 'getTailLength',\n        defaultValue: 1\n      }\n    });\n    this.setupTransformFeedback();\n    this.setState({\n      ...this.state,\n      animation: globalThis.window.requestAnimationFrame(this.animate.bind(this))\n    });\n  }\n\n  animate() {\n    const {transform} = this.state as any;\n    if (transform) {\n      transform.run();\n      transform.swap();\n    }\n    this.setState({\n      animation: window.requestAnimationFrame(this.animate.bind(this))\n    });\n  }\n\n  updateState({props, oldProps, changeFlags}) {\n    super.updateState({props, oldProps, changeFlags} as any);\n    const {speedsBuffer} = this.state as any;\n\n    const speedChanged =\n      changeFlags.dataChanged ||\n      props.fp64 !== oldProps.fp64 ||\n      (changeFlags.updateTriggersChanged &&\n        (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getSpeed));\n\n    if (speedChanged) {\n      const speeds = new Float32Array(props.data.length);\n      for (let i = 0; i < props.data.length; i++) {\n        speeds[i] =\n          typeof props.getSpeed === 'function' ? props.getSpeed(props.data[i]) : props.getSpeed;\n      }\n      speedsBuffer.subData({data: speeds});\n    }\n\n    if (props.fp64 !== oldProps.fp64) {\n      if (this.state.model) {\n        (this.state.model as any).delete();\n      }\n      this.setState({model: this._getModel()});\n      this.getAttributeManager().invalidateAll();\n    }\n  }\n\n  finalizeState() {\n    super.finalizeState(this.context);\n    window.cancelAnimationFrame((this.state as any).animation);\n  }\n\n  setupTransformFeedback() {\n    throw new Error('Not implemented');\n    // const {gl} = this.context;\n    // const elementCount = this.props.data && this.props.data.length;\n    // if (elementCount) {\n    //   const instanceOffsets = new Float32Array(elementCount);\n    //   const instanceSpeeds = new Float32Array(elementCount);\n    //   const offsetBuffer = new Buffer(gl, instanceOffsets);\n    //   const speedsBuffer = new Buffer(gl, instanceSpeeds);\n\n    //   this.setState({\n    //     speedsBuffer,\n    //     transform: new Transform(gl, {\n    //       id: 'transform-offset',\n    //       vs: tfvs,\n    //       elementCount,\n    //       sourceBuffers: {\n    //         a_offset: offsetBuffer,\n    //         a_speed: speedsBuffer\n    //       },\n    //       feedbackMap: {\n    //         a_offset: 'v_offset'\n    //       }\n    //     })\n    //   });\n    // }\n  }\n\n  draw({uniforms}) {\n    throw new Error('Not implemented');\n    // const {transform} = this.state;\n    // if (!transform) {\n    //   return;\n    // }\n\n    // const {viewport} = this.context;\n    // const {widthUnits, widthScale, widthMinPixels, widthMaxPixels} = this.props;\n\n    // const widthMultiplier = widthUnits === 'pixels' ? viewport.distanceScales.metersPerPixel[2] : 1;\n\n    // const offsetBuffer = transform.getBuffer('v_offset');\n    // offsetBuffer.setAccessor({divisor: 1});\n\n    // this.state.model\n    //   .setAttributes({\n    //     instanceOffsets: offsetBuffer\n    //   })\n    //   .setUniforms(\n    //     Object.assign({}, uniforms, {\n    //       widthScale: widthScale * widthMultiplier,\n    //       widthMinPixels,\n    //       widthMaxPixels\n    //     })\n    //   )\n    //   .draw();\n\n    // offsetBuffer.setAccessor({divisor: 0});\n  }\n}\n\nFlowPathLayer.layerName = 'FlowPathLayer';\n(FlowPathLayer as any).defaultProps = defaultProps;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const vs = /* glsl */ `\\\n#define SHADER_NAME flow-path-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec4 instanceSourceTargetPositions64xyLow;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute float instanceWidths;\nattribute float instanceSpeeds;\nattribute float instanceOffsets;\nattribute float instanceTailLengths;\n\nuniform float opacity;\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\n\nvarying vec4 vColor;\nvarying float segmentIndex;\nvarying float speed;\nvarying float pathLength;\nvarying float tailLength;\nvarying float offset;\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {\n  // normalized direction of the line\n  vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n  // rotate by 90 degrees\n  dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n  vec2 offset_screenspace = dir_screenspace * offset_direction * width / 2.0;\n  vec2 offset_clipspace = project_pixel_size_to_clipspace(offset_screenspace);\n\n  return offset_clipspace;\n}\n\nvoid main(void) {\n  // Position\n  vec4 source = project_position_to_clipspace(instanceSourcePositions, instanceSourceTargetPositions64xyLow.xy, vec3(0.));\n  vec4 target = project_position_to_clipspace(instanceTargetPositions, instanceSourceTargetPositions64xyLow.zw, vec3(0.));\n\n  // Multiply out width and clamp to limits\n  float widthPixels = clamp(\n    project_size_to_pixel(instanceWidths * widthScale),\n    widthMinPixels, widthMaxPixels\n  );\n\n  // linear interpolation of source & target to pick right coord\n  segmentIndex = positions.x;\n  speed = instanceSpeeds;\n  tailLength = project_size_to_pixel(instanceTailLengths * widthScale);\n  offset = instanceOffsets;\n  pathLength = distance(instanceSourcePositions, instanceTargetPositions);\n  vec4 p = mix(source, target, segmentIndex);\n\n  // extrude\n  vec2 offset = getExtrusionOffset(target.xy - source.xy, positions.y, widthPixels);\n  gl_Position = p + vec4(offset, 0.0, 0.0);\n\n  // Color\n  vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n  // Set color to be rendered to picking fbo (also used to check for selection highlight).\n  picking_setPickingColor(instancePickingColors);\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const fs = /* glsl */ `\\\n#define SHADER_NAME flow-path-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying float segmentIndex;\nvarying float speed;\nvarying float offset;\nvarying float pathLength;\nvarying float tailLength;\n\nvoid main(void) {\n  gl_FragColor = vColor;\n\n  // use highlight color if this fragment belongs to the selected object.\n  gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n  // use picking color if rendering to picking FBO.\n  gl_FragColor = picking_filterPickingColor(gl_FragColor);\n\n  if (speed == 0.0) {\n    gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n  } else {\n    // the portion of the visible segment (0 to 1) , ex: 0.3\n    // edge cases: pathLength = 0 or tailLength > pathLength\n    float segFragment = 0.0;\n    if (pathLength != 0.0) {\n      segFragment = tailLength / pathLength;\n    }\n    if (tailLength > pathLength) {\n      segFragment = 1.0;\n    }\n    float startSegmentIndex = mod(offset, 60.0) / 60.0;\n    // the end offset, cap to 1.0 (end of the line)\n    float endSegmentIndex = min(startSegmentIndex + segFragment, 1.0);\n    if (segmentIndex < startSegmentIndex || segmentIndex > endSegmentIndex) {\n      gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n    } else {\n      // fading tail\n      float portion = (segmentIndex - startSegmentIndex) / segFragment;\n      gl_FragColor[3] = portion;\n    }\n  }\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\n\nimport {Arrow2DGeometry} from './arrow-2d-geometry';\n\nconst DEFAULT_ARROW_GEOMETRY = new Arrow2DGeometry({length: 1, headWidth: 0.6});\n\ntype LayoutInfo = {\n  sourcePosition: number[];\n  targetPosition: number[];\n  controlPoints?: number[][];\n};\n\nconst DEFAULT_Z = 0;\n\nfunction resolveSize(value: unknown): number {\n  const numeric = Number(value);\n  return Number.isFinite(numeric) && numeric !== 0 ? numeric : 1;\n}\n\nfunction getOffsetComponents(offset: unknown): {along: number; perpendicular: number} {\n  if (!Array.isArray(offset)) {\n    return {along: 0, perpendicular: 0};\n  }\n  const along = Number(offset[0]);\n  const perpendicular = Number(offset[1]);\n  return {\n    along: Number.isFinite(along) ? along : 0,\n    perpendicular: Number.isFinite(perpendicular) ? perpendicular : 0\n  };\n}\n\nexport function isEdgeDirected(edge: any): boolean {\n  if (!edge) {\n    return false;\n  }\n  if (typeof edge.isDirected === 'function') {\n    return Boolean(edge.isDirected());\n  }\n  if (typeof edge.directed === 'boolean') {\n    return edge.directed;\n  }\n  return false;\n}\n\nfunction normalizeVector(vector: number[]): number[] {\n  const length = Math.hypot(vector[0] ?? 0, vector[1] ?? 0, vector[2] ?? 0);\n  if (length === 0) {\n    return [0, 0, 0];\n  }\n  return [(vector[0] ?? 0) / length, (vector[1] ?? 0) / length, (vector[2] ?? 0) / length];\n}\n\nfunction getTerminalDirection({sourcePosition, targetPosition, controlPoints = []}: LayoutInfo): {\n  target: number[];\n  direction: number[];\n} {\n  const anchor = controlPoints.length ? controlPoints[controlPoints.length - 1] : sourcePosition;\n  const direction = [\n    (targetPosition[0] ?? 0) - (anchor?.[0] ?? 0),\n    (targetPosition[1] ?? 0) - (anchor?.[1] ?? 0),\n    (targetPosition[2] ?? DEFAULT_Z) - (anchor?.[2] ?? DEFAULT_Z)\n  ];\n  return {target: targetPosition, direction};\n}\n\nexport function getArrowTransform({\n  layout,\n  size,\n  offset = null\n}: {\n  layout: LayoutInfo;\n  size: number;\n  offset?: number[] | null;\n}): {position: [number, number, number]; angle: number} {\n  const {target, direction} = getTerminalDirection(layout);\n  const unit = normalizeVector(direction);\n\n  const hasDirection = unit[0] !== 0 || unit[1] !== 0 || unit[2] !== 0;\n  const resolvedSize = resolveSize(size);\n  const basePosition: [number, number, number] = [\n    target[0] ?? 0,\n    target[1] ?? 0,\n    target[2] ?? DEFAULT_Z\n  ];\n\n  if (!hasDirection) {\n    return {position: basePosition, angle: 0};\n  }\n\n  const {along, perpendicular} = getOffsetComponents(offset);\n  const alongDistance = resolvedSize * 0.5 + along;\n  const position: [number, number, number] = [\n    basePosition[0] - unit[0] * alongDistance,\n    basePosition[1] - unit[1] * alongDistance,\n    basePosition[2] - unit[2] * alongDistance\n  ];\n\n  if (perpendicular) {\n    const perp = [-unit[1], unit[0], 0];\n    position[0] += perp[0] * perpendicular;\n    position[1] += perp[1] * perpendicular;\n    position[2] += perp[2] * perpendicular;\n  }\n\n  const angle = (Math.atan2(unit[0], unit[1]) * 180) / Math.PI;\n\n  return {position, angle};\n}\n\nexport class EdgeArrowLayer extends CompositeLayer {\n  static layerName = 'EdgeArrowLayer';\n\n  renderLayers() {\n    const {data, getLayoutInfo, positionUpdateTrigger = 0, stylesheet} = this.props as any;\n    const directedEdges = (data || []).filter(isEdgeDirected);\n\n    if (!directedEdges.length) {\n      return [];\n    }\n\n    const {getColor, getSize, getOffset} = stylesheet.getDeckGLAccessors();\n    const updateTriggers = stylesheet.getDeckGLUpdateTriggers();\n\n    return [\n      new SimpleMeshLayer(\n        this.getSubLayerProps({\n          id: '__edge-arrow-layer',\n          data: directedEdges,\n          mesh: DEFAULT_ARROW_GEOMETRY,\n          getColor,\n          getScale: edge => {\n            const size = resolveSize(getSize(edge));\n            return [size, size, size];\n          },\n          getOrientation: edge => {\n            const layout = getLayoutInfo(edge);\n            const size = resolveSize(getSize(edge));\n            const offset = getOffset ? getOffset(edge) : null;\n            const {angle} = getArrowTransform({layout, size, offset});\n            return [0, -angle, 0];\n          },\n          getPosition: edge => {\n            const layout = getLayoutInfo(edge);\n            const size = resolveSize(getSize(edge));\n            const offset = getOffset ? getOffset(edge) : null;\n            const {position} = getArrowTransform({layout, size, offset});\n            return position;\n          },\n          parameters: {\n            depthTest: false\n          },\n          updateTriggers: {\n            getColor: updateTriggers.getColor,\n            getScale: updateTriggers.getSize,\n            getOrientation: [\n              positionUpdateTrigger,\n              updateTriggers.getSize,\n              updateTriggers.getOffset\n            ],\n            getPosition: [positionUpdateTrigger, updateTriggers.getSize, updateTriggers.getOffset]\n          }\n        })\n      )\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Geometry} from '@luma.gl/engine';\n\n// Mirror of the arrow geometry used by PathMarkerLayer, but only the head triangle.\nexport class Arrow2DGeometry extends Geometry {\n  constructor(opts = {}) {\n    super(\n      Object.assign({}, opts, {\n        attributes: getArrowAttributes(opts),\n        topology: 'triangle-list' as const\n      })\n    );\n  }\n}\n\nfunction getArrowAttributes({length = 1, headWidth = 1}) {\n  const halfLength = length / 2;\n  const halfWidth = headWidth / 2;\n\n  const positions = new Float32Array([\n    0,\n    halfLength,\n    0,\n    -halfWidth,\n    -halfLength,\n    0,\n    halfWidth,\n    -halfLength,\n    0\n  ]);\n\n  const normals = new Float32Array([0, 0, 1, 0, 0, 1, 0, 0, 1]);\n\n  const texCoords = new Float32Array([0.5, 1, 0, 0, 1, 0]);\n\n  return {\n    positions: {size: 3, value: positions},\n    normals: {size: 3, value: normals},\n    texCoords: {size: 2, value: texCoords}\n  };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type GeometryNodeType =\n  | 'circle'\n  | 'rectangle'\n  | 'rounded-rectangle'\n  | 'path-rounded-rectangle'\n  | 'marker';\n\nexport type NodeGeometry = {\n  type?: GeometryNodeType;\n  center: [number, number];\n  radius?: number;\n  width?: number;\n  height?: number;\n  cornerRadius?: number;\n};\n\nconst EPSILON = 1e-6;\n\nfunction normalizeDirection(\n  center: [number, number],\n  target: [number, number]\n): {unit: [number, number]; distance: number} | null {\n  const dx = target[0] - center[0];\n  const dy = target[1] - center[1];\n  const length = Math.hypot(dx, dy);\n\n  if (length <= EPSILON) {\n    return null;\n  }\n\n  return {unit: [dx / length, dy / length], distance: length};\n}\n\nfunction projectFromCenter(\n  center: [number, number],\n  unit: [number, number],\n  distance: number\n): [number, number] {\n  return [center[0] + unit[0] * distance, center[1] + unit[1] * distance];\n}\n\nfunction projectToRectangle(\n  center: [number, number],\n  unit: [number, number],\n  halfWidth: number,\n  halfHeight: number\n): [number, number] {\n  const absUx = Math.abs(unit[0]);\n  const absUy = Math.abs(unit[1]);\n\n  let distance = Number.POSITIVE_INFINITY;\n  if (halfWidth > 0 && absUx > EPSILON) {\n    distance = Math.min(distance, halfWidth / absUx);\n  }\n  if (halfHeight > 0 && absUy > EPSILON) {\n    distance = Math.min(distance, halfHeight / absUy);\n  }\n\n  if (!Number.isFinite(distance)) {\n    return [...center] as [number, number];\n  }\n\n  return [center[0] + unit[0] * distance, center[1] + unit[1] * distance];\n}\n\nfunction resolveCornerRadius(\n  rawCornerRadius: number | undefined,\n  halfWidth: number,\n  halfHeight: number\n): number {\n  if (!Number.isFinite(rawCornerRadius) || rawCornerRadius <= 0) {\n    return 0;\n  }\n\n  let resolved = rawCornerRadius;\n  if (resolved <= 1) {\n    resolved *= Math.min(halfWidth, halfHeight);\n  }\n\n  return Math.min(resolved, halfWidth, halfHeight);\n}\n\n// eslint-disable-next-line max-params\nfunction intersectsInnerFaces(\n  absX: number,\n  absY: number,\n  innerHalfWidth: number,\n  innerHalfHeight: number,\n  halfWidth: number,\n  halfHeight: number\n) {\n  const insideVerticalFace = absX <= innerHalfWidth + EPSILON && absY <= halfHeight + EPSILON;\n  const insideHorizontalFace = absY <= innerHalfHeight + EPSILON && absX <= halfWidth + EPSILON;\n  return insideVerticalFace || insideHorizontalFace;\n}\n\n// eslint-disable-next-line max-params\nfunction projectToCornerArc(\n  geometry: NodeGeometry,\n  unit: [number, number],\n  innerHalfWidth: number,\n  innerHalfHeight: number,\n  cornerRadius: number,\n  rectanglePoint: [number, number]\n) {\n  const offsetX = rectanglePoint[0] - geometry.center[0];\n  const offsetY = rectanglePoint[1] - geometry.center[1];\n\n  const cornerCenter: [number, number] = [\n    geometry.center[0] + Math.sign(offsetX || unit[0]) * innerHalfWidth,\n    geometry.center[1] + Math.sign(offsetY || unit[1]) * innerHalfHeight\n  ];\n  const relativeCornerCenter: [number, number] = [\n    cornerCenter[0] - geometry.center[0],\n    cornerCenter[1] - geometry.center[1]\n  ];\n\n  const dot = unit[0] * relativeCornerCenter[0] + unit[1] * relativeCornerCenter[1];\n  const centerDistanceSq =\n    relativeCornerCenter[0] * relativeCornerCenter[0] +\n    relativeCornerCenter[1] * relativeCornerCenter[1];\n  const discriminant = dot * dot - (centerDistanceSq - cornerRadius * cornerRadius);\n\n  if (discriminant < 0) {\n    return rectanglePoint;\n  }\n\n  const distance = dot - Math.sqrt(Math.max(0, discriminant));\n  return projectFromCenter(geometry.center, unit, distance);\n}\n\nfunction computeRectangleIntersection(\n  geometry: NodeGeometry,\n  unit: [number, number]\n): [number, number] {\n  const halfWidth = (geometry.width ?? 0) / 2;\n  const halfHeight = (geometry.height ?? 0) / 2;\n  if (halfWidth <= EPSILON || halfHeight <= EPSILON) {\n    return [...geometry.center];\n  }\n  return projectToRectangle(geometry.center, unit, halfWidth, halfHeight);\n}\n\n// eslint-disable-next-line max-statements, complexity\nfunction computeRoundedRectangleIntersection(\n  geometry: NodeGeometry,\n  unit: [number, number]\n): [number, number] {\n  const halfWidth = (geometry.width ?? 0) / 2;\n  const halfHeight = (geometry.height ?? 0) / 2;\n\n  if (halfWidth <= EPSILON || halfHeight <= EPSILON) {\n    const radius = geometry.radius ?? Math.min(halfWidth, halfHeight);\n    return projectFromCenter(geometry.center, unit, radius);\n  }\n\n  const cornerRadius = resolveCornerRadius(geometry.cornerRadius, halfWidth, halfHeight);\n\n  if (cornerRadius <= EPSILON) {\n    return projectToRectangle(geometry.center, unit, halfWidth, halfHeight);\n  }\n\n  const innerHalfWidth = Math.max(halfWidth - cornerRadius, 0);\n  const innerHalfHeight = Math.max(halfHeight - cornerRadius, 0);\n\n  if (innerHalfWidth <= EPSILON || innerHalfHeight <= EPSILON) {\n    const radius = Math.min(halfWidth, halfHeight);\n    return projectFromCenter(geometry.center, unit, radius);\n  }\n\n  const rectanglePoint = projectToRectangle(geometry.center, unit, halfWidth, halfHeight);\n  const absX = Math.abs(rectanglePoint[0] - geometry.center[0]);\n  const absY = Math.abs(rectanglePoint[1] - geometry.center[1]);\n\n  const touchesInnerFace = absX <= innerHalfWidth + EPSILON || absY <= innerHalfHeight + EPSILON;\n\n  if (\n    touchesInnerFace &&\n    intersectsInnerFaces(absX, absY, innerHalfWidth, innerHalfHeight, halfWidth, halfHeight)\n  ) {\n    return rectanglePoint;\n  }\n\n  return projectToCornerArc(\n    geometry,\n    unit,\n    innerHalfWidth,\n    innerHalfHeight,\n    cornerRadius,\n    rectanglePoint\n  );\n}\n\nfunction computeCircleIntersection(\n  geometry: NodeGeometry,\n  unit: [number, number],\n  radius?: number\n) {\n  const effectiveRadius = radius ?? geometry.radius ?? 0;\n  return projectFromCenter(geometry.center, unit, Math.max(effectiveRadius, 0));\n}\n\nconst BOUNDARY_COMPUTERS: Record<\n  GeometryNodeType,\n  (geometry: NodeGeometry, unit: [number, number]) => [number, number]\n> = {\n  circle: (geometry, unit) => computeCircleIntersection(geometry, unit),\n  marker: (geometry, unit) => computeCircleIntersection(geometry, unit),\n  rectangle: (geometry, unit) => computeRectangleIntersection(geometry, unit),\n  'rounded-rectangle': (geometry, unit) => computeRoundedRectangleIntersection(geometry, unit),\n  'path-rounded-rectangle': (geometry, unit) => computeRoundedRectangleIntersection(geometry, unit)\n};\n\nexport function getNodeBoundaryIntersection(\n  geometry: NodeGeometry,\n  targetCenter: [number, number]\n): [number, number] {\n  const direction = normalizeDirection(geometry.center, targetCenter);\n  if (!direction) {\n    return [...geometry.center];\n  }\n\n  const handler = geometry.type ? BOUNDARY_COMPUTERS[geometry.type] : undefined;\n  if (handler) {\n    return handler(geometry, direction.unit);\n  }\n\n  if (geometry.radius && geometry.radius > EPSILON) {\n    return projectFromCenter(geometry.center, direction.unit, geometry.radius);\n  }\n\n  return [...geometry.center];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {InteractionManager} from '../core/interaction-manager';\nimport type {GraphEngine} from '../core/graph-engine';\nimport type {NodeInterface} from '../graph/graph';\n\nimport {GraphStylesheetEngine, type GraphStyleRule} from '../style/graph-style-engine';\nimport type {GraphLayerNodeStyle} from '../style/graph-layer-stylesheet';\nimport {\n  getNodeBoundaryIntersection,\n  type GeometryNodeType,\n  type NodeGeometry\n} from '../utils/node-boundary';\nimport {warn} from '../utils/log';\n\ntype NumericAccessor = ((node: NodeInterface) => number) | number | null | undefined;\ntype OffsetAccessor =\n  | ((node: NodeInterface) => [number, number])\n  | [number, number]\n  | null\n  | undefined;\n\ntype NodeStyleAccessors = {\n  type: GeometryNodeType;\n  getOffset?: OffsetAccessor;\n  getRadius?: NumericAccessor;\n  getWidth?: NumericAccessor;\n  getHeight?: NumericAccessor;\n  getCornerRadius?: NumericAccessor;\n  getSize?: NumericAccessor;\n};\n\nconst GEOMETRY_NODE_TYPES: GeometryNodeType[] = [\n  'circle',\n  'rectangle',\n  'rounded-rectangle',\n  'path-rounded-rectangle',\n  'marker'\n];\n\nfunction evaluateNumericAccessor(\n  accessor: NumericAccessor,\n  node: NodeInterface\n): number | undefined {\n  if (typeof accessor === 'function') {\n    const value = accessor(node);\n    return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n  }\n  if (typeof accessor === 'number' && Number.isFinite(accessor)) {\n    return accessor;\n  }\n  return undefined;\n}\n\nfunction evaluateOffsetAccessor(accessor: OffsetAccessor, node: NodeInterface): [number, number] {\n  if (!accessor) {\n    return [0, 0];\n  }\n\n  let value = accessor as [number, number];\n  if (typeof accessor === 'function') {\n    value = accessor(node);\n  }\n\n  if (Array.isArray(value) && value.length >= 2) {\n    const offsetX = Number(value[0]);\n    const offsetY = Number(value[1]);\n    if (Number.isFinite(offsetX) && Number.isFinite(offsetY)) {\n      return [offsetX, offsetY];\n    }\n  }\n\n  return [0, 0];\n}\n\nfunction normalizePosition(value: any): [number, number] | null {\n  if (!value || typeof value !== 'object') {\n    return null;\n  }\n\n  const candidate = value as {length?: number; [index: number]: number};\n  if (typeof candidate.length === 'number' && candidate.length >= 2) {\n    const x = Number(candidate[0]);\n    const y = Number(candidate[1]);\n    if (Number.isFinite(x) && Number.isFinite(y)) {\n      return [x, y];\n    }\n  }\n\n  return null;\n}\n\nfunction resolveAccessorValue(accessor: NumericAccessor | undefined, node: NodeInterface) {\n  if (!accessor) {\n    return undefined;\n  }\n  return evaluateNumericAccessor(accessor, node);\n}\n\nfunction assignDimension(\n  geometry: NodeGeometry,\n  key: 'radius' | 'width' | 'height' | 'cornerRadius',\n  value: number | undefined\n) {\n  if (typeof value === 'number' && Number.isFinite(value)) {\n    geometry[key] = Math.max(value, 0);\n  }\n}\n\nfunction assignRectangleDimensions(\n  node: NodeInterface,\n  accessors: NodeStyleAccessors,\n  geometry: NodeGeometry\n) {\n  assignDimension(geometry, 'width', resolveAccessorValue(accessors.getWidth, node));\n  assignDimension(geometry, 'height', resolveAccessorValue(accessors.getHeight, node));\n}\n\nconst GEOMETRY_APPLIERS: Record<\n  GeometryNodeType,\n  (node: NodeInterface, accessors: NodeStyleAccessors, geometry: NodeGeometry) => void\n> = {\n  circle: (node, accessors, geometry) => {\n    assignDimension(geometry, 'radius', resolveAccessorValue(accessors.getRadius, node));\n  },\n  marker: (node, accessors, geometry) => {\n    const size = resolveAccessorValue(accessors.getSize, node);\n    assignDimension(geometry, 'radius', typeof size === 'number' ? size / 2 : undefined);\n  },\n  rectangle: (node, accessors, geometry) => {\n    assignRectangleDimensions(node, accessors, geometry);\n  },\n  'rounded-rectangle': (node, accessors, geometry) => {\n    assignRectangleDimensions(node, accessors, geometry);\n    assignDimension(\n      geometry,\n      'cornerRadius',\n      resolveAccessorValue(accessors.getCornerRadius, node)\n    );\n    assignDimension(geometry, 'radius', resolveAccessorValue(accessors.getRadius, node));\n  },\n  'path-rounded-rectangle': (node, accessors, geometry) => {\n    assignRectangleDimensions(node, accessors, geometry);\n    assignDimension(\n      geometry,\n      'cornerRadius',\n      resolveAccessorValue(accessors.getCornerRadius, node)\n    );\n  }\n};\n\nexport class EdgeAttachmentHelper {\n  getLayoutAccessor({\n    engine,\n    interactionManager,\n    nodeStyle\n  }: {\n    engine: GraphEngine;\n    interactionManager: InteractionManager;\n    nodeStyle?: GraphLayerNodeStyle[] | GraphLayerNodeStyle;\n  }) {\n    const nodeAccessorMap = this._buildNodeStyleAccessorMap({\n      engine,\n      interactionManager,\n      nodeStyle\n    });\n\n    if (nodeAccessorMap.size === 0) {\n      return (edge: any) => engine.getEdgePosition(edge);\n    }\n\n    const nodeMap = engine\n      .getNodes()\n      .reduce(\n        (acc, node) => acc.set(node.getId(), node),\n        new Map<string | number, NodeInterface>()\n      );\n\n    return (edge: any) => this._getAdjustedEdgeLayout(engine, nodeAccessorMap, nodeMap, edge);\n  }\n\n  private _buildNodeStyleAccessorMap({\n    engine,\n    interactionManager,\n    nodeStyle\n  }: {\n    engine: GraphEngine;\n    interactionManager: InteractionManager;\n    nodeStyle?: GraphLayerNodeStyle[] | GraphLayerNodeStyle;\n  }) {\n    const nodeAccessorMap = new Map<string | number, NodeStyleAccessors>();\n\n    if (!nodeStyle) {\n      return nodeAccessorMap;\n    }\n\n    const styles = Array.isArray(nodeStyle) ? nodeStyle : [nodeStyle];\n\n    styles.filter(Boolean).forEach(style => {\n      const {data = nodes => nodes, ...restStyle} = style;\n      const type = restStyle.type;\n\n      if (!type || !GEOMETRY_NODE_TYPES.includes(type as GeometryNodeType)) {\n        return;\n      }\n\n      let stylesheet: GraphStylesheetEngine | null = null;\n      try {\n        stylesheet = engine.createStylesheetEngine(restStyle as GraphStyleRule, {\n          stateUpdateTrigger: (interactionManager as any).getLastInteraction()\n        });\n      } catch (error) {\n        warn(\n          `GraphLayer: Failed to evaluate node stylesheet for edge attachment (${String(\n            (error as Error).message ?? error\n          )}).`\n        );\n        return;\n      }\n\n      const nodes = data(engine.getNodes());\n      if (!Array.isArray(nodes)) {\n        return;\n      }\n\n      const geometryType = type as GeometryNodeType;\n      const accessors = this._createAccessorsForType(geometryType, stylesheet);\n\n      nodes.forEach((node: NodeInterface) => {\n        const id = node.getId();\n        if (!nodeAccessorMap.has(id)) {\n          nodeAccessorMap.set(id, accessors);\n        }\n      });\n    });\n\n    return nodeAccessorMap;\n  }\n\n  private _getAdjustedEdgeLayout(\n    engine: GraphEngine,\n    nodeAccessorMap: Map<string | number, NodeStyleAccessors>,\n    nodeMap: Map<string | number, NodeInterface>,\n    edge: any\n  ) {\n    const layoutInfo = engine.getEdgePosition(edge);\n    if (!layoutInfo) {\n      return layoutInfo;\n    }\n\n    const sourceNode = nodeMap.get(edge.getSourceNodeId());\n    const targetNode = nodeMap.get(edge.getTargetNodeId());\n\n    if (!sourceNode || !targetNode) {\n      return layoutInfo;\n    }\n\n    const sourceGeometry = this._computeNodeGeometry(\n      engine,\n      sourceNode,\n      nodeAccessorMap.get(sourceNode.getId())\n    );\n    const targetGeometry = this._computeNodeGeometry(\n      engine,\n      targetNode,\n      nodeAccessorMap.get(targetNode.getId())\n    );\n\n    if (!sourceGeometry && !targetGeometry) {\n      return layoutInfo;\n    }\n\n    return this._applyGeometryToLayout(layoutInfo, sourceGeometry, targetGeometry);\n  }\n\n  private _applyGeometryToLayout(\n    layoutInfo: any,\n    sourceGeometry: NodeGeometry | null,\n    targetGeometry: NodeGeometry | null\n  ) {\n    const adjustedLayout = {...layoutInfo};\n\n    const targetReference = targetGeometry?.center ?? normalizePosition(layoutInfo.targetPosition);\n    const sourceReference = sourceGeometry?.center ?? normalizePosition(layoutInfo.sourcePosition);\n\n    if (sourceGeometry) {\n      adjustedLayout.sourcePosition = targetReference\n        ? getNodeBoundaryIntersection(sourceGeometry, targetReference)\n        : [...sourceGeometry.center];\n    }\n\n    if (targetGeometry) {\n      adjustedLayout.targetPosition = sourceReference\n        ? getNodeBoundaryIntersection(targetGeometry, sourceReference)\n        : [...targetGeometry.center];\n    }\n\n    return adjustedLayout;\n  }\n\n  private _createAccessorsForType(\n    geometryType: GeometryNodeType,\n    stylesheet: GraphStylesheetEngine\n  ): NodeStyleAccessors {\n    const base: NodeStyleAccessors = {\n      type: geometryType,\n      getOffset: stylesheet.getDeckGLAccessor('getOffset')\n    };\n\n    switch (geometryType) {\n      case 'circle':\n        base.getRadius = stylesheet.getDeckGLAccessor('getRadius');\n        break;\n      case 'marker':\n        base.getSize = stylesheet.getDeckGLAccessor('getSize');\n        break;\n      case 'rectangle':\n        base.getWidth = stylesheet.getDeckGLAccessor('getWidth');\n        base.getHeight = stylesheet.getDeckGLAccessor('getHeight');\n        break;\n      case 'rounded-rectangle':\n        base.getWidth = stylesheet.getDeckGLAccessor('getWidth');\n        base.getHeight = stylesheet.getDeckGLAccessor('getHeight');\n        base.getCornerRadius = stylesheet.getDeckGLAccessor('getCornerRadius');\n        base.getRadius = stylesheet.getDeckGLAccessor('getRadius');\n        break;\n      case 'path-rounded-rectangle':\n        base.getWidth = stylesheet.getDeckGLAccessor('getWidth');\n        base.getHeight = stylesheet.getDeckGLAccessor('getHeight');\n        base.getCornerRadius = stylesheet.getDeckGLAccessor('getCornerRadius');\n        break;\n      default:\n        break;\n    }\n\n    return base;\n  }\n\n  private _computeNodeGeometry(\n    engine: GraphEngine,\n    node: NodeInterface,\n    accessors?: NodeStyleAccessors\n  ): NodeGeometry | null {\n    const basePosition = engine.getNodePosition(node);\n    if (!basePosition) {\n      return null;\n    }\n\n    const offset = evaluateOffsetAccessor(accessors?.getOffset, node);\n    const center: [number, number] = [basePosition[0] + offset[0], basePosition[1] + offset[1]];\n\n    const geometry: NodeGeometry = {\n      type: accessors?.type,\n      center\n    };\n\n    if (!accessors || !accessors.type) {\n      return geometry;\n    }\n\n    const applier = GEOMETRY_APPLIERS[accessors.type];\n    if (applier) {\n      applier(node, accessors, geometry);\n    }\n\n    return geometry;\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, type CompositeLayerProps, type UpdateParameters} from '@deck.gl/core';\nimport {LineLayer, TextLayer} from '@deck.gl/layers';\n\nexport type GridLineDatum = {\n  /** Optional label associated with the grid line. */\n  label?: string | number;\n  /** Horizontal grid lines use the yPosition value. */\n  yPosition?: number | null;\n  /** Vertical grid lines use the xPosition value. */\n  xPosition?: number | null;\n};\n\nexport type GridLayerProps<DatumT extends GridLineDatum = GridLineDatum> = CompositeLayerProps & {\n  /** Collection of grid line definitions. */\n  data: readonly DatumT[];\n  /** Direction in which to draw grid lines. */\n  direction?: 'horizontal' | 'vertical';\n  /** Minimum X coordinate for grid lines. */\n  xMin?: number;\n  /** Maximum X coordinate for grid lines. */\n  xMax?: number;\n  /** Minimum Y coordinate for grid lines. */\n  yMin?: number;\n  /** Maximum Y coordinate for grid lines. */\n  yMax?: number;\n  /** Width of the grid lines in screen pixels. */\n  width?: number;\n  /** RGBA color for grid lines. */\n  color?: [number, number, number, number];\n  /** Optional accessor for line labels. */\n  getLabel?: (d: DatumT) => string | number | null | undefined;\n  /** Optional accessor for per-datum colors. */\n  getColor?: (d: DatumT) => [number, number, number, number] | null | undefined;\n  /** Optional accessor for per-datum widths. */\n  getWidth?: (d: DatumT) => number | null | undefined;\n  /** Whether to render labels alongside the grid lines. */\n  showLabels?: boolean;\n  /** Pixel offset applied to rendered labels. */\n  labelOffset?: [number, number];\n};\n\nconst DEFAULT_COLOR: [number, number, number, number] = [200, 200, 200, 255];\nconst DEFAULT_WIDTH = 1;\nconst DEFAULT_OFFSET: [number, number] = [8, 0];\nconst DEFAULT_MIN = -1e6;\nconst DEFAULT_MAX = 1e6;\n\nexport class GridLayer<DatumT extends GridLineDatum = GridLineDatum> extends CompositeLayer<\n  GridLayerProps<DatumT>\n> {\n  static override layerName = 'GridLayer';\n\n  static override defaultProps: Required<\n    Pick<\n      GridLayerProps<GridLineDatum>,\n      | 'direction'\n      | 'width'\n      | 'color'\n      | 'xMin'\n      | 'xMax'\n      | 'yMin'\n      | 'yMax'\n      | 'showLabels'\n      | 'labelOffset'\n    >\n  > = {\n    direction: 'horizontal',\n    width: DEFAULT_WIDTH,\n    color: DEFAULT_COLOR,\n    xMin: DEFAULT_MIN,\n    xMax: DEFAULT_MAX,\n    yMin: DEFAULT_MIN,\n    yMax: DEFAULT_MAX,\n    showLabels: true,\n    labelOffset: DEFAULT_OFFSET\n  } as const;\n\n  override shouldUpdateState(params: UpdateParameters<this>): boolean {\n    const {changeFlags} = params;\n    return Boolean(\n      changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.viewportChanged\n    );\n  }\n\n  override renderLayers() {\n    const {\n      data,\n      direction = 'horizontal',\n      xMin = DEFAULT_MIN,\n      xMax = DEFAULT_MAX,\n      yMin = DEFAULT_MIN,\n      yMax = DEFAULT_MAX,\n      color = DEFAULT_COLOR,\n      width = DEFAULT_WIDTH,\n      getLabel,\n      getColor,\n      getWidth,\n      showLabels = true,\n      labelOffset = DEFAULT_OFFSET\n    } = this.props;\n\n    const bounds = this._resolveViewportBounds({xMin, xMax, yMin, yMax});\n    const lines = this._createLineSegments(data, direction, bounds);\n\n    if (!lines.length) {\n      return [];\n    }\n\n    const lineLayer = new LineLayer({\n      id: `${this.props.id}-lines`,\n      data: lines,\n      getSourcePosition: d => d.sourcePosition,\n      getTargetPosition: d => d.targetPosition,\n      getColor: getColor ? d => getColor(d.datum) ?? color : () => color,\n      getWidth: getWidth ? d => getWidth(d.datum) ?? width : () => width,\n      widthUnits: 'pixels',\n      parameters: {\n        depthTest: false\n      }\n    });\n\n    if (!showLabels) {\n      return [lineLayer];\n    }\n\n    const textData = this._createLabelData(lines, direction, bounds, getLabel);\n\n    if (!textData.length) {\n      return [lineLayer];\n    }\n\n    const textLayer = new TextLayer({\n      id: `${this.props.id}-labels`,\n      data: textData,\n      characterSet: 'auto',\n      getPosition: d => d.position,\n      getText: d => d.text,\n      getColor: getColor ? d => getColor(d.datum) ?? color : () => color,\n      getSize: 12,\n      sizeUnits: 'pixels',\n      getPixelOffset: labelOffset,\n      getTextAnchor: () => 'start',\n      getAlignmentBaseline: () => 'center',\n      background: true,\n      backgroundPadding: [4, 2],\n      backgroundColor: [255, 255, 255, 200],\n      parameters: {\n        depthTest: false\n      }\n    });\n\n    return [lineLayer, textLayer];\n  }\n\n  private _resolveViewportBounds(bounds: {\n    xMin: number;\n    xMax: number;\n    yMin: number;\n    yMax: number;\n  }): {minX: number; maxX: number; minY: number; maxY: number} {\n    const viewportBounds = this.context?.viewport?.getBounds?.();\n    if (!Array.isArray(viewportBounds) || viewportBounds.length !== 4) {\n      return {minX: bounds.xMin, maxX: bounds.xMax, minY: bounds.yMin, maxY: bounds.yMax};\n    }\n\n    const [bxMin, byMin, bxMax, byMax] = viewportBounds;\n    const minX =\n      Number.isFinite(bxMin) && Number.isFinite(bxMax) ? Math.min(bounds.xMin, bxMin) : bounds.xMin;\n    const maxX =\n      Number.isFinite(bxMin) && Number.isFinite(bxMax) ? Math.max(bounds.xMax, bxMax) : bounds.xMax;\n    const minY =\n      Number.isFinite(byMin) && Number.isFinite(byMax) ? Math.min(bounds.yMin, byMin) : bounds.yMin;\n    const maxY =\n      Number.isFinite(byMin) && Number.isFinite(byMax) ? Math.max(bounds.yMax, byMax) : bounds.yMax;\n\n    return {minX, maxX, minY, maxY};\n  }\n\n  private _createLineSegments(\n    data: readonly DatumT[],\n    direction: 'horizontal' | 'vertical',\n    bounds: {minX: number; maxX: number; minY: number; maxY: number}\n  ): Array<{\n    sourcePosition: [number, number];\n    targetPosition: [number, number];\n    datum: DatumT;\n  }> {\n    const segments: Array<{\n      sourcePosition: [number, number];\n      targetPosition: [number, number];\n      datum: DatumT;\n    }> = [];\n\n    const isHorizontal = direction === 'horizontal';\n    for (const datum of data) {\n      const position = isHorizontal ? datum.yPosition : datum.xPosition;\n      if (typeof position === 'number' && Number.isFinite(position)) {\n        if (isHorizontal) {\n          segments.push({\n            sourcePosition: [bounds.minX, position],\n            targetPosition: [bounds.maxX, position],\n            datum\n          });\n        } else {\n          segments.push({\n            sourcePosition: [position, bounds.minY],\n            targetPosition: [position, bounds.maxY],\n            datum\n          });\n        }\n      }\n    }\n\n    return segments;\n  }\n\n  private _createLabelData(\n    lines: Array<{\n      sourcePosition: [number, number];\n      targetPosition: [number, number];\n      datum: DatumT;\n    }>,\n    direction: 'horizontal' | 'vertical',\n    bounds: {minX: number; maxX: number; minY: number; maxY: number},\n    getLabel?: (datum: DatumT) => string | number | null | undefined\n  ): Array<{position: [number, number]; text: string; datum: DatumT}> {\n    const labels: Array<{position: [number, number]; text: string; datum: DatumT}> = [];\n    const isHorizontal = direction === 'horizontal';\n\n    for (const {datum, sourcePosition} of lines) {\n      const rawLabel = getLabel ? getLabel(datum) : (datum.label ?? null);\n      if (rawLabel !== null && rawLabel !== undefined && rawLabel !== '') {\n        const [sx, sy] = sourcePosition;\n        const position: [number, number] = isHorizontal ? [bounds.minX, sy] : [sx, bounds.minY];\n        labels.push({position, text: String(rawLabel), datum});\n      }\n    }\n\n    return labels;\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const mixedGetPosition = (getPosition, getOffset) => {\n  if (!getOffset) {\n    return getPosition;\n  }\n\n  if (typeof getOffset === 'function') {\n    return d => {\n      const [x, y] = getPosition(d);\n      const [offX, offY] = getOffset(d);\n      return [x + offX, y + offY];\n    };\n  }\n\n  const [offX, offY] = getOffset;\n  return d => {\n    const [x, y] = getPosition(d);\n    return [x + offX, y + offY];\n  };\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {GraphEngine} from '../core/graph-engine';\nimport type {NodeInterface} from '../graph/graph';\n\nconst OUTLINE_PADDING = 24;\nconst OUTLINE_CORNER_RADIUS = 16;\nconst OUTLINE_CORNER_SEGMENTS = 6;\n\nexport type ChainInteractionSource =\n  | 'node'\n  | 'collapsed-marker'\n  | 'expanded-marker'\n  | 'collapsed-outline'\n  | 'expanded-outline';\n\nfunction resolveLayerId(layer: any): string {\n  if (!layer) {\n    return '';\n  }\n  if (typeof layer.id === 'string') {\n    return layer.id;\n  }\n  if (typeof layer.props?.id === 'string') {\n    return layer.props.id;\n  }\n  return '';\n}\n\nfunction classifyChainLayer(layer: any): ChainInteractionSource | null {\n  let current = layer ?? null;\n  while (current) {\n    const layerId = resolveLayerId(current);\n    if (layerId.includes('collapsed-chain-markers')) {\n      return 'collapsed-marker';\n    }\n    if (layerId.includes('expanded-chain-markers')) {\n      return 'expanded-marker';\n    }\n    if (layerId.includes('collapsed-chain-outlines')) {\n      return 'collapsed-outline';\n    }\n    if (layerId.includes('expanded-chain-outlines')) {\n      return 'expanded-outline';\n    }\n    current = current.parent ?? null;\n  }\n  return null;\n}\n\nexport function resolveChainInteractionSource(info: any): ChainInteractionSource {\n  if (!info) {\n    return 'node';\n  }\n\n  const layersToCheck = [] as any[];\n  if (info.layer || info.sourceLayer) {\n    if (info.layer) {\n      layersToCheck.push(info.layer);\n    }\n    if (info.sourceLayer && info.sourceLayer !== info.layer) {\n      layersToCheck.push(info.sourceLayer);\n    }\n  } else {\n    layersToCheck.push(info);\n  }\n\n  for (const layer of layersToCheck) {\n    const classification = classifyChainLayer(layer);\n    if (classification) {\n      return classification;\n    }\n  }\n\n  return 'node';\n}\n\nfunction isChainRepresentative(node: NodeInterface): boolean {\n  const chainId = node.getPropertyValue('collapsedChainId');\n  const nodeIds = node.getPropertyValue('collapsedNodeIds');\n  const representativeId = node.getPropertyValue('collapsedChainRepresentativeId');\n\n  return (\n    Boolean(chainId) &&\n    Array.isArray(nodeIds) &&\n    nodeIds.length > 1 &&\n    representativeId === node.getId()\n  );\n}\n\nexport function getRepresentativeNodes(engine: GraphEngine | null | undefined): NodeInterface[] {\n  if (!engine) {\n    return [];\n  }\n\n  return engine.getNodes().filter(node => isChainRepresentative(node));\n}\n\nexport type ChainOutlineGetter = (node: NodeInterface) => [number, number][] | null;\n\nexport function createChainOutlineGetter(\n  engine: GraphEngine | null | undefined\n): ChainOutlineGetter {\n  if (!engine) {\n    return () => null;\n  }\n\n  const cache = new Map<string, [number, number][] | null>();\n\n  // eslint-disable-next-line max-statements, complexity\n  return (node: NodeInterface): [number, number][] | null => {\n    const chainId = node.getPropertyValue('collapsedChainId');\n    if (!chainId) {\n      return null;\n    }\n\n    const cacheKey = String(chainId);\n    if (cache.has(cacheKey)) {\n      return cache.get(cacheKey) ?? null;\n    }\n\n    const collapsedNodeIds = node.getPropertyValue('collapsedNodeIds');\n    if (!Array.isArray(collapsedNodeIds) || collapsedNodeIds.length === 0) {\n      cache.set(cacheKey, null);\n      return null;\n    }\n\n    let minX = Number.POSITIVE_INFINITY;\n    let maxX = Number.NEGATIVE_INFINITY;\n    let minY = Number.POSITIVE_INFINITY;\n    let maxY = Number.NEGATIVE_INFINITY;\n\n    for (const nodeId of collapsedNodeIds) {\n      const chainNode = engine.findNode(nodeId);\n      if (chainNode) {\n        const position = engine.getNodePosition(chainNode);\n        if (position) {\n          const [x, y] = position;\n          minX = Math.min(minX, x);\n          maxX = Math.max(maxX, x);\n          minY = Math.min(minY, y);\n          maxY = Math.max(maxY, y);\n        }\n      }\n    }\n\n    if (\n      !Number.isFinite(minX) ||\n      !Number.isFinite(maxX) ||\n      !Number.isFinite(minY) ||\n      !Number.isFinite(maxY)\n    ) {\n      cache.set(cacheKey, null);\n      return null;\n    }\n\n    const paddedMinX = minX - OUTLINE_PADDING;\n    const paddedMaxX = maxX + OUTLINE_PADDING;\n    const paddedMinY = minY - OUTLINE_PADDING;\n    const paddedMaxY = maxY + OUTLINE_PADDING;\n\n    const width = paddedMaxX - paddedMinX;\n    const height = paddedMaxY - paddedMinY;\n\n    if (width <= 0 || height <= 0) {\n      cache.set(cacheKey, null);\n      return null;\n    }\n\n    const radius = Math.min(OUTLINE_CORNER_RADIUS, width / 2, height / 2);\n\n    if (radius <= 0) {\n      const polygon: [number, number][] = [\n        [paddedMinX, paddedMinY],\n        [paddedMinX, paddedMaxY],\n        [paddedMaxX, paddedMaxY],\n        [paddedMaxX, paddedMinY],\n        [paddedMinX, paddedMinY]\n      ];\n      cache.set(cacheKey, polygon);\n      return polygon;\n    }\n\n    const left = paddedMinX;\n    const right = paddedMaxX;\n    const top = paddedMinY;\n    const bottom = paddedMaxY;\n\n    const polygon: [number, number][] = [];\n    const pushArc = (cx: number, cy: number, startAngle: number, endAngle: number) => {\n      const step = (endAngle - startAngle) / OUTLINE_CORNER_SEGMENTS;\n      for (let i = 1; i <= OUTLINE_CORNER_SEGMENTS; i++) {\n        const angle = startAngle + step * i;\n        polygon.push([cx + radius * Math.cos(angle), cy + radius * Math.sin(angle)]);\n      }\n    };\n\n    polygon.push([right - radius, top]);\n    pushArc(right - radius, top + radius, -Math.PI / 2, 0);\n    polygon.push([right, bottom - radius]);\n    pushArc(right - radius, bottom - radius, 0, Math.PI / 2);\n    polygon.push([left + radius, bottom]);\n    pushArc(left + radius, bottom - radius, Math.PI / 2, Math.PI);\n    polygon.push([left, top + radius]);\n    pushArc(left + radius, top + radius, Math.PI, (3 * Math.PI) / 2);\n    polygon.push(polygon[0]);\n\n    cache.set(cacheKey, polygon);\n    return polygon;\n  };\n}\n\nexport interface CollapsedChainLayerData {\n  representativeNodes: NodeInterface[];\n  collapsedNodes: NodeInterface[];\n  collapsedOutlineNodes: NodeInterface[];\n  expandedNodes: NodeInterface[];\n  expandedOutlineNodes: NodeInterface[];\n  getChainOutlinePolygon: ChainOutlineGetter;\n  outlineUpdateTrigger: string;\n}\n\nexport function buildCollapsedChainLayers(\n  engine: GraphEngine | null | undefined\n): CollapsedChainLayerData | null {\n  if (!engine) {\n    return null;\n  }\n\n  const representativeNodes = getRepresentativeNodes(engine);\n  if (representativeNodes.length === 0) {\n    return null;\n  }\n\n  const getChainOutlinePolygon = createChainOutlineGetter(engine);\n  const outlineUpdateTrigger = [engine.getLayoutLastUpdate(), engine.getLayoutState()].join();\n\n  const collapsedNodes = representativeNodes.filter(node =>\n    Boolean(node.getPropertyValue('isCollapsedChain'))\n  );\n  const collapsedOutlineNodes = collapsedNodes.filter(node => getChainOutlinePolygon(node));\n\n  const expandedNodes = representativeNodes.filter(\n    node => !node.getPropertyValue('isCollapsedChain')\n  );\n  const expandedOutlineNodes = expandedNodes.filter(node => getChainOutlinePolygon(node));\n\n  return {\n    representativeNodes,\n    collapsedNodes,\n    collapsedOutlineNodes,\n    expandedNodes,\n    expandedOutlineNodes,\n    getChainOutlinePolygon,\n    outlineUpdateTrigger\n  };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {EdgeState, NodeState} from './constants';\nimport {GraphEngine} from './graph-engine';\nimport type {EdgeInterface, NodeInterface} from '../graph/graph';\nimport {log} from '../utils/log';\nimport {\n  resolveChainInteractionSource,\n  type ChainInteractionSource\n} from '../utils/collapsed-chains';\n\nexport {resolveChainInteractionSource};\nexport type {ChainInteractionSource};\n\nexport function shouldToggleCollapsedChain(\n  isCollapsed: boolean,\n  source: ChainInteractionSource\n): boolean {\n  if (isCollapsed) {\n    return true;\n  }\n  return source === 'expanded-marker' || source === 'expanded-outline';\n}\n\nconst NODE_TO_EDGE_STATE_MAP: Record<NodeState, EdgeState> = {\n  default: 'default',\n  hover: 'hover',\n  dragging: 'dragging',\n  selected: 'selected'\n};\n\nfunction shouldEdgeBeSelected(edge: EdgeInterface): boolean {\n  return edge\n    .getConnectedNodes()\n    .some(node => node.getState() === 'selected' && node.shouldHighlightConnectedEdges());\n}\n\nfunction setNodeState(node: NodeInterface, state: NodeState) {\n  node.setState(state);\n  if (node.shouldHighlightConnectedEdges()) {\n    node.getConnectedEdges().forEach(edge => {\n      let newEdgeState = NODE_TO_EDGE_STATE_MAP[state];\n      if (shouldEdgeBeSelected(edge)) {\n        newEdgeState = 'selected';\n      }\n      edge.setState(newEdgeState);\n    });\n  }\n}\n\ninterface EventMap {\n  onClick?: (info: unknown, event: Event) => void;\n  onHover?: (info: unknown) => void;\n  onMouseEnter?: (info: unknown) => void;\n  onMouseLeave?: (node: NodeInterface) => void;\n  onDragStart?: (info: unknown) => void;\n  onDrag?: (info: unknown) => void;\n  onDragEnd?: (info: unknown) => void;\n}\n\nexport interface InteractionManagerProps {\n  nodeEvents?: EventMap;\n  edgeEvents?: EventMap;\n  engine: GraphEngine;\n  enableDragging: boolean;\n  resumeLayoutAfterDragging: boolean;\n}\n\nexport class InteractionManager {\n  public notifyCallback: Function;\n  private _lastInteraction = 0;\n  private _lastHoveredNode: NodeInterface | null = null;\n  private _lastSelectedNode: NodeInterface | null = null;\n\n  public nodeEvents: EventMap = undefined!;\n  public edgeEvents: EventMap = undefined!;\n  public engine: GraphEngine = undefined!;\n  public enableDragging: boolean = undefined!;\n  public resumeLayoutAfterDragging: boolean = undefined!;\n\n  constructor(props: InteractionManagerProps, notifyCallback: Function) {\n    this.updateProps(props);\n    this.notifyCallback = notifyCallback;\n\n    // internal state\n    this._lastInteraction = 0;\n    this._lastHoveredNode = null;\n    this._lastSelectedNode = null;\n  }\n\n  updateProps({\n    nodeEvents = {},\n    edgeEvents = {},\n    engine,\n    enableDragging,\n    resumeLayoutAfterDragging\n  }: InteractionManagerProps): void {\n    this.nodeEvents = nodeEvents;\n    this.edgeEvents = edgeEvents;\n    this.engine = engine;\n    this.enableDragging = enableDragging;\n    this.resumeLayoutAfterDragging = resumeLayoutAfterDragging;\n  }\n\n  getLastInteraction(): number {\n    return this._lastInteraction;\n  }\n\n  // eslint-disable-next-line max-statements, complexity\n  onClick(info, event): void {\n    const {object} = info;\n\n    if (!object) {\n      return;\n    }\n\n    if (object.isNode) {\n      const node = object as NodeInterface;\n      const chainId = node.getPropertyValue('collapsedChainId');\n      const collapsedNodeIds = node.getPropertyValue('collapsedNodeIds');\n      const representativeId = node.getPropertyValue('collapsedChainRepresentativeId');\n      const isCollapsed = Boolean(node.getPropertyValue('isCollapsedChain'));\n      const hasChainMetadata =\n        chainId !== null &&\n        chainId !== undefined &&\n        Array.isArray(collapsedNodeIds) &&\n        collapsedNodeIds.length > 1 &&\n        representativeId !== null &&\n        representativeId !== undefined;\n      const isRepresentative = hasChainMetadata && representativeId === node.getId();\n\n      if (hasChainMetadata && isRepresentative) {\n        const layout: any = this.engine?.props?.layout;\n        if (layout && typeof layout.toggleCollapsedChain === 'function') {\n          const interactionSource = resolveChainInteractionSource(info ?? null);\n\n          // eslint-disable-next-line max-depth\n          if (shouldToggleCollapsedChain(isCollapsed, interactionSource)) {\n            const action = isCollapsed ? 'expand' : 'collapse';\n            const chainIdStr = String(chainId);\n            log.log(\n              0,\n              `InteractionManager: ${action} chain ${chainIdStr} via ${interactionSource}`\n            );\n            // eslint-disable-next-line no-console\n            console.log(\n              `InteractionManager: ${action} chain ${chainIdStr} via ${interactionSource}`\n            );\n            layout.toggleCollapsedChain(chainIdStr);\n            this._lastInteraction = Date.now();\n            this.notifyCallback();\n            // eslint-disable-next-line max-depth\n            if (this.nodeEvents.onClick) {\n              this.nodeEvents.onClick(info, event);\n            }\n            return;\n          }\n        }\n      }\n\n      if (node.isSelectable()) {\n        if (this._lastSelectedNode) {\n          setNodeState(this._lastSelectedNode, 'default');\n        }\n        setNodeState(node, 'selected');\n        this._lastSelectedNode = node;\n        this._lastInteraction = Date.now();\n        this.notifyCallback();\n      }\n\n      if (this.nodeEvents.onClick) {\n        this.nodeEvents.onClick(info, event);\n      }\n    }\n\n    if ((object as EdgeInterface).isEdge && this.edgeEvents.onClick) {\n      this.edgeEvents.onClick(info, event);\n    }\n  }\n\n  _mouseLeaveNode(): void {\n    const lastHoveredNode = this._lastHoveredNode;\n\n    if (!(lastHoveredNode.isSelectable() && lastHoveredNode.getState() === 'selected')) {\n      // reset the last hovered node's state\n      const lastSelectedId = this._lastSelectedNode?.getId();\n      const lastHoveredId = this._lastHoveredNode?.getId();\n      const newState =\n        lastSelectedId !== undefined && lastSelectedId === lastHoveredId ? 'selected' : 'default';\n      setNodeState(lastHoveredNode, newState);\n    }\n    // trigger the callback if exists\n    if (this.nodeEvents.onMouseLeave) {\n      this.nodeEvents.onMouseLeave(lastHoveredNode);\n    }\n  }\n\n  _mouseEnterNode(info): void {\n    // set the node's state to hover\n    setNodeState(info.object as NodeInterface, 'hover');\n    // trigger the callback if exists\n    if (this.nodeEvents.onMouseEnter) {\n      this.nodeEvents.onMouseEnter(info);\n    }\n    if (this.nodeEvents.onHover) {\n      this.nodeEvents.onHover(info);\n    }\n  }\n\n  onHover(info, event) {\n    if (!info.object) {\n      if (this._lastHoveredNode) {\n        this._mouseLeaveNode();\n        this._lastInteraction = Date.now();\n        this._lastHoveredNode = null;\n        this.notifyCallback();\n      }\n      return;\n    }\n\n    // hover over on a node\n    if (info.object.isNode) {\n      const lastHoveredId = this._lastHoveredNode?.getId();\n      const currentId = (info.object as NodeInterface).getId();\n      const isSameNode = lastHoveredId !== undefined && lastHoveredId === currentId;\n      // stay in the same node\n      if (isSameNode) {\n        return;\n      }\n      if (this._lastHoveredNode) {\n        // reset the previous hovered node's state if not the same node\n        this._mouseLeaveNode();\n      }\n      // enter new node\n      this._mouseEnterNode(info);\n      this._lastInteraction = Date.now();\n      this._lastHoveredNode = info.object;\n      this.notifyCallback();\n    }\n    if (info.object.isEdge && this.edgeEvents.onHover) {\n      this.edgeEvents.onHover(info);\n    }\n  }\n\n  onDragStart(info, event) {\n    if (this.nodeEvents.onDragStart) {\n      this.nodeEvents.onDragStart(info);\n    }\n  }\n\n  onDrag(info, event) {\n    if (!info.object.isNode || !this.enableDragging) {\n      return;\n    }\n    event.stopImmediatePropagation();\n\n    // info.viewport is undefined when the object is offscreen, so we use viewport from onDragStart\n    const coordinates = info.layer.context.viewport.unproject([info.x, info.y]);\n\n    // limit the node position to be within bounds of the viewport\n    const bounds = info.layer.context.viewport.getBounds(); // [minX, minY, maxX, maxY]\n    const x = Math.min(Math.max(coordinates[0], bounds[0]), bounds[2]);\n    const y = Math.min(Math.max(coordinates[1], bounds[1]), bounds[3]);\n    this.engine.lockNodePosition(info.object as NodeInterface, x, y);\n\n    setNodeState(info.object as NodeInterface, 'dragging');\n    this._lastInteraction = Date.now();\n    this.notifyCallback();\n    if (this.nodeEvents.onDrag) {\n      this.nodeEvents.onDrag(info);\n    }\n  }\n\n  onDragEnd(info, event) {\n    if (!info.object.isNode || !this.enableDragging) {\n      return;\n    }\n    if (this.resumeLayoutAfterDragging) {\n      this.engine.resume();\n    }\n    setNodeState(info.object as NodeInterface, 'default');\n    this.engine.unlockNodePosition(info.object as NodeInterface);\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Node} from '../graph/node';\n\nexport type RankAccessor = string | ((node: Node) => number | null | undefined);\nexport type LabelAccessor = string | ((node: Node) => string | number | null | undefined);\n\nexport type RankPosition = {\n  rank: number;\n  yPosition: number;\n  label: string | number;\n};\n\nexport type MapRanksToYPositionsOptions = {\n  rankAccessor?: RankAccessor;\n  labelAccessor?: LabelAccessor;\n  /** Optional target range for the computed y positions. */\n  yRange?: {min?: number; max?: number};\n};\n\ntype RankAggregate = {sum: number; count: number; label: string | number | null};\n\ntype RankAggregateState = {\n  aggregates: Map<number, RankAggregate>;\n  range: {min: number; max: number};\n};\n\nfunction distributeEvenSpacing(positions: RankPosition[], start: number, end: number) {\n  const count = positions.length;\n  if (count === 0) {\n    return;\n  }\n\n  if (count === 1) {\n    positions[0].yPosition = start;\n    return;\n  }\n\n  const step = (end - start) / (count - 1);\n  for (let i = 0; i < count; i++) {\n    positions[i].yPosition = start + step * i;\n  }\n}\n\nfunction fallbackMonotonicSpacing(positions: RankPosition[]) {\n  if (positions.length === 0) {\n    return;\n  }\n\n  let previous = positions[0].yPosition;\n  for (let i = 1; i < positions.length; i++) {\n    const current = positions[i].yPosition;\n    if (!(current > previous)) {\n      previous += 1;\n      positions[i].yPosition = previous;\n    } else {\n      previous = current;\n    }\n  }\n}\n\nfunction enforceMonotonicPositions(positions: RankPosition[], range: {min: number; max: number}) {\n  if (positions.length === 0) {\n    return;\n  }\n\n  const hasFiniteMin = Number.isFinite(range.min);\n  const hasFiniteMax = Number.isFinite(range.max);\n\n  if (positions.length === 1) {\n    if (hasFiniteMin) {\n      positions[0].yPosition = range.min;\n    }\n    return;\n  }\n\n  if (hasFiniteMin && hasFiniteMax && range.max > range.min) {\n    distributeEvenSpacing(positions, range.min, range.max);\n    return;\n  }\n\n  if (hasFiniteMin) {\n    positions[0].yPosition = range.min;\n  }\n\n  fallbackMonotonicSpacing(positions);\n}\n\nfunction resolveTargetRange(\n  range: {min: number; max: number},\n  override?: {min?: number; max?: number}\n): {min: number; max: number} {\n  const overrideMin =\n    typeof override?.min === 'number' && Number.isFinite(override.min) ? override.min : undefined;\n  const overrideMax =\n    typeof override?.max === 'number' && Number.isFinite(override.max) ? override.max : undefined;\n\n  const candidateMin = overrideMin ?? range.min;\n  const candidateMax = overrideMax ?? range.max;\n\n  const min = Number.isFinite(candidateMin) ? candidateMin : range.min;\n  const max = Number.isFinite(candidateMax) ? candidateMax : range.max;\n\n  return {min, max};\n}\n\nfunction accumulateRank(\n  node: Node,\n  getRank: (node: Node) => number | null,\n  getLabel: (node: Node) => string | number | null,\n  getPosition: (node: Node) => [number, number] | null | undefined,\n  state: RankAggregateState\n) {\n  const {aggregates, range} = state;\n  const rank = getRank(node);\n  if (typeof rank !== 'number' || !Number.isFinite(rank)) {\n    return;\n  }\n\n  const position = getPosition(node);\n  if (!position) {\n    return;\n  }\n\n  const [, y] = position;\n  if (typeof y !== 'number' || !Number.isFinite(y)) {\n    return;\n  }\n\n  const entry = aggregates.get(rank) ?? {sum: 0, count: 0, label: null};\n  entry.sum += y;\n  entry.count += 1;\n\n  if (entry.label === null) {\n    const label = getLabel(node);\n    if (label !== null) {\n      entry.label = label;\n    }\n  }\n\n  aggregates.set(rank, entry);\n  range.min = Math.min(range.min, y);\n  range.max = Math.max(range.max, y);\n}\n\nfunction normalizeRankAccessor(accessor: RankAccessor | undefined): (node: Node) => number | null {\n  if (!accessor) {\n    return (node: Node) => {\n      const value = node.getPropertyValue('srank');\n      if (typeof value === 'number' && Number.isFinite(value)) {\n        return value;\n      }\n      if (typeof value === 'string') {\n        const parsed = Number(value);\n        return Number.isFinite(parsed) ? parsed : null;\n      }\n      return null;\n    };\n  }\n\n  if (typeof accessor === 'function') {\n    return (node: Node) => {\n      const value = accessor(node);\n      if (typeof value === 'number' && Number.isFinite(value)) {\n        return value;\n      }\n      if (typeof value === 'string') {\n        const parsed = Number(value);\n        return Number.isFinite(parsed) ? parsed : null;\n      }\n      return null;\n    };\n  }\n\n  return (node: Node) => {\n    const value = node.getPropertyValue(accessor);\n    if (typeof value === 'number' && Number.isFinite(value)) {\n      return value;\n    }\n    if (typeof value === 'string') {\n      const parsed = Number(value);\n      return Number.isFinite(parsed) ? parsed : null;\n    }\n    return null;\n  };\n}\n\nfunction normalizeLabelAccessor(\n  accessor: LabelAccessor | undefined\n): (node: Node) => string | number | null {\n  if (!accessor) {\n    return (node: Node) => {\n      const value = node.getPropertyValue('rankLabel');\n      if (value === undefined || value === null || value === '') {\n        return null;\n      }\n      if (typeof value === 'number' || typeof value === 'string') {\n        return value;\n      }\n      return null;\n    };\n  }\n\n  if (typeof accessor === 'function') {\n    return (node: Node) => {\n      const value = accessor(node);\n      if (value === undefined || value === null || value === '') {\n        return null;\n      }\n      if (typeof value === 'number' || typeof value === 'string') {\n        return value;\n      }\n      return null;\n    };\n  }\n\n  return (node: Node) => {\n    const value = node.getPropertyValue(accessor);\n    if (value === undefined || value === null || value === '') {\n      return null;\n    }\n    if (typeof value === 'number' || typeof value === 'string') {\n      return value;\n    }\n    return null;\n  };\n}\n\n/**\n * Builds a mapping from rank identifiers to averaged y positions.\n */\nexport function mapRanksToYPositions(\n  nodes: Iterable<Node>,\n  getPosition: (node: Node) => [number, number] | null | undefined,\n  options?: MapRanksToYPositionsOptions\n): RankPosition[] {\n  const getRank = normalizeRankAccessor(options?.rankAccessor);\n  const getLabel = normalizeLabelAccessor(options?.labelAccessor);\n\n  const state: RankAggregateState = {\n    aggregates: new Map<number, RankAggregate>(),\n    range: {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY}\n  };\n\n  for (const node of nodes) {\n    accumulateRank(node, getRank, getLabel, getPosition, state);\n  }\n\n  const {aggregates, range} = state;\n  const positions: RankPosition[] = Array.from(aggregates.entries()).map(\n    ([rank, {sum, count, label}]) => ({\n      rank,\n      yPosition: count ? sum / count : 0,\n      label: label ?? rank\n    })\n  );\n\n  positions.sort((a, b) => a.rank - b.rank);\n\n  const needsRemap = positions.some(\n    (entry, index) => index > 0 && entry.yPosition <= positions[index - 1].yPosition\n  );\n  if (needsRemap) {\n    const targetRange = resolveTargetRange(range, options?.yRange);\n    enforceMonotonicPositions(positions, targetRange);\n  }\n\n  return positions;\n}\n\nexport type SelectRankLinesOptions = {\n  yMin: number;\n  yMax: number;\n  maxCount?: number;\n};\n\nfunction locateInsertionIndex(ranks: RankPosition[], target: number): number {\n  let low = 0;\n  let high = ranks.length - 1;\n\n  while (low < high) {\n    const mid = Math.floor((low + high) / 2);\n    if (ranks[mid].yPosition < target) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n\n  return low;\n}\n\nfunction pickNearestAvailableIndex(\n  ranks: RankPosition[],\n  target: number,\n  startIndex: number,\n  used: Set<number>\n): number {\n  let bestIndex = -1;\n  let bestDistance = Number.POSITIVE_INFINITY;\n\n  const consider = (index: number) => {\n    if (index < 0 || index >= ranks.length || used.has(index)) {\n      return;\n    }\n    const distance = Math.abs(ranks[index].yPosition - target);\n    const isCloser = distance < bestDistance;\n    const isTie = distance === bestDistance && bestIndex !== -1;\n    if (\n      isCloser ||\n      (isTie && (ranks[index].yPosition < ranks[bestIndex].yPosition || index < bestIndex))\n    ) {\n      bestDistance = distance;\n      bestIndex = index;\n    }\n  };\n\n  consider(startIndex);\n  consider(startIndex - 1);\n\n  for (\n    let offset = 1;\n    bestIndex === -1 && (startIndex - offset >= 0 || startIndex + offset < ranks.length);\n    offset++\n  ) {\n    consider(startIndex - offset);\n    consider(startIndex + offset);\n  }\n\n  return bestIndex;\n}\n\nfunction findFallbackIndex(ranks: RankPosition[], used: Set<number>): number {\n  for (let i = 0; i < ranks.length; i++) {\n    if (!used.has(i)) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nfunction findClosestAvailableIndex(\n  ranks: RankPosition[],\n  target: number,\n  used: Set<number>\n): number {\n  if (ranks.length === 0) {\n    return -1;\n  }\n\n  const insertionIndex = locateInsertionIndex(ranks, target);\n  const nearest = pickNearestAvailableIndex(ranks, target, insertionIndex, used);\n  if (nearest !== -1) {\n    return nearest;\n  }\n\n  const fallback = findFallbackIndex(ranks, used);\n  if (fallback !== -1) {\n    return fallback;\n  }\n\n  return Math.min(Math.max(insertionIndex, 0), ranks.length - 1);\n}\n\nfunction computeTargetRatios(count: number): number[] {\n  if (count <= 1) {\n    return [0.5];\n  }\n  const step = 1 / (count - 1);\n  return Array.from({length: count}, (_, index) => index * step);\n}\n\nfunction fillRemainingSelections(used: Set<number>, lastIndex: number, maxCount: number) {\n  for (let i = 0; used.size < maxCount && i <= lastIndex; i++) {\n    used.add(i);\n  }\n}\n\nfunction chooseEvenlySpacedIndices(ranks: RankPosition[], maxCount: number): number[] {\n  const lastIndex = ranks.length - 1;\n  const start = ranks[0].yPosition;\n  const end = ranks[lastIndex].yPosition;\n  const span = end - start;\n  const used = new Set<number>();\n\n  for (const ratio of computeTargetRatios(maxCount)) {\n    const target = span !== 0 ? start + ratio * span : start;\n    const index = findClosestAvailableIndex(ranks, target, used);\n    if (index !== -1) {\n      used.add(index);\n    }\n  }\n\n  fillRemainingSelections(used, lastIndex, maxCount);\n\n  return Array.from(used)\n    .sort((a, b) => a - b)\n    .slice(0, maxCount);\n}\n\n/**\n * Selects a subset of rank positions that are evenly distributed within a range.\n */\nexport function selectRankLines(\n  ranks: RankPosition[],\n  {yMin, yMax, maxCount = 8}: SelectRankLinesOptions\n): RankPosition[] {\n  if (!Number.isFinite(yMin) || !Number.isFinite(yMax) || maxCount <= 0) {\n    return [];\n  }\n\n  const min = Math.min(yMin, yMax);\n  const max = Math.max(yMin, yMax);\n\n  const filtered = ranks\n    .filter(\n      entry => Number.isFinite(entry.yPosition) && entry.yPosition >= min && entry.yPosition <= max\n    )\n    .sort((a, b) => a.yPosition - b.yPosition);\n\n  if (filtered.length === 0) {\n    return [];\n  }\n\n  if (filtered.length <= maxCount) {\n    return filtered;\n  }\n\n  if (maxCount === 1) {\n    const midpoint = (filtered[0].yPosition + filtered[filtered.length - 1].yPosition) / 2;\n    const index = findClosestAvailableIndex(filtered, midpoint, new Set<number>());\n    return index === -1 ? [filtered[0]] : [filtered[index]];\n  }\n\n  const selected = chooseEvenlySpacedIndices(filtered, maxCount);\n  return selected.map(index => filtered[index]);\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NodeState, EdgeState} from '../core/constants';\nimport * as arrow from 'apache-arrow';\n\n/** Graph data types supported by this library */\nexport type GraphData = PlainGraphData | ArrowGraphData;\n\n/** Graph data stored in Apache Arrow binary columnar tables */\nexport type ArrowGraphData = {\n  shape: 'arrow-graph-data';\n  version: number;\n  metadata?: Record<string, unknown>;\n  nodes: arrow.Table;\n  edges: arrow.Table;\n};\n\nexport type PlainGraphData = {\n  shape: 'plain-graph-data';\n  version?: number;\n  metadata?: Record<string, unknown>;\n  nodes?: GraphNodeData[] | null;\n  edges?: GraphEdgeData[] | null;\n};\n\nexport type GraphNodeData = {\n  id: string | number;\n  label?: string;\n  state?: NodeState;\n  selectable?: boolean;\n  highlightConnectedEdges?: boolean;\n  weight?: number;\n  attributes?: Record<string, unknown> | null | undefined;\n};\n\nexport type GraphEdgeData = {\n  id: string | number;\n  sourceId: string | number;\n  targetId: string | number;\n  label?: string;\n  state?: EdgeState;\n  directed?: boolean;\n  weight?: number;\n  attributes?: Record<string, unknown> | null | undefined;\n};\n\nexport function isArrowGraphData(value: unknown): value is ArrowGraphData {\n  const candidate = value as ArrowGraphData;\n  return typeof value === 'object' && candidate?.shape === 'arrow-graph-data';\n}\n\nexport function isPlainGraphData(value: unknown): value is PlainGraphData {\n  const candidate = value as PlainGraphData;\n  return typeof value === 'object' && candidate?.shape === 'plain-graph-data';\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Graph, GraphProps} from '../graph';\nimport {type GraphData, isArrowGraphData} from '../../graph-data/graph-data';\nimport {ArrowGraph} from '../arrow-graph';\nimport {ClassicGraph} from '../classic-graph';\n\nexport function createGraphFromData(data: GraphData, props: GraphProps = {}): Graph {\n  if (isArrowGraphData(data)) {\n    return new ArrowGraph({...props, data});\n  }\n\n  return new ClassicGraph({...props, data});\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\n\nimport type {PlainGraphData} from '../graph-data/graph-data';\n// import {PlainGraphDataBuilder} from '../graph-data/plain-graph-data-builder';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type JSONGraphLoaderOptions = LoaderOptions & {\n  jsongraph?: {};\n};\n\nexport type JSONGraphParserOptions = NonNullable<JSONGraphLoaderOptions['jsongraph']>;\n\nexport const JSONGraphLoader = {\n  dataType: null as unknown as PlainGraphData,\n  batchType: null as never,\n\n  name: 'DOT Graph',\n  id: 'dot-graph',\n  module: 'graph-layers',\n  version: VERSION,\n  worker: false,\n  extensions: ['json'],\n  mimeTypes: ['application/json'],\n  text: true,\n  options: {\n    jsongraph: {}\n  },\n\n  parse: async (arrayBuffer: ArrayBuffer, options?: JSONGraphLoaderOptions) => {\n    const text = new TextDecoder().decode(arrayBuffer);\n    return Promise.resolve(JSONGraphLoader.parseTextSync(text, options));\n  },\n\n  parseTextSync: (text: string, options?: JSONGraphLoaderOptions) => {\n    // const parseOptions = {...JSONGraphLoader.options.jsongraph, ...options?.jsongraph};\n    throw new Error('JSONGraphLoader.parseTextSync not implemented');\n    // return loadSimpleJSONGraph(text, parseOptions);\n  }\n} as const satisfies LoaderWithParser<PlainGraphData, never, JSONGraphLoaderOptions>;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {ArrowGraphData} from '../graph-data/graph-data';\nimport {ArrowGraphDataBuilder} from '../graph-data/arrow-graph-data-builder';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\ntype DOTAttributeMap = Record<string, unknown>;\n\ntype ParsedNode = {\n  id: string;\n  attributes: DOTAttributeMap;\n  subgraphs: Set<string>;\n};\n\ntype ParsedEdge = {\n  id: string;\n  sourceId: string;\n  targetId: string;\n  directed: boolean;\n  attributes: DOTAttributeMap;\n  subgraphs: string[];\n};\n\ntype ParsedSubgraph = {\n  id: string;\n  attributes: DOTAttributeMap;\n  parentId?: string | null;\n};\n\ntype DOTParseResult = {\n  id?: string;\n  directed: boolean;\n  strict: boolean;\n  graphAttributes: DOTAttributeMap;\n  nodes: Map<string, ParsedNode>;\n  edges: ParsedEdge[];\n  subgraphs: Map<string, ParsedSubgraph>;\n};\n\nexport type DOTGraphLoaderMetadata = {\n  id?: string;\n  directed: boolean;\n  strict: boolean;\n  attributes: DOTAttributeMap;\n  subgraphs: ParsedSubgraph[];\n};\n\n// Loader definition\n\nexport type DOTGraphLoaderOptions = LoaderOptions & {\n  dot?: {\n    version?: number;\n  };\n};\n\nexport type DOTGraphParserOptions = NonNullable<DOTGraphLoaderOptions['dot']>;\n\nexport const DOTGraphLoader = {\n  dataType: null as unknown as ArrowGraphData,\n  batchType: null as never,\n\n  name: 'DOT Graph',\n  id: 'dot-graph',\n  module: 'graph-layers',\n  version: VERSION,\n  worker: false,\n  extensions: ['dot'],\n  mimeTypes: ['text/vnd.graphviz', 'text/x-graphviz', 'application/vnd.graphviz'],\n  text: true,\n  options: {\n    dot: {\n      version: 0\n    }\n  },\n  parse: (arrayBuffer: ArrayBuffer, options?: DOTGraphLoaderOptions) => {\n    const text = new TextDecoder().decode(arrayBuffer);\n    return Promise.resolve(DOTGraphLoader.parseTextSync(text, options));\n  },\n  parseTextSync: (text: string, options?: DOTGraphLoaderOptions) => {\n    const parseOptions = {...DOTGraphLoader.options.dot, ...options?.dot};\n    return loadDOTGraph(text, parseOptions);\n  }\n} as const satisfies LoaderWithParser<ArrowGraphData, never, DOTGraphLoaderOptions>;\n\nexport function loadDOTGraph(dot: string, options: DOTGraphParserOptions = {}): ArrowGraphData {\n  const parsed = parseDOT(dot);\n  return buildArrowGraphData(parsed, options);\n}\n\nexport function parseDOTToArrowGraphData(\n  dot: string,\n  options: DOTGraphParserOptions = {}\n): ArrowGraphData {\n  const parsed = parseDOT(dot);\n  return buildArrowGraphData(parsed, options);\n}\n\nfunction buildArrowGraphData(\n  parsed: DOTParseResult,\n  options: DOTGraphParserOptions\n): ArrowGraphData {\n  const builder = new ArrowGraphDataBuilder({version: options.version});\n\n  const subgraphDescriptors = new Map<string, ParsedSubgraph>();\n  for (const [id, subgraph] of parsed.subgraphs.entries()) {\n    subgraphDescriptors.set(id, {\n      id,\n      attributes: {...subgraph.attributes},\n      parentId: subgraph.parentId\n    });\n  }\n\n  for (const node of parsed.nodes.values()) {\n    const attributes: DOTAttributeMap = {...node.attributes};\n    if (node.subgraphs.size > 0) {\n      attributes.subgraphs = Array.from(node.subgraphs, id =>\n        describeSubgraph(id, subgraphDescriptors)\n      );\n    }\n    builder.addNode({\n      id: node.id,\n      attributes\n    });\n  }\n\n  parsed.edges.forEach(edge => {\n    const attributes: DOTAttributeMap = {...edge.attributes};\n    if (edge.subgraphs.length > 0) {\n      attributes.subgraphs = edge.subgraphs.map(id => describeSubgraph(id, subgraphDescriptors));\n    }\n    builder.addEdge({\n      id: edge.id,\n      sourceId: edge.sourceId,\n      targetId: edge.targetId,\n      directed: edge.directed,\n      attributes\n    });\n  });\n\n  const metadata: DOTGraphLoaderMetadata = {\n    id: parsed.id,\n    directed: parsed.directed,\n    strict: parsed.strict,\n    attributes: {...parsed.graphAttributes},\n    subgraphs: Array.from(parsed.subgraphs.values(), subgraph => ({\n      id: subgraph.id,\n      attributes: {...subgraph.attributes},\n      parentId: subgraph.parentId\n    }))\n  };\n\n  const data = builder.finish();\n  data.metadata = metadata;\n  return data;\n}\n\nfunction describeSubgraph(\n  id: string,\n  descriptors: Map<string, ParsedSubgraph>\n): {id: string; attributes: DOTAttributeMap; parentId?: string | null} {\n  const subgraph = descriptors.get(id);\n  if (!subgraph) {\n    return {id, attributes: {}};\n  }\n  return {\n    id,\n    attributes: {...subgraph.attributes},\n    parentId: subgraph.parentId\n  };\n}\n\ntype TokenType =\n  | 'identifier'\n  | 'string'\n  | 'html'\n  | 'arrow'\n  | 'lbrace'\n  | 'rbrace'\n  | 'lbrack'\n  | 'rbrack'\n  | 'equals'\n  | 'comma'\n  | 'semicolon';\n\ntype Token = {\n  type: TokenType;\n  value: string;\n};\n\ntype ScopeContext = {\n  id?: string;\n  nodeDefaults: DOTAttributeMap;\n  edgeDefaults: DOTAttributeMap;\n  graphAttributes: DOTAttributeMap;\n};\n\nclass DOTParser {\n  private readonly tokens: Token[];\n  private position = 0;\n  private readonly result: DOTParseResult = {\n    directed: false,\n    strict: false,\n    graphAttributes: {},\n    nodes: new Map(),\n    edges: [],\n    subgraphs: new Map()\n  };\n\n  private readonly scopes: ScopeContext[] = [\n    {nodeDefaults: {}, edgeDefaults: {}, graphAttributes: {}}\n  ];\n\n  private subgraphCounter = 0;\n  private edgeCounter = 0;\n\n  constructor(tokens: Token[]) {\n    this.tokens = tokens;\n  }\n\n  parse(): DOTParseResult {\n    this.parseGraph();\n    return this.result;\n  }\n\n  private parseGraph(): void {\n    const strictToken = this.peek();\n    if (strictToken && isKeyword(strictToken, 'strict')) {\n      this.consume();\n      this.result.strict = true;\n    }\n\n    const typeToken = this.peek();\n    if (!typeToken || !isGraphType(typeToken)) {\n      throw new Error('DOT graph must start with graph or digraph keyword.');\n    }\n    this.consume();\n    this.result.directed = isKeyword(typeToken, 'digraph');\n\n    const idToken = this.peek();\n    if (idToken && isIdentifierLike(idToken)) {\n      if (!isStructuralToken(idToken)) {\n        this.result.id = parseIdentifierValue(this.consume());\n      }\n    }\n\n    this.expect('lbrace');\n    while (!this.match('rbrace')) {\n      if (!this.parseStatement()) {\n        break;\n      }\n    }\n    this.result.graphAttributes = {...this.scopes[0].graphAttributes};\n  }\n\n  private parseStatement(): boolean {\n    if (this.consumeSemicolonIfPresent()) {\n      return true;\n    }\n\n    const token = this.peek();\n    if (!token) {\n      return false;\n    }\n\n    if (this.tryParseSubgraphStatement(token)) {\n      return true;\n    }\n\n    if (this.tryParseKeywordStatement(token)) {\n      return true;\n    }\n\n    if (this.tryParseAssignmentStatement(token)) {\n      return true;\n    }\n\n    if (isIdentifierLike(token)) {\n      this.parseNodeOrEdgeStatement();\n      this.consumeOptionalSemicolon();\n      return true;\n    }\n\n    throw new Error(`Unexpected token: ${token.value}`);\n  }\n\n  private consumeSemicolonIfPresent(): boolean {\n    const next = this.peek();\n    if (next?.type === 'semicolon') {\n      this.consume();\n      return true;\n    }\n    return false;\n  }\n\n  private tryParseSubgraphStatement(token: Token): boolean {\n    if (token.type !== 'lbrace' && !isKeyword(token, 'subgraph')) {\n      return false;\n    }\n    this.parseSubgraph();\n    return true;\n  }\n\n  private tryParseKeywordStatement(token: Token): boolean {\n    if (!(isKeyword(token, 'graph') || isKeyword(token, 'node') || isKeyword(token, 'edge'))) {\n      return false;\n    }\n\n    this.consume();\n    const attrs = this.parseAttributeList();\n\n    if (isKeyword(token, 'graph')) {\n      Object.assign(this.currentScope().graphAttributes, attrs);\n    } else if (isKeyword(token, 'node')) {\n      Object.assign(this.currentScope().nodeDefaults, attrs);\n    } else {\n      Object.assign(this.currentScope().edgeDefaults, attrs);\n    }\n\n    this.consumeOptionalSemicolon();\n    return true;\n  }\n\n  private tryParseAssignmentStatement(token: Token): boolean {\n    if (!isIdentifierLike(token)) {\n      return false;\n    }\n    const next = this.peek(1);\n    if (next?.type !== 'equals') {\n      return false;\n    }\n\n    const key = parseIdentifierValue(this.consume());\n    this.consume();\n    const valueToken = this.consume();\n    const value = parseAttributeValue(valueToken);\n    this.currentScope().graphAttributes[key] = value;\n    this.consumeOptionalSemicolon();\n    return true;\n  }\n\n  private parseNodeOrEdgeStatement(): void {\n    const first = parseIdentifierValue(this.consume());\n    const references: string[] = [first];\n    const operators: string[] = [];\n\n    let operatorToken = this.match('arrow');\n    while (operatorToken) {\n      operators.push(operatorToken.value);\n      const referenceToken = this.consume();\n      if (!isIdentifierLike(referenceToken)) {\n        throw new Error('Expected node identifier in edge statement.');\n      }\n      references.push(parseIdentifierValue(referenceToken));\n      operatorToken = this.match('arrow');\n    }\n\n    if (operators.length === 0) {\n      const attrs = this.parseAttributeList();\n      this.addNode(first, attrs);\n      return;\n    }\n\n    const attrs = this.parseAttributeList();\n    this.addEdgeChain(references, operators, attrs);\n  }\n\n  private addNode(id: string, attrs: DOTAttributeMap): void {\n    const membership = this.getCurrentSubgraphChain();\n    const node = this.ensureNode(id, membership);\n    node.attributes = {...node.attributes, ...attrs};\n  }\n\n  private addEdgeChain(nodes: string[], operators: string[], attrs: DOTAttributeMap): void {\n    const membership = this.getCurrentSubgraphChain();\n    const defaults = this.currentScope().edgeDefaults;\n    const attributes = {...defaults, ...attrs};\n\n    for (let index = 0; index < nodes.length - 1; index++) {\n      const sourceId = nodes[index];\n      const targetId = nodes[index + 1];\n      const operator = operators[index];\n      const directed = operator === '->';\n\n      const edgeId = deriveEdgeId(attributes, sourceId, targetId, ++this.edgeCounter);\n      const edgeAttributes = {...attributes};\n      this.ensureNode(sourceId, membership);\n      this.ensureNode(targetId, membership);\n\n      const directedOverride = deriveDirectedFlag(edgeAttributes, directed);\n      this.result.edges.push({\n        id: edgeId,\n        sourceId,\n        targetId,\n        directed: directedOverride,\n        attributes: edgeAttributes,\n        subgraphs: membership\n      });\n    }\n  }\n\n  private parseSubgraph(): void {\n    let idToken = this.peek();\n    let subgraphId: string;\n\n    if (idToken && isKeyword(idToken, 'subgraph')) {\n      this.consume();\n      idToken = this.peek();\n    }\n\n    if (idToken && isIdentifierLike(idToken) && idToken.type !== 'lbrace') {\n      subgraphId = parseIdentifierValue(this.consume());\n    } else {\n      subgraphId = `subgraph_${++this.subgraphCounter}`;\n    }\n\n    this.expect('lbrace');\n    const parentId = this.findCurrentSubgraphId();\n    const context: ScopeContext = {\n      id: subgraphId,\n      nodeDefaults: {...this.currentScope().nodeDefaults},\n      edgeDefaults: {...this.currentScope().edgeDefaults},\n      graphAttributes: {}\n    };\n    this.scopes.push(context);\n    this.result.subgraphs.set(subgraphId, {\n      id: subgraphId,\n      attributes: context.graphAttributes,\n      parentId\n    });\n\n    let shouldContinue = true;\n    while (shouldContinue) {\n      if (this.match('rbrace')) {\n        break;\n      }\n      shouldContinue = this.parseStatement();\n    }\n\n    this.scopes.pop();\n  }\n\n  private parseAttributeList(): DOTAttributeMap {\n    const attributes: DOTAttributeMap = {};\n    while (this.match('lbrack')) {\n      while (!this.match('rbrack')) {\n        const keyToken = this.consume();\n        if (!isIdentifierLike(keyToken)) {\n          throw new Error('Expected attribute name.');\n        }\n        const key = parseIdentifierValue(keyToken);\n        let value: unknown = true;\n        if (this.match('equals')) {\n          const valueToken = this.consume();\n          value = parseAttributeValue(valueToken);\n        }\n        attributes[key] = value;\n        if (this.peek()?.type === 'comma' || this.peek()?.type === 'semicolon') {\n          this.consume();\n        }\n      }\n    }\n    return attributes;\n  }\n\n  private ensureNode(id: string, membership: string[]): ParsedNode {\n    let node = this.result.nodes.get(id);\n    if (!node) {\n      const defaults = this.currentScope().nodeDefaults;\n      node = {id, attributes: {...defaults}, subgraphs: new Set()};\n      this.result.nodes.set(id, node);\n    }\n    if (node) {\n      membership.forEach(subgraphId => node.subgraphs.add(subgraphId));\n    }\n    return node;\n  }\n\n  private getCurrentSubgraphChain(): string[] {\n    const chain: string[] = [];\n    for (const scope of this.scopes) {\n      if (scope.id) {\n        chain.push(scope.id);\n      }\n    }\n    return chain;\n  }\n\n  private findCurrentSubgraphId(): string | undefined {\n    for (let index = this.scopes.length - 1; index >= 0; index--) {\n      const scope = this.scopes[index];\n      if (scope.id) {\n        return scope.id;\n      }\n    }\n    return undefined;\n  }\n\n  private currentScope(): ScopeContext {\n    return this.scopes[this.scopes.length - 1];\n  }\n\n  private consumeOptionalSemicolon(): void {\n    const next = this.peek();\n    if (next?.type === 'semicolon') {\n      this.consume();\n    }\n  }\n\n  private expect(type: TokenType): Token {\n    const token = this.consume();\n    if (!token || token.type !== type) {\n      throw new Error(`Expected token ${type}.`);\n    }\n    return token;\n  }\n\n  private consume(): Token {\n    const token = this.tokens[this.position];\n    if (!token) {\n      throw new Error('Unexpected end of DOT input.');\n    }\n    this.position++;\n    return token;\n  }\n\n  private match(type: TokenType): Token | null {\n    const token = this.peek();\n    if (token && token.type === type) {\n      this.position++;\n      return token;\n    }\n    return null;\n  }\n\n  private peek(offset = 0): Token | null {\n    return this.tokens[this.position + offset] ?? null;\n  }\n}\n\nfunction parseDOT(input: string): DOTParseResult {\n  const parser = new DOTParser(tokenize(input));\n  return parser.parse();\n}\n\nconst IDENTIFIER_TERMINATORS = new Set(['{', '}', '[', ']', '=', ';', ',', '\"', '<', '#']);\n\nfunction tokenize(input: string): Token[] {\n  const tokens: Token[] = [];\n  let index = 0;\n\n  while (index < input.length) {\n    const {token, nextIndex} = readNextToken(input, index);\n    if (nextIndex <= index) {\n      throw new Error(`Tokenizer did not advance at position ${index}.`);\n    }\n    if (token) {\n      tokens.push(token);\n    }\n    index = nextIndex;\n  }\n\n  return tokens;\n}\n\nfunction readNextToken(input: string, index: number): {token: Token | null; nextIndex: number} {\n  if (index >= input.length) {\n    return {token: null, nextIndex: input.length};\n  }\n\n  const char = input[index];\n\n  if (isWhitespace(char)) {\n    return {token: null, nextIndex: index + 1};\n  }\n\n  const commentEnd = skipComment(input, index);\n  if (commentEnd !== null) {\n    return {token: null, nextIndex: commentEnd};\n  }\n\n  const arrowToken = readArrowToken(input, index);\n  if (arrowToken) {\n    return arrowToken;\n  }\n\n  const punctuation = readPunctuationToken(char);\n  if (punctuation) {\n    return {token: punctuation, nextIndex: index + 1};\n  }\n\n  if (char === '\"') {\n    const {value, nextIndex} = readQuotedString(input, index + 1);\n    return {token: {type: 'string', value}, nextIndex};\n  }\n\n  if (char === '<') {\n    const {value, nextIndex} = readHtmlString(input, index + 1);\n    return {token: {type: 'html', value}, nextIndex};\n  }\n\n  const identifier = readIdentifier(input, index);\n  if (identifier.value) {\n    return {\n      token: {type: 'identifier', value: identifier.value},\n      nextIndex: identifier.nextIndex\n    };\n  }\n\n  throw new Error(`Unexpected token at position ${index}.`);\n}\n\nfunction skipComment(input: string, index: number): number | null {\n  const char = input[index];\n  if (char === '/') {\n    const next = input[index + 1];\n    if (next === '/') {\n      return skipLineComment(input, index + 2);\n    }\n    if (next === '*') {\n      return skipBlockComment(input, index + 2);\n    }\n    return null;\n  }\n\n  if (char === '#') {\n    return skipLineComment(input, index + 1);\n  }\n\n  return null;\n}\n\nfunction skipLineComment(input: string, startIndex: number): number {\n  let cursor = startIndex;\n  while (cursor < input.length && !isLineBreak(input[cursor])) {\n    cursor++;\n  }\n  return cursor;\n}\n\nfunction skipBlockComment(input: string, startIndex: number): number {\n  let cursor = startIndex;\n  while (cursor < input.length) {\n    if (input[cursor] === '*' && input[cursor + 1] === '/') {\n      return cursor + 2;\n    }\n    cursor++;\n  }\n  throw new Error('Unterminated block comment in DOT source.');\n}\n\nfunction readArrowToken(input: string, index: number): {token: Token; nextIndex: number} | null {\n  const next = input[index + 1];\n  if (input[index] === '-' && next === '-') {\n    return {token: {type: 'arrow', value: '--'}, nextIndex: index + 2};\n  }\n  if (input[index] === '-' && next === '>') {\n    return {token: {type: 'arrow', value: '->'}, nextIndex: index + 2};\n  }\n  return null;\n}\n\nfunction readPunctuationToken(char: string): Token | null {\n  switch (char) {\n    case '{':\n      return {type: 'lbrace', value: char};\n    case '}':\n      return {type: 'rbrace', value: char};\n    case '[':\n      return {type: 'lbrack', value: char};\n    case ']':\n      return {type: 'rbrack', value: char};\n    case '=':\n      return {type: 'equals', value: char};\n    case ',':\n      return {type: 'comma', value: char};\n    case ';':\n      return {type: 'semicolon', value: char};\n    default:\n      return null;\n  }\n}\n\nfunction readQuotedString(input: string, startIndex: number): {value: string; nextIndex: number} {\n  let value = '';\n  let index = startIndex;\n  while (index < input.length) {\n    const char = input[index];\n    if (char === '\"') {\n      return {value, nextIndex: index + 1};\n    }\n    if (char === '\\\\') {\n      const escape = readEscapedCharacter(input, index + 1);\n      value += escape.value;\n      index = escape.nextIndex;\n    } else {\n      value += char;\n      index++;\n    }\n  }\n  throw new Error('Unterminated string literal in DOT source.');\n}\n\nfunction readEscapedCharacter(\n  input: string,\n  startIndex: number\n): {value: string; nextIndex: number} {\n  const next = input[startIndex];\n  switch (next) {\n    case 'n':\n    case 'l':\n    case 'L':\n      return {value: '\\n', nextIndex: startIndex + 1};\n    case 't':\n      return {value: '\\t', nextIndex: startIndex + 1};\n    case 'r':\n      return {value: '\\r', nextIndex: startIndex + 1};\n    case '\"':\n      return {value: '\"', nextIndex: startIndex + 1};\n    case '\\\\':\n      return {value: '\\\\', nextIndex: startIndex + 1};\n    default: {\n      if (typeof next === 'undefined') {\n        throw new Error('Unterminated escape sequence in DOT source.');\n      }\n      return {value: next, nextIndex: startIndex + 1};\n    }\n  }\n}\n\nfunction readHtmlString(input: string, startIndex: number): {value: string; nextIndex: number} {\n  let value = '<';\n  let depth = 1;\n  let index = startIndex;\n  while (index < input.length) {\n    const char = input[index];\n    value += char;\n    if (char === '<') {\n      depth++;\n    } else if (char === '>') {\n      depth--;\n      if (depth === 0) {\n        return {value, nextIndex: index + 1};\n      }\n    }\n    index++;\n  }\n  throw new Error('Unterminated HTML-like string literal in DOT source.');\n}\n\nfunction readIdentifier(input: string, startIndex: number): {value: string; nextIndex: number} {\n  let index = startIndex;\n  let value = '';\n  while (index < input.length && !isIdentifierTerminator(input, index)) {\n    value += input[index];\n    index++;\n  }\n  return {value, nextIndex: index};\n}\n\nfunction isIdentifierTerminator(input: string, index: number): boolean {\n  const char = input[index];\n  if (isWhitespace(char) || IDENTIFIER_TERMINATORS.has(char)) {\n    return true;\n  }\n  if (isArrowOperatorStart(input, index)) {\n    return true;\n  }\n  if (isCommentStart(input, index)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isArrowOperatorStart(input: string, index: number): boolean {\n  if (input[index] !== '-') {\n    return false;\n  }\n  const next = input[index + 1];\n  return next === '-' || next === '>';\n}\n\nfunction isCommentStart(input: string, index: number): boolean {\n  if (input[index] !== '/') {\n    return false;\n  }\n  const next = input[index + 1];\n  return next === '/' || next === '*';\n}\n\nfunction isWhitespace(char: string): boolean {\n  return char === ' ' || char === '\\n' || char === '\\r' || char === '\\t' || char === '\\f';\n}\n\nfunction isLineBreak(char: string): boolean {\n  return char === '\\n' || char === '\\r';\n}\n\nfunction isKeyword(token: Token, keyword: string): boolean {\n  return token.type === 'identifier' && token.value.toLowerCase() === keyword.toLowerCase();\n}\n\nfunction isGraphType(token: Token): boolean {\n  return isKeyword(token, 'graph') || isKeyword(token, 'digraph');\n}\n\nfunction isIdentifierLike(token: Token): boolean {\n  return token.type === 'identifier' || token.type === 'string' || token.type === 'html';\n}\n\nfunction isStructuralToken(token: Token): boolean {\n  return (\n    token.type === 'lbrace' ||\n    token.type === 'rbrace' ||\n    token.type === 'lbrack' ||\n    token.type === 'rbrack'\n  );\n}\n\nfunction parseIdentifierValue(token: Token): string {\n  return token.value;\n}\n\nfunction parseAttributeValue(token: Token): unknown {\n  if (token.type === 'string' || token.type === 'html') {\n    return token.value;\n  }\n  if (token.type === 'identifier') {\n    const numeric = Number(token.value);\n    if (!Number.isNaN(numeric)) {\n      return numeric;\n    }\n    return token.value;\n  }\n  throw new Error('Invalid attribute value in DOT input.');\n}\n\nfunction deriveEdgeId(\n  attributes: DOTAttributeMap,\n  sourceId: string,\n  targetId: string,\n  counter: number\n): string {\n  const candidate = attributes.id ?? attributes.Id ?? attributes.ID;\n  if (typeof candidate === 'string' || typeof candidate === 'number') {\n    return String(candidate);\n  }\n  return `${String(sourceId)}-${String(targetId)}-${counter}`;\n}\n\nfunction deriveDirectedFlag(attributes: DOTAttributeMap, defaultDirected: boolean): boolean {\n  const candidate = attributes.directed;\n  if (typeof candidate === 'boolean') {\n    return candidate;\n  }\n\n  const dirAttr = attributes.dir;\n  if (typeof dirAttr === 'string') {\n    const normalized = dirAttr.toLowerCase();\n    if (normalized === 'none') {\n      return false;\n    }\n    return true;\n  }\n\n  return defaultDirected;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n  EdgeDecoratorType,\n  EdgeState,\n  EdgeType,\n  LayoutState,\n  NodeState,\n  NodeType\n} from '../core/constants';\nimport {Marker} from '../layers/common-layers/marker-layer/marker-list';\n\n/** Markers supported by graph-layers @deprecated v9.2: Use string literals */\nexport const MARKER_TYPE = {\n  'bell-filled': 'bell-filled',\n  bell: 'bell',\n  'bookmark-filled': 'bookmark-filled',\n  bookmark: 'bookmark',\n  'cd-filled': 'cd-filled',\n  cd: 'cd',\n  checkmark: 'checkmark',\n  'circle-check-filled': 'circle-check-filled',\n  'circle-check': 'circle-check',\n  'circle-filled': 'circle-filled',\n  'circle-i-filled': 'circle-i-filled',\n  'circle-i': 'circle-i',\n  'circle-minus-filled': 'circle-minus-filled',\n  'circle-minus': 'circle-minus',\n  'circle-plus-filled': 'circle-plus-filled',\n  'circle-plus': 'circle-plus',\n  'circle-questionmark-filled': 'circle-questionmark-filled',\n  'circle-questionmark': 'circle-questionmark',\n  'circle-slash-filled': 'circle-slash-filled',\n  'circle-slash': 'circle-slash',\n  'circle-x-filled': 'circle-x-filled',\n  'circle-x': 'circle-x',\n  circle: 'circle',\n  'diamond-filled': 'diamond-filled',\n  diamond: 'diamond',\n  'flag-filled': 'flag-filled',\n  flag: 'flag',\n  gear: 'gear',\n  'heart-filled': 'heart-filled',\n  heart: 'heart',\n  'location-marker-filled': 'location-marker-filled',\n  'location-marker': 'location-marker',\n  'octagonal-star-filled': 'octagonal-star-filled',\n  'octagonal-star': 'octagonal-star',\n  'person-filled': 'person-filled',\n  person: 'person',\n  'pin-filled': 'pin-filled',\n  pin: 'pin',\n  'plus-small': 'plus-small',\n  plus: 'plus',\n  'rectangle-filled': 'rectangle-filled',\n  rectangle: 'rectangle',\n  'star-filled': 'star-filled',\n  star: 'star',\n  'tag-filled': 'tag-filled',\n  tag: 'tag',\n  'thumb-down-filled': 'thumb-down-filled',\n  'thumb-down': 'thumb-down',\n  'thumb-up': 'thumb-up',\n  'thumb_up-filled': 'thumb_up-filled',\n  'triangle-down-filled': 'triangle-down-filled',\n  'triangle-down': 'triangle-down',\n  'triangle-left-filled': 'triangle-left-filled',\n  'triangle-left': 'triangle-left',\n  'triangle-right-filled': 'triangle-right-filled',\n  'triangle-right': 'triangle-right',\n  'triangle-up-filled': 'triangle-up-filled',\n  'triangle-up': 'triangle-up',\n  'x-small': 'x-small',\n  x: 'x'\n} as const satisfies Record<Marker, Marker>;\n/* eslint-enable */\n\n/** The interaction state of a node. @deprecated v9.2: Use string literals */\nexport const NODE_STATE = {\n  DEFAULT: 'default',\n  HOVER: 'hover',\n  DRAGGING: 'dragging',\n  SELECTED: 'selected'\n} as const satisfies Record<string, NodeState>;\n\n/** The interaction state of an edge. @deprecated v9.2: Use string literals */\nexport const EDGE_STATE = {\n  DEFAULT: 'default',\n  HOVER: 'hover',\n  DRAGGING: 'dragging',\n  SELECTED: 'selected'\n} as const satisfies Record<string, EdgeState>;\n\n/** The visual type of a node. @deprecated v9.2: Use string literals */\nexport const NODE_TYPE = {\n  CIRCLE: 'circle',\n  RECTANGLE: 'rectangle',\n  ROUNDED_RECTANGLE: 'rounded-rectangle',\n  PATH_ROUNDED_RECTANGLE: 'path-rounded-rectangle',\n  ICON: 'icon',\n  LABEL: 'label',\n  MARKER: 'marker'\n} as const satisfies Record<string, NodeType>;\n\n/** The visual type of an edge. @deprecated v9.2: Use string literals */\nexport const EDGE_TYPE = {\n  SPLINE_CURVE: 'spline',\n  LINE: 'line',\n  PATH: 'path'\n} as const satisfies Record<string, EdgeType>;\n\n/** Decorators on an edge. @deprecated v9.2: Use string literals */\nexport const EDGE_DECORATOR_TYPE = {\n  LABEL: 'label',\n  FLOW: 'flow',\n  ARROW: 'arrow'\n} as const satisfies Record<string, EdgeDecoratorType>;\n\n/** the status of the layout. @deprecated v9.2: Use string literals */\nexport const LAYOUT_STATE = {\n  INIT: 'init',\n  START: 'start',\n  CALCULATING: 'calculating',\n  DONE: 'done',\n  ERROR: 'error'\n} as const satisfies Record<string, LayoutState>;\n"],
  "mappings": "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",
  "names": ["defaultProps", "isEqual", "import_zod", "Color", "attribute", "formatted", "error", "child", "error", "d3", "defaultProps", "error", "createDagGraph", "import_meta", "import_meta", "newD3Edge", "computeControlPoint", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_core", "import_layers", "getColor", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_core", "import_layers", "import_core", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_layers", "getColor", "import_core", "import_core", "import_layers", "fs", "defaultProps", "fs", "import_core", "getColor", "getOffset", "nodes", "error", "import_core", "import_layers", "getColor", "getOffset", "offX", "offY", "polygon", "error", "getOffset", "VERSION", "attrs"]
}
