@unovis/ts 1.0.2 → 1.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@ import { drag } from 'd3-drag';
6
6
  import { interval } from 'd3-timer';
7
7
  import { ComponentCore } from '../../core/component/index.js';
8
8
  import { GraphDataModel } from '../../data-models/graph.js';
9
- import { isNumber, cloneDeep, find, clamp, getBoolean, isFunction, flatten, findIndex, shallowDiff, unique, clean } from '../../utils/data.js';
9
+ import { isNumber, cloneDeep, clamp, getBoolean, isFunction, flatten, shallowDiff, unique, clean } from '../../utils/data.js';
10
10
  import { stringToHtmlId } from '../../utils/misc.js';
11
11
  import { smartTransition } from '../../utils/d3.js';
12
12
  import { GraphLayoutType, GraphLinkArrowStyle } from './types.js';
@@ -135,11 +135,11 @@ class Graph extends ComponentCore {
135
135
  // Select Links / Nodes
136
136
  this._resetSelection();
137
137
  if (this.config.selectedNodeId) {
138
- const selectedNode = find(datamodel.nodes, node => node.id === this.config.selectedNodeId);
138
+ const selectedNode = datamodel.nodes.find(node => node.id === this.config.selectedNodeId);
139
139
  this._selectNode(selectedNode);
140
140
  }
141
141
  if (this.config.selectedLinkId) {
142
- const selectedLink = find(datamodel.links, link => link.id === this.config.selectedLinkId);
142
+ const selectedLink = datamodel.links.find(link => link.id === this.config.selectedLinkId);
143
143
  this._selectLink(selectedLink);
144
144
  }
145
145
  // Link flow animation timer
@@ -510,7 +510,7 @@ class Graph extends ComponentCore {
510
510
  delete d._state.fy;
511
511
  }
512
512
  const panelNodesToUpdate = allNodesSelection.filter((node) => {
513
- return node._id === d._id || findIndex(panelNeighbourNodes, (n) => node._id === n._id) !== -1;
513
+ return node._id === d._id || panelNeighbourNodes.findIndex((n) => node._id === n._id) !== -1;
514
514
  });
515
515
  panelNodesToUpdate
516
516
  .call(updateNodes, config, 0, scale)
@@ -525,7 +525,7 @@ class Graph extends ComponentCore {
525
525
  const linksToUpdate = linkElements.filter((l) => {
526
526
  const source = l.source;
527
527
  const target = l.target;
528
- return source._id === d._id || target._id === d._id || findIndex(panelNeighbourNodes, (n) => source._id === n._id) !== -1 || findIndex(panelNeighbourNodes, (n) => target._id === n._id) !== -1;
528
+ return source._id === d._id || target._id === d._id || panelNeighbourNodes.findIndex((n) => source._id === n._id) !== -1 || panelNeighbourNodes.findIndex((n) => target._id === n._id) !== -1;
529
529
  });
530
530
  linksToUpdate.call(updateLinks, config, 0, scale);
531
531
  const linksToAnimate = linksToUpdate.filter(d => d._state.greyout);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/graph/index.ts"],"sourcesContent":["import { min, extent } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport { select, Selection, pointer, BaseType } from 'd3-selection'\nimport { zoom, zoomTransform, zoomIdentity, ZoomTransform, D3ZoomEvent, ZoomBehavior } from 'd3-zoom'\nimport { drag, D3DragEvent } from 'd3-drag'\nimport { interval, Timer } from 'd3-timer'\n\n// Core\nimport { ComponentCore } from 'core/component'\nimport { GraphDataModel } from 'data-models/graph'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\n// Utils\nimport { isNumber, clamp, find, cloneDeep, flatten, findIndex, clean, unique, shallowDiff, isFunction, getBoolean } from 'utils/data'\nimport { stringToHtmlId } from 'utils/misc'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphLayoutType, GraphLinkArrowStyle, GraphPanel } from './types'\n\n// Config\nimport { GraphConfig, GraphConfigInterface } from './config'\n\n// Styles\nimport * as generalSelectors from './style'\nimport * as nodeSelectors from './modules/node/style'\nimport * as linkSelectors from './modules/link/style'\nimport * as panelSelectors from './modules/panel/style'\n\n// Modules\nimport { createNodes, updateNodes, removeNodes, zoomNodesThrottled, zoomNodes, updateSelectedNodes } from './modules/node'\nimport { getMaxNodeSize, getX, getY } from './modules/node/helper'\nimport { createLinks, updateLinks, removeLinks, zoomLinksThrottled, zoomLinks, animateLinkFlow, updateSelectedLinks } from './modules/link'\nimport { LINK_MARKER_WIDTH, LINK_MARKER_HEIGHT, getDoubleArrowPath, getArrowPath, getLinkColor } from './modules/link/helper'\nimport { createPanels, updatePanels, removePanels } from './modules/panel'\nimport { setPanelForNodes, updatePanelBBoxSize, updatePanelNumNodes, getMaxPanelPadding } from './modules/panel/helper'\nimport { applyLayoutCircular, applyLayoutParallel, applyLayoutDagre, applyLayoutConcentric, applyLayoutForce } from './modules/layout'\n\nexport class Graph<\n N extends GraphInputNode,\n L extends GraphInputLink,\n> extends ComponentCore<\n {nodes: N[]; links?: L[]},\n GraphConfig<N, L>,\n GraphConfigInterface<N, L>\n > {\n static selectors = {\n root: generalSelectors.root,\n background: generalSelectors.background,\n node: nodeSelectors.gNode,\n nodeShape: nodeSelectors.node,\n nodeGauge: nodeSelectors.nodeGauge,\n nodeSideLabel: nodeSelectors.sideLabelGroup,\n nodeLabel: nodeSelectors.label,\n link: linkSelectors.gLink,\n linkLine: linkSelectors.link,\n panel: panelSelectors.gPanel,\n panelRect: panelSelectors.panel,\n panelSelection: panelSelectors.panelSelection,\n panelLabel: panelSelectors.label,\n panelLabelText: panelSelectors.labelText,\n panelSideIcon: panelSelectors.sideIconGroup,\n panelSideIconShape: panelSelectors.sideIconShape,\n panelSideIconSymbol: panelSelectors.sideIconSymbol,\n }\n\n static nodeSelectors = nodeSelectors\n g: Selection<SVGGElement, unknown, null, undefined>\n config: GraphConfig<N, L> = new GraphConfig()\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>> = new GraphDataModel()\n private _selectedNode: GraphNode<N>\n private _selectedLink: GraphLink<N, L>\n\n private _graphGroup: Selection<SVGGElement, unknown, SVGGElement, undefined>\n private _panelsGroup: Selection<SVGGElement, unknown, SVGGElement, undefined>\n private _linksGroup: Selection<SVGGElement, unknown, SVGGElement, undefined>\n private _nodesGroup: Selection<SVGGElement, unknown, SVGGElement, undefined>\n private _timer: Timer\n\n private _firstRender = true\n private _prevWidth: number\n private _prevHeight: number\n private _recalculateLayout = false\n\n private _fitLayout: boolean\n private _setPanels = false\n private _panels: GraphPanel[]\n\n private _defs: Selection<SVGDefsElement, unknown, SVGGElement, undefined>\n private _backgroundRect: Selection<SVGRectElement, unknown, SVGGElement, undefined>\n private _zoomBehavior: ZoomBehavior<SVGGElement, unknown>\n private _disableAutoFit = false\n private _scale: number\n private _initialTransform\n private _isDragging = false\n\n events = {\n [Graph.selectors.background]: {\n click: this._onBackgroundClick.bind(this),\n },\n [Graph.selectors.node]: {\n click: this._onNodeClick.bind(this),\n mouseover: this._onNodeMouseOver.bind(this),\n mouseout: this._onNodeMouseOut.bind(this),\n },\n [Graph.selectors.link]: {\n click: this._onLinkClick.bind(this),\n mouseover: this._onLinkMouseOver.bind(this),\n mouseout: this._onLinkMouseOut.bind(this),\n },\n }\n\n public get selectedNode (): GraphNode<N> {\n return this._selectedNode\n }\n\n public get selectedLink (): GraphLink<N, L> {\n return this._selectedLink\n }\n\n constructor (config?: GraphConfigInterface<N, L>) {\n super()\n if (config) this.config.init(config)\n\n this._backgroundRect = this.g.append('rect').attr('class', generalSelectors.background)\n this._graphGroup = this.g.append('g').attr('class', generalSelectors.graphGroup)\n\n this._zoomBehavior = zoom<SVGGElement, unknown>()\n .scaleExtent(this.config.zoomScaleExtent)\n .on('zoom', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoom(e.transform, e))\n\n this._panelsGroup = this._graphGroup.append('g').attr('class', panelSelectors.panels)\n this._linksGroup = this._graphGroup.append('g').attr('class', linkSelectors.links)\n this._nodesGroup = this._graphGroup.append('g').attr('class', nodeSelectors.nodes)\n\n this._defs = this._graphGroup.append('defs')\n }\n\n setData (data: {nodes: N[]; links?: L[]}): void {\n const { config } = this\n\n this.datamodel.nodeSort = config.nodeSort\n this.datamodel.data = data\n this._recalculateLayout = true\n if (config.layoutAutofit) this._fitLayout = true\n this._setPanels = true\n\n this._addSVGDefs()\n }\n\n setConfig (config: GraphConfigInterface<N, L>): void {\n this._fitLayout = this._fitLayout || this.config.layoutType !== config.layoutType\n this._recalculateLayout = this._recalculateLayout || this._shouldLayoutRecalculate(config)\n\n super.setConfig(config)\n this._setPanels = true\n }\n\n get bleed (): Spacing {\n const { datamodel: { nodes }, config: { nodeSize } } = this\n const maxPanelPadding = getMaxPanelPadding(this._panels)\n const maxNodeSize = getMaxNodeSize(nodes, nodeSize)\n const extra = 20 // Extra padding to take into account labels\n const padding = maxNodeSize * 0.5 + maxPanelPadding + extra\n const panelLabelHeight = this._panels?.length ? 50 : 0\n\n return { top: padding + panelLabelHeight, bottom: padding, left: padding, right: padding }\n }\n\n _render (customDuration?: number): void {\n const { config: { disableZoom, duration, layoutAutofit, panels }, datamodel } = this\n if (!datamodel.nodes && !datamodel.links) return\n const animDuration = isNumber(customDuration) ? customDuration : duration\n\n this._backgroundRect\n .attr('width', this._width)\n .attr('height', this._height)\n .attr('opacity', 0)\n\n if ((this._prevWidth !== this._width || this._prevHeight !== this._height) && layoutAutofit) {\n // Fit layout on resize\n this._fitLayout = true\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n // Apply layout and render\n this._calculateLayout().then((isFirstRender) => {\n // If the component has been destroyed while the layout calculation\n // was in progress, we cancel the render\n if (this.isDestroyed()) return\n\n if (this._setPanels) {\n smartTransition(this._panelsGroup, duration / 2)\n .style('opacity', panels?.length ? 1 : 0)\n\n this._panels = cloneDeep(panels) as GraphPanel[]\n setPanelForNodes(this._panels, datamodel.nodes, this.config)\n this._setPanels = false\n }\n\n if (isFirstRender) {\n this._fit()\n this._fitLayout = false\n } else if (this._fitLayout && !this._disableAutoFit) {\n this._fit(duration)\n this._fitLayout = false\n }\n\n // Draw\n this._drawNodes(animDuration)\n this._drawLinks(animDuration)\n\n // Select Links / Nodes\n this._resetSelection()\n if (this.config.selectedNodeId) {\n const selectedNode = find(datamodel.nodes, node => node.id === this.config.selectedNodeId)\n this._selectNode(selectedNode)\n }\n\n if (this.config.selectedLinkId) {\n const selectedLink = find(datamodel.links, link => link.id === this.config.selectedLinkId)\n this._selectLink(selectedLink)\n }\n\n // Link flow animation timer\n if (!this._timer) {\n const refreshRateMs = 35\n this._timer = interval(this._onLinkFlowTimerFrame.bind(this), refreshRateMs)\n }\n\n // Zoom\n if (disableZoom) this.g.on('.zoom', null)\n else this.g.call(this._zoomBehavior).on('dblclick.zoom', null)\n\n if (!this._firstRender && !disableZoom) {\n const transform = zoomTransform(this.g.node())\n this._onZoom(transform)\n }\n\n // While the graph is animating we disable pointer events on the graph group\n if (animDuration) { this._graphGroup.attr('pointer-events', 'none') }\n smartTransition(this._graphGroup, animDuration)\n .on('end interrupt', () => {\n this._graphGroup.attr('pointer-events', null)\n })\n\n // We need to set up events and attributes again because the rendering might have been delayed by the layout\n // calculation and they were not set up properly (see the render function of `ComponentCore`)\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n })\n\n\n this._firstRender = false\n }\n\n private _drawNodes (duration: number): void {\n const { config, datamodel } = this\n\n const nodes: GraphNode<N>[] = datamodel.nodes\n const nodeGroups = this._nodesGroup\n .selectAll<SVGGElement, GraphNode<N>>(`.${nodeSelectors.gNode}:not(.${nodeSelectors.gNodeExit})`)\n .data(nodes, d => String(d._id))\n\n const nodeGroupsEnter = nodeGroups.enter().append('g')\n .attr('class', nodeSelectors.gNode)\n .call(createNodes, config, duration)\n\n const nodeGroupsMerged = nodeGroups.merge(nodeGroupsEnter)\n const nodeUpdateSelection = updateNodes(nodeGroupsMerged, config, duration, this._scale)\n this._drawPanels(nodeUpdateSelection, duration)\n\n const nodesGroupExit = nodeGroups.exit()\n nodesGroupExit\n .classed(nodeSelectors.gNodeExit, true)\n .call(removeNodes, config, duration)\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const thisRef = this\n if (!config.disableDrag) {\n const dragBehaviour = drag<SVGGElement, GraphNode<N>>()\n .on('start', function (event, d) { thisRef._onDragStarted(d, event, select(this)) })\n .on('drag', function (event, d) { thisRef._onDragged(d, event, nodeGroupsMerged) })\n .on('end', function (event, d) { thisRef._onDragEnded(d, event, select(this)) })\n nodeGroupsMerged.call(dragBehaviour)\n } else {\n nodeGroupsMerged.on('.drag', null)\n }\n }\n\n private _drawLinks (duration: number): void {\n const { config, datamodel: { links } } = this\n\n const linkGroups = this._linksGroup\n .selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .data(links, (d: GraphLink<N, L>) => String(d._id))\n\n const linkGroupsEnter = linkGroups.enter().append('g')\n .attr('class', linkSelectors.gLink)\n .call(createLinks, config, duration)\n\n const linkGroupsMerged = linkGroups.merge(linkGroupsEnter)\n linkGroupsMerged.call(updateLinks, config, duration, this._scale)\n\n const linkGroupsExit = linkGroups.exit()\n linkGroupsExit\n .attr('class', linkSelectors.gLinkExit)\n .call(removeLinks, config, duration)\n }\n\n private _drawPanels (\n nodeUpdateSelection: Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown> |\n Transition<BaseType, GraphNode<N>, SVGGElement, unknown>,\n duration: number\n ): void {\n const { config } = this\n if (!this._panels) return\n\n const selection = ((nodeUpdateSelection as Transition<SVGGElement, GraphNode<N>, SVGGElement, unknown>).duration)\n ? (nodeUpdateSelection as Transition<SVGGElement, GraphNode<N>, SVGGElement, unknown>).selection()\n : nodeUpdateSelection as Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown>\n\n updatePanelNumNodes(selection, this._panels, config)\n updatePanelBBoxSize(selection, this._panels, config)\n const panelData = this._panels.filter(p => p._numNodes)\n const panelGroup = this._panelsGroup\n .selectAll<SVGGElement, GraphPanel>(`.${panelSelectors.gPanel}`)\n .data(panelData, p => p.label)\n\n const panelGroupExit = panelGroup.exit()\n panelGroupExit.call(removePanels, config, duration)\n\n const panelGroupEnter = panelGroup.enter().append('g')\n .attr('class', panelSelectors.gPanel)\n .call(createPanels, selection)\n const panelGroupMerged = panelGroup.merge(panelGroupEnter)\n\n this._updatePanels(panelGroupMerged, duration)\n }\n\n private _updatePanels (panelToUpdate: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>, duration: number): void {\n const { config } = this\n if (!this._panels) return\n\n panelToUpdate.call(updatePanels, config, duration)\n }\n\n private async _calculateLayout (): Promise<boolean> {\n const { config, datamodel } = this\n\n const firstRender = this._firstRender\n if (this._recalculateLayout) {\n switch (config.layoutType) {\n case GraphLayoutType.Parallel:\n applyLayoutParallel(datamodel, config, this._width, this._height)\n break\n case GraphLayoutType.ParallelHorizontal:\n applyLayoutParallel(datamodel, config, this._width, this._height, 'horizontal')\n break\n case GraphLayoutType.Dagre:\n await applyLayoutDagre(datamodel, config, this._width)\n break\n case GraphLayoutType.Force:\n await applyLayoutForce(datamodel, config, this._width)\n break\n case GraphLayoutType.Concentric:\n applyLayoutConcentric(datamodel, config, this._width, this._height)\n break\n case GraphLayoutType.Circular:\n default:\n applyLayoutCircular(datamodel, config, this._width, this._height)\n break\n }\n\n this._recalculateLayout = false\n }\n\n return firstRender\n }\n\n private _fit (duration = 0): void {\n const { datamodel: { nodes } } = this\n if (nodes?.length && this.g?.size()) {\n const transform = this._getTransform(nodes)\n smartTransition(this.g, duration)\n .call(this._zoomBehavior.transform, transform)\n this._onZoom(transform)\n } else {\n console.warn('Unovis | Graph: Node data is not defined. Check if the component has been initialized.')\n }\n }\n\n private _getTransform (nodes: GraphNode<N>[]): ZoomTransform {\n const { nodeSize, zoomScaleExtent } = this.config\n const { left, top, right, bottom } = this.bleed\n\n const maxNodeSize = getMaxNodeSize(nodes, nodeSize)\n const w = this._width\n const h = this._height\n const xExtent = extent(nodes, d => getX(d)) as number[]\n const yExtent = extent(nodes, d => getY(d)) as number[]\n\n const xScale = w / (xExtent[1] - xExtent[0] + left + right)\n const yScale = h / (yExtent[1] - yExtent[0] + maxNodeSize + top + bottom)\n\n const clampedScale = clamp(min([xScale, yScale]), zoomScaleExtent[0], zoomScaleExtent[1])\n\n const xCenter = (xExtent[1] + xExtent[0]) / 2\n const yCenter = (yExtent[1] + yExtent[0] + maxNodeSize) / 2\n const translateX = this._width / 2 - xCenter * clampedScale\n const translateY = this._height / 2 - yCenter * clampedScale\n const transform = zoomIdentity\n .translate(translateX, translateY)\n .scale(clampedScale)\n\n return transform\n }\n\n private _selectNode (node: GraphNode<N>): void {\n const { datamodel: { nodes, links } } = this\n if (!node) console.warn('Unovis | Graph: Select Node: Not found')\n this._selectedNode = node\n\n // Apply grey out\n // Grey out all nodes\n nodes.forEach(n => {\n n._state.selected = false\n n._state.greyout = true\n })\n\n // Grey out all links\n links.forEach(l => {\n l._state.greyout = true\n l._state.selected = false\n })\n\n // Highlight selected\n if (node) {\n node._state.selected = true\n node._state.greyout = false\n\n const connectedLinks = links.filter(l => (l.source === node) || (l.target === node))\n connectedLinks.forEach(l => {\n const source = l.source as GraphNode<N>\n const target = l.target as GraphNode<N>\n source._state.greyout = false\n target._state.greyout = false\n l._state.greyout = false\n })\n }\n\n this._updateSelectedElements()\n }\n\n private _selectLink (link: GraphLink<N, L>): void {\n const { datamodel: { nodes, links } } = this\n if (!link) console.warn('Unovis: Graph: Select Link: Not found')\n this._selectedLink = link\n const selectedLinkSource = link?.source as GraphNode<N>\n const selectedLinkTarget = link?.target as GraphNode<N>\n\n // Apply grey out\n nodes.forEach(n => {\n n._state.selected = false\n n._state.greyout = true\n if (selectedLinkTarget?._id === n._id || selectedLinkSource?._id === n._id) {\n link._state.greyout = false\n }\n })\n\n links.forEach(l => {\n l._state.greyout = true\n const source = l.source as GraphNode<N>\n const target = l.target as GraphNode<N>\n if ((source._id === selectedLinkSource?._id) && (target._id === selectedLinkTarget?._id)) {\n source._state.greyout = false\n target._state.greyout = false\n l._state.greyout = false\n }\n })\n\n links.forEach(l => {\n delete l._state.selected\n })\n\n if (link) link._state.selected = true\n\n this._updateSelectedElements()\n }\n\n private _resetSelection (): void {\n const { datamodel: { nodes, links } } = this\n this._selectedNode = undefined\n this._selectedLink = undefined\n\n // Disable Grayout\n nodes.forEach(n => {\n delete n._state.selected\n delete n._state.greyout\n })\n links.forEach(l => {\n delete l._state.greyout\n delete l._state.selected\n })\n\n this._updateSelectedElements()\n }\n\n private _updateSelectedElements (): void {\n const { config } = this\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n linkElements.call(updateSelectedLinks, config, this._scale)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N>>(`.${nodeSelectors.gNode}`)\n nodeElements.call(updateSelectedNodes, config)\n\n // this._drawPanels(nodeElements, 0)\n }\n\n private _onBackgroundClick (): void {\n this._resetSelection()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeClick (d: GraphNode<N>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOut (d: GraphNode<N>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOver (d: GraphNode<N>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onLinkClick (d: GraphLink<N, L>): void {\n }\n\n private _onLinkMouseOver (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n d._state.hovered = true\n this._updateSelectedElements()\n }\n\n private _onLinkMouseOut (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n delete d._state.hovered\n this._updateSelectedElements()\n }\n\n private _onLinkFlowTimerFrame (elapsed = 0): void {\n const { config: { linkFlow, linkFlowAnimDuration }, datamodel: { links } } = this\n\n const hasLinksWithFlow = links.some((d, i) => getBoolean(d, linkFlow, i))\n if (!hasLinksWithFlow) return\n\n const t = (elapsed % linkFlowAnimDuration) / linkFlowAnimDuration\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n\n const linksToAnimate = linkElements.filter(d => !d._state.greyout)\n linksToAnimate.each(d => { d._state.flowAnimTime = t })\n animateLinkFlow(linksToAnimate, this.config, this._scale)\n }\n\n private _onZoom (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config, datamodel: { nodes } } = this\n const transform = t || event.transform\n this._scale = transform.k\n this._graphGroup.attr('transform', transform.toString())\n if (isFunction(config.onZoom)) config.onZoom(this._scale, config.zoomScaleExtent)\n\n if (!this._initialTransform) this._initialTransform = transform\n\n // If the event was triggered by a mouse interaction (pan or zoom) we don't\n // refit the layout after recalculation (e.g. on container resize)\n if (event?.sourceEvent) {\n const diff = Object.keys(transform).reduce((acc, prop) => {\n const val = transform[prop]\n const dVal = Math.abs(val - this._initialTransform[prop])\n return prop === 'k' ? 2 * dVal : dVal / 50\n }, 0)\n\n if (diff > config.layoutAutofitTolerance) this._disableAutoFit = true\n else this._disableAutoFit = false\n }\n\n this._nodesGroup.selectAll(`.${nodeSelectors.gNode}`)\n .call(nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomNodesThrottled : zoomNodes, config, this._scale)\n this._linksGroup.selectAll(`.${linkSelectors.gLink}`)\n .call(nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomLinksThrottled : zoomLinks, config, this._scale)\n }\n\n private _onDragStarted (\n d: GraphNode<N>,\n event: D3DragEvent<SVGGElement, GraphNode<N>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown>\n ): void {\n const { config } = this\n this._isDragging = true\n d._state.isDragged = true\n nodeSelection.call(updateNodes, config, 0, this._scale)\n }\n\n private _onDragged (\n d: GraphNode<N>,\n event: D3DragEvent<SVGGElement, GraphNode<N>, unknown>,\n allNodesSelection: Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown>\n ): void {\n const { config } = this\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Prevent from dragging outside\n const maxY = (this._height - transform.y) / scale\n const maxX = (this._width - transform.x) / scale\n const minY = -transform.y / scale\n const minX = -transform.x / scale\n let [x, y] = pointer(event, this._graphGroup.node())\n if (y < minY) y = minY\n else if (y > maxY) y = maxY\n if (x < minX) x = minX\n else if (x > maxX) x = maxX\n\n // Snap to Layout\n if (Math.sqrt(Math.pow(x - d.x, 2) + Math.pow(y - d.y, 2)) < 15) {\n x = d.x\n y = d.y\n }\n\n const panelNeighbourNodes = flatten(d._panels)\n if (panelNeighbourNodes.length > 0) {\n const prevX = getX(d)\n const prevY = getY(d)\n panelNeighbourNodes.forEach(node => {\n const dx = getX(node) - prevX\n const dy = getY(node) - prevY\n node._state.fx = x + dx\n node._state.fy = y + dy\n if (node._state.fx === node.x) delete node._state.fx\n if (node._state.fy === node.y) delete node._state.fy\n })\n } else {\n d._state.fx = x\n d._state.fy = y\n if (d._state.fx === d.x) delete d._state.fx\n if (d._state.fy === d.y) delete d._state.fy\n }\n\n const panelNodesToUpdate = allNodesSelection.filter((node: GraphNode<N>) => {\n return node._id === d._id || findIndex(panelNeighbourNodes, (n: GraphNode<N>) => node._id === n._id) !== -1\n })\n\n panelNodesToUpdate\n .call(updateNodes, config, 0, scale)\n .call(zoomNodes, config, scale)\n const panelToUpdate = this._panelsGroup.selectAll<SVGGElement, GraphPanel>(`.${panelSelectors.gPanel}`)\n updatePanelBBoxSize(panelNodesToUpdate, this._panels, config)\n this._updatePanels(panelToUpdate, 0)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N>>(`.${nodeSelectors.gNode}`)\n const nodesToUpdate = nodeElements.filter((n: GraphNode<N>) => n._id === d._id)\n nodesToUpdate.call(updateNodes, config, 0, scale)\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n const linksToUpdate = linkElements.filter((l: L) => {\n const source = l.source as GraphNode<N>\n const target = l.target as GraphNode<N>\n return source._id === d._id || target._id === d._id || findIndex(panelNeighbourNodes, (n: GraphNode<N>) => source._id === n._id) !== -1 || findIndex(panelNeighbourNodes, (n: GraphNode<N>) => target._id === n._id) !== -1\n })\n linksToUpdate.call(updateLinks, config, 0, scale)\n const linksToAnimate = linksToUpdate.filter(d => d._state.greyout)\n if (linksToAnimate.size()) animateLinkFlow(linksToAnimate, config, this._scale)\n }\n\n private _onDragEnded (\n d: GraphNode<N>,\n event: D3DragEvent<SVGGElement, GraphNode<N>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown>\n ): void {\n const { config } = this\n this._isDragging = false\n d._state.isDragged = false\n nodeSelection.call(updateNodes, config, 0, this._scale)\n }\n\n private _shouldLayoutRecalculate (nextConfig: GraphConfigInterface<N, L>): boolean {\n const { config } = this\n if (config.layoutType !== nextConfig.layoutType) return true\n if (config.layoutNonConnectedAside !== nextConfig.layoutNonConnectedAside) return true\n\n if (config.layoutType === GraphLayoutType.Force) {\n const forceSettingsDiff = shallowDiff(config.forceLayoutSettings, nextConfig.forceLayoutSettings)\n if (Object.keys(forceSettingsDiff).length) return true\n }\n\n if (config.layoutType === GraphLayoutType.Dagre) {\n const dagreSettingsDiff = shallowDiff(config.dagreLayoutSettings, nextConfig.dagreLayoutSettings)\n if (Object.keys(dagreSettingsDiff).length) return true\n }\n\n if (\n config.layoutType === GraphLayoutType.Parallel ||\n config.layoutType === GraphLayoutType.ParallelHorizontal ||\n config.layoutType === GraphLayoutType.Concentric\n ) {\n if (config.layoutGroupOrder !== nextConfig.layoutGroupOrder) return true\n if (config.layoutParallelNodesPerColumn !== nextConfig.layoutParallelNodesPerColumn) return true\n if (config.layoutParallelSortConnectionsByGroup !== nextConfig.layoutParallelSortConnectionsByGroup) return true\n }\n\n return false\n }\n\n private _addSVGDefs (): void {\n const { datamodel: { links } } = this\n\n // Clean up old defs\n this._defs.selectAll('*').remove()\n\n // Get all variations of link colors to create markers\n const linkColors = unique(clean(\n links.map(d => getLinkColor(d, this.config))\n ))\n\n this._defs.selectAll('marker')\n .data([\n ...linkColors.map(d => ({ color: d, arrow: GraphLinkArrowStyle.Single })), // Single-sided arrows\n ...linkColors.map(d => ({ color: d, arrow: GraphLinkArrowStyle.Double })), // Double-sided arrows\n ]).enter()\n .append('marker')\n .attr('id', d => `${stringToHtmlId(d.color)}-${d.arrow}`)\n .attr('orient', 'auto')\n .attr('markerWidth', d => d.arrow === GraphLinkArrowStyle.Double ? LINK_MARKER_WIDTH * 2 : LINK_MARKER_WIDTH)\n .attr('markerHeight', d => d.arrow === GraphLinkArrowStyle.Double ? LINK_MARKER_HEIGHT * 2 : LINK_MARKER_HEIGHT)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('refX', LINK_MARKER_WIDTH - LINK_MARKER_HEIGHT / 2)\n .attr('refY', LINK_MARKER_HEIGHT - LINK_MARKER_HEIGHT / 2)\n .html(d => {\n return `\n <path\n d=\"${d.arrow === GraphLinkArrowStyle.Double ? getDoubleArrowPath() : getArrowPath()}\"\n fill=\"${d.color ?? null}\"\n />\n `\n })\n }\n\n public zoomIn (increment = 0.3): void {\n const scaleBy = 1 + increment\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleBy, scaleBy)\n }\n\n public zoomOut (increment = 0.3): void {\n const scaleBy = 1 - increment\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleBy, scaleBy)\n }\n\n public setZoom (zoomLevel: number): void {\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleTo, zoomLevel)\n }\n\n public fitView (): void {\n this._fit(this.config.duration / 2)\n }\n\n /** Enable automatic fitting to container if it was disabled due to previous zoom / pan interactions */\n public resetAutofitState (): void {\n this._disableAutoFit = false\n }\n\n /** Get current coordinates of the nodes as an array of { id: string; x: number; y: number } objects */\n public getNodesCoordinates (): { id: string; x: number; y: number }[] {\n const { datamodel: { nodes } } = this\n return nodes.map(n => ({\n id: n._id,\n x: n.x,\n y: n.y,\n }))\n }\n\n /** Get node coordinates by id as { id: string; x: number; y: number } */\n public getNodeCoordinatesById (id: string): { id: string; x: number; y: number } | undefined {\n const { datamodel: { nodes } } = this\n const node = nodes.find(n => n._id === id)\n\n if (!node) {\n console.warn(`Unovis | Graph: Node ${id} not found`)\n return undefined\n } else {\n return {\n id: node._id,\n x: node.x,\n y: node.y,\n }\n }\n }\n}\n"],"names":["generalSelectors.background","generalSelectors.graphGroup","panelSelectors.panels","linkSelectors.links","nodeSelectors.nodes","nodeSelectors.gNode","nodeSelectors.gNodeExit","linkSelectors.gLink","linkSelectors.gLinkExit","panelSelectors.gPanel","generalSelectors.root","nodeSelectors.node","nodeSelectors.nodeGauge","nodeSelectors.sideLabelGroup","nodeSelectors.label","linkSelectors.link","panelSelectors.panel","panelSelectors.panelSelection","panelSelectors.label","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.sideIconSymbol","nodeSelectors"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/graph/index.ts"],"sourcesContent":["import { min, extent } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport { select, Selection, pointer, BaseType } from 'd3-selection'\nimport { zoom, zoomTransform, zoomIdentity, ZoomTransform, D3ZoomEvent, ZoomBehavior } from 'd3-zoom'\nimport { drag, D3DragEvent } from 'd3-drag'\nimport { interval, Timer } from 'd3-timer'\n\n// Core\nimport { ComponentCore } from 'core/component'\nimport { GraphDataModel } from 'data-models/graph'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\n// Utils\nimport { isNumber, clamp, cloneDeep, flatten, clean, unique, shallowDiff, isFunction, getBoolean } from 'utils/data'\nimport { stringToHtmlId } from 'utils/misc'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphLayoutType, GraphLinkArrowStyle, GraphPanel } from './types'\n\n// Config\nimport { GraphConfig, GraphConfigInterface } from './config'\n\n// Styles\nimport * as generalSelectors from './style'\nimport * as nodeSelectors from './modules/node/style'\nimport * as linkSelectors from './modules/link/style'\nimport * as panelSelectors from './modules/panel/style'\n\n// Modules\nimport { createNodes, updateNodes, removeNodes, zoomNodesThrottled, zoomNodes, updateSelectedNodes } from './modules/node'\nimport { getMaxNodeSize, getX, getY } from './modules/node/helper'\nimport { createLinks, updateLinks, removeLinks, zoomLinksThrottled, zoomLinks, animateLinkFlow, updateSelectedLinks } from './modules/link'\nimport { LINK_MARKER_WIDTH, LINK_MARKER_HEIGHT, getDoubleArrowPath, getArrowPath, getLinkColor } from './modules/link/helper'\nimport { createPanels, updatePanels, removePanels } from './modules/panel'\nimport { setPanelForNodes, updatePanelBBoxSize, updatePanelNumNodes, getMaxPanelPadding } from './modules/panel/helper'\nimport { applyLayoutCircular, applyLayoutParallel, applyLayoutDagre, applyLayoutConcentric, applyLayoutForce } from './modules/layout'\n\nexport class Graph<\n N extends GraphInputNode,\n L extends GraphInputLink,\n> extends ComponentCore<\n {nodes: N[]; links?: L[]},\n GraphConfig<N, L>,\n GraphConfigInterface<N, L>\n > {\n static selectors = {\n root: generalSelectors.root,\n background: generalSelectors.background,\n node: nodeSelectors.gNode,\n nodeShape: nodeSelectors.node,\n nodeGauge: nodeSelectors.nodeGauge,\n nodeSideLabel: nodeSelectors.sideLabelGroup,\n nodeLabel: nodeSelectors.label,\n link: linkSelectors.gLink,\n linkLine: linkSelectors.link,\n panel: panelSelectors.gPanel,\n panelRect: panelSelectors.panel,\n panelSelection: panelSelectors.panelSelection,\n panelLabel: panelSelectors.label,\n panelLabelText: panelSelectors.labelText,\n panelSideIcon: panelSelectors.sideIconGroup,\n panelSideIconShape: panelSelectors.sideIconShape,\n panelSideIconSymbol: panelSelectors.sideIconSymbol,\n }\n\n static nodeSelectors = nodeSelectors\n g: Selection<SVGGElement, unknown, null, undefined>\n config: GraphConfig<N, L> = new GraphConfig()\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>> = new GraphDataModel()\n private _selectedNode: GraphNode<N>\n private _selectedLink: GraphLink<N, L>\n\n private _graphGroup: Selection<SVGGElement, unknown, SVGGElement, undefined>\n private _panelsGroup: Selection<SVGGElement, unknown, SVGGElement, undefined>\n private _linksGroup: Selection<SVGGElement, unknown, SVGGElement, undefined>\n private _nodesGroup: Selection<SVGGElement, unknown, SVGGElement, undefined>\n private _timer: Timer\n\n private _firstRender = true\n private _prevWidth: number\n private _prevHeight: number\n private _recalculateLayout = false\n\n private _fitLayout: boolean\n private _setPanels = false\n private _panels: GraphPanel[]\n\n private _defs: Selection<SVGDefsElement, unknown, SVGGElement, undefined>\n private _backgroundRect: Selection<SVGRectElement, unknown, SVGGElement, undefined>\n private _zoomBehavior: ZoomBehavior<SVGGElement, unknown>\n private _disableAutoFit = false\n private _scale: number\n private _initialTransform\n private _isDragging = false\n\n events = {\n [Graph.selectors.background]: {\n click: this._onBackgroundClick.bind(this),\n },\n [Graph.selectors.node]: {\n click: this._onNodeClick.bind(this),\n mouseover: this._onNodeMouseOver.bind(this),\n mouseout: this._onNodeMouseOut.bind(this),\n },\n [Graph.selectors.link]: {\n click: this._onLinkClick.bind(this),\n mouseover: this._onLinkMouseOver.bind(this),\n mouseout: this._onLinkMouseOut.bind(this),\n },\n }\n\n public get selectedNode (): GraphNode<N> {\n return this._selectedNode\n }\n\n public get selectedLink (): GraphLink<N, L> {\n return this._selectedLink\n }\n\n constructor (config?: GraphConfigInterface<N, L>) {\n super()\n if (config) this.config.init(config)\n\n this._backgroundRect = this.g.append('rect').attr('class', generalSelectors.background)\n this._graphGroup = this.g.append('g').attr('class', generalSelectors.graphGroup)\n\n this._zoomBehavior = zoom<SVGGElement, unknown>()\n .scaleExtent(this.config.zoomScaleExtent)\n .on('zoom', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoom(e.transform, e))\n\n this._panelsGroup = this._graphGroup.append('g').attr('class', panelSelectors.panels)\n this._linksGroup = this._graphGroup.append('g').attr('class', linkSelectors.links)\n this._nodesGroup = this._graphGroup.append('g').attr('class', nodeSelectors.nodes)\n\n this._defs = this._graphGroup.append('defs')\n }\n\n setData (data: {nodes: N[]; links?: L[]}): void {\n const { config } = this\n\n this.datamodel.nodeSort = config.nodeSort\n this.datamodel.data = data\n this._recalculateLayout = true\n if (config.layoutAutofit) this._fitLayout = true\n this._setPanels = true\n\n this._addSVGDefs()\n }\n\n setConfig (config: GraphConfigInterface<N, L>): void {\n this._fitLayout = this._fitLayout || this.config.layoutType !== config.layoutType\n this._recalculateLayout = this._recalculateLayout || this._shouldLayoutRecalculate(config)\n\n super.setConfig(config)\n this._setPanels = true\n }\n\n get bleed (): Spacing {\n const { datamodel: { nodes }, config: { nodeSize } } = this\n const maxPanelPadding = getMaxPanelPadding(this._panels)\n const maxNodeSize = getMaxNodeSize(nodes, nodeSize)\n const extra = 20 // Extra padding to take into account labels\n const padding = maxNodeSize * 0.5 + maxPanelPadding + extra\n const panelLabelHeight = this._panels?.length ? 50 : 0\n\n return { top: padding + panelLabelHeight, bottom: padding, left: padding, right: padding }\n }\n\n _render (customDuration?: number): void {\n const { config: { disableZoom, duration, layoutAutofit, panels }, datamodel } = this\n if (!datamodel.nodes && !datamodel.links) return\n const animDuration = isNumber(customDuration) ? customDuration : duration\n\n this._backgroundRect\n .attr('width', this._width)\n .attr('height', this._height)\n .attr('opacity', 0)\n\n if ((this._prevWidth !== this._width || this._prevHeight !== this._height) && layoutAutofit) {\n // Fit layout on resize\n this._fitLayout = true\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n // Apply layout and render\n this._calculateLayout().then((isFirstRender) => {\n // If the component has been destroyed while the layout calculation\n // was in progress, we cancel the render\n if (this.isDestroyed()) return\n\n if (this._setPanels) {\n smartTransition(this._panelsGroup, duration / 2)\n .style('opacity', panels?.length ? 1 : 0)\n\n this._panels = cloneDeep(panels) as GraphPanel[]\n setPanelForNodes(this._panels, datamodel.nodes, this.config)\n this._setPanels = false\n }\n\n if (isFirstRender) {\n this._fit()\n this._fitLayout = false\n } else if (this._fitLayout && !this._disableAutoFit) {\n this._fit(duration)\n this._fitLayout = false\n }\n\n // Draw\n this._drawNodes(animDuration)\n this._drawLinks(animDuration)\n\n // Select Links / Nodes\n this._resetSelection()\n if (this.config.selectedNodeId) {\n const selectedNode = datamodel.nodes.find(node => node.id === this.config.selectedNodeId)\n this._selectNode(selectedNode)\n }\n\n if (this.config.selectedLinkId) {\n const selectedLink = datamodel.links.find(link => link.id === this.config.selectedLinkId)\n this._selectLink(selectedLink)\n }\n\n // Link flow animation timer\n if (!this._timer) {\n const refreshRateMs = 35\n this._timer = interval(this._onLinkFlowTimerFrame.bind(this), refreshRateMs)\n }\n\n // Zoom\n if (disableZoom) this.g.on('.zoom', null)\n else this.g.call(this._zoomBehavior).on('dblclick.zoom', null)\n\n if (!this._firstRender && !disableZoom) {\n const transform = zoomTransform(this.g.node())\n this._onZoom(transform)\n }\n\n // While the graph is animating we disable pointer events on the graph group\n if (animDuration) { this._graphGroup.attr('pointer-events', 'none') }\n smartTransition(this._graphGroup, animDuration)\n .on('end interrupt', () => {\n this._graphGroup.attr('pointer-events', null)\n })\n\n // We need to set up events and attributes again because the rendering might have been delayed by the layout\n // calculation and they were not set up properly (see the render function of `ComponentCore`)\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n })\n\n\n this._firstRender = false\n }\n\n private _drawNodes (duration: number): void {\n const { config, datamodel } = this\n\n const nodes: GraphNode<N>[] = datamodel.nodes\n const nodeGroups = this._nodesGroup\n .selectAll<SVGGElement, GraphNode<N>>(`.${nodeSelectors.gNode}:not(.${nodeSelectors.gNodeExit})`)\n .data(nodes, d => String(d._id))\n\n const nodeGroupsEnter = nodeGroups.enter().append('g')\n .attr('class', nodeSelectors.gNode)\n .call(createNodes, config, duration)\n\n const nodeGroupsMerged = nodeGroups.merge(nodeGroupsEnter)\n const nodeUpdateSelection = updateNodes(nodeGroupsMerged, config, duration, this._scale)\n this._drawPanels(nodeUpdateSelection, duration)\n\n const nodesGroupExit = nodeGroups.exit()\n nodesGroupExit\n .classed(nodeSelectors.gNodeExit, true)\n .call(removeNodes, config, duration)\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const thisRef = this\n if (!config.disableDrag) {\n const dragBehaviour = drag<SVGGElement, GraphNode<N>>()\n .on('start', function (event, d) { thisRef._onDragStarted(d, event, select(this)) })\n .on('drag', function (event, d) { thisRef._onDragged(d, event, nodeGroupsMerged) })\n .on('end', function (event, d) { thisRef._onDragEnded(d, event, select(this)) })\n nodeGroupsMerged.call(dragBehaviour)\n } else {\n nodeGroupsMerged.on('.drag', null)\n }\n }\n\n private _drawLinks (duration: number): void {\n const { config, datamodel: { links } } = this\n\n const linkGroups = this._linksGroup\n .selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .data(links, (d: GraphLink<N, L>) => String(d._id))\n\n const linkGroupsEnter = linkGroups.enter().append('g')\n .attr('class', linkSelectors.gLink)\n .call(createLinks, config, duration)\n\n const linkGroupsMerged = linkGroups.merge(linkGroupsEnter)\n linkGroupsMerged.call(updateLinks, config, duration, this._scale)\n\n const linkGroupsExit = linkGroups.exit()\n linkGroupsExit\n .attr('class', linkSelectors.gLinkExit)\n .call(removeLinks, config, duration)\n }\n\n private _drawPanels (\n nodeUpdateSelection: Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown> |\n Transition<BaseType, GraphNode<N>, SVGGElement, unknown>,\n duration: number\n ): void {\n const { config } = this\n if (!this._panels) return\n\n const selection = ((nodeUpdateSelection as Transition<SVGGElement, GraphNode<N>, SVGGElement, unknown>).duration)\n ? (nodeUpdateSelection as Transition<SVGGElement, GraphNode<N>, SVGGElement, unknown>).selection()\n : nodeUpdateSelection as Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown>\n\n updatePanelNumNodes(selection, this._panels, config)\n updatePanelBBoxSize(selection, this._panels, config)\n const panelData = this._panels.filter(p => p._numNodes)\n const panelGroup = this._panelsGroup\n .selectAll<SVGGElement, GraphPanel>(`.${panelSelectors.gPanel}`)\n .data(panelData, p => p.label)\n\n const panelGroupExit = panelGroup.exit()\n panelGroupExit.call(removePanels, config, duration)\n\n const panelGroupEnter = panelGroup.enter().append('g')\n .attr('class', panelSelectors.gPanel)\n .call(createPanels, selection)\n const panelGroupMerged = panelGroup.merge(panelGroupEnter)\n\n this._updatePanels(panelGroupMerged, duration)\n }\n\n private _updatePanels (panelToUpdate: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>, duration: number): void {\n const { config } = this\n if (!this._panels) return\n\n panelToUpdate.call(updatePanels, config, duration)\n }\n\n private async _calculateLayout (): Promise<boolean> {\n const { config, datamodel } = this\n\n const firstRender = this._firstRender\n if (this._recalculateLayout) {\n switch (config.layoutType) {\n case GraphLayoutType.Parallel:\n applyLayoutParallel(datamodel, config, this._width, this._height)\n break\n case GraphLayoutType.ParallelHorizontal:\n applyLayoutParallel(datamodel, config, this._width, this._height, 'horizontal')\n break\n case GraphLayoutType.Dagre:\n await applyLayoutDagre(datamodel, config, this._width)\n break\n case GraphLayoutType.Force:\n await applyLayoutForce(datamodel, config, this._width)\n break\n case GraphLayoutType.Concentric:\n applyLayoutConcentric(datamodel, config, this._width, this._height)\n break\n case GraphLayoutType.Circular:\n default:\n applyLayoutCircular(datamodel, config, this._width, this._height)\n break\n }\n\n this._recalculateLayout = false\n }\n\n return firstRender\n }\n\n private _fit (duration = 0): void {\n const { datamodel: { nodes } } = this\n if (nodes?.length && this.g?.size()) {\n const transform = this._getTransform(nodes)\n smartTransition(this.g, duration)\n .call(this._zoomBehavior.transform, transform)\n this._onZoom(transform)\n } else {\n console.warn('Unovis | Graph: Node data is not defined. Check if the component has been initialized.')\n }\n }\n\n private _getTransform (nodes: GraphNode<N>[]): ZoomTransform {\n const { nodeSize, zoomScaleExtent } = this.config\n const { left, top, right, bottom } = this.bleed\n\n const maxNodeSize = getMaxNodeSize(nodes, nodeSize)\n const w = this._width\n const h = this._height\n const xExtent = extent(nodes, d => getX(d)) as number[]\n const yExtent = extent(nodes, d => getY(d)) as number[]\n\n const xScale = w / (xExtent[1] - xExtent[0] + left + right)\n const yScale = h / (yExtent[1] - yExtent[0] + maxNodeSize + top + bottom)\n\n const clampedScale = clamp(min([xScale, yScale]), zoomScaleExtent[0], zoomScaleExtent[1])\n\n const xCenter = (xExtent[1] + xExtent[0]) / 2\n const yCenter = (yExtent[1] + yExtent[0] + maxNodeSize) / 2\n const translateX = this._width / 2 - xCenter * clampedScale\n const translateY = this._height / 2 - yCenter * clampedScale\n const transform = zoomIdentity\n .translate(translateX, translateY)\n .scale(clampedScale)\n\n return transform\n }\n\n private _selectNode (node: GraphNode<N>): void {\n const { datamodel: { nodes, links } } = this\n if (!node) console.warn('Unovis | Graph: Select Node: Not found')\n this._selectedNode = node\n\n // Apply grey out\n // Grey out all nodes\n nodes.forEach(n => {\n n._state.selected = false\n n._state.greyout = true\n })\n\n // Grey out all links\n links.forEach(l => {\n l._state.greyout = true\n l._state.selected = false\n })\n\n // Highlight selected\n if (node) {\n node._state.selected = true\n node._state.greyout = false\n\n const connectedLinks = links.filter(l => (l.source === node) || (l.target === node))\n connectedLinks.forEach(l => {\n const source = l.source as GraphNode<N>\n const target = l.target as GraphNode<N>\n source._state.greyout = false\n target._state.greyout = false\n l._state.greyout = false\n })\n }\n\n this._updateSelectedElements()\n }\n\n private _selectLink (link: GraphLink<N, L>): void {\n const { datamodel: { nodes, links } } = this\n if (!link) console.warn('Unovis: Graph: Select Link: Not found')\n this._selectedLink = link\n const selectedLinkSource = link?.source as GraphNode<N>\n const selectedLinkTarget = link?.target as GraphNode<N>\n\n // Apply grey out\n nodes.forEach(n => {\n n._state.selected = false\n n._state.greyout = true\n if (selectedLinkTarget?._id === n._id || selectedLinkSource?._id === n._id) {\n link._state.greyout = false\n }\n })\n\n links.forEach(l => {\n l._state.greyout = true\n const source = l.source as GraphNode<N>\n const target = l.target as GraphNode<N>\n if ((source._id === selectedLinkSource?._id) && (target._id === selectedLinkTarget?._id)) {\n source._state.greyout = false\n target._state.greyout = false\n l._state.greyout = false\n }\n })\n\n links.forEach(l => {\n delete l._state.selected\n })\n\n if (link) link._state.selected = true\n\n this._updateSelectedElements()\n }\n\n private _resetSelection (): void {\n const { datamodel: { nodes, links } } = this\n this._selectedNode = undefined\n this._selectedLink = undefined\n\n // Disable Grayout\n nodes.forEach(n => {\n delete n._state.selected\n delete n._state.greyout\n })\n links.forEach(l => {\n delete l._state.greyout\n delete l._state.selected\n })\n\n this._updateSelectedElements()\n }\n\n private _updateSelectedElements (): void {\n const { config } = this\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n linkElements.call(updateSelectedLinks, config, this._scale)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N>>(`.${nodeSelectors.gNode}`)\n nodeElements.call(updateSelectedNodes, config)\n\n // this._drawPanels(nodeElements, 0)\n }\n\n private _onBackgroundClick (): void {\n this._resetSelection()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeClick (d: GraphNode<N>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOut (d: GraphNode<N>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOver (d: GraphNode<N>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onLinkClick (d: GraphLink<N, L>): void {\n }\n\n private _onLinkMouseOver (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n d._state.hovered = true\n this._updateSelectedElements()\n }\n\n private _onLinkMouseOut (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n delete d._state.hovered\n this._updateSelectedElements()\n }\n\n private _onLinkFlowTimerFrame (elapsed = 0): void {\n const { config: { linkFlow, linkFlowAnimDuration }, datamodel: { links } } = this\n\n const hasLinksWithFlow = links.some((d, i) => getBoolean(d, linkFlow, i))\n if (!hasLinksWithFlow) return\n\n const t = (elapsed % linkFlowAnimDuration) / linkFlowAnimDuration\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n\n const linksToAnimate = linkElements.filter(d => !d._state.greyout)\n linksToAnimate.each(d => { d._state.flowAnimTime = t })\n animateLinkFlow(linksToAnimate, this.config, this._scale)\n }\n\n private _onZoom (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config, datamodel: { nodes } } = this\n const transform = t || event.transform\n this._scale = transform.k\n this._graphGroup.attr('transform', transform.toString())\n if (isFunction(config.onZoom)) config.onZoom(this._scale, config.zoomScaleExtent)\n\n if (!this._initialTransform) this._initialTransform = transform\n\n // If the event was triggered by a mouse interaction (pan or zoom) we don't\n // refit the layout after recalculation (e.g. on container resize)\n if (event?.sourceEvent) {\n const diff = Object.keys(transform).reduce((acc, prop) => {\n const val = transform[prop]\n const dVal = Math.abs(val - this._initialTransform[prop])\n return prop === 'k' ? 2 * dVal : dVal / 50\n }, 0)\n\n if (diff > config.layoutAutofitTolerance) this._disableAutoFit = true\n else this._disableAutoFit = false\n }\n\n this._nodesGroup.selectAll(`.${nodeSelectors.gNode}`)\n .call(nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomNodesThrottled : zoomNodes, config, this._scale)\n this._linksGroup.selectAll(`.${linkSelectors.gLink}`)\n .call(nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomLinksThrottled : zoomLinks, config, this._scale)\n }\n\n private _onDragStarted (\n d: GraphNode<N>,\n event: D3DragEvent<SVGGElement, GraphNode<N>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown>\n ): void {\n const { config } = this\n this._isDragging = true\n d._state.isDragged = true\n nodeSelection.call(updateNodes, config, 0, this._scale)\n }\n\n private _onDragged (\n d: GraphNode<N>,\n event: D3DragEvent<SVGGElement, GraphNode<N>, unknown>,\n allNodesSelection: Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown>\n ): void {\n const { config } = this\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Prevent from dragging outside\n const maxY = (this._height - transform.y) / scale\n const maxX = (this._width - transform.x) / scale\n const minY = -transform.y / scale\n const minX = -transform.x / scale\n let [x, y] = pointer(event, this._graphGroup.node())\n if (y < minY) y = minY\n else if (y > maxY) y = maxY\n if (x < minX) x = minX\n else if (x > maxX) x = maxX\n\n // Snap to Layout\n if (Math.sqrt(Math.pow(x - d.x, 2) + Math.pow(y - d.y, 2)) < 15) {\n x = d.x\n y = d.y\n }\n\n const panelNeighbourNodes = flatten(d._panels)\n if (panelNeighbourNodes.length > 0) {\n const prevX = getX(d)\n const prevY = getY(d)\n panelNeighbourNodes.forEach(node => {\n const dx = getX(node) - prevX\n const dy = getY(node) - prevY\n node._state.fx = x + dx\n node._state.fy = y + dy\n if (node._state.fx === node.x) delete node._state.fx\n if (node._state.fy === node.y) delete node._state.fy\n })\n } else {\n d._state.fx = x\n d._state.fy = y\n if (d._state.fx === d.x) delete d._state.fx\n if (d._state.fy === d.y) delete d._state.fy\n }\n\n const panelNodesToUpdate = allNodesSelection.filter((node: GraphNode<N>) => {\n return node._id === d._id || panelNeighbourNodes.findIndex((n: GraphNode<N>) => node._id === n._id) !== -1\n })\n\n panelNodesToUpdate\n .call(updateNodes, config, 0, scale)\n .call(zoomNodes, config, scale)\n const panelToUpdate = this._panelsGroup.selectAll<SVGGElement, GraphPanel>(`.${panelSelectors.gPanel}`)\n updatePanelBBoxSize(panelNodesToUpdate, this._panels, config)\n this._updatePanels(panelToUpdate, 0)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N>>(`.${nodeSelectors.gNode}`)\n const nodesToUpdate = nodeElements.filter((n: GraphNode<N>) => n._id === d._id)\n nodesToUpdate.call(updateNodes, config, 0, scale)\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n const linksToUpdate = linkElements.filter((l: L) => {\n const source = l.source as GraphNode<N>\n const target = l.target as GraphNode<N>\n return source._id === d._id || target._id === d._id || panelNeighbourNodes.findIndex((n: GraphNode<N>) => source._id === n._id) !== -1 || panelNeighbourNodes.findIndex((n: GraphNode<N>) => target._id === n._id) !== -1\n })\n linksToUpdate.call(updateLinks, config, 0, scale)\n const linksToAnimate = linksToUpdate.filter(d => d._state.greyout)\n if (linksToAnimate.size()) animateLinkFlow(linksToAnimate, config, this._scale)\n }\n\n private _onDragEnded (\n d: GraphNode<N>,\n event: D3DragEvent<SVGGElement, GraphNode<N>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N>, SVGGElement, unknown>\n ): void {\n const { config } = this\n this._isDragging = false\n d._state.isDragged = false\n nodeSelection.call(updateNodes, config, 0, this._scale)\n }\n\n private _shouldLayoutRecalculate (nextConfig: GraphConfigInterface<N, L>): boolean {\n const { config } = this\n if (config.layoutType !== nextConfig.layoutType) return true\n if (config.layoutNonConnectedAside !== nextConfig.layoutNonConnectedAside) return true\n\n if (config.layoutType === GraphLayoutType.Force) {\n const forceSettingsDiff = shallowDiff(config.forceLayoutSettings, nextConfig.forceLayoutSettings)\n if (Object.keys(forceSettingsDiff).length) return true\n }\n\n if (config.layoutType === GraphLayoutType.Dagre) {\n const dagreSettingsDiff = shallowDiff(config.dagreLayoutSettings, nextConfig.dagreLayoutSettings)\n if (Object.keys(dagreSettingsDiff).length) return true\n }\n\n if (\n config.layoutType === GraphLayoutType.Parallel ||\n config.layoutType === GraphLayoutType.ParallelHorizontal ||\n config.layoutType === GraphLayoutType.Concentric\n ) {\n if (config.layoutGroupOrder !== nextConfig.layoutGroupOrder) return true\n if (config.layoutParallelNodesPerColumn !== nextConfig.layoutParallelNodesPerColumn) return true\n if (config.layoutParallelSortConnectionsByGroup !== nextConfig.layoutParallelSortConnectionsByGroup) return true\n }\n\n return false\n }\n\n private _addSVGDefs (): void {\n const { datamodel: { links } } = this\n\n // Clean up old defs\n this._defs.selectAll('*').remove()\n\n // Get all variations of link colors to create markers\n const linkColors = unique(clean(\n links.map(d => getLinkColor(d, this.config))\n ))\n\n this._defs.selectAll('marker')\n .data([\n ...linkColors.map(d => ({ color: d, arrow: GraphLinkArrowStyle.Single })), // Single-sided arrows\n ...linkColors.map(d => ({ color: d, arrow: GraphLinkArrowStyle.Double })), // Double-sided arrows\n ]).enter()\n .append('marker')\n .attr('id', d => `${stringToHtmlId(d.color)}-${d.arrow}`)\n .attr('orient', 'auto')\n .attr('markerWidth', d => d.arrow === GraphLinkArrowStyle.Double ? LINK_MARKER_WIDTH * 2 : LINK_MARKER_WIDTH)\n .attr('markerHeight', d => d.arrow === GraphLinkArrowStyle.Double ? LINK_MARKER_HEIGHT * 2 : LINK_MARKER_HEIGHT)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('refX', LINK_MARKER_WIDTH - LINK_MARKER_HEIGHT / 2)\n .attr('refY', LINK_MARKER_HEIGHT - LINK_MARKER_HEIGHT / 2)\n .html(d => {\n return `\n <path\n d=\"${d.arrow === GraphLinkArrowStyle.Double ? getDoubleArrowPath() : getArrowPath()}\"\n fill=\"${d.color ?? null}\"\n />\n `\n })\n }\n\n public zoomIn (increment = 0.3): void {\n const scaleBy = 1 + increment\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleBy, scaleBy)\n }\n\n public zoomOut (increment = 0.3): void {\n const scaleBy = 1 - increment\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleBy, scaleBy)\n }\n\n public setZoom (zoomLevel: number): void {\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleTo, zoomLevel)\n }\n\n public fitView (): void {\n this._fit(this.config.duration / 2)\n }\n\n /** Enable automatic fitting to container if it was disabled due to previous zoom / pan interactions */\n public resetAutofitState (): void {\n this._disableAutoFit = false\n }\n\n /** Get current coordinates of the nodes as an array of { id: string; x: number; y: number } objects */\n public getNodesCoordinates (): { id: string; x: number; y: number }[] {\n const { datamodel: { nodes } } = this\n return nodes.map(n => ({\n id: n._id,\n x: n.x,\n y: n.y,\n }))\n }\n\n /** Get node coordinates by id as { id: string; x: number; y: number } */\n public getNodeCoordinatesById (id: string): { id: string; x: number; y: number } | undefined {\n const { datamodel: { nodes } } = this\n const node = nodes.find(n => n._id === id)\n\n if (!node) {\n console.warn(`Unovis | Graph: Node ${id} not found`)\n return undefined\n } else {\n return {\n id: node._id,\n x: node.x,\n y: node.y,\n }\n }\n }\n}\n"],"names":["generalSelectors.background","generalSelectors.graphGroup","panelSelectors.panels","linkSelectors.links","nodeSelectors.nodes","nodeSelectors.gNode","nodeSelectors.gNodeExit","linkSelectors.gLink","linkSelectors.gLinkExit","panelSelectors.gPanel","generalSelectors.root","nodeSelectors.node","nodeSelectors.nodeGauge","nodeSelectors.sideLabelGroup","nodeSelectors.label","linkSelectors.link","panelSelectors.panel","panelSelectors.panelSelection","panelSelectors.label","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.sideIconSymbol","nodeSelectors"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="lodash" />
2
1
  import { Selection } from 'd3-selection';
3
2
  import { GraphInputLink, GraphInputNode } from "../../../../types/graph";
4
3
  import { GraphLink } from '../../types';
@@ -9,4 +8,4 @@ export declare function updateLinks<N extends GraphInputNode, L extends GraphInp
9
8
  export declare function removeLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>, config: GraphConfig<N, L>, duration: number): void;
10
9
  export declare function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfig<N, L>, scale: number): void;
