@deck.gl-community/graph-layers 9.1.0-beta.3 → 9.1.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/cache.js +1 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/constants.js +1 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/graph-engine.js +1 -0
- package/dist/core/graph-engine.js.map +1 -0
- package/dist/core/graph-layout.js +1 -0
- package/dist/core/graph-layout.js.map +1 -0
- package/dist/core/interaction-manager.js +1 -0
- package/dist/core/interaction-manager.js.map +1 -0
- package/dist/graph/edge.js +1 -0
- package/dist/graph/edge.js.map +1 -0
- package/dist/graph/graph.js +1 -0
- package/dist/graph/graph.js.map +1 -0
- package/dist/graph/node.js +1 -0
- package/dist/graph/node.js.map +1 -0
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js.map +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js.map +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js.map +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +1 -0
- package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js.map +1 -0
- package/dist/layers/common-layers/marker-layer/atlas-data-url.js +1 -0
- package/dist/layers/common-layers/marker-layer/atlas-data-url.js.map +1 -0
- package/dist/layers/common-layers/marker-layer/marker-layer.js +1 -0
- package/dist/layers/common-layers/marker-layer/marker-layer.js.map +1 -0
- package/dist/layers/common-layers/marker-layer/marker-list.js +1 -0
- package/dist/layers/common-layers/marker-layer/marker-list.js.map +1 -0
- package/dist/layers/common-layers/marker-layer/marker-mapping.js +1 -0
- package/dist/layers/common-layers/marker-layer/marker-mapping.js.map +1 -0
- package/dist/layers/common-layers/spline-layer/spline-layer.js +1 -0
- package/dist/layers/common-layers/spline-layer/spline-layer.js.map +1 -0
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +1 -0
- package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js.map +1 -0
- package/dist/layers/edge-layer.js +1 -0
- package/dist/layers/edge-layer.js.map +1 -0
- package/dist/layers/edge-layers/curved-edge-layer.js +1 -0
- package/dist/layers/edge-layers/curved-edge-layer.js.map +1 -0
- package/dist/layers/edge-layers/edge-label-layer.js +1 -0
- package/dist/layers/edge-layers/edge-label-layer.js.map +1 -0
- package/dist/layers/edge-layers/flow-layer.js +1 -0
- package/dist/layers/edge-layers/flow-layer.js.map +1 -0
- package/dist/layers/edge-layers/path-edge-layer.js +1 -0
- package/dist/layers/edge-layers/path-edge-layer.js.map +1 -0
- package/dist/layers/edge-layers/straight-line-edge-layer.js +1 -0
- package/dist/layers/edge-layers/straight-line-edge-layer.js.map +1 -0
- package/dist/layers/graph-layer.js +1 -0
- package/dist/layers/graph-layer.js.map +1 -0
- package/dist/layers/node-layers/circle-layer.js +1 -0
- package/dist/layers/node-layers/circle-layer.js.map +1 -0
- package/dist/layers/node-layers/image-layer.js +1 -0
- package/dist/layers/node-layers/image-layer.js.map +1 -0
- package/dist/layers/node-layers/label-layer.js +1 -0
- package/dist/layers/node-layers/label-layer.js.map +1 -0
- package/dist/layers/node-layers/path-rounded-rectangle-layer.js +1 -0
- package/dist/layers/node-layers/path-rounded-rectangle-layer.js.map +1 -0
- package/dist/layers/node-layers/rectangle-layer.js +1 -0
- package/dist/layers/node-layers/rectangle-layer.js.map +1 -0
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +1 -0
- package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js.map +1 -0
- package/dist/layers/node-layers/rounded-rectangle-layer.js +1 -0
- package/dist/layers/node-layers/rounded-rectangle-layer.js.map +1 -0
- package/dist/layers/node-layers/zoomable-marker-layer.js +1 -0
- package/dist/layers/node-layers/zoomable-marker-layer.js.map +1 -0
- package/dist/layouts/d3-force/d3-force-layout.js +1 -0
- package/dist/layouts/d3-force/d3-force-layout.js.map +1 -0
- package/dist/layouts/d3-force/worker.js +1 -0
- package/dist/layouts/d3-force/worker.js.map +1 -0
- package/dist/layouts/experimental/force-multi-graph-layout.js +1 -0
- package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -0
- package/dist/layouts/experimental/hive-plot-layout.js +1 -0
- package/dist/layouts/experimental/hive-plot-layout.js.map +1 -0
- package/dist/layouts/experimental/radial-layout.js +1 -0
- package/dist/layouts/experimental/radial-layout.js.map +1 -0
- package/dist/layouts/gpu-force/gpu-force-layout.js +1 -0
- package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -0
- package/dist/layouts/gpu-force/worker.js +1 -0
- package/dist/layouts/gpu-force/worker.js.map +1 -0
- package/dist/layouts/simple-layout.js +1 -0
- package/dist/layouts/simple-layout.js.map +1 -0
- package/dist/loaders/create-graph.js +1 -0
- package/dist/loaders/create-graph.js.map +1 -0
- package/dist/loaders/edge-parsers.js +1 -0
- package/dist/loaders/edge-parsers.js.map +1 -0
- package/dist/loaders/json-loader.js +1 -0
- package/dist/loaders/json-loader.js.map +1 -0
- package/dist/loaders/node-parsers.js +1 -0
- package/dist/loaders/node-parsers.js.map +1 -0
- package/dist/loaders/simple-json-graph-loader.js +1 -0
- package/dist/loaders/simple-json-graph-loader.js.map +1 -0
- package/dist/loaders/table-graph-loader.js +1 -0
- package/dist/loaders/table-graph-loader.js.map +1 -0
- package/dist/style/style-property.js +1 -0
- package/dist/style/style-property.js.map +1 -0
- package/dist/style/style-sheet.js +1 -0
- package/dist/style/style-sheet.js.map +1 -0
- package/dist/utils/layer-utils.js +1 -0
- package/dist/utils/layer-utils.js.map +1 -0
- package/dist/utils/log.js +1 -0
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/polygon-calculations.js +1 -0
- package/dist/utils/polygon-calculations.js.map +1 -0
- package/dist/widgets/long-press-button.js +1 -0
- package/dist/widgets/long-press-button.js.map +1 -0
- package/dist/widgets/view-control-widget.js +1 -0
- package/dist/widgets/view-control-widget.js.map +1 -0
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["index.
|
|
4
|
-
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// core - Graph representation and layout\nexport { Graph } from \"./graph/graph.js\";\nexport { Node } from \"./graph/node.js\";\nexport { Edge } from \"./graph/edge.js\";\nexport { GraphEngine } from \"./core/graph-engine.js\";\nexport { GraphLayout } from \"./core/graph-layout.js\";\nexport { SimpleLayout } from \"./layouts//simple-layout.js\";\nexport { D3ForceLayout } from \"./layouts/d3-force/d3-force-layout.js\";\nexport { GPUForceLayout } from \"./layouts/gpu-force/gpu-force-layout.js\";\nexport { RadialLayout as _RadialLayout } from \"./layouts/experimental/radial-layout.js\";\nexport { ForceMultiGraphLayout as _MultigraphLayout } from \"./layouts/experimental/force-multi-graph-layout.js\";\nexport { HivePlotLayout as _HivePlotLayout } from \"./layouts/experimental/hive-plot-layout.js\";\nexport { NODE_STATE, NODE_TYPE, EDGE_TYPE, EDGE_DECORATOR_TYPE, MARKER_TYPE } from \"./core/constants.js\";\n// deck.gl components\nexport { GraphLayer } from \"./layers/graph-layer.js\";\nexport { EdgeLayer } from \"./layers/edge-layer.js\";\n// Widgets\nexport { ViewControlWidget } from \"./widgets/view-control-widget.js\";\n// graph format loaders\nexport { loadSimpleJSONGraph } from \"./loaders/simple-json-graph-loader.js\";\n// utils\nexport { mixedGetPosition } from \"./utils/layer-utils.js\";\nexport { log } from \"./utils/log.js\";\n// DEPRECATED\nexport { createGraph } from \"./loaders/create-graph.js\";\nexport { JSONLoader } from \"./loaders/simple-json-graph-loader.js\";\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Log, COLOR } from '@probe.gl/log';\nexport const log = new Log({ id: 'graph-layers' }).enable();\nlog.log({ color: COLOR.CYAN }, 'Initialize graph-layers logger.')();\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 { log } from \"../utils/log.js\";\nimport { Cache } from \"../core/cache.js\";\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 graph - copy the graph if this exists.\n */\n constructor(propsOrGraph) {\n super();\n if (propsOrGraph instanceof Graph) {\n // if a Graph instance was supplied, copy the supplied graph into this graph\n const graph = propsOrGraph;\n this._name = graph?._name || this._name;\n this._nodeMap = graph._nodeMap;\n this._edgeMap = graph._edgeMap;\n }\n else {\n // If graphProps were supplied, initialize this graph from the supplied props\n const props = propsOrGraph;\n this._name = props?.name || this._name;\n this.batchAddNodes(props?.nodes || []);\n this.batchAddEdges(props?.edges || []);\n }\n }\n /**\n * Set graph name\n * @param 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 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 function 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 * @paramnode - 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 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 - 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 nodeId The id of the node\n * @return Node\n */\n findNode(nodeId) {\n return this._nodeMap[nodeId];\n }\n /**\n * Update the indicated node to the provided value\n * @param 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 - 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 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\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 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 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 - 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 id - the target edge ID\n * @return - 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 nodeId - the target node ID\n * @return - 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 nodeId - the target node ID\n * @return - 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 nodeId - the target node ID.\n * @return - 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 graph Another graph to be compared against itself\n * @return true if the graph is the same as itself.\n */\n equals(graph) {\n if (!graph || !(graph instanceof Graph)) {\n return false;\n }\n return this.version === graph.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.js\";\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 \"../core/constants.js\";\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 */\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 - 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 - 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 - 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 [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 - 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 key - property key.\n * @return - 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 data - the new data of the node\n */\n setData(data) {\n this._data = data;\n }\n /**\n * Update a data property.\n * @param key - the key of the property\n * @param value - the value of the property.\n */\n setDataProperty(key, value) {\n this._data[key] = value;\n }\n /**\n * Set node state\n * @param state - one of NODE_STATE\n */\n setState(state) {\n this.state = state;\n }\n /**\n * Get node state\n * @returns state - one of NODE_STATE\n */\n getState() {\n return this.state;\n }\n /**\n * Add connected edges to the node\n * @param edge an edge or an array of edges to be added to this._connectedEdges\n */\n addConnectedEdges(edge) {\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 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 \"../core/constants.js\";\n/** Basic edge data structure */\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 options.id - information about the edge\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 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 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 key - property key.\n * @return - 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 data - the origin data.\n */\n setData(data) {\n this._data = data;\n }\n /**\n * Update a data property.\n * @param key - the key of the property\n * @param value - the value of the property.\n */\n setDataProperty(key, value) {\n this._data[key] = value;\n }\n /**\n * Set edge state\n * @param state - one of EDGE_STATE\n */\n setState(state) {\n this.state = state;\n }\n /**\n * Get edge state\n * @returns 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 { Graph } from \"../graph/graph.js\";\nimport { Cache } from \"./cache.js\";\n/** Graph engine controls the graph data and layout calculation */\nexport class GraphEngine extends EventTarget {\n props;\n _graph;\n _layout;\n _cache = new Cache();\n _layoutDirty = false;\n _transactionInProgress = false;\n constructor(props, layout) {\n super();\n if (props instanceof Graph) {\n props = {\n graph: props,\n layout\n };\n }\n this.props = props;\n this._graph = props.graph;\n this._layout = props.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 isEqual from 'lodash.isequal';\nimport { EDGE_TYPE } from \"./constants.js\";\n/** All the layout classes are extended from this base layout class. */\nexport class GraphLayout extends EventTarget {\n /** Name of the layout. */\n _name = 'GraphLayout';\n /** Extra configuration options of the layout. */\n _options;\n version = 0;\n state = 'INIT';\n /**\n * Constructor of GraphLayout\n * @param options extra configuration options of the layout\n */\n constructor(options) {\n super();\n this._options = options;\n }\n /**\n * Check the equality of two layouts\n * @param layout - The layout to be compared.\n * @return - True if the layout is the same as itself.\n */\n equals(layout) {\n if (!layout || !(layout instanceof GraphLayout)) {\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 node Node to be locked\n * @param x x coordinate\n * @param 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 // INTERNAL METHODS\n _updateState(state) {\n this.state = state;\n this.version += 1;\n }\n /** @fires GraphLayout#onLayoutStart */\n _onLayoutStart = () => {\n this._updateState('CALCULATING');\n /**\n * Layout calculation start.\n * @event GraphLayout#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutStart'));\n };\n /** @fires GraphLayout#onLayoutChange */\n _onLayoutChange = () => {\n this._updateState('CALCULATING');\n /**\n * Layout calculation iteration.\n * @event GraphLayout#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutChange'));\n };\n /** @fires GraphLayout#onLayoutDone */\n _onLayoutDone = () => {\n this._updateState('DONE');\n /**\n * Layout calculation is done.\n * @event GraphLayout#onLayoutDone\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutDone'));\n };\n /** @fires GraphLayout#onLayoutError */\n _onLayoutError = () => {\n this._updateState('ERROR');\n /**\n * Layout calculation went wrong.\n * @event GraphLayout#onLayoutError\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutError'));\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GraphLayout } from \"../core/graph-layout.js\";\nimport { EDGE_TYPE } from \"../core/constants.js\";\n/** A basic layout where the application controls positions of each node */\nexport class SimpleLayout extends GraphLayout {\n static defaultOptions = {\n nodePositionAccessor: (node) => [node.getPropertyValue('x'), node.getPropertyValue('y')]\n };\n _name = 'SimpleLayout';\n _graph = null;\n _nodeMap = {};\n _nodePositionMap = {};\n constructor(options = {}) {\n super({ ...SimpleLayout.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 { GraphLayout } from \"../../core/graph-layout.js\";\nimport { EDGE_TYPE } from \"../../core/constants.js\";\nexport class D3ForceLayout extends GraphLayout {\n static defaultOptions = {\n alpha: 0.3,\n resumeAlpha: 0.1,\n nBodyStrength: -900,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 400,\n getCollisionRadius: 0\n };\n _name = 'D3';\n _positionsByNodeId = new Map();\n _graph;\n _worker;\n constructor(options) {\n super(options);\n this._options = {\n ...D3ForceLayout.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 { GraphLayout } from \"../../core/graph-layout.js\";\nimport { EDGE_TYPE } from \"../../core/constants.js\";\n/**\n * @todo this layout should be updated with the organizational and logic improvements made in d3-force\n */\nexport class GPUForceLayout extends GraphLayout {\n static defaultOptions = {\n alpha: 0.3,\n resumeAlpha: 0.1,\n nBodyStrength: -900,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 400,\n getCollisionRadius: 0\n };\n _name = 'GPU';\n _d3Graph;\n _nodeMap;\n _edgeMap;\n _graph;\n _worker;\n _callbacks;\n constructor(options = {}) {\n const _options = {\n ...GPUForceLayout.defaultOptions,\n ...options\n };\n super(_options);\n this._name = 'GPU';\n this._options = _options;\n // store graph and prepare internal data\n this._d3Graph = { nodes: [], edges: [] };\n this._nodeMap = {};\n this._edgeMap = {};\n }\n 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._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 { GraphLayout } from \"../../core/graph-layout.js\";\nimport { EDGE_TYPE } from \"../../core/constants.js\";\nconst traverseTree = (nodeId, nodeMap) => {\n const node = nodeMap[nodeId];\n if (node.isLeaf) {\n return node;\n }\n return {\n ...node,\n children: node.children.map((nid) => traverseTree(nid, nodeMap))\n };\n};\nconst getLeafNodeCount = (node, count) => {\n if (!node.children || node.children.length === 0) {\n return count + 1;\n }\n const sum = node.children.reduce((res, c) => {\n return res + getLeafNodeCount(c, 0);\n }, 0);\n return count + sum;\n};\nconst getTreeDepth = (node, depth = 0) => {\n if (node.isLeaf) {\n return depth;\n }\n return getTreeDepth(node.children[0], depth + 1);\n};\nconst getPath = (node, targetId, path) => {\n if (node.id === targetId) {\n path.push(node.id);\n return true;\n }\n const inChildren = node.children && node.children.some((c) => getPath(c, targetId, path));\n if (inChildren) {\n path.push(node.id);\n return true;\n }\n return false;\n};\nexport class RadialLayout extends GraphLayout {\n static defaultOptions = {\n radius: 500\n };\n _name = 'RadialLayout';\n _graph = null;\n // custom layout data structure\n _hierarchicalPoints = {};\n nestedTree;\n constructor(options = {}) {\n super(options);\n this._options = {\n ...RadialLayout.defaultOptions,\n ...options\n };\n }\n initializeGraph(graph) {\n this.updateGraph(graph);\n }\n updateGraph(graph) {\n this._graph = graph;\n }\n start() {\n const nodeCount = this._graph.getNodes().length;\n if (nodeCount === 0) {\n return;\n }\n const { tree } = this._options;\n if (!tree || tree.length === 0) {\n return;\n }\n const { radius } = this._options;\n const unitAngle = 360 / nodeCount;\n // hierarchical positions\n const rootNode = tree[0];\n const nodeMap = tree.reduce((res, node) => {\n res[node.id] = {\n ...node,\n isLeaf: !node.children || node.children.length === 0\n };\n return res;\n }, {});\n // nested structure\n this.nestedTree = traverseTree(rootNode.id, nodeMap);\n const totalLevels = getTreeDepth(this.nestedTree, 0);\n const distanceBetweenLevels = radius / (totalLevels - 1);\n const calculatePosition = (node, level, startAngle, positionMap) => {\n const isRoot = node.id === rootNode.id;\n if (node.children && node.children.length !== 0) {\n const groupSize = getLeafNodeCount(node, 0);\n // center the pos\n positionMap[node.id] = isRoot\n ? [0, 0]\n : rotate(0, 0, 0, distanceBetweenLevels * (level + 1), startAngle + unitAngle * (groupSize / 2));\n // calculate children position\n let tempAngle = startAngle;\n node.children.forEach((n) => {\n calculatePosition(n, level + 1, tempAngle, positionMap);\n tempAngle += getLeafNodeCount(n, 0) * unitAngle;\n });\n }\n else {\n positionMap[node.id] = rotate(0, 0, 0, distanceBetweenLevels * (level + 1), startAngle + unitAngle);\n }\n };\n this._hierarchicalPoints = {};\n calculatePosition(this.nestedTree, 0, 0, this._hierarchicalPoints);\n // layout completes: notifiy component to re-render\n this._onLayoutChange();\n this._onLayoutDone();\n }\n getNodePosition = (node) => {\n return this._hierarchicalPoints[node.id];\n };\n // spline curve version\n getEdgePosition = (edge) => {\n const sourceNodeId = edge.getSourceNodeId();\n const targetNodeId = edge.getTargetNodeId();\n const sourceNodePos = this._hierarchicalPoints[sourceNodeId];\n const targetNodePos = this._hierarchicalPoints[targetNodeId];\n const sourcePath = [];\n getPath(this.nestedTree, sourceNodeId, sourcePath);\n const targetPath = [];\n getPath(this.nestedTree, targetNodeId, targetPath);\n const totalLevels = sourcePath.length;\n let commonAncestorLevel = totalLevels - 1; // root\n for (let i = 0; i < totalLevels; i++) {\n if (sourcePath[i] === targetPath[i]) {\n commonAncestorLevel = i;\n break;\n }\n }\n const wayPoints = [];\n for (let i = 1; i <= commonAncestorLevel; i++) {\n const nodeId = sourcePath[i];\n wayPoints.push(this._hierarchicalPoints[nodeId]);\n }\n for (let i = commonAncestorLevel - 1; i > 0; i--) {\n const nodeId = targetPath[i];\n wayPoints.push(this._hierarchicalPoints[nodeId]);\n }\n return {\n type: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition: sourceNodePos,\n targetPosition: targetNodePos,\n controlPoints: wayPoints\n };\n };\n lockNodePosition = (node, x, y) => {\n this._hierarchicalPoints[node.id] = [x, y];\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\nfunction rotate(cx, cy, x, y, angle) {\n const radians = (Math.PI / 180) * angle;\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const nx = cos * (x - cx) + sin * (y - cy) + cx;\n const ny = cos * (y - cy) - sin * (x - cx) + cy;\n return [nx, ny];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GraphLayout } from \"../../core/graph-layout.js\";\nimport { EDGE_TYPE } from \"../../core/constants.js\";\nimport * as d3 from 'd3-force';\nexport class ForceMultiGraphLayout extends GraphLayout {\n static defaultOptions = {\n alpha: 3,\n nBodyStrength: -1200,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 1400\n };\n _name = 'ForceMultiGraphLayout';\n _graph;\n // d3 part\n // custom graph data\n _d3Graph = { nodes: [], edges: [] };\n _nodeMap = {};\n _edgeMap = {};\n _simulator;\n constructor(options = {}) {\n super(options);\n this._options = {\n ...ForceMultiGraphLayout.defaultOptions,\n ...options\n };\n }\n initializeGraph(graph) {\n this.updateGraph(graph);\n }\n _strength = (d3Edge) => {\n if (d3Edge.isVirtual) {\n return 1 / d3Edge.edgeCount;\n }\n const sourceDegree = this._graph.getDegree(d3Edge.source.id);\n const targetDegree = this._graph.getDegree(d3Edge.target.id);\n return 1 / Math.min(sourceDegree, targetDegree);\n };\n _generateSimulator() {\n if (this._simulator) {\n this._simulator.on('tick', null).on('end', null);\n this._simulator = null;\n }\n const { alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax } = this._options;\n const g = this._d3Graph;\n this._simulator = d3\n .forceSimulation(g.nodes)\n .force('edge', d3\n .forceLink(g.edges)\n .id((n) => n.id)\n .strength(this._strength))\n .force('charge', d3\n .forceManyBody()\n .strength(nBodyStrength)\n .distanceMin(nBodyDistanceMin)\n .distanceMax(nBodyDistanceMax))\n .force('center', d3.forceCenter())\n .alpha(alpha);\n // register event callbacks\n this._simulator.on('tick', this._onLayoutChange).on('end', this._onLayoutDone);\n }\n start() {\n this._generateSimulator();\n this._simulator.restart();\n }\n resume() {\n this._simulator.restart();\n }\n stop() {\n this._simulator.stop();\n }\n updateGraph(graph) {\n this._graph = graph;\n // nodes\n const newNodeMap = {};\n const newD3Nodes = graph.getNodes().map((node) => {\n const oldD3Node = this._nodeMap[node.id];\n const newD3Node = oldD3Node ? oldD3Node : { id: node.id };\n newNodeMap[node.id] = newD3Node;\n return newD3Node;\n });\n // edges\n // bucket edges between the same source/target node pairs.\n const nodePairs = graph.getEdges().reduce((res, edge) => {\n const nodes = [edge.getSourceNodeId(), edge.getTargetNodeId()];\n // sort the node ids to count the edges with the same pair\n // but different direction (a -> b or b -> a)\n const pairId = nodes.sort().toString();\n // push this edge into the bucket\n if (!res[pairId]) {\n res[pairId] = [edge];\n }\n else {\n res[pairId].push(edge);\n }\n return res;\n }, {});\n // go through each pair of edges,\n // if only one edge between two nodes, create a straight line\n // otherwise, create one virtual node and two edges for each edge\n const newD3Edges = [];\n const newEdgeMap = {};\n Object.keys(nodePairs).forEach((pairId) => {\n const betweenEdges = nodePairs[pairId];\n const firstEdge = betweenEdges[0];\n if (betweenEdges.length === 1) {\n // do nothing, this is a real edge\n const newD3Edge = {\n type: EDGE_TYPE.LINE,\n id: firstEdge.getId(),\n source: newNodeMap[firstEdge.getSourceNodeId()],\n target: newNodeMap[firstEdge.getTargetNodeId()],\n isVirtual: false\n };\n newEdgeMap[firstEdge.getId()] = newD3Edge;\n newD3Edges.push(newD3Edge);\n return;\n }\n // else reduce to one virtual edge\n const newD3Edge = {\n type: EDGE_TYPE.LINE,\n id: pairId,\n source: newNodeMap[firstEdge.getSourceNodeId()],\n target: newNodeMap[firstEdge.getTargetNodeId()],\n isVirtual: true,\n edgeCount: betweenEdges.length\n };\n newEdgeMap[pairId] = newD3Edge;\n newD3Edges.push(newD3Edge);\n betweenEdges.forEach((e, idx) => {\n newEdgeMap[e.id] = {\n type: EDGE_TYPE.SPLINE_CURVE,\n id: e.id,\n source: newNodeMap[e.getSourceNodeId()],\n target: newNodeMap[e.getTargetNodeId()],\n virtualEdgeId: pairId,\n isVirtual: true,\n index: idx\n };\n });\n });\n this._nodeMap = newNodeMap;\n this._d3Graph.nodes = newD3Nodes;\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 // default value\n return [0, 0];\n };\n getEdgePosition = (edge) => {\n const d3Edge = this._edgeMap[edge.id];\n if (d3Edge) {\n if (!d3Edge.isVirtual) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [d3Edge.source.x, d3Edge.source.y],\n targetPosition: [d3Edge.target.x, d3Edge.target.y],\n controlPoints: []\n };\n }\n // else, check the referenced virtual edge\n const virtualEdge = this._edgeMap[d3Edge.virtualEdgeId];\n const edgeCount = virtualEdge.edgeCount;\n // get the position of source and target nodes\n const sourcePosition = [virtualEdge.source.x, virtualEdge.source.y];\n const targetPosition = [virtualEdge.target.x, virtualEdge.target.y];\n // calculate a symmetric curve\n const distance = Math.hypot(sourcePosition[0] - targetPosition[0], sourcePosition[1] - targetPosition[1]);\n const index = d3Edge.index;\n // curve direction: inward vs. outward\n const direction = index % 2 ? 1 : -1;\n // if the number of the parallel edges is an even number => symmetric shape\n // otherwise, the 0th node will be a staight line, and rest of them are symmetrical.\n const symmetricShape = edgeCount % 2 === 0;\n const offset = Math.max(distance / 10, 5) *\n (symmetricShape ? Math.floor(index / 2 + 1) : Math.ceil(index / 2));\n const controlPoint = computeControlPoint(sourcePosition, targetPosition, direction, offset);\n return {\n type: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition,\n targetPosition,\n controlPoints: [controlPoint]\n };\n }\n // default value\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [0, 0],\n targetPosition: [0, 0],\n controlPoints: []\n };\n };\n lockNodePosition = (node, x, y) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.x = x;\n d3Node.y = y;\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\n/**\n * A helper function to compute the control point of a curve\n * @param {number[]} source - the coordinates of source point, ex: [x, y, z]\n * @param {number[]} target - the coordinates of target point, ex: [x, y, z]\n * @param {number} direction - the direction of the curve, 1 or -1\n * @param {number} offset - offset from the midpoint\n * @return {number[]} - the coordinates of the control point\n */\nfunction computeControlPoint(source, target, direction, offset) {\n const midPoint = [(source[0] + target[0]) / 2, (source[1] + target[1]) / 2];\n const dx = target[0] - source[0];\n const dy = target[1] - source[1];\n const normal = [dy, -dx];\n const length = Math.sqrt(Math.pow(normal[0], 2.0) + Math.pow(normal[1], 2.0));\n const normalized = [normal[0] / length, normal[1] / length];\n return [\n midPoint[0] + normalized[0] * offset * direction,\n midPoint[1] + normalized[1] * offset * direction\n ];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GraphLayout } from \"../../core/graph-layout.js\";\nimport { EDGE_TYPE } from \"../../core/constants.js\";\nexport class HivePlotLayout extends GraphLayout {\n static defaultOptions = {\n innerRadius: 100,\n outerRadius: 500,\n getNodeAxis: (node) => node.getPropertyValue('group')\n };\n _name = 'HivePlot';\n _graph;\n _totalAxis;\n _axis;\n _nodeMap = {};\n _nodePositionMap = {};\n constructor(options = {}) {\n super(options);\n this._options = {\n ...HivePlotLayout.defaultOptions,\n ...options\n };\n }\n initializeGraph(graph) {\n this.updateGraph(graph);\n }\n updateGraph(graph) {\n const { getNodeAxis, innerRadius, outerRadius } = this._options;\n this._graph = graph;\n this._nodeMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = node;\n return res;\n }, {});\n // bucket nodes into few axis\n this._axis = graph.getNodes().reduce((res, node) => {\n const axis = getNodeAxis(node);\n if (!res[axis]) {\n res[axis] = [];\n }\n res[axis].push(node);\n return res;\n }, {});\n // sort nodes along the same axis by degree\n this._axis = Object.keys(this._axis).reduce((res, axis) => {\n const bucketedNodes = this._axis[axis];\n const sortedNodes = bucketedNodes.sort((a, b) => {\n if (a.getDegree() > b.getDegree()) {\n return 1;\n }\n if (a.getDegree() === b.getDegree()) {\n return 0;\n }\n return -1;\n });\n res[axis] = sortedNodes;\n return res;\n }, {});\n this._totalAxis = Object.keys(this._axis).length;\n const center = [0, 0];\n const angleInterval = 360 / Object.keys(this._axis).length;\n // calculate positions\n this._nodePositionMap = Object.keys(this._axis).reduce((res, axis, axisIdx) => {\n const axisAngle = angleInterval * axisIdx;\n const bucketedNodes = this._axis[axis];\n const interval = (outerRadius - innerRadius) / bucketedNodes.length;\n bucketedNodes.forEach((node, idx) => {\n const radius = innerRadius + idx * interval;\n const x = Math.cos((axisAngle / 180) * Math.PI) * radius + center[0];\n const y = Math.sin((axisAngle / 180) * Math.PI) * radius + center[1];\n res[node.getId()] = [x, y];\n });\n return res;\n }, {});\n }\n start() {\n this._onLayoutChange();\n this._onLayoutDone();\n }\n getNodePosition = (node) => this._nodePositionMap[node.getId()];\n getEdgePosition = (edge) => {\n const { getNodeAxis } = this._options;\n const sourceNodeId = edge.getSourceNodeId();\n const targetNodeId = edge.getTargetNodeId();\n const sourcePosition = this._nodePositionMap[sourceNodeId];\n const targetPosition = this._nodePositionMap[targetNodeId];\n const sourceNode = this._nodeMap[sourceNodeId];\n const targetNode = this._nodeMap[targetNodeId];\n const sourceNodeAxis = getNodeAxis(sourceNode);\n const targetNodeAxis = getNodeAxis(targetNode);\n if (sourceNodeAxis === targetNodeAxis) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition,\n targetPosition,\n controlPoints: []\n };\n }\n const controlPoint = computeControlPoint({\n sourcePosition,\n sourceNodeAxis,\n targetPosition,\n targetNodeAxis,\n totalAxis: this._totalAxis\n });\n return {\n type: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition,\n targetPosition,\n controlPoints: [controlPoint]\n };\n };\n lockNodePosition = (node, x, y) => {\n this._nodePositionMap[node.id] = [x, y];\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\nfunction computeControlPoint({ sourcePosition, sourceNodeAxis, targetPosition, targetNodeAxis, totalAxis }) {\n const halfAxis = (totalAxis - 1) / 2;\n // check whether the source/target are at the same side.\n const sameSide = (sourceNodeAxis <= halfAxis && targetNodeAxis <= halfAxis) ||\n (sourceNodeAxis > halfAxis && targetNodeAxis > halfAxis);\n // curve direction\n const direction = sameSide && sourceNodeAxis <= halfAxis && targetNodeAxis <= halfAxis ? 1 : -1;\n // flip the source/target to follow the clockwise diretion\n const source = sourceNodeAxis < targetNodeAxis && sameSide ? sourcePosition : targetPosition;\n const target = sourceNodeAxis < targetNodeAxis && sameSide ? targetPosition : sourcePosition;\n // calculate offset\n const distance = Math.hypot(source[0] - target[0], source[1] - target[1]);\n const offset = distance * 0.2;\n const midPoint = [(source[0] + target[0]) / 2, (source[1] + target[1]) / 2];\n const dx = target[0] - source[0];\n const dy = target[1] - source[1];\n const normal = [dy, -dx];\n const length = Math.hypot(dy, -dx);\n const normalized = [normal[0] / length, normal[1] / length];\n return [\n midPoint[0] + normalized[0] * offset * direction,\n midPoint[1] + normalized[1] * offset * direction\n ];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { COORDINATE_SYSTEM, CompositeLayer } from '@deck.gl/core';\nimport { NODE_TYPE, EDGE_DECORATOR_TYPE } from \"../core/constants.js\";\nimport { GraphEngine } from \"../core/graph-engine.js\";\nimport { Stylesheet } from \"../style/style-sheet.js\";\nimport { mixedGetPosition } from \"../utils/layer-utils.js\";\nimport { InteractionManager } from \"../core/interaction-manager.js\";\nimport { log } from \"../utils/log.js\";\n// node layers\nimport { CircleLayer } from \"./node-layers/circle-layer.js\";\nimport { ImageLayer } from \"./node-layers/image-layer.js\";\nimport { LabelLayer } from \"./node-layers/label-layer.js\";\nimport { RectangleLayer } from \"./node-layers/rectangle-layer.js\";\nimport { RoundedRectangleLayer } from \"./node-layers/rounded-rectangle-layer.js\";\nimport { PathBasedRoundedRectangleLayer } from \"./node-layers/path-rounded-rectangle-layer.js\";\nimport { ZoomableMarkerLayer } from \"./node-layers/zoomable-marker-layer.js\";\n// edge layers\nimport { EdgeLayer } from \"./edge-layer.js\";\nimport { EdgeLabelLayer } from \"./edge-layers/edge-label-layer.js\";\nimport { FlowLayer } from \"./edge-layers/flow-layer.js\";\nimport { JSONLoader } from \"../loaders/json-loader.js\";\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};\nexport class GraphLayer extends CompositeLayer {\n static layerName = 'GraphLayer';\n static defaultProps = {\n // Composite layer props\n // @ts-expect-error composite layer props\n pickable: true,\n // Graph props\n graphLoader: JSONLoader,\n nodeStyle: [],\n nodeEvents: {\n onMouseLeave: () => { },\n onHover: () => { },\n onMouseEnter: () => { },\n onClick: () => { },\n onDrag: () => { }\n },\n edgeStyle: {\n stroke: 'black',\n strokeWidth: 1,\n // an array of styles for layers\n decorators: []\n },\n edgeEvents: {\n onClick: () => { },\n onHover: () => { }\n },\n enableDragging: false\n };\n // @ts-expect-error Some typescript confusion due to override of base class state\n state;\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 }\n initializeState() {\n this.state = {\n interactionManager: new InteractionManager(this.props, () => this.forceUpdate())\n };\n const engine = this.props.engine;\n this._setGraphEngine(engine);\n }\n shouldUpdateState({ changeFlags }) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n updateState({ props, oldProps, changeFlags }) {\n if (changeFlags.dataChanged &&\n props.data &&\n !(Array.isArray(props.data) && props.data.length === 0)) {\n // console.log(props.data);\n const graph = this.props.graphLoader({ json: props.data });\n const layout = this.props.layout;\n const graphEngine = new GraphEngine({ graph, layout });\n this._setGraphEngine(graphEngine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n }\n else if (changeFlags.propsChanged && props.graph !== oldProps.graph) {\n const graphEngine = new GraphEngine({ graph: props.graph, layout: props.layout });\n this._setGraphEngine(graphEngine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n }\n }\n finalize() {\n this._removeGraphEngine();\n }\n _setGraphEngine(graphEngine) {\n if (graphEngine === this.state.graphEngine) {\n return;\n }\n this._removeGraphEngine();\n if (graphEngine) {\n this.state.graphEngine = graphEngine;\n this.state.graphEngine.run();\n // added or removed a node, or in general something layout related changed\n this.state.graphEngine.addEventListener('onLayoutChange', this.forceUpdate);\n }\n }\n _removeGraphEngine() {\n if (this.state.graphEngine) {\n this.state.graphEngine.removeEventListener('onLayoutChange', this.forceUpdate);\n this.state.graphEngine.clear();\n this.state.graphEngine = null;\n }\n }\n createNodeLayers() {\n const engine = this.state.graphEngine;\n const { nodeStyle } = this.props;\n if (!engine || !nodeStyle || !Array.isArray(nodeStyle) || nodeStyle.length === 0) {\n return [];\n }\n 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 engine = this.state.graphEngine;\n const { edgeStyle } = this.props;\n if (!engine || !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}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Color from 'color';\nimport { log } from \"../utils/log.js\";\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.js\";\nimport { NODE_TYPE, EDGE_DECORATOR_TYPE } from \"../core/constants.js\";\nimport { log } from \"../utils/log.js\";\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\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 { EDGE_STATE, NODE_STATE } from \"./constants.js\";\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.js\";\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\nvarying vec4 vFillColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n\n float distToCenter = length(unitPosition);\n\n /* Calculate the cutoff radius for the rounded corners */\n float threshold = sqrt(2.0) * (1.0 - roundedRectangle.cornerRadius) + 1.0 * roundedRectangle.cornerRadius;\n if (distToCenter <= threshold) {\n gl_FragColor = vFillColor;\n } else {\n discard;\n }\n\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { fs } from \"./rounded-rectangle-layer-fragment.js\";\nimport { RectangleLayer } from \"./rectangle-layer.js\";\nconst uniformBlock = `\\\nuniform roundedRectangleUniforms {\n float cornerRadius;\n} roundedRectangle;\n`;\nexport const roundedRectangleUniforms = {\n name: 'roundedRectangle',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n cornerRadius: 'f32'\n }\n};\nexport class RoundedRectangleLayer extends RectangleLayer {\n static layerName = 'RoundedRectangleLayer';\n draw(props) {\n const { cornerRadius } = this.props;\n const roundedRectangleProps = { cornerRadius };\n const model = this.state.model;\n model.shaderInputs.setProps({ roundedRectangle: roundedRectangleProps });\n super.draw(props);\n }\n getShaders() {\n // use object.assign to make sure we don't overwrite existing fields like `vs`, `modules`...\n const shaders = super.getShaders(undefined);\n return {\n ...shaders,\n fs,\n modules: [...shaders.modules, roundedRectangleUniforms]\n };\n }\n}\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.js\";\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.js\";\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.js\";\nimport { AtlasDataURL } from \"./atlas-data-url.js\";\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.js\";\nimport { StraightLineEdgeLayer } from \"../layers/edge-layers/straight-line-edge-layer.js\";\nimport { PathEdgeLayer } from \"./edge-layers/path-edge-layer.js\";\nimport { CurvedEdgeLayer } from \"./edge-layers/curved-edge-layer.js\";\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.js\";\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.js\";\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.js\";\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", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Edge } from \"../graph/edge.js\";\nimport { Node } from \"../graph/node.js\";\nimport { Graph } from \"../graph/graph.js\";\n/**\n * @deprecated Use `new Graph(name, nodes, edges)`\n * Create a graph from a list of Nodes and edges\n */\nexport function createGraph(props) {\n const { name, nodes, edges, nodeParser, edgeParser } = props;\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.js\";\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.js\";\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 \"./create-graph.js\";\nimport { basicNodeParser } from \"./node-parsers.js\";\nimport { basicEdgeParser } from \"./edge-parsers.js\";\nimport { log } from \"../utils/log.js\";\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", "import { jsxs as _jsxs, jsx as _jsx } from \"preact/jsx-runtime\";\n// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Component, render } from 'preact';\nimport { LongPressButton } from \"./long-press-button.js\";\nexport const ViewControlWrapper = ({ children }) => (_jsxs(\"div\", { style: {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n position: 'absolute',\n zIndex: 99,\n userSelect: 'none'\n }, children: [' ', children, ' '] }));\nexport const NavigationButtonContainer = ({ children }) => (_jsxs(\"div\", { style: {\n background: '#f7f7f7',\n borderRadius: '23px',\n border: '0.5px solid #eaeaea',\n boxShadow: 'inset 11px 11px 5px -7px rgba(230, 230, 230, 0.49)',\n height: '46px',\n width: '46px'\n }, children: [' ', children, ' '] }));\nexport const NavigationButton = (props) => (_jsxs(\"div\", { onClick: props.onClick, style: {\n color: '#848484',\n cursor: 'pointer',\n position: 'absolute',\n left: props.left,\n top: props.top,\n transform: `rotate(${props.rotate || 0}deg)`\n // &:hover,\n // &:active {\n // color: #00ade6;\n // }\n }, children: [' ', props.children, ' '] }));\nexport const ZoomControlWrapper = ({ children }) => (_jsxs(\"div\", { style: {\n alignItems: 'center',\n background: '#f7f7f7',\n border: '0.5px solid #eaeaea',\n display: 'flex',\n flexDirection: 'column',\n marginTop: '6px',\n padding: '2px 0',\n width: '18px'\n }, children: [' ', children, ' '] }));\nexport const VerticalSlider = ({ children }) => (_jsxs(\"div\", { style: {\n display: 'inline-block',\n height: '100px',\n padding: '0',\n width: '10px'\n // > input[type='range'][orient='vertical'] {\n // -webkit-appearance: slider-vertical;\n // height: 100px;\n // padding: 0;\n // margin: 0;\n // width: 10px;\n // }\n }, children: [' ', children, ' '] }));\nexport const ZoomControlButton = ({ children }) => (_jsxs(\"div\", { style: {\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n margin: '-4px'\n // &:hover,\n // &:active {\n // color: #00ade6;\n // }\n }, children: [' ', children, ' '] }));\nexport class ViewControl extends Component {\n static displayName = 'ViewControl';\n static defaultProps = {\n id: undefined,\n viewId: undefined,\n placement: 'top-left',\n fitBounds: () => { },\n panBy: () => { },\n zoomBy: () => { },\n zoomLevel: 1,\n deltaPan: 10,\n deltaZoom: 0.1,\n minZoom: 0.1,\n maxZoom: 1,\n style: {},\n className: ''\n };\n // pan actions\n panUp = () => this.props.panBy(0, this.props.deltaPan);\n panDown = () => this.props.panBy(0, -1 * this.props.deltaPan);\n panLeft = () => this.props.panBy(this.props.deltaPan, 0);\n panRight = () => this.props.panBy(-1 * this.props.deltaPan, 0);\n // zoom actions\n zoomIn = () => this.props.zoomBy(this.props.deltaZoom);\n zoomOut = () => this.props.zoomBy(-1 * this.props.deltaZoom);\n onChangeZoomLevel = (evt) => {\n const delta = evt.target.value - this.props.zoomLevel;\n this.props.zoomBy(delta);\n };\n render() {\n const buttons = [\n { top: -2, left: 14, rotate: 0, onClick: this.panUp, content: '\u25B2', key: 'up' },\n { top: 12, left: 0, rotate: -90, onClick: this.panLeft, content: '\u25C0', key: 'left' },\n { top: 12, left: 28, rotate: 90, onClick: this.panRight, content: '\u25B6', key: 'right' },\n { top: 25, left: 14, rotate: 180, onClick: this.panDown, content: '\u25BC', key: 'down' }\n ];\n return (_jsxs(ViewControlWrapper, { children: [_jsxs(NavigationButtonContainer, { children: [buttons.map((b) => (_jsx(NavigationButton, { top: `${b.top}px`, left: `${b.left}px`, rotate: b.rotate, children: _jsx(LongPressButton, { onClick: b.onClick, children: b.content }) }, b.key))), _jsx(NavigationButton, { top: '12px', left: '16px', onClick: () => {\n // console.log('on click fit bounds') || this.props.fitBounds;\n }, children: '\u00A4' })] }), _jsxs(ZoomControlWrapper, { children: [_jsx(ZoomControlButton, { children: _jsx(LongPressButton, { onClick: this.zoomIn, children: '+' }) }), _jsx(VerticalSlider, { children: _jsx(\"input\", { type: \"range\", value: this.props.zoomLevel, min: this.props.minZoom, max: this.props.maxZoom, step: this.props.deltaZoom, onChange: this.onChangeZoomLevel, \n /* @ts-expect-error TODO */\n orient: \"vertical\" }) }), _jsx(ZoomControlButton, { children: _jsx(LongPressButton, { onClick: this.zoomOut, children: '-' }) })] })] }));\n }\n}\nexport class ViewControlWidget {\n id = 'zoom';\n props;\n placement = 'top-left';\n orientation = 'vertical';\n viewId = null;\n viewports = {};\n deck;\n element;\n constructor(props) {\n this.props = { ...ViewControl.defaultProps, ...props };\n this.id = props.id || 'zoom';\n this.viewId = props.viewId || null;\n this.placement = props.placement || 'top-left';\n // this.orientation = props.orientation || 'vertical';\n // props.transitionDuration = props.transitionDuration || 200;\n // props.zoomInLabel = props.zoomInLabel || 'Zoom In';\n // props.zoomOutLabel = props.zoomOutLabel || 'Zoom Out';\n props.style = props.style || {};\n this.props = props;\n }\n onAdd({ deck }) {\n this.deck = deck;\n this.element = document.createElement('div');\n const { style, className } = this.props;\n this.element.classList.add('deck-widget', 'deck-widget-zoom');\n if (className) {\n this.element.classList.add(className);\n }\n if (style) {\n Object.entries(style).map(([key, value]) => this.element.style.setProperty(key, value));\n }\n const ui = (_jsx(ViewControl, { ...this.props, zoomBy: this.handleDeltaZoom.bind(this), panBy: this.handlePanBy.bind(this) }));\n render(ui, this.element);\n return this.element;\n }\n onRemove() {\n this.deck = undefined;\n this.element = undefined;\n }\n setProps(props) {\n Object.assign(this.props, props);\n }\n onViewportChange(viewport) {\n this.viewports[viewport.id] = viewport;\n }\n handleDeltaZoom(deltaZoom) {\n // console.log('Handle delta zoom');\n for (const view of this.deck.getViewports()) {\n this.handleZoomView(view, view.zoom + deltaZoom);\n }\n }\n handlePanBy(deltaX, deltaY) {\n // console.log('Handle panby', deltaX, deltaY);\n for (const viewport of this.deck.getViewports()) {\n this.handlePanViewport(viewport, deltaX, deltaY);\n }\n }\n handleZoomView(viewport, nextZoom) {\n const viewId = this.viewId || viewport?.id || 'default-view';\n // @ts-expect-error TODO we lack a proper API for getting viewStates\n const viewState = this.deck.viewManager.viewState || viewport;\n const nextViewState = {\n ...viewState,\n zoom: nextZoom\n // transitionDuration: this.props.transitionDuration,\n // transitionInterpolator: new FlyToInterpolator()\n };\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });\n }\n handlePanViewport(viewport, deltaX, deltaY) {\n const viewId = this.viewId || viewport?.id || 'default-view';\n // @ts-expect-error TODO we lack a proper API for getting viewStates\n const viewState = this.deck.viewManager.viewState || viewport;\n // console.log('Handle pan viewport', deltaX, deltaY, viewState);\n const nextViewState = {\n ...viewState,\n position: [viewport.position[0] + deltaX, viewport.position[1] + deltaY]\n };\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({ viewId, viewState: nextViewState, interactionState: {} });\n }\n}\n", "import { jsx as _jsx } from \"preact/jsx-runtime\";\n// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Component } from 'preact';\nexport class LongPressButton extends Component {\n buttonPressTimer = null;\n _repeat = () => {\n if (this.buttonPressTimer) {\n this.props.onClick();\n this.buttonPressTimer = setTimeout(this._repeat, 100);\n }\n };\n _handleButtonPress = () => {\n this.buttonPressTimer = setTimeout(this._repeat, 100);\n };\n _handleButtonRelease = () => {\n if (this.buttonPressTimer) {\n clearTimeout(this.buttonPressTimer);\n }\n this.buttonPressTimer = null;\n };\n render() {\n return (_jsx(\"div\", { className: \"deck-widget-button\", children: _jsx(\"div\", { style: {\n pointerEvents: 'auto'\n }, onMouseDown: (event) => {\n this._handleButtonPress();\n document.addEventListener('mouseup', this._handleButtonRelease, { once: true });\n }, children: this.props.children }) }));\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { createGraph } from \"./create-graph.js\";\nimport { log } from \"../utils/log.js\";\nimport { basicNodeParser } from \"./node-parsers.js\";\nimport { basicEdgeParser } from \"./edge-parsers.js\";\n/** @deprecated Use loadSimpleJSONGraph */\nexport const JSONLoader = ({ json, nodeParser, edgeParser }) => loadSimpleJSONGraph(json, { nodeParser, edgeParser });\n/** A loader for a simple graph format */\nexport function loadSimpleJSONGraph(json, options) {\n const { nodeParser = basicNodeParser, edgeParser = basicEdgeParser } = options;\n const { name = 'default', nodes, edges } = json;\n if (!nodes) {\n log.error('Invalid graph: nodes is missing.')();\n return null;\n }\n const graph = createGraph({ name, nodes, edges, nodeParser, edgeParser });\n return graph;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["JSONLoader", "isEqual", "d3", "import_meta", "import_meta", "newD3Edge", "computeControlPoint", "import_core", "Color", "getOffset", "offX", "offY", "import_core", "import_layers", "import_core", "import_core", "import_layers", "getColor", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_core", "import_layers", "import_core", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_layers", "getColor", "import_core", "import_core", "import_layers", "fs", "defaultProps", "fs", "getOffset", "
|
|
3
|
+
"sources": ["../src/index.ts", "../src/utils/log.ts", "../src/core/cache.ts", "../src/graph/graph.ts", "../src/layers/common-layers/marker-layer/marker-list.ts", "../src/core/constants.ts", "../src/graph/node.ts", "../src/graph/edge.ts", "../src/core/graph-engine.ts", "../src/core/graph-layout.ts", "../src/layouts/simple-layout.ts", "../src/layouts/d3-force/d3-force-layout.ts", "../src/layouts/gpu-force/gpu-force-layout.ts", "../src/layouts/experimental/radial-layout.ts", "../src/layouts/experimental/force-multi-graph-layout.ts", "../src/layouts/experimental/hive-plot-layout.ts", "../src/layers/graph-layer.ts", "../src/style/style-property.ts", "../src/style/style-sheet.ts", "../src/utils/layer-utils.ts", "../src/core/interaction-manager.ts", "../src/layers/node-layers/circle-layer.ts", "../src/layers/node-layers/image-layer.ts", "../src/layers/node-layers/label-layer.ts", "../src/layers/common-layers/zoomable-text-layer/zoomable-text-layer.ts", "../src/layers/node-layers/rectangle-layer.ts", "../src/layers/node-layers/rounded-rectangle-layer-fragment.ts", "../src/layers/node-layers/rounded-rectangle-layer.ts", "../src/layers/node-layers/path-rounded-rectangle-layer.ts", "../src/utils/polygon-calculations.ts", "../src/layers/node-layers/zoomable-marker-layer.ts", "../src/layers/common-layers/marker-layer/marker-layer.ts", "../src/layers/common-layers/marker-layer/marker-mapping.ts", "../src/layers/common-layers/marker-layer/atlas-data-url.ts", "../src/layers/edge-layer.ts", "../src/layers/edge-layers/straight-line-edge-layer.ts", "../src/layers/edge-layers/path-edge-layer.ts", "../src/layers/edge-layers/curved-edge-layer.ts", "../src/layers/common-layers/spline-layer/spline-layer.ts", "../src/layers/edge-layers/edge-label-layer.ts", "../src/layers/edge-layers/flow-layer.ts", "../src/layers/common-layers/flow-path-layer/flow-path-layer.ts", "../src/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.ts", "../src/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.ts", "../src/loaders/create-graph.ts", "../src/loaders/node-parsers.ts", "../src/loaders/edge-parsers.ts", "../src/loaders/json-loader.ts", "../src/widgets/view-control-widget.tsx", "../src/widgets/long-press-button.tsx", "../src/loaders/simple-json-graph-loader.ts"],
|
|
4
|
+
"sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// core - Graph representation and layout\nexport {Graph} from './graph/graph';\nexport {Node} from './graph/node';\nexport {Edge} from './graph/edge';\n\nexport {GraphEngine} from './core/graph-engine';\n\n// graph-layers layouts\nexport type {GraphLayoutState} from './core/graph-layout';\nexport {GraphLayout} from './core/graph-layout';\n\nexport {SimpleLayout} from './layouts//simple-layout';\nexport {D3ForceLayout} from './layouts/d3-force/d3-force-layout';\nexport {GPUForceLayout} from './layouts/gpu-force/gpu-force-layout';\nexport {RadialLayout as _RadialLayout} from './layouts/experimental/radial-layout';\nexport {ForceMultiGraphLayout as _MultigraphLayout} from './layouts/experimental/force-multi-graph-layout';\nexport {HivePlotLayout as _HivePlotLayout} from './layouts/experimental/hive-plot-layout';\n\nexport {NODE_STATE, NODE_TYPE, EDGE_TYPE, EDGE_DECORATOR_TYPE, MARKER_TYPE} from './core/constants';\n\n// deck.gl components\nexport {GraphLayer} from './layers/graph-layer';\nexport {EdgeLayer} from './layers/edge-layer';\n\n// Widgets\n\nexport {ViewControlWidget} from './widgets/view-control-widget';\n\n// graph format loaders\nexport {loadSimpleJSONGraph} from './loaders/simple-json-graph-loader';\n\n// utils\nexport {mixedGetPosition} from './utils/layer-utils';\nexport {log} from './utils/log';\n\n// DEPRECATED\nexport {createGraph} from './loaders/create-graph';\nexport {JSONLoader} from './loaders/simple-json-graph-loader';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Log, COLOR} from '@probe.gl/log';\n\nexport const log = new Log({id: 'graph-layers'}).enable();\n\nlog.log({color: COLOR.CYAN}, 'Initialize graph-layers logger.')();\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport class Cache<K, V> {\n private readonly _keys = new Map<K, {value: V; version: number}>();\n\n /**\n * @param key The key of the cache\n * @returns {*} The value of the cache as set by the `set` method.\n */\n get(key: K): V | undefined {\n return this._keys.get(key)?.value;\n }\n\n /**\n * @param key The key of the cache\n * @param createValue A callback to create the value of the cache if it is needed.\n * @param version The version of the cache. If the version is smaller than the current version, the cache will not be updated.\n */\n set(key: K, createValue: (...args: unknown[]) => V, version: number): void {\n const cached = this._keys.get(key);\n\n const keyUpdated = cached === undefined || version > cached.version;\n if (!keyUpdated) {\n return;\n }\n\n this._keys.set(key, {version, value: createValue()});\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {log} from '../utils/log';\nimport {Cache} from '../core/cache';\nimport {Edge} from './edge';\nimport {Node} from './node';\n\nexport type GraphProps = {\n name?: string;\n nodes?: Node[];\n edges?: Edge[];\n};\n\n/** Basic graph data structure */\nexport class Graph extends EventTarget {\n /** List object of nodes. */\n private _nodeMap: Record<string, Node> = {};\n /** List of object edges. */\n private _edgeMap: Record<string, Edge> = {};\n /**\n * Identifies whether performing dirty check when streaming new data. If\n * the name of the graph is not specified, will fall back to current time stamp.\n */\n private _name: string = Date.now().toString();\n /** Version the graph. A version is a number that is incremented every time the graph is updated. */\n public version = 0;\n /** Cached data: create array data from maps. */\n private _cache = new Cache<'nodes' | 'edges', Node[] | Edge[]>();\n\n constructor(props?: GraphProps);\n constructor(graph: Graph);\n\n /**\n * The constructor of the Graph class.\n * @param graph - copy the graph if this exists.\n */\n constructor(propsOrGraph?: GraphProps | Graph) {\n super();\n\n if (propsOrGraph instanceof Graph) {\n // if a Graph instance was supplied, copy the supplied graph into this graph\n const graph = propsOrGraph;\n this._name = graph?._name || this._name;\n this._nodeMap = graph._nodeMap;\n this._edgeMap = graph._edgeMap;\n } else {\n // If graphProps were supplied, initialize this graph from the supplied props\n const props = propsOrGraph;\n this._name = props?.name || this._name;\n this.batchAddNodes(props?.nodes || []);\n this.batchAddEdges(props?.edges || []);\n }\n }\n\n /**\n * Set graph name\n * @param name\n */\n setGraphName(name: string): void {\n this._name = name;\n }\n\n /** Get the name of the graph. Default value is the time stamp when creating this graph.\n * @return graph name.\n */\n getGraphName(): string {\n return this._name.toString();\n }\n\n /**\n * Perform a batch of operations defined by cb before indicating graph is updated\n * @param {function} cb - a callback function containing the operations to perform\n */\n transaction<T>(cb: (...args: unknown[]) => T): T {\n try {\n this.dispatchEvent(new CustomEvent('transactionStart'));\n return cb();\n } finally {\n this.dispatchEvent(new CustomEvent('transactionEnd'));\n }\n }\n\n /**\n * Add a new node to the graph.\n * @paramnode - expect a Node object to be added to the graph.\n */\n addNode(node: Node): void {\n // add it to the list and map\n this._nodeMap[node.getId()] = node;\n // update last update time stamp\n this._bumpVersion();\n this.dispatchEvent(new CustomEvent('onNodeAdded', {node} as any));\n }\n\n /**\n * Batch add nodes to the graph.\n * @param nodes - a list of nodes to be added.\n */\n batchAddNodes(nodes: Node[]): void {\n // convert an array of objects to an object\n this._nodeMap = nodes.reduce(\n (res, node) => {\n res[node.getId()] = node;\n this.dispatchEvent(new CustomEvent('onNodeAdded', {node} as any));\n return res;\n },\n {...this._nodeMap}\n );\n this._bumpVersion();\n }\n\n /**\n * Get all the nodes of the graph.\n * @return {Node[]} - get all the nodes in the graph.\n */\n getNodes(): Node[] {\n this._updateCache('nodes', () => Object.values(this._nodeMap));\n\n return this._cache.get('nodes') as Node[];\n }\n\n /**\n * Get the node map of the graph. The key of the map is the ID of the nodes.\n * @return - a map of nodes keyed by node IDs.\n */\n getNodeMap(): Record<string | number, Node> {\n return this._nodeMap;\n }\n\n /**\n * Find a node by id\n * @param nodeId The id of the node\n * @return Node\n */\n findNode(nodeId: string | number): Node | undefined {\n return this._nodeMap[nodeId];\n }\n\n /**\n * Update the indicated node to the provided value\n * @param node\n */\n updateNode(node: Node): void {\n this._nodeMap[node.getId()] = node;\n this._bumpVersion();\n this.dispatchEvent(new CustomEvent('onNodeUpdated', {node} as any));\n }\n\n /**\n * Add a new edge to the graph.\n * @param edge - expect a Edge object to be added to the graph.\n */\n addEdge(edge: Edge): void {\n const sourceNode = this.findNode(edge.getSourceNodeId());\n const targetNode = this.findNode(edge.getTargetNodeId());\n\n if (!sourceNode || !targetNode) {\n log.warn(`Unable to add edge ${edge.id}, source or target node is missing.`)();\n return;\n }\n\n this._edgeMap[edge.getId()] = edge;\n sourceNode.addConnectedEdges(edge);\n targetNode.addConnectedEdges(edge);\n this._bumpVersion();\n this.dispatchEvent(new CustomEvent('onEdgeAdded', {edge} as any));\n }\n\n /**\n * Batch add edges to the graph\n * @param edges - a list of edges to be added.\n */\n batchAddEdges(edges: Edge[]): void {\n edges.forEach((edge) => this.addEdge(edge));\n this._bumpVersion();\n }\n\n /**\n * Update the indicated edge to the provided value\n * @param edge\n */\n updateEdge(edge: Edge): void {\n this._edgeMap[edge.getId()] = edge;\n this._bumpVersion();\n this.dispatchEvent(new CustomEvent('onEdgeUpdated', {edge} as any));\n }\n\n /**\n * Remove a node from the graph by node ID\n * @param nodeId - the ID of the target node.\n */\n removeNode(nodeId: string | number): void {\n const node = this.findNode(nodeId);\n if (!node) {\n log.warn(`Unable to remove node ${nodeId} - doesn't exist`)();\n return;\n }\n // remove all edges connect to this node from map\n node.getConnectedEdges().forEach((e) => {\n delete this._edgeMap[e.getId()];\n });\n // remove the node from map\n delete this._nodeMap[nodeId];\n this._bumpVersion();\n this.dispatchEvent(new CustomEvent('onNodeRemoved', {node} as any));\n }\n\n /**\n * Get all the edges of the graph.\n * @return get all the edges in the graph.\n */\n getEdges(): Edge[] {\n this._updateCache('edges', () => Object.values(this._edgeMap));\n\n return this._cache.get('edges') as Edge[];\n }\n\n /**\n * Get the edge map of the graph. The key of the map is the ID of the edges.\n * @return - a map of edges keyed by edge IDs.\n */\n getEdgeMap(): Record<string, Edge> {\n return this._edgeMap;\n }\n\n /**\n * Remove an edge from the graph by the edge ID\n * @param {String|Number} edgeId - the target edge ID.\n */\n removeEdge(edgeId: string | number): void {\n const edge = this.findEdge(edgeId);\n if (!edge) {\n log.warn(`Unable to remove edge ${edgeId} - doesn't exist`)();\n return;\n }\n const sourceNode = this.findNode(edge.getSourceNodeId());\n const targetNode = this.findNode(edge.getTargetNodeId());\n\n delete this._edgeMap[edgeId];\n sourceNode.removeConnectedEdges(edge);\n targetNode.removeConnectedEdges(edge);\n this._bumpVersion();\n }\n\n /**\n * Find the edge by edge ID.\n * @param id - the target edge ID\n * @return - the target edge.\n */\n findEdge(edgeId: string | number): Edge {\n return this._edgeMap[edgeId];\n }\n\n /**\n * Return all the connected edges of a node by nodeID.\n * @param nodeId - the target node ID\n * @return - an array of the connected edges.\n */\n getConnectedEdges(nodeId: string | number): Edge[] {\n const node = this.findNode(nodeId);\n if (!node) {\n log.warn(`Unable to find node ${nodeId} - doesn't exist`)();\n return [];\n }\n return node.getConnectedEdges();\n }\n\n /**\n * Return all the sibling nodes of a node by nodeID.\n * @param nodeId - the target node ID\n * @return - an array of the sibling nodes.\n */\n getNodeSiblings(nodeId: string | number): Node[] {\n const node = this.findNode(nodeId);\n if (!node) {\n log.warn(`Unable to find node ${nodeId} - doesn't exist`)();\n return [];\n }\n return node.getSiblingIds().map((siblingNodeId) => this.findNode(siblingNodeId));\n }\n\n /**\n * Get the degree of a node.\n * @param nodeId - the target node ID.\n * @return - the degree of the node.\n */\n getDegree(nodeId: string | number): number {\n const node = this.findNode(nodeId);\n if (!node) {\n log.warn(`Unable to find node ${nodeId} - doesn't exist`)();\n return 0;\n }\n return node.getDegree();\n }\n\n /**\n * Clean up all the nodes in the graph.\n */\n resetNodes(): void {\n this._nodeMap = {};\n this._bumpVersion();\n }\n\n /**\n * Clean up all the edges in the graph.\n */\n resetEdges(): void {\n this._edgeMap = {};\n this._bumpVersion();\n }\n\n /**\n * Clean up everything in the graph.\n */\n reset(): void {\n this.resetNodes();\n this.resetEdges();\n this._bumpVersion();\n }\n\n /**\n * Trigger an update to the graph.\n */\n triggerUpdate(): void {\n this._bumpVersion();\n }\n\n /**\n * Return true if the graph is empty.\n * @return {Boolean} Return true if the graph is empty.\n */\n isEmpty(): boolean {\n return Object.keys(this._nodeMap).length === 0;\n }\n\n /**\n * Check the equality of two graphs data by checking last update time stamp\n * @param graph Another graph to be compared against itself\n * @return true if the graph is the same as itself.\n */\n equals(graph: Graph): boolean {\n if (!graph || !(graph instanceof Graph)) {\n return false;\n }\n return this.version === graph.version;\n }\n\n _bumpVersion(): void {\n this.version += 1;\n }\n\n _updateCache(key: 'nodes' | 'edges', updateValue: unknown): void {\n this._cache.set(key, updateValue as any, this.version);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable */\nexport const MarkerList = {\n 'bell-filled': 'bell-filled',\n bell: 'bell',\n 'bookmark-filled': 'bookmark-filled',\n bookmark: 'bookmark',\n 'cd-filled': 'cd-filled',\n cd: 'cd',\n checkmark: 'checkmark',\n 'circle-check-filled': 'circle-check-filled',\n 'circle-check': 'circle-check',\n 'circle-filled': 'circle-filled',\n 'circle-i-filled': 'circle-i-filled',\n 'circle-i': 'circle-i',\n 'circle-minus-filled': 'circle-minus-filled',\n 'circle-minus': 'circle-minus',\n 'circle-plus-filled': 'circle-plus-filled',\n 'circle-plus': 'circle-plus',\n 'circle-questionmark-filled': 'circle-questionmark-filled',\n 'circle-questionmark': 'circle-questionmark',\n 'circle-slash-filled': 'circle-slash-filled',\n 'circle-slash': 'circle-slash',\n 'circle-x-filled': 'circle-x-filled',\n 'circle-x': 'circle-x',\n circle: 'circle',\n 'diamond-filled': 'diamond-filled',\n diamond: 'diamond',\n 'flag-filled': 'flag-filled',\n flag: 'flag',\n gear: 'gear',\n 'heart-filled': 'heart-filled',\n heart: 'heart',\n 'location-marker-filled': 'location-marker-filled',\n 'location-marker': 'location-marker',\n 'octagonal-star-filled': 'octagonal-star-filled',\n 'octagonal-star': 'octagonal-star',\n 'person-filled': 'person-filled',\n person: 'person',\n 'pin-filled': 'pin-filled',\n pin: 'pin',\n 'plus-small': 'plus-small',\n plus: 'plus',\n 'rectangle-filled': 'rectangle-filled',\n rectangle: 'rectangle',\n 'star-filled': 'star-filled',\n star: 'star',\n 'tag-filled': 'tag-filled',\n tag: 'tag',\n 'thumb-down-filled': 'thumb-down-filled',\n 'thumb-down': 'thumb-down',\n 'thumb-up': 'thumb-up',\n 'thumb_up-filled': 'thumb_up-filled',\n 'triangle-down-filled': 'triangle-down-filled',\n 'triangle-down': 'triangle-down',\n 'triangle-left-filled': 'triangle-left-filled',\n 'triangle-left': 'triangle-left',\n 'triangle-right-filled': 'triangle-right-filled',\n 'triangle-right': 'triangle-right',\n 'triangle-up-filled': 'triangle-up-filled',\n 'triangle-up': 'triangle-up',\n 'x-small': 'x-small',\n x: 'x'\n};\n/* eslint-enable */\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {MarkerList} from '../layers/common-layers/marker-layer/marker-list';\n\n/** All the markers supported by node type MARKER */\nexport const MARKER_TYPE = MarkerList;\n\nexport type ValueOf<T> = T[keyof T];\n\n// the interaction state of a node.\nexport const NODE_STATE = {\n DEFAULT: 'default',\n HOVER: 'hover',\n DRAGGING: 'dragging',\n SELECTED: 'selected'\n};\n\nexport const EDGE_STATE = {\n DEFAULT: 'default',\n HOVER: 'hover',\n DRAGGING: 'dragging',\n SELECTED: 'selected'\n};\n\n// node visual marker type\nexport const NODE_TYPE = {\n CIRCLE: 'CIRCLE',\n RECTANGLE: 'RECTANGLE',\n ROUNDED_RECTANGLE: 'ROUNDED_RECTANGLE',\n PATH_ROUNDED_RECTANGLE: 'PATH_ROUNDED_RECTANGLE',\n ICON: 'ICON',\n LABEL: 'LABEL',\n MARKER: 'MARKER'\n};\n\n// edge shape\nexport const EDGE_TYPE = {\n SPLINE_CURVE: 'SPLINE_CURVE',\n LINE: 'LINE',\n PATH: 'PATH'\n};\n\n// decorators on edges\nexport const EDGE_DECORATOR_TYPE = {\n LABEL: 'EDGE_LABEL',\n FLOW: 'FLOW'\n};\n\n// the status of the layout\nexport const LAYOUT_STATE = {\n INIT: 'INIT',\n START: 'START',\n CALCULATING: 'CALCULATING',\n DONE: 'DONE',\n ERROR: 'ERROR'\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {NODE_STATE, ValueOf} from '../core/constants';\nimport {Edge} from './edge';\n\n/** Properties for creating a new node */\nexport interface NodeOptions {\n /** the unique ID of the node */\n id: number | string;\n selectable?: boolean;\n highlightConnectedEdges?: boolean;\n /* origin data reference */\n data?: Record<string, unknown>;\n}\n\n/** Basic data structure of a node */\nexport class Node {\n public id: string | number;\n /** Keep a reference to origin data. */\n private _data: Record<string, unknown>;\n /** List edges. */\n private _connectedEdges: Record<string, Edge> = {};\n /** Interaction state of the node. */\n public state: ValueOf<typeof NODE_STATE> = NODE_STATE.DEFAULT;\n /** Can the node be selected? */\n private _selectable: boolean;\n /** Should the state of this node affect the state of the connected edges? */\n private _highlightConnectedEdges: boolean;\n /** Check the type of the object when picking engine gets it. */\n public readonly isNode = true;\n /**\n * The constructor of a node\n */\n constructor({id, selectable = false, highlightConnectedEdges = false, data = {}}: NodeOptions) {\n this.id = id;\n this._data = data;\n this._selectable = selectable;\n this._highlightConnectedEdges = highlightConnectedEdges;\n }\n\n /**\n * Return the ID of the node\n * @return - the ID of the node.\n */\n getId(): string | number {\n return this.id;\n }\n\n /**\n * Return the degree of the node -- includes in-degree and out-degree\n * @return {Number} - the degree of the node.\n */\n getDegree(): number {\n return Object.keys(this._connectedEdges).length;\n }\n\n /**\n * Return the in-degree of the node.\n * @return - the in-degree of the node.\n */\n getInDegree(): number {\n const nodeId = this.getId();\n return this.getConnectedEdges().reduce((count, e) => {\n const isDirected = e.isDirected();\n if (isDirected && e.getTargetNodeId() === nodeId) {\n count += 1;\n }\n return count;\n }, 0);\n }\n\n /**\n * Return the out-degree of the node.\n * @return - the out-degree of the node.\n */\n getOutDegree(): number {\n const nodeId = this.getId();\n return this.getConnectedEdges().reduce((count, e) => {\n const isDirected = e.isDirected();\n if (isDirected && e.getSourceNodeId() === nodeId) {\n count += 1;\n }\n return count;\n }, 0);\n }\n\n /**\n * Return all the IDs of the sibling nodes.\n * @return [description]\n */\n getSiblingIds(): (string | number)[] {\n const nodeId = this.getId();\n return this.getConnectedEdges().reduce(\n (siblings, e) => {\n if (e.getTargetNodeId() === nodeId) {\n siblings.push(e.getSourceNodeId());\n } else {\n siblings.push(e.getTargetNodeId());\n }\n return siblings;\n },\n [] as (string | number)[]\n );\n }\n\n /**\n * Return all the connected edges.\n * @return - an array of the connected edges.\n */\n getConnectedEdges(): Edge[] {\n return Object.values(this._connectedEdges);\n }\n\n /**\n * Return of the value of the selected property key.\n * @param key - property key.\n * @return - the value of the property or undefined (not found).\n */\n getPropertyValue(key: string): unknown {\n // try to search the key within this object\n if (this.hasOwnProperty(key)) {\n return this[key];\n }\n // try to search the key in the original data reference\n else if (this._data.hasOwnProperty(key)) {\n return this._data[key];\n }\n // otherwise, not found\n return undefined;\n }\n\n /**\n * Set the new node data.\n * @param data - the new data of the node\n */\n setData(data: Record<string, unknown>): void {\n this._data = data;\n }\n\n /**\n * Update a data property.\n * @param key - the key of the property\n * @param value - the value of the property.\n */\n setDataProperty(key: string, value: unknown): void {\n this._data[key] = value;\n }\n\n /**\n * Set node state\n * @param state - one of NODE_STATE\n */\n setState(state: ValueOf<typeof NODE_STATE>): void {\n this.state = state;\n }\n\n /**\n * Get node state\n * @returns state - one of NODE_STATE\n */\n getState(): ValueOf<typeof NODE_STATE> {\n return this.state;\n }\n\n /**\n * Add connected edges to the node\n * @param edge an edge or an array of edges to be added to this._connectedEdges\n */\n addConnectedEdges(edge: Edge | Edge[]): void {\n const iterableEdges = Array.isArray(edge) ? edge : [edge];\n iterableEdges.forEach((e) => {\n this._connectedEdges[e.id] = e;\n e.addNode(this);\n });\n }\n\n /**\n * Remove edges from this._connectedEdges\n * @param edge an edge or an array of edges to be removed from this._connectedEdges\n */\n removeConnectedEdges(edge: Edge | Edge[]): void {\n const iterableEdges = Array.isArray(edge) ? edge : [edge];\n iterableEdges.forEach((e) => {\n e.removeNode(this);\n delete this._connectedEdges[e.id];\n });\n }\n\n /**\n * Clear this._connectedEdges\n */\n clearConnectedEdges(): void {\n Object.values(this._connectedEdges).forEach((e) => e.removeNode(this));\n this._connectedEdges = {};\n }\n\n isSelectable(): boolean {\n return this._selectable;\n }\n\n shouldHighlightConnectedEdges(): boolean {\n return this._highlightConnectedEdges;\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// Basic data structure of an edge\nimport {EDGE_STATE} from '../core/constants';\nimport {Node} from './node';\n\nexport interface EdgeOptions {\n /** the unique ID of the edge */\n id: string | number;\n /** the ID of the source node */\n sourceId: string | number;\n /** the ID of the target node */\n targetId: string | number;\n /** whether the edge is directed or not */\n directed?: boolean;\n /** origin data reference */\n data?: Record<string, unknown>;\n}\n\n/** Basic edge data structure */\nexport class Edge {\n /** Unique uuid of the edge. */\n public id: string | number;\n /** ID of the source node. */\n private _sourceId: string | number;\n /** ID of the target node. */\n private _targetId: string | number;\n /** Whether the edge is directed or not. */\n private _directed: boolean;\n /** Origin data reference of the edge. */\n private _data: Record<string, unknown>;\n /** Check the type of the object when picking engine gets it. */\n public readonly isEdge = true;\n /** Nodes at either end of this edge. */\n private readonly _connectedNodes: Record<string, Node> = {};\n /** Edge state. */\n public state = EDGE_STATE.DEFAULT;\n\n /**\n * The constructor\n * @param options.id - information about the edge\n */\n constructor({id, sourceId, targetId, data, directed = false}: EdgeOptions) {\n this.id = id;\n this._sourceId = sourceId;\n this._targetId = targetId;\n this._directed = directed;\n this._data = data;\n }\n\n /**\n * Return the ID of the edge\n * @return {String|Number} - the ID of the edge.\n */\n getId(): string | number {\n return this.id;\n }\n\n /**\n * Return whether the edge is directed or not.\n * @return {Boolean} true if the edge is directed.\n */\n isDirected(): boolean {\n return this._directed;\n }\n\n /**\n * Get the ID of the source node.\n * @return the ID of the source node.\n */\n getSourceNodeId(): string | number {\n return this._sourceId;\n }\n\n /**\n * Get the ID of the target node.\n * @return the ID of the target node.\n */\n getTargetNodeId(): string | number {\n return this._targetId;\n }\n\n /**\n * Return of the value of the selected property key.\n * @param key - property key.\n * @return - the value of the property.\n */\n getPropertyValue(key: string): unknown {\n // try to search the key within this object\n if (this.hasOwnProperty(key)) {\n return this[key];\n }\n // try to search the key in the original data reference\n else if (this._data.hasOwnProperty(key)) {\n return this._data[key];\n }\n // otherwise, not found\n return undefined;\n }\n\n /**\n * Set the origin data as a reference.\n * @param data - the origin data.\n */\n setData(data: Record<string, unknown>): void {\n this._data = data;\n }\n\n /**\n * Update a data property.\n * @param key - the key of the property\n * @param value - the value of the property.\n */\n setDataProperty(key: string, value: unknown): void {\n this._data[key] = value;\n }\n\n /**\n * Set edge state\n * @param state - one of EDGE_STATE\n */\n setState(state: string): void {\n this.state = state;\n }\n\n /**\n * Get edge state\n * @returns state - one of EDGE_STATE\n */\n getState(): string {\n return this.state;\n }\n\n addNode(node: Node): void {\n this._connectedNodes[node.getId()] = node;\n }\n\n removeNode(node: Node): void {\n delete this._connectedNodes[node.getId()];\n }\n\n getConnectedNodes(): Node[] {\n return Object.values(this._connectedNodes);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Node} from '../graph/node';\nimport {Edge} from '../graph/edge';\nimport {Graph} from '../graph/graph';\nimport {GraphLayout} from './graph-layout';\nimport {Cache} from './cache';\n\nexport type GraphEngineProps = {\n graph: Graph;\n layout: GraphLayout;\n};\n\n/** Graph engine controls the graph data and layout calculation */\nexport class GraphEngine extends EventTarget {\n props: Readonly<Required<GraphEngineProps>>;\n\n private readonly _graph: Graph;\n private readonly _layout: GraphLayout;\n private readonly _cache = new Cache<'nodes' | 'edges', Node[] | Edge[]>();\n private _layoutDirty = false;\n private _transactionInProgress = false;\n\n constructor(props: GraphEngineProps);\n /** @deprecated Use props constructor: new GraphEngine(props) */\n constructor(graph: Graph, layout: GraphLayout);\n\n constructor(props: GraphEngineProps | Graph, layout?: GraphLayout) {\n super();\n if (props instanceof Graph) {\n props = {\n graph: props,\n layout\n };\n }\n\n this.props = props;\n this._graph = props.graph;\n this._layout = props.layout;\n }\n\n /** Getters */\n\n getNodes = (): Node[] => {\n this._updateCache('nodes', () =>\n this._graph.getNodes().filter((node) => this.getNodePosition(node))\n );\n\n return this._cache.get('nodes') as Node[];\n };\n\n getEdges = () => {\n this._updateCache('edges', () =>\n this._graph.getEdges().filter((edge) => this.getEdgePosition(edge))\n );\n\n return this._cache.get('edges') as Edge[];\n };\n\n getNodePosition = (node: Node) => this._layout.getNodePosition(node);\n\n getEdgePosition = (edge: Edge) => this._layout.getEdgePosition(edge);\n\n getGraphVersion = () => this._graph.version;\n\n getLayoutLastUpdate = () => this._layout.version;\n\n getLayoutState = () => this._layout.state;\n\n /** Operations on the graph */\n\n lockNodePosition = (node, x, y) => this._layout.lockNodePosition(node, x, y);\n\n unlockNodePosition = (node) => this._layout.unlockNodePosition(node);\n\n /**\n * @fires GraphEngine#onLayoutStart\n */\n _onLayoutStart = () => {\n /**\n * @event GraphEngine#onLayoutStart\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutStart'));\n };\n\n /**\n * @fires GraphEngine#onLayoutChange\n */\n _onLayoutChange = () => {\n /**\n * @event GraphEngine#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutChange'));\n };\n\n /**\n * @fires GraphEngine#onLayoutDone\n */\n _onLayoutDone = () => {\n /**\n * @event GraphEngine#onLayoutDone\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutDone'));\n };\n\n /**\n * @fires GraphEngine#onLayoutError\n */\n _onLayoutError = () => {\n /**\n * @event GraphEngine#onLayoutError\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutError'));\n };\n\n _onGraphStructureChanged = (entity) => {\n this._layoutDirty = true;\n this._graphChanged();\n };\n\n _onTransactionStart = () => {\n this._transactionInProgress = true;\n };\n\n _onTransactionEnd = () => {\n this._transactionInProgress = false;\n this._graphChanged();\n };\n\n /** Layout calculations */\n\n run = () => {\n // TODO: throw if running on a cleared engine\n\n this._graph.addEventListener('transactionStart', this._onTransactionStart);\n this._graph.addEventListener('transactionEnd', this._onTransactionEnd);\n this._graph.addEventListener('onNodeAdded', this._onGraphStructureChanged);\n this._graph.addEventListener('onNodeRemoved', this._onGraphStructureChanged);\n this._graph.addEventListener('onEdgeAdded', this._onGraphStructureChanged);\n this._graph.addEventListener('onEdgeRemoved', this._onGraphStructureChanged);\n\n this._layout.addEventListener('onLayoutStart', this._onLayoutStart);\n this._layout.addEventListener('onLayoutChange', this._onLayoutChange);\n this._layout.addEventListener('onLayoutDone', this._onLayoutDone);\n this._layout.addEventListener('onLayoutError', this._onLayoutError);\n\n this._layout.initializeGraph(this._graph);\n this._layout.start();\n };\n\n clear = () => {\n this._graph.removeEventListener('transactionStart', this._onTransactionStart);\n this._graph.removeEventListener('transactionEnd', this._onTransactionEnd);\n this._graph.removeEventListener('onNodeAdded', this._onGraphStructureChanged);\n this._graph.removeEventListener('onNodeRemoved', this._onGraphStructureChanged);\n this._graph.removeEventListener('onEdgeAdded', this._onGraphStructureChanged);\n this._graph.removeEventListener('onEdgeRemoved', this._onGraphStructureChanged);\n\n this._layout.removeEventListener('onLayoutStart', this._onLayoutStart);\n this._layout.removeEventListener('onLayoutChange', this._onLayoutChange);\n this._layout.removeEventListener('onLayoutDone', this._onLayoutDone);\n this._layout.removeEventListener('onLayoutError', this._onLayoutError);\n };\n\n resume = () => this._layout.resume();\n\n stop = () => this._layout.stop();\n\n _graphChanged = () => {\n if (this._layoutDirty && !this._transactionInProgress) {\n this._updateLayout();\n }\n };\n\n _updateLayout = () => {\n this._layout.updateGraph(this._graph);\n this._layout.update();\n this._layoutDirty = false;\n };\n\n _updateCache(key, updateValue) {\n this._cache.set(key, updateValue, this._graph.version + this._layout.version);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Graph} from '../graph/graph';\nimport type {Node} from '../graph/node';\nimport type {Edge} from '../graph/edge';\n\nimport isEqual from 'lodash.isequal';\nimport {EDGE_TYPE} from './constants';\n\n// the status of the layout\nexport type GraphLayoutState = 'INIT' | 'START' | 'CALCULATING' | 'DONE' | 'ERROR';\n\nexport type GraphLayoutOptions = {};\n\n/** All the layout classes are extended from this base layout class. */\nexport class GraphLayout<\n OptionsT extends GraphLayoutOptions = GraphLayoutOptions\n> extends EventTarget {\n /** Name of the layout. */\n protected readonly _name: string = 'GraphLayout';\n /** Extra configuration options of the layout. */\n protected _options: OptionsT;\n\n public version = 0;\n public state: GraphLayoutState = 'INIT';\n\n /**\n * Constructor of GraphLayout\n * @param options extra configuration options of the layout\n */\n constructor(options: OptionsT) {\n super();\n this._options = options;\n }\n\n /**\n * Check the equality of two layouts\n * @param layout - The layout to be compared.\n * @return - True if the layout is the same as itself.\n */\n equals(layout: GraphLayout): boolean {\n if (!layout || !(layout instanceof GraphLayout)) {\n return false;\n }\n return this._name === layout._name && isEqual(this._options, layout._options);\n }\n\n /** virtual functions: will be implemented in the child class */\n\n /** first time to pass the graph data into this layout */\n initializeGraph(graph: Graph) {}\n /** update the existing graph */\n updateGraph(graph: Graph) {}\n /** start the layout calculation */\n start() {}\n /** update the layout calculation */\n update() {}\n /** resume the layout calculation */\n resume() {}\n /** stop the layout calculation */\n stop() {}\n /** access the position of the node in the layout */\n getNodePosition(node: Node): [number, number] {\n return [0, 0];\n }\n /** access the layout information of the edge */\n getEdgePosition(edge: Edge) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [0, 0],\n targetPosition: [0, 0],\n controlPoints: []\n };\n }\n\n /**\n * Pin the node to a designated position, and the node won't move anymore\n * @param node Node to be locked\n * @param x x coordinate\n * @param y y coordinate\n */\n lockNodePosition(node: Node, x: number, y: number) {}\n\n /**\n * Unlock the node, the node will be able to move freely.\n * @param {Object} node Node to be unlocked\n */\n unlockNodePosition(node: Node) {}\n\n // INTERNAL METHODS\n\n protected _updateState(state) {\n this.state = state;\n this.version += 1;\n }\n\n /** @fires GraphLayout#onLayoutStart */\n protected _onLayoutStart = (): void => {\n this._updateState('CALCULATING');\n\n /**\n * Layout calculation start.\n * @event GraphLayout#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutStart'));\n };\n\n /** @fires GraphLayout#onLayoutChange */\n protected _onLayoutChange = (): void => {\n this._updateState('CALCULATING');\n\n /**\n * Layout calculation iteration.\n * @event GraphLayout#onLayoutChange\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutChange'));\n };\n\n /** @fires GraphLayout#onLayoutDone */\n protected _onLayoutDone = (): void => {\n this._updateState('DONE');\n\n /**\n * Layout calculation is done.\n * @event GraphLayout#onLayoutDone\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutDone'));\n };\n\n /** @fires GraphLayout#onLayoutError */\n protected _onLayoutError = (): void => {\n this._updateState('ERROR');\n\n /**\n * Layout calculation went wrong.\n * @event GraphLayout#onLayoutError\n * @type {CustomEvent}\n */\n this.dispatchEvent(new CustomEvent('onLayoutError'));\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../core/graph-layout';\nimport {Node} from '../graph/node';\nimport {EDGE_TYPE} from '../core/constants';\nimport {Graph} from '../graph/graph';\n\nexport type SimpleLayoutOptions = GraphLayoutOptions & {\n /** The accessor lets the application supply the position ([x, y]) of each node.\n * @example\n ```js\n <GraphGL\n {...otherProps}\n layout={\n new SimpleLayout({\n nodePositionAccessor: node => [\n node.getPropertyValue('x'),\n node.getPropertyValue('y'),\n ]\n })\n }\n />\n ```\n */\n nodePositionAccessor?: (node: Node) => [number, number];\n};\n\n/** A basic layout where the application controls positions of each node */\nexport class SimpleLayout extends GraphLayout<SimpleLayoutOptions> {\n static defaultOptions: Required<SimpleLayoutOptions> = {\n nodePositionAccessor: (node) =>\n [node.getPropertyValue('x'), node.getPropertyValue('y')] as [number, number]\n };\n\n protected readonly _name = 'SimpleLayout';\n protected _graph: Graph | null = null;\n protected _nodeMap: Record<string, Node> = {};\n protected _nodePositionMap: Record<string, (node: Node) => [number, number]> = {};\n\n constructor(options: SimpleLayoutOptions = {}) {\n super({...SimpleLayout.defaultOptions, ...options});\n }\n\n initializeGraph(graph: Graph): void {\n this.updateGraph(graph);\n }\n\n _notifyLayoutComplete(): void {\n this._onLayoutStart();\n this._onLayoutChange();\n this._onLayoutDone();\n }\n\n start(): void {\n this._notifyLayoutComplete();\n }\n\n update(): void {\n this._notifyLayoutComplete();\n }\n\n resume(): void {\n this._notifyLayoutComplete();\n }\n\n updateGraph(graph: Graph): void {\n this._graph = graph;\n this._nodeMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = node;\n return res;\n }, {});\n this._nodePositionMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = this._options.nodePositionAccessor(node);\n return res;\n }, {});\n }\n\n setNodePositionAccessor = (accessor) => {\n (this._options as any).nodePositionAccessor = accessor;\n };\n\n getNodePosition = (node) => this._nodePositionMap[node.getId()] as any;\n\n getEdgePosition = (edge) => {\n const sourcePos = this._nodePositionMap[edge.getSourceNodeId()];\n const targetPos = this._nodePositionMap[edge.getTargetNodeId()];\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: sourcePos,\n targetPosition: targetPos,\n controlPoints: []\n } as any;\n };\n\n lockNodePosition = (node, x, y) => {\n this._nodePositionMap[node.getId()] = [x, y] as any;\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';\n\nimport {EDGE_TYPE} from '../../core/constants';\n\nexport type D3ForceLayoutOptions = GraphLayoutOptions & {\n alpha?: number;\n resumeAlpha?: number;\n nBodyStrength?: number;\n nBodyDistanceMin?: number;\n nBodyDistanceMax?: number;\n getCollisionRadius?: number;\n};\n\nexport class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {\n static defaultOptions: Required<D3ForceLayoutOptions> = {\n alpha: 0.3,\n resumeAlpha: 0.1,\n nBodyStrength: -900,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 400,\n getCollisionRadius: 0\n };\n\n protected readonly _name = 'D3';\n private _positionsByNodeId = new Map();\n private _graph: any;\n private _worker: any;\n\n constructor(options?: D3ForceLayoutOptions) {\n super(options);\n\n this._options = {\n ...D3ForceLayout.defaultOptions,\n ...options\n };\n }\n\n initializeGraph(graph) {\n this._graph = graph;\n }\n\n // for streaming new data on the same graph\n updateGraph(graph) {\n this._graph = graph;\n\n this._positionsByNodeId = new Map(\n this._graph.getNodes().map((node) => [node.id, this._positionsByNodeId.get(node.id)])\n );\n }\n\n start() {\n this._engageWorker();\n\n this._onLayoutStart();\n }\n\n update() {\n this._engageWorker();\n }\n\n _engageWorker() {\n // prevent multiple start\n if (this._worker) {\n this._worker.terminate();\n }\n\n this._worker = new Worker(new URL('./worker.js', import.meta.url).href);\n\n this._worker.postMessage({\n nodes: this._graph.getNodes().map((node) => ({\n id: node.id,\n ...this._positionsByNodeId.get(node.id)\n })),\n edges: this._graph.getEdges().map((edge) => ({\n id: edge.id,\n source: edge.getSourceNodeId(),\n target: edge.getTargetNodeId()\n })),\n options: this._options\n });\n\n this._worker.onmessage = (event) => {\n if (event.data.type !== 'end') {\n return;\n }\n\n event.data.nodes.forEach(({id, ...d3}) =>\n this._positionsByNodeId.set(id, {\n ...d3,\n // precompute so that when we return the node position we do not need to do the conversion\n coordinates: [d3.x, d3.y]\n })\n );\n\n this._onLayoutChange();\n this._onLayoutDone();\n };\n }\n\n resume() {\n throw new Error('Resume unavailable');\n }\n\n stop() {\n this._worker.terminate();\n }\n\n getEdgePosition = (edge) => {\n const sourceNode = this._graph.findNode(edge.getSourceNodeId());\n const targetNode = this._graph.findNode(edge.getTargetNodeId());\n if (!this.getNodePosition(sourceNode) || !this.getNodePosition(targetNode)) {\n return null;\n }\n\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: this.getNodePosition(sourceNode),\n targetPosition: this.getNodePosition(targetNode),\n controlPoints: []\n };\n };\n\n getNodePosition = (node) => {\n const d3Node = this._positionsByNodeId.get(node.id);\n if (d3Node) {\n return d3Node.coordinates;\n }\n\n return null;\n };\n\n lockNodePosition = (node, x, y) => {\n const d3Node = this._positionsByNodeId.get(node.id);\n this._positionsByNodeId.set(node.id, {\n ...d3Node,\n x,\n y,\n fx: x,\n fy: y,\n coordinates: [x, y]\n });\n this._onLayoutChange();\n this._onLayoutDone();\n };\n\n unlockNodePosition = (node) => {\n const d3Node = this._positionsByNodeId.get(node.id);\n d3Node.fx = null;\n d3Node.fy = null;\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';\n\nimport {EDGE_TYPE} from '../../core/constants';\n\nexport type GPUForceLayoutOptions = GraphLayoutOptions & {\n alpha?: number;\n resumeAlpha?: number;\n nBodyStrength?: number;\n nBodyDistanceMin?: number;\n nBodyDistanceMax?: number;\n getCollisionRadius?: number;\n};\n\n/**\n * @todo this layout should be updated with the organizational and logic improvements made in d3-force\n */\nexport class GPUForceLayout extends GraphLayout<GPUForceLayoutOptions> {\n static defaultOptions: Required<GPUForceLayoutOptions> = {\n alpha: 0.3,\n resumeAlpha: 0.1,\n nBodyStrength: -900,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 400,\n getCollisionRadius: 0\n };\n\n protected readonly _name: string = 'GPU';\n private _d3Graph: any;\n private _nodeMap: any;\n private _edgeMap: any;\n private _graph: any;\n private _worker: Worker;\n private _callbacks: any;\n\n constructor(options: GPUForceLayoutOptions = {}) {\n const _options = {\n ...GPUForceLayout.defaultOptions,\n ...options\n };\n\n super(_options);\n\n this._name = 'GPU';\n this._options = _options;\n // store graph and prepare internal data\n this._d3Graph = {nodes: [], edges: []};\n this._nodeMap = {};\n this._edgeMap = {};\n }\n\n initializeGraph(graph) {\n this._graph = graph;\n this._nodeMap = {};\n this._edgeMap = {};\n // nodes\n const d3Nodes = graph.getNodes().map((node) => {\n const id = node.id;\n const locked = node.getPropertyValue('locked') || false;\n const x = node.getPropertyValue('x') || 0;\n const y = node.getPropertyValue('y') || 0;\n const collisionRadius = node.getPropertyValue('collisionRadius') || 0;\n const d3Node = {\n id,\n x,\n y,\n fx: locked ? x : null,\n fy: locked ? y : null,\n collisionRadius,\n locked\n };\n this._nodeMap[node.id] = d3Node;\n return d3Node;\n });\n // edges\n const d3Edges = graph.getEdges().map((edge) => {\n const d3Edge = {\n id: edge.id,\n source: this._nodeMap[edge.getSourceNodeId()],\n target: this._nodeMap[edge.getTargetNodeId()]\n };\n this._edgeMap[edge.id] = d3Edge;\n return d3Edge;\n });\n this._d3Graph = {\n nodes: d3Nodes,\n edges: d3Edges\n };\n }\n\n start() {\n this._engageWorker();\n }\n\n update() {\n this._engageWorker();\n }\n\n _engageWorker() {\n // prevent multiple start\n if (this._worker) {\n this._worker.terminate();\n }\n\n this._worker = new Worker(new URL('./worker.js', import.meta.url).href);\n const {alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax, getCollisionRadius} =\n this._options;\n this._worker.postMessage({\n nodes: this._d3Graph.nodes,\n edges: this._d3Graph.edges,\n options: {\n alpha,\n nBodyStrength,\n nBodyDistanceMin,\n nBodyDistanceMax,\n getCollisionRadius\n }\n });\n this._worker.onmessage = (event) => {\n switch (event.data.type) {\n case 'tick':\n this.ticked(event.data);\n break;\n case 'end':\n this.ended(event.data);\n break;\n default:\n break;\n }\n };\n }\n ticked(data) {}\n ended(data) {\n const {nodes, edges} = data;\n this.updateD3Graph({nodes, edges});\n this._onLayoutChange();\n this._onLayoutDone();\n }\n resume() {\n throw new Error('Resume unavailable');\n }\n stop() {\n this._worker.terminate();\n }\n\n // for steaming new data on the same graph\n updateGraph(graph) {\n if (this._graph.getGraphName() !== graph.getGraphName()) {\n // reset the maps\n this._nodeMap = {};\n this._edgeMap = {};\n }\n this._graph = graph;\n // update internal layout data\n // nodes\n const newNodeMap = {};\n const newD3Nodes = graph.getNodes().map((node) => {\n const id = node.id;\n const locked = node.getPropertyValue('locked') || false;\n const x = node.getPropertyValue('x') || 0;\n const y = node.getPropertyValue('y') || 0;\n const fx = locked ? x : null;\n const fy = locked ? y : null;\n const collisionRadius = node.getPropertyValue('collisionRadius') || 0;\n\n const oldD3Node = this._nodeMap[node.id];\n const newD3Node = oldD3Node ? oldD3Node : {id, x, y, fx, fy, collisionRadius};\n newNodeMap[node.id] = newD3Node;\n return newD3Node;\n });\n this._nodeMap = newNodeMap;\n this._d3Graph.nodes = newD3Nodes;\n // edges\n const newEdgeMap = {};\n const newD3Edges = graph.getEdges().map((edge) => {\n const oldD3Edge = this._edgeMap[edge.id];\n const newD3Edge = oldD3Edge || {\n id: edge.id,\n source: newNodeMap[edge.getSourceNodeId()],\n target: newNodeMap[edge.getTargetNodeId()]\n };\n newEdgeMap[edge.id] = newD3Edge;\n return newD3Edge;\n });\n this._edgeMap = newEdgeMap;\n this._d3Graph.edges = newD3Edges;\n }\n\n updateD3Graph(graph) {\n const existingNodes = this._graph.getNodes();\n // update internal layout data\n // nodes\n const newNodeMap = {};\n const newD3Nodes = graph.nodes.map((node) => {\n // Update existing _graph with the new values\n const existingNode = existingNodes.find((n) => n.getId() === node.id);\n existingNode.setDataProperty('locked', node.locked);\n existingNode.setDataProperty('x', node.x);\n existingNode.setDataProperty('y', node.y);\n existingNode.setDataProperty('collisionRadius', node.collisionRadius);\n\n newNodeMap[node.id] = node;\n return node;\n });\n this._nodeMap = newNodeMap;\n this._d3Graph.nodes = newD3Nodes;\n // edges\n const newEdgeMap = {};\n const newD3Edges = graph.edges.map((edge) => {\n newEdgeMap[edge.id] = edge;\n return edge;\n });\n this._graph.triggerUpdate();\n this._edgeMap = newEdgeMap;\n this._d3Graph.edges = newD3Edges;\n }\n\n getNodePosition = (node): [number, number] => {\n const d3Node = this._nodeMap[node.id];\n if (d3Node) {\n return [d3Node.x, d3Node.y];\n }\n return [0, 0];\n };\n\n getEdgePosition = (edge) => {\n const d3Edge = this._edgeMap[edge.id];\n const sourcePosition = d3Edge && d3Edge.source;\n const targetPosition = d3Edge && d3Edge.target;\n if (d3Edge && sourcePosition && targetPosition) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [sourcePosition.x, sourcePosition.y],\n targetPosition: [targetPosition.x, targetPosition.y],\n controlPoints: []\n };\n }\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [0, 0],\n targetPosition: [0, 0],\n controlPoints: []\n };\n };\n\n lockNodePosition = (node, x, y) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.x = x;\n d3Node.y = y;\n d3Node.fx = x;\n d3Node.fy = y;\n this._callbacks.onLayoutChange();\n this._callbacks.onLayoutDone();\n };\n\n unlockNodePosition = (node) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.fx = null;\n d3Node.fy = null;\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';\nimport {Node} from '../../graph/node';\nimport {EDGE_TYPE} from '../../core/constants';\nimport {Graph} from '../../graph/graph';\n\nexport type RadialLayoutOptions = GraphLayoutOptions & {\n radius?: number;\n tree?: any;\n};\n\nconst traverseTree = (nodeId, nodeMap) => {\n const node = nodeMap[nodeId];\n if (node.isLeaf) {\n return node;\n }\n return {\n ...node,\n children: node.children.map((nid) => traverseTree(nid, nodeMap))\n };\n};\n\nconst getLeafNodeCount = (node, count) => {\n if (!node.children || node.children.length === 0) {\n return count + 1;\n }\n const sum = node.children.reduce((res, c) => {\n return res + getLeafNodeCount(c, 0);\n }, 0);\n return count + sum;\n};\n\nconst getTreeDepth = (node, depth = 0) => {\n if (node.isLeaf) {\n return depth;\n }\n return getTreeDepth(node.children[0], depth + 1);\n};\n\nconst getPath = (node, targetId, path) => {\n if (node.id === targetId) {\n path.push(node.id);\n return true;\n }\n const inChildren = node.children && node.children.some((c) => getPath(c, targetId, path));\n if (inChildren) {\n path.push(node.id);\n return true;\n }\n return false;\n};\n\nexport class RadialLayout extends GraphLayout<RadialLayoutOptions> {\n static defaultOptions = {\n radius: 500\n };\n\n _name = 'RadialLayout';\n _graph: Graph = null;\n // custom layout data structure\n _hierarchicalPoints = {};\n nestedTree;\n\n constructor(options: RadialLayoutOptions = {}) {\n super(options);\n this._options = {\n ...RadialLayout.defaultOptions,\n ...options\n };\n }\n\n initializeGraph(graph: Graph): void {\n this.updateGraph(graph);\n }\n\n updateGraph(graph: Graph): void {\n this._graph = graph;\n }\n\n start(): void {\n const nodeCount = this._graph.getNodes().length;\n if (nodeCount === 0) {\n return;\n }\n\n const {tree} = this._options;\n\n if (!tree || tree.length === 0) {\n return;\n }\n\n const {radius} = this._options;\n const unitAngle = 360 / nodeCount;\n\n // hierarchical positions\n const rootNode = tree[0];\n\n const nodeMap = tree.reduce((res, node) => {\n res[node.id] = {\n ...node,\n isLeaf: !node.children || node.children.length === 0\n };\n return res;\n }, {});\n // nested structure\n this.nestedTree = traverseTree(rootNode.id, nodeMap);\n\n const totalLevels = getTreeDepth(this.nestedTree, 0);\n const distanceBetweenLevels = radius / (totalLevels - 1);\n\n const calculatePosition = (node, level, startAngle, positionMap) => {\n const isRoot = node.id === rootNode.id;\n\n if (node.children && node.children.length !== 0) {\n const groupSize = getLeafNodeCount(node, 0);\n // center the pos\n positionMap[node.id] = isRoot\n ? [0, 0]\n : rotate(\n 0,\n 0,\n 0,\n distanceBetweenLevels * (level + 1),\n startAngle + unitAngle * (groupSize / 2)\n );\n // calculate children position\n let tempAngle = startAngle;\n node.children.forEach((n) => {\n calculatePosition(n, level + 1, tempAngle, positionMap);\n tempAngle += getLeafNodeCount(n, 0) * unitAngle;\n });\n } else {\n positionMap[node.id] = rotate(\n 0,\n 0,\n 0,\n distanceBetweenLevels * (level + 1),\n startAngle + unitAngle\n );\n }\n };\n\n this._hierarchicalPoints = {};\n calculatePosition(this.nestedTree, 0, 0, this._hierarchicalPoints);\n // layout completes: notifiy component to re-render\n this._onLayoutChange();\n this._onLayoutDone();\n }\n\n getNodePosition = (node) => {\n return this._hierarchicalPoints[node.id];\n };\n\n // spline curve version\n getEdgePosition = (edge) => {\n const sourceNodeId = edge.getSourceNodeId();\n const targetNodeId = edge.getTargetNodeId();\n const sourceNodePos = this._hierarchicalPoints[sourceNodeId];\n const targetNodePos = this._hierarchicalPoints[targetNodeId];\n\n const sourcePath = [];\n getPath(this.nestedTree, sourceNodeId, sourcePath);\n const targetPath = [];\n getPath(this.nestedTree, targetNodeId, targetPath);\n\n const totalLevels = sourcePath.length;\n let commonAncestorLevel = totalLevels - 1; // root\n for (let i = 0; i < totalLevels; i++) {\n if (sourcePath[i] === targetPath[i]) {\n commonAncestorLevel = i;\n break;\n }\n }\n\n const wayPoints = [];\n for (let i = 1; i <= commonAncestorLevel; i++) {\n const nodeId = sourcePath[i];\n wayPoints.push(this._hierarchicalPoints[nodeId]);\n }\n for (let i = commonAncestorLevel - 1; i > 0; i--) {\n const nodeId = targetPath[i];\n wayPoints.push(this._hierarchicalPoints[nodeId]);\n }\n\n return {\n type: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition: sourceNodePos,\n targetPosition: targetNodePos,\n controlPoints: wayPoints\n };\n };\n\n lockNodePosition = (node, x, y) => {\n this._hierarchicalPoints[node.id] = [x, y];\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\n\nfunction rotate(cx, cy, x, y, angle) {\n const radians = (Math.PI / 180) * angle;\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const nx = cos * (x - cx) + sin * (y - cy) + cx;\n const ny = cos * (y - cy) - sin * (x - cx) + cy;\n return [nx, ny];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';\nimport {Node} from '../../graph/node';\nimport {EDGE_TYPE} from '../../core/constants';\nimport {Graph} from '../../graph/graph';\nimport * as d3 from 'd3-force';\n\nexport type ForceMultiGraphLayoutOptions = GraphLayoutOptions & {\n alpha?: number;\n nBodyStrength?: number;\n nBodyDistanceMin?: number;\n nBodyDistanceMax?: number;\n};\n\nexport class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOptions> {\n static defaultOptions = {\n alpha: 3,\n nBodyStrength: -1200,\n nBodyDistanceMin: 100,\n nBodyDistanceMax: 1400\n };\n\n _name = 'ForceMultiGraphLayout';\n _graph: Graph;\n\n // d3 part\n // custom graph data\n _d3Graph = {nodes: [], edges: []};\n _nodeMap = {};\n _edgeMap = {};\n _simulator;\n\n constructor(options: ForceMultiGraphLayoutOptions = {}) {\n super(options);\n this._options = {\n ...ForceMultiGraphLayout.defaultOptions,\n ...options\n };\n }\n\n initializeGraph(graph: Graph): void {\n this.updateGraph(graph);\n }\n\n _strength = (d3Edge) => {\n if (d3Edge.isVirtual) {\n return 1 / d3Edge.edgeCount;\n }\n const sourceDegree = this._graph.getDegree(d3Edge.source.id);\n const targetDegree = this._graph.getDegree(d3Edge.target.id);\n return 1 / Math.min(sourceDegree, targetDegree);\n };\n\n _generateSimulator() {\n if (this._simulator) {\n this._simulator.on('tick', null).on('end', null);\n this._simulator = null;\n }\n const {alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax} = this._options;\n\n const g = this._d3Graph;\n this._simulator = d3\n .forceSimulation(g.nodes)\n .force(\n 'edge',\n d3\n .forceLink(g.edges)\n .id((n) => n.id)\n .strength(this._strength)\n )\n .force(\n 'charge',\n d3\n .forceManyBody()\n .strength(nBodyStrength)\n .distanceMin(nBodyDistanceMin)\n .distanceMax(nBodyDistanceMax)\n )\n .force('center', d3.forceCenter())\n .alpha(alpha);\n // register event callbacks\n this._simulator.on('tick', this._onLayoutChange).on('end', this._onLayoutDone);\n }\n\n start() {\n this._generateSimulator();\n this._simulator.restart();\n }\n\n resume() {\n this._simulator.restart();\n }\n\n stop() {\n this._simulator.stop();\n }\n\n updateGraph(graph) {\n this._graph = graph;\n\n // nodes\n const newNodeMap = {};\n const newD3Nodes = graph.getNodes().map((node) => {\n const oldD3Node = this._nodeMap[node.id];\n const newD3Node = oldD3Node ? oldD3Node : {id: node.id};\n newNodeMap[node.id] = newD3Node;\n return newD3Node;\n });\n\n // edges\n // bucket edges between the same source/target node pairs.\n const nodePairs = graph.getEdges().reduce((res, edge) => {\n const nodes = [edge.getSourceNodeId(), edge.getTargetNodeId()];\n // sort the node ids to count the edges with the same pair\n // but different direction (a -> b or b -> a)\n const pairId = nodes.sort().toString();\n // push this edge into the bucket\n if (!res[pairId]) {\n res[pairId] = [edge];\n } else {\n res[pairId].push(edge);\n }\n return res;\n }, {});\n\n // go through each pair of edges,\n // if only one edge between two nodes, create a straight line\n // otherwise, create one virtual node and two edges for each edge\n const newD3Edges = [];\n const newEdgeMap = {};\n\n Object.keys(nodePairs).forEach((pairId) => {\n const betweenEdges = nodePairs[pairId];\n const firstEdge = betweenEdges[0];\n if (betweenEdges.length === 1) {\n // do nothing, this is a real edge\n const newD3Edge = {\n type: EDGE_TYPE.LINE,\n id: firstEdge.getId(),\n source: newNodeMap[firstEdge.getSourceNodeId()],\n target: newNodeMap[firstEdge.getTargetNodeId()],\n isVirtual: false\n };\n newEdgeMap[firstEdge.getId()] = newD3Edge;\n newD3Edges.push(newD3Edge);\n return;\n }\n\n // else reduce to one virtual edge\n const newD3Edge = {\n type: EDGE_TYPE.LINE,\n id: pairId,\n source: newNodeMap[firstEdge.getSourceNodeId()],\n target: newNodeMap[firstEdge.getTargetNodeId()],\n isVirtual: true,\n edgeCount: betweenEdges.length\n };\n newEdgeMap[pairId] = newD3Edge;\n newD3Edges.push(newD3Edge);\n\n betweenEdges.forEach((e, idx) => {\n newEdgeMap[e.id] = {\n type: EDGE_TYPE.SPLINE_CURVE,\n id: e.id,\n source: newNodeMap[e.getSourceNodeId()],\n target: newNodeMap[e.getTargetNodeId()],\n virtualEdgeId: pairId,\n isVirtual: true,\n index: idx\n };\n });\n });\n\n this._nodeMap = newNodeMap;\n this._d3Graph.nodes = newD3Nodes;\n this._edgeMap = newEdgeMap;\n this._d3Graph.edges = newD3Edges;\n }\n\n getNodePosition = (node: Node): [number, number] => {\n const d3Node = this._nodeMap[node.id];\n if (d3Node) {\n return [d3Node.x, d3Node.y];\n }\n // default value\n return [0, 0];\n };\n\n getEdgePosition = (edge) => {\n const d3Edge = this._edgeMap[edge.id];\n if (d3Edge) {\n if (!d3Edge.isVirtual) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [d3Edge.source.x, d3Edge.source.y],\n targetPosition: [d3Edge.target.x, d3Edge.target.y],\n controlPoints: []\n };\n }\n // else, check the referenced virtual edge\n const virtualEdge = this._edgeMap[d3Edge.virtualEdgeId];\n const edgeCount = virtualEdge.edgeCount;\n // get the position of source and target nodes\n const sourcePosition = [virtualEdge.source.x, virtualEdge.source.y];\n const targetPosition = [virtualEdge.target.x, virtualEdge.target.y];\n // calculate a symmetric curve\n const distance = Math.hypot(\n sourcePosition[0] - targetPosition[0],\n sourcePosition[1] - targetPosition[1]\n );\n const index = d3Edge.index;\n // curve direction: inward vs. outward\n const direction = index % 2 ? 1 : -1;\n // if the number of the parallel edges is an even number => symmetric shape\n // otherwise, the 0th node will be a staight line, and rest of them are symmetrical.\n const symmetricShape = edgeCount % 2 === 0;\n const offset =\n Math.max(distance / 10, 5) *\n (symmetricShape ? Math.floor(index / 2 + 1) : Math.ceil(index / 2));\n const controlPoint = computeControlPoint(sourcePosition, targetPosition, direction, offset);\n return {\n type: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition,\n targetPosition,\n controlPoints: [controlPoint]\n };\n }\n // default value\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition: [0, 0],\n targetPosition: [0, 0],\n controlPoints: []\n };\n };\n\n lockNodePosition = (node, x, y) => {\n const d3Node = this._nodeMap[node.id];\n d3Node.x = x;\n d3Node.y = y;\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\n\n/**\n * A helper function to compute the control point of a curve\n * @param {number[]} source - the coordinates of source point, ex: [x, y, z]\n * @param {number[]} target - the coordinates of target point, ex: [x, y, z]\n * @param {number} direction - the direction of the curve, 1 or -1\n * @param {number} offset - offset from the midpoint\n * @return {number[]} - the coordinates of the control point\n */\nfunction computeControlPoint(source, target, direction, offset) {\n const midPoint = [(source[0] + target[0]) / 2, (source[1] + target[1]) / 2];\n const dx = target[0] - source[0];\n const dy = target[1] - source[1];\n const normal = [dy, -dx];\n const length = Math.sqrt(Math.pow(normal[0], 2.0) + Math.pow(normal[1], 2.0));\n const normalized = [normal[0] / length, normal[1] / length];\n return [\n midPoint[0] + normalized[0] * offset * direction,\n midPoint[1] + normalized[1] * offset * direction\n ];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';\nimport {Node} from '../../graph/node';\nimport {EDGE_TYPE} from '../../core/constants';\nimport {Graph} from '../../graph/graph';\n\nexport type HivePlotLayoutOptions = GraphLayoutOptions & {\n innerRadius?: number;\n outerRadius?: number;\n getNodeAxis?: (node: Node) => any;\n};\n\nexport class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {\n static defaultOptions = {\n innerRadius: 100,\n outerRadius: 500,\n getNodeAxis: (node: Node) => node.getPropertyValue('group')\n } as const satisfies Readonly<Required<HivePlotLayoutOptions>>;\n\n _name = 'HivePlot';\n _graph: Graph;\n _totalAxis: number;\n _axis: Record<string, any>;\n _nodeMap = {};\n _nodePositionMap = {};\n\n constructor(options: HivePlotLayoutOptions = {}) {\n super(options);\n this._options = {\n ...HivePlotLayout.defaultOptions,\n ...options\n };\n }\n\n initializeGraph(graph: Graph) {\n this.updateGraph(graph);\n }\n\n updateGraph(graph) {\n const {getNodeAxis, innerRadius, outerRadius} = this._options;\n this._graph = graph;\n this._nodeMap = graph.getNodes().reduce((res, node) => {\n res[node.getId()] = node;\n return res;\n }, {});\n\n // bucket nodes into few axis\n\n this._axis = graph.getNodes().reduce((res, node) => {\n const axis = getNodeAxis(node);\n if (!res[axis]) {\n res[axis] = [];\n }\n res[axis].push(node);\n return res;\n }, {});\n\n // sort nodes along the same axis by degree\n this._axis = Object.keys(this._axis).reduce((res, axis) => {\n const bucketedNodes = this._axis[axis];\n const sortedNodes = bucketedNodes.sort((a, b) => {\n if (a.getDegree() > b.getDegree()) {\n return 1;\n }\n if (a.getDegree() === b.getDegree()) {\n return 0;\n }\n return -1;\n });\n res[axis] = sortedNodes;\n return res;\n }, {});\n this._totalAxis = Object.keys(this._axis).length;\n const center = [0, 0];\n const angleInterval = 360 / Object.keys(this._axis).length;\n\n // calculate positions\n this._nodePositionMap = Object.keys(this._axis).reduce((res, axis, axisIdx) => {\n const axisAngle = angleInterval * axisIdx;\n const bucketedNodes = this._axis[axis];\n const interval = (outerRadius - innerRadius) / bucketedNodes.length;\n\n bucketedNodes.forEach((node, idx) => {\n const radius = innerRadius + idx * interval;\n const x = Math.cos((axisAngle / 180) * Math.PI) * radius + center[0];\n const y = Math.sin((axisAngle / 180) * Math.PI) * radius + center[1];\n res[node.getId()] = [x, y];\n });\n return res;\n }, {});\n }\n\n start() {\n this._onLayoutChange();\n this._onLayoutDone();\n }\n\n getNodePosition = (node) => this._nodePositionMap[node.getId()];\n\n getEdgePosition = (edge) => {\n const {getNodeAxis} = this._options;\n const sourceNodeId = edge.getSourceNodeId();\n const targetNodeId = edge.getTargetNodeId();\n\n const sourcePosition = this._nodePositionMap[sourceNodeId];\n const targetPosition = this._nodePositionMap[targetNodeId];\n\n const sourceNode = this._nodeMap[sourceNodeId];\n const targetNode = this._nodeMap[targetNodeId];\n\n const sourceNodeAxis = getNodeAxis(sourceNode);\n const targetNodeAxis = getNodeAxis(targetNode);\n\n if (sourceNodeAxis === targetNodeAxis) {\n return {\n type: EDGE_TYPE.LINE,\n sourcePosition,\n targetPosition,\n controlPoints: []\n };\n }\n\n const controlPoint = computeControlPoint({\n sourcePosition,\n sourceNodeAxis,\n targetPosition,\n targetNodeAxis,\n totalAxis: this._totalAxis\n });\n\n return {\n type: EDGE_TYPE.SPLINE_CURVE,\n sourcePosition,\n targetPosition,\n controlPoints: [controlPoint]\n };\n };\n\n lockNodePosition = (node, x, y) => {\n this._nodePositionMap[node.id] = [x, y];\n this._onLayoutChange();\n this._onLayoutDone();\n };\n}\n\nfunction computeControlPoint({\n sourcePosition,\n sourceNodeAxis,\n targetPosition,\n targetNodeAxis,\n totalAxis\n}): [number, number] {\n const halfAxis = (totalAxis - 1) / 2;\n // check whether the source/target are at the same side.\n const sameSide =\n (sourceNodeAxis <= halfAxis && targetNodeAxis <= halfAxis) ||\n (sourceNodeAxis > halfAxis && targetNodeAxis > halfAxis);\n // curve direction\n const direction = sameSide && sourceNodeAxis <= halfAxis && targetNodeAxis <= halfAxis ? 1 : -1;\n\n // flip the source/target to follow the clockwise diretion\n const source = sourceNodeAxis < targetNodeAxis && sameSide ? sourcePosition : targetPosition;\n const target = sourceNodeAxis < targetNodeAxis && sameSide ? targetPosition : sourcePosition;\n\n // calculate offset\n const distance = Math.hypot(source[0] - target[0], source[1] - target[1]);\n const offset = distance * 0.2;\n\n const midPoint = [(source[0] + target[0]) / 2, (source[1] + target[1]) / 2];\n const dx = target[0] - source[0];\n const dy = target[1] - source[1];\n const normal = [dy, -dx];\n const length = Math.hypot(dy, -dx);\n const normalized = [normal[0] / length, normal[1] / length];\n return [\n midPoint[0] + normalized[0] * offset * direction,\n midPoint[1] + normalized[1] * offset * direction\n ];\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {CompositeLayerProps} from '@deck.gl/core';\nimport {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';\n\nimport {NODE_TYPE, EDGE_DECORATOR_TYPE} from '../core/constants';\nimport {Graph} from '../graph/graph';\nimport {GraphLayout} from '../core/graph-layout';\nimport {GraphEngine} from '../core/graph-engine';\n\nimport {Stylesheet} from '../style/style-sheet';\nimport {mixedGetPosition} from '../utils/layer-utils';\nimport {InteractionManager} from '../core/interaction-manager';\n\nimport {log} from '../utils/log';\n\n// node layers\nimport {CircleLayer} from './node-layers/circle-layer';\nimport {ImageLayer} from './node-layers/image-layer';\nimport {LabelLayer} from './node-layers/label-layer';\nimport {RectangleLayer} from './node-layers/rectangle-layer';\nimport {RoundedRectangleLayer} from './node-layers/rounded-rectangle-layer';\nimport {PathBasedRoundedRectangleLayer} from './node-layers/path-rounded-rectangle-layer';\nimport {ZoomableMarkerLayer} from './node-layers/zoomable-marker-layer';\n\n// edge layers\nimport {EdgeLayer} from './edge-layer';\nimport {EdgeLabelLayer} from './edge-layers/edge-label-layer';\nimport {FlowLayer} from './edge-layers/flow-layer';\n\nimport {JSONLoader} from '../loaders/json-loader';\n\nconst NODE_LAYER_MAP = {\n [NODE_TYPE.RECTANGLE]: RectangleLayer,\n [NODE_TYPE.ROUNDED_RECTANGLE]: RoundedRectangleLayer,\n [NODE_TYPE.PATH_ROUNDED_RECTANGLE]: PathBasedRoundedRectangleLayer,\n [NODE_TYPE.ICON]: ImageLayer,\n [NODE_TYPE.CIRCLE]: CircleLayer,\n [NODE_TYPE.LABEL]: LabelLayer,\n [NODE_TYPE.MARKER]: ZoomableMarkerLayer\n};\n\nconst EDGE_DECORATOR_LAYER_MAP = {\n [EDGE_DECORATOR_TYPE.LABEL]: EdgeLabelLayer,\n [EDGE_DECORATOR_TYPE.FLOW]: FlowLayer\n};\n\nconst SHARED_LAYER_PROPS = {\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n parameters: {\n depthTest: false\n }\n};\n\nexport type GraphLayerProps = CompositeLayerProps & _GraphLayerProps;\n\nexport type _GraphLayerProps = {\n graph?: Graph;\n layout?: GraphLayout;\n graphLoader?: (opts: {json: any}) => Graph;\n engine?: GraphEngine;\n\n // an array of styles for layers\n nodeStyle?: any[];\n edgeStyle?: {\n stroke?: string;\n strokeWidth?: number;\n /** an array of styles for layers */\n decorators?: any[];\n };\n nodeEvents?: {\n onMouseLeave?: () => void;\n onHover?: () => void;\n onMouseEnter?: () => void;\n onClick?: () => void;\n onDrag?: () => void;\n };\n edgeEvents?: {\n onClick: () => void;\n onHover: () => void;\n };\n enableDragging?: boolean;\n};\n\nexport class GraphLayer extends CompositeLayer<GraphLayerProps> {\n static layerName = 'GraphLayer';\n\n static defaultProps: Required<_GraphLayerProps> = {\n // Composite layer props\n // @ts-expect-error composite layer props\n pickable: true,\n\n // Graph props\n graphLoader: JSONLoader,\n\n nodeStyle: [],\n nodeEvents: {\n onMouseLeave: () => {},\n onHover: () => {},\n onMouseEnter: () => {},\n onClick: () => {},\n onDrag: () => {}\n },\n edgeStyle: {\n stroke: 'black',\n strokeWidth: 1,\n // an array of styles for layers\n decorators: []\n },\n edgeEvents: {\n onClick: () => {},\n onHover: () => {}\n },\n enableDragging: false\n };\n\n // @ts-expect-error Some typescript confusion due to override of base class state\n state!: CompositeLayer<GraphLayerProps>['state'] & {\n interactionManager: InteractionManager;\n graphEngine?: GraphEngine;\n };\n\n forceUpdate = () => {\n if (this.context && this.context.layerManager) {\n this.setNeedsUpdate();\n this.setChangeFlags({dataChanged: true} as any); // TODO\n }\n };\n\n constructor(props: GraphLayerProps & CompositeLayerProps) {\n super(props);\n }\n\n initializeState() {\n this.state = {\n interactionManager: new InteractionManager(this.props as any, () => this.forceUpdate())\n };\n const engine = this.props.engine;\n this._setGraphEngine(engine);\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n\n updateState({props, oldProps, changeFlags}) {\n if (\n changeFlags.dataChanged &&\n props.data &&\n !(Array.isArray(props.data) && props.data.length === 0)\n ) {\n // console.log(props.data);\n const graph = this.props.graphLoader({json: props.data});\n const layout = this.props.layout;\n const graphEngine = new GraphEngine({graph, layout});\n this._setGraphEngine(graphEngine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n } else if (changeFlags.propsChanged && props.graph !== oldProps.graph) {\n const graphEngine = new GraphEngine({graph: props.graph, layout: props.layout});\n this._setGraphEngine(graphEngine);\n this.state.interactionManager.updateProps(props);\n this.forceUpdate();\n }\n }\n\n finalize() {\n this._removeGraphEngine();\n }\n\n _setGraphEngine(graphEngine: GraphEngine) {\n if (graphEngine === this.state.graphEngine) {\n return;\n }\n\n this._removeGraphEngine();\n if (graphEngine) {\n this.state.graphEngine = graphEngine;\n this.state.graphEngine.run();\n // added or removed a node, or in general something layout related changed\n this.state.graphEngine.addEventListener('onLayoutChange', this.forceUpdate);\n }\n }\n\n _removeGraphEngine() {\n if (this.state.graphEngine) {\n this.state.graphEngine.removeEventListener('onLayoutChange', this.forceUpdate);\n this.state.graphEngine.clear();\n this.state.graphEngine = null;\n }\n }\n\n createNodeLayers() {\n const engine = this.state.graphEngine;\n const {nodeStyle} = this.props;\n if (!engine || !nodeStyle || !Array.isArray(nodeStyle) || nodeStyle.length === 0) {\n return [];\n }\n\n return nodeStyle.filter(Boolean).map((style, idx) => {\n const {pickable = true, visible = true, data = (nodes) => nodes, ...restStyle} = style;\n const LayerType = NODE_LAYER_MAP[style.type];\n if (!LayerType) {\n log.error(`Invalid node type: ${style.type}`)();\n throw new Error(`Invalid node type: ${style.type}`);\n }\n const stylesheet = new Stylesheet(restStyle, {\n stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()\n });\n const getOffset = stylesheet.getDeckGLAccessor('getOffset');\n return new LayerType({\n ...SHARED_LAYER_PROPS,\n id: `node-rule-${idx}`,\n data: data(engine.getNodes()),\n getPosition: mixedGetPosition(engine.getNodePosition, getOffset),\n pickable,\n positionUpdateTrigger: [\n engine.getLayoutLastUpdate(),\n engine.getLayoutState(),\n stylesheet.getDeckGLAccessorUpdateTrigger('getOffset')\n ].join(),\n stylesheet,\n visible\n } as any);\n });\n }\n\n createEdgeLayers() {\n const engine = this.state.graphEngine;\n const {edgeStyle} = this.props;\n\n if (!engine || !edgeStyle) {\n return [];\n }\n\n return (Array.isArray(edgeStyle) ? edgeStyle : [edgeStyle])\n .filter(Boolean)\n .flatMap((style, idx) => {\n const {decorators, data = (edges) => edges, visible = true, ...restEdgeStyle} = style;\n const stylesheet = new Stylesheet(\n {\n type: 'Edge',\n ...restEdgeStyle\n },\n {\n stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()\n }\n );\n\n const edgeLayer = new EdgeLayer({\n ...SHARED_LAYER_PROPS,\n id: `edge-layer-${idx}`,\n data: data(engine.getEdges()),\n getLayoutInfo: engine.getEdgePosition,\n pickable: true,\n positionUpdateTrigger: [engine.getLayoutLastUpdate(), engine.getLayoutState()].join(),\n stylesheet,\n visible\n } as any);\n\n if (!decorators || !Array.isArray(decorators) || decorators.length === 0) {\n return edgeLayer;\n }\n const decoratorLayers = decorators.filter(Boolean).flatMap((decoratorStyle, idx2) => {\n const DecoratorLayer = EDGE_DECORATOR_LAYER_MAP[decoratorStyle.type];\n if (!DecoratorLayer) {\n log.error(`Invalid edge decorator type: ${decoratorStyle.type}`)();\n throw new Error(`Invalid edge decorator type: ${decoratorStyle.type}`);\n }\n const decoratorStylesheet = new Stylesheet(decoratorStyle, {\n stateUpdateTrigger: (this.state.interactionManager as any).getLastInteraction()\n });\n return new DecoratorLayer({\n ...SHARED_LAYER_PROPS,\n id: `edge-decorator-${idx2}`,\n data: data(engine.getEdges()),\n getLayoutInfo: engine.getEdgePosition,\n pickable: true,\n positionUpdateTrigger: [engine.getLayoutLastUpdate(), engine.getLayoutState()].join(),\n stylesheet: decoratorStylesheet\n } as any);\n });\n return [edgeLayer, decoratorLayers];\n });\n }\n\n onClick(info, event): boolean {\n return (this.state.interactionManager.onClick(info, event) as unknown as boolean) || false;\n }\n\n onHover(info, event): boolean {\n return (this.state.interactionManager.onHover(info, event) as unknown as boolean) || false;\n }\n\n onDragStart(info, event) {\n this.state.interactionManager.onDragStart(info, event);\n }\n\n onDrag(info, event) {\n this.state.interactionManager.onDrag(info, event);\n }\n\n onDragEnd(info, event) {\n this.state.interactionManager.onDragEnd(info, event);\n }\n\n renderLayers() {\n return [this.createEdgeLayers(), this.createNodeLayers()];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport Color from 'color';\nimport {log} from '../utils/log';\n\n/* Utils for type check */\nfunction getColor(value) {\n if (typeof value === 'string') {\n try {\n const color = Color.rgb(value).array();\n if (Number.isFinite(color[3])) {\n color[3] *= 255;\n }\n return color;\n } catch (error) {\n return [0, 0, 0];\n }\n }\n if (Array.isArray(value) && Number.isFinite(value[0])) {\n return value;\n }\n return [0, 0, 0];\n}\n\nfunction getNumber(value) {\n switch (typeof value) {\n case 'string':\n value = Number(value);\n return isNaN(value) ? null : value;\n\n case 'number':\n return value;\n\n default:\n return null;\n }\n}\n\nfunction getBool(value) {\n switch (typeof value) {\n case 'boolean':\n return value;\n\n case 'string':\n return value.toLowerCase() !== 'false';\n\n case 'number':\n return Boolean(value);\n\n default:\n return null;\n }\n}\n\nfunction getOffset(value) {\n if (typeof value === 'function') {\n return value;\n }\n\n if (!Array.isArray(value) || value.length !== 2) {\n return null;\n }\n return value.map(getNumber);\n}\n\nconst IDENTITY = (x) => x;\nconst PROPERTY_FORMATTERS = {\n opacity: getNumber,\n zIndex: getNumber,\n\n width: getNumber,\n height: getNumber,\n radius: getNumber,\n\n fill: getColor,\n stroke: getColor,\n strokeWidth: getNumber,\n\n // for marker\n marker: String,\n size: getNumber,\n\n // text\n color: getColor,\n text: String,\n fontSize: getNumber,\n textAnchor: String,\n alignmentBaseline: String,\n angle: getNumber,\n textMaxWidth: getNumber,\n textWordBreak: String,\n textSizeMinPixels: getNumber,\n\n // edges\n speed: getNumber,\n tailLength: getNumber,\n\n offset: getOffset,\n scaleWithZoom: getBool\n};\n\nconst DEFAULT_STYLES = {\n opacity: 1,\n zIndex: 0,\n\n width: 0,\n height: 0,\n radius: 1,\n\n fill: [0, 0, 0],\n stroke: [0, 0, 0],\n strokeWidth: 0,\n\n marker: 'circle',\n size: 12,\n\n color: [0, 0, 0],\n text: '',\n fontSize: 12,\n textAnchor: 'middle',\n alignmentBaseline: 'center',\n angle: 0,\n textMaxWidth: -1,\n textWordBreak: 'break-all',\n textSizeMinPixels: 9,\n\n speed: 0,\n tailLength: 1,\n\n offset: null,\n scaleWithZoom: true\n};\n\n// code generation: generate a function as a layer accessor\nfunction generateAccessor(key, value) {\n const formatter = PROPERTY_FORMATTERS[key] || IDENTITY;\n // ex: key = 'fill', value = {defaut: 'red', hover: 'blue'}\n // valueMap => {defaut: [255, 0, 0], hover: [0, 0, 255]}\n const valueMap = Object.keys(value).reduce((res, key0) => {\n res[key0] = value[key0];\n return res;\n }, {}) as any;\n\n return (node) => {\n const statefulValue = valueMap[node.state];\n if (!node.state || typeof statefulValue === 'undefined') {\n return valueMap.default || DEFAULT_STYLES[key];\n }\n // else has stateful value\n // check if the value is a function\n if (typeof statefulValue === 'function') {\n return formatter(statefulValue(node));\n }\n // or just a plain value\n return formatter(statefulValue);\n };\n}\n\nconst VALUE_TYPE = {\n ACCESSOR: 'ACCESSOR',\n PLAIN_VALUE: 'PLAIN_VALUE'\n};\n\nexport class StyleProperty {\n key: any;\n _updateTrigger: boolean;\n _value: any;\n _valueType: any;\n\n // for getting default style\n static getDefault(key) {\n return DEFAULT_STYLES[key];\n }\n\n // pass the key and value of the property\n // and format the value properly.\n constructor({key, value, updateTrigger}) {\n this.key = key;\n this._updateTrigger = false;\n\n // statefule property, ex:\n // fill: {default: 'red', hover: 'blue'}\n // note that offset: [0, 1], the type of array is object, too.\n if (typeof value === 'object' && !Array.isArray(value)) {\n // generate accessor function\n this._value = generateAccessor(key, value);\n this._valueType = VALUE_TYPE.ACCESSOR;\n this._updateTrigger = updateTrigger;\n }\n // default state property, but value = accessor\n // fill: () => 'red'\n else if (typeof value === 'function') {\n const formatter = PROPERTY_FORMATTERS[key] || IDENTITY;\n // the output of the function should be formated by\n // the corresponding formatter again.\n // Ex: colorAccessor might return '#f00', which needs to\n // be formated as [255, 0, 0];\n this._value = (d) => formatter(value(d));\n this._valueType = VALUE_TYPE.ACCESSOR;\n this._updateTrigger = value;\n }\n // default state property with plain value:\n // fill: 'red'\n else {\n // format the value properly\n const formatter = PROPERTY_FORMATTERS[key] || IDENTITY;\n this._value = formatter(value);\n this._valueType = VALUE_TYPE.PLAIN_VALUE;\n this._updateTrigger = false;\n }\n\n // sanity check\n if (this._value === null) {\n log.warn(`Invalid ${key} value: ${value}`)();\n throw new Error(`Invalid ${key} value: ${value}`);\n }\n }\n\n // get the formatted value\n getValue() {\n return this._value;\n }\n\n getUpdateTrigger() {\n return this._updateTrigger;\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {StyleProperty} from './style-property';\n\nimport {NODE_TYPE, EDGE_DECORATOR_TYPE} from '../core/constants';\nimport {log} from '../utils/log';\n\nconst COMMON_DECKGL_PROPS = {\n getOffset: 'offset',\n opacity: 'opacity'\n};\n\nconst DECKGL_ACCESSOR_MAP = {\n [NODE_TYPE.CIRCLE]: {\n ...COMMON_DECKGL_PROPS,\n getFillColor: 'fill',\n getLineColor: 'stroke',\n getLineWidth: 'strokeWidth',\n getRadius: 'radius'\n },\n\n [NODE_TYPE.RECTANGLE]: {\n ...COMMON_DECKGL_PROPS,\n getWidth: 'width',\n getHeight: 'height',\n getFillColor: 'fill',\n getLineColor: 'stroke',\n getLineWidth: 'strokeWidth'\n },\n\n [NODE_TYPE.ROUNDED_RECTANGLE]: {\n ...COMMON_DECKGL_PROPS,\n getCornerRadius: 'cornerRadius',\n getRadius: 'radius',\n getWidth: 'width',\n getHeight: 'height',\n getFillColor: 'fill',\n getLineColor: 'stroke',\n getLineWidth: 'strokeWidth'\n },\n\n [NODE_TYPE.PATH_ROUNDED_RECTANGLE]: {\n ...COMMON_DECKGL_PROPS,\n getWidth: 'width',\n getHeight: 'height',\n getFillColor: 'fill',\n getLineColor: 'stroke',\n getLineWidth: 'strokeWidth',\n getCornerRadius: 'cornerRadius'\n },\n\n [NODE_TYPE.LABEL]: {\n ...COMMON_DECKGL_PROPS,\n getColor: 'color',\n getText: 'text',\n getSize: 'fontSize',\n getTextAnchor: 'textAnchor',\n getAlignmentBaseline: 'alignmentBaseline',\n getAngle: 'angle',\n scaleWithZoom: 'scaleWithZoom',\n textMaxWidth: 'textMaxWidth',\n textWordBreak: 'textWordBreak',\n textSizeMinPixels: 'textSizeMinPixels'\n },\n\n [NODE_TYPE.MARKER]: {\n ...COMMON_DECKGL_PROPS,\n getColor: 'fill',\n getSize: 'size',\n getMarker: 'marker',\n scaleWithZoom: 'scaleWithZoom'\n },\n\n // --------- Edge related ---------\n Edge: {\n getColor: 'stroke',\n getWidth: 'strokeWidth'\n },\n [EDGE_DECORATOR_TYPE.LABEL]: {\n getColor: 'color',\n getText: 'text',\n getSize: 'fontSize',\n getTextAnchor: 'textAnchor',\n getAlignmentBaseline: 'alignmentBaseline',\n scaleWithZoom: 'scaleWithZoom',\n textMaxWidth: 'textMaxWidth',\n textWordBreak: 'textWordBreak',\n textSizeMinPixels: 'textSizeMinPixels'\n },\n [EDGE_DECORATOR_TYPE.FLOW]: {\n getColor: 'color',\n getWidth: 'width',\n getSpeed: 'speed',\n getTailLength: 'tailLength'\n }\n};\n\nconst DECKGL_UPDATE_TRIGGERS = {\n [NODE_TYPE.CIRCLE]: ['getFillColor', 'getRadius', 'getLineColor', 'getLineWidth'],\n [NODE_TYPE.RECTANGLE]: ['getFillColor', 'getLineColor', 'getLineWidth'],\n [NODE_TYPE.ROUNDED_RECTANGLE]: [\n 'getFillColor',\n 'getLineColor',\n 'getLineWidth',\n 'getCornerRadius'\n ],\n [NODE_TYPE.PATH_ROUNDED_RECTANGLE]: [\n 'getFillColor',\n 'getLineColor',\n 'getLineWidth',\n 'getCornerRadius'\n ],\n [NODE_TYPE.LABEL]: [\n 'getColor',\n 'getText',\n 'getSize',\n 'getTextAnchor',\n 'getAlignmentBaseline',\n 'getAngle'\n ],\n [NODE_TYPE.MARKER]: ['getColor', 'getSize', 'getMarker'],\n Edge: ['getColor', 'getWidth'],\n [EDGE_DECORATOR_TYPE.LABEL]: [\n 'getColor',\n 'getText',\n 'getSize',\n 'getTextAnchor',\n 'getAlignmentBaseline'\n ],\n [EDGE_DECORATOR_TYPE.FLOW]: ['getColor', 'getWidth', 'getSpeed', 'getTailLength']\n};\n\nexport class Stylesheet {\n type: any;\n properties: any;\n constructor(style, updateTriggers) {\n const {type: layerType, ...restStyle} = style;\n if (!layerType || !(layerType in DECKGL_ACCESSOR_MAP)) {\n throw new Error(`illegal type: ${layerType}`);\n }\n this.type = layerType;\n\n // style = {\n // type: 'circle',\n // fill: 'red'\n // radius: 5,\n //\n // ':hover': {\n // fill: 'blue',\n // stroke: 'red'\n // }\n // };\n // step 1: extract 'rules': default, hover\n // default: {fill: 'red', radius: 5};\n // hover: {fill: 'blue', stroke: 'red'};\n const rules = Object.keys(restStyle).reduce(\n (res, key) => {\n const isSelector = key.startsWith(':');\n if (isSelector) {\n const state = key.substring(1);\n res[state] = restStyle[key];\n return res;\n }\n res.default[key] = restStyle[key];\n return res;\n },\n {\n default: {}\n }\n );\n\n // step 2: extract all unique attributes from rules\n // attributes: ['fill', 'radius', 'stroke']\n const attributes = Object.values(rules).reduce((res, rule) => {\n const attrs = Object.keys(rule);\n const set = new Set([...(res as any), ...attrs]);\n return Array.from(set);\n }, []);\n // step 3: create a attribute map as:\n // attrMap = {\n // fill: {default: 'red', hover: 'blue'},\n // radius: {default: 5},\n // stroke: {hover: 'red'},\n // }\n const attrMap = (attributes as any).reduce((res, attr) => {\n res[attr] = Object.entries(rules).reduce((acc, entry) => {\n const [state, rule] = entry;\n if (typeof rule[attr] !== 'undefined') {\n acc[state] = rule[attr];\n }\n return acc;\n }, {});\n return res;\n }, {});\n\n // step 4: simplify the attribute map if only default exists for the attribute\n // simplifiedStyleMap = {\n // fill: {default: 'red', hover: 'blue'},\n // radius: 5,\n // stroke: {hover: 'red'},\n // }\n const simplifiedStyleMap = Object.entries(attrMap).reduce((res, entry) => {\n const [attr, valueMap] = entry as any;\n const onlyDefault = Object.keys(valueMap).length === 1 && valueMap.default !== undefined;\n if (onlyDefault) {\n res[attr] = valueMap.default;\n return res;\n }\n res[attr] = valueMap;\n return res;\n }, {});\n\n // step 5: create style property\n // if the propety only maps to default state => return value only\n // if the property maps to other states => return accessor function\n\n // start to parse properties\n this.properties = {};\n for (const key in simplifiedStyleMap) {\n this.properties[key] = new StyleProperty({\n key,\n value: simplifiedStyleMap[key],\n updateTrigger: updateTriggers.stateUpdateTrigger\n });\n }\n }\n\n _getProperty(deckglAccessor) {\n const map = DECKGL_ACCESSOR_MAP[this.type];\n if (!map) {\n throw new Error(`illegal type: ${this.type}`);\n }\n const styleProp = map[deckglAccessor];\n if (!styleProp) {\n log.error(`Invalid DeckGL accessor: ${deckglAccessor}`)();\n throw new Error(`Invalid DeckGL accessor: ${deckglAccessor}`);\n }\n return this.properties[styleProp];\n }\n\n getDeckGLAccessor(deckglAccessor) {\n const property = this._getProperty(deckglAccessor);\n // get the value\n if (property) {\n return property.getValue();\n }\n // return default value\n const styleProp = DECKGL_ACCESSOR_MAP[this.type][deckglAccessor];\n return StyleProperty.getDefault(styleProp);\n }\n\n getDeckGLAccessorUpdateTrigger(deckglAccessor) {\n const property = this._getProperty(deckglAccessor);\n // get the value\n if (property) {\n return property.getUpdateTrigger();\n }\n return false;\n }\n\n getDeckGLAccessors() {\n const accessorMap = DECKGL_ACCESSOR_MAP[this.type];\n return Object.keys(accessorMap).reduce((res, accessor) => {\n res[accessor] = this.getDeckGLAccessor(accessor);\n return res;\n }, {});\n }\n\n getDeckGLUpdateTriggers() {\n return DECKGL_UPDATE_TRIGGERS[this.type].reduce((res, accessor) => {\n res[accessor] = this.getDeckGLAccessorUpdateTrigger(accessor);\n return res;\n }, {});\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const mixedGetPosition = (getPosition, getOffset) => {\n if (!getOffset) {\n return getPosition;\n }\n\n if (typeof getOffset === 'function') {\n return (d) => {\n const [x, y] = getPosition(d);\n const [offX, offY] = getOffset(d);\n return [x + offX, y + offY];\n };\n }\n\n const [offX, offY] = getOffset;\n return (d) => {\n const [x, y] = getPosition(d);\n return [x + offX, y + offY];\n };\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {EDGE_STATE, NODE_STATE, ValueOf} from './constants';\nimport {Edge} from '../graph/edge';\nimport {Node} from '../graph/node';\nimport {GraphEngine} from './graph-engine';\n\nconst NODE_TO_EDGE_STATE_MAP: Record<ValueOf<typeof NODE_STATE>, ValueOf<typeof EDGE_STATE>> = {\n [NODE_STATE.DEFAULT]: EDGE_STATE.DEFAULT,\n [NODE_STATE.HOVER]: EDGE_STATE.HOVER,\n [NODE_STATE.DRAGGING]: EDGE_STATE.DRAGGING,\n [NODE_STATE.SELECTED]: EDGE_STATE.SELECTED\n};\n\nfunction shouldEdgeBeSelected(edge: Edge): boolean {\n return edge\n .getConnectedNodes()\n .some(\n (node) => node.getState() === NODE_STATE.SELECTED && node.shouldHighlightConnectedEdges()\n );\n}\n\nfunction setNodeState(node: Node, state: ValueOf<typeof NODE_STATE>) {\n node.setState(state);\n if (node.shouldHighlightConnectedEdges()) {\n node.getConnectedEdges().forEach((edge) => {\n let newEdgeState = NODE_TO_EDGE_STATE_MAP[state];\n if (shouldEdgeBeSelected(edge)) {\n newEdgeState = EDGE_STATE.SELECTED;\n }\n edge.setState(newEdgeState);\n });\n }\n}\n\ninterface EventMap {\n onClick?: (info: unknown, event: Event) => void;\n onHover?: (info: unknown) => void;\n onMouseEnter?: (info: unknown) => void;\n onMouseLeave?: (node: Node) => void;\n onDragStart?: (info: unknown) => void;\n onDrag?: (info: unknown) => void;\n onDragEnd?: (info: unknown) => void;\n}\n\nexport interface InteractionManagerProps {\n nodeEvents?: EventMap;\n edgeEvents?: EventMap;\n engine: GraphEngine;\n enableDragging: boolean;\n resumeLayoutAfterDragging: boolean;\n}\n\nexport class InteractionManager {\n public notifyCallback: Function;\n private _lastInteraction = 0;\n private _lastHoveredNode: Node | null = null;\n private _lastSelectedNode: Node | null = null;\n\n public nodeEvents: EventMap = undefined!;\n public edgeEvents: EventMap = undefined!;\n public engine: GraphEngine = undefined!;\n public enableDragging: boolean = undefined!;\n public resumeLayoutAfterDragging: boolean = undefined!;\n\n constructor(props: InteractionManagerProps, notifyCallback: Function) {\n this.updateProps(props);\n this.notifyCallback = notifyCallback;\n\n // internal state\n this._lastInteraction = 0;\n this._lastHoveredNode = null;\n this._lastSelectedNode = null;\n }\n\n updateProps({\n nodeEvents = {},\n edgeEvents = {},\n engine,\n enableDragging,\n resumeLayoutAfterDragging\n }: InteractionManagerProps): void {\n this.nodeEvents = nodeEvents;\n this.edgeEvents = edgeEvents;\n this.engine = engine;\n this.enableDragging = enableDragging;\n this.resumeLayoutAfterDragging = resumeLayoutAfterDragging;\n }\n\n getLastInteraction(): number {\n return this._lastInteraction;\n }\n\n onClick(info, event): void {\n const {object} = info;\n\n if (!object) {\n return;\n }\n\n if (object.isNode) {\n if ((object as Node).isSelectable()) {\n if (this._lastSelectedNode) {\n setNodeState(this._lastSelectedNode, NODE_STATE.DEFAULT);\n }\n setNodeState(object, NODE_STATE.SELECTED);\n this._lastSelectedNode = object as Node;\n this._lastInteraction = Date.now();\n this.notifyCallback();\n }\n\n if (this.nodeEvents.onClick) {\n this.nodeEvents.onClick(info, event);\n }\n }\n\n if (object.isEdge && this.edgeEvents.onClick) {\n this.edgeEvents.onClick(info, event);\n }\n }\n\n _mouseLeaveNode(): void {\n const lastHoveredNode = this._lastHoveredNode;\n\n if (!(lastHoveredNode.isSelectable() && lastHoveredNode.getState() === NODE_STATE.SELECTED)) {\n // reset the last hovered node's state\n const newState =\n this._lastSelectedNode !== null && this._lastSelectedNode.id === this._lastHoveredNode?.id\n ? NODE_STATE.SELECTED\n : NODE_STATE.DEFAULT;\n setNodeState(lastHoveredNode, newState);\n }\n // trigger the callback if exists\n if (this.nodeEvents.onMouseLeave) {\n this.nodeEvents.onMouseLeave(lastHoveredNode);\n }\n }\n\n _mouseEnterNode(info): void {\n // set the node's state to hover\n setNodeState(info.object as Node, NODE_STATE.HOVER);\n // trigger the callback if exists\n if (this.nodeEvents.onMouseEnter) {\n this.nodeEvents.onMouseEnter(info);\n }\n if (this.nodeEvents.onHover) {\n this.nodeEvents.onHover(info);\n }\n }\n\n onHover(info, event) {\n if (!info.object) {\n if (this._lastHoveredNode) {\n this._mouseLeaveNode();\n this._lastInteraction = Date.now();\n this._lastHoveredNode = null;\n this.notifyCallback();\n }\n return;\n }\n\n // hover over on a node\n if (info.object.isNode) {\n const isSameNode = this._lastHoveredNode && this._lastHoveredNode.id === info.object.id;\n // stay in the same node\n if (isSameNode) {\n return;\n }\n if (this._lastHoveredNode) {\n // reset the previous hovered node's state if not the same node\n this._mouseLeaveNode();\n }\n // enter new node\n this._mouseEnterNode(info);\n this._lastInteraction = Date.now();\n this._lastHoveredNode = info.object;\n this.notifyCallback();\n }\n if (info.object.isEdge && this.edgeEvents.onHover) {\n this.edgeEvents.onHover(info);\n }\n }\n\n onDragStart(info, event) {\n if (this.nodeEvents.onDragStart) {\n this.nodeEvents.onDragStart(info);\n }\n }\n\n onDrag(info, event) {\n if (!info.object.isNode || !this.enableDragging) {\n return;\n }\n event.stopImmediatePropagation();\n\n // info.viewport is undefined when the object is offscreen, so we use viewport from onDragStart\n const coordinates = info.layer.context.viewport.unproject([info.x, info.y]);\n\n // limit the node position to be within bounds of the viewport\n const bounds = info.layer.context.viewport.getBounds(); // [minX, minY, maxX, maxY]\n const x = Math.min(Math.max(coordinates[0], bounds[0]), bounds[2]);\n const y = Math.min(Math.max(coordinates[1], bounds[1]), bounds[3]);\n this.engine.lockNodePosition(info.object, x, y);\n\n setNodeState(info.object, NODE_STATE.DRAGGING);\n this._lastInteraction = Date.now();\n this.notifyCallback();\n if (this.nodeEvents.onDrag) {\n this.nodeEvents.onDrag(info);\n }\n }\n\n onDragEnd(info, event) {\n if (!info.object.isNode || !this.enableDragging) {\n return;\n }\n if (this.resumeLayoutAfterDragging) {\n this.engine.resume();\n }\n setNodeState(info.object, NODE_STATE.DEFAULT);\n this.engine.unlockNodePosition(info.object);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ScatterplotLayer} from '@deck.gl/layers';\n\nexport class CircleLayer extends CompositeLayer {\n static layerName = 'CircleLayer';\n\n renderLayers() {\n const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n return [\n new ScatterplotLayer(\n this.getSubLayerProps({\n id: '__scatterplot-layer',\n data,\n getPosition,\n ...stylesheet.getDeckGLAccessors(),\n updateTriggers: {\n getPosition: positionUpdateTrigger,\n ...stylesheet.getDeckGLUpdateTriggers()\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {IconLayer} from '@deck.gl/layers';\n\nexport class ImageLayer extends CompositeLayer {\n static layerName = 'ImageLayer';\n\n renderLayers() {\n const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n return [\n new IconLayer(\n this.getSubLayerProps({\n id: '__icon-layer',\n data,\n getPosition,\n ...stylesheet.getDeckGLAccessors(),\n updateTriggers: {\n getPosition: positionUpdateTrigger,\n ...stylesheet.getDeckGLUpdateTriggers()\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ZoomableTextLayer} from '../common-layers/zoomable-text-layer/zoomable-text-layer';\n\nexport class LabelLayer extends CompositeLayer {\n static layerName = 'LabelLayer';\n\n renderLayers() {\n const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n return [\n new ZoomableTextLayer(\n this.getSubLayerProps({\n id: '__text-layer',\n data,\n getPosition,\n ...stylesheet.getDeckGLAccessors(),\n updateTriggers: {\n ...stylesheet.getDeckGLUpdateTriggers(),\n getPosition: positionUpdateTrigger\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {TextLayer} from '@deck.gl/layers';\n\nexport class ZoomableTextLayer extends CompositeLayer {\n static layerName = 'ZoomableTextLayer';\n\n initializeState() {\n this.state = {characterSet: []};\n }\n\n shouldUpdateState({props, changeFlags}) {\n const {scaleWithZoom} = this.props as any;\n if (!scaleWithZoom) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n return changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.viewportChanged;\n }\n\n updateState({props, oldProps, changeFlags}) {\n super.updateState({props, oldProps, changeFlags} as any);\n if (changeFlags.propsOrDataChanged) {\n const {getText} = props;\n let textLabels = [];\n if (typeof getText === 'function') {\n textLabels = props.data.map(getText);\n } else {\n textLabels = [getText];\n }\n const characterSet = new Set(textLabels.join(''));\n const uniqueCharacters = Array.from(characterSet);\n this.setState({characterSet: uniqueCharacters});\n }\n }\n\n renderLayers() {\n const {\n data,\n getPosition,\n getColor,\n getText,\n getSize,\n getTextAnchor,\n getAlignmentBaseline,\n getAngle,\n scaleWithZoom,\n updateTriggers,\n fontFamily,\n textWordUnits,\n textWordBreak,\n textMaxWidth,\n textSizeMinPixels\n } = this.props as any;\n\n const sizeUpdateTrigger = scaleWithZoom ? [getSize, this.context.viewport.zoom] : false;\n // getText only expects function not plain value (string)\n const newGetText = typeof getText === 'function' ? getText : () => getText;\n\n return [\n new TextLayer(\n this.getSubLayerProps({\n id: '__text-layer',\n data,\n sizeScale: scaleWithZoom ? Math.pow(2, this.context.viewport.zoom - 1) : 1,\n characterSet: this.state.characterSet,\n getPosition,\n getColor,\n getSize,\n getTextAnchor,\n getAlignmentBaseline,\n getAngle,\n getText: newGetText,\n maxWidth: textMaxWidth ?? 12,\n wordBreak: textWordBreak ?? 'break-all',\n fontFamily: fontFamily ?? 'Red Hat Text',\n wordUnits: textWordUnits ?? 'pixels',\n sizeMinPixels: textSizeMinPixels ?? 9,\n updateTriggers: {\n getSize: sizeUpdateTrigger,\n getAngle: [sizeUpdateTrigger, updateTriggers.getPosition],\n ...updateTriggers\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {PolygonLayer} from '@deck.gl/layers';\n\nconst generateRectangle = (node, {getWidth, getHeight, getPosition}) => {\n const pos = getPosition(node);\n const width = typeof getWidth === 'function' ? getWidth(node._data.label.length * 12) : getWidth;\n const height = typeof getWidth === 'function' ? getHeight(node) : getHeight;\n const halfWidth = width / 2;\n const halfHeight = height / 2;\n return [\n [pos[0] - halfWidth, pos[1] - halfHeight],\n [pos[0] - halfWidth, pos[1] + halfHeight],\n [pos[0] + halfWidth, pos[1] + halfHeight],\n [pos[0] + halfWidth, pos[1] - halfHeight]\n ];\n};\n\nexport class RectangleLayer extends CompositeLayer {\n static layerName = 'RectangleLayer';\n\n renderLayers() {\n const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n const getFillColor = stylesheet.getDeckGLAccessor('getFillColor');\n const getLineWidth = stylesheet.getDeckGLAccessor('getLineWidth');\n\n return [\n new PolygonLayer(\n this.getSubLayerProps({\n id: '__polygon-layer',\n data,\n getPolygon: (node) =>\n generateRectangle(node, {\n getPosition,\n getWidth: stylesheet.getDeckGLAccessor('getWidth'),\n getHeight: stylesheet.getDeckGLAccessor('getHeight')\n }),\n filled: Boolean(getFillColor),\n jointRounded: true,\n stroked: Boolean(getLineWidth),\n ...stylesheet.getDeckGLAccessors(),\n updateTriggers: {\n getPolygon: [\n positionUpdateTrigger,\n stylesheet.getDeckGLAccessorUpdateTrigger('getWidth'),\n stylesheet.getDeckGLAccessorUpdateTrigger('getHeight')\n ],\n ...stylesheet.getDeckGLUpdateTriggers()\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const fs = /* glsl */ `\\\n#define SHADER_NAME rounded-rectangle-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vFillColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n\n float distToCenter = length(unitPosition);\n\n /* Calculate the cutoff radius for the rounded corners */\n float threshold = sqrt(2.0) * (1.0 - roundedRectangle.cornerRadius) + 1.0 * roundedRectangle.cornerRadius;\n if (distToCenter <= threshold) {\n gl_FragColor = vFillColor;\n } else {\n discard;\n }\n\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import {ScatterplotLayer} from '@deck.gl/layers';\nimport type {ShaderModule} from '@luma.gl/shadertools';\nimport type {Model} from '@luma.gl/engine';\nimport {fs} from './rounded-rectangle-layer-fragment';\nimport {RectangleLayer} from './rectangle-layer';\n\nconst uniformBlock = `\\\nuniform roundedRectangleUniforms {\n float cornerRadius;\n} roundedRectangle;\n`;\n\nexport type RoundedRectangleProps = {\n cornerRadius: number;\n};\n\nexport const roundedRectangleUniforms = {\n name: 'roundedRectangle',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n cornerRadius: 'f32'\n }\n} as const satisfies ShaderModule<RoundedRectangleProps>;\n\nexport class RoundedRectangleLayer extends RectangleLayer {\n static layerName = 'RoundedRectangleLayer';\n\n draw(props) {\n const {cornerRadius} = this.props as any;\n const roundedRectangleProps: RoundedRectangleProps = {cornerRadius};\n const model = this.state.model as Model;\n model.shaderInputs.setProps({roundedRectangle: roundedRectangleProps});\n super.draw(props);\n }\n\n getShaders() {\n // use object.assign to make sure we don't overwrite existing fields like `vs`, `modules`...\n const shaders = super.getShaders(undefined!);\n return {\n ...shaders,\n fs,\n modules: [...shaders.modules, roundedRectangleUniforms]\n };\n }\n}\n\nRoundedRectangleLayer.defaultProps = {\n // cornerRadius: the amount of rounding at the rectangle corners\n // 0 - rectangle. 1 - circle.\n cornerRadius: 0.1\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {PolygonLayer} from '@deck.gl/layers';\nimport {generateRoundedCorners} from '../../utils/polygon-calculations';\n\nconst generateRoundedRectangle = (node, {getWidth, getHeight, getPosition, getCornerRadius}) => {\n const pos = getPosition(node);\n const width = typeof getWidth === 'function' ? getWidth(node) : getWidth;\n const height = typeof getWidth === 'function' ? getHeight(node) : getHeight;\n const cornerRadius =\n typeof getCornerRadius === 'function' ? getCornerRadius(node) : getCornerRadius;\n const factor = 20;\n return generateRoundedCorners(pos, width, height, cornerRadius, factor);\n};\n\nexport class PathBasedRoundedRectangleLayer extends CompositeLayer {\n static layerName = 'PathBasedRoundedRectangleLayer';\n\n renderLayers() {\n const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n const getFillColor = stylesheet.getDeckGLAccessor('getFillColor');\n const getLineWidth = stylesheet.getDeckGLAccessor('getLineWidth');\n\n return [\n new PolygonLayer(\n this.getSubLayerProps({\n id: '__polygon-layer',\n data,\n getPolygon: (node) =>\n generateRoundedRectangle(node, {\n getPosition,\n getWidth: stylesheet.getDeckGLAccessor('getWidth'),\n getHeight: stylesheet.getDeckGLAccessor('getHeight'),\n getCornerRadius: stylesheet.getDeckGLAccessor('getCornerRadius')\n }),\n filled: Boolean(getFillColor),\n stroked: Boolean(getLineWidth),\n ...stylesheet.getDeckGLAccessors(),\n updateTriggers: {\n getPolygon: [\n positionUpdateTrigger,\n stylesheet.getDeckGLAccessorUpdateTrigger('getWidth'),\n stylesheet.getDeckGLAccessorUpdateTrigger('getHeight'),\n stylesheet.getDeckGLAccessorUpdateTrigger('getCornerRadius')\n ],\n ...stylesheet.getDeckGLUpdateTriggers()\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport function generateRoundedCorners(pos, width, height, radius, factor = 20) {\n const halfWidth = width / 2;\n const halfHeight = height / 2;\n const bottomLeft = {X: pos[0] - halfWidth, Y: pos[1] - halfHeight};\n const topLeft = {X: pos[0] - halfWidth, Y: pos[1] + halfHeight};\n const bottomRight = {X: pos[0] + halfWidth, Y: pos[1] - halfHeight};\n const topRight = {X: pos[0] + halfWidth, Y: pos[1] + halfHeight};\n\n const roundedPointsForBottomLeft = getRoundedCorner(\n bottomLeft,\n topLeft,\n bottomRight,\n radius,\n factor\n );\n const roundedPointsForTopLeft = getRoundedCorner(\n topLeft,\n topRight,\n bottomLeft,\n radius,\n factor\n ).reverse();\n const roundedPointsForTopRight = getRoundedCorner(\n topRight,\n bottomRight,\n topLeft,\n radius,\n factor\n ).reverse();\n const roundedPointsForBottomRight = getRoundedCorner(\n bottomRight,\n bottomLeft,\n topRight,\n radius,\n factor\n ).reverse();\n\n const result = [\n ...roundedPointsForBottomLeft,\n ...roundedPointsForTopLeft,\n ...roundedPointsForTopRight,\n ...roundedPointsForBottomRight\n ];\n\n return result;\n}\n\n/**\n *\n * @param {*} angularPoint = corner point\n * @param {*} p1 = edge one\n * @param {*} p2 = edge two\n * @param {*} radius = corner radius\n * @param {*} factor = affects the points used for curve\n * reference: https://stackoverflow.com/questions/24771828/how-to-calculate-rounded-corners-for-a-polygon\n */\n// eslint-disable-next-line max-statements\nfunction getRoundedCorner(angularPoint, p1, p2, radius, factor) {\n // Vector 1\n const dx1 = angularPoint.X - p1.X;\n const dy1 = angularPoint.Y - p1.Y;\n\n // Vector 2\n const dx2 = angularPoint.X - p2.X;\n const dy2 = angularPoint.Y - p2.Y;\n\n // Angle between vector 1 and vector 2 divided by 2\n const angle = (Math.atan2(dy1, dx1) - Math.atan2(dy2, dx2)) / 2;\n\n // The length of segment between angular point and the\n // points of intersection with the circle of a given radius\n const tan = Math.abs(Math.tan(angle));\n let segment = radius / tan;\n // var segment = 2;\n\n // Check the segment\n const length1 = getLength(dx1, dy1);\n const length2 = getLength(dx2, dy2);\n\n const length = Math.min(length1, length2);\n\n if (segment > length) {\n segment = length;\n radius = length * tan;\n }\n\n // Points of intersection are calculated by the proportion between\n // the coordinates of the vector, length of vector and the length of the segment.\n const p1Cross = getProportionPoint(angularPoint, segment, length1, dx1, dy1);\n const p2Cross = getProportionPoint(angularPoint, segment, length2, dx2, dy2);\n\n // Calculation of the coordinates of the circle\n // center by the addition of angular vectors.\n const dx = angularPoint.X * 2 - p1Cross.X - p2Cross.X;\n const dy = angularPoint.Y * 2 - p1Cross.Y - p2Cross.Y;\n\n const L = getLength(dx, dy);\n const d = getLength(segment, radius);\n\n const circlePoint = getProportionPoint(angularPoint, d, L, dx, dy);\n\n // StartAngle and EndAngle of arc\n let startAngle = Math.atan2(p1Cross.Y - circlePoint.Y, p1Cross.X - circlePoint.X);\n const endAngle = Math.atan2(p2Cross.Y - circlePoint.Y, p2Cross.X - circlePoint.X);\n\n // Sweep angle\n let sweepAngle = endAngle - startAngle;\n\n // Some additional checks\n if (sweepAngle < 0) {\n startAngle = endAngle;\n sweepAngle = -sweepAngle;\n }\n\n if (sweepAngle > Math.PI) sweepAngle = Math.PI - sweepAngle;\n\n const degreeFactor = factor / Math.PI;\n\n return getPointsForArc(sweepAngle, degreeFactor, startAngle, circlePoint, radius);\n}\n\nfunction getLength(dx, dy) {\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction getProportionPoint(point, segment, length, dx, dy) {\n const factor = segment / length;\n\n return {\n X: point.X - dx * factor,\n Y: point.Y - dy * factor\n };\n}\n\nfunction getPointsForArc(sweepAngle, degreeFactor, startAngle, circlePoint, radius) {\n const pointsCount = Math.abs(sweepAngle * degreeFactor);\n const sign = Math.sign(sweepAngle);\n\n const points = [];\n\n for (let i = 0; i < pointsCount; ++i) {\n const pointX = circlePoint.X + Math.cos(startAngle + (sign * i) / degreeFactor) * radius;\n\n const pointY = circlePoint.Y + Math.sin(startAngle + (sign * i) / degreeFactor) * radius;\n\n const point = [pointX, pointY];\n points.push(point);\n }\n return points;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {MarkerLayer} from '../common-layers/marker-layer/marker-layer';\n\nexport class ZoomableMarkerLayer extends CompositeLayer {\n static layerName = 'ZoomableMarkerLayer';\n\n shouldUpdateState({props, changeFlags}) {\n const {stylesheet} = this.props as any;\n const scaleWithZoom = stylesheet.getDeckGLAccessor('scaleWithZoom');\n if (!scaleWithZoom) {\n return changeFlags.somethingChanged;\n }\n return changeFlags.somethingChanged || changeFlags.viewportChanged;\n }\n\n renderLayers() {\n const {data, getPosition, stylesheet, positionUpdateTrigger = 0} = this.props as any;\n\n const getSize = stylesheet.getDeckGLAccessor('getSize');\n const scaleWithZoom = stylesheet.getDeckGLAccessor('scaleWithZoom');\n const sizeUpdateTrigger = scaleWithZoom ? [getSize, this.context.viewport.zoom] : false;\n const oiginalGetMarker = stylesheet.getDeckGLAccessor('getMarker');\n // getMarker only expects function not plain value (string)\n const getMarker =\n typeof oiginalGetMarker === 'function' ? oiginalGetMarker : () => oiginalGetMarker;\n\n return [\n new MarkerLayer(\n this.getSubLayerProps({\n id: 'zoomable-marker-layer',\n data,\n getPosition,\n sizeScale: scaleWithZoom ? Math.max(0, this.context.viewport.zoom) : 1,\n ...stylesheet.getDeckGLAccessors(),\n getMarker,\n updateTriggers: {\n ...stylesheet.getDeckGLUpdateTriggers(),\n getPosition: positionUpdateTrigger,\n getSize: sizeUpdateTrigger\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {IconLayer} from '@deck.gl/layers';\n\nimport {MarkerMapping} from './marker-mapping';\nimport {AtlasDataURL} from './atlas-data-url';\n\nexport class MarkerLayer extends CompositeLayer {\n static layerName = 'MarkerLayer';\n\n static defaultProps = {\n id: 'MarkerLayer',\n data: [],\n getMarker: (d) => d.marker,\n getColor: (d) => [0, 0, 0],\n getSize: (d) => 10\n };\n\n renderLayers() {\n const {getMarker, ...otherProps} = this.props as any;\n return [\n new IconLayer(\n this.getSubLayerProps({\n id: 'marker-layer',\n iconAtlas: AtlasDataURL.dataURL,\n iconMapping: MarkerMapping,\n getIcon: getMarker,\n ...otherProps\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable */\nexport const MarkerMapping = {\n 'bell-filled': {\n x: 0,\n y: 0,\n width: 32,\n height: 32,\n mask: true\n },\n bell: {\n x: 32,\n y: 0,\n width: 32,\n height: 32,\n mask: true\n },\n 'bookmark-filled': {\n x: 0,\n y: 32,\n width: 32,\n height: 32,\n mask: true\n },\n bookmark: {\n x: 32,\n y: 32,\n width: 32,\n height: 32,\n mask: true\n },\n 'cd-filled': {\n x: 64,\n y: 0,\n width: 32,\n height: 32,\n mask: true\n },\n cd: {\n x: 64,\n y: 32,\n width: 32,\n height: 32,\n mask: true\n },\n checkmark: {\n x: 0,\n y: 64,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-check-filled': {\n x: 32,\n y: 64,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-check': {\n x: 64,\n y: 64,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-filled': {\n x: 96,\n y: 0,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-i-filled': {\n x: 96,\n y: 32,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-i': {\n x: 96,\n y: 64,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-minus-filled': {\n x: 0,\n y: 96,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-minus': {\n x: 32,\n y: 96,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-plus-filled': {\n x: 64,\n y: 96,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-plus': {\n x: 96,\n y: 96,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-questionmark-filled': {\n x: 128,\n y: 0,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-questionmark': {\n x: 128,\n y: 32,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-slash-filled': {\n x: 128,\n y: 64,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-slash': {\n x: 128,\n y: 96,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-x-filled': {\n x: 0,\n y: 128,\n width: 32,\n height: 32,\n mask: true\n },\n 'circle-x': {\n x: 32,\n y: 128,\n width: 32,\n height: 32,\n mask: true\n },\n circle: {\n x: 64,\n y: 128,\n width: 32,\n height: 32,\n mask: true\n },\n 'diamond-filled': {\n x: 96,\n y: 128,\n width: 32,\n height: 32,\n mask: true\n },\n diamond: {\n x: 128,\n y: 128,\n width: 32,\n height: 32,\n mask: true\n },\n 'flag-filled': {\n x: 160,\n y: 0,\n width: 32,\n height: 32,\n mask: true\n },\n flag: {\n x: 160,\n y: 32,\n width: 32,\n height: 32,\n mask: true\n },\n gear: {\n x: 160,\n y: 64,\n width: 32,\n height: 32,\n mask: true\n },\n 'heart-filled': {\n x: 160,\n y: 96,\n width: 32,\n height: 32,\n mask: true\n },\n heart: {\n x: 160,\n y: 128,\n width: 32,\n height: 32,\n mask: true\n },\n 'location-marker-filled': {\n x: 0,\n y: 160,\n width: 32,\n height: 32,\n mask: true\n },\n 'location-marker': {\n x: 32,\n y: 160,\n width: 32,\n height: 32,\n mask: true\n },\n 'octagonal-star-filled': {\n x: 64,\n y: 160,\n width: 32,\n height: 32,\n mask: true\n },\n 'octagonal-star': {\n x: 96,\n y: 160,\n width: 32,\n height: 32,\n mask: true\n },\n 'person-filled': {\n x: 128,\n y: 160,\n width: 32,\n height: 32,\n mask: true\n },\n person: {\n x: 160,\n y: 160,\n width: 32,\n height: 32,\n mask: true\n },\n 'pin-filled': {\n x: 192,\n y: 0,\n width: 32,\n height: 32,\n mask: true\n },\n pin: {\n x: 192,\n y: 32,\n width: 32,\n height: 32,\n mask: true\n },\n 'plus-small': {\n x: 192,\n y: 64,\n width: 32,\n height: 32,\n mask: true\n },\n plus: {\n x: 192,\n y: 96,\n width: 32,\n height: 32,\n mask: true\n },\n 'rectangle-filled': {\n x: 192,\n y: 128,\n width: 32,\n height: 32,\n mask: true\n },\n rectangle: {\n x: 192,\n y: 160,\n width: 32,\n height: 32,\n mask: true\n },\n 'star-filled': {\n x: 0,\n y: 192,\n width: 32,\n height: 32,\n mask: true\n },\n star: {\n x: 32,\n y: 192,\n width: 32,\n height: 32,\n mask: true\n },\n 'tag-filled': {\n x: 64,\n y: 192,\n width: 32,\n height: 32,\n mask: true\n },\n tag: {\n x: 96,\n y: 192,\n width: 32,\n height: 32,\n mask: true\n },\n 'thumb-down-filled': {\n x: 128,\n y: 192,\n width: 32,\n height: 32,\n mask: true\n },\n 'thumb-down': {\n x: 160,\n y: 192,\n width: 32,\n height: 32,\n mask: true\n },\n 'thumb-up': {\n x: 192,\n y: 192,\n width: 32,\n height: 32,\n mask: true\n },\n 'thumb_up-filled': {\n x: 224,\n y: 0,\n width: 32,\n height: 32,\n mask: true\n },\n 'triangle-down-filled': {\n x: 224,\n y: 32,\n width: 32,\n height: 32,\n mask: true\n },\n 'triangle-down': {\n x: 224,\n y: 64,\n width: 32,\n height: 32,\n mask: true\n },\n 'triangle-left-filled': {\n x: 224,\n y: 96,\n width: 32,\n height: 32,\n mask: true\n },\n 'triangle-left': {\n x: 224,\n y: 128,\n width: 32,\n height: 32,\n mask: true\n },\n 'triangle-right-filled': {\n x: 224,\n y: 160,\n width: 32,\n height: 32,\n mask: true\n },\n 'triangle-right': {\n x: 224,\n y: 192,\n width: 32,\n height: 32,\n mask: true\n },\n 'triangle-up-filled': {\n x: 0,\n y: 224,\n width: 32,\n height: 32,\n mask: true\n },\n 'triangle-up': {\n x: 32,\n y: 224,\n width: 32,\n height: 32,\n mask: true\n },\n 'x-small': {\n x: 64,\n y: 224,\n width: 32,\n height: 32,\n mask: true\n },\n x: {\n x: 96,\n y: 224,\n width: 32,\n height: 32,\n mask: true\n }\n};\n/* eslint-enable */\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable */\nexport const AtlasDataURL = {\n dataURL:\n 'data:image/png;base64,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'\n};\n/* eslint-enable */\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';\n\nimport {EDGE_TYPE} from '../core/constants';\nimport {StraightLineEdgeLayer} from '../layers/edge-layers/straight-line-edge-layer';\nimport {PathEdgeLayer} from './edge-layers/path-edge-layer';\nimport {CurvedEdgeLayer} from './edge-layers/curved-edge-layer';\n\nconst EDGE_LAYER_MAP = {\n [EDGE_TYPE.LINE]: StraightLineEdgeLayer,\n [EDGE_TYPE.PATH]: PathEdgeLayer,\n [EDGE_TYPE.SPLINE_CURVE]: CurvedEdgeLayer\n};\n\nexport class EdgeLayer extends CompositeLayer {\n static layerName = 'EdgeLayer';\n\n static defaultProps = {\n data: [],\n pickable: true,\n getLayoutInfo: (d) => ({\n type: d.type,\n sourcePosition: d.sourcePosition,\n targetPosition: d.targetPosition,\n controlPoints: []\n }),\n positionUpdateTrigger: 0\n };\n\n updateState({props, oldProps, changeFlags}) {\n super.updateState({props, oldProps, changeFlags} as any);\n if (changeFlags.dataChanged) {\n this.updateStateData();\n }\n }\n\n updateStateData() {\n const {data, getLayoutInfo} = this.props as any;\n // bucket edges by types\n const typedEdgeData = data.reduce(\n (res, d) => {\n const {type} = getLayoutInfo(d);\n res[type].push(d);\n return res;\n },\n {\n [EDGE_TYPE.LINE]: [],\n [EDGE_TYPE.PATH]: [],\n [EDGE_TYPE.SPLINE_CURVE]: []\n }\n );\n this.setState({typedEdgeData});\n }\n\n renderLayers() {\n const {getLayoutInfo, pickable, positionUpdateTrigger, stylesheet, id} = this.props as any;\n\n const {typedEdgeData} = this.state;\n\n // render lines by types (straight line, path, curves)\n return Object.entries(typedEdgeData).map((e, idx) => {\n const [type, edgeData] = e;\n const Layer = EDGE_LAYER_MAP[type];\n // invalid edge layer type\n if (!Layer) {\n return null;\n }\n return new Layer({\n id: `${id}-${idx}`,\n data: edgeData,\n getLayoutInfo,\n getColor: stylesheet.getDeckGLAccessor('getColor'),\n getWidth: stylesheet.getDeckGLAccessor('getWidth'),\n colorUpdateTrigger: stylesheet.getDeckGLAccessorUpdateTrigger('getColor'),\n widthUpdateTrigger: stylesheet.getDeckGLAccessorUpdateTrigger('getWidth'),\n positionUpdateTrigger,\n pickable,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n parameters: {\n depthCompare: 'always'\n }\n } as any);\n });\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {LineLayer} from '@deck.gl/layers';\n\nexport class StraightLineEdgeLayer extends CompositeLayer {\n static layerName = 'StraightLineEdgeLayer';\n\n renderLayers() {\n const {\n data,\n getLayoutInfo,\n positionUpdateTrigger = 0,\n colorUpdateTrigger = 0,\n widthUpdateTrigger = 0,\n ...otherProps\n } = this.props as any;\n return [\n new LineLayer(\n this.getSubLayerProps({\n id: '__line-layer',\n data,\n getSourcePosition: (e) => getLayoutInfo(e).sourcePosition,\n getTargetPosition: (e) => getLayoutInfo(e).targetPosition,\n updateTriggers: {\n getColor: colorUpdateTrigger,\n getSourcePosition: positionUpdateTrigger,\n getTargetPosition: positionUpdateTrigger,\n getWidth: widthUpdateTrigger\n },\n ...otherProps\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {PathLayer} from '@deck.gl/layers';\n\nexport class PathEdgeLayer extends CompositeLayer {\n static layerName = 'PathEdgeLayer';\n\n renderLayers() {\n const {\n data,\n getLayoutInfo,\n positionUpdateTrigger = 0,\n colorUpdateTrigger = 0,\n widthUpdateTrigger = 0,\n ...otherProps\n } = this.props as any;\n return [\n new PathLayer(\n this.getSubLayerProps({\n id: '__line-layer',\n data,\n getPath: (e) => {\n const {sourcePosition, targetPosition, controlPoints} = getLayoutInfo(e);\n return [sourcePosition, ...controlPoints, targetPosition];\n },\n updateTriggers: {\n getColor: colorUpdateTrigger,\n getPath: positionUpdateTrigger,\n getWidth: widthUpdateTrigger\n },\n ...otherProps\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ScatterplotLayer, LineLayer} from '@deck.gl/layers';\nimport {SplineLayer} from '../common-layers/spline-layer/spline-layer';\n\nconst DEBUG = false;\n\nexport class CurvedEdgeLayer extends CompositeLayer {\n static layerName = 'CurvedEdgeLayer';\n\n // @ts-expect-error TODO\n renderLayers() {\n const {\n data,\n getLayoutInfo,\n positionUpdateTrigger = 0,\n colorUpdateTrigger = 0,\n widthUpdateTrigger = 0,\n ...otherProps\n } = this.props as any;\n return [\n DEBUG &&\n new ScatterplotLayer(\n this.getSubLayerProps({\n id: '__control-points',\n data,\n getPosition: (e) => getLayoutInfo(e).controlPoints[0],\n getColor: (d) => [190, 190, 190, 150],\n getRadius: (d) => 5,\n updateTriggers: {\n getPosition: positionUpdateTrigger\n },\n ...otherProps\n })\n ),\n DEBUG &&\n new LineLayer(\n this.getSubLayerProps({\n id: '__first_segment',\n data,\n getSourcePosition: (e) => getLayoutInfo(e).sourcePosition,\n getTargetPosition: (e) => getLayoutInfo(e).controlPoints[0],\n getColor: (e) => [210, 210, 210, 150],\n updateTriggers: {\n getSourcePosition: positionUpdateTrigger,\n getTargetPosition: positionUpdateTrigger\n },\n ...otherProps\n })\n ),\n DEBUG &&\n new LineLayer(\n this.getSubLayerProps({\n id: '__last_segment',\n data,\n getSourcePosition: (e) => getLayoutInfo(e).controlPoints[0],\n getTargetPosition: (e) => getLayoutInfo(e).targetPosition,\n getColor: (e) => [210, 210, 210, 150],\n updateTriggers: {\n getSourcePosition: positionUpdateTrigger,\n getTargetPosition: positionUpdateTrigger\n },\n ...otherProps\n })\n ),\n new SplineLayer(\n this.getSubLayerProps({\n id: '__spline_layer',\n data,\n getSourcePosition: (e) => getLayoutInfo(e).sourcePosition,\n getTargetPosition: (e) => getLayoutInfo(e).targetPosition,\n getControlPoints: (e) => getLayoutInfo(e).controlPoints,\n updateTriggers: {\n getSourcePosition: positionUpdateTrigger,\n getTargetPosition: positionUpdateTrigger,\n getControlPoints: positionUpdateTrigger,\n getColor: colorUpdateTrigger,\n getWidth: widthUpdateTrigger\n },\n ...otherProps\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {COORDINATE_SYSTEM, CompositeLayer} from '@deck.gl/core';\nimport {PathLayer} from '@deck.gl/layers';\nimport {getCurvePoints} from 'cardinal-spline-js';\n// const getCurvePoints = () => {};\n\n/* Constants */\nconst defaultProps = {\n id: 'spline-layer',\n getData: (d) => d.points,\n getAngle: (x) => 0,\n fontSize: 24,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n fp64: false\n};\n\nexport class SplineLayer extends CompositeLayer {\n static layerName = 'SplineLayer';\n\n initializeState() {\n this.state = {typedEdgeData: []};\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.dataChanged || changeFlags.propsChanged;\n }\n\n updateState({props, oldProps, changeFlags}) {\n super.updateState({props, oldProps, changeFlags} as any);\n if (changeFlags.dataChanged || changeFlags.propsChanged) {\n this.updateSplineData();\n }\n }\n\n updateSplineData() {\n const {data} = this.props as any;\n const paths = data.reduce((res, d) => {\n const sourcePosition = (this.props as any).getSourcePosition(d);\n const targetPosition = (this.props as any).getTargetPosition(d);\n const controlPoints = (this.props as any).getControlPoints(d);\n\n // Catmull-Rom curve\n const serializedControlPoints = controlPoints.toString().split(',');\n\n // NOTE: we might change the number of points according to the length.\n // so we can render less segements.\n // points = [x1, y1, x2, y2, ...];\n const points = getCurvePoints(\n [...sourcePosition, ...serializedControlPoints, ...targetPosition],\n 0.5,\n 10\n );\n // convert points to [[x1, y1], [x2, y2], ...]\n const path = [];\n for (let idx = 0; idx < points.length; idx += 2) {\n path.push([points[idx], points[idx + 1]]);\n }\n res.push(path);\n return res;\n }, []);\n this.setState({paths});\n }\n\n renderLayers() {\n const {coordinateSystem, getColor, getWidth, id, updateTriggers} = this.props as any;\n const {paths} = this.state;\n return new PathLayer({\n id: `${id}-splines`,\n data: paths as any,\n getPath: (d) => d,\n getColor,\n getWidth,\n coordinateSystem,\n updateTriggers\n });\n }\n}\n\nSplineLayer.layerName = 'SplineLayer';\nSplineLayer.defaultProps = defaultProps;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ZoomableTextLayer} from '../common-layers/zoomable-text-layer/zoomable-text-layer';\n\nexport class EdgeLabelLayer extends CompositeLayer {\n static layerName = 'EdgeLabelLayer';\n\n renderLayers() {\n const {data, getLayoutInfo, positionUpdateTrigger = 0, stylesheet} = this.props as any;\n return [\n new ZoomableTextLayer(\n this.getSubLayerProps({\n id: 'edge-label-layer',\n data,\n getPosition: (e) => {\n const {sourcePosition, targetPosition, controlPoints = []} = getLayoutInfo(e);\n // consider all the points on this edge\n const allPoints = [sourcePosition, targetPosition, ...controlPoints];\n const sumX = allPoints.reduce((res, p) => res + p[0], 0);\n const sumY = allPoints.reduce((res, p) => res + p[1], 0);\n // find the centroid of those points\n return [sumX / allPoints.length, sumY / allPoints.length];\n },\n getAngle: (e) => {\n const {sourcePosition, targetPosition} = getLayoutInfo(e);\n // sort the nodes from left to right\n const [newSourcePosition, newTargetPosition] =\n sourcePosition[0] < targetPosition[0]\n ? [sourcePosition, targetPosition]\n : [targetPosition, sourcePosition];\n // angle in degrees\n const deltaX = newTargetPosition[0] - newSourcePosition[0];\n const deltaY = newTargetPosition[1] - newSourcePosition[1];\n return (Math.atan2(deltaY, deltaX) * -180) / Math.PI;\n },\n ...stylesheet.getDeckGLAccessors(),\n updateTriggers: {\n ...stylesheet.getDeckGLUpdateTriggers(),\n getPosition: positionUpdateTrigger\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\n\nimport {FlowPathLayer} from '../common-layers/flow-path-layer/flow-path-layer';\n\nexport class FlowLayer extends CompositeLayer {\n static layerName = 'FlowLayer';\n\n renderLayers() {\n const {data, getLayoutInfo, positionUpdateTrigger = 0, stylesheet} = this.props as any;\n return [\n new FlowPathLayer(\n this.getSubLayerProps({\n id: '__flow-layer',\n data,\n ...stylesheet.getDeckGLAccessors(),\n getSourcePosition: (e) => getLayoutInfo(e).sourcePosition,\n getTargetPosition: (e) => getLayoutInfo(e).targetPosition,\n parameters: {\n depthTest: false\n },\n updateTriggers: {\n ...stylesheet.getDeckGLUpdateTriggers(),\n getSourcePosition: positionUpdateTrigger,\n getTargetPosition: positionUpdateTrigger\n }\n })\n )\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import {Buffer, Transform} from '@luma.gl/core';\nimport {LineLayer} from '@deck.gl/layers';\nimport {window} from 'global';\n\nimport {vs} from './flow-path-layer-vertex.glsl';\nimport {fs} from './flow-path-layer-fragment.glsl';\n// import {tfvs} from './flow-path-layer-vertex-tf.glsl';\n\nconst defaultProps = {\n ...LineLayer.defaultProps,\n getWidth: {type: 'accessor', value: 1},\n getSpeed: {type: 'accessor', value: 0}\n};\n\n/* eslint-disable camelcase */\nexport class FlowPathLayer extends LineLayer {\n getShaders() {\n const projectModule = this.use64bitPositions() ? 'project64' : 'project32';\n return {vs, fs, modules: [projectModule, 'picking']};\n }\n\n initializeState() {\n super.initializeState();\n this.getAttributeManager().addInstanced({\n instanceSpeeds: {\n size: 1,\n transition: true,\n accessor: 'getSpeed',\n defaultValue: 0\n },\n instanceTailLengths: {\n size: 1,\n transition: true,\n accessor: 'getTailLength',\n defaultValue: 1\n }\n });\n this.setupTransformFeedback();\n this.setState({\n ...this.state,\n animation: window.requestAnimationFrame(this.animate.bind(this))\n });\n }\n\n animate() {\n const {transform} = this.state as any;\n if (transform) {\n transform.run();\n transform.swap();\n }\n this.setState({\n animation: window.requestAnimationFrame(this.animate.bind(this))\n });\n }\n\n updateState({props, oldProps, changeFlags}) {\n super.updateState({props, oldProps, changeFlags} as any);\n const {speedsBuffer} = this.state as any;\n\n const speedChanged =\n changeFlags.dataChanged ||\n props.fp64 !== oldProps.fp64 ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getSpeed));\n\n if (speedChanged) {\n const speeds = new Float32Array(props.data.length);\n for (let i = 0; i < props.data.length; i++) {\n speeds[i] =\n typeof props.getSpeed === 'function' ? props.getSpeed(props.data[i]) : props.getSpeed;\n }\n speedsBuffer.subData({data: speeds});\n }\n\n if (props.fp64 !== oldProps.fp64) {\n if (this.state.model) {\n (this.state.model as any).delete();\n }\n this.setState({model: this._getModel()});\n this.getAttributeManager().invalidateAll();\n }\n }\n\n finalizeState() {\n super.finalizeState(this.context);\n window.cancelAnimationFrame((this.state as any).animation);\n }\n\n setupTransformFeedback() {\n throw new Error('Not implemented');\n // const {gl} = this.context;\n // const elementCount = this.props.data && this.props.data.length;\n // if (elementCount) {\n // const instanceOffsets = new Float32Array(elementCount);\n // const instanceSpeeds = new Float32Array(elementCount);\n // const offsetBuffer = new Buffer(gl, instanceOffsets);\n // const speedsBuffer = new Buffer(gl, instanceSpeeds);\n\n // this.setState({\n // speedsBuffer,\n // transform: new Transform(gl, {\n // id: 'transform-offset',\n // vs: tfvs,\n // elementCount,\n // sourceBuffers: {\n // a_offset: offsetBuffer,\n // a_speed: speedsBuffer\n // },\n // feedbackMap: {\n // a_offset: 'v_offset'\n // }\n // })\n // });\n // }\n }\n\n draw({uniforms}) {\n throw new Error('Not implemented');\n // const {transform} = this.state;\n // if (!transform) {\n // return;\n // }\n\n // const {viewport} = this.context;\n // const {widthUnits, widthScale, widthMinPixels, widthMaxPixels} = this.props;\n\n // const widthMultiplier = widthUnits === 'pixels' ? viewport.distanceScales.metersPerPixel[2] : 1;\n\n // const offsetBuffer = transform.getBuffer('v_offset');\n // offsetBuffer.setAccessor({divisor: 1});\n\n // this.state.model\n // .setAttributes({\n // instanceOffsets: offsetBuffer\n // })\n // .setUniforms(\n // Object.assign({}, uniforms, {\n // widthScale: widthScale * widthMultiplier,\n // widthMinPixels,\n // widthMaxPixels\n // })\n // )\n // .draw();\n\n // offsetBuffer.setAccessor({divisor: 0});\n }\n}\n\nFlowPathLayer.layerName = 'FlowPathLayer';\n(FlowPathLayer as any).defaultProps = defaultProps;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const vs = /* glsl */ `\\\n#define SHADER_NAME flow-path-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec4 instanceSourceTargetPositions64xyLow;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute float instanceWidths;\nattribute float instanceSpeeds;\nattribute float instanceOffsets;\nattribute float instanceTailLengths;\n\nuniform float opacity;\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\n\nvarying vec4 vColor;\nvarying float segmentIndex;\nvarying float speed;\nvarying float pathLength;\nvarying float tailLength;\nvarying float offset;\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n vec2 offset_screenspace = dir_screenspace * offset_direction * width / 2.0;\n vec2 offset_clipspace = project_pixel_size_to_clipspace(offset_screenspace);\n\n return offset_clipspace;\n}\n\nvoid main(void) {\n // Position\n vec4 source = project_position_to_clipspace(instanceSourcePositions, instanceSourceTargetPositions64xyLow.xy, vec3(0.));\n vec4 target = project_position_to_clipspace(instanceTargetPositions, instanceSourceTargetPositions64xyLow.zw, vec3(0.));\n\n // Multiply out width and clamp to limits\n float widthPixels = clamp(\n project_size_to_pixel(instanceWidths * widthScale),\n widthMinPixels, widthMaxPixels\n );\n\n // linear interpolation of source & target to pick right coord\n segmentIndex = positions.x;\n speed = instanceSpeeds;\n tailLength = project_size_to_pixel(instanceTailLengths * widthScale);\n offset = instanceOffsets;\n pathLength = distance(instanceSourcePositions, instanceTargetPositions);\n vec4 p = mix(source, target, segmentIndex);\n\n // extrude\n vec2 offset = getExtrusionOffset(target.xy - source.xy, positions.y, widthPixels);\n gl_Position = p + vec4(offset, 0.0, 0.0);\n\n // Color\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const fs = /* glsl */ `\\\n#define SHADER_NAME flow-path-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying float segmentIndex;\nvarying float speed;\nvarying float offset;\nvarying float pathLength;\nvarying float tailLength;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n\n if (speed == 0.0) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n } else {\n // the portion of the visible segment (0 to 1) , ex: 0.3\n // edge cases: pathLength = 0 or tailLength > pathLength\n float segFragment = 0.0;\n if (pathLength != 0.0) {\n segFragment = tailLength / pathLength;\n }\n if (tailLength > pathLength) {\n segFragment = 1.0;\n }\n float startSegmentIndex = mod(offset, 60.0) / 60.0;\n // the end offset, cap to 1.0 (end of the line)\n float endSegmentIndex = min(startSegmentIndex + segFragment, 1.0);\n if (segmentIndex < startSegmentIndex || segmentIndex > endSegmentIndex) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n } else {\n // fading tail\n float portion = (segmentIndex - startSegmentIndex) / segFragment;\n gl_FragColor[3] = portion;\n }\n }\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Edge} from '../graph/edge';\nimport {Node} from '../graph/node';\nimport {Graph} from '../graph/graph';\n\n/**\n * @deprecated Use `new Graph(name, nodes, edges)`\n * Create a graph from a list of Nodes and edges\n */\nexport function createGraph(props: {name; nodes; edges; nodeParser; edgeParser}) {\n const {name, nodes, edges, nodeParser, edgeParser} = props;\n // create a new empty graph\n const graph = new Graph();\n\n const graphName = name || Date.now();\n graph.setGraphName(graphName);\n\n // add nodes\n const glNodes = nodes.map((node) => {\n const {id} = nodeParser(node);\n return new Node({\n id,\n data: node\n });\n });\n graph.batchAddNodes(glNodes);\n\n const glEdges = edges.map((edge) => {\n const {id, sourceId, targetId, directed} = edgeParser(edge);\n return new Edge({\n id,\n sourceId,\n targetId,\n directed,\n data: edge\n });\n });\n graph.batchAddEdges(glEdges);\n return graph;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {NodeOptions} from '../graph/node';\nimport {log} from '../utils/log';\n\nexport function basicNodeParser(node: any): Pick<NodeOptions, 'id'> {\n if (node.id === undefined) {\n log.error('Invalid node: id is missing.')();\n return null;\n }\n return {id: node.id};\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {EdgeOptions} from '../graph/edge';\nimport {log} from '../utils/log';\n\nexport function basicEdgeParser(edge: any): Omit<EdgeOptions, 'data'> {\n const {id, directed, sourceId, targetId} = edge;\n\n if (sourceId === undefined || targetId === undefined) {\n log.error('Invalid edge: sourceId or targetId is missing.')();\n return null;\n }\n\n return {\n id,\n directed: directed || false,\n sourceId,\n targetId\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {createGraph} from './create-graph';\nimport {basicNodeParser} from './node-parsers';\nimport {basicEdgeParser} from './edge-parsers';\nimport {log} from '../utils/log';\n\nexport const JSONLoader = ({json, nodeParser = basicNodeParser, edgeParser = basicEdgeParser}) => {\n const {name = 'default', nodes, edges} = json;\n if (!nodes) {\n log.error('Invalid graph: nodes is missing.')();\n return null;\n }\n\n const graph = createGraph({name, nodes, edges, nodeParser, edgeParser});\n return graph;\n};\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Component, render} from 'preact';\n\n// import {FlyToInterpolator} from '@deck.gl/core';\nimport type {Deck, Viewport, Widget, WidgetPlacement} from '@deck.gl/core';\nimport {LongPressButton} from './long-press-button';\n\nexport const ViewControlWrapper = ({children}) => (\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n position: 'absolute',\n zIndex: 99,\n userSelect: 'none'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const NavigationButtonContainer = ({children}) => (\n <div\n style={{\n background: '#f7f7f7',\n borderRadius: '23px',\n border: '0.5px solid #eaeaea',\n boxShadow: 'inset 11px 11px 5px -7px rgba(230, 230, 230, 0.49)',\n height: '46px',\n width: '46px'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport type NavigationButtonProps = {\n left: any;\n top: any;\n rotate?: number;\n children?: any;\n onClick?: () => void;\n};\n\nexport const NavigationButton = (props: NavigationButtonProps) => (\n <div\n onClick={props.onClick}\n style={{\n color: '#848484',\n cursor: 'pointer',\n position: 'absolute',\n left: props.left,\n top: props.top,\n transform: `rotate(${props.rotate || 0}deg)`\n // &:hover,\n // &:active {\n // color: #00ade6;\n // }\n }}\n >\n {' '}\n {props.children}{' '}\n </div>\n);\n\nexport const ZoomControlWrapper = ({children}) => (\n <div\n style={{\n alignItems: 'center',\n background: '#f7f7f7',\n border: '0.5px solid #eaeaea',\n display: 'flex',\n flexDirection: 'column',\n marginTop: '6px',\n padding: '2px 0',\n width: '18px'\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const VerticalSlider = ({children}) => (\n <div\n style={{\n display: 'inline-block',\n height: '100px',\n padding: '0',\n width: '10px'\n\n // > input[type='range'][orient='vertical'] {\n // -webkit-appearance: slider-vertical;\n // height: 100px;\n // padding: 0;\n // margin: 0;\n // width: 10px;\n // }\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport const ZoomControlButton = ({children}) => (\n <div\n style={{\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n margin: '-4px'\n\n // &:hover,\n // &:active {\n // color: #00ade6;\n // }\n }}\n >\n {' '}\n {children}{' '}\n </div>\n);\n\nexport type ViewControlProps = {\n id?: string;\n viewId?: string;\n placement?: WidgetPlacement;\n fitBounds: () => void;\n panBy?: (dx: number, dy: number) => void;\n zoomBy?: (delta: number) => void;\n zoomLevel: number;\n minZoom: number;\n maxZoom: number;\n deltaPan: number;\n deltaZoom: number;\n /** CSS inline style overrides. */\n style?: Partial<CSSStyleDeclaration>;\n /** Additional CSS class. */\n className?: string;\n};\n\nexport class ViewControl extends Component<ViewControlProps> {\n static displayName = 'ViewControl';\n\n static defaultProps: Required<ViewControlProps> = {\n id: undefined,\n viewId: undefined,\n placement: 'top-left',\n fitBounds: () => {},\n panBy: () => {},\n zoomBy: () => {},\n zoomLevel: 1,\n deltaPan: 10,\n deltaZoom: 0.1,\n minZoom: 0.1,\n maxZoom: 1,\n style: {},\n className: ''\n };\n\n // pan actions\n panUp = () => this.props.panBy(0, this.props.deltaPan);\n panDown = () => this.props.panBy(0, -1 * this.props.deltaPan);\n panLeft = () => this.props.panBy(this.props.deltaPan, 0);\n panRight = () => this.props.panBy(-1 * this.props.deltaPan, 0);\n\n // zoom actions\n zoomIn = () => this.props.zoomBy(this.props.deltaZoom);\n zoomOut = () => this.props.zoomBy(-1 * this.props.deltaZoom);\n onChangeZoomLevel = (evt) => {\n const delta = evt.target.value - this.props.zoomLevel;\n this.props.zoomBy(delta);\n };\n\n render() {\n const buttons = [\n {top: -2, left: 14, rotate: 0, onClick: this.panUp, content: '\u25B2', key: 'up'},\n {top: 12, left: 0, rotate: -90, onClick: this.panLeft, content: '\u25C0', key: 'left'},\n {top: 12, left: 28, rotate: 90, onClick: this.panRight, content: '\u25B6', key: 'right'},\n {top: 25, left: 14, rotate: 180, onClick: this.panDown, content: '\u25BC', key: 'down'}\n ];\n\n return (\n <ViewControlWrapper>\n <NavigationButtonContainer>\n {buttons.map((b: any) => (\n <NavigationButton key={b.key} top={`${b.top}px`} left={`${b.left}px`} rotate={b.rotate}>\n <LongPressButton onClick={b.onClick}>{b.content}</LongPressButton>\n </NavigationButton>\n ))}\n <NavigationButton\n top={'12px'}\n left={'16px'}\n onClick={() => {\n // console.log('on click fit bounds') || this.props.fitBounds;\n }}\n >\n {'\u00A4'}\n </NavigationButton>\n </NavigationButtonContainer>\n <ZoomControlWrapper>\n <ZoomControlButton>\n <LongPressButton onClick={this.zoomIn}>{'+'}</LongPressButton>\n </ZoomControlButton>\n <VerticalSlider>\n <input\n type=\"range\"\n value={this.props.zoomLevel}\n min={this.props.minZoom}\n max={this.props.maxZoom}\n step={this.props.deltaZoom}\n onChange={this.onChangeZoomLevel}\n /* @ts-expect-error TODO */\n orient=\"vertical\"\n />\n </VerticalSlider>\n <ZoomControlButton>\n <LongPressButton onClick={this.zoomOut}>{'-'}</LongPressButton>\n </ZoomControlButton>\n </ZoomControlWrapper>\n </ViewControlWrapper>\n );\n }\n}\n\nexport class ViewControlWidget implements Widget<ViewControlProps> {\n id = 'zoom';\n props: ViewControlProps;\n placement: WidgetPlacement = 'top-left';\n orientation: 'vertical' | 'horizontal' = 'vertical';\n viewId?: string | null = null;\n viewports: {[id: string]: Viewport} = {};\n deck?: Deck<any>;\n element?: HTMLDivElement;\n\n constructor(props: ViewControlProps) {\n this.props = {...ViewControl.defaultProps, ...props};\n this.id = props.id || 'zoom';\n this.viewId = props.viewId || null;\n this.placement = props.placement || 'top-left';\n // this.orientation = props.orientation || 'vertical';\n // props.transitionDuration = props.transitionDuration || 200;\n // props.zoomInLabel = props.zoomInLabel || 'Zoom In';\n // props.zoomOutLabel = props.zoomOutLabel || 'Zoom Out';\n props.style = props.style || {};\n this.props = props;\n }\n\n onAdd({deck}: {deck: Deck<any>}): HTMLDivElement {\n this.deck = deck;\n this.element = document.createElement('div');\n\n const {style, className} = this.props;\n this.element.classList.add('deck-widget', 'deck-widget-zoom');\n if (className) {\n this.element.classList.add(className);\n }\n if (style) {\n Object.entries(style).map(([key, value]) =>\n this.element.style.setProperty(key, value as string)\n );\n }\n const ui = (\n <ViewControl\n {...this.props}\n zoomBy={this.handleDeltaZoom.bind(this)}\n panBy={this.handlePanBy.bind(this)}\n />\n );\n render(ui, this.element);\n\n return this.element;\n }\n\n onRemove() {\n this.deck = undefined;\n this.element = undefined;\n }\n\n setProps(props: Partial<ViewControlProps>) {\n Object.assign(this.props, props);\n }\n\n onViewportChange(viewport: Viewport) {\n this.viewports[viewport.id] = viewport;\n }\n\n handleDeltaZoom(deltaZoom: number) {\n // console.log('Handle delta zoom');\n for (const view of this.deck.getViewports()) {\n this.handleZoomView(view, view.zoom + deltaZoom);\n }\n }\n\n handlePanBy(deltaX: number, deltaY: number) {\n // console.log('Handle panby', deltaX, deltaY);\n for (const viewport of this.deck.getViewports()) {\n this.handlePanViewport(viewport, deltaX, deltaY);\n }\n }\n\n handleZoomView(viewport: Viewport, nextZoom: number) {\n const viewId = this.viewId || viewport?.id || 'default-view';\n // @ts-expect-error TODO we lack a proper API for getting viewStates\n const viewState = this.deck.viewManager.viewState || viewport;\n const nextViewState = {\n ...viewState,\n zoom: nextZoom\n // transitionDuration: this.props.transitionDuration,\n // transitionInterpolator: new FlyToInterpolator()\n };\n\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});\n }\n\n handlePanViewport(viewport: Viewport, deltaX: number, deltaY: number) {\n const viewId = this.viewId || viewport?.id || 'default-view';\n // @ts-expect-error TODO we lack a proper API for getting viewStates\n const viewState = this.deck.viewManager.viewState || viewport;\n // console.log('Handle pan viewport', deltaX, deltaY, viewState);\n const nextViewState = {\n ...viewState,\n position: [viewport.position[0] + deltaX, viewport.position[1] + deltaY]\n };\n\n // @ts-ignore Using private method temporary until there's a public one\n this.deck._onViewStateChange({viewId, viewState: nextViewState, interactionState: {}});\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Component} from 'preact';\n\nexport type LongPressButtonProps = {\n onClick: () => void;\n children: any;\n};\n\nexport class LongPressButton extends Component<LongPressButtonProps> {\n buttonPressTimer: ReturnType<typeof setTimeout> | null = null;\n\n _repeat = () => {\n if (this.buttonPressTimer) {\n this.props.onClick();\n this.buttonPressTimer = setTimeout(this._repeat, 100);\n }\n };\n\n _handleButtonPress = () => {\n this.buttonPressTimer = setTimeout(this._repeat, 100);\n };\n\n _handleButtonRelease = () => {\n if (this.buttonPressTimer) {\n clearTimeout(this.buttonPressTimer);\n }\n this.buttonPressTimer = null;\n };\n\n render() {\n return (\n <div className=\"deck-widget-button\">\n <div\n style={{\n pointerEvents: 'auto'\n }}\n onMouseDown={(event) => {\n this._handleButtonPress();\n document.addEventListener('mouseup', this._handleButtonRelease, {once: true});\n }}\n >\n {this.props.children}\n </div>\n </div>\n );\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {createGraph} from './create-graph';\nimport {log} from '../utils/log';\nimport {basicNodeParser} from './node-parsers';\nimport {basicEdgeParser} from './edge-parsers';\n\n/** @deprecated Use loadSimpleJSONGraph */\nexport const JSONLoader = ({json, nodeParser, edgeParser}) =>\n loadSimpleJSONGraph(json, {nodeParser, edgeParser});\n\n/** A loader for a simple graph format */\nexport function loadSimpleJSONGraph(\n json: Record<string, unknown>,\n options?: {nodeParser; edgeParser}\n) {\n const {nodeParser = basicNodeParser, edgeParser = basicEdgeParser} = options;\n const {name = 'default', nodes, edges} = json;\n if (!nodes) {\n log.error('Invalid graph: nodes is missing.')();\n return null;\n }\n\n const graph = createGraph({name, nodes, edges, nodeParser, edgeParser});\n return graph;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;oBAAAA;EAAA;;;;;;;;;;;;;;;;;ACIA,iBAAyB;AAElB,IAAM,MAAM,IAAI,eAAI,EAAC,IAAI,eAAc,CAAC,EAAE,OAAM;AAEvD,IAAI,IAAI,EAAC,OAAO,iBAAM,KAAI,GAAG,iCAAiC,EAAC;;;ACJzD,IAAO,QAAP,MAAY;EACC,QAAQ,oBAAI,IAAG;;;;;EAMhC,IAAI,KAAM;AAXZ;AAYI,YAAO,UAAK,MAAM,IAAI,GAAG,MAAlB,mBAAqB;EAC9B;;;;;;EAOA,IAAI,KAAQ,aAAwC,SAAe;AACjE,UAAM,SAAS,KAAK,MAAM,IAAI,GAAG;AAEjC,UAAM,aAAa,WAAW,UAAa,UAAU,OAAO;AAC5D,QAAI,CAAC,YAAY;AACf;IACF;AAEA,SAAK,MAAM,IAAI,KAAK,EAAC,SAAS,OAAO,YAAW,EAAE,CAAC;EACrD;;;;ACbI,IAAO,QAAP,cAAqB,YAAW;;EAE5B,WAAiC,CAAA;;EAEjC,WAAiC,CAAA;;;;;EAKjC,QAAgB,KAAK,IAAG,EAAG,SAAQ;;EAEpC,UAAU;;EAET,SAAS,IAAI,MAAK;;;;;EAS1B,YAAY,cAAiC;AAC3C,UAAK;AAEL,QAAI,wBAAwB,OAAO;AAEjC,YAAM,QAAQ;AACd,WAAK,SAAQ,+BAAO,UAAS,KAAK;AAClC,WAAK,WAAW,MAAM;AACtB,WAAK,WAAW,MAAM;IACxB,OAAO;AAEL,YAAM,QAAQ;AACd,WAAK,SAAQ,+BAAO,SAAQ,KAAK;AACjC,WAAK,eAAc,+BAAO,UAAS,CAAA,CAAE;AACrC,WAAK,eAAc,+BAAO,UAAS,CAAA,CAAE;IACvC;EACF;;;;;EAMA,aAAa,MAAY;AACvB,SAAK,QAAQ;EACf;;;;EAKA,eAAY;AACV,WAAO,KAAK,MAAM,SAAQ;EAC5B;;;;;EAMA,YAAe,IAA6B;AAC1C,QAAI;AACF,WAAK,cAAc,IAAI,YAAY,kBAAkB,CAAC;AACtD,aAAO,GAAE;IACX;AACE,WAAK,cAAc,IAAI,YAAY,gBAAgB,CAAC;IACtD;EACF;;;;;EAMA,QAAQ,MAAU;AAEhB,SAAK,SAAS,KAAK,MAAK,CAAE,IAAI;AAE9B,SAAK,aAAY;AACjB,SAAK,cAAc,IAAI,YAAY,eAAe,EAAC,KAAI,CAAQ,CAAC;EAClE;;;;;EAMA,cAAc,OAAa;AAEzB,SAAK,WAAW,MAAM,OACpB,CAAC,KAAK,SAAQ;AACZ,UAAI,KAAK,MAAK,CAAE,IAAI;AACpB,WAAK,cAAc,IAAI,YAAY,eAAe,EAAC,KAAI,CAAQ,CAAC;AAChE,aAAO;IACT,GACA,EAAC,GAAG,KAAK,SAAQ,CAAC;AAEpB,SAAK,aAAY;EACnB;;;;;EAMA,WAAQ;AACN,SAAK,aAAa,SAAS,MAAM,OAAO,OAAO,KAAK,QAAQ,CAAC;AAE7D,WAAO,KAAK,OAAO,IAAI,OAAO;EAChC;;;;;EAMA,aAAU;AACR,WAAO,KAAK;EACd;;;;;;EAOA,SAAS,QAAuB;AAC9B,WAAO,KAAK,SAAS,MAAM;EAC7B;;;;;EAMA,WAAW,MAAU;AACnB,SAAK,SAAS,KAAK,MAAK,CAAE,IAAI;AAC9B,SAAK,aAAY;AACjB,SAAK,cAAc,IAAI,YAAY,iBAAiB,EAAC,KAAI,CAAQ,CAAC;EACpE;;;;;EAMA,QAAQ,MAAU;AAChB,UAAM,aAAa,KAAK,SAAS,KAAK,gBAAe,CAAE;AACvD,UAAM,aAAa,KAAK,SAAS,KAAK,gBAAe,CAAE;AAEvD,QAAI,CAAC,cAAc,CAAC,YAAY;AAC9B,UAAI,KAAK,sBAAsB,KAAK,wCAAwC,EAAC;AAC7E;IACF;AAEA,SAAK,SAAS,KAAK,MAAK,CAAE,IAAI;AAC9B,eAAW,kBAAkB,IAAI;AACjC,eAAW,kBAAkB,IAAI;AACjC,SAAK,aAAY;AACjB,SAAK,cAAc,IAAI,YAAY,eAAe,EAAC,KAAI,CAAQ,CAAC;EAClE;;;;;EAMA,cAAc,OAAa;AACzB,UAAM,QAAQ,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC;AAC1C,SAAK,aAAY;EACnB;;;;;EAMA,WAAW,MAAU;AACnB,SAAK,SAAS,KAAK,MAAK,CAAE,IAAI;AAC9B,SAAK,aAAY;AACjB,SAAK,cAAc,IAAI,YAAY,iBAAiB,EAAC,KAAI,CAAQ,CAAC;EACpE;;;;;EAMA,WAAW,QAAuB;AAChC,UAAM,OAAO,KAAK,SAAS,MAAM;AACjC,QAAI,CAAC,MAAM;AACT,UAAI,KAAK,yBAAyB,wBAAwB,EAAC;AAC3D;IACF;AAEA,SAAK,kBAAiB,EAAG,QAAQ,CAAC,MAAK;AACrC,aAAO,KAAK,SAAS,EAAE,MAAK,CAAE;IAChC,CAAC;AAED,WAAO,KAAK,SAAS,MAAM;AAC3B,SAAK,aAAY;AACjB,SAAK,cAAc,IAAI,YAAY,iBAAiB,EAAC,KAAI,CAAQ,CAAC;EACpE;;;;;EAMA,WAAQ;AACN,SAAK,aAAa,SAAS,MAAM,OAAO,OAAO,KAAK,QAAQ,CAAC;AAE7D,WAAO,KAAK,OAAO,IAAI,OAAO;EAChC;;;;;EAMA,aAAU;AACR,WAAO,KAAK;EACd;;;;;EAMA,WAAW,QAAuB;AAChC,UAAM,OAAO,KAAK,SAAS,MAAM;AACjC,QAAI,CAAC,MAAM;AACT,UAAI,KAAK,yBAAyB,wBAAwB,EAAC;AAC3D;IACF;AACA,UAAM,aAAa,KAAK,SAAS,KAAK,gBAAe,CAAE;AACvD,UAAM,aAAa,KAAK,SAAS,KAAK,gBAAe,CAAE;AAEvD,WAAO,KAAK,SAAS,MAAM;AAC3B,eAAW,qBAAqB,IAAI;AACpC,eAAW,qBAAqB,IAAI;AACpC,SAAK,aAAY;EACnB;;;;;;EAOA,SAAS,QAAuB;AAC9B,WAAO,KAAK,SAAS,MAAM;EAC7B;;;;;;EAOA,kBAAkB,QAAuB;AACvC,UAAM,OAAO,KAAK,SAAS,MAAM;AACjC,QAAI,CAAC,MAAM;AACT,UAAI,KAAK,uBAAuB,wBAAwB,EAAC;AACzD,aAAO,CAAA;IACT;AACA,WAAO,KAAK,kBAAiB;EAC/B;;;;;;EAOA,gBAAgB,QAAuB;AACrC,UAAM,OAAO,KAAK,SAAS,MAAM;AACjC,QAAI,CAAC,MAAM;AACT,UAAI,KAAK,uBAAuB,wBAAwB,EAAC;AACzD,aAAO,CAAA;IACT;AACA,WAAO,KAAK,cAAa,EAAG,IAAI,CAAC,kBAAkB,KAAK,SAAS,aAAa,CAAC;EACjF;;;;;;EAOA,UAAU,QAAuB;AAC/B,UAAM,OAAO,KAAK,SAAS,MAAM;AACjC,QAAI,CAAC,MAAM;AACT,UAAI,KAAK,uBAAuB,wBAAwB,EAAC;AACzD,aAAO;IACT;AACA,WAAO,KAAK,UAAS;EACvB;;;;EAKA,aAAU;AACR,SAAK,WAAW,CAAA;AAChB,SAAK,aAAY;EACnB;;;;EAKA,aAAU;AACR,SAAK,WAAW,CAAA;AAChB,SAAK,aAAY;EACnB;;;;EAKA,QAAK;AACH,SAAK,WAAU;AACf,SAAK,WAAU;AACf,SAAK,aAAY;EACnB;;;;EAKA,gBAAa;AACX,SAAK,aAAY;EACnB;;;;;EAMA,UAAO;AACL,WAAO,OAAO,KAAK,KAAK,QAAQ,EAAE,WAAW;EAC/C;;;;;;EAOA,OAAO,OAAY;AACjB,QAAI,CAAC,SAAS,EAAE,iBAAiB,QAAQ;AACvC,aAAO;IACT;AACA,WAAO,KAAK,YAAY,MAAM;EAChC;EAEA,eAAY;AACV,SAAK,WAAW;EAClB;EAEA,aAAa,KAAwB,aAAoB;AACvD,SAAK,OAAO,IAAI,KAAK,aAAoB,KAAK,OAAO;EACvD;;;;AC9VK,IAAM,aAAa;EACxB,eAAe;EACf,MAAM;EACN,mBAAmB;EACnB,UAAU;EACV,aAAa;EACb,IAAI;EACJ,WAAW;EACX,uBAAuB;EACvB,gBAAgB;EAChB,iBAAiB;EACjB,mBAAmB;EACnB,YAAY;EACZ,uBAAuB;EACvB,gBAAgB;EAChB,sBAAsB;EACtB,eAAe;EACf,8BAA8B;EAC9B,uBAAuB;EACvB,uBAAuB;EACvB,gBAAgB;EAChB,mBAAmB;EACnB,YAAY;EACZ,QAAQ;EACR,kBAAkB;EAClB,SAAS;EACT,eAAe;EACf,MAAM;EACN,MAAM;EACN,gBAAgB;EAChB,OAAO;EACP,0BAA0B;EAC1B,mBAAmB;EACnB,yBAAyB;EACzB,kBAAkB;EAClB,iBAAiB;EACjB,QAAQ;EACR,cAAc;EACd,KAAK;EACL,cAAc;EACd,MAAM;EACN,oBAAoB;EACpB,WAAW;EACX,eAAe;EACf,MAAM;EACN,cAAc;EACd,KAAK;EACL,qBAAqB;EACrB,cAAc;EACd,YAAY;EACZ,mBAAmB;EACnB,wBAAwB;EACxB,iBAAiB;EACjB,wBAAwB;EACxB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;EAClB,sBAAsB;EACtB,eAAe;EACf,WAAW;EACX,GAAG;;;;AC1DE,IAAM,cAAc;AAKpB,IAAM,aAAa;EACxB,SAAS;EACT,OAAO;EACP,UAAU;EACV,UAAU;;AAGL,IAAM,aAAa;EACxB,SAAS;EACT,OAAO;EACP,UAAU;EACV,UAAU;;AAIL,IAAM,YAAY;EACvB,QAAQ;EACR,WAAW;EACX,mBAAmB;EACnB,wBAAwB;EACxB,MAAM;EACN,OAAO;EACP,QAAQ;;AAIH,IAAM,YAAY;EACvB,cAAc;EACd,MAAM;EACN,MAAM;;AAID,IAAM,sBAAsB;EACjC,OAAO;EACP,MAAM;;;;AC7BF,IAAO,OAAP,MAAW;EACR;;EAEC;;EAEA,kBAAwC,CAAA;;EAEzC,QAAoC,WAAW;;EAE9C;;EAEA;;EAEQ,SAAS;;;;EAIzB,YAAY,EAAC,IAAI,aAAa,OAAO,0BAA0B,OAAO,OAAO,CAAA,EAAE,GAAc;AAC3F,SAAK,KAAK;AACV,SAAK,QAAQ;AACb,SAAK,cAAc;AACnB,SAAK,2BAA2B;EAClC;;;;;EAMA,QAAK;AACH,WAAO,KAAK;EACd;;;;;EAMA,YAAS;AACP,WAAO,OAAO,KAAK,KAAK,eAAe,EAAE;EAC3C;;;;;EAMA,cAAW;AACT,UAAM,SAAS,KAAK,MAAK;AACzB,WAAO,KAAK,kBAAiB,EAAG,OAAO,CAAC,OAAO,MAAK;AAClD,YAAM,aAAa,EAAE,WAAU;AAC/B,UAAI,cAAc,EAAE,gBAAe,MAAO,QAAQ;AAChD,iBAAS;MACX;AACA,aAAO;IACT,GAAG,CAAC;EACN;;;;;EAMA,eAAY;AACV,UAAM,SAAS,KAAK,MAAK;AACzB,WAAO,KAAK,kBAAiB,EAAG,OAAO,CAAC,OAAO,MAAK;AAClD,YAAM,aAAa,EAAE,WAAU;AAC/B,UAAI,cAAc,EAAE,gBAAe,MAAO,QAAQ;AAChD,iBAAS;MACX;AACA,aAAO;IACT,GAAG,CAAC;EACN;;;;;EAMA,gBAAa;AACX,UAAM,SAAS,KAAK,MAAK;AACzB,WAAO,KAAK,kBAAiB,EAAG,OAC9B,CAAC,UAAU,MAAK;AACd,UAAI,EAAE,gBAAe,MAAO,QAAQ;AAClC,iBAAS,KAAK,EAAE,gBAAe,CAAE;MACnC,OAAO;AACL,iBAAS,KAAK,EAAE,gBAAe,CAAE;MACnC;AACA,aAAO;IACT,GACA,CAAA,CAAyB;EAE7B;;;;;EAMA,oBAAiB;AACf,WAAO,OAAO,OAAO,KAAK,eAAe;EAC3C;;;;;;EAOA,iBAAiB,KAAW;AAE1B,QAAI,KAAK,eAAe,GAAG,GAAG;AAC5B,aAAO,KAAK,GAAG;IACjB,WAES,KAAK,MAAM,eAAe,GAAG,GAAG;AACvC,aAAO,KAAK,MAAM,GAAG;IACvB;AAEA,WAAO;EACT;;;;;EAMA,QAAQ,MAA6B;AACnC,SAAK,QAAQ;EACf;;;;;;EAOA,gBAAgB,KAAa,OAAc;AACzC,SAAK,MAAM,GAAG,IAAI;EACpB;;;;;EAMA,SAAS,OAAiC;AACxC,SAAK,QAAQ;EACf;;;;;EAMA,WAAQ;AACN,WAAO,KAAK;EACd;;;;;EAMA,kBAAkB,MAAmB;AACnC,UAAM,gBAAgB,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACxD,kBAAc,QAAQ,CAAC,MAAK;AAC1B,WAAK,gBAAgB,EAAE,EAAE,IAAI;AAC7B,QAAE,QAAQ,IAAI;IAChB,CAAC;EACH;;;;;EAMA,qBAAqB,MAAmB;AACtC,UAAM,gBAAgB,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACxD,kBAAc,QAAQ,CAAC,MAAK;AAC1B,QAAE,WAAW,IAAI;AACjB,aAAO,KAAK,gBAAgB,EAAE,EAAE;IAClC,CAAC;EACH;;;;EAKA,sBAAmB;AACjB,WAAO,OAAO,KAAK,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC;AACrE,SAAK,kBAAkB,CAAA;EACzB;EAEA,eAAY;AACV,WAAO,KAAK;EACd;EAEA,gCAA6B;AAC3B,WAAO,KAAK;EACd;;;;ACtLI,IAAO,OAAP,MAAW;;EAER;;EAEC;;EAEA;;EAEA;;EAEA;;EAEQ,SAAS;;EAER,kBAAwC,CAAA;;EAElD,QAAQ,WAAW;;;;;EAM1B,YAAY,EAAC,IAAI,UAAU,UAAU,MAAM,WAAW,MAAK,GAAc;AACvE,SAAK,KAAK;AACV,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,QAAQ;EACf;;;;;EAMA,QAAK;AACH,WAAO,KAAK;EACd;;;;;EAMA,aAAU;AACR,WAAO,KAAK;EACd;;;;;EAMA,kBAAe;AACb,WAAO,KAAK;EACd;;;;;EAMA,kBAAe;AACb,WAAO,KAAK;EACd;;;;;;EAOA,iBAAiB,KAAW;AAE1B,QAAI,KAAK,eAAe,GAAG,GAAG;AAC5B,aAAO,KAAK,GAAG;IACjB,WAES,KAAK,MAAM,eAAe,GAAG,GAAG;AACvC,aAAO,KAAK,MAAM,GAAG;IACvB;AAEA,WAAO;EACT;;;;;EAMA,QAAQ,MAA6B;AACnC,SAAK,QAAQ;EACf;;;;;;EAOA,gBAAgB,KAAa,OAAc;AACzC,SAAK,MAAM,GAAG,IAAI;EACpB;;;;;EAMA,SAAS,OAAa;AACpB,SAAK,QAAQ;EACf;;;;;EAMA,WAAQ;AACN,WAAO,KAAK;EACd;EAEA,QAAQ,MAAU;AAChB,SAAK,gBAAgB,KAAK,MAAK,CAAE,IAAI;EACvC;EAEA,WAAW,MAAU;AACnB,WAAO,KAAK,gBAAgB,KAAK,MAAK,CAAE;EAC1C;EAEA,oBAAiB;AACf,WAAO,OAAO,OAAO,KAAK,eAAe;EAC3C;;;;ACjII,IAAO,cAAP,cAA2B,YAAW;EAC1C;EAEiB;EACA;EACA,SAAS,IAAI,MAAK;EAC3B,eAAe;EACf,yBAAyB;EAMjC,YAAY,OAAiC,QAAoB;AAC/D,UAAK;AACL,QAAI,iBAAiB,OAAO;AAC1B,cAAQ;QACN,OAAO;QACP;;IAEJ;AAEA,SAAK,QAAQ;AACb,SAAK,SAAS,MAAM;AACpB,SAAK,UAAU,MAAM;EACvB;;EAIA,WAAW,MAAa;AACtB,SAAK,aAAa,SAAS,MACzB,KAAK,OAAO,SAAQ,EAAG,OAAO,CAAC,SAAS,KAAK,gBAAgB,IAAI,CAAC,CAAC;AAGrE,WAAO,KAAK,OAAO,IAAI,OAAO;EAChC;EAEA,WAAW,MAAK;AACd,SAAK,aAAa,SAAS,MACzB,KAAK,OAAO,SAAQ,EAAG,OAAO,CAAC,SAAS,KAAK,gBAAgB,IAAI,CAAC,CAAC;AAGrE,WAAO,KAAK,OAAO,IAAI,OAAO;EAChC;EAEA,kBAAkB,CAAC,SAAe,KAAK,QAAQ,gBAAgB,IAAI;EAEnE,kBAAkB,CAAC,SAAe,KAAK,QAAQ,gBAAgB,IAAI;EAEnE,kBAAkB,MAAM,KAAK,OAAO;EAEpC,sBAAsB,MAAM,KAAK,QAAQ;EAEzC,iBAAiB,MAAM,KAAK,QAAQ;;EAIpC,mBAAmB,CAAC,MAAM,GAAG,MAAM,KAAK,QAAQ,iBAAiB,MAAM,GAAG,CAAC;EAE3E,qBAAqB,CAAC,SAAS,KAAK,QAAQ,mBAAmB,IAAI;;;;EAKnE,iBAAiB,MAAK;AAKpB,SAAK,cAAc,IAAI,YAAY,eAAe,CAAC;EACrD;;;;EAKA,kBAAkB,MAAK;AAKrB,SAAK,cAAc,IAAI,YAAY,gBAAgB,CAAC;EACtD;;;;EAKA,gBAAgB,MAAK;AAKnB,SAAK,cAAc,IAAI,YAAY,cAAc,CAAC;EACpD;;;;EAKA,iBAAiB,MAAK;AAKpB,SAAK,cAAc,IAAI,YAAY,eAAe,CAAC;EACrD;EAEA,2BAA2B,CAAC,WAAU;AACpC,SAAK,eAAe;AACpB,SAAK,cAAa;EACpB;EAEA,sBAAsB,MAAK;AACzB,SAAK,yBAAyB;EAChC;EAEA,oBAAoB,MAAK;AACvB,SAAK,yBAAyB;AAC9B,SAAK,cAAa;EACpB;;EAIA,MAAM,MAAK;AAGT,SAAK,OAAO,iBAAiB,oBAAoB,KAAK,mBAAmB;AACzE,SAAK,OAAO,iBAAiB,kBAAkB,KAAK,iBAAiB;AACrE,SAAK,OAAO,iBAAiB,eAAe,KAAK,wBAAwB;AACzE,SAAK,OAAO,iBAAiB,iBAAiB,KAAK,wBAAwB;AAC3E,SAAK,OAAO,iBAAiB,eAAe,KAAK,wBAAwB;AACzE,SAAK,OAAO,iBAAiB,iBAAiB,KAAK,wBAAwB;AAE3E,SAAK,QAAQ,iBAAiB,iBAAiB,KAAK,cAAc;AAClE,SAAK,QAAQ,iBAAiB,kBAAkB,KAAK,eAAe;AACpE,SAAK,QAAQ,iBAAiB,gBAAgB,KAAK,aAAa;AAChE,SAAK,QAAQ,iBAAiB,iBAAiB,KAAK,cAAc;AAElE,SAAK,QAAQ,gBAAgB,KAAK,MAAM;AACxC,SAAK,QAAQ,MAAK;EACpB;EAEA,QAAQ,MAAK;AACX,SAAK,OAAO,oBAAoB,oBAAoB,KAAK,mBAAmB;AAC5E,SAAK,OAAO,oBAAoB,kBAAkB,KAAK,iBAAiB;AACxE,SAAK,OAAO,oBAAoB,eAAe,KAAK,wBAAwB;AAC5E,SAAK,OAAO,oBAAoB,iBAAiB,KAAK,wBAAwB;AAC9E,SAAK,OAAO,oBAAoB,eAAe,KAAK,wBAAwB;AAC5E,SAAK,OAAO,oBAAoB,iBAAiB,KAAK,wBAAwB;AAE9E,SAAK,QAAQ,oBAAoB,iBAAiB,KAAK,cAAc;AACrE,SAAK,QAAQ,oBAAoB,kBAAkB,KAAK,eAAe;AACvE,SAAK,QAAQ,oBAAoB,gBAAgB,KAAK,aAAa;AACnE,SAAK,QAAQ,oBAAoB,iBAAiB,KAAK,cAAc;EACvE;EAEA,SAAS,MAAM,KAAK,QAAQ,OAAM;EAElC,OAAO,MAAM,KAAK,QAAQ,KAAI;EAE9B,gBAAgB,MAAK;AACnB,QAAI,KAAK,gBAAgB,CAAC,KAAK,wBAAwB;AACrD,WAAK,cAAa;IACpB;EACF;EAEA,gBAAgB,MAAK;AACnB,SAAK,QAAQ,YAAY,KAAK,MAAM;AACpC,SAAK,QAAQ,OAAM;AACnB,SAAK,eAAe;EACtB;EAEA,aAAa,KAAK,aAAW;AAC3B,SAAK,OAAO,IAAI,KAAK,aAAa,KAAK,OAAO,UAAU,KAAK,QAAQ,OAAO;EAC9E;;;;ACpLF,oBAAoB;AASd,IAAO,cAAP,cAEI,YAAW;;EAEA,QAAgB;;EAEzB;EAEH,UAAU;EACV,QAA0B;;;;;EAMjC,YAAY,SAAiB;AAC3B,UAAK;AACL,SAAK,WAAW;EAClB;;;;;;EAOA,OAAO,QAAmB;AACxB,QAAI,CAAC,UAAU,EAAE,kBAAkB,cAAc;AAC/C,aAAO;IACT;AACA,WAAO,KAAK,UAAU,OAAO,aAAS,cAAAC,SAAQ,KAAK,UAAU,OAAO,QAAQ;EAC9E;;;EAKA,gBAAgB,OAAY;EAAG;;EAE/B,YAAY,OAAY;EAAG;;EAE3B,QAAK;EAAI;;EAET,SAAM;EAAI;;EAEV,SAAM;EAAI;;EAEV,OAAI;EAAI;;EAER,gBAAgB,MAAU;AACxB,WAAO,CAAC,GAAG,CAAC;EACd;;EAEA,gBAAgB,MAAU;AACxB,WAAO;MACL,MAAM,UAAU;MAChB,gBAAgB,CAAC,GAAG,CAAC;MACrB,gBAAgB,CAAC,GAAG,CAAC;MACrB,eAAe,CAAA;;EAEnB;;;;;;;EAQA,iBAAiB,MAAY,GAAW,GAAS;EAAG;;;;;EAMpD,mBAAmB,MAAU;EAAG;;EAItB,aAAa,OAAK;AAC1B,SAAK,QAAQ;AACb,SAAK,WAAW;EAClB;;EAGU,iBAAiB,MAAW;AACpC,SAAK,aAAa,aAAa;AAO/B,SAAK,cAAc,IAAI,YAAY,eAAe,CAAC;EACrD;;EAGU,kBAAkB,MAAW;AACrC,SAAK,aAAa,aAAa;AAO/B,SAAK,cAAc,IAAI,YAAY,gBAAgB,CAAC;EACtD;;EAGU,gBAAgB,MAAW;AACnC,SAAK,aAAa,MAAM;AAOxB,SAAK,cAAc,IAAI,YAAY,cAAc,CAAC;EACpD;;EAGU,iBAAiB,MAAW;AACpC,SAAK,aAAa,OAAO;AAOzB,SAAK,cAAc,IAAI,YAAY,eAAe,CAAC;EACrD;;;;AClHI,IAAO,gBAAP,cAA4B,YAAgC;EAM7C,QAAQ;EACjB,SAAuB;EACvB,WAAiC,CAAA;EACjC,mBAAqE,CAAA;EAE/E,YAAY,UAA+B,CAAA,GAAE;AAC3C,UAAM,EAAC,GAAG,cAAa,gBAAgB,GAAG,QAAO,CAAC;EACpD;EAEA,gBAAgB,OAAY;AAC1B,SAAK,YAAY,KAAK;EACxB;EAEA,wBAAqB;AACnB,SAAK,eAAc;AACnB,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;EAEA,QAAK;AACH,SAAK,sBAAqB;EAC5B;EAEA,SAAM;AACJ,SAAK,sBAAqB;EAC5B;EAEA,SAAM;AACJ,SAAK,sBAAqB;EAC5B;EAEA,YAAY,OAAY;AACtB,SAAK,SAAS;AACd,SAAK,WAAW,MAAM,SAAQ,EAAG,OAAO,CAAC,KAAK,SAAQ;AACpD,UAAI,KAAK,MAAK,CAAE,IAAI;AACpB,aAAO;IACT,GAAG,CAAA,CAAE;AACL,SAAK,mBAAmB,MAAM,SAAQ,EAAG,OAAO,CAAC,KAAK,SAAQ;AAC5D,UAAI,KAAK,MAAK,CAAE,IAAI,KAAK,SAAS,qBAAqB,IAAI;AAC3D,aAAO;IACT,GAAG,CAAA,CAAE;EACP;EAEA,0BAA0B,CAAC,aAAY;AACpC,SAAK,SAAiB,uBAAuB;EAChD;EAEA,kBAAkB,CAAC,SAAS,KAAK,iBAAiB,KAAK,MAAK,CAAE;EAE9D,kBAAkB,CAAC,SAAQ;AACzB,UAAM,YAAY,KAAK,iBAAiB,KAAK,gBAAe,CAAE;AAC9D,UAAM,YAAY,KAAK,iBAAiB,KAAK,gBAAe,CAAE;AAC9D,WAAO;MACL,MAAM,UAAU;MAChB,gBAAgB;MAChB,gBAAgB;MAChB,eAAe,CAAA;;EAEnB;EAEA,mBAAmB,CAAC,MAAM,GAAG,MAAK;AAChC,SAAK,iBAAiB,KAAK,MAAK,CAAE,IAAI,CAAC,GAAG,CAAC;AAC3C,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;;AAtEI,IAAO,eAAP;AACJ,cADW,cACJ,kBAAgD;EACrD,sBAAsB,CAAC,SACrB,CAAC,KAAK,iBAAiB,GAAG,GAAG,KAAK,iBAAiB,GAAG,CAAC;;;;ACjC7D;AAiBM,IAAO,iBAAP,cAA6B,YAAiC;EAU/C,QAAQ;EACnB,qBAAqB,oBAAI,IAAG;EAC5B;EACA;EAER,YAAY,SAA8B;AACxC,UAAM,OAAO;AAEb,SAAK,WAAW;MACd,GAAG,eAAc;MACjB,GAAG;;EAEP;EAEA,gBAAgB,OAAK;AACnB,SAAK,SAAS;EAChB;;EAGA,YAAY,OAAK;AACf,SAAK,SAAS;AAEd,SAAK,qBAAqB,IAAI,IAC5B,KAAK,OAAO,SAAQ,EAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,mBAAmB,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;EAEzF;EAEA,QAAK;AACH,SAAK,cAAa;AAElB,SAAK,eAAc;EACrB;EAEA,SAAM;AACJ,SAAK,cAAa;EACpB;EAEA,gBAAa;AAEX,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,UAAS;IACxB;AAEA,SAAK,UAAU,IAAI,OAAO,IAAI,IAAI,eAAe,YAAY,GAAG,EAAE,IAAI;AAEtE,SAAK,QAAQ,YAAY;MACvB,OAAO,KAAK,OAAO,SAAQ,EAAG,IAAI,CAAC,UAAU;QAC3C,IAAI,KAAK;QACT,GAAG,KAAK,mBAAmB,IAAI,KAAK,EAAE;QACtC;MACF,OAAO,KAAK,OAAO,SAAQ,EAAG,IAAI,CAAC,UAAU;QAC3C,IAAI,KAAK;QACT,QAAQ,KAAK,gBAAe;QAC5B,QAAQ,KAAK,gBAAe;QAC5B;MACF,SAAS,KAAK;KACf;AAED,SAAK,QAAQ,YAAY,CAAC,UAAS;AACjC,UAAI,MAAM,KAAK,SAAS,OAAO;AAC7B;MACF;AAEA,YAAM,KAAK,MAAM,QAAQ,CAAC,EAAC,IAAI,GAAGC,IAAE,MAClC,KAAK,mBAAmB,IAAI,IAAI;QAC9B,GAAGA;;QAEH,aAAa,CAACA,IAAG,GAAGA,IAAG,CAAC;OACzB,CAAC;AAGJ,WAAK,gBAAe;AACpB,WAAK,cAAa;IACpB;EACF;EAEA,SAAM;AACJ,UAAM,IAAI,MAAM,oBAAoB;EACtC;EAEA,OAAI;AACF,SAAK,QAAQ,UAAS;EACxB;EAEA,kBAAkB,CAAC,SAAQ;AACzB,UAAM,aAAa,KAAK,OAAO,SAAS,KAAK,gBAAe,CAAE;AAC9D,UAAM,aAAa,KAAK,OAAO,SAAS,KAAK,gBAAe,CAAE;AAC9D,QAAI,CAAC,KAAK,gBAAgB,UAAU,KAAK,CAAC,KAAK,gBAAgB,UAAU,GAAG;AAC1E,aAAO;IACT;AAEA,WAAO;MACL,MAAM,UAAU;MAChB,gBAAgB,KAAK,gBAAgB,UAAU;MAC/C,gBAAgB,KAAK,gBAAgB,UAAU;MAC/C,eAAe,CAAA;;EAEnB;EAEA,kBAAkB,CAAC,SAAQ;AACzB,UAAM,SAAS,KAAK,mBAAmB,IAAI,KAAK,EAAE;AAClD,QAAI,QAAQ;AACV,aAAO,OAAO;IAChB;AAEA,WAAO;EACT;EAEA,mBAAmB,CAAC,MAAM,GAAG,MAAK;AAChC,UAAM,SAAS,KAAK,mBAAmB,IAAI,KAAK,EAAE;AAClD,SAAK,mBAAmB,IAAI,KAAK,IAAI;MACnC,GAAG;MACH;MACA;MACA,IAAI;MACJ,IAAI;MACJ,aAAa,CAAC,GAAG,CAAC;KACnB;AACD,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;EAEA,qBAAqB,CAAC,SAAQ;AAC5B,UAAM,SAAS,KAAK,mBAAmB,IAAI,KAAK,EAAE;AAClD,WAAO,KAAK;AACZ,WAAO,KAAK;EACd;;AAxII,IAAO,gBAAP;AACJ,cADW,eACJ,kBAAiD;EACtD,OAAO;EACP,aAAa;EACb,eAAe;EACf,kBAAkB;EAClB,kBAAkB;EAClB,oBAAoB;;;;ACxBxB,IAAAC,eAAA;AAoBM,IAAO,kBAAP,cAA8B,YAAkC;EAUjD,QAAgB;EAC3B;EACA;EACA;EACA;EACA;EACA;EAER,YAAY,UAAiC,CAAA,GAAE;AAC7C,UAAM,WAAW;MACf,GAAG,gBAAe;MAClB,GAAG;;AAGL,UAAM,QAAQ;AAEd,SAAK,QAAQ;AACb,SAAK,WAAW;AAEhB,SAAK,WAAW,EAAC,OAAO,CAAA,GAAI,OAAO,CAAA,EAAE;AACrC,SAAK,WAAW,CAAA;AAChB,SAAK,WAAW,CAAA;EAClB;EAEA,gBAAgB,OAAK;AACnB,SAAK,SAAS;AACd,SAAK,WAAW,CAAA;AAChB,SAAK,WAAW,CAAA;AAEhB,UAAM,UAAU,MAAM,SAAQ,EAAG,IAAI,CAAC,SAAQ;AAC5C,YAAM,KAAK,KAAK;AAChB,YAAM,SAAS,KAAK,iBAAiB,QAAQ,KAAK;AAClD,YAAM,IAAI,KAAK,iBAAiB,GAAG,KAAK;AACxC,YAAM,IAAI,KAAK,iBAAiB,GAAG,KAAK;AACxC,YAAM,kBAAkB,KAAK,iBAAiB,iBAAiB,KAAK;AACpE,YAAM,SAAS;QACb;QACA;QACA;QACA,IAAI,SAAS,IAAI;QACjB,IAAI,SAAS,IAAI;QACjB;QACA;;AAEF,WAAK,SAAS,KAAK,EAAE,IAAI;AACzB,aAAO;IACT,CAAC;AAED,UAAM,UAAU,MAAM,SAAQ,EAAG,IAAI,CAAC,SAAQ;AAC5C,YAAM,SAAS;QACb,IAAI,KAAK;QACT,QAAQ,KAAK,SAAS,KAAK,gBAAe,CAAE;QAC5C,QAAQ,KAAK,SAAS,KAAK,gBAAe,CAAE;;AAE9C,WAAK,SAAS,KAAK,EAAE,IAAI;AACzB,aAAO;IACT,CAAC;AACD,SAAK,WAAW;MACd,OAAO;MACP,OAAO;;EAEX;EAEA,QAAK;AACH,SAAK,cAAa;EACpB;EAEA,SAAM;AACJ,SAAK,cAAa;EACpB;EAEA,gBAAa;AAEX,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,UAAS;IACxB;AAEA,SAAK,UAAU,IAAI,OAAO,IAAI,IAAI,eAAeC,aAAY,GAAG,EAAE,IAAI;AACtE,UAAM,EAAC,OAAO,eAAe,kBAAkB,kBAAkB,mBAAkB,IACjF,KAAK;AACP,SAAK,QAAQ,YAAY;MACvB,OAAO,KAAK,SAAS;MACrB,OAAO,KAAK,SAAS;MACrB,SAAS;QACP;QACA;QACA;QACA;QACA;;KAEH;AACD,SAAK,QAAQ,YAAY,CAAC,UAAS;AACjC,cAAQ,MAAM,KAAK,MAAM;QACvB,KAAK;AACH,eAAK,OAAO,MAAM,IAAI;AACtB;QACF,KAAK;AACH,eAAK,MAAM,MAAM,IAAI;AACrB;QACF;AACE;MACJ;IACF;EACF;EACA,OAAO,MAAI;EAAG;EACd,MAAM,MAAI;AACR,UAAM,EAAC,OAAO,MAAK,IAAI;AACvB,SAAK,cAAc,EAAC,OAAO,MAAK,CAAC;AACjC,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;EACA,SAAM;AACJ,UAAM,IAAI,MAAM,oBAAoB;EACtC;EACA,OAAI;AACF,SAAK,QAAQ,UAAS;EACxB;;EAGA,YAAY,OAAK;AACf,QAAI,KAAK,OAAO,aAAY,MAAO,MAAM,aAAY,GAAI;AAEvD,WAAK,WAAW,CAAA;AAChB,WAAK,WAAW,CAAA;IAClB;AACA,SAAK,SAAS;AAGd,UAAM,aAAa,CAAA;AACnB,UAAM,aAAa,MAAM,SAAQ,EAAG,IAAI,CAAC,SAAQ;AAC/C,YAAM,KAAK,KAAK;AAChB,YAAM,SAAS,KAAK,iBAAiB,QAAQ,KAAK;AAClD,YAAM,IAAI,KAAK,iBAAiB,GAAG,KAAK;AACxC,YAAM,IAAI,KAAK,iBAAiB,GAAG,KAAK;AACxC,YAAM,KAAK,SAAS,IAAI;AACxB,YAAM,KAAK,SAAS,IAAI;AACxB,YAAM,kBAAkB,KAAK,iBAAiB,iBAAiB,KAAK;AAEpE,YAAM,YAAY,KAAK,SAAS,KAAK,EAAE;AACvC,YAAM,YAAY,YAAY,YAAY,EAAC,IAAI,GAAG,GAAG,IAAI,IAAI,gBAAe;AAC5E,iBAAW,KAAK,EAAE,IAAI;AACtB,aAAO;IACT,CAAC;AACD,SAAK,WAAW;AAChB,SAAK,SAAS,QAAQ;AAEtB,UAAM,aAAa,CAAA;AACnB,UAAM,aAAa,MAAM,SAAQ,EAAG,IAAI,CAAC,SAAQ;AAC/C,YAAM,YAAY,KAAK,SAAS,KAAK,EAAE;AACvC,YAAM,YAAY,aAAa;QAC7B,IAAI,KAAK;QACT,QAAQ,WAAW,KAAK,gBAAe,CAAE;QACzC,QAAQ,WAAW,KAAK,gBAAe,CAAE;;AAE3C,iBAAW,KAAK,EAAE,IAAI;AACtB,aAAO;IACT,CAAC;AACD,SAAK,WAAW;AAChB,SAAK,SAAS,QAAQ;EACxB;EAEA,cAAc,OAAK;AACjB,UAAM,gBAAgB,KAAK,OAAO,SAAQ;AAG1C,UAAM,aAAa,CAAA;AACnB,UAAM,aAAa,MAAM,MAAM,IAAI,CAAC,SAAQ;AAE1C,YAAM,eAAe,cAAc,KAAK,CAAC,MAAM,EAAE,MAAK,MAAO,KAAK,EAAE;AACpE,mBAAa,gBAAgB,UAAU,KAAK,MAAM;AAClD,mBAAa,gBAAgB,KAAK,KAAK,CAAC;AACxC,mBAAa,gBAAgB,KAAK,KAAK,CAAC;AACxC,mBAAa,gBAAgB,mBAAmB,KAAK,eAAe;AAEpE,iBAAW,KAAK,EAAE,IAAI;AACtB,aAAO;IACT,CAAC;AACD,SAAK,WAAW;AAChB,SAAK,SAAS,QAAQ;AAEtB,UAAM,aAAa,CAAA;AACnB,UAAM,aAAa,MAAM,MAAM,IAAI,CAAC,SAAQ;AAC1C,iBAAW,KAAK,EAAE,IAAI;AACtB,aAAO;IACT,CAAC;AACD,SAAK,OAAO,cAAa;AACzB,SAAK,WAAW;AAChB,SAAK,SAAS,QAAQ;EACxB;EAEA,kBAAkB,CAAC,SAA0B;AAC3C,UAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AACpC,QAAI,QAAQ;AACV,aAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAC5B;AACA,WAAO,CAAC,GAAG,CAAC;EACd;EAEA,kBAAkB,CAAC,SAAQ;AACzB,UAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AACpC,UAAM,iBAAiB,UAAU,OAAO;AACxC,UAAM,iBAAiB,UAAU,OAAO;AACxC,QAAI,UAAU,kBAAkB,gBAAgB;AAC9C,aAAO;QACL,MAAM,UAAU;QAChB,gBAAgB,CAAC,eAAe,GAAG,eAAe,CAAC;QACnD,gBAAgB,CAAC,eAAe,GAAG,eAAe,CAAC;QACnD,eAAe,CAAA;;IAEnB;AACA,WAAO;MACL,MAAM,UAAU;MAChB,gBAAgB,CAAC,GAAG,CAAC;MACrB,gBAAgB,CAAC,GAAG,CAAC;MACrB,eAAe,CAAA;;EAEnB;EAEA,mBAAmB,CAAC,MAAM,GAAG,MAAK;AAChC,UAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AACpC,WAAO,IAAI;AACX,WAAO,IAAI;AACX,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,SAAK,WAAW,eAAc;AAC9B,SAAK,WAAW,aAAY;EAC9B;EAEA,qBAAqB,CAAC,SAAQ;AAC5B,UAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AACpC,WAAO,KAAK;AACZ,WAAO,KAAK;EACd;;AAlPI,IAAO,iBAAP;AACJ,cADW,gBACJ,kBAAkD;EACvD,OAAO;EACP,aAAa;EACb,eAAe;EACf,kBAAkB;EAClB,kBAAkB;EAClB,oBAAoB;;;;ACbxB,IAAM,eAAe,CAAC,QAAQ,YAAW;AACvC,QAAM,OAAO,QAAQ,MAAM;AAC3B,MAAI,KAAK,QAAQ;AACf,WAAO;EACT;AACA,SAAO;IACL,GAAG;IACH,UAAU,KAAK,SAAS,IAAI,CAAC,QAAQ,aAAa,KAAK,OAAO,CAAC;;AAEnE;AAEA,IAAM,mBAAmB,CAAC,MAAM,UAAS;AACvC,MAAI,CAAC,KAAK,YAAY,KAAK,SAAS,WAAW,GAAG;AAChD,WAAO,QAAQ;EACjB;AACA,QAAM,MAAM,KAAK,SAAS,OAAO,CAAC,KAAK,MAAK;AAC1C,WAAO,MAAM,iBAAiB,GAAG,CAAC;EACpC,GAAG,CAAC;AACJ,SAAO,QAAQ;AACjB;AAEA,IAAM,eAAe,CAAC,MAAM,QAAQ,MAAK;AACvC,MAAI,KAAK,QAAQ;AACf,WAAO;EACT;AACA,SAAO,aAAa,KAAK,SAAS,CAAC,GAAG,QAAQ,CAAC;AACjD;AAEA,IAAM,UAAU,CAAC,MAAM,UAAU,SAAQ;AACvC,MAAI,KAAK,OAAO,UAAU;AACxB,SAAK,KAAK,KAAK,EAAE;AACjB,WAAO;EACT;AACA,QAAM,aAAa,KAAK,YAAY,KAAK,SAAS,KAAK,CAAC,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC;AACxF,MAAI,YAAY;AACd,SAAK,KAAK,KAAK,EAAE;AACjB,WAAO;EACT;AACA,SAAO;AACT;AAEM,IAAO,gBAAP,cAA4B,YAAgC;EAKhE,QAAQ;EACR,SAAgB;;EAEhB,sBAAsB,CAAA;EACtB;EAEA,YAAY,UAA+B,CAAA,GAAE;AAC3C,UAAM,OAAO;AACb,SAAK,WAAW;MACd,GAAG,cAAa;MAChB,GAAG;;EAEP;EAEA,gBAAgB,OAAY;AAC1B,SAAK,YAAY,KAAK;EACxB;EAEA,YAAY,OAAY;AACtB,SAAK,SAAS;EAChB;EAEA,QAAK;AACH,UAAM,YAAY,KAAK,OAAO,SAAQ,EAAG;AACzC,QAAI,cAAc,GAAG;AACnB;IACF;AAEA,UAAM,EAAC,KAAI,IAAI,KAAK;AAEpB,QAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B;IACF;AAEA,UAAM,EAAC,OAAM,IAAI,KAAK;AACtB,UAAM,YAAY,MAAM;AAGxB,UAAM,WAAW,KAAK,CAAC;AAEvB,UAAM,UAAU,KAAK,OAAO,CAAC,KAAK,SAAQ;AACxC,UAAI,KAAK,EAAE,IAAI;QACb,GAAG;QACH,QAAQ,CAAC,KAAK,YAAY,KAAK,SAAS,WAAW;;AAErD,aAAO;IACT,GAAG,CAAA,CAAE;AAEL,SAAK,aAAa,aAAa,SAAS,IAAI,OAAO;AAEnD,UAAM,cAAc,aAAa,KAAK,YAAY,CAAC;AACnD,UAAM,wBAAwB,UAAU,cAAc;AAEtD,UAAM,oBAAoB,CAAC,MAAM,OAAO,YAAY,gBAAe;AACjE,YAAM,SAAS,KAAK,OAAO,SAAS;AAEpC,UAAI,KAAK,YAAY,KAAK,SAAS,WAAW,GAAG;AAC/C,cAAM,YAAY,iBAAiB,MAAM,CAAC;AAE1C,oBAAY,KAAK,EAAE,IAAI,SACnB,CAAC,GAAG,CAAC,IACL,OACE,GACA,GACA,GACA,yBAAyB,QAAQ,IACjC,aAAa,aAAa,YAAY,EAAE;AAG9C,YAAI,YAAY;AAChB,aAAK,SAAS,QAAQ,CAAC,MAAK;AAC1B,4BAAkB,GAAG,QAAQ,GAAG,WAAW,WAAW;AACtD,uBAAa,iBAAiB,GAAG,CAAC,IAAI;QACxC,CAAC;MACH,OAAO;AACL,oBAAY,KAAK,EAAE,IAAI,OACrB,GACA,GACA,GACA,yBAAyB,QAAQ,IACjC,aAAa,SAAS;MAE1B;IACF;AAEA,SAAK,sBAAsB,CAAA;AAC3B,sBAAkB,KAAK,YAAY,GAAG,GAAG,KAAK,mBAAmB;AAEjE,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;EAEA,kBAAkB,CAAC,SAAQ;AACzB,WAAO,KAAK,oBAAoB,KAAK,EAAE;EACzC;;EAGA,kBAAkB,CAAC,SAAQ;AACzB,UAAM,eAAe,KAAK,gBAAe;AACzC,UAAM,eAAe,KAAK,gBAAe;AACzC,UAAM,gBAAgB,KAAK,oBAAoB,YAAY;AAC3D,UAAM,gBAAgB,KAAK,oBAAoB,YAAY;AAE3D,UAAM,aAAa,CAAA;AACnB,YAAQ,KAAK,YAAY,cAAc,UAAU;AACjD,UAAM,aAAa,CAAA;AACnB,YAAQ,KAAK,YAAY,cAAc,UAAU;AAEjD,UAAM,cAAc,WAAW;AAC/B,QAAI,sBAAsB,cAAc;AACxC,aAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,UAAI,WAAW,CAAC,MAAM,WAAW,CAAC,GAAG;AACnC,8BAAsB;AACtB;MACF;IACF;AAEA,UAAM,YAAY,CAAA;AAClB,aAAS,IAAI,GAAG,KAAK,qBAAqB,KAAK;AAC7C,YAAM,SAAS,WAAW,CAAC;AAC3B,gBAAU,KAAK,KAAK,oBAAoB,MAAM,CAAC;IACjD;AACA,aAAS,IAAI,sBAAsB,GAAG,IAAI,GAAG,KAAK;AAChD,YAAM,SAAS,WAAW,CAAC;AAC3B,gBAAU,KAAK,KAAK,oBAAoB,MAAM,CAAC;IACjD;AAEA,WAAO;MACL,MAAM,UAAU;MAChB,gBAAgB;MAChB,gBAAgB;MAChB,eAAe;;EAEnB;EAEA,mBAAmB,CAAC,MAAM,GAAG,MAAK;AAChC,SAAK,oBAAoB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;AACzC,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;;AAhJI,IAAO,eAAP;AACJ,cADW,cACJ,kBAAiB;EACtB,QAAQ;;AAiJZ,SAAS,OAAO,IAAI,IAAI,GAAG,GAAG,OAAK;AACjC,QAAM,UAAW,KAAK,KAAK,MAAO;AAClC,QAAM,MAAM,KAAK,IAAI,OAAO;AAC5B,QAAM,MAAM,KAAK,IAAI,OAAO;AAC5B,QAAM,KAAK,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM;AAC7C,QAAM,KAAK,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM;AAC7C,SAAO,CAAC,IAAI,EAAE;AAChB;;;ACzMA,SAAoB;AASd,IAAO,yBAAP,cAAqC,YAAyC;EAQlF,QAAQ;EACR;;;EAIA,WAAW,EAAC,OAAO,CAAA,GAAI,OAAO,CAAA,EAAE;EAChC,WAAW,CAAA;EACX,WAAW,CAAA;EACX;EAEA,YAAY,UAAwC,CAAA,GAAE;AACpD,UAAM,OAAO;AACb,SAAK,WAAW;MACd,GAAG,uBAAsB;MACzB,GAAG;;EAEP;EAEA,gBAAgB,OAAY;AAC1B,SAAK,YAAY,KAAK;EACxB;EAEA,YAAY,CAAC,WAAU;AACrB,QAAI,OAAO,WAAW;AACpB,aAAO,IAAI,OAAO;IACpB;AACA,UAAM,eAAe,KAAK,OAAO,UAAU,OAAO,OAAO,EAAE;AAC3D,UAAM,eAAe,KAAK,OAAO,UAAU,OAAO,OAAO,EAAE;AAC3D,WAAO,IAAI,KAAK,IAAI,cAAc,YAAY;EAChD;EAEA,qBAAkB;AAChB,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,GAAG,QAAQ,IAAI,EAAE,GAAG,OAAO,IAAI;AAC/C,WAAK,aAAa;IACpB;AACA,UAAM,EAAC,OAAO,eAAe,kBAAkB,iBAAgB,IAAI,KAAK;AAExE,UAAM,IAAI,KAAK;AACf,SAAK,aACF,mBAAgB,EAAE,KAAK,EACvB,MACC,QAEG,aAAU,EAAE,KAAK,EACjB,GAAG,CAAC,MAAM,EAAE,EAAE,EACd,SAAS,KAAK,SAAS,CAAC,EAE5B,MACC,UAEG,iBAAa,EACb,SAAS,aAAa,EACtB,YAAY,gBAAgB,EAC5B,YAAY,gBAAgB,CAAC,EAEjC,MAAM,UAAa,eAAW,CAAE,EAChC,MAAM,KAAK;AAEd,SAAK,WAAW,GAAG,QAAQ,KAAK,eAAe,EAAE,GAAG,OAAO,KAAK,aAAa;EAC/E;EAEA,QAAK;AACH,SAAK,mBAAkB;AACvB,SAAK,WAAW,QAAO;EACzB;EAEA,SAAM;AACJ,SAAK,WAAW,QAAO;EACzB;EAEA,OAAI;AACF,SAAK,WAAW,KAAI;EACtB;EAEA,YAAY,OAAK;AACf,SAAK,SAAS;AAGd,UAAM,aAAa,CAAA;AACnB,UAAM,aAAa,MAAM,SAAQ,EAAG,IAAI,CAAC,SAAQ;AAC/C,YAAM,YAAY,KAAK,SAAS,KAAK,EAAE;AACvC,YAAM,YAAY,YAAY,YAAY,EAAC,IAAI,KAAK,GAAE;AACtD,iBAAW,KAAK,EAAE,IAAI;AACtB,aAAO;IACT,CAAC;AAID,UAAM,YAAY,MAAM,SAAQ,EAAG,OAAO,CAAC,KAAK,SAAQ;AACtD,YAAM,QAAQ,CAAC,KAAK,gBAAe,GAAI,KAAK,gBAAe,CAAE;AAG7D,YAAM,SAAS,MAAM,KAAI,EAAG,SAAQ;AAEpC,UAAI,CAAC,IAAI,MAAM,GAAG;AAChB,YAAI,MAAM,IAAI,CAAC,IAAI;MACrB,OAAO;AACL,YAAI,MAAM,EAAE,KAAK,IAAI;MACvB;AACA,aAAO;IACT,GAAG,CAAA,CAAE;AAKL,UAAM,aAAa,CAAA;AACnB,UAAM,aAAa,CAAA;AAEnB,WAAO,KAAK,SAAS,EAAE,QAAQ,CAAC,WAAU;AACxC,YAAM,eAAe,UAAU,MAAM;AACrC,YAAM,YAAY,aAAa,CAAC;AAChC,UAAI,aAAa,WAAW,GAAG;AAE7B,cAAMC,aAAY;UAChB,MAAM,UAAU;UAChB,IAAI,UAAU,MAAK;UACnB,QAAQ,WAAW,UAAU,gBAAe,CAAE;UAC9C,QAAQ,WAAW,UAAU,gBAAe,CAAE;UAC9C,WAAW;;AAEb,mBAAW,UAAU,MAAK,CAAE,IAAIA;AAChC,mBAAW,KAAKA,UAAS;AACzB;MACF;AAGA,YAAM,YAAY;QAChB,MAAM,UAAU;QAChB,IAAI;QACJ,QAAQ,WAAW,UAAU,gBAAe,CAAE;QAC9C,QAAQ,WAAW,UAAU,gBAAe,CAAE;QAC9C,WAAW;QACX,WAAW,aAAa;;AAE1B,iBAAW,MAAM,IAAI;AACrB,iBAAW,KAAK,SAAS;AAEzB,mBAAa,QAAQ,CAAC,GAAG,QAAO;AAC9B,mBAAW,EAAE,EAAE,IAAI;UACjB,MAAM,UAAU;UAChB,IAAI,EAAE;UACN,QAAQ,WAAW,EAAE,gBAAe,CAAE;UACtC,QAAQ,WAAW,EAAE,gBAAe,CAAE;UACtC,eAAe;UACf,WAAW;UACX,OAAO;;MAEX,CAAC;IACH,CAAC;AAED,SAAK,WAAW;AAChB,SAAK,SAAS,QAAQ;AACtB,SAAK,WAAW;AAChB,SAAK,SAAS,QAAQ;EACxB;EAEA,kBAAkB,CAAC,SAAgC;AACjD,UAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AACpC,QAAI,QAAQ;AACV,aAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAC5B;AAEA,WAAO,CAAC,GAAG,CAAC;EACd;EAEA,kBAAkB,CAAC,SAAQ;AACzB,UAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AACpC,QAAI,QAAQ;AACV,UAAI,CAAC,OAAO,WAAW;AACrB,eAAO;UACL,MAAM,UAAU;UAChB,gBAAgB,CAAC,OAAO,OAAO,GAAG,OAAO,OAAO,CAAC;UACjD,gBAAgB,CAAC,OAAO,OAAO,GAAG,OAAO,OAAO,CAAC;UACjD,eAAe,CAAA;;MAEnB;AAEA,YAAM,cAAc,KAAK,SAAS,OAAO,aAAa;AACtD,YAAM,YAAY,YAAY;AAE9B,YAAM,iBAAiB,CAAC,YAAY,OAAO,GAAG,YAAY,OAAO,CAAC;AAClE,YAAM,iBAAiB,CAAC,YAAY,OAAO,GAAG,YAAY,OAAO,CAAC;AAElE,YAAM,WAAW,KAAK,MACpB,eAAe,CAAC,IAAI,eAAe,CAAC,GACpC,eAAe,CAAC,IAAI,eAAe,CAAC,CAAC;AAEvC,YAAM,QAAQ,OAAO;AAErB,YAAM,YAAY,QAAQ,IAAI,IAAI;AAGlC,YAAM,iBAAiB,YAAY,MAAM;AACzC,YAAM,SACJ,KAAK,IAAI,WAAW,IAAI,CAAC,KACxB,iBAAiB,KAAK,MAAM,QAAQ,IAAI,CAAC,IAAI,KAAK,KAAK,QAAQ,CAAC;AACnE,YAAM,eAAe,oBAAoB,gBAAgB,gBAAgB,WAAW,MAAM;AAC1F,aAAO;QACL,MAAM,UAAU;QAChB;QACA;QACA,eAAe,CAAC,YAAY;;IAEhC;AAEA,WAAO;MACL,MAAM,UAAU;MAChB,gBAAgB,CAAC,GAAG,CAAC;MACrB,gBAAgB,CAAC,GAAG,CAAC;MACrB,eAAe,CAAA;;EAEnB;EAEA,mBAAmB,CAAC,MAAM,GAAG,MAAK;AAChC,UAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AACpC,WAAO,IAAI;AACX,WAAO,IAAI;AACX,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;;AApOI,IAAO,wBAAP;AACJ,cADW,uBACJ,kBAAiB;EACtB,OAAO;EACP,eAAe;EACf,kBAAkB;EAClB,kBAAkB;;AA0OtB,SAAS,oBAAoB,QAAQ,QAAQ,WAAW,QAAM;AAC5D,QAAM,WAAW,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;AAC1E,QAAM,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC;AAC/B,QAAM,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC;AAC/B,QAAM,SAAS,CAAC,IAAI,CAAC,EAAE;AACvB,QAAM,SAAS,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAG,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,CAAG,CAAC;AAC5E,QAAM,aAAa,CAAC,OAAO,CAAC,IAAI,QAAQ,OAAO,CAAC,IAAI,MAAM;AAC1D,SAAO;IACL,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,SAAS;IACvC,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,SAAS;;AAE3C;;;AC5PM,IAAO,kBAAP,cAA8B,YAAkC;EAOpE,QAAQ;EACR;EACA;EACA;EACA,WAAW,CAAA;EACX,mBAAmB,CAAA;EAEnB,YAAY,UAAiC,CAAA,GAAE;AAC7C,UAAM,OAAO;AACb,SAAK,WAAW;MACd,GAAG,gBAAe;MAClB,GAAG;;EAEP;EAEA,gBAAgB,OAAY;AAC1B,SAAK,YAAY,KAAK;EACxB;EAEA,YAAY,OAAK;AACf,UAAM,EAAC,aAAa,aAAa,YAAW,IAAI,KAAK;AACrD,SAAK,SAAS;AACd,SAAK,WAAW,MAAM,SAAQ,EAAG,OAAO,CAAC,KAAK,SAAQ;AACpD,UAAI,KAAK,MAAK,CAAE,IAAI;AACpB,aAAO;IACT,GAAG,CAAA,CAAE;AAIL,SAAK,QAAQ,MAAM,SAAQ,EAAG,OAAO,CAAC,KAAK,SAAQ;AACjD,YAAM,OAAO,YAAY,IAAI;AAC7B,UAAI,CAAC,IAAI,IAAI,GAAG;AACd,YAAI,IAAI,IAAI,CAAA;MACd;AACA,UAAI,IAAI,EAAE,KAAK,IAAI;AACnB,aAAO;IACT,GAAG,CAAA,CAAE;AAGL,SAAK,QAAQ,OAAO,KAAK,KAAK,KAAK,EAAE,OAAO,CAAC,KAAK,SAAQ;AACxD,YAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,YAAM,cAAc,cAAc,KAAK,CAAC,GAAG,MAAK;AAC9C,YAAI,EAAE,UAAS,IAAK,EAAE,UAAS,GAAI;AACjC,iBAAO;QACT;AACA,YAAI,EAAE,UAAS,MAAO,EAAE,UAAS,GAAI;AACnC,iBAAO;QACT;AACA,eAAO;MACT,CAAC;AACD,UAAI,IAAI,IAAI;AACZ,aAAO;IACT,GAAG,CAAA,CAAE;AACL,SAAK,aAAa,OAAO,KAAK,KAAK,KAAK,EAAE;AAC1C,UAAM,SAAS,CAAC,GAAG,CAAC;AACpB,UAAM,gBAAgB,MAAM,OAAO,KAAK,KAAK,KAAK,EAAE;AAGpD,SAAK,mBAAmB,OAAO,KAAK,KAAK,KAAK,EAAE,OAAO,CAAC,KAAK,MAAM,YAAW;AAC5E,YAAM,YAAY,gBAAgB;AAClC,YAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,YAAM,YAAY,cAAc,eAAe,cAAc;AAE7D,oBAAc,QAAQ,CAAC,MAAM,QAAO;AAClC,cAAM,SAAS,cAAc,MAAM;AACnC,cAAM,IAAI,KAAK,IAAK,YAAY,MAAO,KAAK,EAAE,IAAI,SAAS,OAAO,CAAC;AACnE,cAAM,IAAI,KAAK,IAAK,YAAY,MAAO,KAAK,EAAE,IAAI,SAAS,OAAO,CAAC;AACnE,YAAI,KAAK,MAAK,CAAE,IAAI,CAAC,GAAG,CAAC;MAC3B,CAAC;AACD,aAAO;IACT,GAAG,CAAA,CAAE;EACP;EAEA,QAAK;AACH,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;EAEA,kBAAkB,CAAC,SAAS,KAAK,iBAAiB,KAAK,MAAK,CAAE;EAE9D,kBAAkB,CAAC,SAAQ;AACzB,UAAM,EAAC,YAAW,IAAI,KAAK;AAC3B,UAAM,eAAe,KAAK,gBAAe;AACzC,UAAM,eAAe,KAAK,gBAAe;AAEzC,UAAM,iBAAiB,KAAK,iBAAiB,YAAY;AACzD,UAAM,iBAAiB,KAAK,iBAAiB,YAAY;AAEzD,UAAM,aAAa,KAAK,SAAS,YAAY;AAC7C,UAAM,aAAa,KAAK,SAAS,YAAY;AAE7C,UAAM,iBAAiB,YAAY,UAAU;AAC7C,UAAM,iBAAiB,YAAY,UAAU;AAE7C,QAAI,mBAAmB,gBAAgB;AACrC,aAAO;QACL,MAAM,UAAU;QAChB;QACA;QACA,eAAe,CAAA;;IAEnB;AAEA,UAAM,eAAeC,qBAAoB;MACvC;MACA;MACA;MACA;MACA,WAAW,KAAK;KACjB;AAED,WAAO;MACL,MAAM,UAAU;MAChB;MACA;MACA,eAAe,CAAC,YAAY;;EAEhC;EAEA,mBAAmB,CAAC,MAAM,GAAG,MAAK;AAChC,SAAK,iBAAiB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;AACtC,SAAK,gBAAe;AACpB,SAAK,cAAa;EACpB;;AAlII,IAAO,iBAAP;AACJ,cADW,gBACJ,kBAAiB;EACtB,aAAa;EACb,aAAa;EACb,aAAa,CAAC,SAAe,KAAK,iBAAiB,OAAO;;AAiI9D,SAASA,qBAAoB,EAC3B,gBACA,gBACA,gBACA,gBACA,UAAS,GACV;AACC,QAAM,YAAY,YAAY,KAAK;AAEnC,QAAM,WACH,kBAAkB,YAAY,kBAAkB,YAChD,iBAAiB,YAAY,iBAAiB;AAEjD,QAAM,YAAY,YAAY,kBAAkB,YAAY,kBAAkB,WAAW,IAAI;AAG7F,QAAM,SAAS,iBAAiB,kBAAkB,WAAW,iBAAiB;AAC9E,QAAM,SAAS,iBAAiB,kBAAkB,WAAW,iBAAiB;AAG9E,QAAM,WAAW,KAAK,MAAM,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;AACxE,QAAM,SAAS,WAAW;AAE1B,QAAM,WAAW,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;AAC1E,QAAM,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC;AAC/B,QAAM,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC;AAC/B,QAAM,SAAS,CAAC,IAAI,CAAC,EAAE;AACvB,QAAM,SAAS,KAAK,MAAM,IAAI,CAAC,EAAE;AACjC,QAAM,aAAa,CAAC,OAAO,CAAC,IAAI,QAAQ,OAAO,CAAC,IAAI,MAAM;AAC1D,SAAO;IACL,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,SAAS;IACvC,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,SAAS;;AAE3C;;;AChLA,IAAAC,gBAAgD;;;ACDhD,mBAAkB;AAIlB,SAAS,SAAS,OAAK;AACrB,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI;AACF,YAAM,QAAQ,aAAAC,QAAM,IAAI,KAAK,EAAE,MAAK;AACpC,UAAI,OAAO,SAAS,MAAM,CAAC,CAAC,GAAG;AAC7B,cAAM,CAAC,KAAK;MACd;AACA,aAAO;IACT,SAAS,OAAP;AACA,aAAO,CAAC,GAAG,GAAG,CAAC;IACjB;EACF;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,OAAO,SAAS,MAAM,CAAC,CAAC,GAAG;AACrD,WAAO;EACT;AACA,SAAO,CAAC,GAAG,GAAG,CAAC;AACjB;AAEA,SAAS,UAAU,OAAK;AACtB,UAAQ,OAAO,OAAO;IACpB,KAAK;AACH,cAAQ,OAAO,KAAK;AACpB,aAAO,MAAM,KAAK,IAAI,OAAO;IAE/B,KAAK;AACH,aAAO;IAET;AACE,aAAO;EACX;AACF;AAEA,SAAS,QAAQ,OAAK;AACpB,UAAQ,OAAO,OAAO;IACpB,KAAK;AACH,aAAO;IAET,KAAK;AACH,aAAO,MAAM,YAAW,MAAO;IAEjC,KAAK;AACH,aAAO,QAAQ,KAAK;IAEtB;AACE,aAAO;EACX;AACF;AAEA,SAAS,UAAU,OAAK;AACtB,MAAI,OAAO,UAAU,YAAY;AAC/B,WAAO;EACT;AAEA,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG;AAC/C,WAAO;EACT;AACA,SAAO,MAAM,IAAI,SAAS;AAC5B;AAEA,IAAM,WAAW,CAAC,MAAM;AACxB,IAAM,sBAAsB;EAC1B,SAAS;EACT,QAAQ;EAER,OAAO;EACP,QAAQ;EACR,QAAQ;EAER,MAAM;EACN,QAAQ;EACR,aAAa;;EAGb,QAAQ;EACR,MAAM;;EAGN,OAAO;EACP,MAAM;EACN,UAAU;EACV,YAAY;EACZ,mBAAmB;EACnB,OAAO;EACP,cAAc;EACd,eAAe;EACf,mBAAmB;;EAGnB,OAAO;EACP,YAAY;EAEZ,QAAQ;EACR,eAAe;;AAGjB,IAAM,iBAAiB;EACrB,SAAS;EACT,QAAQ;EAER,OAAO;EACP,QAAQ;EACR,QAAQ;EAER,MAAM,CAAC,GAAG,GAAG,CAAC;EACd,QAAQ,CAAC,GAAG,GAAG,CAAC;EAChB,aAAa;EAEb,QAAQ;EACR,MAAM;EAEN,OAAO,CAAC,GAAG,GAAG,CAAC;EACf,MAAM;EACN,UAAU;EACV,YAAY;EACZ,mBAAmB;EACnB,OAAO;EACP,cAAc;EACd,eAAe;EACf,mBAAmB;EAEnB,OAAO;EACP,YAAY;EAEZ,QAAQ;EACR,eAAe;;AAIjB,SAAS,iBAAiB,KAAK,OAAK;AAClC,QAAM,YAAY,oBAAoB,GAAG,KAAK;AAG9C,QAAM,WAAW,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,KAAK,SAAQ;AACvD,QAAI,IAAI,IAAI,MAAM,IAAI;AACtB,WAAO;EACT,GAAG,CAAA,CAAE;AAEL,SAAO,CAAC,SAAQ;AACd,UAAM,gBAAgB,SAAS,KAAK,KAAK;AACzC,QAAI,CAAC,KAAK,SAAS,OAAO,kBAAkB,aAAa;AACvD,aAAO,SAAS,WAAW,eAAe,GAAG;IAC/C;AAGA,QAAI,OAAO,kBAAkB,YAAY;AACvC,aAAO,UAAU,cAAc,IAAI,CAAC;IACtC;AAEA,WAAO,UAAU,aAAa;EAChC;AACF;AAEA,IAAM,aAAa;EACjB,UAAU;EACV,aAAa;;AAGT,IAAO,gBAAP,MAAoB;EACxB;EACA;EACA;EACA;;EAGA,OAAO,WAAW,KAAG;AACnB,WAAO,eAAe,GAAG;EAC3B;;;EAIA,YAAY,EAAC,KAAK,OAAO,cAAa,GAAC;AACrC,SAAK,MAAM;AACX,SAAK,iBAAiB;AAKtB,QAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAEtD,WAAK,SAAS,iBAAiB,KAAK,KAAK;AACzC,WAAK,aAAa,WAAW;AAC7B,WAAK,iBAAiB;IACxB,WAGS,OAAO,UAAU,YAAY;AACpC,YAAM,YAAY,oBAAoB,GAAG,KAAK;AAK9C,WAAK,SAAS,CAAC,MAAM,UAAU,MAAM,CAAC,CAAC;AACvC,WAAK,aAAa,WAAW;AAC7B,WAAK,iBAAiB;IACxB,OAGK;AAEH,YAAM,YAAY,oBAAoB,GAAG,KAAK;AAC9C,WAAK,SAAS,UAAU,KAAK;AAC7B,WAAK,aAAa,WAAW;AAC7B,WAAK,iBAAiB;IACxB;AAGA,QAAI,KAAK,WAAW,MAAM;AACxB,UAAI,KAAK,WAAW,cAAc,OAAO,EAAC;AAC1C,YAAM,IAAI,MAAM,WAAW,cAAc,OAAO;IAClD;EACF;;EAGA,WAAQ;AACN,WAAO,KAAK;EACd;EAEA,mBAAgB;AACd,WAAO,KAAK;EACd;;;;AC1NF,IAAM,sBAAsB;EAC1B,WAAW;EACX,SAAS;;AAGX,IAAM,sBAAsB;EAC1B,CAAC,UAAU,MAAM,GAAG;IAClB,GAAG;IACH,cAAc;IACd,cAAc;IACd,cAAc;IACd,WAAW;;EAGb,CAAC,UAAU,SAAS,GAAG;IACrB,GAAG;IACH,UAAU;IACV,WAAW;IACX,cAAc;IACd,cAAc;IACd,cAAc;;EAGhB,CAAC,UAAU,iBAAiB,GAAG;IAC7B,GAAG;IACH,iBAAiB;IACjB,WAAW;IACX,UAAU;IACV,WAAW;IACX,cAAc;IACd,cAAc;IACd,cAAc;;EAGhB,CAAC,UAAU,sBAAsB,GAAG;IAClC,GAAG;IACH,UAAU;IACV,WAAW;IACX,cAAc;IACd,cAAc;IACd,cAAc;IACd,iBAAiB;;EAGnB,CAAC,UAAU,KAAK,GAAG;IACjB,GAAG;IACH,UAAU;IACV,SAAS;IACT,SAAS;IACT,eAAe;IACf,sBAAsB;IACtB,UAAU;IACV,eAAe;IACf,cAAc;IACd,eAAe;IACf,mBAAmB;;EAGrB,CAAC,UAAU,MAAM,GAAG;IAClB,GAAG;IACH,UAAU;IACV,SAAS;IACT,WAAW;IACX,eAAe;;;EAIjB,MAAM;IACJ,UAAU;IACV,UAAU;;EAEZ,CAAC,oBAAoB,KAAK,GAAG;IAC3B,UAAU;IACV,SAAS;IACT,SAAS;IACT,eAAe;IACf,sBAAsB;IACtB,eAAe;IACf,cAAc;IACd,eAAe;IACf,mBAAmB;;EAErB,CAAC,oBAAoB,IAAI,GAAG;IAC1B,UAAU;IACV,UAAU;IACV,UAAU;IACV,eAAe;;;AAInB,IAAM,yBAAyB;EAC7B,CAAC,UAAU,MAAM,GAAG,CAAC,gBAAgB,aAAa,gBAAgB,cAAc;EAChF,CAAC,UAAU,SAAS,GAAG,CAAC,gBAAgB,gBAAgB,cAAc;EACtE,CAAC,UAAU,iBAAiB,GAAG;IAC7B;IACA;IACA;IACA;;EAEF,CAAC,UAAU,sBAAsB,GAAG;IAClC;IACA;IACA;IACA;;EAEF,CAAC,UAAU,KAAK,GAAG;IACjB;IACA;IACA;IACA;IACA;IACA;;EAEF,CAAC,UAAU,MAAM,GAAG,CAAC,YAAY,WAAW,WAAW;EACvD,MAAM,CAAC,YAAY,UAAU;EAC7B,CAAC,oBAAoB,KAAK,GAAG;IAC3B;IACA;IACA;IACA;IACA;;EAEF,CAAC,oBAAoB,IAAI,GAAG,CAAC,YAAY,YAAY,YAAY,eAAe;;AAG5E,IAAO,aAAP,MAAiB;EACrB;EACA;EACA,YAAY,OAAO,gBAAc;AAC/B,UAAM,EAAC,MAAM,WAAW,GAAG,UAAS,IAAI;AACxC,QAAI,CAAC,aAAa,EAAE,aAAa,sBAAsB;AACrD,YAAM,IAAI,MAAM,iBAAiB,WAAW;IAC9C;AACA,SAAK,OAAO;AAeZ,UAAM,QAAQ,OAAO,KAAK,SAAS,EAAE,OACnC,CAAC,KAAK,QAAO;AACX,YAAM,aAAa,IAAI,WAAW,GAAG;AACrC,UAAI,YAAY;AACd,cAAM,QAAQ,IAAI,UAAU,CAAC;AAC7B,YAAI,KAAK,IAAI,UAAU,GAAG;AAC1B,eAAO;MACT;AACA,UAAI,QAAQ,GAAG,IAAI,UAAU,GAAG;AAChC,aAAO;IACT,GACA;MACE,SAAS,CAAA;KACV;AAKH,UAAM,aAAa,OAAO,OAAO,KAAK,EAAE,OAAO,CAAC,KAAK,SAAQ;AAC3D,YAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,YAAM,MAAM,oBAAI,IAAI,CAAC,GAAI,KAAa,GAAG,KAAK,CAAC;AAC/C,aAAO,MAAM,KAAK,GAAG;IACvB,GAAG,CAAA,CAAE;AAOL,UAAM,UAAW,WAAmB,OAAO,CAAC,KAAK,SAAQ;AACvD,UAAI,IAAI,IAAI,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK,UAAS;AACtD,cAAM,CAAC,OAAO,IAAI,IAAI;AACtB,YAAI,OAAO,KAAK,IAAI,MAAM,aAAa;AACrC,cAAI,KAAK,IAAI,KAAK,IAAI;QACxB;AACA,eAAO;MACT,GAAG,CAAA,CAAE;AACL,aAAO;IACT,GAAG,CAAA,CAAE;AAQL,UAAM,qBAAqB,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,UAAS;AACvE,YAAM,CAAC,MAAM,QAAQ,IAAI;AACzB,YAAM,cAAc,OAAO,KAAK,QAAQ,EAAE,WAAW,KAAK,SAAS,YAAY;AAC/E,UAAI,aAAa;AACf,YAAI,IAAI,IAAI,SAAS;AACrB,eAAO;MACT;AACA,UAAI,IAAI,IAAI;AACZ,aAAO;IACT,GAAG,CAAA,CAAE;AAOL,SAAK,aAAa,CAAA;AAClB,eAAW,OAAO,oBAAoB;AACpC,WAAK,WAAW,GAAG,IAAI,IAAI,cAAc;QACvC;QACA,OAAO,mBAAmB,GAAG;QAC7B,eAAe,eAAe;OAC/B;IACH;EACF;EAEA,aAAa,gBAAc;AACzB,UAAM,MAAM,oBAAoB,KAAK,IAAI;AACzC,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,MAAM,iBAAiB,KAAK,MAAM;IAC9C;AACA,UAAM,YAAY,IAAI,cAAc;AACpC,QAAI,CAAC,WAAW;AACd,UAAI,MAAM,4BAA4B,gBAAgB,EAAC;AACvD,YAAM,IAAI,MAAM,4BAA4B,gBAAgB;IAC9D;AACA,WAAO,KAAK,WAAW,SAAS;EAClC;EAEA,kBAAkB,gBAAc;AAC9B,UAAM,WAAW,KAAK,aAAa,cAAc;AAEjD,QAAI,UAAU;AACZ,aAAO,SAAS,SAAQ;IAC1B;AAEA,UAAM,YAAY,oBAAoB,KAAK,IAAI,EAAE,cAAc;AAC/D,WAAO,cAAc,WAAW,SAAS;EAC3C;EAEA,+BAA+B,gBAAc;AAC3C,UAAM,WAAW,KAAK,aAAa,cAAc;AAEjD,QAAI,UAAU;AACZ,aAAO,SAAS,iBAAgB;IAClC;AACA,WAAO;EACT;EAEA,qBAAkB;AAChB,UAAM,cAAc,oBAAoB,KAAK,IAAI;AACjD,WAAO,OAAO,KAAK,WAAW,EAAE,OAAO,CAAC,KAAK,aAAY;AACvD,UAAI,QAAQ,IAAI,KAAK,kBAAkB,QAAQ;AAC/C,aAAO;IACT,GAAG,CAAA,CAAE;EACP;EAEA,0BAAuB;AACrB,WAAO,uBAAuB,KAAK,IAAI,EAAE,OAAO,CAAC,KAAK,aAAY;AAChE,UAAI,QAAQ,IAAI,KAAK,+BAA+B,QAAQ;AAC5D,aAAO;IACT,GAAG,CAAA,CAAE;EACP;;;;AC/QK,IAAM,mBAAmB,CAAC,aAAaC,eAAa;AACzD,MAAI,CAACA,YAAW;AACd,WAAO;EACT;AAEA,MAAI,OAAOA,eAAc,YAAY;AACnC,WAAO,CAAC,MAAK;AACX,YAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;AAC5B,YAAM,CAACC,OAAMC,KAAI,IAAIF,WAAU,CAAC;AAChC,aAAO,CAAC,IAAIC,OAAM,IAAIC,KAAI;IAC5B;EACF;AAEA,QAAM,CAAC,MAAM,IAAI,IAAIF;AACrB,SAAO,CAAC,MAAK;AACX,UAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;AAC5B,WAAO,CAAC,IAAI,MAAM,IAAI,IAAI;EAC5B;AACF;;;ACbA,IAAM,yBAAyF;EAC7F,CAAC,WAAW,OAAO,GAAG,WAAW;EACjC,CAAC,WAAW,KAAK,GAAG,WAAW;EAC/B,CAAC,WAAW,QAAQ,GAAG,WAAW;EAClC,CAAC,WAAW,QAAQ,GAAG,WAAW;;AAGpC,SAAS,qBAAqB,MAAU;AACtC,SAAO,KACJ,kBAAiB,EACjB,KACC,CAAC,SAAS,KAAK,SAAQ,MAAO,WAAW,YAAY,KAAK,8BAA6B,CAAE;AAE/F;AAEA,SAAS,aAAa,MAAY,OAAiC;AACjE,OAAK,SAAS,KAAK;AACnB,MAAI,KAAK,8BAA6B,GAAI;AACxC,SAAK,kBAAiB,EAAG,QAAQ,CAAC,SAAQ;AACxC,UAAI,eAAe,uBAAuB,KAAK;AAC/C,UAAI,qBAAqB,IAAI,GAAG;AAC9B,uBAAe,WAAW;MAC5B;AACA,WAAK,SAAS,YAAY;IAC5B,CAAC;EACH;AACF;AAoBM,IAAO,qBAAP,MAAyB;EACtB;EACC,mBAAmB;EACnB,mBAAgC;EAChC,oBAAiC;EAElC,aAAuB;EACvB,aAAuB;EACvB,SAAsB;EACtB,iBAA0B;EAC1B,4BAAqC;EAE5C,YAAY,OAAgC,gBAAwB;AAClE,SAAK,YAAY,KAAK;AACtB,SAAK,iBAAiB;AAGtB,SAAK,mBAAmB;AACxB,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;EAC3B;EAEA,YAAY,EACV,aAAa,CAAA,GACb,aAAa,CAAA,GACb,QACA,gBACA,0BAAyB,GACD;AACxB,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,SAAK,4BAA4B;EACnC;EAEA,qBAAkB;AAChB,WAAO,KAAK;EACd;EAEA,QAAQ,MAAM,OAAK;AACjB,UAAM,EAAC,OAAM,IAAI;AAEjB,QAAI,CAAC,QAAQ;AACX;IACF;AAEA,QAAI,OAAO,QAAQ;AACjB,UAAK,OAAgB,aAAY,GAAI;AACnC,YAAI,KAAK,mBAAmB;AAC1B,uBAAa,KAAK,mBAAmB,WAAW,OAAO;QACzD;AACA,qBAAa,QAAQ,WAAW,QAAQ;AACxC,aAAK,oBAAoB;AACzB,aAAK,mBAAmB,KAAK,IAAG;AAChC,aAAK,eAAc;MACrB;AAEA,UAAI,KAAK,WAAW,SAAS;AAC3B,aAAK,WAAW,QAAQ,MAAM,KAAK;MACrC;IACF;AAEA,QAAI,OAAO,UAAU,KAAK,WAAW,SAAS;AAC5C,WAAK,WAAW,QAAQ,MAAM,KAAK;IACrC;EACF;EAEA,kBAAe;AA3HjB;AA4HI,UAAM,kBAAkB,KAAK;AAE7B,QAAI,EAAE,gBAAgB,aAAY,KAAM,gBAAgB,SAAQ,MAAO,WAAW,WAAW;AAE3F,YAAM,WACJ,KAAK,sBAAsB,QAAQ,KAAK,kBAAkB,SAAO,UAAK,qBAAL,mBAAuB,MACpF,WAAW,WACX,WAAW;AACjB,mBAAa,iBAAiB,QAAQ;IACxC;AAEA,QAAI,KAAK,WAAW,cAAc;AAChC,WAAK,WAAW,aAAa,eAAe;IAC9C;EACF;EAEA,gBAAgB,MAAI;AAElB,iBAAa,KAAK,QAAgB,WAAW,KAAK;AAElD,QAAI,KAAK,WAAW,cAAc;AAChC,WAAK,WAAW,aAAa,IAAI;IACnC;AACA,QAAI,KAAK,WAAW,SAAS;AAC3B,WAAK,WAAW,QAAQ,IAAI;IAC9B;EACF;EAEA,QAAQ,MAAM,OAAK;AACjB,QAAI,CAAC,KAAK,QAAQ;AAChB,UAAI,KAAK,kBAAkB;AACzB,aAAK,gBAAe;AACpB,aAAK,mBAAmB,KAAK,IAAG;AAChC,aAAK,mBAAmB;AACxB,aAAK,eAAc;MACrB;AACA;IACF;AAGA,QAAI,KAAK,OAAO,QAAQ;AACtB,YAAM,aAAa,KAAK,oBAAoB,KAAK,iBAAiB,OAAO,KAAK,OAAO;AAErF,UAAI,YAAY;AACd;MACF;AACA,UAAI,KAAK,kBAAkB;AAEzB,aAAK,gBAAe;MACtB;AAEA,WAAK,gBAAgB,IAAI;AACzB,WAAK,mBAAmB,KAAK,IAAG;AAChC,WAAK,mBAAmB,KAAK;AAC7B,WAAK,eAAc;IACrB;AACA,QAAI,KAAK,OAAO,UAAU,KAAK,WAAW,SAAS;AACjD,WAAK,WAAW,QAAQ,IAAI;IAC9B;EACF;EAEA,YAAY,MAAM,OAAK;AACrB,QAAI,KAAK,WAAW,aAAa;AAC/B,WAAK,WAAW,YAAY,IAAI;IAClC;EACF;EAEA,OAAO,MAAM,OAAK;AAChB,QAAI,CAAC,KAAK,OAAO,UAAU,CAAC,KAAK,gBAAgB;AAC/C;IACF;AACA,UAAM,yBAAwB;AAG9B,UAAM,cAAc,KAAK,MAAM,QAAQ,SAAS,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AAG1E,UAAM,SAAS,KAAK,MAAM,QAAQ,SAAS,UAAS;AACpD,UAAM,IAAI,KAAK,IAAI,KAAK,IAAI,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AACjE,UAAM,IAAI,KAAK,IAAI,KAAK,IAAI,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AACjE,SAAK,OAAO,iBAAiB,KAAK,QAAQ,GAAG,CAAC;AAE9C,iBAAa,KAAK,QAAQ,WAAW,QAAQ;AAC7C,SAAK,mBAAmB,KAAK,IAAG;AAChC,SAAK,eAAc;AACnB,QAAI,KAAK,WAAW,QAAQ;AAC1B,WAAK,WAAW,OAAO,IAAI;IAC7B;EACF;EAEA,UAAU,MAAM,OAAK;AACnB,QAAI,CAAC,KAAK,OAAO,UAAU,CAAC,KAAK,gBAAgB;AAC/C;IACF;AACA,QAAI,KAAK,2BAA2B;AAClC,WAAK,OAAO,OAAM;IACpB;AACA,iBAAa,KAAK,QAAQ,WAAW,OAAO;AAC5C,SAAK,OAAO,mBAAmB,KAAK,MAAM;EAC5C;;;;AC3NF,kBAA6B;AAC7B,oBAA+B;AAEzB,IAAO,cAAP,cAA2B,2BAAc;EAG7C,eAAY;AACV,UAAM,EAAC,MAAM,aAAa,YAAY,wBAAwB,EAAC,IAAI,KAAK;AAExE,WAAO;MACL,IAAI,+BACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA;QACA,GAAG,WAAW,mBAAkB;QAChC,gBAAgB;UACd,aAAa;UACb,GAAG,WAAW,wBAAuB;;OAExC,CAAC;;EAGR;;AAnBA,cADW,aACJ,aAAY;;;ACJrB,IAAAG,eAA6B;AAC7B,IAAAC,iBAAwB;AAElB,IAAO,aAAP,cAA0B,4BAAc;EAG5C,eAAY;AACV,UAAM,EAAC,MAAM,aAAa,YAAY,wBAAwB,EAAC,IAAI,KAAK;AAExE,WAAO;MACL,IAAI,yBACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA;QACA,GAAG,WAAW,mBAAkB;QAChC,gBAAgB;UACd,aAAa;UACb,GAAG,WAAW,wBAAuB;;OAExC,CAAC;;EAGR;;AAnBA,cADW,YACJ,aAAY;;;ACJrB,IAAAC,eAA6B;;;ACA7B,IAAAC,eAA6B;AAC7B,IAAAC,iBAAwB;AAElB,IAAO,oBAAP,cAAiC,4BAAc;EAGnD,kBAAe;AACb,SAAK,QAAQ,EAAC,cAAc,CAAA,EAAE;EAChC;EAEA,kBAAkB,EAAC,OAAO,YAAW,GAAC;AACpC,UAAM,EAAC,cAAa,IAAI,KAAK;AAC7B,QAAI,CAAC,eAAe;AAClB,aAAO,YAAY,eAAe,YAAY;IAChD;AACA,WAAO,YAAY,eAAe,YAAY,gBAAgB,YAAY;EAC5E;EAEA,YAAY,EAAC,OAAO,UAAU,YAAW,GAAC;AACxC,UAAM,YAAY,EAAC,OAAO,UAAU,YAAW,CAAQ;AACvD,QAAI,YAAY,oBAAoB;AAClC,YAAM,EAAC,QAAO,IAAI;AAClB,UAAI,aAAa,CAAA;AACjB,UAAI,OAAO,YAAY,YAAY;AACjC,qBAAa,MAAM,KAAK,IAAI,OAAO;MACrC,OAAO;AACL,qBAAa,CAAC,OAAO;MACvB;AACA,YAAM,eAAe,IAAI,IAAI,WAAW,KAAK,EAAE,CAAC;AAChD,YAAM,mBAAmB,MAAM,KAAK,YAAY;AAChD,WAAK,SAAS,EAAC,cAAc,iBAAgB,CAAC;IAChD;EACF;EAEA,eAAY;AACV,UAAM,EACJ,MACA,aACA,UAAAC,WACA,SACA,SACA,eACA,sBACA,UACA,eACA,gBACA,YACA,eACA,eACA,cACA,kBAAiB,IACf,KAAK;AAET,UAAM,oBAAoB,gBAAgB,CAAC,SAAS,KAAK,QAAQ,SAAS,IAAI,IAAI;AAElF,UAAM,aAAa,OAAO,YAAY,aAAa,UAAU,MAAM;AAEnE,WAAO;MACL,IAAI,yBACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,WAAW,gBAAgB,KAAK,IAAI,GAAG,KAAK,QAAQ,SAAS,OAAO,CAAC,IAAI;QACzE,cAAc,KAAK,MAAM;QACzB;QACA,UAAAA;QACA;QACA;QACA;QACA;QACA,SAAS;QACT,UAAU,gBAAgB;QAC1B,WAAW,iBAAiB;QAC5B,YAAY,cAAc;QAC1B,WAAW,iBAAiB;QAC5B,eAAe,qBAAqB;QACpC,gBAAgB;UACd,SAAS;UACT,UAAU,CAAC,mBAAmB,eAAe,WAAW;UACxD,GAAG;;OAEN,CAAC;;EAGR;;AAhFA,cADW,mBACJ,aAAY;;;ADDf,IAAO,aAAP,cAA0B,4BAAc;EAG5C,eAAY;AACV,UAAM,EAAC,MAAM,aAAa,YAAY,wBAAwB,EAAC,IAAI,KAAK;AAExE,WAAO;MACL,IAAI,kBACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA;QACA,GAAG,WAAW,mBAAkB;QAChC,gBAAgB;UACd,GAAG,WAAW,wBAAuB;UACrC,aAAa;;OAEhB,CAAC;;EAGR;;AAnBA,cADW,YACJ,aAAY;;;AEJrB,IAAAC,eAA6B;AAC7B,IAAAC,iBAA2B;AAE3B,IAAM,oBAAoB,CAAC,MAAM,EAAC,UAAU,WAAW,YAAW,MAAK;AACrE,QAAM,MAAM,YAAY,IAAI;AAC5B,QAAM,QAAQ,OAAO,aAAa,aAAa,SAAS,KAAK,MAAM,MAAM,SAAS,EAAE,IAAI;AACxF,QAAM,SAAS,OAAO,aAAa,aAAa,UAAU,IAAI,IAAI;AAClE,QAAM,YAAY,QAAQ;AAC1B,QAAM,aAAa,SAAS;AAC5B,SAAO;IACL,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,UAAU;IACxC,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,UAAU;IACxC,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,UAAU;IACxC,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,UAAU;;AAE5C;AAEM,IAAO,iBAAP,cAA8B,4BAAc;EAGhD,eAAY;AACV,UAAM,EAAC,MAAM,aAAa,YAAY,wBAAwB,EAAC,IAAI,KAAK;AAExE,UAAM,eAAe,WAAW,kBAAkB,cAAc;AAChE,UAAM,eAAe,WAAW,kBAAkB,cAAc;AAEhE,WAAO;MACL,IAAI,4BACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,YAAY,CAAC,SACX,kBAAkB,MAAM;UACtB;UACA,UAAU,WAAW,kBAAkB,UAAU;UACjD,WAAW,WAAW,kBAAkB,WAAW;SACpD;QACH,QAAQ,QAAQ,YAAY;QAC5B,cAAc;QACd,SAAS,QAAQ,YAAY;QAC7B,GAAG,WAAW,mBAAkB;QAChC,gBAAgB;UACd,YAAY;YACV;YACA,WAAW,+BAA+B,UAAU;YACpD,WAAW,+BAA+B,WAAW;;UAEvD,GAAG,WAAW,wBAAuB;;OAExC,CAAC;;EAGR;;AAlCA,cADW,gBACJ,aAAY;;;AClBd,IAAM;;EAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;ACM7B,IAAM,eAAe;;;;AAUd,IAAM,2BAA2B;EACtC,MAAM;EACN,IAAI;EACJ,IAAI;EACJ,cAAc;IACZ,cAAc;;;AAIZ,IAAO,wBAAP,cAAqC,eAAc;EAGvD,KAAK,OAAK;AACR,UAAM,EAAC,aAAY,IAAI,KAAK;AAC5B,UAAM,wBAA+C,EAAC,aAAY;AAClE,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,aAAa,SAAS,EAAC,kBAAkB,sBAAqB,CAAC;AACrE,UAAM,KAAK,KAAK;EAClB;EAEA,aAAU;AAER,UAAM,UAAU,MAAM,WAAW,MAAU;AAC3C,WAAO;MACL,GAAG;MACH;MACA,SAAS,CAAC,GAAG,QAAQ,SAAS,wBAAwB;;EAE1D;;AAlBA,cADW,uBACJ,aAAY;AAqBrB,sBAAsB,eAAe;;;EAGnC,cAAc;;;;AClDhB,IAAAC,eAA6B;AAC7B,IAAAC,iBAA2B;;;ACDrB,SAAU,uBAAuB,KAAK,OAAO,QAAQ,QAAQ,SAAS,IAAE;AAC5E,QAAM,YAAY,QAAQ;AAC1B,QAAM,aAAa,SAAS;AAC5B,QAAM,aAAa,EAAC,GAAG,IAAI,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,WAAU;AACjE,QAAM,UAAU,EAAC,GAAG,IAAI,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,WAAU;AAC9D,QAAM,cAAc,EAAC,GAAG,IAAI,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,WAAU;AAClE,QAAM,WAAW,EAAC,GAAG,IAAI,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,WAAU;AAE/D,QAAM,6BAA6B,iBACjC,YACA,SACA,aACA,QACA,MAAM;AAER,QAAM,0BAA0B,iBAC9B,SACA,UACA,YACA,QACA,MAAM,EACN,QAAO;AACT,QAAM,2BAA2B,iBAC/B,UACA,aACA,SACA,QACA,MAAM,EACN,QAAO;AACT,QAAM,8BAA8B,iBAClC,aACA,YACA,UACA,QACA,MAAM,EACN,QAAO;AAET,QAAM,SAAS;IACb,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;;AAGL,SAAO;AACT;AAYA,SAAS,iBAAiB,cAAc,IAAI,IAAI,QAAQ,QAAM;AAE5D,QAAM,MAAM,aAAa,IAAI,GAAG;AAChC,QAAM,MAAM,aAAa,IAAI,GAAG;AAGhC,QAAM,MAAM,aAAa,IAAI,GAAG;AAChC,QAAM,MAAM,aAAa,IAAI,GAAG;AAGhC,QAAM,SAAS,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM,KAAK,GAAG,KAAK;AAI9D,QAAM,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AACpC,MAAI,UAAU,SAAS;AAIvB,QAAM,UAAU,UAAU,KAAK,GAAG;AAClC,QAAM,UAAU,UAAU,KAAK,GAAG;AAElC,QAAM,SAAS,KAAK,IAAI,SAAS,OAAO;AAExC,MAAI,UAAU,QAAQ;AACpB,cAAU;AACV,aAAS,SAAS;EACpB;AAIA,QAAM,UAAU,mBAAmB,cAAc,SAAS,SAAS,KAAK,GAAG;AAC3E,QAAM,UAAU,mBAAmB,cAAc,SAAS,SAAS,KAAK,GAAG;AAI3E,QAAM,KAAK,aAAa,IAAI,IAAI,QAAQ,IAAI,QAAQ;AACpD,QAAM,KAAK,aAAa,IAAI,IAAI,QAAQ,IAAI,QAAQ;AAEpD,QAAM,IAAI,UAAU,IAAI,EAAE;AAC1B,QAAM,IAAI,UAAU,SAAS,MAAM;AAEnC,QAAM,cAAc,mBAAmB,cAAc,GAAG,GAAG,IAAI,EAAE;AAGjE,MAAI,aAAa,KAAK,MAAM,QAAQ,IAAI,YAAY,GAAG,QAAQ,IAAI,YAAY,CAAC;AAChF,QAAM,WAAW,KAAK,MAAM,QAAQ,IAAI,YAAY,GAAG,QAAQ,IAAI,YAAY,CAAC;AAGhF,MAAI,aAAa,WAAW;AAG5B,MAAI,aAAa,GAAG;AAClB,iBAAa;AACb,iBAAa,CAAC;EAChB;AAEA,MAAI,aAAa,KAAK;AAAI,iBAAa,KAAK,KAAK;AAEjD,QAAM,eAAe,SAAS,KAAK;AAEnC,SAAO,gBAAgB,YAAY,cAAc,YAAY,aAAa,MAAM;AAClF;AAEA,SAAS,UAAU,IAAI,IAAE;AACvB,SAAO,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACpC;AAEA,SAAS,mBAAmB,OAAO,SAAS,QAAQ,IAAI,IAAE;AACxD,QAAM,SAAS,UAAU;AAEzB,SAAO;IACL,GAAG,MAAM,IAAI,KAAK;IAClB,GAAG,MAAM,IAAI,KAAK;;AAEtB;AAEA,SAAS,gBAAgB,YAAY,cAAc,YAAY,aAAa,QAAM;AAChF,QAAM,cAAc,KAAK,IAAI,aAAa,YAAY;AACtD,QAAM,OAAO,KAAK,KAAK,UAAU;AAEjC,QAAM,SAAS,CAAA;AAEf,WAAS,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;AACpC,UAAM,SAAS,YAAY,IAAI,KAAK,IAAI,aAAc,OAAO,IAAK,YAAY,IAAI;AAElF,UAAM,SAAS,YAAY,IAAI,KAAK,IAAI,aAAc,OAAO,IAAK,YAAY,IAAI;AAElF,UAAM,QAAQ,CAAC,QAAQ,MAAM;AAC7B,WAAO,KAAK,KAAK;EACnB;AACA,SAAO;AACT;;;ADjJA,IAAM,2BAA2B,CAAC,MAAM,EAAC,UAAU,WAAW,aAAa,gBAAe,MAAK;AAC7F,QAAM,MAAM,YAAY,IAAI;AAC5B,QAAM,QAAQ,OAAO,aAAa,aAAa,SAAS,IAAI,IAAI;AAChE,QAAM,SAAS,OAAO,aAAa,aAAa,UAAU,IAAI,IAAI;AAClE,QAAM,eACJ,OAAO,oBAAoB,aAAa,gBAAgB,IAAI,IAAI;AAClE,QAAM,SAAS;AACf,SAAO,uBAAuB,KAAK,OAAO,QAAQ,cAAc,MAAM;AACxE;AAEM,IAAO,iCAAP,cAA8C,4BAAc;EAGhE,eAAY;AACV,UAAM,EAAC,MAAM,aAAa,YAAY,wBAAwB,EAAC,IAAI,KAAK;AAExE,UAAM,eAAe,WAAW,kBAAkB,cAAc;AAChE,UAAM,eAAe,WAAW,kBAAkB,cAAc;AAEhE,WAAO;MACL,IAAI,4BACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,YAAY,CAAC,SACX,yBAAyB,MAAM;UAC7B;UACA,UAAU,WAAW,kBAAkB,UAAU;UACjD,WAAW,WAAW,kBAAkB,WAAW;UACnD,iBAAiB,WAAW,kBAAkB,iBAAiB;SAChE;QACH,QAAQ,QAAQ,YAAY;QAC5B,SAAS,QAAQ,YAAY;QAC7B,GAAG,WAAW,mBAAkB;QAChC,gBAAgB;UACd,YAAY;YACV;YACA,WAAW,+BAA+B,UAAU;YACpD,WAAW,+BAA+B,WAAW;YACrD,WAAW,+BAA+B,iBAAiB;;UAE7D,GAAG,WAAW,wBAAuB;;OAExC,CAAC;;EAGR;;AAnCA,cADW,gCACJ,aAAY;;;AEfrB,IAAAC,eAA6B;;;ACA7B,IAAAC,eAA6B;AAC7B,IAAAC,iBAAwB;;;ACAjB,IAAM,gBAAgB;EAC3B,eAAe;IACb,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,MAAM;IACJ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,mBAAmB;IACjB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,UAAU;IACR,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,aAAa;IACX,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,IAAI;IACF,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,WAAW;IACT,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,uBAAuB;IACrB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,gBAAgB;IACd,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,iBAAiB;IACf,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,mBAAmB;IACjB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,YAAY;IACV,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,uBAAuB;IACrB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,gBAAgB;IACd,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,sBAAsB;IACpB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,eAAe;IACb,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,8BAA8B;IAC5B,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,uBAAuB;IACrB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,uBAAuB;IACrB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,gBAAgB;IACd,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,mBAAmB;IACjB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,YAAY;IACV,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,QAAQ;IACN,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,kBAAkB;IAChB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,SAAS;IACP,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,eAAe;IACb,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,MAAM;IACJ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,MAAM;IACJ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,gBAAgB;IACd,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,OAAO;IACL,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,0BAA0B;IACxB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,mBAAmB;IACjB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,yBAAyB;IACvB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,kBAAkB;IAChB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,iBAAiB;IACf,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,QAAQ;IACN,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,cAAc;IACZ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,KAAK;IACH,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,cAAc;IACZ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,MAAM;IACJ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,oBAAoB;IAClB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,WAAW;IACT,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,eAAe;IACb,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,MAAM;IACJ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,cAAc;IACZ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,KAAK;IACH,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,qBAAqB;IACnB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,cAAc;IACZ,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,YAAY;IACV,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,mBAAmB;IACjB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,wBAAwB;IACtB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,iBAAiB;IACf,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,wBAAwB;IACtB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,iBAAiB;IACf,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,yBAAyB;IACvB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,kBAAkB;IAChB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,sBAAsB;IACpB,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,eAAe;IACb,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,WAAW;IACT,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;EAER,GAAG;IACD,GAAG;IACH,GAAG;IACH,OAAO;IACP,QAAQ;IACR,MAAM;;;;;ACnaH,IAAM,eAAe;EAC1B,SACE;;;;AFGE,IAAO,cAAP,cAA2B,4BAAc;EAW7C,eAAY;AACV,UAAM,EAAC,WAAW,GAAG,WAAU,IAAI,KAAK;AACxC,WAAO;MACL,IAAI,yBACF,KAAK,iBAAiB;QACpB,IAAI;QACJ,WAAW,aAAa;QACxB,aAAa;QACb,SAAS;QACT,GAAG;OACJ,CAAC;;EAGR;;AAvBA,cADW,aACJ,aAAY;AAEnB,cAHW,aAGJ,gBAAe;EACpB,IAAI;EACJ,MAAM,CAAA;EACN,WAAW,CAAC,MAAM,EAAE;EACpB,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;EACzB,SAAS,CAAC,MAAM;;;;ADXd,IAAO,sBAAP,cAAmC,4BAAc;EAGrD,kBAAkB,EAAC,OAAO,YAAW,GAAC;AACpC,UAAM,EAAC,WAAU,IAAI,KAAK;AAC1B,UAAM,gBAAgB,WAAW,kBAAkB,eAAe;AAClE,QAAI,CAAC,eAAe;AAClB,aAAO,YAAY;IACrB;AACA,WAAO,YAAY,oBAAoB,YAAY;EACrD;EAEA,eAAY;AACV,UAAM,EAAC,MAAM,aAAa,YAAY,wBAAwB,EAAC,IAAI,KAAK;AAExE,UAAM,UAAU,WAAW,kBAAkB,SAAS;AACtD,UAAM,gBAAgB,WAAW,kBAAkB,eAAe;AAClE,UAAM,oBAAoB,gBAAgB,CAAC,SAAS,KAAK,QAAQ,SAAS,IAAI,IAAI;AAClF,UAAM,mBAAmB,WAAW,kBAAkB,WAAW;AAEjE,UAAM,YACJ,OAAO,qBAAqB,aAAa,mBAAmB,MAAM;AAEpE,WAAO;MACL,IAAI,YACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA;QACA,WAAW,gBAAgB,KAAK,IAAI,GAAG,KAAK,QAAQ,SAAS,IAAI,IAAI;QACrE,GAAG,WAAW,mBAAkB;QAChC;QACA,gBAAgB;UACd,GAAG,WAAW,wBAAuB;UACrC,aAAa;UACb,SAAS;;OAEZ,CAAC;;EAGR;;AAvCA,cADW,qBACJ,aAAY;;;AIJrB,IAAAC,gBAAgD;;;ACAhD,IAAAC,eAA6B;AAC7B,IAAAC,iBAAwB;AAElB,IAAO,wBAAP,cAAqC,4BAAc;EAGvD,eAAY;AACV,UAAM,EACJ,MACA,eACA,wBAAwB,GACxB,qBAAqB,GACrB,qBAAqB,GACrB,GAAG,WAAU,IACX,KAAK;AACT,WAAO;MACL,IAAI,yBACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC3C,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC3C,gBAAgB;UACd,UAAU;UACV,mBAAmB;UACnB,mBAAmB;UACnB,UAAU;;QAEZ,GAAG;OACJ,CAAC;;EAGR;;AA5BA,cADW,uBACJ,aAAY;;;ACJrB,IAAAC,gBAA6B;AAC7B,IAAAC,iBAAwB;AAElB,IAAO,gBAAP,cAA6B,6BAAc;EAG/C,eAAY;AACV,UAAM,EACJ,MACA,eACA,wBAAwB,GACxB,qBAAqB,GACrB,qBAAqB,GACrB,GAAG,WAAU,IACX,KAAK;AACT,WAAO;MACL,IAAI,yBACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,SAAS,CAAC,MAAK;AACb,gBAAM,EAAC,gBAAgB,gBAAgB,cAAa,IAAI,cAAc,CAAC;AACvE,iBAAO,CAAC,gBAAgB,GAAG,eAAe,cAAc;QAC1D;QACA,gBAAgB;UACd,UAAU;UACV,SAAS;UACT,UAAU;;QAEZ,GAAG;OACJ,CAAC;;EAGR;;AA7BA,cADW,eACJ,aAAY;;;ACJrB,IAAAC,gBAA6B;AAC7B,IAAAC,kBAA0C;;;ACD1C,IAAAC,gBAAgD;AAChD,IAAAC,iBAAwB;AACxB,gCAA6B;AAI7B,IAAM,eAAe;EACnB,IAAI;EACJ,SAAS,CAAC,MAAM,EAAE;EAClB,UAAU,CAAC,MAAM;EACjB,UAAU;EACV,kBAAkB,gCAAkB;EACpC,MAAM;;AAGF,IAAO,cAAP,cAA2B,6BAAc;EAG7C,kBAAe;AACb,SAAK,QAAQ,EAAC,eAAe,CAAA,EAAE;EACjC;EAEA,kBAAkB,EAAC,YAAW,GAAC;AAC7B,WAAO,YAAY,eAAe,YAAY;EAChD;EAEA,YAAY,EAAC,OAAO,UAAU,YAAW,GAAC;AACxC,UAAM,YAAY,EAAC,OAAO,UAAU,YAAW,CAAQ;AACvD,QAAI,YAAY,eAAe,YAAY,cAAc;AACvD,WAAK,iBAAgB;IACvB;EACF;EAEA,mBAAgB;AACd,UAAM,EAAC,KAAI,IAAI,KAAK;AACpB,UAAM,QAAQ,KAAK,OAAO,CAAC,KAAK,MAAK;AACnC,YAAM,iBAAkB,KAAK,MAAc,kBAAkB,CAAC;AAC9D,YAAM,iBAAkB,KAAK,MAAc,kBAAkB,CAAC;AAC9D,YAAM,gBAAiB,KAAK,MAAc,iBAAiB,CAAC;AAG5D,YAAM,0BAA0B,cAAc,SAAQ,EAAG,MAAM,GAAG;AAKlE,YAAM,aAAS,0CACb,CAAC,GAAG,gBAAgB,GAAG,yBAAyB,GAAG,cAAc,GACjE,KACA,EAAE;AAGJ,YAAM,OAAO,CAAA;AACb,eAAS,MAAM,GAAG,MAAM,OAAO,QAAQ,OAAO,GAAG;AAC/C,aAAK,KAAK,CAAC,OAAO,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC;MAC1C;AACA,UAAI,KAAK,IAAI;AACb,aAAO;IACT,GAAG,CAAA,CAAE;AACL,SAAK,SAAS,EAAC,MAAK,CAAC;EACvB;EAEA,eAAY;AACV,UAAM,EAAC,kBAAkB,UAAAC,WAAU,UAAU,IAAI,eAAc,IAAI,KAAK;AACxE,UAAM,EAAC,MAAK,IAAI,KAAK;AACrB,WAAO,IAAI,yBAAU;MACnB,IAAI,GAAG;MACP,MAAM;MACN,SAAS,CAAC,MAAM;MAChB,UAAAA;MACA;MACA;MACA;KACD;EACH;;AA1DA,cADW,aACJ,aAAY;AA6DrB,YAAY,YAAY;AACxB,YAAY,eAAe;;;AD1E3B,IAAM,QAAQ;AAER,IAAO,kBAAP,cAA+B,6BAAc;;EAIjD,eAAY;AACV,UAAM,EACJ,MACA,eACA,wBAAwB,GACxB,qBAAqB,GACrB,qBAAqB,GACrB,GAAG,WAAU,IACX,KAAK;AACT,WAAO;MACL,SACE,IAAI,iCACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,aAAa,CAAC,MAAM,cAAc,CAAC,EAAE,cAAc,CAAC;QACpD,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,GAAG;QACpC,WAAW,CAAC,MAAM;QAClB,gBAAgB;UACd,aAAa;;QAEf,GAAG;OACJ,CAAC;MAEN,SACE,IAAI,0BACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC3C,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE,cAAc,CAAC;QAC1D,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,GAAG;QACpC,gBAAgB;UACd,mBAAmB;UACnB,mBAAmB;;QAErB,GAAG;OACJ,CAAC;MAEN,SACE,IAAI,0BACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE,cAAc,CAAC;QAC1D,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC3C,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,GAAG;QACpC,gBAAgB;UACd,mBAAmB;UACnB,mBAAmB;;QAErB,GAAG;OACJ,CAAC;MAEN,IAAI,YACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC3C,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC3C,kBAAkB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC1C,gBAAgB;UACd,mBAAmB;UACnB,mBAAmB;UACnB,kBAAkB;UAClB,UAAU;UACV,UAAU;;QAEZ,GAAG;OACJ,CAAC;;EAGR;;AA3EA,cADW,iBACJ,aAAY;;;AHArB,IAAM,iBAAiB;EACrB,CAAC,UAAU,IAAI,GAAG;EAClB,CAAC,UAAU,IAAI,GAAG;EAClB,CAAC,UAAU,YAAY,GAAG;;AAGtB,IAAO,YAAP,cAAyB,6BAAc;EAe3C,YAAY,EAAC,OAAO,UAAU,YAAW,GAAC;AACxC,UAAM,YAAY,EAAC,OAAO,UAAU,YAAW,CAAQ;AACvD,QAAI,YAAY,aAAa;AAC3B,WAAK,gBAAe;IACtB;EACF;EAEA,kBAAe;AACb,UAAM,EAAC,MAAM,cAAa,IAAI,KAAK;AAEnC,UAAM,gBAAgB,KAAK,OACzB,CAAC,KAAK,MAAK;AACT,YAAM,EAAC,KAAI,IAAI,cAAc,CAAC;AAC9B,UAAI,IAAI,EAAE,KAAK,CAAC;AAChB,aAAO;IACT,GACA;MACE,CAAC,UAAU,IAAI,GAAG,CAAA;MAClB,CAAC,UAAU,IAAI,GAAG,CAAA;MAClB,CAAC,UAAU,YAAY,GAAG,CAAA;KAC3B;AAEH,SAAK,SAAS,EAAC,cAAa,CAAC;EAC/B;EAEA,eAAY;AACV,UAAM,EAAC,eAAe,UAAU,uBAAuB,YAAY,GAAE,IAAI,KAAK;AAE9E,UAAM,EAAC,cAAa,IAAI,KAAK;AAG7B,WAAO,OAAO,QAAQ,aAAa,EAAE,IAAI,CAAC,GAAG,QAAO;AAClD,YAAM,CAAC,MAAM,QAAQ,IAAI;AACzB,YAAM,QAAQ,eAAe,IAAI;AAEjC,UAAI,CAAC,OAAO;AACV,eAAO;MACT;AACA,aAAO,IAAI,MAAM;QACf,IAAI,GAAG,MAAM;QACb,MAAM;QACN;QACA,UAAU,WAAW,kBAAkB,UAAU;QACjD,UAAU,WAAW,kBAAkB,UAAU;QACjD,oBAAoB,WAAW,+BAA+B,UAAU;QACxE,oBAAoB,WAAW,+BAA+B,UAAU;QACxE;QACA;QACA,kBAAkB,gCAAkB;QACpC,YAAY;UACV,cAAc;;OAEV;IACV,CAAC;EACH;;AApEA,cADW,WACJ,aAAY;AAEnB,cAHW,WAGJ,gBAAe;EACpB,MAAM,CAAA;EACN,UAAU;EACV,eAAe,CAAC,OAAO;IACrB,MAAM,EAAE;IACR,gBAAgB,EAAE;IAClB,gBAAgB,EAAE;IAClB,eAAe,CAAA;;EAEjB,uBAAuB;;;;AKzB3B,IAAAC,gBAA6B;AAGvB,IAAO,iBAAP,cAA8B,6BAAc;EAGhD,eAAY;AACV,UAAM,EAAC,MAAM,eAAe,wBAAwB,GAAG,WAAU,IAAI,KAAK;AAC1E,WAAO;MACL,IAAI,kBACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,aAAa,CAAC,MAAK;AACjB,gBAAM,EAAC,gBAAgB,gBAAgB,gBAAgB,CAAA,EAAE,IAAI,cAAc,CAAC;AAE5E,gBAAM,YAAY,CAAC,gBAAgB,gBAAgB,GAAG,aAAa;AACnE,gBAAM,OAAO,UAAU,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,CAAC,GAAG,CAAC;AACvD,gBAAM,OAAO,UAAU,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,CAAC,GAAG,CAAC;AAEvD,iBAAO,CAAC,OAAO,UAAU,QAAQ,OAAO,UAAU,MAAM;QAC1D;QACA,UAAU,CAAC,MAAK;AACd,gBAAM,EAAC,gBAAgB,eAAc,IAAI,cAAc,CAAC;AAExD,gBAAM,CAAC,mBAAmB,iBAAiB,IACzC,eAAe,CAAC,IAAI,eAAe,CAAC,IAChC,CAAC,gBAAgB,cAAc,IAC/B,CAAC,gBAAgB,cAAc;AAErC,gBAAM,SAAS,kBAAkB,CAAC,IAAI,kBAAkB,CAAC;AACzD,gBAAM,SAAS,kBAAkB,CAAC,IAAI,kBAAkB,CAAC;AACzD,iBAAQ,KAAK,MAAM,QAAQ,MAAM,IAAI,OAAQ,KAAK;QACpD;QACA,GAAG,WAAW,mBAAkB;QAChC,gBAAgB;UACd,GAAG,WAAW,wBAAuB;UACrC,aAAa;;OAEhB,CAAC;;EAGR;;AAtCA,cADW,gBACJ,aAAY;;;ACJrB,IAAAC,gBAA6B;;;ACC7B,IAAAC,kBAAwB;AACxB,oBAAqB;;;ACFd,IAAM;;EAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAtB,IAAMC;;EAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AFQ7B,IAAMC,gBAAe;EACnB,GAAG,0BAAU;EACb,UAAU,EAAC,MAAM,YAAY,OAAO,EAAC;EACrC,UAAU,EAAC,MAAM,YAAY,OAAO,EAAC;;AAIjC,IAAO,gBAAP,cAA6B,0BAAS;EAC1C,aAAU;AACR,UAAM,gBAAgB,KAAK,kBAAiB,IAAK,cAAc;AAC/D,WAAO,EAAC,IAAI,IAAAC,KAAI,SAAS,CAAC,eAAe,SAAS,EAAC;EACrD;EAEA,kBAAe;AACb,UAAM,gBAAe;AACrB,SAAK,oBAAmB,EAAG,aAAa;MACtC,gBAAgB;QACd,MAAM;QACN,YAAY;QACZ,UAAU;QACV,cAAc;;MAEhB,qBAAqB;QACnB,MAAM;QACN,YAAY;QACZ,UAAU;QACV,cAAc;;KAEjB;AACD,SAAK,uBAAsB;AAC3B,SAAK,SAAS;MACZ,GAAG,KAAK;MACR,WAAW,qBAAO,sBAAsB,KAAK,QAAQ,KAAK,IAAI,CAAC;KAChE;EACH;EAEA,UAAO;AACL,UAAM,EAAC,UAAS,IAAI,KAAK;AACzB,QAAI,WAAW;AACb,gBAAU,IAAG;AACb,gBAAU,KAAI;IAChB;AACA,SAAK,SAAS;MACZ,WAAW,qBAAO,sBAAsB,KAAK,QAAQ,KAAK,IAAI,CAAC;KAChE;EACH;EAEA,YAAY,EAAC,OAAO,UAAU,YAAW,GAAC;AACxC,UAAM,YAAY,EAAC,OAAO,UAAU,YAAW,CAAQ;AACvD,UAAM,EAAC,aAAY,IAAI,KAAK;AAE5B,UAAM,eACJ,YAAY,eACZ,MAAM,SAAS,SAAS,QACvB,YAAY,0BACV,YAAY,sBAAsB,OAAO,YAAY,sBAAsB;AAEhF,QAAI,cAAc;AAChB,YAAM,SAAS,IAAI,aAAa,MAAM,KAAK,MAAM;AACjD,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ,KAAK;AAC1C,eAAO,CAAC,IACN,OAAO,MAAM,aAAa,aAAa,MAAM,SAAS,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM;MACjF;AACA,mBAAa,QAAQ,EAAC,MAAM,OAAM,CAAC;IACrC;AAEA,QAAI,MAAM,SAAS,SAAS,MAAM;AAChC,UAAI,KAAK,MAAM,OAAO;AACnB,aAAK,MAAM,MAAc,OAAM;MAClC;AACA,WAAK,SAAS,EAAC,OAAO,KAAK,UAAS,EAAE,CAAC;AACvC,WAAK,oBAAmB,EAAG,cAAa;IAC1C;EACF;EAEA,gBAAa;AACX,UAAM,cAAc,KAAK,OAAO;AAChC,yBAAO,qBAAsB,KAAK,MAAc,SAAS;EAC3D;EAEA,yBAAsB;AACpB,UAAM,IAAI,MAAM,iBAAiB;EAyBnC;EAEA,KAAK,EAAC,SAAQ,GAAC;AACb,UAAM,IAAI,MAAM,iBAAiB;EA4BnC;;AAGF,cAAc,YAAY;AACzB,cAAsB,eAAeD;;;ADjJhC,IAAO,YAAP,cAAyB,6BAAc;EAG3C,eAAY;AACV,UAAM,EAAC,MAAM,eAAe,wBAAwB,GAAG,WAAU,IAAI,KAAK;AAC1E,WAAO;MACL,IAAI,cACF,KAAK,iBAAiB;QACpB,IAAI;QACJ;QACA,GAAG,WAAW,mBAAkB;QAChC,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC3C,mBAAmB,CAAC,MAAM,cAAc,CAAC,EAAE;QAC3C,YAAY;UACV,WAAW;;QAEb,gBAAgB;UACd,GAAG,WAAW,wBAAuB;UACrC,mBAAmB;UACnB,mBAAmB;;OAEtB,CAAC;;EAGR;;AAvBA,cADW,WACJ,aAAY;;;AIGf,SAAU,YAAY,OAAmD;AAC7E,QAAM,EAAC,MAAM,OAAO,OAAO,YAAY,WAAU,IAAI;AAErD,QAAM,QAAQ,IAAI,MAAK;AAEvB,QAAM,YAAY,QAAQ,KAAK,IAAG;AAClC,QAAM,aAAa,SAAS;AAG5B,QAAM,UAAU,MAAM,IAAI,CAAC,SAAQ;AACjC,UAAM,EAAC,GAAE,IAAI,WAAW,IAAI;AAC5B,WAAO,IAAI,KAAK;MACd;MACA,MAAM;KACP;EACH,CAAC;AACD,QAAM,cAAc,OAAO;AAE3B,QAAM,UAAU,MAAM,IAAI,CAAC,SAAQ;AACjC,UAAM,EAAC,IAAI,UAAU,UAAU,SAAQ,IAAI,WAAW,IAAI;AAC1D,WAAO,IAAI,KAAK;MACd;MACA;MACA;MACA;MACA,MAAM;KACP;EACH,CAAC;AACD,QAAM,cAAc,OAAO;AAC3B,SAAO;AACT;;;ACnCM,SAAU,gBAAgB,MAAS;AACvC,MAAI,KAAK,OAAO,QAAW;AACzB,QAAI,MAAM,8BAA8B,EAAC;AACzC,WAAO;EACT;AACA,SAAO,EAAC,IAAI,KAAK,GAAE;AACrB;;;ACNM,SAAU,gBAAgB,MAAS;AACvC,QAAM,EAAC,IAAI,UAAU,UAAU,SAAQ,IAAI;AAE3C,MAAI,aAAa,UAAa,aAAa,QAAW;AACpD,QAAI,MAAM,gDAAgD,EAAC;AAC3D,WAAO;EACT;AAEA,SAAO;IACL;IACA,UAAU,YAAY;IACtB;IACA;;AAEJ;;;ACZO,IAAM,aAAa,CAAC,EAAC,MAAM,aAAa,iBAAiB,aAAa,gBAAe,MAAK;AAC/F,QAAM,EAAC,OAAO,WAAW,OAAO,MAAK,IAAI;AACzC,MAAI,CAAC,OAAO;AACV,QAAI,MAAM,kCAAkC,EAAC;AAC7C,WAAO;EACT;AAEA,QAAM,QAAQ,YAAY,EAAC,MAAM,OAAO,OAAO,YAAY,WAAU,CAAC;AACtE,SAAO;AACT;;;A/BgBA,IAAM,iBAAiB;EACrB,CAAC,UAAU,SAAS,GAAG;EACvB,CAAC,UAAU,iBAAiB,GAAG;EAC/B,CAAC,UAAU,sBAAsB,GAAG;EACpC,CAAC,UAAU,IAAI,GAAG;EAClB,CAAC,UAAU,MAAM,GAAG;EACpB,CAAC,UAAU,KAAK,GAAG;EACnB,CAAC,UAAU,MAAM,GAAG;;AAGtB,IAAM,2BAA2B;EAC/B,CAAC,oBAAoB,KAAK,GAAG;EAC7B,CAAC,oBAAoB,IAAI,GAAG;;AAG9B,IAAM,qBAAqB;EACzB,kBAAkB,gCAAkB;EACpC,YAAY;IACV,WAAW;;;AAkCT,IAAO,aAAP,cAA0B,6BAA+B;;EAiC7D;EAKA,cAAc,MAAK;AACjB,QAAI,KAAK,WAAW,KAAK,QAAQ,cAAc;AAC7C,WAAK,eAAc;AACnB,WAAK,eAAe,EAAC,aAAa,KAAI,CAAQ;IAChD;EACF;EAEA,YAAY,OAA4C;AACtD,UAAM,KAAK;EACb;EAEA,kBAAe;AACb,SAAK,QAAQ;MACX,oBAAoB,IAAI,mBAAmB,KAAK,OAAc,MAAM,KAAK,YAAW,CAAE;;AAExF,UAAM,SAAS,KAAK,MAAM;AAC1B,SAAK,gBAAgB,MAAM;EAC7B;EAEA,kBAAkB,EAAC,YAAW,GAAC;AAC7B,WAAO,YAAY,eAAe,YAAY;EAChD;EAEA,YAAY,EAAC,OAAO,UAAU,YAAW,GAAC;AACxC,QACE,YAAY,eACZ,MAAM,QACN,EAAE,MAAM,QAAQ,MAAM,IAAI,KAAK,MAAM,KAAK,WAAW,IACrD;AAEA,YAAM,QAAQ,KAAK,MAAM,YAAY,EAAC,MAAM,MAAM,KAAI,CAAC;AACvD,YAAM,SAAS,KAAK,MAAM;AAC1B,YAAM,cAAc,IAAI,YAAY,EAAC,OAAO,OAAM,CAAC;AACnD,WAAK,gBAAgB,WAAW;AAChC,WAAK,MAAM,mBAAmB,YAAY,KAAK;AAC/C,WAAK,YAAW;IAClB,WAAW,YAAY,gBAAgB,MAAM,UAAU,SAAS,OAAO;AACrE,YAAM,cAAc,IAAI,YAAY,EAAC,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAM,CAAC;AAC9E,WAAK,gBAAgB,WAAW;AAChC,WAAK,MAAM,mBAAmB,YAAY,KAAK;AAC/C,WAAK,YAAW;IAClB;EACF;EAEA,WAAQ;AACN,SAAK,mBAAkB;EACzB;EAEA,gBAAgB,aAAwB;AACtC,QAAI,gBAAgB,KAAK,MAAM,aAAa;AAC1C;IACF;AAEA,SAAK,mBAAkB;AACvB,QAAI,aAAa;AACf,WAAK,MAAM,cAAc;AACzB,WAAK,MAAM,YAAY,IAAG;AAE1B,WAAK,MAAM,YAAY,iBAAiB,kBAAkB,KAAK,WAAW;IAC5E;EACF;EAEA,qBAAkB;AAChB,QAAI,KAAK,MAAM,aAAa;AAC1B,WAAK,MAAM,YAAY,oBAAoB,kBAAkB,KAAK,WAAW;AAC7E,WAAK,MAAM,YAAY,MAAK;AAC5B,WAAK,MAAM,cAAc;IAC3B;EACF;EAEA,mBAAgB;AACd,UAAM,SAAS,KAAK,MAAM;AAC1B,UAAM,EAAC,UAAS,IAAI,KAAK;AACzB,QAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,QAAQ,SAAS,KAAK,UAAU,WAAW,GAAG;AAChF,aAAO,CAAA;IACT;AAEA,WAAO,UAAU,OAAO,OAAO,EAAE,IAAI,CAAC,OAAO,QAAO;AAClD,YAAM,EAAC,WAAW,MAAM,UAAU,MAAM,OAAO,CAAC,UAAU,OAAO,GAAG,UAAS,IAAI;AACjF,YAAM,YAAY,eAAe,MAAM,IAAI;AAC3C,UAAI,CAAC,WAAW;AACd,YAAI,MAAM,sBAAsB,MAAM,MAAM,EAAC;AAC7C,cAAM,IAAI,MAAM,sBAAsB,MAAM,MAAM;MACpD;AACA,YAAM,aAAa,IAAI,WAAW,WAAW;QAC3C,oBAAqB,KAAK,MAAM,mBAA2B,mBAAkB;OAC9E;AACD,YAAME,aAAY,WAAW,kBAAkB,WAAW;AAC1D,aAAO,IAAI,UAAU;QACnB,GAAG;QACH,IAAI,aAAa;QACjB,MAAM,KAAK,OAAO,SAAQ,CAAE;QAC5B,aAAa,iBAAiB,OAAO,iBAAiBA,UAAS;QAC/D;QACA,uBAAuB;UACrB,OAAO,oBAAmB;UAC1B,OAAO,eAAc;UACrB,WAAW,+BAA+B,WAAW;UACrD,KAAI;QACN;QACA;OACM;IACV,CAAC;EACH;EAEA,mBAAgB;AACd,UAAM,SAAS,KAAK,MAAM;AAC1B,UAAM,EAAC,UAAS,IAAI,KAAK;AAEzB,QAAI,CAAC,UAAU,CAAC,WAAW;AACzB,aAAO,CAAA;IACT;AAEA,YAAQ,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC,SAAS,GACtD,OAAO,OAAO,EACd,QAAQ,CAAC,OAAO,QAAO;AACtB,YAAM,EAAC,YAAY,OAAO,CAAC,UAAU,OAAO,UAAU,MAAM,GAAG,cAAa,IAAI;AAChF,YAAM,aAAa,IAAI,WACrB;QACE,MAAM;QACN,GAAG;SAEL;QACE,oBAAqB,KAAK,MAAM,mBAA2B,mBAAkB;OAC9E;AAGH,YAAM,YAAY,IAAI,UAAU;QAC9B,GAAG;QACH,IAAI,cAAc;QAClB,MAAM,KAAK,OAAO,SAAQ,CAAE;QAC5B,eAAe,OAAO;QACtB,UAAU;QACV,uBAAuB,CAAC,OAAO,oBAAmB,GAAI,OAAO,eAAc,CAAE,EAAE,KAAI;QACnF;QACA;OACM;AAER,UAAI,CAAC,cAAc,CAAC,MAAM,QAAQ,UAAU,KAAK,WAAW,WAAW,GAAG;AACxE,eAAO;MACT;AACA,YAAM,kBAAkB,WAAW,OAAO,OAAO,EAAE,QAAQ,CAAC,gBAAgB,SAAQ;AAClF,cAAM,iBAAiB,yBAAyB,eAAe,IAAI;AACnE,YAAI,CAAC,gBAAgB;AACnB,cAAI,MAAM,gCAAgC,eAAe,MAAM,EAAC;AAChE,gBAAM,IAAI,MAAM,gCAAgC,eAAe,MAAM;QACvE;AACA,cAAM,sBAAsB,IAAI,WAAW,gBAAgB;UACzD,oBAAqB,KAAK,MAAM,mBAA2B,mBAAkB;SAC9E;AACD,eAAO,IAAI,eAAe;UACxB,GAAG;UACH,IAAI,kBAAkB;UACtB,MAAM,KAAK,OAAO,SAAQ,CAAE;UAC5B,eAAe,OAAO;UACtB,UAAU;UACV,uBAAuB,CAAC,OAAO,oBAAmB,GAAI,OAAO,eAAc,CAAE,EAAE,KAAI;UACnF,YAAY;SACN;MACV,CAAC;AACD,aAAO,CAAC,WAAW,eAAe;IACpC,CAAC;EACL;EAEA,QAAQ,MAAM,OAAK;AACjB,WAAQ,KAAK,MAAM,mBAAmB,QAAQ,MAAM,KAAK,KAA4B;EACvF;EAEA,QAAQ,MAAM,OAAK;AACjB,WAAQ,KAAK,MAAM,mBAAmB,QAAQ,MAAM,KAAK,KAA4B;EACvF;EAEA,YAAY,MAAM,OAAK;AACrB,SAAK,MAAM,mBAAmB,YAAY,MAAM,KAAK;EACvD;EAEA,OAAO,MAAM,OAAK;AAChB,SAAK,MAAM,mBAAmB,OAAO,MAAM,KAAK;EAClD;EAEA,UAAU,MAAM,OAAK;AACnB,SAAK,MAAM,mBAAmB,UAAU,MAAM,KAAK;EACrD;EAEA,eAAY;AACV,WAAO,CAAC,KAAK,iBAAgB,GAAI,KAAK,iBAAgB,CAAE;EAC1D;;AA/NA,cADW,YACJ,aAAY;AAEnB,cAHW,YAGJ,gBAA2C;;;EAGhD,UAAU;;EAGV,aAAa;EAEb,WAAW,CAAA;EACX,YAAY;IACV,cAAc,MAAK;IAAE;IACrB,SAAS,MAAK;IAAE;IAChB,cAAc,MAAK;IAAE;IACrB,SAAS,MAAK;IAAE;IAChB,QAAQ,MAAK;IAAE;;EAEjB,WAAW;IACT,QAAQ;IACR,aAAa;;IAEb,YAAY,CAAA;;EAEd,YAAY;IACV,SAAS,MAAK;IAAE;IAChB,SAAS,MAAK;IAAE;;EAElB,gBAAgB;;;;;AgC/GpB,IAAAC,iBAAgC;;;;ACAhC,oBAAwB;AAOlB,IAAO,kBAAP,cAA+B,wBAA+B;EAClE,mBAAyD;EAEzD,UAAU,MAAK;AACb,QAAI,KAAK,kBAAkB;AACzB,WAAK,MAAM,QAAO;AAClB,WAAK,mBAAmB,WAAW,KAAK,SAAS,GAAG;IACtD;EACF;EAEA,qBAAqB,MAAK;AACxB,SAAK,mBAAmB,WAAW,KAAK,SAAS,GAAG;EACtD;EAEA,uBAAuB,MAAK;AAC1B,QAAI,KAAK,kBAAkB;AACzB,mBAAa,KAAK,gBAAgB;IACpC;AACA,SAAK,mBAAmB;EAC1B;EAEA,SAAM;AACJ,eACE,mBAAAC,KAAA,OAAA,EAAK,WAAU,sBAAoB,cACjC,mBAAAA,KAAA,OAAA,EACE,OAAO;MACL,eAAe;OAEjB,aAAa,CAAC,UAAS;AACrB,WAAK,mBAAkB;AACvB,eAAS,iBAAiB,WAAW,KAAK,sBAAsB,EAAC,MAAM,KAAI,CAAC;IAC9E,GAAC,UAEA,KAAK,MAAM,SAAQ,CAAA,EAChB,CAAA;EAGZ;;;;ADtCK,IAAM,qBAAqB,CAAC,EAAC,SAAQ,UAC1C,oBAAAC,MAAA,OAAA,EACE,OAAO;EACL,YAAY;EACZ,SAAS;EACT,eAAe;EACf,UAAU;EACV,QAAQ;EACR,YAAY;GACb,UAAA,CAEA,KACA,UAAU,GAAG,EAAA,CAAA;AAIX,IAAM,4BAA4B,CAAC,EAAC,SAAQ,UACjD,oBAAAA,MAAA,OAAA,EACE,OAAO;EACL,YAAY;EACZ,cAAc;EACd,QAAQ;EACR,WAAW;EACX,QAAQ;EACR,OAAO;GACR,UAAA,CAEA,KACA,UAAU,GAAG,EAAA,CAAA;AAYX,IAAM,mBAAmB,CAAC,cAC/B,oBAAAA,MAAA,OAAA,EACE,SAAS,MAAM,SACf,OAAO;EACL,OAAO;EACP,QAAQ;EACR,UAAU;EACV,MAAM,MAAM;EACZ,KAAK,MAAM;EACX,WAAW,UAAU,MAAM,UAAU;;;;;GAKtC,UAAA,CAEA,KACA,MAAM,UAAU,GAAG,EAAA,CAAA;AAIjB,IAAM,qBAAqB,CAAC,EAAC,SAAQ,UAC1C,oBAAAA,MAAA,OAAA,EACE,OAAO;EACL,YAAY;EACZ,YAAY;EACZ,QAAQ;EACR,SAAS;EACT,eAAe;EACf,WAAW;EACX,SAAS;EACT,OAAO;GACR,UAAA,CAEA,KACA,UAAU,GAAG,EAAA,CAAA;AAIX,IAAM,iBAAiB,CAAC,EAAC,SAAQ,UACtC,oBAAAA,MAAA,OAAA,EACE,OAAO;EACL,SAAS;EACT,QAAQ;EACR,SAAS;EACT,OAAO;;;;;;;;GASR,UAAA,CAEA,KACA,UAAU,GAAG,EAAA,CAAA;AAIX,IAAM,oBAAoB,CAAC,EAAC,SAAQ,UACzC,oBAAAA,MAAA,OAAA,EACE,OAAO;EACL,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,QAAQ;;;;;GAMT,UAAA,CAEA,KACA,UAAU,GAAG,EAAA,CAAA;AAsBZ,IAAO,cAAP,cAA2B,yBAA2B;;EAoB1D,QAAQ,MAAM,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM,QAAQ;EACrD,UAAU,MAAM,KAAK,MAAM,MAAM,GAAG,KAAK,KAAK,MAAM,QAAQ;EAC5D,UAAU,MAAM,KAAK,MAAM,MAAM,KAAK,MAAM,UAAU,CAAC;EACvD,WAAW,MAAM,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,UAAU,CAAC;;EAG7D,SAAS,MAAM,KAAK,MAAM,OAAO,KAAK,MAAM,SAAS;EACrD,UAAU,MAAM,KAAK,MAAM,OAAO,KAAK,KAAK,MAAM,SAAS;EAC3D,oBAAoB,CAAC,QAAO;AAC1B,UAAM,QAAQ,IAAI,OAAO,QAAQ,KAAK,MAAM;AAC5C,SAAK,MAAM,OAAO,KAAK;EACzB;EAEA,SAAM;AACJ,UAAM,UAAU;MACd,EAAC,KAAK,IAAI,MAAM,IAAI,QAAQ,GAAG,SAAS,KAAK,OAAO,SAAS,UAAK,KAAK,KAAI;MAC3E,EAAC,KAAK,IAAI,MAAM,GAAG,QAAQ,KAAK,SAAS,KAAK,SAAS,SAAS,UAAK,KAAK,OAAM;MAChF,EAAC,KAAK,IAAI,MAAM,IAAI,QAAQ,IAAI,SAAS,KAAK,UAAU,SAAS,UAAK,KAAK,QAAO;MAClF,EAAC,KAAK,IAAI,MAAM,IAAI,QAAQ,KAAK,SAAS,KAAK,SAAS,SAAS,UAAK,KAAK,OAAM;;AAGnF,eACE,oBAAAA,MAAC,oBAAkB,EAAA,UAAA,KACjB,oBAAAA,MAAC,2BAAyB,EAAA,UAAA,CACvB,QAAQ,IAAI,CAAC,UACZ,oBAAAC,KAAC,kBAAgB,EAAa,KAAK,GAAG,EAAE,SAAS,MAAM,GAAG,EAAE,UAAU,QAAQ,EAAE,QAAM,cACpF,oBAAAA,KAAC,iBAAe,EAAC,SAAS,EAAE,SAAO,UAAG,EAAE,QAAO,CAAA,EAAmB,GAD7C,EAAE,GAAG,CAG7B,OACD,oBAAAA,KAAC,kBAAgB,EACf,KAAK,QACL,MAAM,QACN,SAAS,MAAK;IAEd,GAAC,UAEA,OAAG,CAAA,CACa,EAAA,CAAA,OAErB,oBAAAD,MAAC,oBAAkB,EAAA,UAAA,KACjB,oBAAAC,KAAC,mBAAiB,EAAA,cAChB,oBAAAA,KAAC,iBAAe,EAAC,SAAS,KAAK,QAAM,UAAG,IAAG,CAAA,EAAmB,CAAA,OAEhE,oBAAAA,KAAC,gBAAc,EAAA,cACb,oBAAAA,KAAA,SAAA;MACE,MAAK;MACL,OAAO,KAAK,MAAM;MAClB,KAAK,KAAK,MAAM;MAChB,KAAK,KAAK,MAAM;MAChB,MAAM,KAAK,MAAM;MACjB,UAAU,KAAK;;MAEf,QAAO;IAAU,CAAA,EACjB,CAAA,OAEJ,oBAAAA,KAAC,mBAAiB,EAAA,cAChB,oBAAAA,KAAC,iBAAe,EAAC,SAAS,KAAK,SAAO,UAAG,IAAG,CAAA,EAAmB,CAAA,CAC7C,EAAA,CAAA,CACD,EAAA,CAAA;EAG3B;;AAhFA,cADW,aACJ,eAAc;AAErB,cAHW,aAGJ,gBAA2C;EAChD,IAAI;EACJ,QAAQ;EACR,WAAW;EACX,WAAW,MAAK;EAAE;EAClB,OAAO,MAAK;EAAE;EACd,QAAQ,MAAK;EAAE;EACf,WAAW;EACX,UAAU;EACV,WAAW;EACX,SAAS;EACT,SAAS;EACT,OAAO,CAAA;EACP,WAAW;;AAoET,IAAO,oBAAP,MAAwB;EAC5B,KAAK;EACL;EACA,YAA6B;EAC7B,cAAyC;EACzC,SAAyB;EACzB,YAAsC,CAAA;EACtC;EACA;EAEA,YAAY,OAAuB;AACjC,SAAK,QAAQ,EAAC,GAAG,YAAY,cAAc,GAAG,MAAK;AACnD,SAAK,KAAK,MAAM,MAAM;AACtB,SAAK,SAAS,MAAM,UAAU;AAC9B,SAAK,YAAY,MAAM,aAAa;AAKpC,UAAM,QAAQ,MAAM,SAAS,CAAA;AAC7B,SAAK,QAAQ;EACf;EAEA,MAAM,EAAC,KAAI,GAAoB;AAC7B,SAAK,OAAO;AACZ,SAAK,UAAU,SAAS,cAAc,KAAK;AAE3C,UAAM,EAAC,OAAO,UAAS,IAAI,KAAK;AAChC,SAAK,QAAQ,UAAU,IAAI,eAAe,kBAAkB;AAC5D,QAAI,WAAW;AACb,WAAK,QAAQ,UAAU,IAAI,SAAS;IACtC;AACA,QAAI,OAAO;AACT,aAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MACpC,KAAK,QAAQ,MAAM,YAAY,KAAK,KAAe,CAAC;IAExD;AACA,UAAM,SACJ,oBAAAA,KAAC,aAAW,EAAA,GACN,KAAK,OACT,QAAQ,KAAK,gBAAgB,KAAK,IAAI,GACtC,OAAO,KAAK,YAAY,KAAK,IAAI,EAAC,CAAA;AAGtC,+BAAO,IAAI,KAAK,OAAO;AAEvB,WAAO,KAAK;EACd;EAEA,WAAQ;AACN,SAAK,OAAO;AACZ,SAAK,UAAU;EACjB;EAEA,SAAS,OAAgC;AACvC,WAAO,OAAO,KAAK,OAAO,KAAK;EACjC;EAEA,iBAAiB,UAAkB;AACjC,SAAK,UAAU,SAAS,EAAE,IAAI;EAChC;EAEA,gBAAgB,WAAiB;AAE/B,eAAW,QAAQ,KAAK,KAAK,aAAY,GAAI;AAC3C,WAAK,eAAe,MAAM,KAAK,OAAO,SAAS;IACjD;EACF;EAEA,YAAY,QAAgB,QAAc;AAExC,eAAW,YAAY,KAAK,KAAK,aAAY,GAAI;AAC/C,WAAK,kBAAkB,UAAU,QAAQ,MAAM;IACjD;EACF;EAEA,eAAe,UAAoB,UAAgB;AACjD,UAAM,SAAS,KAAK,WAAU,qCAAU,OAAM;AAE9C,UAAM,YAAY,KAAK,KAAK,YAAY,aAAa;AACrD,UAAM,gBAAgB;MACpB,GAAG;MACH,MAAM;;;;AAMR,SAAK,KAAK,mBAAmB,EAAC,QAAQ,WAAW,eAAe,kBAAkB,CAAA,EAAE,CAAC;EACvF;EAEA,kBAAkB,UAAoB,QAAgB,QAAc;AAClE,UAAM,SAAS,KAAK,WAAU,qCAAU,OAAM;AAE9C,UAAM,YAAY,KAAK,KAAK,YAAY,aAAa;AAErD,UAAM,gBAAgB;MACpB,GAAG;MACH,UAAU,CAAC,SAAS,SAAS,CAAC,IAAI,QAAQ,SAAS,SAAS,CAAC,IAAI,MAAM;;AAIzE,SAAK,KAAK,mBAAmB,EAAC,QAAQ,WAAW,eAAe,kBAAkB,CAAA,EAAE,CAAC;EACvF;;;;AErUK,IAAMC,cAAa,CAAC,EAAC,MAAM,YAAY,WAAU,MACtD,oBAAoB,MAAM,EAAC,YAAY,WAAU,CAAC;AAG9C,SAAU,oBACd,MACA,SAAkC;AAElC,QAAM,EAAC,aAAa,iBAAiB,aAAa,gBAAe,IAAI;AACrE,QAAM,EAAC,OAAO,WAAW,OAAO,MAAK,IAAI;AACzC,MAAI,CAAC,OAAO;AACV,QAAI,MAAM,kCAAkC,EAAC;AAC7C,WAAO;EACT;AAEA,QAAM,QAAQ,YAAY,EAAC,MAAM,OAAO,OAAO,YAAY,WAAU,CAAC;AACtE,SAAO;AACT;",
|
|
6
|
+
"names": ["JSONLoader", "isEqual", "d3", "import_meta", "import_meta", "newD3Edge", "computeControlPoint", "import_core", "Color", "getOffset", "offX", "offY", "import_core", "import_layers", "import_core", "import_core", "import_layers", "getColor", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_core", "import_layers", "import_core", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_layers", "import_core", "import_layers", "getColor", "import_core", "import_core", "import_layers", "fs", "defaultProps", "fs", "getOffset", "import_preact", "_jsx", "_jsxs", "_jsx", "JSONLoader"]
|
|
7
7
|
}
|