@deck.gl-community/graph-layers 9.0.0
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/LICENSE +20 -0
- package/README.md +7 -0
- package/dist/core/base-layout.d.ts +71 -0
- package/dist/core/base-layout.js +133 -0
- package/dist/core/cache.d.ts +14 -0
- package/dist/core/cache.js +26 -0
- package/dist/core/constants.d.ts +101 -0
- package/dist/core/constants.js +48 -0
- package/dist/core/edge.d.ts +86 -0
- package/dist/core/edge.js +121 -0
- package/dist/core/graph-engine.d.ts +54 -0
- package/dist/core/graph-engine.js +128 -0
- package/dist/core/graph.d.ts +155 -0
- package/dist/core/graph.js +301 -0
- package/dist/core/interaction-manager.d.ts +40 -0
- package/dist/core/interaction-manager.js +169 -0
- package/dist/core/node.d.ts +103 -0
- package/dist/core/node.js +177 -0
- package/dist/index.cjs +3540 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +28 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.d.ts +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +49 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.d.ts +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +14 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.d.ts +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +73 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts +20 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +133 -0
- package/dist/layers/common-layers/marker-layer/atlas-data-url.d.ts +3 -0
- package/dist/layers/common-layers/marker-layer/atlas-data-url.js +8 -0
- package/dist/layers/common-layers/marker-layer/marker-layer.d.ts +13 -0
- package/dist/layers/common-layers/marker-layer/marker-layer.js +29 -0
- package/dist/layers/common-layers/marker-layer/marker-list.d.ts +62 -0
- package/dist/layers/common-layers/marker-layer/marker-list.js +67 -0
- package/dist/layers/common-layers/marker-layer/marker-mapping.d.ts +422 -0
- package/dist/layers/common-layers/marker-layer/marker-mapping.js +427 -0
- package/dist/layers/common-layers/spline-layer/spline-layer.d.ts +24 -0
- package/dist/layers/common-layers/spline-layer/spline-layer.js +68 -0
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.d.ts +16 -0
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +65 -0
- package/dist/layers/edge-layer.d.ts +25 -0
- package/dist/layers/edge-layer.js +75 -0
- package/dist/layers/edge-layers/curved-edge-layer.d.ts +6 -0
- package/dist/layers/edge-layers/curved-edge-layer.js +69 -0
- package/dist/layers/edge-layers/edge-label-layer.d.ts +6 -0
- package/dist/layers/edge-layers/edge-label-layer.js +42 -0
- package/dist/layers/edge-layers/flow-layer.d.ts +6 -0
- package/dist/layers/edge-layers/flow-layer.js +28 -0
- package/dist/layers/edge-layers/path-edge-layer.d.ts +6 -0
- package/dist/layers/edge-layers/path-edge-layer.js +27 -0
- package/dist/layers/edge-layers/straight-line-edge-layer.d.ts +6 -0
- package/dist/layers/edge-layers/straight-line-edge-layer.js +26 -0
- package/dist/layers/graph-layer.d.ts +32 -0
- package/dist/layers/graph-layer.js +193 -0
- package/dist/layers/node-layers/circle-layer.d.ts +6 -0
- package/dist/layers/node-layers/circle-layer.js +23 -0
- package/dist/layers/node-layers/image-layer.d.ts +6 -0
- package/dist/layers/node-layers/image-layer.js +23 -0
- package/dist/layers/node-layers/label-layer.d.ts +6 -0
- package/dist/layers/node-layers/label-layer.js +23 -0
- package/dist/layers/node-layers/path-rounded-rectange-layer.d.ts +6 -0
- package/dist/layers/node-layers/path-rounded-rectange-layer.js +46 -0
- package/dist/layers/node-layers/rectangle-layer.d.ts +6 -0
- package/dist/layers/node-layers/rectangle-layer.js +49 -0
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.d.ts +1 -0
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +30 -0
- package/dist/layers/node-layers/rounded-rectangle-layer.d.ts +8 -0
- package/dist/layers/node-layers/rounded-rectangle-layer.js +28 -0
- package/dist/layers/node-layers/zoomable-marker-layer.d.ts +10 -0
- package/dist/layers/node-layers/zoomable-marker-layer.js +40 -0
- package/dist/layouts/d3-force/d3-force-layout.d.ts +24 -0
- package/dist/layouts/d3-force/d3-force-layout.js +116 -0
- package/dist/layouts/d3-force/worker.d.ts +0 -0
- package/dist/layouts/d3-force/worker.js +46 -0
- package/dist/layouts/gpu-force/gpu-force-layout.d.ts +30 -0
- package/dist/layouts/gpu-force/gpu-force-layout.js +232 -0
- package/dist/layouts/gpu-force/worker.d.ts +0 -0
- package/dist/layouts/gpu-force/worker.js +116 -0
- package/dist/layouts/simple-layout/simple-layout.d.ts +22 -0
- package/dist/layouts/simple-layout/simple-layout.js +64 -0
- package/dist/loaders/edge-parsers.d.ts +6 -0
- package/dist/loaders/edge-parsers.js +17 -0
- package/dist/loaders/json-loader.d.ts +7 -0
- package/dist/loaders/json-loader.js +16 -0
- package/dist/loaders/node-parsers.d.ts +3 -0
- package/dist/loaders/node-parsers.js +11 -0
- package/dist/style/style-property.d.ts +14 -0
- package/dist/style/style-property.js +195 -0
- package/dist/style/style-sheet.d.ts +10 -0
- package/dist/style/style-sheet.js +252 -0
- package/dist/utils/create-graph.d.ts +8 -0
- package/dist/utils/create-graph.js +33 -0
- package/dist/utils/layer-utils.d.ts +1 -0
- package/dist/utils/layer-utils.js +20 -0
- package/dist/utils/log.d.ts +2 -0
- package/dist/utils/log.js +6 -0
- package/dist/utils/polygon-calculations.d.ts +1 -0
- package/dist/utils/polygon-calculations.js +102 -0
- package/package.json +55 -0
- package/src/core/base-layout.ts +154 -0
- package/src/core/cache.ts +31 -0
- package/src/core/constants.ts +58 -0
- package/src/core/edge.ts +145 -0
- package/src/core/graph-engine.ts +170 -0
- package/src/core/graph.ts +342 -0
- package/src/core/interaction-manager.ts +225 -0
- package/src/core/node.ts +205 -0
- package/src/index.ts +42 -0
- package/src/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.ts +50 -0
- package/src/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.ts +15 -0
- package/src/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.ts +74 -0
- package/src/layers/common-layers/flow-path-layer/flow-path-layer.ts +154 -0
- package/src/layers/common-layers/marker-layer/atlas-data-url.ts +10 -0
- package/src/layers/common-layers/marker-layer/marker-atlas.png +0 -0
- package/src/layers/common-layers/marker-layer/marker-layer.ts +36 -0
- package/src/layers/common-layers/marker-layer/marker-list.ts +68 -0
- package/src/layers/common-layers/marker-layer/marker-mapping.ts +428 -0
- package/src/layers/common-layers/marker-layer/markers/bell-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/bell.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/bookmark-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/bookmark.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/cd-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/cd.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/checkmark.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-check-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-check.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-i-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-i.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-minus-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-minus.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-plus-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-plus.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-questionmark-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-questionmark.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-slash-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-slash.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-x-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle-x.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/circle.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/diamond-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/diamond.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/flag-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/flag.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/gear.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/heart-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/heart.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/location-marker-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/location-marker.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/octagonal-star-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/octagonal-star.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/person-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/person.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/pin-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/pin.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/plus-small.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/plus.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/rectangle-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/rectangle.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/star-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/star.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/tag-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/tag.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/thumb-down-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/thumb-down.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/thumb-up.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/thumb_up-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/triangle-down-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/triangle-down.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/triangle-left-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/triangle-left.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/triangle-right-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/triangle-right.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/triangle-up-filled.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/triangle-up.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/x-small.png +0 -0
- package/src/layers/common-layers/marker-layer/markers/x.png +0 -0
- package/src/layers/common-layers/spline-layer/spline-layer.ts +83 -0
- package/src/layers/common-layers/zoomable-text-layer/zoomable-text-layer.ts +90 -0
- package/src/layers/edge-layer.ts +88 -0
- package/src/layers/edge-layers/curved-edge-layer.ts +88 -0
- package/src/layers/edge-layers/edge-label-layer.ts +48 -0
- package/src/layers/edge-layers/flow-layer.ts +34 -0
- package/src/layers/edge-layers/path-edge-layer.ts +39 -0
- package/src/layers/edge-layers/straight-line-edge-layer.ts +38 -0
- package/src/layers/graph-layer.ts +225 -0
- package/src/layers/node-layers/circle-layer.ts +29 -0
- package/src/layers/node-layers/image-layer.ts +29 -0
- package/src/layers/node-layers/label-layer.ts +29 -0
- package/src/layers/node-layers/path-rounded-rectange-layer.ts +56 -0
- package/src/layers/node-layers/rectangle-layer.ts +58 -0
- package/src/layers/node-layers/rounded-rectangle-layer-fragment.ts +31 -0
- package/src/layers/node-layers/rounded-rectangle-layer.ts +32 -0
- package/src/layers/node-layers/zoomable-marker-layer.ts +49 -0
- package/src/layouts/d3-force/d3-force-layout.ts +145 -0
- package/src/layouts/d3-force/worker.ts +61 -0
- package/src/layouts/gpu-force/gpu-force-layout.ts +249 -0
- package/src/layouts/gpu-force/worker.ts +137 -0
- package/src/layouts/simple-layout/simple-layout.ts +87 -0
- package/src/loaders/edge-parsers.ts +21 -0
- package/src/loaders/json-loader.ts +19 -0
- package/src/loaders/node-parsers.ts +13 -0
- package/src/style/style-property.ts +229 -0
- package/src/style/style-sheet.ts +277 -0
- package/src/utils/create-graph.ts +38 -0
- package/src/utils/layer-utils.ts +23 -0
- package/src/utils/log.ts +9 -0
- package/src/utils/polygon-calculations.ts +154 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["index.js", "core/cache.js", "core/graph-engine.js", "utils/log.js", "core/graph.js", "layers/common-layers/marker-layer/marker-list.js", "core/constants.js", "core/node.js", "core/edge.js", "core/base-layout.js", "layouts/d3-force/d3-force-layout.js", "layouts/gpu-force/gpu-force-layout.js", "layouts/simple-layout/simple-layout.js", "utils/create-graph.js", "loaders/node-parsers.js", "loaders/edge-parsers.js", "loaders/json-loader.js", "utils/layer-utils.js", "layers/graph-layer.js", "style/style-property.js", "style/style-sheet.js", "core/interaction-manager.js", "layers/node-layers/circle-layer.js", "layers/node-layers/image-layer.js", "layers/node-layers/label-layer.js", "layers/common-layers/zoomable-text-layer/zoomable-text-layer.js", "layers/node-layers/rectangle-layer.js", "layers/node-layers/rounded-rectangle-layer-fragment.js", "layers/node-layers/rounded-rectangle-layer.js", "layers/node-layers/path-rounded-rectange-layer.js", "utils/polygon-calculations.js", "layers/node-layers/zoomable-marker-layer.js", "layers/common-layers/marker-layer/marker-layer.js", "layers/common-layers/marker-layer/marker-mapping.js", "layers/common-layers/marker-layer/atlas-data-url.js", "layers/edge-layer.js", "layers/edge-layers/straight-line-edge-layer.js", "layers/edge-layers/path-edge-layer.js", "layers/edge-layers/curved-edge-layer.js", "layers/common-layers/spline-layer/spline-layer.js", "layers/edge-layers/edge-label-layer.js", "layers/edge-layers/flow-layer.js", "layers/common-layers/flow-path-layer/flow-path-layer.js", "layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js", "layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js"],
|
|
4
|
+
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// react-graph-layers core\nexport { GraphEngine } from './core/graph-engine';\nexport { Graph } from './core/graph';\nexport { Node } from './core/node';\nexport { Edge } from './core/edge';\nexport { NODE_STATE, NODE_TYPE, EDGE_TYPE, EDGE_DECORATOR_TYPE, LAYOUT_STATE, MARKER_TYPE } from './core/constants';\n// react-graph-layers layouts\nexport { BaseLayout } from './core/base-layout';\nexport { D3ForceLayout } from './layouts/d3-force/d3-force-layout';\nexport { GPUForceLayout } from './layouts/gpu-force/gpu-force-layout';\nexport { SimpleLayout } from './layouts/simple-layout/simple-layout';\n// react-graph-layers loaders\nexport { JSONLoader } from './loaders/json-loader';\nexport { basicNodeParser } from './loaders/node-parsers';\nexport { basicEdgeParser } from './loaders/edge-parsers';\n// react-graph-layers utils\nexport { createGraph } from './utils/create-graph';\nexport * from './utils/layer-utils';\nexport * from './utils/log';\n// deck.gl components\nexport { GraphLayer } from './layers/graph-layer';\nexport { EdgeLayer } from './layers/edge-layer';\n// DEPRECATED\n/** @deprecated Use EdgeLayer */\nexport { EdgeLayer as CompositeEdgeLayer } from './layers/edge-layer';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport class Cache {\n _keys = new Map();\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) {\n return this._keys.get(key)?.value;\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, createValue, version) {\n const cached = this._keys.get(key);\n const keyUpdated = cached === undefined || version > cached.version;\n if (!keyUpdated) {\n return;\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\nimport { Cache } from './cache';\n// Graph engine controls the graph data and layout calculation\nexport class GraphEngine extends EventTarget {\n _graph;\n _layout;\n _cache = new Cache();\n _layoutDirty = false;\n _transactionInProgress = false;\n constructor(graph, layout) {\n super();\n this._graph = graph;\n this._layout = layout;\n }\n /** Getters */\n getNodes = () => {\n this._updateCache('nodes', () => this._graph.getNodes().filter((node) => this.getNodePosition(node)));\n return this._cache.get('nodes');\n };\n getEdges = () => {\n this._updateCache('edges', () => this._graph.getEdges().filter((edge) => this.getEdgePosition(edge)));\n return this._cache.get('edges');\n };\n getNodePosition = (node) => this._layout.getNodePosition(node);\n getEdgePosition = (edge) => this._layout.getEdgePosition(edge);\n getGraphVersion = () => this._graph.version;\n getLayoutLastUpdate = () => this._layout.version;\n getLayoutState = () => this._layout.state;\n /** Operations on the graph */\n lockNodePosition = (node, x, y) => this._layout.lockNodePosition(node, x, y);\n unlockNodePosition = (node) => this._layout.unlockNodePosition(node);\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 * @fires GraphEngine#onLayoutChange\n */\n _onLayoutChange = () => {\n /**\n * @event GraphEngine#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutChange'));\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 * @fires GraphEngine#onLayoutError\n */\n _onLayoutError = () => {\n /**\n * @event GraphEngine#onLayoutError\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutError'));\n };\n _onGraphStructureChanged = (entity) => {\n this._layoutDirty = true;\n this._graphChanged();\n };\n _onTransactionStart = () => {\n this._transactionInProgress = true;\n };\n _onTransactionEnd = () => {\n this._transactionInProgress = false;\n this._graphChanged();\n };\n /** Layout calculations */\n run = () => {\n // TODO: throw if running on a cleared engine\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 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 this._layout.initializeGraph(this._graph);\n this._layout.start();\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 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 resume = () => this._layout.resume();\n stop = () => this._layout.stop();\n _graphChanged = () => {\n if (this._layoutDirty && !this._transactionInProgress) {\n this._updateLayout();\n }\n };\n _updateLayout = () => {\n this._layout.updateGraph(this._graph);\n this._layout.update();\n this._layoutDirty = false;\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\nimport { Log, COLOR } from 'probe.gl';\nexport const log = new Log({ id: 'react-graph-layers' }).enable();\nlog.log({ color: COLOR.CYAN }, 'Initialize react-graph-layers logger.')();\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '../utils/log';\nimport { Cache } from './cache';\n// Basic graph data structure\nexport class Graph extends EventTarget {\n /** List object of nodes. */\n _nodeMap = {};\n /** List of object edges. */\n _edgeMap = {};\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 _name = Date.now().toString();\n /** Version the graph. A version is a number that is incremented every time the graph is updated. */\n version = 0;\n /** Cached data: create array data from maps. */\n _cache = new Cache();\n /**\n * The constructor of the Graph class.\n * @param {Object} graph - copy the graph if this exists.\n */\n constructor(graph = null) {\n super();\n // copy the graph if it exists in the parameter\n if (graph) {\n // start copying the graph\n this._nodeMap = graph._nodeMap;\n this._edgeMap = graph._edgeMap;\n this._name = graph && graph._name;\n }\n }\n /**\n * Set graph name\n * @param {string} name\n */\n setGraphName(name) {\n this._name = name;\n }\n /** Get the name of the graph. Default value is the time stamp when creating this graph.\n * @return {string} graph name.\n */\n getGraphName() {\n return this._name.toString();\n }\n /**\n * Perform a batch of operations defined by cb before indicating graph is updated\n * @param {function} cb - a callback fuction containing the operations to perform\n */\n transaction(cb) {\n try {\n this.dispatchEvent(new CustomEvent('transactionStart'));\n return cb();\n }\n finally {\n this.dispatchEvent(new CustomEvent('transactionEnd'));\n }\n }\n /**\n * Add a new node to the graph.\n * @param {Node} node - expect a Node object to be added to the graph.\n */\n addNode(node) {\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 }));\n }\n /**\n * Batch add nodes to the graph.\n * @param {Node[]} nodes - a list of nodes to be added.\n */\n batchAddNodes(nodes) {\n // convert an array of objects to an object\n this._nodeMap = nodes.reduce((res, node) => {\n res[node.getId()] = node;\n this.dispatchEvent(new CustomEvent('onNodeAdded', { node }));\n return res;\n }, { ...this._nodeMap });\n this._bumpVersion();\n }\n /**\n * Get all the nodes of the graph.\n * @return {Node[]} - get all the nodes in the graph.\n */\n getNodes() {\n this._updateCache('nodes', () => Object.values(this._nodeMap));\n return this._cache.get('nodes');\n }\n /**\n * Get the node map of the graph. The key of the map is the ID of the nodes.\n * @return {Object} - a map of nodes keyed by node IDs.\n */\n getNodeMap() {\n return this._nodeMap;\n }\n /**\n * Find a node by id\n * @param {String} nodeId The id of the node\n * @return {Object} Node\n */\n findNode(nodeId) {\n return this._nodeMap[nodeId];\n }\n /**\n * Update the indicated node to the provided value\n * @param {Node} node\n */\n updateNode(node) {\n this._nodeMap[node.getId()] = node;\n this._bumpVersion();\n this.dispatchEvent(new CustomEvent('onNodeUpdated', { node }));\n }\n /**\n * Add a new edge to the graph.\n * @param {Edge} edge - expect a Edge object to be added to the graph.\n */\n addEdge(edge) {\n const sourceNode = this.findNode(edge.getSourceNodeId());\n const targetNode = this.findNode(edge.getTargetNodeId());\n if (!sourceNode || !targetNode) {\n log.warn(`Unable to add edge ${edge.id}, source or target node is missing.`)();\n return;\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 }));\n }\n /**\n * Batch add edges to the graph\n * @param {Edge[]} edges - a list of edges to be added.\n */\n batchAddEdges(edges) {\n edges.forEach((edge) => this.addEdge(edge));\n this._bumpVersion();\n }\n /**\n * Update the indicated edge to the provided value\n * @param {Edge} edge\n */\n updateEdge(edge) {\n this._edgeMap[edge.getId()] = edge;\n this._bumpVersion();\n this.dispatchEvent(new CustomEvent('onEdgeUpdated', { edge }));\n }\n /**\n * Remove a node from the graph by node ID\n * @param {String|Number} nodeId - the ID of the target node.\n */\n removeNode(nodeId) {\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 }));\n }\n /**\n * Get all the edges of the graph.\n * @return {Edge[]} get all the edges in the graph.\n */\n getEdges() {\n this._updateCache('edges', () => Object.values(this._edgeMap));\n return this._cache.get('edges');\n }\n /**\n * Get the edge map of the graph. The key of the map is the ID of the edges.\n * @return {Object} - a map of edges keyed by edge IDs.\n */\n getEdgeMap() {\n return this._edgeMap;\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) {\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 delete this._edgeMap[edgeId];\n sourceNode.removeConnectedEdges(edge);\n targetNode.removeConnectedEdges(edge);\n this._bumpVersion();\n }\n /**\n * Find the edge by edge ID.\n * @param {String|Number} id - the target edge ID\n * @return {Edge} - the target edge.\n */\n findEdge(edgeId) {\n return this._edgeMap[edgeId];\n }\n /**\n * Return all the connected edges of a node by nodeID.\n * @param {String|Number} nodeId - the target node ID\n * @return {Edge[]} - an array of the connected edges.\n */\n getConnectedEdges(nodeId) {\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 * Return all the sibling nodes of a node by nodeID.\n * @param {String|Number} nodeId - the target node ID\n * @return {Node[]} - an array of the sibling nodes.\n */\n getNodeSiblings(nodeId) {\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 * Get the degree of a node.\n * @param {String|Number} nodeId - the target node ID.\n * @return {Number} - the degree of the node.\n */\n getDegree(nodeId) {\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 * Clean up all the nodes in the graph.\n */\n resetNodes() {\n this._nodeMap = {};\n this._bumpVersion();\n }\n /**\n * Clean up all the edges in the graph.\n */\n resetEdges() {\n this._edgeMap = {};\n this._bumpVersion();\n }\n /**\n * Clean up everything in the graph.\n */\n reset() {\n this.resetNodes();\n this.resetEdges();\n this._bumpVersion();\n }\n /**\n * Trigger an update to the graph.\n */\n triggerUpdate() {\n this._bumpVersion();\n }\n /**\n * Return true if the graph is empty.\n * @return {Boolean} Return true if the graph is empty.\n */\n isEmpty() {\n return Object.keys(this._nodeMap).length === 0;\n }\n /**\n * Check the equality of two graphs data by checking last update time stamp\n * @param {Object} g Another graph to be compared against itself\n * @return {Bool} True if the graph is the same as itself.\n */\n equals(g) {\n if (!g || !(g instanceof Graph)) {\n return false;\n }\n return this.version === g.version;\n }\n _bumpVersion() {\n this.version += 1;\n }\n _updateCache(key, updateValue) {\n this._cache.set(key, updateValue, this.version);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\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\nimport { MarkerList } from '../layers/common-layers/marker-layer/marker-list';\n/** All the markers supported by node type MARKER */\nexport const MARKER_TYPE = MarkerList;\n// the interaction state of a node.\nexport const NODE_STATE = {\n DEFAULT: 'default',\n HOVER: 'hover',\n DRAGGING: 'dragging',\n SELECTED: 'selected'\n};\nexport const EDGE_STATE = {\n DEFAULT: 'default',\n HOVER: 'hover',\n DRAGGING: 'dragging',\n SELECTED: 'selected'\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// edge shape\nexport const EDGE_TYPE = {\n SPLINE_CURVE: 'SPLINE_CURVE',\n LINE: 'LINE',\n PATH: 'PATH'\n};\n// decorators on edges\nexport const EDGE_DECORATOR_TYPE = {\n LABEL: 'EDGE_LABEL',\n FLOW: 'FLOW'\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\nimport { NODE_STATE } from './constants';\n// Basic data structure of a node\nexport class Node {\n id;\n /** Keep a reference to origin data. */\n _data;\n /** List edges. */\n _connectedEdges = {};\n /** Interaction state of the node. */\n state = NODE_STATE.DEFAULT;\n /** Can the node be selected? */\n _selectable;\n /** Should the state of this node affect the state of the connected edges? */\n _highlightConnectedEdges;\n /** Check the type of the object when picking engine gets it. */\n isNode = true;\n /**\n * The constructor of a node\n * @param {String|Number} options.id - the unique ID of the node\n * @param {Record<string, unknown>} options.data - origin data reference\n */\n constructor({ id, selectable = false, highlightConnectedEdges = false, data = {} }) {\n this.id = id;\n this._data = data;\n this._selectable = selectable;\n this._highlightConnectedEdges = highlightConnectedEdges;\n }\n /**\n * Return the ID of the node\n * @return {String|Number} - the ID of the node.\n */\n getId() {\n return this.id;\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() {\n return Object.keys(this._connectedEdges).length;\n }\n /**\n * Return the in-degree of the node.\n * @return {Number} - the in-degree of the node.\n */\n getInDegree() {\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 * Return the out-degree of the node.\n * @return {Number} - the out-degree of the node.\n */\n getOutDegree() {\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 * Return all the IDs of the sibling nodes.\n * @return {String[]} [description]\n */\n getSiblingIds() {\n const nodeId = this.getId();\n return this.getConnectedEdges().reduce((siblings, e) => {\n if (e.getTargetNodeId() === nodeId) {\n siblings.push(e.getSourceNodeId());\n }\n else {\n siblings.push(e.getTargetNodeId());\n }\n return siblings;\n }, []);\n }\n /**\n * Return all the connected edges.\n * @return {Object[]} - an array of the connected edges.\n */\n getConnectedEdges() {\n return Object.values(this._connectedEdges);\n }\n /**\n * Return of the value of the selected property key.\n * @param {String} key - property key.\n * @return {Any} - the value of the property or undefined (not found).\n */\n getPropertyValue(key) {\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 * Set the new node data.\n * @param {Record<string, unknown>} data - the new data of the node\n */\n setData(data) {\n this._data = data;\n }\n /**\n * Update a data property.\n * @param {String} key - the key of the property\n * @param {Any} value - the value of the property.\n */\n setDataProperty(key, value) {\n this._data[key] = value;\n }\n /**\n * Set node state\n * @param {String} state - one of NODE_STATE\n */\n setState(state) {\n this.state = state;\n }\n /**\n * Get node state\n * @returns {string} state - one of NODE_STATE\n */\n getState() {\n return this.state;\n }\n /**\n * Add connected edges to the node\n * @param {Edge || Edge[]} edge an edge or an array of edges to be added to this._connectedEdges\n */\n addConnectedEdges(edge) {\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 * Remove edges from this._connectedEdges\n * @param {Edge | Edge[]} edge an edge or an array of edges to be removed from this._connectedEdges\n */\n removeConnectedEdges(edge) {\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 * Clear this._connectedEdges\n */\n clearConnectedEdges() {\n Object.values(this._connectedEdges).forEach((e) => e.removeNode(this));\n this._connectedEdges = {};\n }\n isSelectable() {\n return this._selectable;\n }\n shouldHighlightConnectedEdges() {\n return this._highlightConnectedEdges;\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Basic data structure of an edge\nimport { EDGE_STATE } from './constants';\nexport class Edge {\n /** Unique uuid of the edge. */\n id;\n /** ID of the source node. */\n _sourceId;\n /** ID of the target node. */\n _targetId;\n /** Whether the edge is directed or not. */\n _directed;\n /** Origin data reference of the edge. */\n _data;\n /** Check the type of the object when picking engine gets it. */\n isEdge = true;\n /** Nodes at either end of this edge. */\n _connectedNodes = {};\n /** Edge state. */\n state = EDGE_STATE.DEFAULT;\n /**\n * The constructor\n * @param {String|Number} options.id - the unique ID of the edge\n * @param {String|Number} options.sourceId - the ID of the source node\n * @param {String|Number} options.targetId - the ID of the target node\n * @param {Boolean} options.directed - whether the edge is directed or not\n * @param {Record<string, unknown>} options.data - origin data reference\n */\n constructor({ id, sourceId, targetId, data, directed = false }) {\n this.id = id;\n this._sourceId = sourceId;\n this._targetId = targetId;\n this._directed = directed;\n this._data = data;\n }\n /**\n * Return the ID of the edge\n * @return {String|Number} - the ID of the edge.\n */\n getId() {\n return this.id;\n }\n /**\n * Return whether the edge is directed or not.\n * @return {Boolean} true if the edge is directed.\n */\n isDirected() {\n return this._directed;\n }\n /**\n * Get the ID of the source node.\n * @return {String|Number} the ID of the source node.\n */\n getSourceNodeId() {\n return this._sourceId;\n }\n /**\n * Get the ID of the target node.\n * @return {String|Number} the ID of the target node.\n */\n getTargetNodeId() {\n return this._targetId;\n }\n /**\n * Return of the value of the selected property key.\n * @param {String} key - property key.\n * @return {Any} - the value of the property.\n */\n getPropertyValue(key) {\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 * Set the origin data as a reference.\n * @param {Object} data - the origin data.\n */\n setData(data) {\n this._data = data;\n }\n /**\n * Update a data property.\n * @param {String} key - the key of the property\n * @param {Any} value - the value of the property.\n */\n setDataProperty(key, value) {\n this._data[key] = value;\n }\n /**\n * Set edge state\n * @param {String} state - one of EDGE_STATE\n */\n setState(state) {\n this.state = state;\n }\n /**\n * Get edge state\n * @returns {string} state - one of EDGE_STATE\n */\n getState() {\n return this.state;\n }\n addNode(node) {\n this._connectedNodes[node.getId()] = node;\n }\n removeNode(node) {\n delete this._connectedNodes[node.getId()];\n }\n getConnectedNodes() {\n return Object.values(this._connectedNodes);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport isEqual from 'lodash.isequal';\nimport { EDGE_TYPE, LAYOUT_STATE } from './constants';\n/**\n * All the layout classes are extended from this base layout class.\n */\nexport class BaseLayout extends EventTarget {\n /** Name of the layout. */\n _name = 'BaseLayout';\n /** Extra configuration options of the layout. */\n _options;\n version = 0;\n state = LAYOUT_STATE.INIT;\n /**\n * Constructor of BaseLayout\n * @param {Object} options extra configuration options of the layout\n */\n constructor(options = {}) {\n super();\n this._options = options;\n }\n /**\n * @fires BaseLayout#onLayoutStart\n * @protected\n */\n _onLayoutStart() {\n this._updateState(LAYOUT_STATE.CALCULATING);\n /**\n * Layout calculation start.\n *\n * @event BaseLayout#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutStart'));\n }\n /**\n * @fires BaseLayout#onLayoutChange\n * @protected\n */\n _onLayoutChange() {\n this._updateState(LAYOUT_STATE.CALCULATING);\n /**\n * Layout calculation iteration.\n *\n * @event BaseLayout#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutChange'));\n }\n /**\n * @fires BaseLayout#onLayoutDone\n * @protected\n */\n _onLayoutDone() {\n this._updateState(LAYOUT_STATE.DONE);\n /**\n * Layout calculation is done.\n *\n * @event BaseLayout#onLayoutDone\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutDone'));\n }\n /**\n * @fires BaseLayout#onLayoutError\n * @protected\n */\n _onLayoutError() {\n this._updateState(LAYOUT_STATE.ERROR);\n /**\n * Layout calculation went wrong.\n *\n * @event BaseLayout#onLayoutError\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutError'));\n }\n /**\n * Check the equality of two layouts\n * @param {Object} layout The layout to be compared.\n * @return {Bool} True if the layout is the same as itself.\n */\n equals(layout) {\n if (!layout || !(layout instanceof BaseLayout)) {\n return false;\n }\n return this._name === layout._name && isEqual(this._options, layout._options);\n }\n /** virtual functions: will be implemented in the child class */\n // first time to pass the graph data into this layout\n initializeGraph(graph) { }\n // update the existing graph\n updateGraph(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) {\n return [0, 0];\n }\n // access the layout information of the edge\n getEdgePosition(edge) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [0, 0],\n targetPosition: [0, 0],\n controlPoints: []\n };\n }\n /**\n * Pin the node to a designated position, and the node won't move anymore\n * @param {Object} node Node to be locked\n * @param {Number} x x coordinate\n * @param {Number} y y coordinate\n */\n lockNodePosition(node, x, y) { }\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) { }\n _updateState(state) {\n this.state = state;\n this.version += 1;\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { BaseLayout } from '../../core/base-layout';\nimport { EDGE_TYPE } from '../../core/constants';\nconst defaultOptions = {\n alpha: 0.3,\n resumeAlpha: 0.1,\n nBodyStrength: -900,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 400,\n getCollisionRadius: 0\n};\nexport class D3ForceLayout extends BaseLayout {\n _name = 'D3';\n _positionsByNodeId = new Map();\n _graph;\n _worker;\n constructor(options) {\n super(options);\n this._options = {\n ...defaultOptions,\n ...options\n };\n }\n initializeGraph(graph) {\n this._graph = graph;\n }\n // for streaming new data on the same graph\n updateGraph(graph) {\n this._graph = graph;\n this._positionsByNodeId = new Map(this._graph.getNodes().map((node) => [node.id, this._positionsByNodeId.get(node.id)]));\n }\n start() {\n this._engageWorker();\n this._onLayoutStart();\n }\n update() {\n this._engageWorker();\n }\n _engageWorker() {\n // prevent multiple start\n if (this._worker) {\n this._worker.terminate();\n }\n this._worker = new Worker(new URL('./worker.js', import.meta.url).href);\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 this._worker.onmessage = (event) => {\n if (event.data.type !== 'end') {\n return;\n }\n event.data.nodes.forEach(({ id, ...d3 }) => 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 this._onLayoutChange();\n this._onLayoutDone();\n };\n }\n resume() {\n throw new Error('Resume unavailable');\n }\n stop() {\n this._worker.terminate();\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 return {\n type: EDGE_TYPE.LINE,\n sourcePosition: this.getNodePosition(sourceNode),\n targetPosition: this.getNodePosition(targetNode),\n controlPoints: []\n };\n };\n getNodePosition = (node) => {\n const d3Node = this._positionsByNodeId.get(node.id);\n if (d3Node) {\n return d3Node.coordinates;\n }\n return null;\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 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\nimport { BaseLayout } from '../../core/base-layout';\nimport { EDGE_TYPE } from '../../core/constants';\nconst defaultOptions = {\n alpha: 0.3,\n resumeAlpha: 0.1,\n nBodyStrength: -900,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 400,\n getCollisionRadius: 0\n};\n// TODO: this layout should be updated with the organizational and logic improvements made in d3-force\nexport class GPUForceLayout extends BaseLayout {\n _name = 'GPU';\n _d3Graph;\n _nodeMap;\n _edgeMap;\n _graph;\n _worker;\n _callbacks;\n constructor(options) {\n super(options);\n this._name = 'GPU';\n this._options = {\n ...defaultOptions,\n ...options\n };\n // store graph and prepare internal data\n this._d3Graph = { nodes: [], edges: [] };\n this._nodeMap = {};\n this._edgeMap = {};\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 start() {\n this._engageWorker();\n }\n update() {\n this._engageWorker();\n }\n _engageWorker() {\n // prevent multiple start\n if (this._worker) {\n this._worker.terminate();\n }\n this._worker = new Worker(new URL('./worker.js', import.meta.url).href);\n const { alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax, getCollisionRadius } = this\n ._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 // 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 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 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 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 getNodePosition = (node) => {\n const d3Node = this._nodeMap[node.id];\n if (d3Node) {\n return [d3Node.x, d3Node.y];\n }\n return [0, 0];\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 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 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\nimport { BaseLayout } from '../../core/base-layout';\nimport { EDGE_TYPE } from '../../core/constants';\nconst defaultOptions = {\n nodePositionAccessor: (node) => [node.getPropertyValue('x'), node.getPropertyValue('y')]\n};\nexport class SimpleLayout extends BaseLayout {\n _name = 'SimpleLayout';\n _graph = null;\n _nodeMap = {};\n _nodePositionMap = {};\n constructor(options = {}) {\n super({ ...defaultOptions, ...options });\n }\n initializeGraph(graph) {\n this.updateGraph(graph);\n }\n _notifyLayoutComplete() {\n this._onLayoutStart();\n this._onLayoutChange();\n this._onLayoutDone();\n }\n start() {\n this._notifyLayoutComplete();\n }\n update() {\n this._notifyLayoutComplete();\n }\n resume() {\n this._notifyLayoutComplete();\n }\n updateGraph(graph) {\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 setNodePositionAccessor = (accessor) => {\n this._options.nodePositionAccessor = accessor;\n };\n getNodePosition = (node) => this._nodePositionMap[node.getId()];\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 };\n };\n lockNodePosition = (node, x, y) => {\n this._nodePositionMap[node.getId()] = [x, y];\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Edge } from '../core/edge';\nimport { Node } from '../core/node';\nimport { Graph } from '../core/graph';\nexport function createGraph({ name, nodes, edges, nodeParser, edgeParser }) {\n // create a new empty graph\n const graph = new Graph();\n const graphName = name || Date.now();\n graph.setGraphName(graphName);\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 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\nimport { log } from '../utils/log';\nexport function basicNodeParser(node) {\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\nimport { log } from '../utils/log';\nexport function basicEdgeParser(edge) {\n const { id, directed, sourceId, targetId } = edge;\n if (sourceId === undefined || targetId === undefined) {\n log.error('Invalid edge: sourceId or targetId is missing.')();\n return null;\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\nimport { createGraph } from '../utils/create-graph';\nimport { basicNodeParser } from './node-parsers';\nimport { basicEdgeParser } from './edge-parsers';\nimport { log } from '../utils/log';\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 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\nexport const mixedGetPosition = (getPosition, getOffset) => {\n if (!getOffset) {\n return getPosition;\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 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\nimport { COORDINATE_SYSTEM, CompositeLayer } from '@deck.gl/core';\nimport { Stylesheet } from '../style/style-sheet';\nimport { NODE_TYPE, EDGE_DECORATOR_TYPE } from '../core/constants';\nimport { mixedGetPosition } from '../utils/layer-utils';\nimport { InteractionManager } from '../core/interaction-manager';\nimport { log } from '../utils/log';\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-rectange-layer';\nimport { ZoomableMarkerLayer } from './node-layers/zoomable-marker-layer';\n// edge layers\nimport { EdgeLayer } from './edge-layer';\nimport { EdgeLabelLayer } from './edge-layers/edge-label-layer';\nimport { FlowLayer } from './edge-layers/flow-layer';\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};\nconst EDGE_DECORATOR_LAYER_MAP = {\n [EDGE_DECORATOR_TYPE.LABEL]: EdgeLabelLayer,\n [EDGE_DECORATOR_TYPE.FLOW]: FlowLayer\n};\nconst SHARED_LAYER_PROPS = {\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n parameters: {\n depthTest: false\n }\n};\nconst defaultProps = {\n // an array of styles for layers\n nodeStyle: [],\n nodeEvents: {\n onMouseLeave: () => { },\n onHover: () => { },\n onMouseEnter: () => { },\n onClick: () => { },\n onDrag: () => { }\n },\n edgeStyle: {\n color: '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};\nexport class GraphLayer extends CompositeLayer {\n static defaultProps = {\n pickable: true\n };\n forceUpdate = () => {\n if (this.context && this.context.layerManager) {\n this.setNeedsUpdate();\n this.setChangeFlags({ dataChanged: true }); // TODO\n }\n };\n constructor(props) {\n super(props);\n // added or removed a node, or in general something layout related changed\n props.engine.addEventListener('onLayoutChange', this.forceUpdate);\n }\n initializeState() {\n const interactionManager = new InteractionManager(this.props, () => this.forceUpdate());\n this.state = { interactionManager };\n }\n shouldUpdateState({ changeFlags }) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n updateState({ props }) {\n this.state.interactionManager.updateProps(props);\n }\n finalize() {\n this.props.engine.removeEventListener('onLayoutChange', this.forceUpdate);\n }\n createNodeLayers() {\n const { engine, nodeStyle } = this.props;\n if (!nodeStyle || !Array.isArray(nodeStyle) || nodeStyle.length === 0) {\n return [];\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.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 });\n });\n }\n createEdgeLayers() {\n const { edgeStyle, engine } = this.props;\n if (!edgeStyle) {\n return [];\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 type: 'Edge',\n ...restEdgeStyle\n }, {\n stateUpdateTrigger: this.state.interactionManager.getLastInteraction()\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 });\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.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 });\n });\n return [edgeLayer, decoratorLayers];\n });\n }\n onClick(info, event) {\n return this.state.interactionManager.onClick(info, event) || false;\n }\n onHover(info, event) {\n return this.state.interactionManager.onHover(info, event) || false;\n }\n onDragStart(info, event) {\n this.state.interactionManager.onDragStart(info, event);\n }\n onDrag(info, event) {\n this.state.interactionManager.onDrag(info, event);\n }\n onDragEnd(info, event) {\n this.state.interactionManager.onDragEnd(info, event);\n }\n renderLayers() {\n return [this.createEdgeLayers(), this.createNodeLayers()];\n }\n}\nGraphLayer.layerName = 'GraphLayer';\nGraphLayer.defaultProps = defaultProps;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Color from 'color';\nimport { log } from '../utils/log';\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 }\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}\nfunction getNumber(value) {\n switch (typeof value) {\n case 'string':\n value = Number(value);\n return isNaN(value) ? null : value;\n case 'number':\n return value;\n default:\n return null;\n }\n}\nfunction getBool(value) {\n switch (typeof value) {\n case 'boolean':\n return value;\n case 'string':\n return value.toLowerCase() !== 'false';\n case 'number':\n return Boolean(value);\n default:\n return null;\n }\n}\nfunction getOffset(value) {\n if (typeof value === 'function') {\n return value;\n }\n if (!Array.isArray(value) || value.length !== 2) {\n return null;\n }\n return value.map(getNumber);\n}\nconst IDENTITY = (x) => x;\nconst PROPERTY_FORMATTERS = {\n opacity: getNumber,\n zIndex: getNumber,\n width: getNumber,\n height: getNumber,\n radius: getNumber,\n fill: getColor,\n stroke: getColor,\n strokeWidth: getNumber,\n // for marker\n marker: String,\n size: getNumber,\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 // edges\n speed: getNumber,\n tailLength: getNumber,\n offset: getOffset,\n scaleWithZoom: getBool\n};\nconst DEFAULT_STYLES = {\n opacity: 1,\n zIndex: 0,\n width: 0,\n height: 0,\n radius: 1,\n fill: [0, 0, 0],\n stroke: [0, 0, 0],\n strokeWidth: 0,\n marker: 'circle',\n size: 12,\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 speed: 0,\n tailLength: 1,\n offset: null,\n scaleWithZoom: true\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 }, {});\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}\nconst VALUE_TYPE = {\n ACCESSOR: 'ACCESSOR',\n PLAIN_VALUE: 'PLAIN_VALUE'\n};\nexport class StyleProperty {\n key;\n _updateTrigger;\n _value;\n _valueType;\n // for getting default style\n static getDefault(key) {\n return DEFAULT_STYLES[key];\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 // 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 // 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 // get the formatted value\n getValue() {\n return this._value;\n }\n getUpdateTrigger() {\n return this._updateTrigger;\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { StyleProperty } from './style-property';\nimport { NODE_TYPE, EDGE_DECORATOR_TYPE } from '../core/constants';\nimport { log } from '../utils/log';\nconst COMMON_DECKGL_PROPS = {\n getOffset: 'offset',\n opacity: 'opacity'\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 [NODE_TYPE.RECTANGLE]: {\n ...COMMON_DECKGL_PROPS,\n getWidth: 'width',\n getHeight: 'height',\n getFillColor: 'fill',\n getLineColor: 'stroke',\n getLineWidth: 'strokeWidth'\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 [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 [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 [NODE_TYPE.MARKER]: {\n ...COMMON_DECKGL_PROPS,\n getColor: 'fill',\n getSize: 'size',\n getMarker: 'marker',\n scaleWithZoom: 'scaleWithZoom'\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};\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};\nexport class Stylesheet {\n type;\n properties;\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 // 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((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: {}\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, ...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.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 // 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;\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 // 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 // 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 _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 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 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 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 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\nimport { EDGE_STATE, NODE_STATE } from './constants';\nconst NODE_TO_EDGE_STATE_MAP = {\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};\nfunction shouldEdgeBeSelected(edge) {\n return edge\n .getConnectedNodes()\n .some((node) => node.getState() === NODE_STATE.SELECTED && node.shouldHighlightConnectedEdges());\n}\nfunction setNodeState(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}\nexport class InteractionManager {\n notifyCallback;\n _lastInteraction = 0;\n _lastHoveredNode = null;\n _lastSelectedNode = null;\n nodeEvents = undefined;\n edgeEvents = undefined;\n engine = undefined;\n enableDragging = undefined;\n resumeLayoutAfterDragging = undefined;\n constructor(props, notifyCallback) {\n this.updateProps(props);\n this.notifyCallback = notifyCallback;\n // internal state\n this._lastInteraction = 0;\n this._lastHoveredNode = null;\n this._lastSelectedNode = null;\n }\n updateProps({ nodeEvents = {}, edgeEvents = {}, engine, enableDragging, resumeLayoutAfterDragging }) {\n this.nodeEvents = nodeEvents;\n this.edgeEvents = edgeEvents;\n this.engine = engine;\n this.enableDragging = enableDragging;\n this.resumeLayoutAfterDragging = resumeLayoutAfterDragging;\n }\n getLastInteraction() {\n return this._lastInteraction;\n }\n onClick(info, event) {\n const { object } = info;\n if (!object) {\n return;\n }\n if (object.isNode) {\n if (object.isSelectable()) {\n if (this._lastSelectedNode) {\n setNodeState(this._lastSelectedNode, NODE_STATE.DEFAULT);\n }\n setNodeState(object, NODE_STATE.SELECTED);\n this._lastSelectedNode = object;\n this._lastInteraction = Date.now();\n this.notifyCallback();\n }\n if (this.nodeEvents.onClick) {\n this.nodeEvents.onClick(info, event);\n }\n }\n if (object.isEdge && this.edgeEvents.onClick) {\n this.edgeEvents.onClick(info, event);\n }\n }\n _mouseLeaveNode() {\n const lastHoveredNode = this._lastHoveredNode;\n if (!(lastHoveredNode.isSelectable() && lastHoveredNode.getState() === NODE_STATE.SELECTED)) {\n // reset the last hovered node's state\n const newState = 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 _mouseEnterNode(info) {\n // set the node's state to hover\n setNodeState(info.object, 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 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 // 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 onDragStart(info, event) {\n if (this.nodeEvents.onDragStart) {\n this.nodeEvents.onDragStart(info);\n }\n }\n onDrag(info, event) {\n if (!info.object.isNode || !this.enableDragging) {\n return;\n }\n event.stopImmediatePropagation();\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 // 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 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 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\nimport { CompositeLayer } from '@deck.gl/core';\nimport { ScatterplotLayer } from '@deck.gl/layers';\nexport class CircleLayer extends CompositeLayer {\n static layerName = 'CircleLayer';\n renderLayers() {\n const { data, getPosition, stylesheet, positionUpdateTrigger = 0 } = this.props;\n return [\n new ScatterplotLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { IconLayer } from '@deck.gl/layers';\nexport class ImageLayer extends CompositeLayer {\n static layerName = 'ImageLayer';\n renderLayers() {\n const { data, getPosition, stylesheet, positionUpdateTrigger = 0 } = this.props;\n return [\n new IconLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { ZoomableTextLayer } from '../common-layers/zoomable-text-layer/zoomable-text-layer';\nexport class LabelLayer extends CompositeLayer {\n static layerName = 'LabelLayer';\n renderLayers() {\n const { data, getPosition, stylesheet, positionUpdateTrigger = 0 } = this.props;\n return [\n new ZoomableTextLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { TextLayer } from '@deck.gl/layers';\nexport class ZoomableTextLayer extends CompositeLayer {\n static layerName = 'ZoomableTextLayer';\n initializeState() {\n this.state = { characterSet: [] };\n }\n shouldUpdateState({ props, changeFlags }) {\n const { scaleWithZoom } = this.props;\n if (!scaleWithZoom) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n return changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.viewportChanged;\n }\n updateState({ props, oldProps, changeFlags }) {\n super.updateState({ props, oldProps, changeFlags });\n if (changeFlags.propsOrDataChanged) {\n const { getText } = props;\n let textLabels = [];\n if (typeof getText === 'function') {\n textLabels = props.data.map(getText);\n }\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 renderLayers() {\n const { data, getPosition, getColor, getText, getSize, getTextAnchor, getAlignmentBaseline, getAngle, scaleWithZoom, updateTriggers, fontFamily, textWordUnits, textWordBreak, textMaxWidth, textSizeMinPixels } = this.props;\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 return [\n new TextLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { PolygonLayer } from '@deck.gl/layers';\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};\nexport class RectangleLayer extends CompositeLayer {\n static layerName = 'RectangleLayer';\n renderLayers() {\n const { data, getPosition, stylesheet, positionUpdateTrigger = 0 } = this.props;\n const getFillColor = stylesheet.getDeckGLAccessor('getFillColor');\n const getLineWidth = stylesheet.getDeckGLAccessor('getLineWidth');\n return [\n new PolygonLayer(this.getSubLayerProps({\n id: '__polygon-layer',\n data,\n getPolygon: (node) => 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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport const fs = /* glsl */ `\\\n#define SHADER_NAME rounded-rectangle-layer-fragment-shader\n\nprecision highp float;\n\nuniform float cornerRadius;\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 - cornerRadius) + 1.0 * 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// import {ScatterplotLayer} from '@deck.gl/layers';\nimport { fs } from './rounded-rectangle-layer-fragment';\nimport { RectangleLayer } from './rectangle-layer';\nexport class RoundedRectangleLayer extends RectangleLayer {\n static layerName = 'RoundedRectangleLayer';\n draw({ uniforms }) {\n super.draw({\n uniforms: {\n ...uniforms,\n cornerRadius: this.props.cornerRadius\n }\n });\n }\n getShaders() {\n // use object.assign to make sure we don't overwrite existing fields like `vs`, `modules`...\n return Object.assign({}, super.getShaders(undefined), {\n fs\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\nimport { CompositeLayer } from '@deck.gl/core';\nimport { PolygonLayer } from '@deck.gl/layers';\nimport { generateRoundedCorners } from '../../utils/polygon-calculations';\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 = typeof getCornerRadius === 'function' ? getCornerRadius(node) : getCornerRadius;\n const factor = 20;\n return generateRoundedCorners(pos, width, height, cornerRadius, factor);\n};\nexport class PathBasedRoundedRectangleLayer extends CompositeLayer {\n static layerName = 'PathBasedRoundedRectangleLayer';\n renderLayers() {\n const { data, getPosition, stylesheet, positionUpdateTrigger = 0 } = this.props;\n const getFillColor = stylesheet.getDeckGLAccessor('getFillColor');\n const getLineWidth = stylesheet.getDeckGLAccessor('getLineWidth');\n return [\n new PolygonLayer(this.getSubLayerProps({\n id: '__polygon-layer',\n data,\n getPolygon: (node) => 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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\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 const roundedPointsForBottomLeft = getRoundedCorner(bottomLeft, topLeft, bottomRight, radius, factor);\n const roundedPointsForTopLeft = getRoundedCorner(topLeft, topRight, bottomLeft, radius, factor).reverse();\n const roundedPointsForTopRight = getRoundedCorner(topRight, bottomRight, topLeft, radius, factor).reverse();\n const roundedPointsForBottomRight = getRoundedCorner(bottomRight, bottomLeft, topRight, radius, factor).reverse();\n const result = [\n ...roundedPointsForBottomLeft,\n ...roundedPointsForTopLeft,\n ...roundedPointsForTopRight,\n ...roundedPointsForBottomRight\n ];\n return result;\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 // Vector 2\n const dx2 = angularPoint.X - p2.X;\n const dy2 = angularPoint.Y - p2.Y;\n // Angle between vector 1 and vector 2 divided by 2\n const angle = (Math.atan2(dy1, dx1) - Math.atan2(dy2, dx2)) / 2;\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 // Check the segment\n const length1 = getLength(dx1, dy1);\n const length2 = getLength(dx2, dy2);\n const length = Math.min(length1, length2);\n if (segment > length) {\n segment = length;\n radius = length * tan;\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 // 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 const L = getLength(dx, dy);\n const d = getLength(segment, radius);\n const circlePoint = getProportionPoint(angularPoint, d, L, dx, dy);\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 // Sweep angle\n let sweepAngle = endAngle - startAngle;\n // Some additional checks\n if (sweepAngle < 0) {\n startAngle = endAngle;\n sweepAngle = -sweepAngle;\n }\n if (sweepAngle > Math.PI)\n sweepAngle = Math.PI - sweepAngle;\n const degreeFactor = factor / Math.PI;\n return getPointsForArc(sweepAngle, degreeFactor, startAngle, circlePoint, radius);\n}\nfunction getLength(dx, dy) {\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction getProportionPoint(point, segment, length, dx, dy) {\n const factor = segment / length;\n return {\n X: point.X - dx * factor,\n Y: point.Y - dy * factor\n };\n}\nfunction getPointsForArc(sweepAngle, degreeFactor, startAngle, circlePoint, radius) {\n const pointsCount = Math.abs(sweepAngle * degreeFactor);\n const sign = Math.sign(sweepAngle);\n const points = [];\n for (let i = 0; i < pointsCount; ++i) {\n const pointX = circlePoint.X + Math.cos(startAngle + (sign * i) / degreeFactor) * radius;\n const pointY = circlePoint.Y + Math.sin(startAngle + (sign * i) / degreeFactor) * radius;\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\nimport { CompositeLayer } from '@deck.gl/core';\nimport { MarkerLayer } from '../common-layers/marker-layer/marker-layer';\nexport class ZoomableMarkerLayer extends CompositeLayer {\n static layerName = 'ZoomableMarkerLayer';\n shouldUpdateState({ props, changeFlags }) {\n const { stylesheet } = this.props;\n const scaleWithZoom = stylesheet.getDeckGLAccessor('scaleWithZoom');\n if (!scaleWithZoom) {\n return changeFlags.somethingChanged;\n }\n return changeFlags.somethingChanged || changeFlags.viewportChanged;\n }\n renderLayers() {\n const { data, getPosition, stylesheet, positionUpdateTrigger = 0 } = this.props;\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 = typeof oiginalGetMarker === 'function' ? oiginalGetMarker : () => oiginalGetMarker;\n return [\n new MarkerLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { IconLayer } from '@deck.gl/layers';\nimport { MarkerMapping } from './marker-mapping';\nimport { AtlasDataURL } from './atlas-data-url';\nexport class MarkerLayer extends CompositeLayer {\n static layerName = 'MarkerLayer';\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 renderLayers() {\n const { getMarker, ...otherProps } = this.props;\n return [\n new IconLayer(this.getSubLayerProps({\n id: 'marker-layer',\n iconAtlas: AtlasDataURL.dataURL,\n iconMapping: MarkerMapping,\n getIcon: getMarker,\n ...otherProps\n }))\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\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/* eslint-disable */\nexport const AtlasDataURL = {\n dataURL: '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\nimport { COORDINATE_SYSTEM, CompositeLayer } from '@deck.gl/core';\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';\nconst EDGE_LAYER_MAP = {\n [EDGE_TYPE.LINE]: StraightLineEdgeLayer,\n [EDGE_TYPE.PATH]: PathEdgeLayer,\n [EDGE_TYPE.SPLINE_CURVE]: CurvedEdgeLayer\n};\nexport class EdgeLayer extends CompositeLayer {\n static layerName = 'EdgeLayer';\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 updateState({ props, oldProps, changeFlags }) {\n super.updateState({ props, oldProps, changeFlags });\n if (changeFlags.dataChanged) {\n this.updateStateData();\n }\n }\n updateStateData() {\n const { data, getLayoutInfo } = this.props;\n // bucket edges by types\n const typedEdgeData = data.reduce((res, d) => {\n const { type } = getLayoutInfo(d);\n res[type].push(d);\n return res;\n }, {\n [EDGE_TYPE.LINE]: [],\n [EDGE_TYPE.PATH]: [],\n [EDGE_TYPE.SPLINE_CURVE]: []\n });\n this.setState({ typedEdgeData });\n }\n renderLayers() {\n const { getLayoutInfo, pickable, positionUpdateTrigger, stylesheet, id } = this.props;\n const { typedEdgeData } = this.state;\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 });\n });\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { LineLayer } from '@deck.gl/layers';\nexport class StraightLineEdgeLayer extends CompositeLayer {\n static layerName = 'StraightLineEdgeLayer';\n renderLayers() {\n const { data, getLayoutInfo, positionUpdateTrigger = 0, colorUpdateTrigger = 0, widthUpdateTrigger = 0, ...otherProps } = this.props;\n return [\n new LineLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { PathLayer } from '@deck.gl/layers';\nexport class PathEdgeLayer extends CompositeLayer {\n static layerName = 'PathEdgeLayer';\n renderLayers() {\n const { data, getLayoutInfo, positionUpdateTrigger = 0, colorUpdateTrigger = 0, widthUpdateTrigger = 0, ...otherProps } = this.props;\n return [\n new PathLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { ScatterplotLayer, LineLayer } from '@deck.gl/layers';\nimport { SplineLayer } from '../common-layers/spline-layer/spline-layer';\nconst DEBUG = false;\nexport class CurvedEdgeLayer extends CompositeLayer {\n static layerName = 'CurvedEdgeLayer';\n // @ts-expect-error TODO\n renderLayers() {\n const { data, getLayoutInfo, positionUpdateTrigger = 0, colorUpdateTrigger = 0, widthUpdateTrigger = 0, ...otherProps } = this.props;\n return [\n DEBUG &&\n new ScatterplotLayer(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 DEBUG &&\n new LineLayer(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 DEBUG &&\n new LineLayer(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 new SplineLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { COORDINATE_SYSTEM, CompositeLayer } from '@deck.gl/core';\nimport { PathLayer } from '@deck.gl/layers';\nimport { getCurvePoints } from 'cardinal-spline-js';\n// const getCurvePoints = () => {};\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};\nexport class SplineLayer extends CompositeLayer {\n static layerName = 'SplineLayer';\n initializeState() {\n this.state = { typedEdgeData: [] };\n }\n shouldUpdateState({ changeFlags }) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n updateState({ props, oldProps, changeFlags }) {\n super.updateState({ props, oldProps, changeFlags });\n if (changeFlags.dataChanged || changeFlags.propsChanged) {\n this.updateSplineData();\n }\n }\n updateSplineData() {\n const { data } = this.props;\n const paths = data.reduce((res, d) => {\n const sourcePosition = this.props.getSourcePosition(d);\n const targetPosition = this.props.getTargetPosition(d);\n const controlPoints = this.props.getControlPoints(d);\n // Catmull-Rom curve\n const serializedControlPoints = controlPoints.toString().split(',');\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([...sourcePosition, ...serializedControlPoints, ...targetPosition], 0.5, 10);\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 renderLayers() {\n const { coordinateSystem, getColor, getWidth, id, updateTriggers } = this.props;\n const { paths } = this.state;\n return new PathLayer({\n id: `${id}-splines`,\n data: paths,\n getPath: (d) => d,\n getColor,\n getWidth,\n coordinateSystem,\n updateTriggers\n });\n }\n}\nSplineLayer.layerName = 'SplineLayer';\nSplineLayer.defaultProps = defaultProps;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { ZoomableTextLayer } from '../common-layers/zoomable-text-layer/zoomable-text-layer';\nexport class EdgeLabelLayer extends CompositeLayer {\n static layerName = 'EdgeLabelLayer';\n renderLayers() {\n const { data, getLayoutInfo, positionUpdateTrigger = 0, stylesheet } = this.props;\n return [\n new ZoomableTextLayer(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] = 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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { FlowPathLayer } from '../common-layers/flow-path-layer/flow-path-layer';\nexport class FlowLayer extends CompositeLayer {\n static layerName = 'FlowLayer';\n renderLayers() {\n const { data, getLayoutInfo, positionUpdateTrigger = 0, stylesheet } = this.props;\n return [\n new FlowPathLayer(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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// import {Buffer, Transform} from '@luma.gl/core';\nimport { LineLayer } from '@deck.gl/layers';\nimport { window } from 'global';\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';\nconst defaultProps = {\n ...LineLayer.defaultProps,\n getWidth: { type: 'accessor', value: 1 },\n getSpeed: { type: 'accessor', value: 0 }\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 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 animate() {\n const { transform } = this.state;\n if (transform) {\n transform.run();\n transform.swap();\n }\n this.setState({\n animation: window.requestAnimationFrame(this.animate.bind(this))\n });\n }\n updateState({ props, oldProps, changeFlags }) {\n super.updateState({ props, oldProps, changeFlags });\n const { speedsBuffer } = this.state;\n const speedChanged = changeFlags.dataChanged ||\n props.fp64 !== oldProps.fp64 ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getSpeed));\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 if (props.fp64 !== oldProps.fp64) {\n if (this.state.model) {\n this.state.model.delete();\n }\n this.setState({ model: this._getModel() });\n this.getAttributeManager().invalidateAll();\n }\n }\n finalizeState() {\n super.finalizeState(this.context);\n window.cancelAnimationFrame(this.state.animation);\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 // 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 draw({ uniforms }) {\n throw new Error('Not implemented');\n // const {transform} = this.state;\n // if (!transform) {\n // return;\n // }\n // const {viewport} = this.context;\n // const {widthUnits, widthScale, widthMinPixels, widthMaxPixels} = this.props;\n // const widthMultiplier = widthUnits === 'pixels' ? viewport.distanceScales.metersPerPixel[2] : 1;\n // const offsetBuffer = transform.getBuffer('v_offset');\n // offsetBuffer.setAccessor({divisor: 1});\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 // offsetBuffer.setAccessor({divisor: 0});\n }\n}\nFlowPathLayer.layerName = 'FlowPathLayer';\nFlowPathLayer.defaultProps = defaultProps;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\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\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["isEqual", "import_meta", "defaultOptions", "defaultOptions", "getOffset", "offX", "offY", "import_core", "Color", "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", "defaultProps", "getOffset"]
|
|
7
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { GraphEngine } from './core/graph-engine';
|
|
2
|
+
export { Graph } from './core/graph';
|
|
3
|
+
export { Node } from './core/node';
|
|
4
|
+
export { Edge } from './core/edge';
|
|
5
|
+
export { NODE_STATE, NODE_TYPE, EDGE_TYPE, EDGE_DECORATOR_TYPE, LAYOUT_STATE, MARKER_TYPE } from './core/constants';
|
|
6
|
+
export { BaseLayout } from './core/base-layout';
|
|
7
|
+
export { D3ForceLayout } from './layouts/d3-force/d3-force-layout';
|
|
8
|
+
export { GPUForceLayout } from './layouts/gpu-force/gpu-force-layout';
|
|
9
|
+
export { SimpleLayout } from './layouts/simple-layout/simple-layout';
|
|
10
|
+
export { JSONLoader } from './loaders/json-loader';
|
|
11
|
+
export { basicNodeParser } from './loaders/node-parsers';
|
|
12
|
+
export { basicEdgeParser } from './loaders/edge-parsers';
|
|
13
|
+
export { createGraph } from './utils/create-graph';
|
|
14
|
+
export * from './utils/layer-utils';
|
|
15
|
+
export * from './utils/log';
|
|
16
|
+
export { GraphLayer } from './layers/graph-layer';
|
|
17
|
+
export { EdgeLayer } from './layers/edge-layer';
|
|
18
|
+
/** @deprecated Use EdgeLayer */
|
|
19
|
+
export { EdgeLayer as CompositeEdgeLayer } from './layers/edge-layer';
|