11
10
  export declare function zoomLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>, config: GraphConfig<N, L>, scale: number): void;
12
- export declare const zoomLinksThrottled: import("lodash").DebouncedFunc<typeof zoomLinks>;
11
+ export declare const zoomLinksThrottled: import("throttle-debounce").throttle<typeof zoomLinks>;
@@ -1,5 +1,6 @@
1
1
  import { select } from 'd3-selection';
2
- import { range, getBoolean, getValue, throttle } from '../../../../utils/data.js';
2
+ import { range } from 'd3-array';
3
+ import { getBoolean, getValue, throttle } from '../../../../utils/data.js';
3
4
  import { smartTransition } from '../../../../utils/d3.js';
4
5
  import { GraphLinkStyle } from '../../types.js';
5
6
  import { getX, getY } from '../node/helper.js';
@@ -23,7 +24,7 @@ function createLinks(selection) {
23
24
  selection.append('g')
24
25
  .attr('class', flowGroup)
25
26
  .selectAll(`.${flowCircle}`)
26
- .data(range(6)).enter()
27
+ .data(range(0, 6)).enter()
27
28
  .append('circle')
28
29
  .attr('class', flowCircle);
29
30
  selection.append('g')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\n\n// Utils\nimport { range, throttle, getValue, getBoolean } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphCircleLabel, GraphLink, GraphLinkArrowStyle, GraphLinkStyle } from '../../types'\n\n// Config\nimport { GraphConfig } from '../../config'\n\n// Helpers\nimport { getX, getY } from '../node/helper'\nimport {\n getPolylineData,\n getLinkShiftTransform,\n getLinkLabelShift,\n getLinkStrokeWidth,\n getLinkBandWidth,\n getMarker,\n getLinkColor,\n getLinkLabelTextColor,\n LINK_LABEL_RADIUS,\n LINK_MARKER_WIDTH,\n} from './helper'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as linkSelectors from './style'\n\nexport function createLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n): void {\n selection.attr('opacity', 0)\n\n selection.append('line')\n .attr('class', linkSelectors.linkSupport)\n\n selection.append('polyline')\n .attr('class', linkSelectors.link)\n\n selection.append('line')\n .attr('class', linkSelectors.linkBand)\n .attr('x1', d => getX(d.source))\n .attr('y1', d => getY(d.source))\n .attr('x2', d => getX(d.target))\n .attr('y2', d => getY(d.target))\n\n selection.append('g')\n .attr('class', linkSelectors.flowGroup)\n .selectAll(`.${linkSelectors.flowCircle}`)\n .data(range(6)).enter()\n .append('circle')\n .attr('class', linkSelectors.flowCircle)\n\n selection.append('g')\n .attr('class', linkSelectors.labelGroups)\n}\n\nexport function updateSelectedLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>,\n config: GraphConfig<N, L>,\n scale: number\n): void {\n const isGreyedOut = (d, i): boolean => getBoolean(d, config.linkDisabled, i) || d._state.greyout\n selection\n .classed(linkSelectors.greyout, (d, i) => isGreyedOut(d, i))\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select(element)\n group.select(`.${linkSelectors.link}`)\n group.select(`.${linkSelectors.linkBand}`)\n const linkSupport = group.select(`.${linkSelectors.linkSupport}`)\n\n linkSupport\n .style('stroke-opacity', (d._state.hovered || d._state.selected) ? 0.2 : 0)\n .style('stroke-width',\n d._state.selected\n ? getLinkBandWidth(d, scale, config) + 5\n : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null\n )\n })\n}\n\nexport function updateLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>,\n config: GraphConfig<N, L>,\n duration: number,\n scale = 1\n): void {\n const { linkFlowParticleSize, linkStyle, linkFlow, linkArrow, linkLabel, linkLabelShiftFromCenter } = config\n if (!selection.size()) return\n\n selection\n .classed(\n linkSelectors.linkDashed,\n d => getValue<GraphLink<N, L>, GraphLinkStyle>(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed\n )\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const link = linkGroup.select(`.${linkSelectors.link}`)\n const linkBand = linkGroup.select(`.${linkSelectors.linkBand}`)\n const linkSupport = linkGroup.select(`.${linkSelectors.linkSupport}`)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n link\n .attr('class', linkSelectors.link)\n .attr('marker-mid', getMarker(d, scale, config))\n .style('stroke-width', getLinkStrokeWidth(d, scale, config))\n .style('stroke', getLinkColor(d, config))\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n\n smartTransition(link, duration)\n .attr('points', getPolylineData({ x1, y1, x2, y2 }))\n\n linkBand\n .attr('class', linkSelectors.linkBand)\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .style('stroke-width', getLinkBandWidth(d, scale, config))\n .style('stroke', getLinkColor(d, config))\n\n smartTransition(linkBand, duration)\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n\n linkSupport\n .style('stroke', getLinkColor(d, config))\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n\n flowGroup\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')\n .style('opacity', 0)\n\n flowGroup\n .selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n .style('fill', getLinkColor(d, config))\n\n smartTransition(flowGroup, duration)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n // Labels\n const labelGroups = linkGroup.selectAll(`.${linkSelectors.labelGroups}`)\n const labelDatum = getValue<GraphLink<N, L>, GraphCircleLabel>(d, linkLabel, d._indexGlobal)\n const markerWidth = getValue<GraphLink<N, L>, GraphLinkArrowStyle>(d, linkArrow, d._indexGlobal) ? LINK_MARKER_WIDTH * 2 : 0\n const labelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -markerWidth + 4 : 0\n const labelTranslate = getLinkLabelShift(d, config.linkNeighborSpacing, labelShift)\n\n const labels = labelGroups.selectAll(`.${linkSelectors.labelGroup}`).data(labelDatum ? [labelDatum] : [])\n\n // Enter\n const labelsEnter = labels.enter().append('g')\n .attr('class', linkSelectors.labelGroup)\n .attr('transform', labelTranslate)\n .style('opacity', 0)\n\n labelsEnter.append('circle')\n .attr('class', linkSelectors.labelCircle)\n .attr('r', 0)\n\n labelsEnter.append('text')\n .attr('class', linkSelectors.labelContent)\n .attr('dy', 1)\n\n // Update\n const labelsUpdate = labels.merge(labelsEnter)\n\n smartTransition(labelsUpdate.select(`.${linkSelectors.labelCircle}`), duration)\n .attr('r', LINK_LABEL_RADIUS)\n .style('fill', label => label.color)\n\n labelsUpdate.select(`.${linkSelectors.labelContent}`)\n .text(label => label.text)\n .style('fill', label => getLinkLabelTextColor(label))\n .style('font-size', label => `${10 / Math.pow(label.text.toString().length, 0.3)}px`)\n\n smartTransition(labelsUpdate, duration)\n .attr('transform', labelTranslate)\n .style('opacity', 1)\n\n // Exit\n const labelsExit = labels.exit()\n smartTransition(labelsExit.select(`.${linkSelectors.labelCircle}`), duration)\n .attr('r', 0)\n\n smartTransition(labelsExit, duration)\n .style('opacity', 0)\n .remove()\n })\n\n if (duration > 0) {\n selection.attr('pointer-events', 'none')\n const t = smartTransition(selection, duration) as Transition<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n t\n .attr('opacity', 1)\n .on('end interrupt', (d, i, elements) => {\n select(elements[i])\n .attr('pointer-events', 'stroke')\n .attr('opacity', 1)\n })\n } else {\n selection.attr('opacity', 1)\n }\n\n updateSelectedLinks(selection, config, scale)\n}\n\nexport function removeLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>,\n config: GraphConfig<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .remove()\n}\n\nexport function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>,\n scale: number\n): void {\n const { linkFlow } = config\n if (scale < ZoomLevel.Level2) return\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n if (!getBoolean(d, linkFlow, d._indexGlobal)) return\n const t = d._state.flowAnimTime\n const circles = flowGroup.selectAll(`.${linkSelectors.flowCircle}`)\n\n circles\n .attr('transform', index => {\n const tt = (t + (+index) / (circles.size() - 1)) % 1\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n const x = x1 + tt * (x2 - x1)\n const y = y1 + tt * (y2 - y1)\n return `translate(${x}, ${y})`\n })\n })\n}\n\nexport function zoomLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>,\n config: GraphConfig<N, L>,\n scale: number\n): void {\n const { linkFlowParticleSize } = config\n\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n selection.selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n\n const linkElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.link}`)\n linkElements\n .attr('marker-mid', d => getMarker(d, scale, config))\n .style('stroke-width', d => getLinkStrokeWidth(d, scale, config))\n\n const linkBandElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.linkBand}`)\n linkBandElements\n .style('stroke-width', d => getLinkBandWidth(d, scale, config))\n}\n\nexport const zoomLinksThrottled = throttle(zoomLinks, 500)\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.flowGroup","linkSelectors.flowCircle","linkSelectors.labelGroups","linkSelectors.greyout","linkSupport","linkSelectors.linkDashed","link","linkBand","flowGroup","labelGroups","linkSelectors.labelGroup","linkSelectors.labelCircle","linkSelectors.labelContent","generalSelectors.zoomOutLevel2"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { range } from 'd3-array'\nimport { Transition } from 'd3-transition'\n\n// Utils\nimport { throttle, getValue, getBoolean } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphCircleLabel, GraphLink, GraphLinkArrowStyle, GraphLinkStyle } from '../../types'\n\n// Config\nimport { GraphConfig } from '../../config'\n\n// Helpers\nimport { getX, getY } from '../node/helper'\nimport {\n getPolylineData,\n getLinkShiftTransform,\n getLinkLabelShift,\n getLinkStrokeWidth,\n getLinkBandWidth,\n getMarker,\n getLinkColor,\n getLinkLabelTextColor,\n LINK_LABEL_RADIUS,\n LINK_MARKER_WIDTH,\n} from './helper'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as linkSelectors from './style'\n\nexport function createLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n): void {\n selection.attr('opacity', 0)\n\n selection.append('line')\n .attr('class', linkSelectors.linkSupport)\n\n selection.append('polyline')\n .attr('class', linkSelectors.link)\n\n selection.append('line')\n .attr('class', linkSelectors.linkBand)\n .attr('x1', d => getX(d.source))\n .attr('y1', d => getY(d.source))\n .attr('x2', d => getX(d.target))\n .attr('y2', d => getY(d.target))\n\n selection.append('g')\n .attr('class', linkSelectors.flowGroup)\n .selectAll(`.${linkSelectors.flowCircle}`)\n .data(range(0, 6)).enter()\n .append('circle')\n .attr('class', linkSelectors.flowCircle)\n\n selection.append('g')\n .attr('class', linkSelectors.labelGroups)\n}\n\nexport function updateSelectedLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>,\n config: GraphConfig<N, L>,\n scale: number\n): void {\n const isGreyedOut = (d, i): boolean => getBoolean(d, config.linkDisabled, i) || d._state.greyout\n selection\n .classed(linkSelectors.greyout, (d, i) => isGreyedOut(d, i))\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select(element)\n group.select(`.${linkSelectors.link}`)\n group.select(`.${linkSelectors.linkBand}`)\n const linkSupport = group.select(`.${linkSelectors.linkSupport}`)\n\n linkSupport\n .style('stroke-opacity', (d._state.hovered || d._state.selected) ? 0.2 : 0)\n .style('stroke-width',\n d._state.selected\n ? getLinkBandWidth(d, scale, config) + 5\n : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null\n )\n })\n}\n\nexport function updateLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>,\n config: GraphConfig<N, L>,\n duration: number,\n scale = 1\n): void {\n const { linkFlowParticleSize, linkStyle, linkFlow, linkArrow, linkLabel, linkLabelShiftFromCenter } = config\n if (!selection.size()) return\n\n selection\n .classed(\n linkSelectors.linkDashed,\n d => getValue<GraphLink<N, L>, GraphLinkStyle>(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed\n )\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const link = linkGroup.select(`.${linkSelectors.link}`)\n const linkBand = linkGroup.select(`.${linkSelectors.linkBand}`)\n const linkSupport = linkGroup.select(`.${linkSelectors.linkSupport}`)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n link\n .attr('class', linkSelectors.link)\n .attr('marker-mid', getMarker(d, scale, config))\n .style('stroke-width', getLinkStrokeWidth(d, scale, config))\n .style('stroke', getLinkColor(d, config))\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n\n smartTransition(link, duration)\n .attr('points', getPolylineData({ x1, y1, x2, y2 }))\n\n linkBand\n .attr('class', linkSelectors.linkBand)\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .style('stroke-width', getLinkBandWidth(d, scale, config))\n .style('stroke', getLinkColor(d, config))\n\n smartTransition(linkBand, duration)\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n\n linkSupport\n .style('stroke', getLinkColor(d, config))\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n\n flowGroup\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')\n .style('opacity', 0)\n\n flowGroup\n .selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n .style('fill', getLinkColor(d, config))\n\n smartTransition(flowGroup, duration)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n // Labels\n const labelGroups = linkGroup.selectAll(`.${linkSelectors.labelGroups}`)\n const labelDatum = getValue<GraphLink<N, L>, GraphCircleLabel>(d, linkLabel, d._indexGlobal)\n const markerWidth = getValue<GraphLink<N, L>, GraphLinkArrowStyle>(d, linkArrow, d._indexGlobal) ? LINK_MARKER_WIDTH * 2 : 0\n const labelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -markerWidth + 4 : 0\n const labelTranslate = getLinkLabelShift(d, config.linkNeighborSpacing, labelShift)\n\n const labels = labelGroups.selectAll(`.${linkSelectors.labelGroup}`).data(labelDatum ? [labelDatum] : [])\n\n // Enter\n const labelsEnter = labels.enter().append('g')\n .attr('class', linkSelectors.labelGroup)\n .attr('transform', labelTranslate)\n .style('opacity', 0)\n\n labelsEnter.append('circle')\n .attr('class', linkSelectors.labelCircle)\n .attr('r', 0)\n\n labelsEnter.append('text')\n .attr('class', linkSelectors.labelContent)\n .attr('dy', 1)\n\n // Update\n const labelsUpdate = labels.merge(labelsEnter)\n\n smartTransition(labelsUpdate.select(`.${linkSelectors.labelCircle}`), duration)\n .attr('r', LINK_LABEL_RADIUS)\n .style('fill', label => label.color)\n\n labelsUpdate.select(`.${linkSelectors.labelContent}`)\n .text(label => label.text)\n .style('fill', label => getLinkLabelTextColor(label))\n .style('font-size', label => `${10 / Math.pow(label.text.toString().length, 0.3)}px`)\n\n smartTransition(labelsUpdate, duration)\n .attr('transform', labelTranslate)\n .style('opacity', 1)\n\n // Exit\n const labelsExit = labels.exit()\n smartTransition(labelsExit.select(`.${linkSelectors.labelCircle}`), duration)\n .attr('r', 0)\n\n smartTransition(labelsExit, duration)\n .style('opacity', 0)\n .remove()\n })\n\n if (duration > 0) {\n selection.attr('pointer-events', 'none')\n const t = smartTransition(selection, duration) as Transition<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n t\n .attr('opacity', 1)\n .on('end interrupt', (d, i, elements) => {\n select(elements[i])\n .attr('pointer-events', 'stroke')\n .attr('opacity', 1)\n })\n } else {\n selection.attr('opacity', 1)\n }\n\n updateSelectedLinks(selection, config, scale)\n}\n\nexport function removeLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>,\n config: GraphConfig<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .remove()\n}\n\nexport function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfig<N, L>,\n scale: number\n): void {\n const { linkFlow } = config\n if (scale < ZoomLevel.Level2) return\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n if (!getBoolean(d, linkFlow, d._indexGlobal)) return\n const t = d._state.flowAnimTime\n const circles = flowGroup.selectAll(`.${linkSelectors.flowCircle}`)\n\n circles\n .attr('transform', index => {\n const tt = (t + (+index) / (circles.size() - 1)) % 1\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n const x = x1 + tt * (x2 - x1)\n const y = y1 + tt * (y2 - y1)\n return `translate(${x}, ${y})`\n })\n })\n}\n\nexport function zoomLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>,\n config: GraphConfig<N, L>,\n scale: number\n): void {\n const { linkFlowParticleSize } = config\n\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n selection.selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n\n const linkElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.link}`)\n linkElements\n .attr('marker-mid', d => getMarker(d, scale, config))\n .style('stroke-width', d => getLinkStrokeWidth(d, scale, config))\n\n const linkBandElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.linkBand}`)\n linkBandElements\n .style('stroke-width', d => getLinkBandWidth(d, scale, config))\n}\n\nexport const zoomLinksThrottled = throttle(zoomLinks, 500)\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.flowGroup","linkSelectors.flowCircle","linkSelectors.labelGroups","linkSelectors.greyout","linkSupport","linkSelectors.linkDashed","link","linkBand","flowGroup","labelGroups","linkSelectors.labelGroup","linkSelectors.labelCircle","linkSelectors.labelContent","generalSelectors.zoomOutLevel2"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="lodash" />
2
1
  import { Selection } from 'd3-selection';
3
2
  import { Transition } from 'd3-transition';
4
3
  import { GraphInputLink, GraphInputNode } from "../../../../types/graph";
@@ -9,4 +8,4 @@ export declare function updateSelectedNodes<N extends GraphInputNode, L extends
9
8
  export declare function updateNodes<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, config: GraphConfig<N, L>, duration: number, scale?: number): Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>;
