@deck.gl-community/graph-layers 9.1.1 → 9.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_deprecated/old-constants.d.ts +107 -0
- package/dist/_deprecated/old-constants.d.ts.map +1 -0
- package/dist/_deprecated/old-constants.js +111 -0
- package/dist/_deprecated/old-constants.js.map +1 -0
- package/dist/core/cache.d.ts +0 -1
- package/dist/core/cache.js +0 -1
- package/dist/core/constants.d.ts +12 -100
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +3 -44
- package/dist/core/constants.js.map +1 -1
- package/dist/core/graph-engine.d.ts +12 -11
- package/dist/core/graph-engine.d.ts.map +1 -1
- package/dist/core/graph-engine.js +22 -11
- package/dist/core/graph-engine.js.map +1 -1
- package/dist/core/graph-layout.d.ts +48 -21
- package/dist/core/graph-layout.d.ts.map +1 -1
- package/dist/core/graph-layout.js +91 -24
- package/dist/core/graph-layout.js.map +1 -1
- package/dist/core/interaction-manager.d.ts +6 -4
- package/dist/core/interaction-manager.d.ts.map +1 -1
- package/dist/core/interaction-manager.js +59 -17
- package/dist/core/interaction-manager.js.map +1 -1
- package/dist/graph/edge.d.ts +7 -7
- package/dist/graph/edge.d.ts.map +1 -1
- package/dist/graph/edge.js +3 -6
- package/dist/graph/edge.js.map +1 -1
- package/dist/graph/graph.d.ts +2 -3
- package/dist/graph/graph.js +8 -9
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/node.d.ts +7 -8
- package/dist/graph/node.d.ts.map +1 -1
- package/dist/graph/node.js +3 -5
- package/dist/graph/node.js.map +1 -1
- package/dist/graph-style-schema.cdn.d.ts +2 -0
- package/dist/graph-style-schema.cdn.js +2 -0
- package/dist/graph-style-schema.json +12 -0
- package/dist/index.cjs +2821 -549
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +28 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -21
- package/dist/index.js.map +1 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts +0 -1
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +0 -1
- package/dist/layers/common-layers/marker-layer/atlas-data-url.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/atlas-data-url.js +0 -1
- package/dist/layers/common-layers/marker-layer/marker-layer.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/marker-layer.js +2 -3
- package/dist/layers/common-layers/marker-layer/marker-list.d.ts +2 -63
- package/dist/layers/common-layers/marker-layer/marker-list.d.ts.map +1 -1
- package/dist/layers/common-layers/marker-layer/marker-list.js +1 -65
- package/dist/layers/common-layers/marker-layer/marker-list.js.map +1 -1
- package/dist/layers/common-layers/marker-layer/marker-mapping.d.ts +0 -1
- package/dist/layers/common-layers/marker-layer/marker-mapping.js +0 -1
- package/dist/layers/common-layers/spline-layer/spline-layer.d.ts +0 -1
- package/dist/layers/common-layers/spline-layer/spline-layer.js +0 -1
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.d.ts +0 -1
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +0 -1
- package/dist/layers/edge-attachment-helper.d.ts +15 -0
- package/dist/layers/edge-attachment-helper.d.ts.map +1 -0
- package/dist/layers/edge-attachment-helper.js +230 -0
- package/dist/layers/edge-attachment-helper.js.map +1 -0
- package/dist/layers/edge-layer.d.ts +1 -5
- package/dist/layers/edge-layer.d.ts.map +1 -1
- package/dist/layers/edge-layer.js +9 -11
- package/dist/layers/edge-layer.js.map +1 -1
- package/dist/layers/edge-layers/arrow-2d-geometry.d.ts +4 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.d.ts.map +1 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.js +42 -0
- package/dist/layers/edge-layers/arrow-2d-geometry.js.map +1 -0
- package/dist/layers/edge-layers/curved-edge-layer.d.ts +1 -2
- package/dist/layers/edge-layers/curved-edge-layer.js +1 -2
- package/dist/layers/edge-layers/edge-arrow-layer.d.ts +21 -0
- package/dist/layers/edge-layers/edge-arrow-layer.d.ts.map +1 -0
- package/dist/layers/edge-layers/edge-arrow-layer.js +131 -0
- package/dist/layers/edge-layers/edge-arrow-layer.js.map +1 -0
- package/dist/layers/edge-layers/edge-label-layer.d.ts +1 -2
- package/dist/layers/edge-layers/edge-label-layer.js +1 -2
- package/dist/layers/edge-layers/flow-layer.d.ts +1 -2
- package/dist/layers/edge-layers/flow-layer.js +1 -2
- package/dist/layers/edge-layers/path-edge-layer.d.ts +0 -1
- package/dist/layers/edge-layers/path-edge-layer.js +0 -1
- package/dist/layers/edge-layers/straight-line-edge-layer.d.ts +0 -1
- package/dist/layers/edge-layers/straight-line-edge-layer.js +0 -1
- package/dist/layers/graph-layer.d.ts +22 -23
- package/dist/layers/graph-layer.d.ts.map +1 -1
- package/dist/layers/graph-layer.js +218 -62
- package/dist/layers/graph-layer.js.map +1 -1
- package/dist/layers/node-layers/circle-layer.d.ts +0 -1
- package/dist/layers/node-layers/circle-layer.js +0 -1
- package/dist/layers/node-layers/image-layer.d.ts +0 -1
- package/dist/layers/node-layers/image-layer.js +0 -1
- package/dist/layers/node-layers/label-layer.d.ts +1 -2
- package/dist/layers/node-layers/label-layer.js +1 -2
- package/dist/layers/node-layers/path-rounded-rectangle-layer.d.ts +0 -1
- package/dist/layers/node-layers/path-rounded-rectangle-layer.js +1 -2
- package/dist/layers/node-layers/rectangle-layer.d.ts +0 -1
- package/dist/layers/node-layers/rectangle-layer.js +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.d.ts +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +0 -1
- package/dist/layers/node-layers/rounded-rectangle-layer.d.ts +1 -2
- package/dist/layers/node-layers/rounded-rectangle-layer.js +2 -3
- package/dist/layers/node-layers/zoomable-marker-layer.d.ts +1 -2
- package/dist/layers/node-layers/zoomable-marker-layer.js +1 -2
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts +117 -0
- package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -0
- package/dist/layouts/d3-dag/d3-dag-layout.js +716 -0
- package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -0
- package/dist/layouts/d3-force/d3-force-layout.d.ts +4 -4
- package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
- package/dist/layouts/d3-force/d3-force-layout.js +25 -10
- package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
- package/dist/layouts/d3-force/worker.d.ts +0 -1
- package/dist/layouts/d3-force/worker.js +0 -1
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts +9 -8
- package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/force-multi-graph-layout.js +15 -11
- package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.d.ts +11 -8
- package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/hive-plot-layout.js +12 -7
- package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
- package/dist/layouts/experimental/radial-layout.d.ts +10 -7
- package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
- package/dist/layouts/experimental/radial-layout.js +11 -6
- package/dist/layouts/experimental/radial-layout.js.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts +4 -4
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
- package/dist/layouts/gpu-force/gpu-force-layout.js +18 -9
- package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
- package/dist/layouts/gpu-force/worker.d.ts +0 -1
- package/dist/layouts/gpu-force/worker.js +0 -1
- package/dist/layouts/simple-layout.d.ts +19 -12
- package/dist/layouts/simple-layout.d.ts.map +1 -1
- package/dist/layouts/simple-layout.js +26 -15
- package/dist/layouts/simple-layout.js.map +1 -1
- package/dist/loaders/create-graph.d.ts +1 -2
- package/dist/loaders/create-graph.js +3 -4
- package/dist/loaders/edge-parsers.d.ts +1 -2
- package/dist/loaders/edge-parsers.js +2 -3
- package/dist/loaders/edge-parsers.js.map +1 -1
- package/dist/loaders/json-loader.d.ts +2 -3
- package/dist/loaders/json-loader.d.ts.map +1 -1
- package/dist/loaders/json-loader.js +5 -6
- package/dist/loaders/json-loader.js.map +1 -1
- package/dist/loaders/node-parsers.d.ts +1 -2
- package/dist/loaders/node-parsers.js +2 -3
- package/dist/loaders/node-parsers.js.map +1 -1
- package/dist/loaders/simple-json-graph-loader.d.ts +0 -1
- package/dist/loaders/simple-json-graph-loader.d.ts.map +1 -1
- package/dist/loaders/simple-json-graph-loader.js +5 -6
- package/dist/loaders/simple-json-graph-loader.js.map +1 -1
- package/dist/loaders/table-graph-loader.d.ts +3 -4
- package/dist/loaders/table-graph-loader.js +5 -6
- package/dist/loaders/table-graph-loader.js.map +1 -1
- package/dist/style/graph-layer-stylesheet.d.ts +34 -0
- package/dist/style/graph-layer-stylesheet.d.ts.map +1 -0
- package/dist/style/graph-layer-stylesheet.js +39 -0
- package/dist/style/graph-layer-stylesheet.js.map +1 -0
- package/dist/style/graph-style-accessor-map.d.ts +93 -0
- package/dist/style/graph-style-accessor-map.d.ts.map +1 -0
- package/dist/style/graph-style-accessor-map.js +93 -0
- package/dist/style/graph-style-accessor-map.js.map +1 -0
- package/dist/style/graph-style-engine.d.ts +10 -0
- package/dist/style/graph-style-engine.d.ts.map +1 -0
- package/dist/style/graph-style-engine.js +163 -0
- package/dist/style/graph-style-engine.js.map +1 -0
- package/dist/style/graph-stylesheet.schema.d.ts +310 -0
- package/dist/style/graph-stylesheet.schema.d.ts.map +1 -0
- package/dist/style/graph-stylesheet.schema.js +237 -0
- package/dist/style/graph-stylesheet.schema.js.map +1 -0
- package/dist/style/style-engine.d.ts +33 -0
- package/dist/style/style-engine.d.ts.map +1 -0
- package/dist/style/style-engine.js +121 -0
- package/dist/style/style-engine.js.map +1 -0
- package/dist/style/style-property.d.ts +2 -3
- package/dist/style/style-property.d.ts.map +1 -1
- package/dist/style/style-property.js +224 -48
- package/dist/style/style-property.js.map +1 -1
- package/dist/utils/collapsed-chains.d.ts +17 -0
- package/dist/utils/collapsed-chains.d.ts.map +1 -0
- package/dist/utils/collapsed-chains.js +197 -0
- package/dist/utils/collapsed-chains.js.map +1 -0
- package/dist/utils/layer-utils.d.ts +0 -1
- package/dist/utils/layer-utils.d.ts.map +1 -1
- package/dist/utils/layer-utils.js +0 -1
- package/dist/utils/log.d.ts +2 -1
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/log.js +12 -2
- package/dist/utils/log.js.map +1 -1
- package/dist/utils/node-boundary.d.ts +10 -0
- package/dist/utils/node-boundary.d.ts.map +1 -0
- package/dist/utils/node-boundary.js +130 -0
- package/dist/utils/node-boundary.js.map +1 -0
- package/dist/utils/polygon-calculations.d.ts +0 -1
- package/dist/utils/polygon-calculations.js +0 -1
- package/dist/widgets/long-press-button.d.ts +0 -1
- package/dist/widgets/long-press-button.js +0 -1
- package/dist/widgets/view-control-widget.d.ts +4 -5
- package/dist/widgets/view-control-widget.d.ts.map +1 -1
- package/dist/widgets/view-control-widget.js +10 -8
- package/dist/widgets/view-control-widget.js.map +1 -1
- package/package.json +23 -7
- package/src/_deprecated/old-constants.ts +122 -0
- package/src/core/constants.ts +21 -43
- package/src/core/graph-engine.ts +24 -9
- package/src/core/graph-layout.ts +133 -28
- package/src/core/interaction-manager.ts +80 -20
- package/src/graph/edge.ts +6 -6
- package/src/graph/graph.ts +7 -7
- package/src/graph/node.ts +6 -6
- package/src/index.ts +31 -6
- package/src/layers/common-layers/marker-layer/marker-list.ts +62 -64
- package/src/layers/edge-attachment-helper.ts +355 -0
- package/src/layers/edge-layer.ts +6 -7
- package/src/layers/edge-layers/arrow-2d-geometry.ts +51 -0
- package/src/layers/edge-layers/edge-arrow-layer.ts +171 -0
- package/src/layers/graph-layer.ts +304 -86
- package/src/layouts/d3-dag/d3-dag-layout.ts +969 -0
- package/src/layouts/d3-force/d3-force-layout.ts +33 -11
- package/src/layouts/experimental/force-multi-graph-layout.ts +22 -13
- package/src/layouts/experimental/hive-plot-layout.ts +22 -10
- package/src/layouts/experimental/radial-layout.ts +20 -8
- package/src/layouts/gpu-force/gpu-force-layout.ts +22 -10
- package/src/layouts/simple-layout.ts +48 -25
- package/src/loaders/edge-parsers.ts +2 -2
- package/src/loaders/json-loader.ts +2 -2
- package/src/loaders/node-parsers.ts +2 -2
- package/src/loaders/simple-json-graph-loader.ts +2 -2
- package/src/loaders/table-graph-loader.ts +2 -2
- package/src/style/graph-layer-stylesheet.ts +99 -0
- package/src/style/graph-style-accessor-map.ts +103 -0
- package/src/style/graph-style-engine.ts +229 -0
- package/src/style/graph-stylesheet.schema.ts +344 -0
- package/src/style/style-engine.ts +168 -0
- package/src/style/style-property.ts +314 -51
- package/src/utils/collapsed-chains.ts +261 -0
- package/src/utils/log.ts +15 -1
- package/src/utils/node-boundary.ts +238 -0
- package/src/widgets/view-control-widget.tsx +15 -13
- package/dist/style/style-sheet.d.ts +0 -11
- package/dist/style/style-sheet.d.ts.map +0 -1
- package/dist/style/style-sheet.js +0 -253
- package/dist/style/style-sheet.js.map +0 -1
- package/src/style/style-sheet.ts +0 -277
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/utils/log.ts", "../src/core/cache.ts", "../src/graph/graph.ts", "../src/
|
|
4
|
-
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// core - Graph representation and layout\nexport {Graph} from './graph/graph';\nexport {Node} from './graph/node';\nexport {Edge} from './graph/edge';\n\nexport {GraphEngine} from './core/graph-engine';\n\n// graph-layers layouts\nexport type {GraphLayoutState} 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 {GPUForceLayout} from './layouts/gpu-force/gpu-force-layout';\nexport {RadialLayout as _RadialLayout} from './layouts/experimental/radial-layout';\nexport {ForceMultiGraphLayout as _MultigraphLayout} from './layouts/experimental/force-multi-graph-layout';\nexport {HivePlotLayout as _HivePlotLayout} from './layouts/experimental/hive-plot-layout';\n\nexport {NODE_STATE, NODE_TYPE, EDGE_TYPE, EDGE_DECORATOR_TYPE, MARKER_TYPE} from './core/constants';\n\n// deck.gl components\nexport {GraphLayer} from './layers/graph-layer';\nexport {EdgeLayer} from './layers/edge-layer';\n\n// Widgets\n\nexport {ViewControlWidget} from './widgets/view-control-widget';\n\n// graph format loaders\nexport {loadSimpleJSONGraph} from './loaders/simple-json-graph-loader';\n\n// utils\nexport {mixedGetPosition} from './utils/layer-utils';\nexport {log} from './utils/log';\n\n// DEPRECATED\nexport {createGraph} from './loaders/create-graph';\nexport {JSONLoader} from './loaders/simple-json-graph-loader';\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", "// 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 {log} from '../utils/log';\nimport {Cache} from '../core/cache';\nimport {Edge} from './edge';\nimport {Node} from './node';\n\nexport type GraphProps = {\n name?: string;\n nodes?: Node[];\n edges?: Edge[];\n};\n\n/** Basic graph data structure */\nexport class Graph extends EventTarget {\n /** List object of nodes. */\n private _nodeMap: Record<string, Node> = {};\n /** List of object edges. */\n private _edgeMap: Record<string, Edge> = {};\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\n constructor(props?: GraphProps);\n constructor(graph: Graph);\n\n /**\n * The constructor of the Graph class.\n * @param graph - copy the graph if this exists.\n */\n constructor(propsOrGraph?: GraphProps | Graph) {\n super();\n\n if (propsOrGraph instanceof Graph) {\n // if a Graph instance was supplied, copy the supplied graph into this graph\n const graph = propsOrGraph;\n this._name = graph?._name || this._name;\n this._nodeMap = graph._nodeMap;\n this._edgeMap = graph._edgeMap;\n } else {\n // If graphProps were supplied, initialize this graph from the supplied props\n const props = propsOrGraph;\n this._name = props?.name || this._name;\n this.batchAddNodes(props?.nodes || []);\n this.batchAddEdges(props?.edges || []);\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.dispatchEvent(new CustomEvent('transactionStart'));\n return cb();\n } finally {\n this.dispatchEvent(new CustomEvent('transactionEnd'));\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.dispatchEvent(new CustomEvent('onNodeAdded', {node} as any));\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.dispatchEvent(new CustomEvent('onNodeAdded', {node} as any));\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(): Node[] {\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 /**\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.dispatchEvent(new CustomEvent('onNodeUpdated', {node} as any));\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 log.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.dispatchEvent(new CustomEvent('onEdgeAdded', {edge} as any));\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.dispatchEvent(new CustomEvent('onEdgeUpdated', {edge} as any));\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 log.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.dispatchEvent(new CustomEvent('onNodeRemoved', {node} as any));\n }\n\n /**\n * Get all the edges of the graph.\n * @return get all the edges in the graph.\n */\n getEdges(): Edge[] {\n this._updateCache('edges', () => Object.values(this._edgeMap));\n\n return this._cache.get('edges') as Edge[];\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 log.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 }\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): Edge[] {\n const node = this.findNode(nodeId);\n if (!node) {\n log.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 log.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 log.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 * 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: Graph): boolean {\n if (!graph || !(graph instanceof Graph)) {\n return false;\n }\n return this.version === graph.version;\n }\n\n _bumpVersion(): void {\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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable */\nexport const MarkerList = {\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};\n/* eslint-enable */\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {MarkerList} from '../layers/common-layers/marker-layer/marker-list';\n\n/** All the markers supported by node type MARKER */\nexport const MARKER_TYPE = MarkerList;\n\nexport type ValueOf<T> = T[keyof T];\n\n// the interaction state of a node.\nexport const NODE_STATE = {\n DEFAULT: 'default',\n HOVER: 'hover',\n DRAGGING: 'dragging',\n SELECTED: 'selected'\n};\n\nexport const EDGE_STATE = {\n DEFAULT: 'default',\n HOVER: 'hover',\n DRAGGING: 'dragging',\n SELECTED: 'selected'\n};\n\n// node visual marker type\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};\n\n// edge shape\nexport const EDGE_TYPE = {\n SPLINE_CURVE: 'SPLINE_CURVE',\n LINE: 'LINE',\n PATH: 'PATH'\n};\n\n// decorators on edges\nexport const EDGE_DECORATOR_TYPE = {\n LABEL: 'EDGE_LABEL',\n FLOW: 'FLOW'\n};\n\n// the status of the layout\nexport const LAYOUT_STATE = {\n INIT: 'INIT',\n START: 'START',\n CALCULATING: 'CALCULATING',\n DONE: 'DONE',\n ERROR: 'ERROR'\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {NODE_STATE, ValueOf} from '../core/constants';\nimport {Edge} from './edge';\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 {\n public id: string | number;\n /** Keep a reference to origin data. */\n private _data: Record<string, unknown>;\n /** List edges. */\n private _connectedEdges: Record<string, Edge> = {};\n /** Interaction state of the node. */\n public state: ValueOf<typeof NODE_STATE> = NODE_STATE.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(): Edge[] {\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 - one of NODE_STATE\n */\n setState(state: ValueOf<typeof NODE_STATE>): void {\n this.state = state;\n }\n\n /**\n * Get node state\n * @returns state - one of NODE_STATE\n */\n getState(): ValueOf<typeof NODE_STATE> {\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: Edge | Edge[]): void {\n const iterableEdges = Array.isArray(edge) ? edge : [edge];\n iterableEdges.forEach((e) => {\n this._connectedEdges[e.id] = 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: Edge | Edge[]): void {\n const iterableEdges = Array.isArray(edge) ? edge : [edge];\n iterableEdges.forEach((e) => {\n e.removeNode(this);\n delete this._connectedEdges[e.id];\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 {EDGE_STATE} from '../core/constants';\nimport {Node} from './node';\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 {\n /** Unique uuid of the edge. */\n public 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, Node> = {};\n /** Edge state. */\n public state = EDGE_STATE.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 - one of EDGE_STATE\n */\n setState(state: string): void {\n this.state = state;\n }\n\n /**\n * Get edge state\n * @returns state - one of EDGE_STATE\n */\n getState(): string {\n return this.state;\n }\n\n addNode(node: Node): void {\n this._connectedNodes[node.getId()] = node;\n }\n\n removeNode(node: Node): void {\n delete this._connectedNodes[node.getId()];\n }\n\n getConnectedNodes(): Node[] {\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 type {Node} from '../graph/node';\nimport {Edge} from '../graph/edge';\nimport {Graph} from '../graph/graph';\nimport {GraphLayout} from './graph-layout';\nimport {Cache} from './cache';\n\nexport type GraphEngineProps = {\n graph: Graph;\n layout: GraphLayout;\n};\n\n/** Graph engine controls the graph data and layout calculation */\nexport class GraphEngine extends EventTarget {\n props: Readonly<Required<GraphEngineProps>>;\n\n private readonly _graph: Graph;\n private readonly _layout: GraphLayout;\n private readonly _cache = new Cache<'nodes' | 'edges', Node[] | Edge[]>();\n private _layoutDirty = false;\n private _transactionInProgress = false;\n\n constructor(props: GraphEngineProps);\n /** @deprecated Use props constructor: new GraphEngine(props) */\n constructor(graph: Graph, layout: GraphLayout);\n\n constructor(props: GraphEngineProps | Graph, layout?: GraphLayout) {\n super();\n if (props instanceof Graph) {\n props = {\n graph: props,\n layout\n };\n }\n\n this.props = props;\n this._graph = props.graph;\n this._layout = props.layout;\n }\n\n /** Getters */\n\n getNodes = (): Node[] => {\n this._updateCache('nodes', () =>\n this._graph.getNodes().filter((node) => this.getNodePosition(node))\n );\n\n return this._cache.get('nodes') as Node[];\n };\n\n getEdges = () => {\n this._updateCache('edges', () =>\n this._graph.getEdges().filter((edge) => this.getEdgePosition(edge))\n );\n\n return this._cache.get('edges') as Edge[];\n };\n\n getNodePosition = (node: Node) => this._layout.getNodePosition(node);\n\n getEdgePosition = (edge: Edge) => this._layout.getEdgePosition(edge);\n\n getGraphVersion = () => this._graph.version;\n\n getLayoutLastUpdate = () => this._layout.version;\n\n getLayoutState = () => this._layout.state;\n\n /** Operations on the graph */\n\n lockNodePosition = (node, x, y) => this._layout.lockNodePosition(node, x, y);\n\n unlockNodePosition = (node) => this._layout.unlockNodePosition(node);\n\n /**\n * @fires GraphEngine#onLayoutStart\n */\n _onLayoutStart = () => {\n /**\n * @event GraphEngine#onLayoutStart\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutStart'));\n };\n\n /**\n * @fires GraphEngine#onLayoutChange\n */\n _onLayoutChange = () => {\n /**\n * @event GraphEngine#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutChange'));\n };\n\n /**\n * @fires GraphEngine#onLayoutDone\n */\n _onLayoutDone = () => {\n /**\n * @event GraphEngine#onLayoutDone\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutDone'));\n };\n\n /**\n * @fires GraphEngine#onLayoutError\n */\n _onLayoutError = () => {\n /**\n * @event GraphEngine#onLayoutError\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutError'));\n };\n\n _onGraphStructureChanged = (entity) => {\n this._layoutDirty = true;\n this._graphChanged();\n };\n\n _onTransactionStart = () => {\n this._transactionInProgress = true;\n };\n\n _onTransactionEnd = () => {\n this._transactionInProgress = false;\n this._graphChanged();\n };\n\n /** Layout calculations */\n\n run = () => {\n // TODO: throw if running on a cleared engine\n\n this._graph.addEventListener('transactionStart', this._onTransactionStart);\n this._graph.addEventListener('transactionEnd', this._onTransactionEnd);\n this._graph.addEventListener('onNodeAdded', this._onGraphStructureChanged);\n this._graph.addEventListener('onNodeRemoved', this._onGraphStructureChanged);\n this._graph.addEventListener('onEdgeAdded', this._onGraphStructureChanged);\n this._graph.addEventListener('onEdgeRemoved', this._onGraphStructureChanged);\n\n this._layout.addEventListener('onLayoutStart', this._onLayoutStart);\n this._layout.addEventListener('onLayoutChange', this._onLayoutChange);\n this._layout.addEventListener('onLayoutDone', this._onLayoutDone);\n this._layout.addEventListener('onLayoutError', this._onLayoutError);\n\n this._layout.initializeGraph(this._graph);\n this._layout.start();\n };\n\n clear = () => {\n this._graph.removeEventListener('transactionStart', this._onTransactionStart);\n this._graph.removeEventListener('transactionEnd', this._onTransactionEnd);\n this._graph.removeEventListener('onNodeAdded', this._onGraphStructureChanged);\n this._graph.removeEventListener('onNodeRemoved', this._onGraphStructureChanged);\n this._graph.removeEventListener('onEdgeAdded', this._onGraphStructureChanged);\n this._graph.removeEventListener('onEdgeRemoved', this._onGraphStructureChanged);\n\n this._layout.removeEventListener('onLayoutStart', this._onLayoutStart);\n this._layout.removeEventListener('onLayoutChange', this._onLayoutChange);\n this._layout.removeEventListener('onLayoutDone', this._onLayoutDone);\n this._layout.removeEventListener('onLayoutError', this._onLayoutError);\n };\n\n resume = () => this._layout.resume();\n\n stop = () => this._layout.stop();\n\n _graphChanged = () => {\n if (this._layoutDirty && !this._transactionInProgress) {\n this._updateLayout();\n }\n };\n\n _updateLayout = () => {\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._graph.version + this._layout.version);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Graph} from '../graph/graph';\nimport type {Node} from '../graph/node';\nimport type {Edge} from '../graph/edge';\n\nimport isEqual from 'lodash.isequal';\nimport {EDGE_TYPE} from './constants';\n\n// the status of the layout\nexport type GraphLayoutState = 'INIT' | 'START' | 'CALCULATING' | 'DONE' | 'ERROR';\n\nexport type GraphLayoutOptions = {};\n\n/** All the layout classes are extended from this base layout class. */\nexport class GraphLayout<\n OptionsT extends GraphLayoutOptions = GraphLayoutOptions\n> extends EventTarget {\n /** Name of the layout. */\n protected readonly _name: string = 'GraphLayout';\n /** Extra configuration options of the layout. */\n protected _options: OptionsT;\n\n public version = 0;\n public state: GraphLayoutState = 'INIT';\n\n /**\n * Constructor of GraphLayout\n * @param options extra configuration options of the layout\n */\n constructor(options: OptionsT) {\n super();\n this._options = options;\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._name === layout._name && isEqual(this._options, layout._options);\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 initializeGraph(graph: Graph) {}\n /** update the existing graph */\n updateGraph(graph: Graph) {}\n /** start the layout calculation */\n start() {}\n /** update the layout calculation */\n update() {}\n /** resume the layout calculation */\n resume() {}\n /** stop the layout calculation */\n stop() {}\n /** access the position of the node in the layout */\n getNodePosition(node: Node): [number, number] {\n return [0, 0];\n }\n /** access the layout information of the edge */\n getEdgePosition(edge: Edge) {\n return {\n type: EDGE_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: Node, 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: Node) {}\n\n // INTERNAL METHODS\n\n protected _updateState(state) {\n this.state = state;\n this.version += 1;\n }\n\n /** @fires GraphLayout#onLayoutStart */\n protected _onLayoutStart = (): void => {\n this._updateState('CALCULATING');\n\n /**\n * Layout calculation start.\n * @event GraphLayout#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutStart'));\n };\n\n /** @fires GraphLayout#onLayoutChange */\n protected _onLayoutChange = (): void => {\n this._updateState('CALCULATING');\n\n /**\n * Layout calculation iteration.\n * @event GraphLayout#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutChange'));\n };\n\n /** @fires GraphLayout#onLayoutDone */\n protected _onLayoutDone = (): void => {\n this._updateState('DONE');\n\n /**\n * Layout calculation is done.\n * @event GraphLayout#onLayoutDone\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutDone'));\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.dispatchEvent(new CustomEvent('onLayoutError'));\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../core/graph-layout';\nimport {Node} from '../graph/node';\nimport {EDGE_TYPE} from '../core/constants';\nimport {Graph} from '../graph/graph';\n\nexport type SimpleLayoutOptions = GraphLayoutOptions & {\n /** The accessor lets the application supply the position ([x, y]) of each node.\n * @example\n ```js\n <GraphGL\n {...otherProps}\n layout={\n new SimpleLayout({\n nodePositionAccessor: node => [\n node.getPropertyValue('x'),\n node.getPropertyValue('y'),\n ]\n })\n }\n />\n ```\n */\n nodePositionAccessor?: (node: Node) => [number, number];\n};\n\n/** A basic layout where the application controls positions of each node */\nexport class SimpleLayout extends GraphLayout<SimpleLayoutOptions> {\n static defaultOptions: Required<SimpleLayoutOptions> = {\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: Record<string, Node> = {};\n protected _nodePositionMap: Record<string, (node: Node) => [number, number]> = {};\n\n constructor(options: SimpleLayoutOptions = {}) {\n super({...SimpleLayout.defaultOptions, ...options});\n }\n\n initializeGraph(graph: Graph): void {\n this.updateGraph(graph);\n }\n\n _notifyLayoutComplete(): void {\n this._onLayoutStart();\n this._onLayoutChange();\n this._onLayoutDone();\n }\n\n start(): void {\n this._notifyLayoutComplete();\n }\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 this._nodeMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = node;\n return res;\n }, {});\n this._nodePositionMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = this._options.nodePositionAccessor(node);\n return res;\n }, {});\n }\n\n setNodePositionAccessor = (accessor) => {\n (this._options as any).nodePositionAccessor = accessor;\n };\n\n getNodePosition = (node) => this._nodePositionMap[node.getId()] as any;\n\n getEdgePosition = (edge) => {\n const sourcePos = this._nodePositionMap[edge.getSourceNodeId()];\n const targetPos = this._nodePositionMap[edge.getTargetNodeId()];\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: sourcePos,\n targetPosition: targetPos,\n controlPoints: []\n } as any;\n };\n\n lockNodePosition = (node, x, y) => {\n this._nodePositionMap[node.getId()] = [x, y] as any;\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';\n\nimport {EDGE_TYPE} from '../../core/constants';\n\nexport type D3ForceLayoutOptions = GraphLayoutOptions & {\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 defaultOptions: Required<D3ForceLayoutOptions> = {\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 = 'D3';\n private _positionsByNodeId = new Map();\n private _graph: any;\n private _worker: any;\n\n constructor(options?: D3ForceLayoutOptions) {\n super(options);\n\n this._options = {\n ...D3ForceLayout.defaultOptions,\n ...options\n };\n }\n\n initializeGraph(graph) {\n this._graph = graph;\n }\n\n // for streaming new data on the same graph\n updateGraph(graph) {\n this._graph = graph;\n\n this._positionsByNodeId = new Map(\n this._graph.getNodes().map((node) => [node.id, this._positionsByNodeId.get(node.id)])\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 this._worker.postMessage({\n nodes: this._graph.getNodes().map((node) => ({\n id: node.id,\n ...this._positionsByNodeId.get(node.id)\n })),\n edges: this._graph.getEdges().map((edge) => ({\n id: edge.id,\n source: edge.getSourceNodeId(),\n target: edge.getTargetNodeId()\n })),\n options: this._options\n });\n\n this._worker.onmessage = (event) => {\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 this._worker.terminate();\n }\n\n getEdgePosition = (edge) => {\n const sourceNode = this._graph.findNode(edge.getSourceNodeId());\n const targetNode = this._graph.findNode(edge.getTargetNodeId());\n if (!this.getNodePosition(sourceNode) || !this.getNodePosition(targetNode)) {\n return null;\n }\n\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: this.getNodePosition(sourceNode),\n targetPosition: this.getNodePosition(targetNode),\n controlPoints: []\n };\n };\n\n getNodePosition = (node) => {\n const d3Node = this._positionsByNodeId.get(node.id);\n if (d3Node) {\n return d3Node.coordinates;\n }\n\n return null;\n };\n\n lockNodePosition = (node, x, y) => {\n const d3Node = this._positionsByNodeId.get(node.id);\n this._positionsByNodeId.set(node.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) => {\n const d3Node = this._positionsByNodeId.get(node.id);\n d3Node.fx = null;\n d3Node.fy = null;\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';\n\nimport {EDGE_TYPE} from '../../core/constants';\n\nexport type GPUForceLayoutOptions = GraphLayoutOptions & {\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 defaultOptions: Required<GPUForceLayoutOptions> = {\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: any;\n private _nodeMap: any;\n private _edgeMap: any;\n private _graph: any;\n private _worker: Worker;\n private _callbacks: any;\n\n constructor(options: GPUForceLayoutOptions = {}) {\n const _options = {\n ...GPUForceLayout.defaultOptions,\n ...options\n };\n\n super(_options);\n\n this._name = 'GPU';\n this._options = _options;\n // store graph and prepare internal data\n this._d3Graph = {nodes: [], edges: []};\n this._nodeMap = {};\n this._edgeMap = {};\n }\n\n initializeGraph(graph) {\n this._graph = graph;\n this._nodeMap = {};\n this._edgeMap = {};\n // nodes\n const d3Nodes = graph.getNodes().map((node) => {\n const id = node.id;\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[node.id] = d3Node;\n return d3Node;\n });\n // edges\n const d3Edges = graph.getEdges().map((edge) => {\n const d3Edge = {\n id: edge.id,\n source: this._nodeMap[edge.getSourceNodeId()],\n target: this._nodeMap[edge.getTargetNodeId()]\n };\n this._edgeMap[edge.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._options;\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 this._worker.terminate();\n }\n\n // for steaming new data on the same graph\n updateGraph(graph) {\n if (this._graph.getGraphName() !== graph.getGraphName()) {\n // reset the maps\n this._nodeMap = {};\n this._edgeMap = {};\n }\n this._graph = graph;\n // update internal layout data\n // nodes\n const newNodeMap = {};\n const newD3Nodes = graph.getNodes().map((node) => {\n const id = node.id;\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[node.id];\n const newD3Node = oldD3Node ? oldD3Node : {id, x, y, fx, fy, collisionRadius};\n newNodeMap[node.id] = newD3Node;\n return newD3Node;\n });\n this._nodeMap = newNodeMap;\n this._d3Graph.nodes = newD3Nodes;\n // edges\n const newEdgeMap = {};\n const newD3Edges = graph.getEdges().map((edge) => {\n const oldD3Edge = this._edgeMap[edge.id];\n const newD3Edge = oldD3Edge || {\n id: edge.id,\n source: newNodeMap[edge.getSourceNodeId()],\n target: newNodeMap[edge.getTargetNodeId()]\n };\n newEdgeMap[edge.id] = newD3Edge;\n return newD3Edge;\n });\n this._edgeMap = newEdgeMap;\n this._d3Graph.edges = newD3Edges;\n }\n\n updateD3Graph(graph) {\n const existingNodes = this._graph.getNodes();\n // update internal layout data\n // nodes\n const newNodeMap = {};\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[node.id] = node;\n return node;\n });\n this._nodeMap = newNodeMap;\n this._d3Graph.nodes = newD3Nodes;\n // edges\n const newEdgeMap = {};\n const newD3Edges = graph.edges.map((edge) => {\n newEdgeMap[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): [number, number] => {\n const d3Node = this._nodeMap[node.id];\n if (d3Node) {\n return [d3Node.x, d3Node.y];\n }\n return [0, 0];\n };\n\n getEdgePosition = (edge) => {\n const d3Edge = this._edgeMap[edge.id];\n const sourcePosition = d3Edge && d3Edge.source;\n const targetPosition = d3Edge && d3Edge.target;\n if (d3Edge && sourcePosition && targetPosition) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [sourcePosition.x, sourcePosition.y],\n targetPosition: [targetPosition.x, targetPosition.y],\n controlPoints: []\n };\n }\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [0, 0],\n targetPosition: [0, 0],\n controlPoints: []\n };\n };\n\n lockNodePosition = (node, x, y) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.x = x;\n d3Node.y = y;\n d3Node.fx = x;\n d3Node.fy = y;\n this._callbacks.onLayoutChange();\n this._callbacks.onLayoutDone();\n };\n\n unlockNodePosition = (node) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.fx = null;\n d3Node.fy = null;\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';\nimport {EDGE_TYPE} from '../../core/constants';\nimport {Graph} from '../../graph/graph';\n\nexport type RadialLayoutOptions = GraphLayoutOptions & {\n radius?: number;\n tree?: any;\n};\n\nconst traverseTree = (nodeId, nodeMap) => {\n const node = nodeMap[nodeId];\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.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<RadialLayoutOptions> {\n static defaultOptions = {\n radius: 500\n };\n\n _name = 'RadialLayout';\n _graph: Graph = null;\n // custom layout data structure\n _hierarchicalPoints = {};\n nestedTree;\n\n constructor(options: RadialLayoutOptions = {}) {\n super(options);\n this._options = {\n ...RadialLayout.defaultOptions,\n ...options\n };\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 const nodeCount = this._graph.getNodes().length;\n if (nodeCount === 0) {\n return;\n }\n\n const {tree} = this._options;\n\n if (!tree || tree.length === 0) {\n return;\n }\n\n const {radius} = this._options;\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 getNodePosition = (node) => {\n return this._hierarchicalPoints[node.id];\n };\n\n // spline curve version\n getEdgePosition = (edge) => {\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: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition: sourceNodePos,\n targetPosition: targetNodePos,\n controlPoints: wayPoints\n };\n };\n\n lockNodePosition = (node, x, y) => {\n this._hierarchicalPoints[node.id] = [x, y];\n this._onLayoutChange();\n this._onLayoutDone();\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, GraphLayoutOptions} from '../../core/graph-layout';\nimport {Node} from '../../graph/node';\nimport {EDGE_TYPE} from '../../core/constants';\nimport {Graph} from '../../graph/graph';\nimport * as d3 from 'd3-force';\n\nexport type ForceMultiGraphLayoutOptions = GraphLayoutOptions & {\n alpha?: number;\n nBodyStrength?: number;\n nBodyDistanceMin?: number;\n nBodyDistanceMax?: number;\n};\n\nexport class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOptions> {\n static defaultOptions = {\n alpha: 3,\n nBodyStrength: -1200,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 1400\n };\n\n _name = 'ForceMultiGraphLayout';\n _graph: Graph;\n\n // d3 part\n // custom graph data\n _d3Graph = {nodes: [], edges: []};\n _nodeMap = {};\n _edgeMap = {};\n _simulator;\n\n constructor(options: ForceMultiGraphLayoutOptions = {}) {\n super(options);\n this._options = {\n ...ForceMultiGraphLayout.defaultOptions,\n ...options\n };\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 sourceDegree = this._graph.getDegree(d3Edge.source.id);\n const targetDegree = this._graph.getDegree(d3Edge.target.id);\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._options;\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 .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 updateGraph(graph) {\n this._graph = graph;\n\n // nodes\n const newNodeMap = {};\n const newD3Nodes = graph.getNodes().map((node) => {\n const oldD3Node = this._nodeMap[node.id];\n const newD3Node = oldD3Node ? oldD3Node : {id: node.id};\n newNodeMap[node.id] = newD3Node;\n return newD3Node;\n });\n\n // edges\n // bucket edges between the same source/target node pairs.\n const nodePairs = graph.getEdges().reduce((res, edge) => {\n const nodes = [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 = nodes.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 = [];\n const newEdgeMap = {};\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: EDGE_TYPE.LINE,\n id: firstEdge.getId(),\n source: newNodeMap[firstEdge.getSourceNodeId()],\n target: newNodeMap[firstEdge.getTargetNodeId()],\n isVirtual: false\n };\n newEdgeMap[firstEdge.getId()] = newD3Edge;\n newD3Edges.push(newD3Edge);\n return;\n }\n\n // else reduce to one virtual edge\n const newD3Edge = {\n type: EDGE_TYPE.LINE,\n id: pairId,\n source: newNodeMap[firstEdge.getSourceNodeId()],\n target: newNodeMap[firstEdge.getTargetNodeId()],\n isVirtual: true,\n edgeCount: betweenEdges.length\n };\n newEdgeMap[pairId] = newD3Edge;\n newD3Edges.push(newD3Edge);\n\n betweenEdges.forEach((e, idx) => {\n newEdgeMap[e.id] = {\n type: EDGE_TYPE.SPLINE_CURVE,\n id: e.id,\n source: newNodeMap[e.getSourceNodeId()],\n target: newNodeMap[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: Node): [number, number] => {\n const d3Node = this._nodeMap[node.id];\n if (d3Node) {\n return [d3Node.x, d3Node.y];\n }\n // default value\n return [0, 0];\n };\n\n getEdgePosition = (edge) => {\n const d3Edge = this._edgeMap[edge.id];\n if (d3Edge) {\n if (!d3Edge.isVirtual) {\n return {\n type: EDGE_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[d3Edge.virtualEdgeId];\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: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition,\n targetPosition,\n controlPoints: [controlPoint]\n };\n }\n // default value\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [0, 0],\n targetPosition: [0, 0],\n controlPoints: []\n };\n };\n\n lockNodePosition = (node, x, y) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.x = x;\n d3Node.y = y;\n this._onLayoutChange();\n this._onLayoutDone();\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, GraphLayoutOptions} from '../../core/graph-layout';\nimport {Node} from '../../graph/node';\nimport {EDGE_TYPE} from '../../core/constants';\nimport {Graph} from '../../graph/graph';\n\nexport type HivePlotLayoutOptions = GraphLayoutOptions & {\n innerRadius?: number;\n outerRadius?: number;\n getNodeAxis?: (node: Node) => any;\n};\n\nexport class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {\n static defaultOptions = {\n innerRadius: 100,\n outerRadius: 500,\n getNodeAxis: (node: Node) => node.getPropertyValue('group')\n } as const satisfies Readonly<Required<HivePlotLayoutOptions>>;\n\n _name = 'HivePlot';\n _graph: Graph;\n _totalAxis: number;\n _axis: Record<string, any>;\n _nodeMap = {};\n _nodePositionMap = {};\n\n constructor(options: HivePlotLayoutOptions = {}) {\n super(options);\n this._options = {\n ...HivePlotLayout.defaultOptions,\n ...options\n };\n }\n\n initializeGraph(graph: Graph) {\n this.updateGraph(graph);\n }\n\n updateGraph(graph) {\n const {getNodeAxis, innerRadius, outerRadius} = this._options;\n this._graph = graph;\n this._nodeMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = node;\n return res;\n }, {});\n\n // bucket nodes into few axis\n\n this._axis = graph.getNodes().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 = Object.keys(this._axis).reduce((res, 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 res[node.getId()] = [x, y];\n });\n return res;\n }, {});\n }\n\n start() {\n this._onLayoutChange();\n this._onLayoutDone();\n }\n\n getNodePosition = (node) => this._nodePositionMap[node.getId()];\n\n getEdgePosition = (edge) => {\n const {getNodeAxis} = this._options;\n const sourceNodeId = edge.getSourceNodeId();\n const targetNodeId = edge.getTargetNodeId();\n\n const sourcePosition = this._nodePositionMap[sourceNodeId];\n const targetPosition = this._nodePositionMap[targetNodeId];\n\n const sourceNode = this._nodeMap[sourceNodeId];\n const targetNode = this._nodeMap[targetNodeId];\n\n const sourceNodeAxis = getNodeAxis(sourceNode);\n const targetNodeAxis = getNodeAxis(targetNode);\n\n if (sourceNodeAxis === targetNodeAxis) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition,\n targetPosition,\n controlPoints: []\n };\n }\n\n const controlPoint = computeControlPoint({\n sourcePosition,\n sourceNodeAxis,\n targetPosition,\n targetNodeAxis,\n totalAxis: this._totalAxis\n });\n\n return {\n type: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition,\n targetPosition,\n controlPoints: [controlPoint]\n };\n };\n\n lockNodePosition = (node, x, y) => {\n this._nodePositionMap[node.id] = [x, y];\n this._onLayoutChange();\n this._onLayoutDone();\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\nimport type {CompositeLayerProps} from '@deck.gl/core';\nimport {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';\n\nimport {NODE_TYPE, EDGE_DECORATOR_TYPE} from '../core/constants';\nimport {Graph} from '../graph/graph';\nimport {GraphLayout} from '../core/graph-layout';\nimport {GraphEngine} from '../core/graph-engine';\n\nimport {Stylesheet} from '../style/style-sheet';\nimport {mixedGetPosition} from '../utils/layer-utils';\nimport {InteractionManager} from '../core/interaction-manager';\n\nimport {log} from '../utils/log';\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';\n\nimport {JSONLoader} from '../loaders/json-loader';\n\nconst NODE_LAYER_MAP = {\n [NODE_TYPE.RECTANGLE]: RectangleLayer,\n [NODE_TYPE.ROUNDED_RECTANGLE]: RoundedRectangleLayer,\n [NODE_TYPE.PATH_ROUNDED_RECTANGLE]: PathBasedRoundedRectangleLayer,\n [NODE_TYPE.ICON]: ImageLayer,\n [NODE_TYPE.CIRCLE]: CircleLayer,\n [NODE_TYPE.LABEL]: LabelLayer,\n [NODE_TYPE.MARKER]: ZoomableMarkerLayer\n};\n\nconst EDGE_DECORATOR_LAYER_MAP = {\n [EDGE_DECORATOR_TYPE.LABEL]: EdgeLabelLayer,\n [EDGE_DECORATOR_TYPE.FLOW]: FlowLayer\n};\n\nconst SHARED_LAYER_PROPS = {\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n parameters: {\n depthTest: false\n }\n};\n\nexport type GraphLayerProps = CompositeLayerProps & _GraphLayerProps;\n\nexport type _GraphLayerProps = {\n graph?: Graph;\n layout?: GraphLayout;\n graphLoader?: (opts: {json: any}) => Graph;\n engine?: GraphEngine;\n\n // an array of styles for layers\n nodeStyle?: any[];\n edgeStyle?: {\n stroke?: string;\n strokeWidth?: number;\n /** an array of styles for layers */\n decorators?: any[];\n };\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};\n\nexport class GraphLayer extends CompositeLayer<GraphLayerProps> {\n static layerName = 'GraphLayer';\n\n static defaultProps: Required<_GraphLayerProps> = {\n // Composite layer props\n // @ts-expect-error composite layer props\n pickable: true,\n\n // Graph props\n graphLoader: JSONLoader,\n\n nodeStyle: [],\n nodeEvents: {\n onMouseLeave: () => {},\n onHover: () => {},\n onMouseEnter: () => {},\n onClick: () => {},\n onDrag: () => {}\n },\n edgeStyle: {\n stroke: 'black',\n strokeWidth: 1,\n // an array of styles for layers\n decorators: []\n },\n edgeEvents: {\n onClick: () => {},\n onHover: () => {}\n },\n enableDragging: false\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;\n };\n\n forceUpdate = () => {\n if (this.context && this.context.layerManager) {\n this.setNeedsUpdate();\n this.setChangeFlags({dataChanged: true} as any); // TODO\n }\n };\n\n constructor(props: GraphLayerProps & CompositeLayerProps) {\n super(props);\n }\n\n initializeState() {\n this.state = {\n interactionManager: new InteractionManager(this.props as any, () => this.forceUpdate())\n };\n const engine = this.props.engine;\n this._setGraphEngine(engine);\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n\n updateState({props, oldProps, changeFlags}) {\n if (\n changeFlags.dataChanged &&\n props.data &&\n !(Array.isArray(props.data) && props.data.length === 0)\n ) {\n // console.log(props.data);\n const graph = this.props.graphLoader({json: props.data});\n const layout = this.props.layout;\n const graphEngine = new GraphEngine({graph, layout});\n this._setGraphEngine(graphEngine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n } else if (changeFlags.propsChanged && props.graph !== oldProps.graph) {\n const graphEngine = new GraphEngine({graph: props.graph, layout: props.layout});\n this._setGraphEngine(graphEngine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n }\n }\n\n finalize() {\n this._removeGraphEngine();\n }\n\n _setGraphEngine(graphEngine: GraphEngine) {\n if (graphEngine === this.state.graphEngine) {\n return;\n }\n\n this._removeGraphEngine();\n if (graphEngine) {\n this.state.graphEngine = graphEngine;\n this.state.graphEngine.run();\n // added or removed a node, or in general something layout related changed\n this.state.graphEngine.addEventListener('onLayoutChange', this.forceUpdate);\n }\n }\n\n _removeGraphEngine() {\n if (this.state.graphEngine) {\n this.state.graphEngine.removeEventListener('onLayoutChange', this.forceUpdate);\n this.state.graphEngine.clear();\n this.state.graphEngine = null;\n }\n }\n\n createNodeLayers() {\n const engine = this.state.graphEngine;\n const {nodeStyle} = this.props;\n if (!engine || !nodeStyle || !Array.isArray(nodeStyle) || nodeStyle.length === 0) {\n return [];\n }\n\n return nodeStyle.filter(Boolean).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 log.error(`Invalid node type: ${style.type}`)();\n throw new Error(`Invalid node type: ${style.type}`);\n }\n const stylesheet = new Stylesheet(restStyle, {\n stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()\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 }\n\n createEdgeLayers() {\n const engine = this.state.graphEngine;\n const {edgeStyle} = this.props;\n\n if (!engine || !edgeStyle) {\n return [];\n }\n\n return (Array.isArray(edgeStyle) ? edgeStyle : [edgeStyle])\n .filter(Boolean)\n .flatMap((style, idx) => {\n const {decorators, data = (edges) => edges, visible = true, ...restEdgeStyle} = style;\n const stylesheet = new Stylesheet(\n {\n type: 'Edge',\n ...restEdgeStyle\n },\n {\n stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()\n }\n );\n\n const edgeLayer = new EdgeLayer({\n ...SHARED_LAYER_PROPS,\n id: `edge-layer-${idx}`,\n data: data(engine.getEdges()),\n getLayoutInfo: engine.getEdgePosition,\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 const decoratorLayers = decorators.filter(Boolean).flatMap((decoratorStyle, idx2) => {\n const DecoratorLayer = EDGE_DECORATOR_LAYER_MAP[decoratorStyle.type];\n if (!DecoratorLayer) {\n log.error(`Invalid edge decorator type: ${decoratorStyle.type}`)();\n throw new Error(`Invalid edge decorator type: ${decoratorStyle.type}`);\n }\n const decoratorStylesheet = new Stylesheet(decoratorStyle, {\n stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()\n });\n return new DecoratorLayer({\n ...SHARED_LAYER_PROPS,\n id: `edge-decorator-${idx2}`,\n data: data(engine.getEdges()),\n getLayoutInfo: engine.getEdgePosition,\n pickable: true,\n positionUpdateTrigger: [engine.getLayoutLastUpdate(), engine.getLayoutState()].join(),\n stylesheet: decoratorStylesheet\n } as any);\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 return [this.createEdgeLayers(), this.createNodeLayers()];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport Color from 'color';\nimport {log} from '../utils/log';\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 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// code generation: generate a function as a layer accessor\nfunction generateAccessor(key, value) {\n const formatter = PROPERTY_FORMATTERS[key] || IDENTITY;\n // ex: key = 'fill', value = {defaut: 'red', hover: 'blue'}\n // valueMap => {defaut: [255, 0, 0], hover: [0, 0, 255]}\n const valueMap = Object.keys(value).reduce((res, key0) => {\n res[key0] = value[key0];\n return res;\n }, {}) as any;\n\n return (node) => {\n const statefulValue = valueMap[node.state];\n if (!node.state || typeof statefulValue === 'undefined') {\n return valueMap.default || DEFAULT_STYLES[key];\n }\n // else has stateful value\n // check if the value is a function\n if (typeof statefulValue === 'function') {\n return formatter(statefulValue(node));\n }\n // or just a plain value\n return formatter(statefulValue);\n };\n}\n\nconst VALUE_TYPE = {\n ACCESSOR: 'ACCESSOR',\n PLAIN_VALUE: 'PLAIN_VALUE'\n};\n\nexport class StyleProperty {\n key: any;\n _updateTrigger: boolean;\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 // statefule property, ex:\n // fill: {default: 'red', hover: 'blue'}\n // note that offset: [0, 1], the type of array is object, too.\n if (typeof value === 'object' && !Array.isArray(value)) {\n // generate accessor function\n this._value = generateAccessor(key, value);\n this._valueType = VALUE_TYPE.ACCESSOR;\n this._updateTrigger = updateTrigger;\n }\n // default state property, but value = accessor\n // fill: () => 'red'\n else if (typeof value === 'function') {\n const formatter = PROPERTY_FORMATTERS[key] || IDENTITY;\n // the output of the function should be formated by\n // the corresponding formatter again.\n // Ex: colorAccessor might return '#f00', which needs to\n // be formated as [255, 0, 0];\n this._value = (d) => formatter(value(d));\n this._valueType = VALUE_TYPE.ACCESSOR;\n this._updateTrigger = value;\n }\n // default state property with plain value:\n // fill: 'red'\n else {\n // format the value properly\n const formatter = PROPERTY_FORMATTERS[key] || IDENTITY;\n this._value = formatter(value);\n this._valueType = VALUE_TYPE.PLAIN_VALUE;\n this._updateTrigger = false;\n }\n\n // sanity check\n if (this._value === null) {\n log.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';\n\nimport {NODE_TYPE, EDGE_DECORATOR_TYPE} from '../core/constants';\nimport {log} from '../utils/log';\n\nconst COMMON_DECKGL_PROPS = {\n getOffset: 'offset',\n opacity: 'opacity'\n};\n\nconst DECKGL_ACCESSOR_MAP = {\n [NODE_TYPE.CIRCLE]: {\n ...COMMON_DECKGL_PROPS,\n getFillColor: 'fill',\n getLineColor: 'stroke',\n getLineWidth: 'strokeWidth',\n getRadius: 'radius'\n },\n\n [NODE_TYPE.RECTANGLE]: {\n ...COMMON_DECKGL_PROPS,\n getWidth: 'width',\n getHeight: 'height',\n getFillColor: 'fill',\n getLineColor: 'stroke',\n getLineWidth: 'strokeWidth'\n },\n\n [NODE_TYPE.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 [NODE_TYPE.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 [NODE_TYPE.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 [NODE_TYPE.MARKER]: {\n ...COMMON_DECKGL_PROPS,\n getColor: 'fill',\n getSize: 'size',\n getMarker: 'marker',\n scaleWithZoom: 'scaleWithZoom'\n },\n\n // --------- Edge related ---------\n Edge: {\n getColor: 'stroke',\n getWidth: 'strokeWidth'\n },\n [EDGE_DECORATOR_TYPE.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 [EDGE_DECORATOR_TYPE.FLOW]: {\n getColor: 'color',\n getWidth: 'width',\n getSpeed: 'speed',\n getTailLength: 'tailLength'\n }\n};\n\nconst DECKGL_UPDATE_TRIGGERS = {\n [NODE_TYPE.CIRCLE]: ['getFillColor', 'getRadius', 'getLineColor', 'getLineWidth'],\n [NODE_TYPE.RECTANGLE]: ['getFillColor', 'getLineColor', 'getLineWidth'],\n [NODE_TYPE.ROUNDED_RECTANGLE]: [\n 'getFillColor',\n 'getLineColor',\n 'getLineWidth',\n 'getCornerRadius'\n ],\n [NODE_TYPE.PATH_ROUNDED_RECTANGLE]: [\n 'getFillColor',\n 'getLineColor',\n 'getLineWidth',\n 'getCornerRadius'\n ],\n [NODE_TYPE.LABEL]: [\n 'getColor',\n 'getText',\n 'getSize',\n 'getTextAnchor',\n 'getAlignmentBaseline',\n 'getAngle'\n ],\n [NODE_TYPE.MARKER]: ['getColor', 'getSize', 'getMarker'],\n Edge: ['getColor', 'getWidth'],\n [EDGE_DECORATOR_TYPE.LABEL]: [\n 'getColor',\n 'getText',\n 'getSize',\n 'getTextAnchor',\n 'getAlignmentBaseline'\n ],\n [EDGE_DECORATOR_TYPE.FLOW]: ['getColor', 'getWidth', 'getSpeed', 'getTailLength']\n};\n\nexport class Stylesheet {\n type: any;\n properties: any;\n constructor(style, updateTriggers) {\n const {type: layerType, ...restStyle} = style;\n if (!layerType || !(layerType in DECKGL_ACCESSOR_MAP)) {\n throw new Error(`illegal type: ${layerType}`);\n }\n this.type = layerType;\n\n // style = {\n // type: 'circle',\n // fill: 'red'\n // radius: 5,\n //\n // ':hover': {\n // fill: 'blue',\n // stroke: 'red'\n // }\n // };\n // step 1: extract 'rules': default, hover\n // default: {fill: 'red', radius: 5};\n // hover: {fill: 'blue', stroke: 'red'};\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 {\n default: {}\n }\n );\n\n // step 2: extract all unique attributes from rules\n // attributes: ['fill', 'radius', 'stroke']\n const attributes = Object.values(rules).reduce((res, rule) => {\n const attrs = Object.keys(rule);\n const set = new Set([...(res as any), ...attrs]);\n return Array.from(set);\n }, []);\n // step 3: create a attribute map as:\n // attrMap = {\n // fill: {default: 'red', hover: 'blue'},\n // radius: {default: 5},\n // stroke: {hover: 'red'},\n // }\n const attrMap = (attributes as any).reduce((res, attr) => {\n res[attr] = Object.entries(rules).reduce((acc, entry) => {\n const [state, rule] = entry;\n if (typeof rule[attr] !== 'undefined') {\n acc[state] = rule[attr];\n }\n return acc;\n }, {});\n return res;\n }, {});\n\n // step 4: simplify the attribute map if only default exists for the attribute\n // simplifiedStyleMap = {\n // fill: {default: 'red', hover: 'blue'},\n // radius: 5,\n // stroke: {hover: 'red'},\n // }\n const simplifiedStyleMap = Object.entries(attrMap).reduce((res, entry) => {\n const [attr, valueMap] = entry as any;\n const onlyDefault = Object.keys(valueMap).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\n // step 5: create style property\n // if the propety only maps to default state => return value only\n // if the property maps to other states => return accessor function\n\n // start to parse properties\n this.properties = {};\n for (const key in simplifiedStyleMap) {\n this.properties[key] = new StyleProperty({\n key,\n value: simplifiedStyleMap[key],\n updateTrigger: updateTriggers.stateUpdateTrigger\n });\n }\n }\n\n _getProperty(deckglAccessor) {\n const map = DECKGL_ACCESSOR_MAP[this.type];\n if (!map) {\n throw new Error(`illegal type: ${this.type}`);\n }\n const styleProp = map[deckglAccessor];\n if (!styleProp) {\n log.error(`Invalid DeckGL accessor: ${deckglAccessor}`)();\n throw new Error(`Invalid DeckGL accessor: ${deckglAccessor}`);\n }\n return this.properties[styleProp];\n }\n\n getDeckGLAccessor(deckglAccessor) {\n const property = this._getProperty(deckglAccessor);\n // get the value\n if (property) {\n return property.getValue();\n }\n // return default value\n const styleProp = DECKGL_ACCESSOR_MAP[this.type][deckglAccessor];\n return StyleProperty.getDefault(styleProp);\n }\n\n getDeckGLAccessorUpdateTrigger(deckglAccessor) {\n const property = this._getProperty(deckglAccessor);\n // get the value\n if (property) {\n return property.getUpdateTrigger();\n }\n return false;\n }\n\n getDeckGLAccessors() {\n const accessorMap = DECKGL_ACCESSOR_MAP[this.type];\n return Object.keys(accessorMap).reduce((res, accessor) => {\n res[accessor] = this.getDeckGLAccessor(accessor);\n return res;\n }, {});\n }\n\n getDeckGLUpdateTriggers() {\n return DECKGL_UPDATE_TRIGGERS[this.type].reduce((res, accessor) => {\n res[accessor] = this.getDeckGLAccessorUpdateTrigger(accessor);\n return res;\n }, {});\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 {EDGE_STATE, NODE_STATE, ValueOf} from './constants';\nimport {Edge} from '../graph/edge';\nimport {Node} from '../graph/node';\nimport {GraphEngine} from './graph-engine';\n\nconst NODE_TO_EDGE_STATE_MAP: Record<ValueOf<typeof NODE_STATE>, ValueOf<typeof EDGE_STATE>> = {\n [NODE_STATE.DEFAULT]: EDGE_STATE.DEFAULT,\n [NODE_STATE.HOVER]: EDGE_STATE.HOVER,\n [NODE_STATE.DRAGGING]: EDGE_STATE.DRAGGING,\n [NODE_STATE.SELECTED]: EDGE_STATE.SELECTED\n};\n\nfunction shouldEdgeBeSelected(edge: Edge): boolean {\n return edge\n .getConnectedNodes()\n .some(\n (node) => node.getState() === NODE_STATE.SELECTED && node.shouldHighlightConnectedEdges()\n );\n}\n\nfunction setNodeState(node: Node, state: ValueOf<typeof NODE_STATE>) {\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 = EDGE_STATE.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: Node) => 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: Node | null = null;\n private _lastSelectedNode: Node | 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 onClick(info, event): void {\n const {object} = info;\n\n if (!object) {\n return;\n }\n\n if (object.isNode) {\n if ((object as Node).isSelectable()) {\n if (this._lastSelectedNode) {\n setNodeState(this._lastSelectedNode, NODE_STATE.DEFAULT);\n }\n setNodeState(object, NODE_STATE.SELECTED);\n this._lastSelectedNode = object as 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.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() === NODE_STATE.SELECTED)) {\n // reset the last hovered node's state\n const newState =\n this._lastSelectedNode !== null && this._lastSelectedNode.id === this._lastHoveredNode?.id\n ? NODE_STATE.SELECTED\n : NODE_STATE.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 Node, NODE_STATE.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 isSameNode = this._lastHoveredNode && this._lastHoveredNode.id === info.object.id;\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, x, y);\n\n setNodeState(info.object, NODE_STATE.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, NODE_STATE.DEFAULT);\n this.engine.unlockNodePosition(info.object);\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} 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 initializeState() {\n this.state = {characterSet: []};\n }\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 updateState({props, oldProps, changeFlags}) {\n super.updateState({props, oldProps, changeFlags} as any);\n if (changeFlags.propsOrDataChanged) {\n const {getText} = props;\n let textLabels = [];\n if (typeof getText === 'function') {\n textLabels = props.data.map(getText);\n } else {\n textLabels = [getText];\n }\n const characterSet = new Set(textLabels.join(''));\n const uniqueCharacters = Array.from(characterSet);\n this.setState({characterSet: uniqueCharacters});\n }\n }\n\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 return [\n new TextLayer(\n this.getSubLayerProps({\n id: '__text-layer',\n data,\n sizeScale: scaleWithZoom ? Math.pow(2, this.context.viewport.zoom - 1) : 1,\n characterSet: this.state.characterSet,\n getPosition,\n getColor,\n getSize,\n getTextAnchor,\n getAlignmentBaseline,\n getAngle,\n getText: newGetText,\n maxWidth: textMaxWidth ?? 12,\n wordBreak: textWordBreak ?? 'break-all',\n fontFamily: fontFamily ?? 'Red Hat Text',\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 {EDGE_TYPE} from '../core/constants';\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 [EDGE_TYPE.LINE]: StraightLineEdgeLayer,\n [EDGE_TYPE.PATH]: PathEdgeLayer,\n [EDGE_TYPE.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 [EDGE_TYPE.LINE]: [],\n [EDGE_TYPE.PATH]: [],\n [EDGE_TYPE.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';\nimport {window} from 'global';\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: 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 {Edge} from '../graph/edge';\nimport {Node} from '../graph/node';\nimport {Graph} from '../graph/graph';\n\n/**\n * @deprecated Use `new Graph(name, nodes, edges)`\n * Create a graph from a list of Nodes and edges\n */\nexport function createGraph(props: {name; nodes; edges; nodeParser; edgeParser}) {\n const {name, nodes, edges, nodeParser, edgeParser} = props;\n // create a new empty graph\n const graph = new Graph();\n\n const graphName = name || Date.now();\n graph.setGraphName(graphName);\n\n // add nodes\n const glNodes = nodes.map((node) => {\n const {id} = nodeParser(node);\n return new Node({\n id,\n data: node\n });\n });\n graph.batchAddNodes(glNodes);\n\n const glEdges = edges.map((edge) => {\n const {id, sourceId, targetId, directed} = edgeParser(edge);\n return new Edge({\n id,\n sourceId,\n targetId,\n directed,\n data: edge\n });\n });\n graph.batchAddEdges(glEdges);\n return graph;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NodeOptions} from '../graph/node';\nimport {log} from '../utils/log';\n\nexport function basicNodeParser(node: any): Pick<NodeOptions, 'id'> {\n if (node.id === undefined) {\n log.error('Invalid node: id is missing.')();\n return null;\n }\n return {id: node.id};\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {EdgeOptions} from '../graph/edge';\nimport {log} from '../utils/log';\n\nexport function basicEdgeParser(edge: any): Omit<EdgeOptions, 'data'> {\n const {id, directed, sourceId, targetId} = edge;\n\n if (sourceId === undefined || targetId === undefined) {\n log.error('Invalid edge: sourceId or targetId is missing.')();\n return null;\n }\n\n return {\n id,\n directed: directed || false,\n sourceId,\n targetId\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {createGraph} from './create-graph';\nimport {basicNodeParser} from './node-parsers';\nimport {basicEdgeParser} from './edge-parsers';\nimport {log} from '../utils/log';\n\nexport const JSONLoader = ({json, nodeParser = basicNodeParser, edgeParser = basicEdgeParser}) => {\n const {name = 'default', nodes, edges} = json;\n if (!nodes) {\n log.error('Invalid graph: nodes is missing.')();\n return null;\n }\n\n const graph = createGraph({name, nodes, edges, nodeParser, edgeParser});\n return graph;\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Component, render} from 'preact';\n\n// import {FlyToInterpolator} from '@deck.gl/core';\nimport type {Deck, Viewport, Widget, WidgetPlacement} from '@deck.gl/core';\nimport {LongPressButton} from './long-press-button';\n\nexport const ViewControlWrapper = ({children}) => (\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n position: 'absolute',\n zIndex: 99,\n userSelect: 'none'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const NavigationButtonContainer = ({children}) => (\n <div\n style={{\n background: '#f7f7f7',\n borderRadius: '23px',\n border: '0.5px solid #eaeaea',\n boxShadow: 'inset 11px 11px 5px -7px rgba(230, 230, 230, 0.49)',\n height: '46px',\n width: '46px'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport type NavigationButtonProps = {\n left: any;\n top: any;\n rotate?: number;\n children?: any;\n onClick?: () => void;\n};\n\nexport const NavigationButton = (props: NavigationButtonProps) => (\n <div\n onClick={props.onClick}\n style={{\n color: '#848484',\n cursor: 'pointer',\n position: 'absolute',\n left: props.left,\n top: props.top,\n transform: `rotate(${props.rotate || 0}deg)`\n // &:hover,\n // &:active {\n // color: #00ade6;\n // }\n }}\n >\n {' '}\n {props.children}{' '}\n </div>\n);\n\nexport const ZoomControlWrapper = ({children}) => (\n <div\n style={{\n alignItems: 'center',\n background: '#f7f7f7',\n border: '0.5px solid #eaeaea',\n display: 'flex',\n flexDirection: 'column',\n marginTop: '6px',\n padding: '2px 0',\n width: '18px'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const VerticalSlider = ({children}) => (\n <div\n style={{\n display: 'inline-block',\n height: '100px',\n padding: '0',\n width: '10px'\n\n // > input[type='range'][orient='vertical'] {\n // -webkit-appearance: slider-vertical;\n // height: 100px;\n // padding: 0;\n // margin: 0;\n // width: 10px;\n // }\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const ZoomControlButton = ({children}) => (\n <div\n style={{\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n margin: '-4px'\n\n // &:hover,\n // &:active {\n // color: #00ade6;\n // }\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport type ViewControlProps = {\n id?: string;\n viewId?: string;\n placement?: WidgetPlacement;\n fitBounds: () => void;\n panBy?: (dx: number, dy: number) => void;\n zoomBy?: (delta: number) => void;\n zoomLevel: number;\n minZoom: number;\n maxZoom: number;\n deltaPan: number;\n deltaZoom: number;\n /** CSS inline style overrides. */\n style?: Partial<CSSStyleDeclaration>;\n /** Additional CSS class. */\n className?: string;\n};\n\nexport class ViewControl extends Component<ViewControlProps> {\n static displayName = 'ViewControl';\n\n static defaultProps: Required<ViewControlProps> = {\n id: undefined,\n viewId: undefined,\n placement: 'top-left',\n fitBounds: () => {},\n panBy: () => {},\n zoomBy: () => {},\n zoomLevel: 1,\n deltaPan: 10,\n deltaZoom: 0.1,\n minZoom: 0.1,\n maxZoom: 1,\n style: {},\n className: ''\n };\n\n // pan actions\n panUp = () => this.props.panBy(0, this.props.deltaPan);\n panDown = () => this.props.panBy(0, -1 * this.props.deltaPan);\n panLeft = () => this.props.panBy(this.props.deltaPan, 0);\n panRight = () => this.props.panBy(-1 * this.props.deltaPan, 0);\n\n // zoom actions\n zoomIn = () => this.props.zoomBy(this.props.deltaZoom);\n zoomOut = () => this.props.zoomBy(-1 * this.props.deltaZoom);\n onChangeZoomLevel = (evt) => {\n const delta = evt.target.value - this.props.zoomLevel;\n this.props.zoomBy(delta);\n };\n\n render() {\n const buttons = [\n {top: -2, left: 14, rotate: 0, onClick: this.panUp, content: '\u25B2', key: 'up'},\n {top: 12, left: 0, rotate: -90, onClick: this.panLeft, content: '\u25C0', key: 'left'},\n {top: 12, left: 28, rotate: 90, onClick: this.panRight, content: '\u25B6', key: 'right'},\n {top: 25, left: 14, rotate: 180, onClick: this.panDown, content: '\u25BC', key: 'down'}\n ];\n\n return (\n <ViewControlWrapper>\n <NavigationButtonContainer>\n {buttons.map((b: any) => (\n <NavigationButton key={b.key} top={`${b.top}px`} left={`${b.left}px`} rotate={b.rotate}>\n <LongPressButton onClick={b.onClick}>{b.content}</LongPressButton>\n </NavigationButton>\n ))}\n <NavigationButton\n top={'12px'}\n left={'16px'}\n onClick={() => {\n // console.log('on click fit bounds') || this.props.fitBounds;\n }}\n >\n {'\u00A4'}\n </NavigationButton>\n </NavigationButtonContainer>\n <ZoomControlWrapper>\n <ZoomControlButton>\n <LongPressButton onClick={this.zoomIn}>{'+'}</LongPressButton>\n </ZoomControlButton>\n <VerticalSlider>\n <input\n type=\"range\"\n value={this.props.zoomLevel}\n min={this.props.minZoom}\n max={this.props.maxZoom}\n step={this.props.deltaZoom}\n onChange={this.onChangeZoomLevel}\n /* @ts-expect-error TODO */\n orient=\"vertical\"\n />\n </VerticalSlider>\n <ZoomControlButton>\n <LongPressButton onClick={this.zoomOut}>{'-'}</LongPressButton>\n </ZoomControlButton>\n </ZoomControlWrapper>\n </ViewControlWrapper>\n );\n }\n}\n\nexport class ViewControlWidget implements Widget<ViewControlProps> {\n id = 'zoom';\n props: ViewControlProps;\n placement: WidgetPlacement = 'top-left';\n orientation: 'vertical' | 'horizontal' = 'vertical';\n viewId?: string | null = null;\n viewports: {[id: string]: Viewport} = {};\n deck?: Deck<any>;\n element?: HTMLDivElement;\n\n constructor(props: ViewControlProps) {\n this.props = {...ViewControl.defaultProps, ...props};\n this.id = props.id || 'zoom';\n this.viewId = props.viewId || null;\n this.placement = props.placement || 'top-left';\n // this.orientation = props.orientation || 'vertical';\n // props.transitionDuration = props.transitionDuration || 200;\n // props.zoomInLabel = props.zoomInLabel || 'Zoom In';\n // props.zoomOutLabel = props.zoomOutLabel || 'Zoom Out';\n props.style = props.style || {};\n this.props = props;\n }\n\n onAdd({deck}: {deck: Deck<any>}): HTMLDivElement {\n this.deck = deck;\n this.element = document.createElement('div');\n\n const {style, className} = this.props;\n this.element.classList.add('deck-widget', 'deck-widget-zoom');\n if (className) {\n this.element.classList.add(className);\n }\n if (style) {\n Object.entries(style).map(([key, value]) =>\n this.element.style.setProperty(key, value as string)\n );\n }\n const ui = (\n <ViewControl\n {...this.props}\n zoomBy={this.handleDeltaZoom.bind(this)}\n panBy={this.handlePanBy.bind(this)}\n />\n );\n render(ui, this.element);\n\n return this.element;\n }\n\n onRemove() {\n this.deck = undefined;\n this.element = undefined;\n }\n\n setProps(props: Partial<ViewControlProps>) {\n Object.assign(this.props, props);\n }\n\n onViewportChange(viewport: Viewport) {\n this.viewports[viewport.id] = viewport;\n }\n\n handleDeltaZoom(deltaZoom: number) {\n // console.log('Handle delta zoom');\n for (const view of this.deck.getViewports()) {\n this.handleZoomView(view, view.zoom + deltaZoom);\n }\n }\n\n handlePanBy(deltaX: number, deltaY: number) {\n // console.log('Handle panby', deltaX, deltaY);\n for (const viewport of this.deck.getViewports()) {\n this.handlePanViewport(viewport, deltaX, deltaY);\n }\n }\n\n handleZoomView(viewport: Viewport, nextZoom: number) {\n const viewId = this.viewId || viewport?.id || 'default-view';\n // @ts-expect-error TODO we lack a proper API for getting viewStates\n const viewState = this.deck.viewManager.viewState || viewport;\n const nextViewState = {\n ...viewState,\n zoom: nextZoom\n // transitionDuration: this.props.transitionDuration,\n // transitionInterpolator: new FlyToInterpolator()\n };\n\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});\n }\n\n handlePanViewport(viewport: Viewport, deltaX: number, deltaY: number) {\n const viewId = this.viewId || viewport?.id || 'default-view';\n // @ts-expect-error TODO we lack a proper API for getting viewStates\n const viewState = this.deck.viewManager.viewState || viewport;\n // console.log('Handle pan viewport', deltaX, deltaY, viewState);\n const nextViewState = {\n ...viewState,\n position: [viewport.position[0] + deltaX, viewport.position[1] + deltaY]\n };\n\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Component} from 'preact';\n\nexport type LongPressButtonProps = {\n onClick: () => void;\n children: any;\n};\n\nexport class LongPressButton extends Component<LongPressButtonProps> {\n buttonPressTimer: ReturnType<typeof setTimeout> | null = null;\n\n _repeat = () => {\n if (this.buttonPressTimer) {\n this.props.onClick();\n this.buttonPressTimer = setTimeout(this._repeat, 100);\n }\n };\n\n _handleButtonPress = () => {\n this.buttonPressTimer = setTimeout(this._repeat, 100);\n };\n\n _handleButtonRelease = () => {\n if (this.buttonPressTimer) {\n clearTimeout(this.buttonPressTimer);\n }\n this.buttonPressTimer = null;\n };\n\n render() {\n return (\n <div className=\"deck-widget-button\">\n <div\n style={{\n pointerEvents: 'auto'\n }}\n onMouseDown={(event) => {\n this._handleButtonPress();\n document.addEventListener('mouseup', this._handleButtonRelease, {once: true});\n }}\n >\n {this.props.children}\n </div>\n </div>\n );\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {createGraph} from './create-graph';\nimport {log} from '../utils/log';\nimport {basicNodeParser} from './node-parsers';\nimport {basicEdgeParser} from './edge-parsers';\n\n/** @deprecated Use loadSimpleJSONGraph */\nexport const JSONLoader = ({json, nodeParser, edgeParser}) =>\n loadSimpleJSONGraph(json, {nodeParser, edgeParser});\n\n/** A loader for a simple graph format */\nexport function loadSimpleJSONGraph(\n json: Record<string, unknown>,\n options?: {nodeParser; edgeParser}\n) {\n const {nodeParser = basicNodeParser, edgeParser = basicEdgeParser} = options;\n const {name = 'default', nodes, edges} = json;\n if (!nodes) {\n log.error('Invalid graph: nodes is missing.')();\n return null;\n }\n\n const graph = createGraph({name, nodes, edges, nodeParser, edgeParser});\n return graph;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["JSONLoader", "isEqual", "d3", "import_meta", "import_meta", "newD3Edge", "computeControlPoint", "import_core", "Color", "getOffset", "offX", "offY", "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", "getOffset", "import_preact", "_jsx", "_jsxs", "_jsx", "JSONLoader"]
|
|
3
|
+
"sources": ["../src/index.ts", "../src/utils/log.ts", "../src/core/cache.ts", "../src/graph/graph.ts", "../src/graph/node.ts", "../src/graph/edge.ts", "../src/core/graph-engine.ts", "../src/core/graph-layout.ts", "../src/layouts/simple-layout.ts", "../src/layouts/d3-force/d3-force-layout.ts", "../src/layouts/d3-dag/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-style-engine.ts", "../src/style/style-property.ts", "../src/style/style-engine.ts", "../src/style/graph-stylesheet.schema.ts", "../src/style/graph-style-accessor-map.ts", "../src/utils/layer-utils.ts", "../src/utils/collapsed-chains.ts", "../src/core/interaction-manager.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/loaders/create-graph.ts", "../src/loaders/node-parsers.ts", "../src/loaders/edge-parsers.ts", "../src/loaders/json-loader.ts", "../src/widgets/view-control-widget.tsx", "../src/widgets/long-press-button.tsx", "../src/loaders/simple-json-graph-loader.ts", "../src/_deprecated/old-constants.ts"],
|
|
4
|
+
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// core - Graph representation and layout\nexport {Graph} from './graph/graph';\nexport {Node} from './graph/node';\nexport {Edge} from './graph/edge';\n\nexport {GraphEngine} from './core/graph-engine';\n\n// graph-layers layouts\nexport type {\n GraphLayoutProps,\n GraphLayoutState,\n GraphLayoutEventDetail\n} 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 {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 {Marker, NodeState, NodeType, EdgeType, EdgeDecoratorType, LayoutState} from './core/constants';\n\n// deck.gl components\nexport {GraphLayer} from './layers/graph-layer';\nexport {EdgeLayer} from './layers/edge-layer';\nexport {StyleEngine} from './style/style-engine';\nexport {GraphStyleEngine} from './style/graph-style-engine';\nexport type {\n GraphStylesheet,\n GraphStylesheetInput,\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// Widgets\n\nexport {ViewControlWidget} from './widgets/view-control-widget';\n\n// graph format loaders\nexport {loadSimpleJSONGraph} from './loaders/simple-json-graph-loader';\n\n// utils\nexport {mixedGetPosition} from './utils/layer-utils';\nexport {log} from './utils/log';\n\n// DEPRECATED\nexport {createGraph} from './loaders/create-graph';\nexport {JSONLoader} from './loaders/simple-json-graph-loader';\n\nexport {MARKER_TYPE, NODE_STATE,EDGE_STATE,NODE_TYPE,EDGE_TYPE,EDGE_DECORATOR_TYPE,LAYOUT_STATE} from './_deprecated/old-constants';\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 {warn} from '../utils/log';\nimport {Cache} from '../core/cache';\nimport {Edge} from './edge';\nimport {Node} from './node';\n\nexport type GraphProps = {\n name?: string;\n nodes?: Node[];\n edges?: Edge[];\n};\n\n/** Basic graph data structure */\nexport class Graph extends EventTarget {\n /** List object of nodes. */\n private _nodeMap: Record<string, Node> = {};\n /** List of object edges. */\n private _edgeMap: Record<string, Edge> = {};\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\n constructor(props?: GraphProps);\n constructor(graph: Graph);\n\n /**\n * The constructor of the Graph class.\n * @param graph - copy the graph if this exists.\n */\n constructor(propsOrGraph?: GraphProps | Graph) {\n super();\n\n if (propsOrGraph instanceof Graph) {\n // if a Graph instance was supplied, copy the supplied graph into this graph\n const graph = propsOrGraph;\n this._name = graph?._name || this._name;\n this._nodeMap = graph._nodeMap;\n this._edgeMap = graph._edgeMap;\n } else {\n // If graphProps were supplied, initialize this graph from the supplied props\n const props = propsOrGraph;\n this._name = props?.name || this._name;\n this.batchAddNodes(props?.nodes || []);\n this.batchAddEdges(props?.edges || []);\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.dispatchEvent(new CustomEvent('transactionStart'));\n return cb();\n } finally {\n this.dispatchEvent(new CustomEvent('transactionEnd'));\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.dispatchEvent(new CustomEvent('onNodeAdded', {node} as any));\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.dispatchEvent(new CustomEvent('onNodeAdded', {node} as any));\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(): Node[] {\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 /**\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.dispatchEvent(new CustomEvent('onNodeUpdated', {node} as any));\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.dispatchEvent(new CustomEvent('onEdgeAdded', {edge} as any));\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.dispatchEvent(new CustomEvent('onEdgeUpdated', {edge} as any));\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.dispatchEvent(new CustomEvent('onNodeRemoved', {node} as any));\n }\n\n /**\n * Get all the edges of the graph.\n * @return get all the edges in the graph.\n */\n getEdges(): Edge[] {\n this._updateCache('edges', () => Object.values(this._edgeMap));\n\n return this._cache.get('edges') as Edge[];\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 }\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): Edge[] {\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 * 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: Graph): boolean {\n if (!graph || !(graph instanceof Graph)) {\n return false;\n }\n return this.version === graph.version;\n }\n\n _bumpVersion(): void {\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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NodeState} from '../core/constants';\nimport {Edge} from './edge';\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 {\n public id: string | number;\n /** Keep a reference to origin data. */\n private _data: Record<string, unknown>;\n /** List edges. */\n private _connectedEdges: Record<string, Edge> = {};\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(): Edge[] {\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: Edge | Edge[]): void {\n const iterableEdges = Array.isArray(edge) ? edge : [edge];\n iterableEdges.forEach((e) => {\n this._connectedEdges[e.id] = 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: Edge | Edge[]): void {\n const iterableEdges = Array.isArray(edge) ? edge : [edge];\n iterableEdges.forEach((e) => {\n e.removeNode(this);\n delete this._connectedEdges[e.id];\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 {Node} from './node';\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 {\n /** Unique uuid of the edge. */\n public 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, Node> = {};\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: Node): void {\n this._connectedNodes[node.getId()] = node;\n }\n\n removeNode(node: Node): void {\n delete this._connectedNodes[node.getId()];\n }\n\n getConnectedNodes(): Node[] {\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 type {Bounds2D} from '@math.gl/types';\n\nimport type {Node} from '../graph/node';\nimport {Edge} from '../graph/edge';\nimport {Graph} from '../graph/graph';\nimport {GraphLayout, type GraphLayoutEventDetail} from './graph-layout';\nimport {Cache} from './cache';\nimport {log} from '../utils/log';\n\nexport type GraphEngineProps = {\n graph: Graph;\n layout: GraphLayout;\n};\n\n/** Graph engine controls the graph data and layout calculation */\nexport class GraphEngine extends EventTarget {\n props: Readonly<Required<GraphEngineProps>>;\n\n private readonly _graph: Graph;\n private readonly _layout: GraphLayout;\n private readonly _cache = new Cache<'nodes' | 'edges', Node[] | Edge[]>();\n private _layoutDirty = false;\n private _transactionInProgress = false;\n\n constructor(props: GraphEngineProps);\n /** @deprecated Use props constructor: new GraphEngine(props) */\n constructor(graph: Graph, layout: GraphLayout);\n\n constructor(props: GraphEngineProps | Graph, layout?: GraphLayout) {\n super();\n if (props instanceof Graph) {\n props = {\n graph: props,\n layout\n };\n }\n\n this.props = props;\n this._graph = props.graph;\n this._layout = props.layout;\n }\n\n /** Getters */\n\n getNodes = (): Node[] => {\n this._updateCache('nodes', () =>\n this._graph.getNodes().filter((node) => this.getNodePosition(node))\n );\n\n return this._cache.get('nodes') as Node[];\n };\n\n getEdges = () => {\n this._updateCache('edges', () =>\n this._graph.getEdges().filter((edge) => this.getEdgePosition(edge))\n );\n\n return this._cache.get('edges') as Edge[];\n };\n\n getNodePosition = (node: Node) => this._layout.getNodePosition(node);\n\n getEdgePosition = (edge: Edge) => this._layout.getEdgePosition(edge);\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();\n\n /** Operations on the graph */\n\n lockNodePosition = (node, x, y) => this._layout.lockNodePosition(node, x, y);\n\n unlockNodePosition = (node) => this._layout.unlockNodePosition(node);\n\n /**\n * @fires GraphEngine#onLayoutStart\n */\n _onLayoutStart = (event: Event) => {\n log.log(0, 'GraphEngine: layout start')();\n const detail = event instanceof CustomEvent ? (event.detail as GraphLayoutEventDetail) : undefined;\n /**\n * @event GraphEngine#onLayoutStart\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutStart', {detail}));\n };\n\n /**\n * @fires GraphEngine#onLayoutChange\n */\n _onLayoutChange = (event: Event) => {\n log.log(0, 'GraphEngine: layout update event')();\n const detail = event instanceof CustomEvent ? (event.detail as GraphLayoutEventDetail) : undefined;\n /**\n * @event GraphEngine#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutChange', {detail}));\n };\n\n /**\n * @fires GraphEngine#onLayoutDone\n */\n _onLayoutDone = (event: Event) => {\n log.log(0, 'GraphEngine: layout end')();\n const detail = event instanceof CustomEvent ? (event.detail as GraphLayoutEventDetail) : undefined;\n /**\n * @event GraphEngine#onLayoutDone\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutDone', {detail}));\n };\n\n /**\n * @fires GraphEngine#onLayoutError\n */\n _onLayoutError = (event: Event) => {\n const detail = event instanceof CustomEvent ? event.detail : undefined;\n /**\n * @event GraphEngine#onLayoutError\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutError', {detail}));\n };\n\n _onGraphStructureChanged = (entity) => {\n this._layoutDirty = true;\n this._graphChanged();\n };\n\n _onTransactionStart = () => {\n this._transactionInProgress = true;\n };\n\n _onTransactionEnd = () => {\n this._transactionInProgress = false;\n this._graphChanged();\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._graph.addEventListener('transactionStart', this._onTransactionStart);\n this._graph.addEventListener('transactionEnd', this._onTransactionEnd);\n this._graph.addEventListener('onNodeAdded', this._onGraphStructureChanged);\n this._graph.addEventListener('onNodeRemoved', this._onGraphStructureChanged);\n this._graph.addEventListener('onEdgeAdded', this._onGraphStructureChanged);\n this._graph.addEventListener('onEdgeRemoved', this._onGraphStructureChanged);\n\n this._layout.addEventListener('onLayoutStart', this._onLayoutStart);\n this._layout.addEventListener('onLayoutChange', this._onLayoutChange);\n this._layout.addEventListener('onLayoutDone', this._onLayoutDone);\n this._layout.addEventListener('onLayoutError', this._onLayoutError);\n\n this._layout.initializeGraph(this._graph);\n this._layout.start();\n };\n\n clear = () => {\n log.log(1, 'GraphEngine: end');\n this._graph.removeEventListener('transactionStart', this._onTransactionStart);\n this._graph.removeEventListener('transactionEnd', this._onTransactionEnd);\n this._graph.removeEventListener('onNodeAdded', this._onGraphStructureChanged);\n this._graph.removeEventListener('onNodeRemoved', this._onGraphStructureChanged);\n this._graph.removeEventListener('onEdgeAdded', this._onGraphStructureChanged);\n this._graph.removeEventListener('onEdgeRemoved', this._onGraphStructureChanged);\n\n this._layout.removeEventListener('onLayoutStart', this._onLayoutStart);\n this._layout.removeEventListener('onLayoutChange', this._onLayoutChange);\n this._layout.removeEventListener('onLayoutDone', this._onLayoutDone);\n this._layout.removeEventListener('onLayoutError', this._onLayoutError);\n };\n\n resume = () => this._layout.resume();\n\n stop = () => this._layout.stop();\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._graph.version + this._layout.version);\n }\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} from '../graph/graph';\nimport type {Node} from '../graph/node';\nimport type {Edge} from '../graph/edge';\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\n/** All the layout classes are extended from this base layout class. */\nexport abstract class GraphLayout<\n OptionsT extends GraphLayoutProps = GraphLayoutProps\n> extends EventTarget {\n /** Name of the layout. */\n protected readonly _name: string = 'GraphLayout';\n /** Extra configuration options of the layout. */\n protected _options: OptionsT;\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 options extra configuration options of the layout\n */\n constructor(options: OptionsT) {\n super();\n this._options = options;\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._name === layout._name && isEqual(this._options, layout._options);\n }\n\n // Accessors\n\n /** access the position of the node in the layout */\n getNodePosition(node: Node): [number, number] {\n return [0, 0];\n }\n\n /** access the layout information of the edge */\n getEdgePosition(edge: Edge) {\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: Node, 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: Node) {}\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);\n /** update the existing graph */\n abstract updateGraph(graph: Graph);\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\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._name}): 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.dispatchEvent(new CustomEvent<GraphLayoutEventDetail>('onLayoutStart', {detail}));\n };\n\n /** @fires GraphLayout#onLayoutChange */\n protected _onLayoutChange = (): void => {\n log.log(0, `GraphLayout(${this._name}): 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.dispatchEvent(new CustomEvent<GraphLayoutEventDetail>('onLayoutChange', {detail}));\n };\n\n /** @fires GraphLayout#onLayoutDone */\n protected _onLayoutDone = (): void => {\n log.log(0, `GraphLayout(${this._name}): 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.dispatchEvent(new CustomEvent<GraphLayoutEventDetail>('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.dispatchEvent(new CustomEvent('onLayoutError'));\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 {Node} from '../graph/node';\nimport {Edge} from '../graph/edge';\nimport {Graph} from '../graph/graph';\n\nexport type SimpleLayoutProps = GraphLayoutProps & {\n /** The accessor lets the application supply the position ([x, y]) of each node.\n * @example\n ```js\n <GraphGL\n {...otherProps}\n layout={\n new SimpleLayout({\n nodePositionAccessor: node => [\n node.getPropertyValue('x'),\n node.getPropertyValue('y'),\n ]\n })\n }\n />\n ```\n */\n nodePositionAccessor?: (node: Node) => [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 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: Record<string, Node> = {};\n protected _nodePositionMap: Record<string, [number, number] | null> = {};\n\n constructor(options: SimpleLayoutProps = {}) {\n super({...SimpleLayout.defaultProps, ...options});\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 this._nodeMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = node;\n return res;\n }, {});\n this._nodePositionMap = graph.getNodes().reduce<Record<string, [number, number] | null>>(\n (res, node) => {\n res[node.getId()] = this._normalizePosition(\n this._options.nodePositionAccessor(node)\n );\n return res;\n },\n {}\n );\n }\n\n setNodePositionAccessor = (accessor) => {\n (this._options as any).nodePositionAccessor = accessor;\n };\n\n getNodePosition = (node: Node | null): [number, number] => {\n if (!node) {\n return [0, 0] as [number, number];\n }\n const position = this._nodePositionMap[node.getId()];\n return position ?? [0, 0] as [number, number];\n };\n\n getEdgePosition = (edge: Edge) => {\n const sourceNode = this._nodeMap[edge.getSourceNodeId()];\n const targetNode = this._nodeMap[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, x, y) => {\n this._nodePositionMap[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\n protected override _updateBounds(): void {\n const positions = Object.values(this._nodePositionMap).map((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 {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: Required<D3ForceLayoutOptions> = {\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 = 'D3';\n private _positionsByNodeId = new Map();\n private _graph: any;\n private _worker: any;\n\n constructor(options?: D3ForceLayoutOptions) {\n super(options);\n\n this._options = {\n ...D3ForceLayout.defaultProps,\n ...options\n };\n }\n\n initializeGraph(graph) {\n this._graph = graph;\n }\n\n // for streaming new data on the same graph\n updateGraph(graph) {\n this._graph = graph;\n\n this._positionsByNodeId = new Map(\n this._graph.getNodes().map((node) => [node.id, this._positionsByNodeId.get(node.id)])\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 this._worker.postMessage({\n nodes: this._graph.getNodes().map((node) => ({\n id: node.id,\n ...this._positionsByNodeId.get(node.id)\n })),\n edges: this._graph.getEdges().map((edge) => ({\n id: edge.id,\n source: edge.getSourceNodeId(),\n target: edge.getTargetNodeId()\n })),\n options: this._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) => {\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) => {\n if (!node) {\n return null;\n }\n\n const d3Node = this._positionsByNodeId.get(node.id);\n if (d3Node) {\n return d3Node.coordinates;\n }\n\n return null;\n };\n\n lockNodePosition = (node, x, y) => {\n const d3Node = this._positionsByNodeId.get(node.id);\n this._positionsByNodeId.set(node.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) => {\n const d3Node = this._positionsByNodeId.get(node.id);\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} from '../../graph/graph';\nimport {Node} from '../../graph/node';\nimport {Edge} from '../../graph/edge';\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 D3DagLayoutBuilderName = 'sugiyama' | 'grid' | 'zherebko';\nexport type D3DagLayeringName = 'simplex' | 'longestPath' | 'topological';\nexport type D3DagDecrossName = 'twoLayer' | 'opt' | 'dfs';\nexport type D3DagCoordName = 'simplex' | 'greedy' | 'quad' | 'center' | 'topological';\nexport type D3DagDagBuilderName = 'graph' | 'connect' | 'stratify';\nexport type D3DagOrientation = 'TB' | 'BT' | 'LR' | 'RL';\nexport type D3DagCenterOption = boolean | {x?: boolean; y?: boolean};\n\nexport type D3DagLayoutOperator =\n | DefaultSugiyama\n | DefaultGrid\n | DefaultZherebko\n | ((dag: MutGraph<Node, Edge>) => LayoutResult);\n\nexport type D3DagLayoutOptions = GraphLayoutProps & {\n /** Which high-level layout operator to use. */\n layout?: D3DagLayoutBuilderName | D3DagLayoutOperator;\n /** Layering operator used by sugiyama layouts. */\n layering?: D3DagLayeringName | LayeringOperator;\n /** Decrossing operator used by sugiyama layouts. */\n decross?: D3DagDecrossName | DecrossOperator;\n /** Coordinate assignment operator used by sugiyama layouts. */\n coord?: D3DagCoordName | CoordOperator;\n /** Node sizing accessor passed to the active layout. */\n nodeSize?: NodeSize<Node, Edge>;\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?: D3DagOrientation;\n /** Whether to center the layout along each axis. */\n center?: D3DagCenterOption;\n /** How to convert the Graph into a DAG. */\n dagBuilder?: D3DagDagBuilderName | DagBuilder;\n /** Whether to collapse linear chains of nodes into a single representative. */\n collapseLinearChains?: boolean;\n};\n\ntype DagBuilder = (graph: Graph) => MutGraph<Node, Edge>;\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<Node, Edge>) => LayoutResult;\n\ntype LayoutWithConfiguration = LayoutCallable & {\n layering?: (layer?: any) => any;\n decross?: (decross?: any) => any;\n coord?: (coord?: any) => any;\n nodeSize?: (size?: NodeSize<Node, Edge>) => any;\n gap?: (gap?: readonly [number, number]) => any;\n};\n\ntype CollapsedChainDescriptor = {\n id: string;\n nodeIds: (string | number)[];\n edgeIds: (string | number)[];\n representativeId: string | number;\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 DEFAULT_NODE_SIZE: readonly [number, number] = [140, 120];\nconst DEFAULT_GAP: readonly [number, number] = [0, 0];\n\nconst LAYERING_FACTORIES: Record<D3DagLayeringName, () => LayeringOperator> = {\n simplex: layeringSimplex,\n longestPath: layeringLongestPath,\n topological: layeringTopological\n};\n\nconst DECROSS_FACTORIES: Record<D3DagDecrossName, () => DecrossOperator> = {\n twoLayer: decrossTwoLayer,\n opt: decrossOpt,\n dfs: decrossDfs\n};\n\nconst COORD_FACTORIES: Record<D3DagCoordName, () => CoordOperator> = {\n simplex: coordSimplex,\n greedy: coordGreedy,\n quad: coordQuad,\n center: coordCenter,\n topological: coordTopological\n};\n\nconst LAYOUT_FACTORIES: Record<D3DagLayoutBuilderName, () => LayoutWithConfiguration> = {\n sugiyama: () => sugiyama(),\n grid: () => grid(),\n zherebko: () => zherebko()\n};\n\nconst DAG_ID_SEPARATOR = '::';\n\n/**\n * Layout that orchestrates d3-dag operators from declarative options.\n */\nexport class D3DagLayout extends GraphLayout<D3DagLayoutOptions> {\n static defaultProps: Required<Omit<D3DagLayoutOptions, 'layout'>> & {layout: D3DagLayoutBuilderName} = {\n layout: 'sugiyama',\n layering: 'topological',\n decross: 'twoLayer',\n coord: 'greedy',\n nodeSize: DEFAULT_NODE_SIZE,\n gap: DEFAULT_GAP,\n separation: DEFAULT_GAP,\n orientation: 'TB',\n center: true,\n dagBuilder: 'graph',\n collapseLinearChains: false\n };\n\n protected readonly _name = 'D3DagLayout';\n\n private _graph: Graph | null = null;\n private _dag: MutGraph<Node, Edge> | 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 private _nodeLookup = new Map<string | number, Node>();\n private _stringIdLookup = new Map<string, string | number>();\n private _edgeLookup = new Map<string, Edge>();\n private _incomingParentMap = new Map<string | number, (string | number)[]>();\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(options: D3DagLayoutOptions = {}) {\n super({...D3DagLayout.defaultProps, ...options});\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 this._chainDescriptors = new Map();\n this._nodeToChainId = new Map();\n this._hiddenNodeIds = new Set();\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 if (!this._graph) {\n log.log(1, `D3DagLayout: toggleCollapsedChain(${chainId}) ignored (no graph)`);\n return;\n }\n if (!this._chainDescriptors.has(chainId)) {\n this._refreshCollapsedChains();\n }\n if (!this._chainDescriptors.has(chainId)) {\n log.log(1, `D3DagLayout: toggleCollapsedChain(${chainId}) skipped (unknown chain)`);\n return;\n }\n const collapsed = this._isChainCollapsed(chainId);\n const nextState = !collapsed;\n log.log(\n 0,\n `D3DagLayout: toggleCollapsedChain(${chainId}) -> ${nextState ? 'collapsed' : 'expanded'}`\n );\n // eslint-disable-next-line no-console\n console.log(\n `D3DagLayout: toggleCollapsedChain(${chainId}) -> ${nextState ? 'collapsed' : 'expanded'}`\n );\n this._collapsedChainState.set(chainId, nextState);\n this._runLayout();\n }\n\n setCollapsedChains(chainIds: Iterable<string>): void {\n if (!this._graph) {\n log.log(1, 'D3DagLayout: setCollapsedChains ignored (no graph)');\n return;\n }\n if (!this._chainDescriptors.size) {\n this._refreshCollapsedChains();\n }\n const desired = new Set(chainIds);\n log.log(0, `D3DagLayout: setCollapsedChains(${desired.size}) requested`);\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 if (changed) {\n log.log(0, 'D3DagLayout: setCollapsedChains -> changes detected, rerunning layout');\n // eslint-disable-next-line no-console\n console.log('D3DagLayout: setCollapsedChains -> changes detected, rerunning layout');\n this._runLayout();\n } else {\n log.log(1, 'D3DagLayout: setCollapsedChains -> no changes');\n // eslint-disable-next-line no-console\n console.log('D3DagLayout: setCollapsedChains -> no changes');\n }\n }\n\n setPipelineOptions(options: Partial<D3DagLayoutOptions>): void {\n this._options = {...this._options, ...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 if (options.collapseLinearChains !== undefined && this._graph) {\n this._runLayout();\n }\n }\n\n getNodePosition(node: Node): [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: Edge):\n | {\n type: string;\n sourcePosition: [number, number];\n targetPosition: [number, number];\n controlPoints: [number, number][];\n }\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: Edge): [number, number][] {\n return this._edgeControlPoints.get(edge.getId()) || [];\n }\n\n lockNodePosition(node: Node, 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: Node): void {\n this._lockedNodePositions.delete(node.getId());\n }\n\n private _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 private _refreshCollapsedChains(): void {\n const previousChainCount = this._chainDescriptors.size;\n if (!this._graph) {\n if (previousChainCount > 0) {\n log.log(0, 'D3DagLayout: clearing collapsed chains (graph unavailable)');\n // eslint-disable-next-line no-console\n console.log('D3DagLayout: clearing collapsed chains (graph unavailable)');\n }\n this._chainDescriptors.clear();\n this._nodeToChainId.clear();\n this._hiddenNodeIds.clear();\n return;\n }\n\n log.log(\n 0,\n `D3DagLayout: refreshing collapsed chains (previous=${previousChainCount})`\n );\n // eslint-disable-next-line no-console\n console.log(\n `D3DagLayout: refreshing collapsed chains (previous=${previousChainCount})`\n );\n\n const collapseDefault =\n this._options.collapseLinearChains ?? D3DagLayout.defaultProps.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, Edge[]>();\n const outgoingCache = new Map<string | number, Edge[]>();\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: Node | 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 ? 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 log.log(\n 0,\n `D3DagLayout: refreshed collapsed chains -> total=${this._chainDescriptors.size}, collapsed=${collapsedCount}`\n );\n }\n\n private _buildDag(): MutGraph<Node, Edge> {\n const builder = this._options.dagBuilder ?? D3DagLayout.defaultProps.dagBuilder;\n\n if (typeof builder === 'function') {\n const dag = builder(this._graph);\n return this._ensureEdgeData(dag);\n }\n\n switch (builder) {\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<Node, Edge> {\n const dag = createDagGraph<Node, Edge>();\n const dagNodeLookup = new Map<string | number, MutGraphNode<Node, Edge>>();\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<Node, Edge> {\n type ConnectDatum = {source: string; target: string; edge: Edge};\n\n const connect = graphConnect()\n .sourceId(({source}: ConnectDatum): string => source)\n .targetId(({target}: ConnectDatum): string => target)\n .nodeDatum((id: string): Node => this._nodeLookup.get(this._fromDagId(id)) ?? new Node({id}))\n .single(true);\n\n const data: ConnectDatum[] = this._graph\n .getEdges()\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 (datum instanceof Node) {\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<Node, Edge> {\n const stratify = graphStratify()\n .id((node: Node): string => this._toDagId(node.getId()))\n .parentIds((node: Node): 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 dag = stratify(this._graph.getNodes().filter((node) => !this._shouldSkipNode(node.getId())));\n return this._ensureEdgeData(dag);\n }\n\n private _isChainCollapsed(chainId: string): boolean {\n const collapseDefault =\n this._options.collapseLinearChains ?? D3DagLayout.defaultProps.collapseLinearChains;\n return this._collapsedChainState.get(chainId) ?? collapseDefault;\n }\n\n private _shouldSkipNode(nodeId: string | number): boolean {\n return this._hiddenNodeIds.has(nodeId);\n }\n\n private _mapNodeId(nodeId: string | number): string | number {\n const chainId = this._nodeToChainId.get(nodeId);\n if (!chainId) {\n return nodeId;\n }\n const descriptor = this._chainDescriptors.get(chainId);\n if (!descriptor) {\n return nodeId;\n }\n return this._isChainCollapsed(chainId) ? descriptor.representativeId : nodeId;\n }\n\n private _updateCollapsedChainNodeMetadata(): void {\n if (!this._graph) {\n return;\n }\n for (const node of this._graph.getNodes()) {\n const nodeId = node.getId();\n const chainId = this._nodeToChainId.get(nodeId);\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 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 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 private _createChainId(nodeIds: (string | number)[]): string {\n return `chain:${nodeIds.map((id) => this._toDagId(id)).join('>')}`;\n }\n\n private _getIncomingEdges(node: Node): Edge[] {\n const nodeId = node.getId();\n return node\n .getConnectedEdges()\n .filter((edge) => edge.isDirected() && edge.getTargetNodeId() === nodeId);\n }\n\n private _getOutgoingEdges(node: Node): Edge[] {\n const nodeId = node.getId();\n return node\n .getConnectedEdges()\n .filter((edge) => edge.isDirected() && edge.getSourceNodeId() === nodeId);\n }\n\n private _ensureEdgeData<T>(dag: MutGraph<Node, T>): MutGraph<Node, Edge> {\n for (const link of dag.links()) {\n if (link.data instanceof Edge) {\n continue;\n }\n const sourceNode = link.source.data;\n const targetNode = link.target.data;\n if (!(sourceNode instanceof Node) || !(targetNode instanceof Node)) {\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<Node, Edge>).data = edge;\n }\n }\n\n return dag as unknown as MutGraph<Node, Edge>;\n }\n\n private _getLayoutOperator(): LayoutWithConfiguration {\n if (this._layoutOperator) {\n return this._layoutOperator;\n }\n\n const layoutOption = this._options.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 if (layout.layering && this._options.layering) {\n layout = layout.layering(this._resolveLayering(this._options.layering));\n }\n\n if (layout.decross && this._options.decross) {\n layout = layout.decross(this._resolveDecross(this._options.decross));\n }\n\n if (layout.coord && this._options.coord) {\n layout = layout.coord(this._resolveCoord(this._options.coord));\n }\n\n const nodeSize = this._options.nodeSize ?? DEFAULT_NODE_SIZE;\n if (layout.nodeSize) {\n layout = layout.nodeSize(nodeSize);\n }\n\n const gap = this._options.separation ?? this._options.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 _resolveLayering(option: D3DagLayeringName | LayeringOperator): LayeringOperator {\n if (typeof option === 'string') {\n return LAYERING_FACTORIES[option]();\n }\n return option;\n }\n\n private _resolveDecross(option: D3DagDecrossName | DecrossOperator): Decross<Node, Edge> {\n if (typeof option === 'string') {\n return DECROSS_FACTORIES[option]();\n }\n return option;\n }\n\n private _resolveCoord(option: D3DagCoordName | CoordOperator): Coord<Node, Edge> {\n if (typeof option === 'string') {\n return COORD_FACTORIES[option]();\n }\n return option;\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 const edge = link.data instanceof Edge ? link.data : this._edgeLookup.get(this._edgeKey(source.getId(), target.getId()));\n if (!edge) {\n continue;\n }\n const points = (link.points && link.points.length ? link.points : [[link.source.x ?? 0, link.source.y ?? 0], [link.target.x ?? 0, link.target.y ?? 0]]);\n this._rawEdgePoints.set(edge.getId(), points.map((point) => [...point] as [number, number]));\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._options.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(\n edgeId,\n transformed.length > 2 ? transformed.slice(1, -1) : []\n );\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._options.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 private _edgeKey(sourceId: string | number, targetId: string | number): string {\n return `${this._toDagId(sourceId)}${DAG_ID_SEPARATOR}${this._toDagId(targetId)}`;\n }\n\n private _toDagId(id: string | number): string {\n return String(id);\n }\n\n private _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\nimport {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';\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 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: any;\n private _nodeMap: any;\n private _edgeMap: any;\n private _graph: any;\n private _worker: Worker | null = null;\n private _callbacks: any;\n\n constructor(options: GPUForceLayoutOptions = {}) {\n const _options = {\n ...GPUForceLayout.defaultProps,\n ...options\n };\n\n super(_options);\n\n this._name = 'GPU';\n this._options = _options;\n // store graph and prepare internal data\n this._d3Graph = {nodes: [], edges: []};\n this._nodeMap = {};\n this._edgeMap = {};\n this._callbacks = {\n onLayoutChange: this._onLayoutChange,\n onLayoutDone: this._onLayoutDone\n };\n }\n\n initializeGraph(graph) {\n this._graph = graph;\n this._nodeMap = {};\n this._edgeMap = {};\n // nodes\n const d3Nodes = graph.getNodes().map((node) => {\n const id = node.id;\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[node.id] = d3Node;\n return d3Node;\n });\n // edges\n const d3Edges = graph.getEdges().map((edge) => {\n const d3Edge = {\n id: edge.id,\n source: this._nodeMap[edge.getSourceNodeId()],\n target: this._nodeMap[edge.getTargetNodeId()]\n };\n this._edgeMap[edge.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._options;\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) {\n if (this._graph.getGraphName() !== graph.getGraphName()) {\n // reset the maps\n this._nodeMap = {};\n this._edgeMap = {};\n }\n this._graph = graph;\n // update internal layout data\n // nodes\n const newNodeMap = {};\n const newD3Nodes = graph.getNodes().map((node) => {\n const id = node.id;\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[node.id];\n const newD3Node = oldD3Node ? oldD3Node : {id, x, y, fx, fy, collisionRadius};\n newNodeMap[node.id] = newD3Node;\n return newD3Node;\n });\n this._nodeMap = newNodeMap;\n this._d3Graph.nodes = newD3Nodes;\n // edges\n const newEdgeMap = {};\n const newD3Edges = graph.getEdges().map((edge) => {\n const oldD3Edge = this._edgeMap[edge.id];\n const newD3Edge = oldD3Edge || {\n id: edge.id,\n source: newNodeMap[edge.getSourceNodeId()],\n target: newNodeMap[edge.getTargetNodeId()]\n };\n newEdgeMap[edge.id] = newD3Edge;\n return newD3Edge;\n });\n this._edgeMap = newEdgeMap;\n this._d3Graph.edges = newD3Edges;\n }\n\n updateD3Graph(graph) {\n const existingNodes = this._graph.getNodes();\n // update internal layout data\n // nodes\n const newNodeMap = {};\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[node.id] = node;\n return node;\n });\n this._nodeMap = newNodeMap;\n this._d3Graph.nodes = newD3Nodes;\n // edges\n const newEdgeMap = {};\n const newD3Edges = graph.edges.map((edge) => {\n newEdgeMap[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): [number, number] => {\n const d3Node = this._nodeMap[node.id];\n if (d3Node) {\n return [d3Node.x, d3Node.y];\n }\n return [0, 0];\n };\n\n getEdgePosition = (edge) => {\n const d3Edge = this._edgeMap[edge.id];\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, x, y) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.x = x;\n d3Node.y = y;\n d3Node.fx = x;\n d3Node.fy = y;\n this._callbacks.onLayoutChange();\n this._callbacks.onLayoutDone();\n };\n\n unlockNodePosition = (node) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.fx = null;\n d3Node.fy = null;\n };\n\n protected override _updateBounds(): void {\n const positions = Object.values(this._nodeMap ?? {}).map((node) =>\n this._normalizePosition(node)\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 {Graph} from '../../graph/graph';\n\nexport type RadialLayoutProps = GraphLayoutProps & {\n radius?: number;\n tree?: any;\n};\n\nconst traverseTree = (nodeId, nodeMap) => {\n const node = nodeMap[nodeId];\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.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 radius: 500\n };\n\n _name = 'RadialLayout';\n _graph: Graph = null;\n // custom layout data structure\n _hierarchicalPoints = {};\n nestedTree;\n\n constructor(options: RadialLayoutProps = {}) {\n super(options);\n this._options = {\n ...RadialLayout.defaultProps,\n ...options\n };\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 const nodeCount = this._graph.getNodes().length;\n if (nodeCount === 0) {\n return;\n }\n\n const {tree} = this._options;\n\n if (!tree || tree.length === 0) {\n return;\n }\n\n const {radius} = this._options;\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) => {\n return this._hierarchicalPoints[node.id];\n };\n\n // spline curve version\n getEdgePosition = (edge) => {\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, x, y) => {\n this._hierarchicalPoints[node.id] = [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 {Node} from '../../graph/node';\nimport {Graph} 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 alpha: 3,\n nBodyStrength: -1200,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 1400\n };\n\n _name = 'ForceMultiGraphLayout';\n _graph: Graph;\n\n // d3 part\n // custom graph data\n _d3Graph = {nodes: [], edges: []};\n _nodeMap = {};\n _edgeMap = {};\n _simulator;\n\n constructor(options: ForceMultiGraphLayoutProps = {}) {\n super(options);\n this._options = {\n ...ForceMultiGraphLayout.defaultProps,\n ...options\n };\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 sourceDegree = this._graph.getDegree(d3Edge.source.id);\n const targetDegree = this._graph.getDegree(d3Edge.target.id);\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._options;\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) {\n this._graph = graph;\n\n // nodes\n const newNodeMap = {};\n const newD3Nodes = graph.getNodes().map((node) => {\n const oldD3Node = this._nodeMap[node.id];\n const newD3Node = oldD3Node ? oldD3Node : {id: node.id};\n newNodeMap[node.id] = newD3Node;\n return newD3Node;\n });\n\n // edges\n // bucket edges between the same source/target node pairs.\n const nodePairs = graph.getEdges().reduce((res, edge) => {\n const nodes = [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 = nodes.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 = [];\n const newEdgeMap = {};\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[firstEdge.getSourceNodeId()],\n target: newNodeMap[firstEdge.getTargetNodeId()],\n isVirtual: false\n };\n newEdgeMap[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[firstEdge.getSourceNodeId()],\n target: newNodeMap[firstEdge.getTargetNodeId()],\n isVirtual: true,\n edgeCount: betweenEdges.length\n };\n newEdgeMap[pairId] = newD3Edge;\n newD3Edges.push(newD3Edge);\n\n betweenEdges.forEach((e, idx) => {\n newEdgeMap[e.id] = {\n type: 'spline-curve',\n id: e.id,\n source: newNodeMap[e.getSourceNodeId()],\n target: newNodeMap[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: Node): [number, number] => {\n const d3Node = this._nodeMap[node.id];\n if (d3Node) {\n return [d3Node.x, d3Node.y];\n }\n // default value\n return [0, 0];\n };\n\n getEdgePosition = (edge) => {\n const d3Edge = this._edgeMap[edge.id];\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[d3Edge.virtualEdgeId];\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, x, y) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.x = x;\n d3Node.y = y;\n this._onLayoutChange();\n this._onLayoutDone();\n };\n\n protected override _updateBounds(): void {\n const positions = Object.values(this._nodeMap ?? {}).map((node) =>\n this._normalizePosition(node)\n );\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 {Node} from '../../graph/node';\nimport {Graph} from '../../graph/graph';\n\nexport type HivePlotLayoutProps = GraphLayoutProps & {\n innerRadius?: number;\n outerRadius?: number;\n getNodeAxis?: (node: Node) => any;\n};\n\nexport class HivePlotLayout extends GraphLayout<HivePlotLayoutProps> {\n static defaultProps = {\n innerRadius: 100,\n outerRadius: 500,\n getNodeAxis: (node: Node) => node.getPropertyValue('group')\n } as const satisfies Readonly<Required<HivePlotLayoutProps>>;\n\n _name = 'HivePlot';\n _graph: Graph;\n _totalAxis: number;\n _axis: Record<string, any>;\n _nodeMap = {};\n _nodePositionMap = {};\n\n constructor(options: HivePlotLayoutProps = {}) {\n super(options);\n this._options = {\n ...HivePlotLayout.defaultProps,\n ...options\n };\n }\n\n initializeGraph(graph: Graph) {\n this.updateGraph(graph);\n }\n\n updateGraph(graph) {\n const {getNodeAxis, innerRadius, outerRadius} = this._options;\n this._graph = graph;\n this._nodeMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = node;\n return res;\n }, {});\n\n // bucket nodes into few axis\n\n this._axis = graph.getNodes().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 = Object.keys(this._axis).reduce((res, 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 res[node.getId()] = [x, y];\n });\n return res;\n }, {});\n }\n\n start() {\n this._onLayoutChange();\n this._onLayoutDone();\n }\n\n stop() {}\n\n update() {}\n\n resume() {}\n\n getNodePosition = (node) => this._nodePositionMap[node.getId()];\n\n getEdgePosition = (edge) => {\n const {getNodeAxis} = this._options;\n const sourceNodeId = edge.getSourceNodeId();\n const targetNodeId = edge.getTargetNodeId();\n\n const sourcePosition = this._nodePositionMap[sourceNodeId];\n const targetPosition = this._nodePositionMap[targetNodeId];\n\n const sourceNode = this._nodeMap[sourceNodeId];\n const targetNode = this._nodeMap[targetNodeId];\n\n const sourceNodeAxis = getNodeAxis(sourceNode);\n const targetNodeAxis = getNodeAxis(targetNode);\n\n if (sourceNodeAxis === targetNodeAxis) {\n return {\n type: 'line',\n sourcePosition,\n targetPosition,\n controlPoints: []\n };\n }\n\n const controlPoint = computeControlPoint({\n sourcePosition,\n sourceNodeAxis,\n targetPosition,\n targetNodeAxis,\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, x, y) => {\n this._nodePositionMap[node.id] = [x, y];\n this._onLayoutChange();\n this._onLayoutDone();\n };\n\n protected override _updateBounds(): void {\n const positions = Object.values(this._nodePositionMap ?? {}).map((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 {Graph} from '../graph/graph';\nimport type {Node} from '../graph/node';\nimport {GraphLayout} from '../core/graph-layout';\nimport {GraphEngine} from '../core/graph-engine';\n\nimport {GraphStyleEngine, type GraphStylesheet} from '../style/graph-style-engine';\nimport {mixedGetPosition} from '../utils/layer-utils';\nimport {InteractionManager} from '../core/interaction-manager';\nimport {buildCollapsedChainLayers} from '../utils/collapsed-chains';\n\nimport {warn} from '../utils/log';\n\nimport {\n DEFAULT_GRAPH_LAYER_STYLESHEET,\n normalizeGraphLayerStylesheet,\n type GraphLayerEdgeStyle,\n type GraphLayerNodeStyle,\n type GraphLayerStylesheet,\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';\n\nimport {JSONLoader} from '../loaders/json-loader';\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\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\nlet NODE_STYLE_DEPRECATION_WARNED = false;\nlet EDGE_STYLE_DEPRECATION_WARNED = false;\n\nexport type GraphLayerProps = CompositeLayerProps & _GraphLayerProps;\n\nexport type _GraphLayerProps = {\n graph?: Graph;\n layout?: GraphLayout;\n graphLoader?: (opts: {json: any}) => Graph;\n engine?: GraphEngine;\n\n stylesheet?: GraphLayerStylesheet;\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};\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: Required<_GraphLayerProps> = {\n // Composite layer props\n // @ts-expect-error composite layer props\n pickable: true,\n\n // Graph props\n graphLoader: JSONLoader,\n\n stylesheet: DEFAULT_GRAPH_LAYER_STYLESHEET,\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 };\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;\n };\n\n private readonly _edgeAttachmentHelper = new EdgeAttachmentHelper();\n\n forceUpdate = () => {\n if (this.context && this.context.layerManager) {\n this.setNeedsUpdate();\n this.setChangeFlags({dataChanged: true} as any); // TODO\n }\n };\n\n constructor(props: GraphLayerProps & CompositeLayerProps) {\n super(props);\n }\n\n initializeState() {\n this.state = {\n interactionManager: new InteractionManager(this.props as any, () => this.forceUpdate())\n };\n const engine = this.props.engine;\n this._setGraphEngine(engine);\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n\n updateState({props, oldProps, changeFlags}) {\n if (\n changeFlags.dataChanged &&\n props.data &&\n !(Array.isArray(props.data) && props.data.length === 0)\n ) {\n // console.log(props.data);\n const graph = this.props.graphLoader({json: props.data});\n const layout = this.props.layout;\n const graphEngine = new GraphEngine({graph, layout});\n this._setGraphEngine(graphEngine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n } else if (changeFlags.propsChanged && props.graph !== oldProps.graph) {\n const graphEngine = new GraphEngine({graph: props.graph, layout: props.layout});\n this._setGraphEngine(graphEngine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n } else if (changeFlags.propsChanged && props.engine !== oldProps.engine) {\n this._setGraphEngine(props.engine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n }\n }\n\n finalize() {\n this._removeGraphEngine();\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 _createStyleEngine(style: GraphStylesheet, context: string): GraphStyleEngine | null {\n try {\n return new GraphStyleEngine(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 _setGraphEngine(graphEngine: GraphEngine) {\n if (graphEngine === this.state.graphEngine) {\n return;\n }\n\n this._removeGraphEngine();\n if (graphEngine) {\n this.state.graphEngine = graphEngine;\n this.state.graphEngine.run();\n // added or removed a node, or in general something layout related changed\n this.state.graphEngine.addEventListener('onLayoutChange', this.forceUpdate);\n }\n }\n\n _removeGraphEngine() {\n if (this.state.graphEngine) {\n this.state.graphEngine.removeEventListener('onLayoutChange', this.forceUpdate);\n this.state.graphEngine.clear();\n this.state.graphEngine = null;\n }\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._createStyleEngine(\n restStyle as unknown as GraphStylesheet,\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\n .filter(Boolean)\n .flatMap((style, idx) => {\n const {decorators, data = (edges) => edges, visible = true, ...restEdgeStyle} = style;\n const stylesheet = this._createStyleEngine(\n {\n type: 'edge',\n ...restEdgeStyle\n } as GraphStylesheet,\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 .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._createStyleEngine(\n decoratorStyle as unknown as GraphStylesheet,\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 return [this.createEdgeLayers(), this.createNodeLayers()];\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: Node) => 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._createStyleEngine(\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 GraphStylesheet<'marker'>,\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: Node) => 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._createStyleEngine(\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 GraphStylesheet<'marker'>,\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", "// 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 {StyleEngine, type DeckGLUpdateTriggers} from './style-engine';\nimport {\n GraphStylesheetSchema,\n type GraphStylesheet,\n type GraphStylesheetParsed\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 GraphStyleEngine extends StyleEngine {\n constructor(style: GraphStylesheet, {stateUpdateTrigger}: {stateUpdateTrigger?: unknown} = {}) {\n const result = GraphStylesheetSchema.safeParse(style);\n const parsedStyle = result.success\n ? result.data\n : sanitizeStylesheet(style, result.error.issues);\n\n super(parsedStyle as GraphStylesheet, {\n deckglAccessorMap: GRAPH_DECKGL_ACCESSOR_MAP,\n deckglUpdateTriggers: GRAPH_DECKGL_UPDATE_TRIGGERS,\n stateUpdateTrigger\n });\n }\n}\n\nexport {\n GraphStyleScaleTypeEnum,\n GraphStyleScaleSchema,\n GraphStyleAttributeReferenceSchema,\n GraphStyleLeafValueSchema,\n GraphStyleStateMapSchema,\n GraphStyleValueSchema,\n GraphStylesheetSchema\n} from './graph-stylesheet.schema';\n\nexport type {\n GraphStylesheet,\n GraphStylesheetInput,\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(style: GraphStylesheet, issues: ZodIssue[]): GraphStylesheetParsed {\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' ? (style as {type: string}).type : 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 = GraphStylesheetSchema.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(target: Record<string, unknown> | unknown[], path: (string | number)[]) {\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 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 \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 (typeof config.clamp === 'boolean' && 'clamp' in scale && typeof anyScale.clamp === 'function') {\n anyScale.clamp(config.clamp);\n }\n if (typeof config.nice !== 'undefined' && 'nice' in scale && typeof anyScale.nice === 'function') {\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 Boolean(value) && typeof value === 'object' && !Array.isArray(value) && 'attribute' in (value as Record<string, unknown>);\n}\n\n/** Determine whether a style value maps interaction states. */\nfunction isStatefulValue(value: unknown): value is Record<string, GraphStyleLeafValue> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value) && !isAttributeReference(value);\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' ? valueMap.default : 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(\n key,\n value,\n updateTrigger\n );\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 StyleEngineOptions<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 StyleEngine<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: StyleEngineOptions<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((res, attr) => {\n res[attr] = Object.entries(rules).reduce((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 }, {} as Record<string, unknown>);\n return res;\n }, {} as Record<string, any>);\n\n const simplifiedStyleMap = Object.entries(attrMap).reduce((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 }, {} as Record<string, unknown>);\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((res, accessor) => {\n res[accessor] = this.getDeckGLAccessor(accessor);\n return res;\n }, {} as Record<string, (...args: any[]) => unknown>);\n }\n\n getDeckGLUpdateTriggers() {\n return this.getDeckGLUpdateTriggersForType().reduce((res, accessor) => {\n res[accessor] = this.getDeckGLAccessorUpdateTrigger(accessor);\n return res;\n }, {} as Record<string, unknown>);\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\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(/^@.+/, 'Attribute reference strings must start with \"@\" and include an attribute name.'),\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([\n GraphStyleLeafValueSchema,\n GraphStyleStateMapSchema\n]);\n\n/**\n * Parsed style property value that may include state overrides.\n */\nexport type GraphStyleValue = z.infer<typeof GraphStyleValueSchema>;\n\nconst COMMON_DECKGL_PROPS = {\n getOffset: 'offset',\n opacity: 'opacity'\n} as const;\n\n/**\n * Translation table between graph style properties and the underlying deck.gl accessors for\n * each supported style primitive type.\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\n/**\n * Supported graph style primitive identifiers (e.g. `circle`, `edge`).\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\ntype GraphStylePropertyKey<TType extends GraphStyleType> = Extract<\n (typeof GRAPH_DECKGL_ACCESSOR_MAP)[TType][keyof (typeof GRAPH_DECKGL_ACCESSOR_MAP)[TType]],\n PropertyKey\n>;\n\ntype GraphStyleStatefulValue<TValue> = TValue | {[state: string]: TValue};\n\ntype GraphStylePropertyMap<TType extends GraphStyleType, TValue> = Partial<\n Record<GraphStylePropertyKey<TType>, GraphStyleStatefulValue<TValue>>\n>;\n\n/**\n * Typed representation of a stylesheet definition for a specific graph primitive.\n */\nexport type GraphStylesheet<\n TType extends GraphStyleType = GraphStyleType,\n TValue = GraphStyleLeafValue\n> = {type: TType} &\n GraphStylePropertyMap<TType, TValue> &\n Partial<Record<GraphStyleSelector, GraphStylePropertyMap<TType, TValue>>>;\n\nconst GraphStyleSelectorKeySchema = z.string().regex(/^:[^\\s]+/, 'Selectors must start with \":\".');\n\nfunction createPropertiesSchema(keys: readonly string[]) {\n const shape = keys.reduce<Record<string, ZodTypeAny>>((acc, key) => {\n acc[key] = GraphStyleValueSchema.optional();\n return acc;\n }, {});\n return z.object(shape).partial().strict();\n}\n\nconst GraphStylesheetVariants = (\n Object.entries(GRAPH_DECKGL_ACCESSOR_MAP) as Array<\n [GraphStyleType, (typeof GRAPH_DECKGL_ACCESSOR_MAP)[GraphStyleType]]\n >\n).map(([type, accessors]) => {\n const propertyKeys = Object.values(accessors);\n const propertyKeySet = new Set<string>(propertyKeys);\n const propertiesSchema = createPropertiesSchema(propertyKeys);\n const baseShape: Record<string, ZodTypeAny> = {\n type: z.literal(type)\n };\n for (const key of propertyKeys) {\n baseShape[key] = GraphStyleValueSchema.optional();\n }\n\n return z\n .object(baseShape)\n .catchall(z.unknown())\n .superRefine((value, ctx) => {\n for (const key of Object.keys(value)) {\n if (key === 'type') {\n continue;\n }\n if (propertyKeySet.has(key)) {\n 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 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 const selectorResult = propertiesSchema.safeParse(value[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\ntype GraphStylesheetVariantSchema = (typeof GraphStylesheetVariants)[number];\n\n/**\n * Schema that validates stylesheet definitions for all graph style primitives.\n */\nexport const GraphStylesheetSchema = z.discriminatedUnion(\n 'type',\n GraphStylesheetVariants as [\n GraphStylesheetVariantSchema,\n ...GraphStylesheetVariantSchema[]\n ]\n);\n\n/**\n * Runtime type accepted by {@link GraphStylesheetSchema} before validation.\n */\nexport type GraphStylesheetInput = 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\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 {Node} from '../graph/node';\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: Node): 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): Node[] {\n if (!engine) {\n return [];\n }\n\n return engine.getNodes().filter((node) => isChainRepresentative(node));\n}\n\nexport type ChainOutlineGetter = (node: Node) => [number, number][] | null;\n\nexport function createChainOutlineGetter(engine: GraphEngine | null | undefined): ChainOutlineGetter {\n if (!engine) {\n return () => null;\n }\n\n const graph = engine.props.graph;\n const cache = new Map<string, [number, number][] | null>();\n\n // eslint-disable-next-line max-statements, complexity\n return (node: Node): [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 if (!graph) {\n cache.set(cacheKey, null);\n return 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 = graph.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: Node[];\n collapsedNodes: Node[];\n collapsedOutlineNodes: Node[];\n expandedNodes: Node[];\n expandedOutlineNodes: Node[];\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((node) => !node.getPropertyValue('isCollapsedChain'));\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 {Edge} from '../graph/edge';\nimport {Node} from '../graph/node';\nimport {GraphEngine} from './graph-engine';\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: Edge): boolean {\n return edge\n .getConnectedNodes()\n .some((node) => node.getState() === 'selected' && node.shouldHighlightConnectedEdges());\n}\n\nfunction setNodeState(node: Node, 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: Node) => 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: Node | null = null;\n private _lastSelectedNode: Node | 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 Node;\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 ((object as 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.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 newState =\n this._lastSelectedNode !== null && this._lastSelectedNode.id === this._lastHoveredNode?.id\n ? 'selected'\n : '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 Node, '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 isSameNode = this._lastHoveredNode && this._lastHoveredNode.id === info.object.id;\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, x, y);\n\n setNodeState(info.object, '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, 'default');\n this.engine.unlockNodePosition(info.object);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {GraphStylesheet, 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 = GraphStylesheet<GraphNodeStyleType> & {\n pickable?: boolean;\n visible?: boolean;\n data?: (nodes: any[]) => any;\n};\n\nexport type GraphLayerEdgeDecoratorStyle = GraphStylesheet<GraphEdgeDecoratorType>;\n\ntype EdgeStyleType = Extract<GraphStyleType, 'Edge' | 'edge'>;\n\nexport type GraphLayerEdgeStyle = (\n | GraphStylesheet<EdgeStyleType>\n | (Omit<GraphStylesheet<EdgeStyleType>, 'type'> & {type?: EdgeStyleType})\n) & {\n decorators?: GraphLayerEdgeDecoratorStyle[];\n data?: (edges: any[]) => any;\n visible?: boolean;\n};\n\nexport type GraphLayerStylesheet = {\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\nconst DEFAULT_EDGE_STYLE: GraphLayerEdgeStyle = {\n type: 'edge',\n stroke: 'black',\n strokeWidth: 1,\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)\n .filter(Boolean)\n .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 initializeState() {\n this.state = {characterSet: []};\n }\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 updateState({props, oldProps, changeFlags}) {\n super.updateState({props, oldProps, changeFlags} as any);\n if (changeFlags.propsOrDataChanged) {\n const {getText} = props;\n let textLabels = [];\n if (typeof getText === 'function') {\n textLabels = props.data.map(getText);\n } else {\n textLabels = [getText];\n }\n const characterSet = new Set(textLabels.join(''));\n const uniqueCharacters = Array.from(characterSet);\n this.setState({characterSet: uniqueCharacters});\n }\n }\n\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 return [\n new TextLayer(\n this.getSubLayerProps({\n id: '__text-layer',\n data,\n sizeScale: scaleWithZoom ? Math.pow(2, this.context.viewport.zoom - 1) : 1,\n characterSet: this.state.characterSet,\n getPosition,\n getColor,\n getSize,\n getTextAnchor,\n getAlignmentBaseline,\n getAngle,\n getText: newGetText,\n maxWidth: textMaxWidth ?? 12,\n wordBreak: textWordBreak ?? 'break-all',\n fontFamily: fontFamily ?? 'Red Hat Text',\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';\nimport {window} from 'global';\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: 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([\n 0.5,\n 1,\n 0,\n 0,\n 1,\n 0\n ]);\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 =\n 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 {Node} from '../graph/node';\n\nimport {GraphStyleEngine, type GraphStylesheet} from '../style/graph-style-engine';\nimport type {GraphLayerNodeStyle} from '../style/graph-layer-stylesheet';\nimport {getNodeBoundaryIntersection, type GeometryNodeType, type NodeGeometry} from '../utils/node-boundary';\nimport {warn} from '../utils/log';\n\ntype NumericAccessor = ((node: Node) => number) | number | null | undefined;\ntype OffsetAccessor =\n | ((node: Node) => [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(accessor: NumericAccessor, node: Node): 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: Node): [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: Node) {\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: Node,\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: Node, 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(geometry, 'cornerRadius', resolveAccessorValue(accessors.getCornerRadius, node));\n assignDimension(geometry, 'radius', resolveAccessorValue(accessors.getRadius, node));\n },\n 'path-rounded-rectangle': (node, accessors, geometry) => {\n assignRectangleDimensions(node, accessors, geometry);\n assignDimension(geometry, 'cornerRadius', resolveAccessorValue(accessors.getCornerRadius, node));\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((acc, node) => acc.set(node.getId(), node), new Map<string | number, Node>());\n\n return (edge: any) =>\n 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\n .filter(Boolean)\n .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: GraphStyleEngine | null = null;\n try {\n stylesheet = new GraphStyleEngine(restStyle as GraphStylesheet, {\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: Node) => {\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, Node>,\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: GraphStyleEngine\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: Node,\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 {Edge} from '../graph/edge';\nimport {Node} from '../graph/node';\nimport {Graph} from '../graph/graph';\n\n/**\n * @deprecated Use `new Graph(name, nodes, edges)`\n * Create a graph from a list of Nodes and edges\n */\nexport function createGraph(props: {name; nodes; edges; nodeParser; edgeParser}) {\n const {name, nodes, edges, nodeParser, edgeParser} = props;\n // create a new empty graph\n const graph = new Graph();\n\n const graphName = name || Date.now();\n graph.setGraphName(graphName);\n\n // add nodes\n const glNodes = nodes.map((node) => {\n const {id} = nodeParser(node);\n return new Node({\n id,\n data: node\n });\n });\n graph.batchAddNodes(glNodes);\n\n const glEdges = edges.map((edge) => {\n const {id, sourceId, targetId, directed} = edgeParser(edge);\n return new Edge({\n id,\n sourceId,\n targetId,\n directed,\n data: edge\n });\n });\n graph.batchAddEdges(glEdges);\n return graph;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NodeOptions} from '../graph/node';\nimport {error} from '../utils/log';\n\nexport function basicNodeParser(node: any): Pick<NodeOptions, 'id'> {\n if (node.id === undefined) {\n error('Invalid node: id is missing.');\n return null;\n }\n return {id: node.id};\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {EdgeOptions} from '../graph/edge';\nimport {error} from '../utils/log';\n\nexport function basicEdgeParser(edge: any): Omit<EdgeOptions, 'data'> {\n const {id, directed, sourceId, targetId} = edge;\n\n if (sourceId === undefined || targetId === undefined) {\n error('Invalid edge: sourceId or targetId is missing.');\n return null;\n }\n\n return {\n id,\n directed: directed || false,\n sourceId,\n targetId\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {createGraph} from './create-graph';\nimport {basicNodeParser} from './node-parsers';\nimport {basicEdgeParser} from './edge-parsers';\nimport {error} from '../utils/log';\n\nexport const JSONLoader = ({json, nodeParser = basicNodeParser, edgeParser = basicEdgeParser}) => {\n const {name = 'default', nodes, edges} = json;\n if (!nodes) {\n error('Invalid graph: nodes is missing.');\n return null;\n }\n\n const graph = createGraph({name, nodes, edges, nodeParser, edgeParser});\n return graph;\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Component, render} from 'preact';\n\n// import {FlyToInterpolator} from '@deck.gl/core';\nimport {Widget, type Deck, type Viewport, type WidgetPlacement} from '@deck.gl/core';\nimport {LongPressButton} from './long-press-button';\n\nexport const ViewControlWrapper = ({children}) => (\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n position: 'absolute',\n zIndex: 99,\n userSelect: 'none'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const NavigationButtonContainer = ({children}) => (\n <div\n style={{\n background: '#f7f7f7',\n borderRadius: '23px',\n border: '0.5px solid #eaeaea',\n boxShadow: 'inset 11px 11px 5px -7px rgba(230, 230, 230, 0.49)',\n height: '46px',\n width: '46px'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport type NavigationButtonProps = {\n left: any;\n top: any;\n rotate?: number;\n children?: any;\n onClick?: () => void;\n};\n\nexport const NavigationButton = (props: NavigationButtonProps) => (\n <div\n onClick={props.onClick}\n style={{\n color: '#848484',\n cursor: 'pointer',\n position: 'absolute',\n left: props.left,\n top: props.top,\n transform: `rotate(${props.rotate || 0}deg)`\n // &:hover,\n // &:active {\n // color: #00ade6;\n // }\n }}\n >\n {' '}\n {props.children}{' '}\n </div>\n);\n\nexport const ZoomControlWrapper = ({children}) => (\n <div\n style={{\n alignItems: 'center',\n background: '#f7f7f7',\n border: '0.5px solid #eaeaea',\n display: 'flex',\n flexDirection: 'column',\n marginTop: '6px',\n padding: '2px 0',\n width: '18px'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const VerticalSlider = ({children}) => (\n <div\n style={{\n display: 'inline-block',\n height: '100px',\n padding: '0',\n width: '10px'\n\n // > input[type='range'][orient='vertical'] {\n // -webkit-appearance: slider-vertical;\n // height: 100px;\n // padding: 0;\n // margin: 0;\n // width: 10px;\n // }\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const ZoomControlButton = ({children}) => (\n <div\n style={{\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n margin: '-4px'\n\n // &:hover,\n // &:active {\n // color: #00ade6;\n // }\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport type ViewControlProps = {\n id?: string;\n viewId?: string;\n placement?: WidgetPlacement;\n fitBounds: () => void;\n panBy?: (dx: number, dy: number) => void;\n zoomBy?: (delta: number) => void;\n zoomLevel: number;\n minZoom: number;\n maxZoom: number;\n deltaPan: number;\n deltaZoom: number;\n /** CSS inline style overrides. */\n style?: Partial<CSSStyleDeclaration>;\n /** Additional CSS class. */\n className?: string;\n};\n\nexport class ViewControl extends Component<ViewControlProps> {\n static displayName = 'ViewControl';\n\n static defaultProps: Required<ViewControlProps> = {\n id: undefined,\n viewId: undefined,\n placement: 'top-left',\n fitBounds: () => {},\n panBy: () => {},\n zoomBy: () => {},\n zoomLevel: 1,\n deltaPan: 10,\n deltaZoom: 0.1,\n minZoom: 0.1,\n maxZoom: 1,\n style: {},\n className: ''\n };\n\n // pan actions\n panUp = () => this.props.panBy(0, this.props.deltaPan);\n panDown = () => this.props.panBy(0, -1 * this.props.deltaPan);\n panLeft = () => this.props.panBy(this.props.deltaPan, 0);\n panRight = () => this.props.panBy(-1 * this.props.deltaPan, 0);\n\n // zoom actions\n zoomIn = () => this.props.zoomBy(this.props.deltaZoom);\n zoomOut = () => this.props.zoomBy(-1 * this.props.deltaZoom);\n onChangeZoomLevel = (evt) => {\n const delta = evt.target.value - this.props.zoomLevel;\n this.props.zoomBy(delta);\n };\n\n render() {\n const buttons = [\n {top: -2, left: 14, rotate: 0, onClick: this.panUp, content: '\u25B2', key: 'up'},\n {top: 12, left: 0, rotate: -90, onClick: this.panLeft, content: '\u25C0', key: 'left'},\n {top: 12, left: 28, rotate: 90, onClick: this.panRight, content: '\u25B6', key: 'right'},\n {top: 25, left: 14, rotate: 180, onClick: this.panDown, content: '\u25BC', key: 'down'}\n ];\n\n return (\n <ViewControlWrapper>\n <NavigationButtonContainer>\n {buttons.map((b: any) => (\n <NavigationButton key={b.key} top={`${b.top}px`} left={`${b.left}px`} rotate={b.rotate}>\n <LongPressButton onClick={b.onClick}>{b.content}</LongPressButton>\n </NavigationButton>\n ))}\n <NavigationButton\n top={'12px'}\n left={'16px'}\n onClick={() => {\n // console.log('on click fit bounds') || this.props.fitBounds;\n }}\n >\n {'\u00A4'}\n </NavigationButton>\n </NavigationButtonContainer>\n <ZoomControlWrapper>\n <ZoomControlButton>\n <LongPressButton onClick={this.zoomIn}>{'+'}</LongPressButton>\n </ZoomControlButton>\n <VerticalSlider>\n <input\n type=\"range\"\n value={this.props.zoomLevel}\n min={this.props.minZoom}\n max={this.props.maxZoom}\n step={this.props.deltaZoom}\n onChange={this.onChangeZoomLevel}\n /* @ts-expect-error TODO */\n orient=\"vertical\"\n />\n </VerticalSlider>\n <ZoomControlButton>\n <LongPressButton onClick={this.zoomOut}>{'-'}</LongPressButton>\n </ZoomControlButton>\n </ZoomControlWrapper>\n </ViewControlWrapper>\n );\n }\n}\n\nexport class ViewControlWidget extends Widget<ViewControlProps> {\n id = 'zoom';\n placement: WidgetPlacement = 'top-left';\n orientation: 'vertical' | 'horizontal' = 'vertical';\n viewId?: string | null = null;\n viewports: {[id: string]: Viewport} = {};\n element?: HTMLDivElement;\n className = 'deck-widget-view-control';\n\n constructor(props: ViewControlProps) {\n super(props);\n this.props = {...ViewControl.defaultProps, ...props};\n this.id = props.id || 'zoom';\n this.viewId = props.viewId || null;\n this.placement = props.placement || 'top-left';\n // this.orientation = props.orientation || 'vertical';\n // props.transitionDuration = props.transitionDuration || 200;\n // props.zoomInLabel = props.zoomInLabel || 'Zoom In';\n // props.zoomOutLabel = props.zoomOutLabel || 'Zoom Out';\n props.style = props.style || {};\n }\n\n onAdd({deck}: {deck: Deck<any>}): HTMLDivElement {\n this.deck = deck;\n this.element = document.createElement('div');\n\n const {style, className} = this.props;\n this.element.classList.add('deck-widget', 'deck-widget-zoom');\n if (className) {\n this.element.classList.add(className);\n }\n if (style) {\n Object.entries(style).map(([key, value]) =>\n this.element.style.setProperty(key, value as string)\n );\n }\n\n return this.element;\n }\n\n onRemove() {\n this.deck = undefined;\n this.element = undefined;\n }\n\n onRenderHTML(rootElement: HTMLElement): void {\n const ui = (\n <ViewControl\n {...this.props}\n zoomBy={this.handleDeltaZoom.bind(this)}\n panBy={this.handlePanBy.bind(this)}\n />\n );\n render(ui, rootElement);\n }\n\n setProps(props: Partial<ViewControlProps>) {\n Object.assign(this.props, props);\n }\n\n onViewportChange(viewport: Viewport) {\n this.viewports[viewport.id] = viewport;\n }\n\n handleDeltaZoom(deltaZoom: number) {\n // console.log('Handle delta zoom');\n for (const view of this.deck.getViewports()) {\n this.handleZoomView(view, view.zoom + deltaZoom);\n }\n }\n\n handlePanBy(deltaX: number, deltaY: number) {\n // console.log('Handle panby', deltaX, deltaY);\n for (const viewport of this.deck.getViewports()) {\n this.handlePanViewport(viewport, deltaX, deltaY);\n }\n }\n\n handleZoomView(viewport: Viewport, nextZoom: number) {\n const viewId = this.viewId || viewport?.id || 'default-view';\n // @ts-expect-error TODO we lack a proper API for getting viewStates\n const viewState = this.deck.viewManager.viewState || viewport;\n const nextViewState = {\n ...viewState,\n zoom: nextZoom\n // transitionDuration: this.props.transitionDuration,\n // transitionInterpolator: new FlyToInterpolator()\n };\n\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});\n }\n\n handlePanViewport(viewport: Viewport, deltaX: number, deltaY: number) {\n const viewId = this.viewId || viewport?.id || 'default-view';\n // @ts-expect-error TODO we lack a proper API for getting viewStates\n const viewState = this.deck.viewManager.viewState || viewport;\n // console.log('Handle pan viewport', deltaX, deltaY, viewState);\n const nextViewState = {\n ...viewState,\n position: [viewport.position[0] + deltaX, viewport.position[1] + deltaY]\n };\n\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Component} from 'preact';\n\nexport type LongPressButtonProps = {\n onClick: () => void;\n children: any;\n};\n\nexport class LongPressButton extends Component<LongPressButtonProps> {\n buttonPressTimer: ReturnType<typeof setTimeout> | null = null;\n\n _repeat = () => {\n if (this.buttonPressTimer) {\n this.props.onClick();\n this.buttonPressTimer = setTimeout(this._repeat, 100);\n }\n };\n\n _handleButtonPress = () => {\n this.buttonPressTimer = setTimeout(this._repeat, 100);\n };\n\n _handleButtonRelease = () => {\n if (this.buttonPressTimer) {\n clearTimeout(this.buttonPressTimer);\n }\n this.buttonPressTimer = null;\n };\n\n render() {\n return (\n <div className=\"deck-widget-button\">\n <div\n style={{\n pointerEvents: 'auto'\n }}\n onMouseDown={(event) => {\n this._handleButtonPress();\n document.addEventListener('mouseup', this._handleButtonRelease, {once: true});\n }}\n >\n {this.props.children}\n </div>\n </div>\n );\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {createGraph} from './create-graph';\nimport {error} from '../utils/log';\nimport {basicNodeParser} from './node-parsers';\nimport {basicEdgeParser} from './edge-parsers';\n\n/** @deprecated Use loadSimpleJSONGraph */\nexport const JSONLoader = ({json, nodeParser, edgeParser}) =>\n loadSimpleJSONGraph(json, {nodeParser, edgeParser});\n\n/** A loader for a simple graph format */\nexport function loadSimpleJSONGraph(\n json: Record<string, unknown>,\n options?: {nodeParser; edgeParser}\n) {\n const {nodeParser = basicNodeParser, edgeParser = basicEdgeParser} = options;\n const {name = 'default', nodes, edges} = json;\n if (!nodes) {\n error('Invalid graph: nodes is missing.');\n return null;\n }\n\n const graph = createGraph({name, nodes, edges, nodeParser, edgeParser});\n return graph;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {EdgeDecoratorType, EdgeState, EdgeType, LayoutState, NodeState, NodeType} 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\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["JSONLoader", "isEqual", "d3", "error", "createDagGraph", "import_meta", "import_meta", "newD3Edge", "computeControlPoint", "import_core", "import_layers", "import_zod", "Color", "error", "attribute", "formatted", "COMMON_DECKGL_PROPS", "GRAPH_DECKGL_ACCESSOR_MAP", "error", "GRAPH_DECKGL_ACCESSOR_MAP", "child", "getOffset", "offX", "offY", "polygon", "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", "error", "getOffset", "import_preact", "import_core", "_jsx", "_jsxs", "_jsx", "JSONLoader"]
|
|
7
7
|
}
|