10
9
  export declare function removeNodes<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, config: GraphConfig<N, L>, duration: number): void;
11
10
  export declare function zoomNodes<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, config: GraphConfig<N, L>, scale: number): void;
12
- export declare const zoomNodesThrottled: import("lodash").DebouncedFunc<typeof zoomNodes>;
11
+ export declare const zoomNodesThrottled: import("throttle-debounce").throttle<typeof zoomNodes>;
@@ -1,6 +1,6 @@
1
1
  import { max } from 'd3-array';
2
2
  import { Position } from '../../../../types/position.js';
3
- import { find, getBoolean } from '../../../../utils/data.js';
3
+ import { getBoolean } from '../../../../utils/data.js';
4
4
  import { getNodeSize, getX, getY } from '../node/helper.js';
5
5
  import { node } from '../node/style.js';
6
6
 
@@ -20,7 +20,7 @@ function setPanelForNodes(panels, nodes, config) {
20
20
  if (!layoutNonConnectedAside || node._isConnected) {
21
21
  // Find and put neighbour Nodes to each panel
22
22
  node._panels = nodePanels.map(panel => {
23
- const panelNodes = panel.nodes.map((panelNodeId) => find(nodes, (n) => panelNodeId === n._id));
23
+ const panelNodes = panel.nodes.map((panelNodeId) => nodes.find((n) => panelNodeId === n._id));
24
24
  return layoutNonConnectedAside ? panelNodes.filter((n) => n._isConnected) : panelNodes;
25
25
  });
26
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sources":["../../../../../src/components/graph/modules/panel/helper.ts"],"sourcesContent":["import { Selection, BaseType } from 'd3-selection'\nimport { max } from 'd3-array'\n\n// Types\nimport { NumericAccessor, BooleanAccessor } from 'types/accessor'\nimport { Position } from 'types/position'\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Utils\nimport { find, getBoolean } from 'utils/data'\n\n// Local Types\nimport { GraphNode, GraphPanel } from '../../types'\n\n// Config\nimport { GraphConfig } from '../../config'\n\n// Helpers\nimport { getX, getY, getNodeSize } from '../node/helper'\n\n// Styles\nimport * as nodeSelectors from '../node/style'\n\nexport const DEFAULT_PADDING = 15\nexport const DEFAULT_LABEL_MARGIN = 16\nexport const OUTLINE_SELECTION_PADDING = 5\nexport const DEFAULT_SIDE_LABEL_SIZE = 25\n\nexport function setPanelForNodes<N extends GraphInputNode, L extends GraphInputLink> (\n panels: GraphPanel[],\n nodes: GraphNode<N, L>[],\n config: GraphConfig<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n // For each Node create Panels to which node belongs\n // Then for each Panel create an array of neighbouring Nodes\n nodes.forEach(node => {\n // Find all panels to which node is belong\n const nodePanels = panels.filter(panel => panel.nodes && panel.nodes.includes(node._id))\n if (!layoutNonConnectedAside || node._isConnected) {\n // Find and put neighbour Nodes to each panel\n node._panels = nodePanels.map(panel => {\n const panelNodes = panel.nodes.map((panelNodeId): GraphNode<N, L> => find(nodes, (n: GraphNode<N, L>) => panelNodeId === n._id))\n return layoutNonConnectedAside ? panelNodes.filter((n: GraphNode<N, L>) => n._isConnected) : panelNodes\n })\n }\n })\n}\n\nexport function setPanelBBox<N extends GraphInputNode, L extends GraphInputLink> (\n panelConfig: GraphPanel,\n panelNodes: Selection<BaseType, GraphNode<N, L>, SVGGElement, unknown>,\n nodeSizeAccessor: NumericAccessor<N>,\n nodeDisabledAccessor: BooleanAccessor<N>\n): void {\n const selection = panelNodes.select(`.${nodeSelectors.node}`)\n if (selection.empty()) return\n\n const labelApprxHeight = 40\n const labelApprxWidth = 110\n const labelMargin = 10\n let box: { x1: number; x2: number; y1: number; y2: number }\n\n selection.each((d, i) => {\n const nodeSize = getNodeSize(d, nodeSizeAccessor, i)\n const w = Math.max(nodeSize, labelApprxWidth)\n const h = nodeSize + labelMargin + labelApprxHeight\n // const nodeBBox = node.getBBox()\n const yShift = 10 // This is hard to calculate so we just using an approximation\n\n const coords = {\n x1: getX(d) - w / 2 - DEFAULT_PADDING, // We use d.x and d.y instead of bBox values here because gBBox contains initial ...\n y1: getY(d) - h / 2 + yShift - DEFAULT_PADDING, // ... coordinates (before transition starts), not target coordinates\n x2: getX(d) + w / 2 + DEFAULT_PADDING,\n y2: getY(d) + h / 2 + yShift + DEFAULT_PADDING,\n }\n\n if (!box) {\n box = {\n ...coords,\n }\n } else {\n if (box.x1 > coords.x1) box.x1 = coords.x1\n if (box.y1 > coords.y1) box.y1 = coords.y1\n if (box.x2 < coords.x2) box.x2 = coords.x2\n if (box.y2 < coords.y2) box.y2 = coords.y2\n }\n })\n\n panelConfig._x = box.x1\n panelConfig._y = box.y1\n panelConfig._width = box.x2 - box.x1\n panelConfig._height = box.y2 - box.y1\n panelConfig._disabled = selection.data()\n .map((node, i) => getBoolean(node, nodeDisabledAccessor, node._index) || node._state.greyout)\n .every(d => d)\n}\n\nexport function setPanelNumNodes<N extends GraphInputNode, L extends GraphInputLink> (\n panelConfig: GraphPanel,\n panelNodes: Selection<BaseType, GraphNode<N, L>, SVGGElement, unknown>\n): void {\n panelConfig._numNodes = panelNodes.size()\n}\n\nexport function updatePanelBBoxSize<N extends GraphInputNode, L extends GraphInputLink> (\n nodesSelection: Selection<BaseType, GraphNode<N, L>, SVGGElement, unknown>,\n panels: GraphPanel[],\n config: GraphConfig<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n panels.forEach(panelConfig => {\n const panelNodes = nodesSelection.filter(node => {\n return (!layoutNonConnectedAside || node._isConnected) && panelConfig.nodes.includes(node._id)\n })\n setPanelBBox(panelConfig, panelNodes, config.nodeSize, config.nodeDisabled)\n })\n}\n\nexport function updatePanelNumNodes<N extends GraphInputNode, L extends GraphInputLink> (\n nodesSelection: Selection<BaseType, GraphNode<N, L>, SVGGElement, unknown>,\n panels: GraphPanel[],\n config: GraphConfig<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n panels.forEach(panelConfig => {\n const panelNodes = nodesSelection.filter(node => {\n return (!layoutNonConnectedAside || node._isConnected) && panelConfig.nodes.includes(node._id)\n })\n setPanelNumNodes(panelConfig, panelNodes)\n })\n}\n\nexport function getMaxPanelPadding<N extends GraphInputNode, L extends GraphInputLink> (panels: GraphPanel[]): number {\n return panels?.length ? DEFAULT_PADDING + max(panels.map(d => d.padding ?? 0)) : 0\n}\n\nexport function getLabelTranslateTransform<N extends GraphInputNode, L extends GraphInputLink> (panel: GraphPanel): string {\n const x = panel._width / 2\n const dy = (panel.padding ?? DEFAULT_PADDING) + DEFAULT_LABEL_MARGIN + (panel.dashedOutline ? OUTLINE_SELECTION_PADDING : 0)\n const y = panel.labelPosition === Position.Bottom\n ? panel._height + dy\n : -dy\n\n return `translate(${x}, ${y})`\n}\n"],"names":["nodeSelectors.node"],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","sources":["../../../../../src/components/graph/modules/panel/helper.ts"],"sourcesContent":["import { Selection, BaseType } from 'd3-selection'\nimport { max } from 'd3-array'\n\n// Types\nimport { NumericAccessor, BooleanAccessor } from 'types/accessor'\nimport { Position } from 'types/position'\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Utils\nimport { getBoolean } from 'utils/data'\n\n// Local Types\nimport { GraphNode, GraphPanel } from '../../types'\n\n// Config\nimport { GraphConfig } from '../../config'\n\n// Helpers\nimport { getX, getY, getNodeSize } from '../node/helper'\n\n// Styles\nimport * as nodeSelectors from '../node/style'\n\nexport const DEFAULT_PADDING = 15\nexport const DEFAULT_LABEL_MARGIN = 16\nexport const OUTLINE_SELECTION_PADDING = 5\nexport const DEFAULT_SIDE_LABEL_SIZE = 25\n\nexport function setPanelForNodes<N extends GraphInputNode, L extends GraphInputLink> (\n panels: GraphPanel[],\n nodes: GraphNode<N, L>[],\n config: GraphConfig<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n // For each Node create Panels to which node belongs\n // Then for each Panel create an array of neighbouring Nodes\n nodes.forEach(node => {\n // Find all panels to which node is belong\n const nodePanels = panels.filter(panel => panel.nodes && panel.nodes.includes(node._id))\n if (!layoutNonConnectedAside || node._isConnected) {\n // Find and put neighbour Nodes to each panel\n node._panels = nodePanels.map(panel => {\n const panelNodes = panel.nodes.map((panelNodeId): GraphNode<N, L> => nodes.find((n: GraphNode<N, L>) => panelNodeId === n._id))\n return layoutNonConnectedAside ? panelNodes.filter((n: GraphNode<N, L>) => n._isConnected) : panelNodes\n })\n }\n })\n}\n\nexport function setPanelBBox<N extends GraphInputNode, L extends GraphInputLink> (\n panelConfig: GraphPanel,\n panelNodes: Selection<BaseType, GraphNode<N, L>, SVGGElement, unknown>,\n nodeSizeAccessor: NumericAccessor<N>,\n nodeDisabledAccessor: BooleanAccessor<N>\n): void {\n const selection = panelNodes.select(`.${nodeSelectors.node}`)\n if (selection.empty()) return\n\n const labelApprxHeight = 40\n const labelApprxWidth = 110\n const labelMargin = 10\n let box: { x1: number; x2: number; y1: number; y2: number }\n\n selection.each((d, i) => {\n const nodeSize = getNodeSize(d, nodeSizeAccessor, i)\n const w = Math.max(nodeSize, labelApprxWidth)\n const h = nodeSize + labelMargin + labelApprxHeight\n // const nodeBBox = node.getBBox()\n const yShift = 10 // This is hard to calculate so we just using an approximation\n\n const coords = {\n x1: getX(d) - w / 2 - DEFAULT_PADDING, // We use d.x and d.y instead of bBox values here because gBBox contains initial ...\n y1: getY(d) - h / 2 + yShift - DEFAULT_PADDING, // ... coordinates (before transition starts), not target coordinates\n x2: getX(d) + w / 2 + DEFAULT_PADDING,\n y2: getY(d) + h / 2 + yShift + DEFAULT_PADDING,\n }\n\n if (!box) {\n box = {\n ...coords,\n }\n } else {\n if (box.x1 > coords.x1) box.x1 = coords.x1\n if (box.y1 > coords.y1) box.y1 = coords.y1\n if (box.x2 < coords.x2) box.x2 = coords.x2\n if (box.y2 < coords.y2) box.y2 = coords.y2\n }\n })\n\n panelConfig._x = box.x1\n panelConfig._y = box.y1\n panelConfig._width = box.x2 - box.x1\n panelConfig._height = box.y2 - box.y1\n panelConfig._disabled = selection.data()\n .map((node, i) => getBoolean(node, nodeDisabledAccessor, node._index) || node._state.greyout)\n .every(d => d)\n}\n\nexport function setPanelNumNodes<N extends GraphInputNode, L extends GraphInputLink> (\n panelConfig: GraphPanel,\n panelNodes: Selection<BaseType, GraphNode<N, L>, SVGGElement, unknown>\n): void {\n panelConfig._numNodes = panelNodes.size()\n}\n\nexport function updatePanelBBoxSize<N extends GraphInputNode, L extends GraphInputLink> (\n nodesSelection: Selection<BaseType, GraphNode<N, L>, SVGGElement, unknown>,\n panels: GraphPanel[],\n config: GraphConfig<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n panels.forEach(panelConfig => {\n const panelNodes = nodesSelection.filter(node => {\n return (!layoutNonConnectedAside || node._isConnected) && panelConfig.nodes.includes(node._id)\n })\n setPanelBBox(panelConfig, panelNodes, config.nodeSize, config.nodeDisabled)\n })\n}\n\nexport function updatePanelNumNodes<N extends GraphInputNode, L extends GraphInputLink> (\n nodesSelection: Selection<BaseType, GraphNode<N, L>, SVGGElement, unknown>,\n panels: GraphPanel[],\n config: GraphConfig<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n panels.forEach(panelConfig => {\n const panelNodes = nodesSelection.filter(node => {\n return (!layoutNonConnectedAside || node._isConnected) && panelConfig.nodes.includes(node._id)\n })\n setPanelNumNodes(panelConfig, panelNodes)\n })\n}\n\nexport function getMaxPanelPadding<N extends GraphInputNode, L extends GraphInputLink> (panels: GraphPanel[]): number {\n return panels?.length ? DEFAULT_PADDING + max(panels.map(d => d.padding ?? 0)) : 0\n}\n\nexport function getLabelTranslateTransform<N extends GraphInputNode, L extends GraphInputLink> (panel: GraphPanel): string {\n const x = panel._width / 2\n const dy = (panel.padding ?? DEFAULT_PADDING) + DEFAULT_LABEL_MARGIN + (panel.dashedOutline ? OUTLINE_SELECTION_PADDING : 0)\n const y = panel.labelPosition === Position.Bottom\n ? panel._height + dy\n : -dy\n\n return `translate(${x}, ${y})`\n}\n"],"names":["nodeSelectors.node"],"mappings":";;;;;;AAuBO,MAAM,eAAe,GAAG,GAAE;AAC1B,MAAM,oBAAoB,GAAG,GAAE;AAC/B,MAAM,yBAAyB,GAAG,EAAC;AACnC,MAAM,uBAAuB,GAAG,GAAE;SAEzB,gBAAgB,CAC9B,MAAoB,EACpB,KAAwB,EACxB,MAAyB,EAAA;AAEzB,IAAA,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,CAAA;AAC1C,IAAA,IAAI,CAAC,MAAM;QAAE,OAAM;;;AAInB,IAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;;QAEnB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACxF,QAAA,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,YAAY,EAAE;;YAEjD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,IAAG;AACpC,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,KAAsB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAkB,KAAK,WAAW,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC/H,OAAO,uBAAuB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAkB,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,UAAU,CAAA;AACzG,aAAC,CAAC,CAAA;AACH,SAAA;AACH,KAAC,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,YAAY,CAC1B,WAAuB,EACvB,UAAsE,EACtE,gBAAoC,EACpC,oBAAwC,EAAA;AAExC,IAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAA,IAAkB,CAAE,CAAA,CAAC,CAAA;IAC7D,IAAI,SAAS,CAAC,KAAK,EAAE;QAAE,OAAM;IAE7B,MAAM,gBAAgB,GAAG,EAAE,CAAA;IAC3B,MAAM,eAAe,GAAG,GAAG,CAAA;IAC3B,MAAM,WAAW,GAAG,EAAE,CAAA;AACtB,IAAA,IAAI,GAAuD,CAAA;IAE3D,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QACtB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;QACpD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;AAC7C,QAAA,MAAM,CAAC,GAAG,QAAQ,GAAG,WAAW,GAAG,gBAAgB,CAAA;;AAEnD,QAAA,MAAM,MAAM,GAAG,EAAE,CAAA;AAEjB,QAAA,MAAM,MAAM,GAAG;YACb,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe;AACrC,YAAA,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,eAAe;YAC9C,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe;AACrC,YAAA,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,eAAe;SAC/C,CAAA;QAED,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACE,MAAM,CACV,CAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;AAAE,gBAAA,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;AAC1C,YAAA,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;AAAE,gBAAA,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;AAC1C,YAAA,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;AAAE,gBAAA,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;AAC1C,YAAA,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;AAAE,gBAAA,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;AAC3C,SAAA;AACH,KAAC,CAAC,CAAA;AAEF,IAAA,WAAW,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAA;AACvB,IAAA,WAAW,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAA;IACvB,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAA;IACpC,WAAW,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAA;AACrC,IAAA,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE;SACrC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5F,SAAA,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAClB,CAAC;AAEe,SAAA,gBAAgB,CAC9B,WAAuB,EACvB,UAAsE,EAAA;AAEtE,IAAA,WAAW,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;SAEe,mBAAmB,CACjC,cAA0E,EAC1E,MAAoB,EACpB,MAAyB,EAAA;AAEzB,IAAA,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,CAAA;AAC1C,IAAA,IAAI,CAAC,MAAM;QAAE,OAAM;AAEnB,IAAA,MAAM,CAAC,OAAO,CAAC,WAAW,IAAG;QAC3B,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,IAAG;AAC9C,YAAA,OAAO,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAChG,SAAC,CAAC,CAAA;AACF,QAAA,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;AAC7E,KAAC,CAAC,CAAA;AACJ,CAAC;SAEe,mBAAmB,CACjC,cAA0E,EAC1E,MAAoB,EACpB,MAAyB,EAAA;AAEzB,IAAA,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,CAAA;AAC1C,IAAA,IAAI,CAAC,MAAM;QAAE,OAAM;AAEnB,IAAA,MAAM,CAAC,OAAO,CAAC,WAAW,IAAG;QAC3B,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,IAAG;AAC9C,YAAA,OAAO,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAChG,SAAC,CAAC,CAAA;AACF,QAAA,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;AAC3C,KAAC,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,kBAAkB,CAAsD,MAAoB,EAAA;AAC1G,IAAA,OAAO,CAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,MAAM,IAAG,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAA,EAAA,CAAC,CAAC,GAAG,CAAC,CAAA;AACpF,CAAC;AAEK,SAAU,0BAA0B,CAAsD,KAAiB,EAAA;;AAC/G,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAC1B,MAAM,EAAE,GAAG,CAAC,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,eAAe,IAAI,oBAAoB,IAAI,KAAK,CAAC,aAAa,GAAG,yBAAyB,GAAG,CAAC,CAAC,CAAA;IAC5H,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,MAAM;AAC/C,UAAE,KAAK,CAAC,OAAO,GAAG,EAAE;UAClB,CAAC,EAAE,CAAA;AAEP,IAAA,OAAO,CAAa,UAAA,EAAA,CAAC,CAAK,EAAA,EAAA,CAAC,GAAG,CAAA;AAChC;;;;"}
@@ -4,7 +4,7 @@ import { ResizeObserver } from '@juggle/resize-observer';
4
4
  import { ComponentCore } from '../../core/component/index.js';
5
5
  import { MapDataModel } from '../../data-models/map.js';
6
6
  import { ComponentType } from '../../types/component.js';
7
- import { isString, getNumber, isNil, getString, find, clamp } from '../../utils/data.js';
7
+ import { isString, getNumber, isNil, getString, clamp } from '../../utils/data.js';
8
8
  import { constraintMapViewThrottled } from './renderer/mapboxgl-utils.js';
9
9
  import { LeafletMapRenderer } from './types.js';
10
10
  import { LeafletMapConfig } from './config.js';
@@ -417,7 +417,7 @@ class LeafletMap extends ComponentCore {
417
417
  return;
418
418
  const externallySelectedPointId = getString(this._externallySelectedPoint.properties, config.pointId);
419
419
  const pointData = this._getPointData();
420
- const foundPoint = find(pointData, d => getString(d.properties, config.pointId) === externallySelectedPointId);
420
+ const foundPoint = pointData.find(d => getString(d.properties, config.pointId) === externallySelectedPointId);
421
421
  if (foundPoint) {
422
422
  this._zoomingToExternallySelectedPoint = false;
423
423
  this._currentZoomLevel = null;