@unovis/ts 1.5.1-exf.2 → 1.5.1-exf.3

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.
@@ -2,6 +2,7 @@ import { D3BrushEvent } from 'd3-brush';
2
2
  import { D3DragEvent } from 'd3-drag';
3
3
  import { D3ZoomEvent, ZoomTransform } from 'd3-zoom';
4
4
  import { Selection } from 'd3-selection';
5
+ import type { GraphDataModel } from "../../data-models/graph";
5
6
  import { ComponentConfigInterface } from "../../core/component/config";
6
7
  import { TrimMode } from "../../types/text";
7
8
  import { GraphInputLink, GraphInputNode, GraphInputData } from "../../types/graph";
@@ -214,6 +215,6 @@ export interface GraphConfigInterface<N extends GraphInputNode, L extends GraphI
214
215
  * update behavior when your data has a complex nested structure.
215
216
  * By default the `isEqual` function from Unovis will be used to do the comparison.
216
217
  */
217
- shouldDataUpdate?: (prevData: GraphInputData<N, L>, nextData: GraphInputData<N, L>) => boolean;
218
+ shouldDataUpdate?: (prevData: GraphInputData<N, L>, nextData: GraphInputData<N, L>, datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>) => boolean;
218
219
  }
219
220
  export declare const GraphDefaultConfig: GraphConfigInterface<GraphInputNode, GraphInputLink>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/components/graph/config.ts"],"sourcesContent":["import { D3BrushEvent } from 'd3-brush'\nimport { D3DragEvent } from 'd3-drag'\nimport { D3ZoomEvent, ZoomTransform } from 'd3-zoom'\nimport { Selection } from 'd3-selection'\n\n// Utils\nimport { isEqual } from 'utils/data'\n\n// Config\nimport { ComponentConfigInterface, ComponentDefaultConfig } from 'core/component/config'\n\n// Types\nimport { TrimMode } from 'types/text'\nimport { GraphInputLink, GraphInputNode, GraphInputData } from 'types/graph'\nimport { BooleanAccessor, ColorAccessor, NumericAccessor, StringAccessor, GenericAccessor } from 'types/accessor'\n\n// Local Types\nimport {\n GraphLayoutType,\n GraphCircleLabel,\n GraphLinkStyle,\n GraphLinkArrowStyle,\n GraphPanelConfig,\n GraphForceLayoutSettings,\n GraphElkLayoutSettings,\n GraphNodeShape,\n GraphDagreLayoutSetting,\n GraphNode,\n GraphLink,\n GraphNodeSelectionHighlightMode,\n} from './types'\n\n\nexport interface GraphConfigInterface<N extends GraphInputNode, L extends GraphInputLink> extends ComponentConfigInterface {\n // Zoom and drag\n /** Zoom level constraints. Default: [0.35, 1.25] */\n zoomScaleExtent?: [number, number];\n /** Disable zooming. Default: `false` */\n disableZoom?: boolean;\n /** Custom Zoom event filter to better control which actions should trigger zooming.\n * Learn more: https://d3js.org/d3-zoom#zoom_filter.\n * Default: `undefined` */\n zoomEventFilter?: (event: PointerEvent) => boolean;\n /** Disable node dragging. Default: `false` */\n disableDrag?: boolean;\n /** Disable brush for multiple node selection. Default: `false` */\n disableBrush?: boolean;\n /** Interval to re-render the graph when zooming. Default: `100` */\n zoomThrottledUpdateNodeThreshold?: number;\n\n // Layout general settings\n /** Type of the graph layout. Default: `GraphLayoutType.Force` */\n layoutType?: GraphLayoutType | string;\n /** Fit the graph to container on data or config updates, or on container resize. Default: `true` */\n layoutAutofit?: boolean;\n /** Tolerance constant defining whether the graph should be fitted to container\n * (on data or config update, or container resize) after a zoom / pan interaction or not.\n * `0` — Stop fitting after any pan or zoom\n * `Number.POSITIVE_INFINITY` — Always fit\n * Default: `8.0` */\n layoutAutofitTolerance?: number;\n /** Place non-connected nodes at the bottom of the graph. Default: `false` */\n layoutNonConnectedAside?: boolean;\n\n // Settings for Parallel and Concentric layouts\n /** Node group accessor function.\n * Only for `GraphLayoutType.Parallel`, `GraphLayoutType.ParallelHorizontal` and `GraphLayoutType.Concentric` layouts.\n * Default: `node => node.group` */\n layoutNodeGroup?: StringAccessor<N>;\n /** Order of the layout groups.\n * Only for `GraphLayoutType.Parallel`, `GraphLayoutType.ParallelHorizontal` and `GraphLayoutType.Concentric` layouts.\n * Default: `[]` */\n layoutGroupOrder?: string[];\n\n // Setting for Parallel layouts only\n /** Sets the number of nodes in a sub-group after which they'll continue on the next column (or row if `layoutType` is\n * `GraphLayoutType.ParallelHorizontal`).\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `6` */\n layoutParallelNodesPerColumn?: number;\n /** Node sub-group accessor function.\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `node => node.subgroup` */\n layoutParallelNodeSubGroup?: StringAccessor<N>;\n /** Number of sub-groups per row (or column if `layoutType` is `GraphLayoutType.ParallelHorizontal`) in a group.\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `1` */\n layoutParallelSubGroupsPerRow?: number;\n /** Spacing between groups.\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `undefined` */\n layoutParallelGroupSpacing?: number;\n /** Set a group by name to have priority in sorting the graph links.\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `undefined` */\n layoutParallelSortConnectionsByGroup?: string;\n\n // Force layout\n /** Force Layout settings, see the `d3-force` package for more details */\n forceLayoutSettings?: GraphForceLayoutSettings<N, L>;\n\n // Dagre layout\n /** Darge Layout settings, see the `dagrejs` package\n * for more details: https://github.com/dagrejs/dagre/wiki#configuring-the-layout\n */\n dagreLayoutSettings?: GraphDagreLayoutSetting;\n\n // ELK layout\n /** ELK layout options, see the `elkjs` package for more details: https://github.com/kieler/elkjs.\n * If you want to specify custom layout option for each node group, you can provide an accessor function that\n * receives group name ('root' for the top-level configuration) as the first argument and returns an object containing\n * layout options. Default: `undefined`\n */\n layoutElkSettings?: GenericAccessor<GraphElkLayoutSettings, string> | undefined;\n /** Array of accessor functions to define nested node groups for the ELK Layered layout.\n * E.g.: `[n => n.group, n => n.subGroup]`.\n * Default: `undefined` */\n layoutElkNodeGroups?: StringAccessor<N>[];\n\n // Links\n /** Link width accessor function ot constant value. Default: `1` */\n linkWidth?: NumericAccessor<L>;\n /** Link style accessor function or constant value. Default: `GraphLinkStyle.Solid` */\n linkStyle?: GenericAccessor<GraphLinkStyle, L>;\n /** Link band width accessor function or constant value. Default: `0` */\n linkBandWidth?: NumericAccessor<L>;\n /** Link arrow accessor function or constant value. Default: `undefined` */\n linkArrow?: GenericAccessor<GraphLinkArrowStyle | string | boolean, L> | undefined;\n /** Link stroke color accessor function or constant value. Default: `undefined` */\n linkStroke?: ColorAccessor<L>;\n /** Link disabled state accessor function or constant value. Default: `false` */\n linkDisabled?: BooleanAccessor<L>;\n /** Link flow animation accessor function or constant value. Default: `false` */\n linkFlow?: BooleanAccessor<L>;\n /** Animation duration of the flow (traffic) circles. Default: `20000` */\n linkFlowAnimDuration?: number;\n /** Size of the moving particles that represent traffic flow. Default: `2` */\n linkFlowParticleSize?: number;\n /** Link label accessor function or constant value. Default: `undefined` */\n linkLabel?: GenericAccessor<GraphCircleLabel | GraphCircleLabel[], L> | undefined;\n /** Shift label along the link center a little bit to avoid overlap with the link arrow. Default: `true` */\n linkLabelShiftFromCenter?: BooleanAccessor<L>;\n /** Spacing between neighboring links. Default: `8` */\n linkNeighborSpacing?: number;\n /** Curvature of the link. Recommended value range: [0:1.5].\n * `0` - straight line,\n * `1` - nice curvature,\n * `1.5` - very curve.\n * Default: `0` */\n linkCurvature?: NumericAccessor<L>;\n /** Highlight links on hover. Default: `true` */\n linkHighlightOnHover?: boolean;\n /** Set selected link by its unique id. Default: `undefined` */\n selectedLinkId?: number | string;\n\n // Nodes\n /** Node size accessor function or constant value. Default: `30` */\n nodeSize?: NumericAccessor<N>;\n /** Node stroke width accessor function or constant value. Default: `3` */\n nodeStrokeWidth?: NumericAccessor<N>;\n /** Node shape accessor function or constant value. Default: `GraphNodeShape.Circle` */\n nodeShape?: GenericAccessor<GraphNodeShape | string, N>;\n /** Node gauge outline accessor function or constant value in the range [0,100]. Default: `0` */\n nodeGaugeValue?: NumericAccessor<N>;\n /** Node gauge outline fill color accessor function or constant value. Default: `undefined` */\n nodeGaugeFill?: ColorAccessor<N>;\n /** Animation duration of the node gauge outline. Default: `1500` */\n nodeGaugeAnimDuration?: number;\n /** Node central icon accessor function or constant value. Default: `node => node.icon` */\n nodeIcon?: StringAccessor<N>;\n /** Node central icon size accessor function or constant value. Default: `undefined` */\n nodeIconSize?: NumericAccessor<N>;\n /** Node label accessor function or constant value. Default: `node => node.label` */\n nodeLabel?: StringAccessor<N>;\n /** Defines whether to trim the node labels or not. Default: `true` */\n nodeLabelTrim?: BooleanAccessor<N>;\n /** Node label trimming mode. Default: `TrimMode.Middle` */\n nodeLabelTrimMode?: GenericAccessor<TrimMode | string, N>;\n /** Node label maximum allowed text length above which the label will be trimmed. Default: `15` */\n nodeLabelTrimLength?: NumericAccessor<N>;\n /** Node sub-label accessor function or constant value: Default: `''` */\n nodeSubLabel?: StringAccessor<N>;\n /** Defines whether to trim the node sub-labels or not. Default: `true` */\n nodeSubLabelTrim?: BooleanAccessor<N>;\n /** Node sub-label trimming mode. Default: `TrimMode.Middle` */\n nodeSubLabelTrimMode?: GenericAccessor<TrimMode | string, N>;\n /** Node sub-label maximum allowed text length above which the label will be trimmed. Default: `15` */\n nodeSubLabelTrimLength?: NumericAccessor<N>;\n /** Node circular side labels accessor function. The function should return an array of GraphCircleLabel objects. Default: `undefined` */\n nodeSideLabels?: GenericAccessor<GraphCircleLabel[], N>;\n /** Node bottom icon accessor function. Default: `undefined` */\n nodeBottomIcon?: StringAccessor<N>;\n /** Node disabled state accessor function or constant value. Default: `false` */\n nodeDisabled?: BooleanAccessor<N>;\n /** Node fill color accessor function or constant value. Default: `node => node.fill` */\n nodeFill?: ColorAccessor<N>;\n /** Node stroke color accessor function or constant value. Default: `node => node.stroke` */\n nodeStroke?: ColorAccessor<N>;\n /** Sorting function to determine node placement. Default: `undefined` */\n nodeSort?: ((a: N, b: N) => number);\n /** Specify the initial position for entering nodes as [x, y]. Default: `undefined` */\n nodeEnterPosition?: GenericAccessor<[number, number], N> | undefined;\n /** Specify the initial scale for entering nodes in the range [0,1]. Default: `0.75` */\n nodeEnterScale?: NumericAccessor<N> | undefined;\n /** Specify the destination position for exiting nodes as [x, y]. Default: `undefined` */\n nodeExitPosition?: GenericAccessor<[number, number], N> | undefined;\n /** Specify the destination scale for exiting nodes in the range [0,1]. Default: `0.75` */\n nodeExitScale?: NumericAccessor<N> | undefined;\n /** Custom \"enter\" function for node rendering. Default: `undefined` */\n nodeEnterCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, duration: number, zoomLevel: number) => void;\n /** Custom \"update\" function for node rendering. Default: `undefined` */\n nodeUpdateCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, duration: number, zoomLevel: number) => void;\n /** Custom partial \"update\" function for node rendering which will be triggered after the following events:\n * - Full node update (`nodeUpdateCustomRenderFunction`);\n * - Background click;\n * - Node and Link mouseover and mouseout;\n * - Node brushing,\n * Default: `undefined` */\n nodePartialUpdateCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, duration: number, zoomLevel: number) => void;\n /** Custom \"exit\" function for node rendering. Default: `undefined` */\n nodeExitCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, duration: number, zoomLevel: number) => void;\n /** Custom render function that will be called while zooming / panning the graph. Default: `undefined` */\n nodeOnZoomCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, zoomLevel: number) => void;\n /** Define the mode for highlighting selected nodes in the graph. Default: `GraphNodeSelectionHighlightMode.GreyoutNonConnected` */\n nodeSelectionHighlightMode?: GraphNodeSelectionHighlightMode;\n /** Set selected node by unique id. Default: `undefined` */\n selectedNodeId?: number | string;\n /** Set selected nodes by unique id. Default: `undefined` */\n selectedNodeIds?: number[] | string[];\n\n /** Panels configuration. An array of `GraphPanelConfig` objects. Default: `[]` */\n panels?: GraphPanelConfig[] | undefined;\n\n // Events\n /** Graph node drag start callback function. Default: `undefined` */\n onNodeDragStart?: (n: GraphNode<N, L>, event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>) => void | undefined;\n /** Graph node drag callback function. Default: `undefined` */\n onNodeDrag?: (n: GraphNode<N, L>, event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>) => void | undefined;\n /** Graph node drag end callback function. Default: `undefined` */\n onNodeDragEnd?: (n: GraphNode<N, L>, event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>) => void | undefined;\n /** Zoom event callback. Default: `undefined` */\n onZoom?: (zoomScale: number, zoomScaleExtent: [number, number], event: D3ZoomEvent<SVGGElement, unknown> | undefined, transform: ZoomTransform) => void;\n /** Zoom start event callback. Default: `undefined` */\n onZoomStart?: (zoomScale: number, zoomScaleExtent: [number, number], event: D3ZoomEvent<SVGGElement, unknown> | undefined, transform: ZoomTransform) => void;\n /** Zoom end event callback. Default: `undefined` */\n onZoomEnd?: (zoomScale: number, zoomScaleExtent: [number, number], event: D3ZoomEvent<SVGGElement, unknown> | undefined, transform: ZoomTransform) => void;\n /** Callback function to be called when the graph layout is calculated. Default: `undefined` */\n onLayoutCalculated?: (nodes: GraphNode<N, L>[], links: GraphLink<N, L>[]) => void;\n /** Graph node selection brush callback function. Default: `undefined` */\n onNodeSelectionBrush?: (selectedNodes: GraphNode<N, L>[], event: D3BrushEvent<SVGGElement> | undefined) => void;\n /** Graph multiple node drag callback function. Default: `undefined` */\n onNodeSelectionDrag?: (selectedNodes: GraphNode<N, L>[], event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>) => void;\n /** Callback function to be called when the graph rendering is complete. Default: `undefined` */\n onRenderComplete?: (\n g: Selection<SVGGElement, unknown, null, undefined>,\n nodes: GraphNode<N, L>[],\n links: GraphLink<N, L>[],\n config: GraphConfigInterface<N, L>,\n duration: number,\n zoomLevel: number,\n width: number,\n height: number\n ) => void;\n\n /** Determines whether the component should update when new data is provided.\n * This function takes the previous and new data as parameters and returns a boolean\n * indicating whether the update should proceed. Useful for fine-grained control over\n * update behavior when your data has a complex nested structure.\n * By default the `isEqual` function from Unovis will be used to do the comparison.\n */\n shouldDataUpdate?: (prevData: GraphInputData<N, L>, nextData: GraphInputData<N, L>) => boolean;\n}\n\nexport const GraphDefaultConfig: GraphConfigInterface<GraphInputNode, GraphInputLink> = {\n ...ComponentDefaultConfig,\n duration: 1000,\n zoomScaleExtent: [0.35, 1.25],\n disableZoom: false,\n zoomEventFilter: undefined,\n disableDrag: false,\n disableBrush: false,\n zoomThrottledUpdateNodeThreshold: 100,\n layoutType: GraphLayoutType.Force,\n layoutAutofit: true,\n layoutAutofitTolerance: 8.0,\n layoutNonConnectedAside: false,\n\n layoutGroupOrder: [],\n layoutParallelSubGroupsPerRow: 1,\n layoutParallelNodesPerColumn: 6,\n layoutParallelGroupSpacing: undefined,\n layoutParallelSortConnectionsByGroup: undefined,\n layoutNodeGroup: (n: GraphInputNode): string => (n as { group: string }).group,\n layoutParallelNodeSubGroup: (n: GraphInputNode): string => (n as { subgroup: string }).subgroup,\n\n forceLayoutSettings: {\n linkDistance: 60,\n linkStrength: 0.45,\n charge: -500,\n forceXStrength: 0.15,\n forceYStrength: 0.25,\n numIterations: undefined,\n fixNodePositionAfterSimulation: false,\n },\n\n dagreLayoutSettings: {\n rankdir: 'BT',\n ranker: 'longest-path',\n },\n\n layoutElkSettings: undefined,\n layoutElkNodeGroups: undefined,\n\n linkFlowAnimDuration: 20000,\n linkFlowParticleSize: 2,\n linkWidth: 1,\n linkStyle: GraphLinkStyle.Solid,\n linkBandWidth: 0,\n linkArrow: undefined,\n linkStroke: undefined,\n linkFlow: false,\n linkLabel: undefined,\n linkLabelShiftFromCenter: true,\n linkNeighborSpacing: 8,\n linkDisabled: false,\n linkCurvature: 0,\n linkHighlightOnHover: true,\n selectedLinkId: undefined,\n nodeGaugeAnimDuration: 1500,\n\n nodeSize: 30,\n nodeStrokeWidth: 3,\n nodeShape: GraphNodeShape.Circle,\n nodeGaugeValue: 0,\n nodeIcon: (n: GraphInputNode): string => (n as { icon: string }).icon,\n nodeIconSize: undefined,\n nodeLabel: (n: GraphInputNode): string => (n as { label: string }).label,\n nodeLabelTrim: true,\n nodeLabelTrimLength: 15,\n nodeLabelTrimMode: TrimMode.Middle,\n nodeSubLabel: '',\n nodeSubLabelTrim: true,\n nodeSubLabelTrimLength: 15,\n nodeSubLabelTrimMode: TrimMode.Middle,\n nodeSideLabels: undefined,\n nodeBottomIcon: undefined,\n nodeDisabled: false,\n nodeFill: (n: GraphInputNode): string => (n as { fill: string }).fill,\n nodeGaugeFill: undefined,\n nodeStroke: (n: GraphInputNode): string => (n as { stroke: string }).stroke,\n nodeEnterPosition: undefined,\n nodeEnterScale: 0.75,\n nodeExitPosition: undefined,\n nodeExitScale: 0.75,\n nodeSort: undefined,\n nodeSelectionHighlightMode: GraphNodeSelectionHighlightMode.GreyoutNonConnected,\n\n selectedNodeId: undefined,\n selectedNodeIds: undefined,\n\n panels: undefined,\n\n onNodeDragStart: undefined,\n onNodeDrag: undefined,\n onNodeDragEnd: undefined,\n onZoom: undefined,\n onZoomStart: undefined,\n onZoomEnd: undefined,\n onLayoutCalculated: undefined,\n onNodeSelectionBrush: undefined,\n onNodeSelectionDrag: undefined,\n onRenderComplete: undefined,\n\n shouldDataUpdate: (prevData: GraphInputData<GraphInputNode, GraphInputLink>, nextData: GraphInputData<GraphInputNode, GraphInputLink>): boolean => {\n return !isEqual(prevData, nextData)\n },\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/components/graph/config.ts"],"sourcesContent":["import { D3BrushEvent } from 'd3-brush'\nimport { D3DragEvent } from 'd3-drag'\nimport { D3ZoomEvent, ZoomTransform } from 'd3-zoom'\nimport { Selection } from 'd3-selection'\n\n// Core\nimport type { GraphDataModel } from 'data-models/graph'\n\n// Utils\nimport { isEqual } from 'utils/data'\n\n// Config\nimport { ComponentConfigInterface, ComponentDefaultConfig } from 'core/component/config'\n\n// Types\nimport { TrimMode } from 'types/text'\nimport { GraphInputLink, GraphInputNode, GraphInputData } from 'types/graph'\nimport { BooleanAccessor, ColorAccessor, NumericAccessor, StringAccessor, GenericAccessor } from 'types/accessor'\n\n// Local Types\nimport {\n GraphLayoutType,\n GraphCircleLabel,\n GraphLinkStyle,\n GraphLinkArrowStyle,\n GraphPanelConfig,\n GraphForceLayoutSettings,\n GraphElkLayoutSettings,\n GraphNodeShape,\n GraphDagreLayoutSetting,\n GraphNode,\n GraphLink,\n GraphNodeSelectionHighlightMode,\n} from './types'\n\n\nexport interface GraphConfigInterface<N extends GraphInputNode, L extends GraphInputLink> extends ComponentConfigInterface {\n // Zoom and drag\n /** Zoom level constraints. Default: [0.35, 1.25] */\n zoomScaleExtent?: [number, number];\n /** Disable zooming. Default: `false` */\n disableZoom?: boolean;\n /** Custom Zoom event filter to better control which actions should trigger zooming.\n * Learn more: https://d3js.org/d3-zoom#zoom_filter.\n * Default: `undefined` */\n zoomEventFilter?: (event: PointerEvent) => boolean;\n /** Disable node dragging. Default: `false` */\n disableDrag?: boolean;\n /** Disable brush for multiple node selection. Default: `false` */\n disableBrush?: boolean;\n /** Interval to re-render the graph when zooming. Default: `100` */\n zoomThrottledUpdateNodeThreshold?: number;\n\n // Layout general settings\n /** Type of the graph layout. Default: `GraphLayoutType.Force` */\n layoutType?: GraphLayoutType | string;\n /** Fit the graph to container on data or config updates, or on container resize. Default: `true` */\n layoutAutofit?: boolean;\n /** Tolerance constant defining whether the graph should be fitted to container\n * (on data or config update, or container resize) after a zoom / pan interaction or not.\n * `0` — Stop fitting after any pan or zoom\n * `Number.POSITIVE_INFINITY` — Always fit\n * Default: `8.0` */\n layoutAutofitTolerance?: number;\n /** Place non-connected nodes at the bottom of the graph. Default: `false` */\n layoutNonConnectedAside?: boolean;\n\n // Settings for Parallel and Concentric layouts\n /** Node group accessor function.\n * Only for `GraphLayoutType.Parallel`, `GraphLayoutType.ParallelHorizontal` and `GraphLayoutType.Concentric` layouts.\n * Default: `node => node.group` */\n layoutNodeGroup?: StringAccessor<N>;\n /** Order of the layout groups.\n * Only for `GraphLayoutType.Parallel`, `GraphLayoutType.ParallelHorizontal` and `GraphLayoutType.Concentric` layouts.\n * Default: `[]` */\n layoutGroupOrder?: string[];\n\n // Setting for Parallel layouts only\n /** Sets the number of nodes in a sub-group after which they'll continue on the next column (or row if `layoutType` is\n * `GraphLayoutType.ParallelHorizontal`).\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `6` */\n layoutParallelNodesPerColumn?: number;\n /** Node sub-group accessor function.\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `node => node.subgroup` */\n layoutParallelNodeSubGroup?: StringAccessor<N>;\n /** Number of sub-groups per row (or column if `layoutType` is `GraphLayoutType.ParallelHorizontal`) in a group.\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `1` */\n layoutParallelSubGroupsPerRow?: number;\n /** Spacing between groups.\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `undefined` */\n layoutParallelGroupSpacing?: number;\n /** Set a group by name to have priority in sorting the graph links.\n * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.\n * Default: `undefined` */\n layoutParallelSortConnectionsByGroup?: string;\n\n // Force layout\n /** Force Layout settings, see the `d3-force` package for more details */\n forceLayoutSettings?: GraphForceLayoutSettings<N, L>;\n\n // Dagre layout\n /** Darge Layout settings, see the `dagrejs` package\n * for more details: https://github.com/dagrejs/dagre/wiki#configuring-the-layout\n */\n dagreLayoutSettings?: GraphDagreLayoutSetting;\n\n // ELK layout\n /** ELK layout options, see the `elkjs` package for more details: https://github.com/kieler/elkjs.\n * If you want to specify custom layout option for each node group, you can provide an accessor function that\n * receives group name ('root' for the top-level configuration) as the first argument and returns an object containing\n * layout options. Default: `undefined`\n */\n layoutElkSettings?: GenericAccessor<GraphElkLayoutSettings, string> | undefined;\n /** Array of accessor functions to define nested node groups for the ELK Layered layout.\n * E.g.: `[n => n.group, n => n.subGroup]`.\n * Default: `undefined` */\n layoutElkNodeGroups?: StringAccessor<N>[];\n\n // Links\n /** Link width accessor function ot constant value. Default: `1` */\n linkWidth?: NumericAccessor<L>;\n /** Link style accessor function or constant value. Default: `GraphLinkStyle.Solid` */\n linkStyle?: GenericAccessor<GraphLinkStyle, L>;\n /** Link band width accessor function or constant value. Default: `0` */\n linkBandWidth?: NumericAccessor<L>;\n /** Link arrow accessor function or constant value. Default: `undefined` */\n linkArrow?: GenericAccessor<GraphLinkArrowStyle | string | boolean, L> | undefined;\n /** Link stroke color accessor function or constant value. Default: `undefined` */\n linkStroke?: ColorAccessor<L>;\n /** Link disabled state accessor function or constant value. Default: `false` */\n linkDisabled?: BooleanAccessor<L>;\n /** Link flow animation accessor function or constant value. Default: `false` */\n linkFlow?: BooleanAccessor<L>;\n /** Animation duration of the flow (traffic) circles. Default: `20000` */\n linkFlowAnimDuration?: number;\n /** Size of the moving particles that represent traffic flow. Default: `2` */\n linkFlowParticleSize?: number;\n /** Link label accessor function or constant value. Default: `undefined` */\n linkLabel?: GenericAccessor<GraphCircleLabel | GraphCircleLabel[], L> | undefined;\n /** Shift label along the link center a little bit to avoid overlap with the link arrow. Default: `true` */\n linkLabelShiftFromCenter?: BooleanAccessor<L>;\n /** Spacing between neighboring links. Default: `8` */\n linkNeighborSpacing?: number;\n /** Curvature of the link. Recommended value range: [0:1.5].\n * `0` - straight line,\n * `1` - nice curvature,\n * `1.5` - very curve.\n * Default: `0` */\n linkCurvature?: NumericAccessor<L>;\n /** Highlight links on hover. Default: `true` */\n linkHighlightOnHover?: boolean;\n /** Set selected link by its unique id. Default: `undefined` */\n selectedLinkId?: number | string;\n\n // Nodes\n /** Node size accessor function or constant value. Default: `30` */\n nodeSize?: NumericAccessor<N>;\n /** Node stroke width accessor function or constant value. Default: `3` */\n nodeStrokeWidth?: NumericAccessor<N>;\n /** Node shape accessor function or constant value. Default: `GraphNodeShape.Circle` */\n nodeShape?: GenericAccessor<GraphNodeShape | string, N>;\n /** Node gauge outline accessor function or constant value in the range [0,100]. Default: `0` */\n nodeGaugeValue?: NumericAccessor<N>;\n /** Node gauge outline fill color accessor function or constant value. Default: `undefined` */\n nodeGaugeFill?: ColorAccessor<N>;\n /** Animation duration of the node gauge outline. Default: `1500` */\n nodeGaugeAnimDuration?: number;\n /** Node central icon accessor function or constant value. Default: `node => node.icon` */\n nodeIcon?: StringAccessor<N>;\n /** Node central icon size accessor function or constant value. Default: `undefined` */\n nodeIconSize?: NumericAccessor<N>;\n /** Node label accessor function or constant value. Default: `node => node.label` */\n nodeLabel?: StringAccessor<N>;\n /** Defines whether to trim the node labels or not. Default: `true` */\n nodeLabelTrim?: BooleanAccessor<N>;\n /** Node label trimming mode. Default: `TrimMode.Middle` */\n nodeLabelTrimMode?: GenericAccessor<TrimMode | string, N>;\n /** Node label maximum allowed text length above which the label will be trimmed. Default: `15` */\n nodeLabelTrimLength?: NumericAccessor<N>;\n /** Node sub-label accessor function or constant value: Default: `''` */\n nodeSubLabel?: StringAccessor<N>;\n /** Defines whether to trim the node sub-labels or not. Default: `true` */\n nodeSubLabelTrim?: BooleanAccessor<N>;\n /** Node sub-label trimming mode. Default: `TrimMode.Middle` */\n nodeSubLabelTrimMode?: GenericAccessor<TrimMode | string, N>;\n /** Node sub-label maximum allowed text length above which the label will be trimmed. Default: `15` */\n nodeSubLabelTrimLength?: NumericAccessor<N>;\n /** Node circular side labels accessor function. The function should return an array of GraphCircleLabel objects. Default: `undefined` */\n nodeSideLabels?: GenericAccessor<GraphCircleLabel[], N>;\n /** Node bottom icon accessor function. Default: `undefined` */\n nodeBottomIcon?: StringAccessor<N>;\n /** Node disabled state accessor function or constant value. Default: `false` */\n nodeDisabled?: BooleanAccessor<N>;\n /** Node fill color accessor function or constant value. Default: `node => node.fill` */\n nodeFill?: ColorAccessor<N>;\n /** Node stroke color accessor function or constant value. Default: `node => node.stroke` */\n nodeStroke?: ColorAccessor<N>;\n /** Sorting function to determine node placement. Default: `undefined` */\n nodeSort?: ((a: N, b: N) => number);\n /** Specify the initial position for entering nodes as [x, y]. Default: `undefined` */\n nodeEnterPosition?: GenericAccessor<[number, number], N> | undefined;\n /** Specify the initial scale for entering nodes in the range [0,1]. Default: `0.75` */\n nodeEnterScale?: NumericAccessor<N> | undefined;\n /** Specify the destination position for exiting nodes as [x, y]. Default: `undefined` */\n nodeExitPosition?: GenericAccessor<[number, number], N> | undefined;\n /** Specify the destination scale for exiting nodes in the range [0,1]. Default: `0.75` */\n nodeExitScale?: NumericAccessor<N> | undefined;\n /** Custom \"enter\" function for node rendering. Default: `undefined` */\n nodeEnterCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, duration: number, zoomLevel: number) => void;\n /** Custom \"update\" function for node rendering. Default: `undefined` */\n nodeUpdateCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, duration: number, zoomLevel: number) => void;\n /** Custom partial \"update\" function for node rendering which will be triggered after the following events:\n * - Full node update (`nodeUpdateCustomRenderFunction`);\n * - Background click;\n * - Node and Link mouseover and mouseout;\n * - Node brushing,\n * Default: `undefined` */\n nodePartialUpdateCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, duration: number, zoomLevel: number) => void;\n /** Custom \"exit\" function for node rendering. Default: `undefined` */\n nodeExitCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, duration: number, zoomLevel: number) => void;\n /** Custom render function that will be called while zooming / panning the graph. Default: `undefined` */\n nodeOnZoomCustomRenderFunction?:\n (datum: GraphNode<N, L>, nodeGroupElementSelection: Selection<SVGGElement, GraphNode<N, L>, null, unknown>, config: GraphConfigInterface<N, L>, zoomLevel: number) => void;\n /** Define the mode for highlighting selected nodes in the graph. Default: `GraphNodeSelectionHighlightMode.GreyoutNonConnected` */\n nodeSelectionHighlightMode?: GraphNodeSelectionHighlightMode;\n /** Set selected node by unique id. Default: `undefined` */\n selectedNodeId?: number | string;\n /** Set selected nodes by unique id. Default: `undefined` */\n selectedNodeIds?: number[] | string[];\n\n /** Panels configuration. An array of `GraphPanelConfig` objects. Default: `[]` */\n panels?: GraphPanelConfig[] | undefined;\n\n // Events\n /** Graph node drag start callback function. Default: `undefined` */\n onNodeDragStart?: (n: GraphNode<N, L>, event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>) => void | undefined;\n /** Graph node drag callback function. Default: `undefined` */\n onNodeDrag?: (n: GraphNode<N, L>, event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>) => void | undefined;\n /** Graph node drag end callback function. Default: `undefined` */\n onNodeDragEnd?: (n: GraphNode<N, L>, event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>) => void | undefined;\n /** Zoom event callback. Default: `undefined` */\n onZoom?: (zoomScale: number, zoomScaleExtent: [number, number], event: D3ZoomEvent<SVGGElement, unknown> | undefined, transform: ZoomTransform) => void;\n /** Zoom start event callback. Default: `undefined` */\n onZoomStart?: (zoomScale: number, zoomScaleExtent: [number, number], event: D3ZoomEvent<SVGGElement, unknown> | undefined, transform: ZoomTransform) => void;\n /** Zoom end event callback. Default: `undefined` */\n onZoomEnd?: (zoomScale: number, zoomScaleExtent: [number, number], event: D3ZoomEvent<SVGGElement, unknown> | undefined, transform: ZoomTransform) => void;\n /** Callback function to be called when the graph layout is calculated. Default: `undefined` */\n onLayoutCalculated?: (nodes: GraphNode<N, L>[], links: GraphLink<N, L>[]) => void;\n /** Graph node selection brush callback function. Default: `undefined` */\n onNodeSelectionBrush?: (selectedNodes: GraphNode<N, L>[], event: D3BrushEvent<SVGGElement> | undefined) => void;\n /** Graph multiple node drag callback function. Default: `undefined` */\n onNodeSelectionDrag?: (selectedNodes: GraphNode<N, L>[], event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>) => void;\n /** Callback function to be called when the graph rendering is complete. Default: `undefined` */\n onRenderComplete?: (\n g: Selection<SVGGElement, unknown, null, undefined>,\n nodes: GraphNode<N, L>[],\n links: GraphLink<N, L>[],\n config: GraphConfigInterface<N, L>,\n duration: number,\n zoomLevel: number,\n width: number,\n height: number\n ) => void;\n\n /** Determines whether the component should update when new data is provided.\n * This function takes the previous and new data as parameters and returns a boolean\n * indicating whether the update should proceed. Useful for fine-grained control over\n * update behavior when your data has a complex nested structure.\n * By default the `isEqual` function from Unovis will be used to do the comparison.\n */\n shouldDataUpdate?: (\n prevData: GraphInputData<N, L>,\n nextData: GraphInputData<N, L>,\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>\n ) => boolean;\n}\n\nexport const GraphDefaultConfig: GraphConfigInterface<GraphInputNode, GraphInputLink> = {\n ...ComponentDefaultConfig,\n duration: 1000,\n zoomScaleExtent: [0.35, 1.25],\n disableZoom: false,\n zoomEventFilter: undefined,\n disableDrag: false,\n disableBrush: false,\n zoomThrottledUpdateNodeThreshold: 100,\n layoutType: GraphLayoutType.Force,\n layoutAutofit: true,\n layoutAutofitTolerance: 8.0,\n layoutNonConnectedAside: false,\n\n layoutGroupOrder: [],\n layoutParallelSubGroupsPerRow: 1,\n layoutParallelNodesPerColumn: 6,\n layoutParallelGroupSpacing: undefined,\n layoutParallelSortConnectionsByGroup: undefined,\n layoutNodeGroup: (n: GraphInputNode): string => (n as { group: string }).group,\n layoutParallelNodeSubGroup: (n: GraphInputNode): string => (n as { subgroup: string }).subgroup,\n\n forceLayoutSettings: {\n linkDistance: 60,\n linkStrength: 0.45,\n charge: -500,\n forceXStrength: 0.15,\n forceYStrength: 0.25,\n numIterations: undefined,\n fixNodePositionAfterSimulation: false,\n },\n\n dagreLayoutSettings: {\n rankdir: 'BT',\n ranker: 'longest-path',\n },\n\n layoutElkSettings: undefined,\n layoutElkNodeGroups: undefined,\n\n linkFlowAnimDuration: 20000,\n linkFlowParticleSize: 2,\n linkWidth: 1,\n linkStyle: GraphLinkStyle.Solid,\n linkBandWidth: 0,\n linkArrow: undefined,\n linkStroke: undefined,\n linkFlow: false,\n linkLabel: undefined,\n linkLabelShiftFromCenter: true,\n linkNeighborSpacing: 8,\n linkDisabled: false,\n linkCurvature: 0,\n linkHighlightOnHover: true,\n selectedLinkId: undefined,\n nodeGaugeAnimDuration: 1500,\n\n nodeSize: 30,\n nodeStrokeWidth: 3,\n nodeShape: GraphNodeShape.Circle,\n nodeGaugeValue: 0,\n nodeIcon: (n: GraphInputNode): string => (n as { icon: string }).icon,\n nodeIconSize: undefined,\n nodeLabel: (n: GraphInputNode): string => (n as { label: string }).label,\n nodeLabelTrim: true,\n nodeLabelTrimLength: 15,\n nodeLabelTrimMode: TrimMode.Middle,\n nodeSubLabel: '',\n nodeSubLabelTrim: true,\n nodeSubLabelTrimLength: 15,\n nodeSubLabelTrimMode: TrimMode.Middle,\n nodeSideLabels: undefined,\n nodeBottomIcon: undefined,\n nodeDisabled: false,\n nodeFill: (n: GraphInputNode): string => (n as { fill: string }).fill,\n nodeGaugeFill: undefined,\n nodeStroke: (n: GraphInputNode): string => (n as { stroke: string }).stroke,\n nodeEnterPosition: undefined,\n nodeEnterScale: 0.75,\n nodeExitPosition: undefined,\n nodeExitScale: 0.75,\n nodeSort: undefined,\n nodeSelectionHighlightMode: GraphNodeSelectionHighlightMode.GreyoutNonConnected,\n\n selectedNodeId: undefined,\n selectedNodeIds: undefined,\n\n panels: undefined,\n\n onNodeDragStart: undefined,\n onNodeDrag: undefined,\n onNodeDragEnd: undefined,\n onZoom: undefined,\n onZoomStart: undefined,\n onZoomEnd: undefined,\n onLayoutCalculated: undefined,\n onNodeSelectionBrush: undefined,\n onNodeSelectionDrag: undefined,\n onRenderComplete: undefined,\n\n shouldDataUpdate: (prevData: GraphInputData<GraphInputNode, GraphInputLink>, nextData: GraphInputData<GraphInputNode, GraphInputLink>): boolean => {\n return !isEqual(prevData, nextData)\n },\n}\n"],"names":[],"mappings":"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"}
@@ -138,4 +138,6 @@ export declare class Graph<N extends GraphInputNode, L extends GraphInputLink> e
138
138
  x: number;
139
139
  y: number;
140
140
  } | undefined;
141
+ /** Set the node state by id */
142
+ setNodeStateById(nodeId: string, state: GraphNode<N, L>['_state']): void;
141
143
  }
@@ -82,7 +82,7 @@ class Graph extends ComponentCore {
82
82
  }
83
83
  setData(data) {
84
84
  const { config } = this;
85
- if (!config.shouldDataUpdate(this.datamodel.data, data))
85
+ if (!config.shouldDataUpdate(this.datamodel.data, data, this.datamodel))
86
86
  return;
87
87
  this.datamodel.nodeSort = config.nodeSort;
88
88
  this.datamodel.data = data;
@@ -178,7 +178,7 @@ class Graph extends ComponentCore {
178
178
  this._resetSelectionGreyoutState();
179
179
  if (this.config.selectedNodeId || this.config.selectedNodeIds) {
180
180
  const selectedIds = (_a = this.config.selectedNodeIds) !== null && _a !== void 0 ? _a : [this.config.selectedNodeId];
181
- const selectedNodes = selectedIds.map(id => datamodel.getNodeFromId(id));
181
+ const selectedNodes = selectedIds.map(id => datamodel.getNodeById(id));
182
182
  this._setNodeSelectionState(selectedNodes);
183
183
  }
184
184
  if (this.config.selectedLinkId) {
@@ -805,6 +805,11 @@ class Graph extends ComponentCore {
805
805
  };
806
806
  }
807
807
  }
808
+ /** Set the node state by id */
809
+ setNodeStateById(nodeId, state) {
810
+ this.datamodel.setNodeStateById(nodeId, state);
811
+ this._updateNodesLinksPartial();
812
+ }
808
813
  }
809
814
  Graph.selectors = {
810
815
  root: root,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/graph/index.ts"],"sourcesContent":["import { min, max } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport { select, Selection, pointer } from 'd3-selection'\nimport { brush, BrushBehavior, D3BrushEvent } from 'd3-brush'\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, GraphInputData } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\n// Utils\nimport { isNumber, clamp, shallowDiff, isFunction, getBoolean, isPlainObject, isEqual } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphLayoutType, GraphLinkArrowStyle, GraphPanel, GraphNodeSelectionHighlightMode } from './types'\n\n// Config\nimport { GraphDefaultConfig, 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, updateNodesPartial } from './modules/node'\nimport { getMaxNodeSize, getNodeSize, getX, getY } from './modules/node/helper'\nimport { createLinks, updateLinks, removeLinks, zoomLinksThrottled, zoomLinks, animateLinkFlow, updateLinksPartial } from './modules/link'\nimport { getDoubleArrowPath, getArrowPath } from './modules/link/helper'\nimport { createPanels, updatePanels, removePanels } from './modules/panel'\nimport { setPanelForNodes, updatePanelBBoxSize, updatePanelNumNodes, initPanels } from './modules/panel/helper'\nimport { applyLayoutCircular, applyLayoutParallel, applyLayoutDagre, applyLayoutConcentric, applyLayoutForce, applyELKLayout } from './modules/layout'\n\nexport class Graph<\n N extends GraphInputNode,\n L extends GraphInputLink,\n> extends ComponentCore<\n GraphInputData<N, L>,\n GraphConfigInterface<N, L>\n > {\n static selectors = {\n root: generalSelectors.root,\n graphGroup: generalSelectors.graphGroup,\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 dimmedNode: nodeSelectors.greyedOutNode,\n link: linkSelectors.gLink,\n linkLine: linkSelectors.link,\n linkLabel: linkSelectors.linkLabelGroup,\n dimmedLink: linkSelectors.greyedOutLink,\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 protected _defaultConfig = GraphDefaultConfig as unknown as GraphConfigInterface<N, L>\n public config: GraphConfigInterface<N, L> = this._defaultConfig\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>> = new GraphDataModel()\n private _selectedNodes: GraphNode<N, L>[]\n private _selectedLink: GraphLink<N, L>\n\n private _graphGroup: Selection<SVGGElement, unknown, null, undefined>\n private _panelsGroup: Selection<SVGGElement, unknown, null, undefined>\n private _linksGroup: Selection<SVGGElement, unknown, null, undefined>\n private _nodesGroup: Selection<SVGGElement, unknown, null, undefined>\n private _brush: Selection<SVGGElement, unknown, null, unknown>\n private _timer: Timer\n\n private _isFirstRender = true\n private _prevWidth: number\n private _prevHeight: number\n private _shouldRecalculateLayout = false\n private _currentLayoutType: GraphLayoutType | undefined\n private _layoutCalculationPromise: Promise<void> | undefined\n\n private _shouldFitLayout: boolean\n private _shouldSetPanels = 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 _isAutoFitDisabled = false\n private _scale: number\n private _initialTransform: ZoomTransform\n private _isDragging = false\n private _brushBehavior: BrushBehavior<unknown>\n private _groupDragInit: [number, number]\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, L> {\n return this._selectedNodes?.[0]\n }\n\n public get selectedNodes (): GraphNode<N, L>[] {\n return this._selectedNodes\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.setConfig(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 this._brush = this.g.append('g').attr('class', generalSelectors.brush)\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 .on('start', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoomStart(e.transform, e))\n .on('end', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoomEnd(e.transform, e))\n\n this._brushBehavior = brush()\n .on('start brush end', this._onBrush.bind(this))\n .filter(event => event.shiftKey)\n .keyModifiers(false)\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 this._getLinkArrowDefId = this._getLinkArrowDefId.bind(this)\n }\n\n setData (data: GraphInputData<N, L>): void {\n const { config } = this\n if (!config.shouldDataUpdate(this.datamodel.data, data)) return\n\n this.datamodel.nodeSort = config.nodeSort\n this.datamodel.data = data\n this._shouldRecalculateLayout = true\n if (config.layoutAutofit) this._shouldFitLayout = true\n this._shouldSetPanels = true\n\n this._addSVGDefs()\n }\n\n setConfig (config: GraphConfigInterface<N, L>): void {\n super.setConfig(config)\n const hasLayoutConfigurationChanged = this._shouldLayoutRecalculate()\n\n // If the data has changed (see above in `setData`) or the layout configuration has changed, we need to recalculate the layout\n this._shouldRecalculateLayout = this._shouldRecalculateLayout || hasLayoutConfigurationChanged\n\n // If the `config.layoutAutofit` is true and data has changed (see above in `setData`),\n // or the layout configuration has changed, we need to fit the layout\n this._shouldFitLayout = this._shouldFitLayout || hasLayoutConfigurationChanged\n\n if (this._shouldFitLayout) this._isAutoFitDisabled = false\n this._shouldSetPanels = true\n }\n\n get bleed (): Spacing {\n const extraPadding = 50 // Extra padding to take into account labels and selection outlines\n return { top: extraPadding, bottom: extraPadding, left: extraPadding, right: extraPadding }\n }\n\n _render (customDuration?: number): void {\n const { config: { disableBrush, disableZoom, duration, layoutAutofit, zoomEventFilter }, 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._shouldFitLayout = true\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n // Handle brush behavior\n if (!disableBrush) {\n this._brushBehavior.extent([[0, 0], [this._width, this._height]])\n this._brush.call(this._brushBehavior)\n\n // Activate the brush when the shift key is pressed\n select(window)\n .on('keydown.unovis-graph', e => e.key === 'Shift' && this._activateBrush())\n .on('keyup.unovis-graph', e => e.key === 'Shift' && this._clearBrush())\n\n this._zoomBehavior.filter(event => !event.shiftKey)\n } else {\n this._brush.on('.brush', null)\n\n select(window)\n .on('keydown.unovis-graph', null)\n .on('keyup.unovis-graph', null)\n\n // Clear brush in case it was disabled in an active state\n if (this._brush.classed('active')) this._clearBrush()\n }\n\n // Apply layout and render\n if (this._shouldRecalculateLayout || !this._layoutCalculationPromise) {\n this._layoutCalculationPromise = this._calculateLayout()\n\n // Call `onLayoutCalculated` after the layout calculation is done and the `this._layoutCalculationPromise`\n // variable is set because the `fitView` function relies on the promise to be initialized\n this._layoutCalculationPromise.then(() => {\n this.config.onLayoutCalculated?.(datamodel.nodes, datamodel.links)\n })\n }\n\n // Redefining Zoom Behavior filter to the one specified in the config,\n // or to the default one supporting `shiftKey` for node brushing\n // See more: https://d3js.org/d3-zoom#zoom_filter\n this._zoomBehavior.filter(\n isFunction(zoomEventFilter)\n ? zoomEventFilter\n : (e: PointerEvent) => (!e.ctrlKey || e.type === 'wheel') && !e.button && !e.shiftKey) // Default filter\n\n this._layoutCalculationPromise.then(() => {\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 this._initPanelsData()\n\n // Fit the view\n if (this._isFirstRender) {\n this._fit()\n this._shouldFitLayout = false\n } else if (this._shouldFitLayout && !this._isAutoFitDisabled) {\n this._fit(duration)\n this._shouldFitLayout = false\n }\n\n // Update Nodes and Links Selection State\n this._resetSelectionGreyoutState()\n if (this.config.selectedNodeId || this.config.selectedNodeIds) {\n const selectedIds = this.config.selectedNodeIds ?? [this.config.selectedNodeId]\n const selectedNodes = selectedIds.map(id => datamodel.getNodeFromId(id))\n this._setNodeSelectionState(selectedNodes)\n }\n\n if (this.config.selectedLinkId) {\n const selectedLink = datamodel.links.find(link => link.id === this.config.selectedLinkId)\n this._setLinkSelectionState(selectedLink)\n }\n\n // Draw\n this._drawNodes(animDuration)\n this._drawLinks(animDuration)\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 // 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 // On render complete callback\n this.config.onRenderComplete?.(this.g, datamodel.nodes, datamodel.links, this.config, animDuration, this._scale, this._containerWidth, this._containerHeight)\n this._isFirstRender = false\n })\n }\n\n private _drawNodes (duration: number): void {\n const { config, datamodel } = this\n\n const nodes: GraphNode<N, L>[] = datamodel.nodes\n const nodeGroups = this._nodesGroup\n .selectAll<SVGGElement, GraphNode<N, L>>(`.${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, this._scale)\n\n const nodeGroupsMerged = nodeGroups.merge(nodeGroupsEnter)\n const nodeUpdateSelection = updateNodes(nodeGroupsMerged, config, duration, this._scale)\n\n this._drawPanels(nodeUpdateSelection, duration)\n\n const nodesGroupExit = nodeGroups.exit<GraphNode<N, L>>()\n nodesGroupExit\n .classed(nodeSelectors.gNodeExit, true)\n .call(removeNodes, config, duration, this._scale)\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, L>>()\n .on('start drag end', function (event, d) {\n thisRef._handleDrag(d, event, select(this))\n })\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, this._getLinkArrowDefId)\n\n const linkGroupsExit = linkGroups.exit<GraphLink<N, L>>()\n linkGroupsExit\n .attr('class', linkSelectors.gLinkExit)\n .call(removeLinks, config, duration)\n }\n\n private _drawPanels (\n nodeUpdateSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n duration: number\n ): void {\n const { config } = this\n smartTransition(this._panelsGroup, duration / 2)\n .style('opacity', config.panels?.length ? 1 : 0)\n\n if (!this._panels) return\n\n const selection = ((nodeUpdateSelection as Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>).duration)\n ? (nodeUpdateSelection as Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>).selection()\n : nodeUpdateSelection as Selection<SVGGElement, GraphNode<N, L>, 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<GraphPanel<N, L>>()\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<void> {\n const { config, datamodel } = this\n\n // If the layout type has changed, we need to reset the node positions if they were fixed before\n if (this._currentLayoutType !== config.layoutType) {\n for (const node of datamodel.nodes) {\n delete node._state.fx\n delete node._state.fy\n }\n }\n\n switch (config.layoutType) {\n case GraphLayoutType.Precalculated:\n break\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.Elk:\n await applyELKLayout(datamodel, config, this._width)\n break\n case GraphLayoutType.Circular:\n default:\n applyLayoutCircular(datamodel, config, this._width, this._height)\n break\n }\n\n // We need to update the panels data right after the layout calculation\n // because we want to have the latest coordinates before calling `onLayoutCalculated`\n this._initPanelsData()\n\n this._shouldRecalculateLayout = false\n this._currentLayoutType = config.layoutType as GraphLayoutType\n }\n\n private _initPanelsData (): void {\n const { config, datamodel } = this\n\n if (this._shouldSetPanels) {\n this._panels = initPanels(config.panels)\n setPanelForNodes(this._panels, datamodel.nodes, this.config)\n this._shouldSetPanels = false\n }\n }\n\n private _fit (duration = 0, nodeIds?: (string | number)[]): void {\n const { datamodel: { nodes } } = this\n const fitViewNodes = nodeIds?.length ? nodes.filter(n => nodeIds.includes(n.id)) : nodes\n const transform = this._getTransform(fitViewNodes)\n smartTransition(this.g, duration)\n .call(this._zoomBehavior.transform, transform)\n this._onZoom(transform)\n }\n\n private _getTransform (nodes: GraphNode<N, L>[]): 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\n const xExtent = [\n min(nodes, d => getX(d) - maxNodeSize / 2 - (max((d._panels || []).map(p => p._padding.left)) || 0)),\n max(nodes, d => getX(d) + maxNodeSize / 2 + (max((d._panels || []).map(p => p._padding.right)) || 0)),\n ]\n const yExtent = [\n min(nodes, d => getY(d) - maxNodeSize / 2 - (max((d._panels || []).map(p => p._padding.top)) || 0)),\n max(nodes, d => getY(d) + maxNodeSize / 2 + (max((d._panels || []).map(p => p._padding.bottom)) || 0)),\n ]\n\n if (xExtent.some(item => item === undefined) || yExtent.some(item => item === undefined)) {\n console.warn('Unovis | Graph: Some of the node coordinates are undefined. This can happen if you try to fit the graph before the layout has been calculated.')\n return zoomIdentity\n }\n\n const xScale = w / (xExtent[1] - xExtent[0] + left + right)\n const yScale = h / (yExtent[1] - yExtent[0] + 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]) / 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\n private _setNodeSelectionState (nodesToSelect: (GraphNode<N, L> | undefined)[]): void {\n const { config, datamodel } = this\n\n // Grey out all nodes and set us unselected\n for (const n of datamodel.nodes) {\n n._state.selected = false\n if (config.nodeSelectionHighlightMode !== GraphNodeSelectionHighlightMode.None) {\n n._state.greyout = true\n }\n }\n\n // Grey out all links and set us unselected\n for (const l of datamodel.links) {\n l._state.selected = false\n if (config.nodeSelectionHighlightMode !== GraphNodeSelectionHighlightMode.None) {\n l._state.greyout = true\n }\n }\n\n // Filter out non-existing nodes\n this._selectedNodes = nodesToSelect.filter(n => {\n const doesNodeExist = Boolean(n)\n if (!doesNodeExist) console.warn('Unovis | Graph: Select Node: Not found')\n\n return doesNodeExist\n })\n\n // Set provided nodes as selected and ungreyout\n for (const n of this._selectedNodes) {\n n._state.selected = true\n n._state.greyout = false\n }\n\n // Highlight connected links and nodes\n if (config.nodeSelectionHighlightMode === GraphNodeSelectionHighlightMode.GreyoutNonConnected) {\n const connectedLinks = datamodel.links.filter(l => this._selectedNodes.includes(l.source) || this._selectedNodes.includes(l.target))\n connectedLinks.forEach(l => {\n l.source._state.greyout = false\n l.target._state.greyout = false\n l._state.greyout = false\n })\n }\n }\n\n private _setLinkSelectionState (link: GraphLink<N, L>): void {\n const { datamodel: { nodes, links } } = this\n if (!link) console.warn('Unovis: Graph: Select Link: Not found')\n\n this._selectedLink = link\n const selectedLinkSource = link?.source as GraphNode<N, L>\n const selectedLinkTarget = link?.target as GraphNode<N, L>\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, L>\n const target = l.target as GraphNode<N, L>\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\n private _resetSelectionGreyoutState (): void {\n const { datamodel: { nodes, links } } = this\n this._selectedNodes = []\n this._selectedLink = undefined\n\n // Disable Greyout\n nodes.forEach(n => {\n delete n._state.selected\n delete n._state.greyout\n })\n\n links.forEach(l => {\n delete l._state.greyout\n delete l._state.selected\n })\n }\n\n private _updateNodesLinksPartial (): void {\n const { config } = this\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n linkElements.call(updateLinksPartial, config, this._scale)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n nodeElements.call(updateNodesPartial, config, config.duration, this._scale)\n }\n\n private _onBackgroundClick (): void {\n this._resetSelectionGreyoutState()\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeClick (d: GraphNode<N, L>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOut (d: GraphNode<N, L>): void {\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOver (d: GraphNode<N, L>): void {\n this._updateNodesLinksPartial()\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 if (this.config.linkHighlightOnHover) d._state.hovered = true\n this._updateNodesLinksPartial()\n }\n\n private _onLinkMouseOut (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n delete d._state.hovered\n this._updateNodesLinksPartial()\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, event, transform)\n\n // console.warn('Unovis | Graph: Zoom: ', transform)\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 propVal = transform[prop as keyof ZoomTransform] as number\n const initialPropVal = this._initialTransform[prop as keyof ZoomTransform] as number\n const dVal = Math.abs(propVal - initialPropVal)\n const scaledDVal = prop === 'k' ? 20 * dVal : dVal / 15\n acc += scaledDVal\n return acc\n }, 0)\n\n if (diff > config.layoutAutofitTolerance) this._isAutoFitDisabled = true\n else this._isAutoFitDisabled = false\n }\n\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .call(\n (nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomNodesThrottled : zoomNodes) as typeof zoomNodes,\n config,\n this._scale\n )\n\n this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .call(\n (nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomLinksThrottled : zoomLinks) as typeof zoomLinks,\n config,\n this._scale,\n this._getLinkArrowDefId\n )\n }\n\n private _onZoomStart (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config } = this\n const transform = t || event.transform\n this._scale = transform.k\n if (isFunction(config.onZoomStart)) config.onZoomStart(this._scale, config.zoomScaleExtent, event, transform)\n }\n\n private _onZoomEnd (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config } = this\n const transform = t || event.transform\n this._scale = transform.k\n if (isFunction(config.onZoomEnd)) config.onZoomEnd(this._scale, config.zoomScaleExtent, event, transform)\n }\n\n private _updateNodePosition (d: GraphNode<N, L>, x: number, y: number): void {\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Prevent the node from being dragged offscreen or outside its panel\n const panels = this._panels?.filter(p => p.nodes.includes(d._id)) ?? []\n const nodeSizeValue = getNodeSize(d, this.config.nodeSize, d._index)\n const maxY = min([(this._height - transform.y) / scale, ...panels.map(p => p._y + p._height)]) - nodeSizeValue / 2\n const maxX = min([(this._width - transform.x) / scale, ...panels.map(p => p._x + p._width)]) - nodeSizeValue / 2\n const minY = max([-transform.y / scale, ...panels.map(p => p._y)]) + nodeSizeValue / 2\n const minX = max([-transform.x / scale, ...panels.map(p => p._x)]) + nodeSizeValue / 2\n\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 // Assign coordinates\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 private _onBrush (event: D3BrushEvent<SVGGElement>): void {\n if (!event.selection || !event.sourceEvent) return\n const { config } = this\n const transform = zoomTransform(this._graphGroup.node())\n const [xMin, yMin] = transform.invert(event.selection[0] as [number, number])\n const [xMax, yMax] = transform.invert(event.selection[1] as [number, number])\n\n // Update brushed nodes\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .each(n => {\n const x = getX(n)\n const y = getY(n)\n n._state.brushed = x >= xMin && x <= xMax && y >= yMin && y <= yMax\n })\n .classed(nodeSelectors.brushed, n => n._state.brushed)\n\n const brushedNodes = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.brushed}`)\n .call(updateNodesPartial, config, 0, this._scale)\n\n this._brush.classed('active', event.type !== 'end')\n config.onNodeSelectionBrush?.(brushedNodes.data(), event)\n }\n\n\n private _handleDrag (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n ): void {\n if (event.sourceEvent.shiftKey && d._state.brushed) {\n this._dragSelectedNodes(event)\n } else if (!event.sourceEvent.shiftKey) {\n switch (event.type) {\n case 'start':\n this._onDragStarted(d, event, nodeSelection)\n break\n case 'drag':\n this._onDragged(d, event)\n break\n case 'end':\n this._onDragEnded(d, event, nodeSelection)\n break\n }\n }\n }\n\n private _onDragStarted (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, 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 config.onNodeDragStart?.(d, event)\n }\n\n private _onDragged (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>\n ): void {\n const { config } = this\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Update node position\n const [x, y] = pointer(event, this._graphGroup.node())\n this._updateNodePosition(d, x, y)\n\n // Update affected DOM elements\n const nodeSelection = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n const nodeToUpdate = nodeSelection.filter((n: GraphNode<N, L>) => n._id === d._id)\n nodeToUpdate.call(updateNodes, config, 0, scale)\n\n const linkSelection = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n const linksToUpdate = linkSelection.filter((l: L) => {\n const source = l.source as GraphNode<N, L>\n const target = l.target as GraphNode<N, L>\n return source._id === d._id || target._id === d._id\n })\n linksToUpdate.call(updateLinks, config, 0, scale, this._getLinkArrowDefId)\n const linksToAnimate = linksToUpdate.filter(d => d._state.greyout)\n if (linksToAnimate.size()) animateLinkFlow(linksToAnimate, config, this._scale)\n\n config.onNodeDrag?.(d, event)\n }\n\n private _onDragEnded (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, 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 config.onNodeDragEnd?.(d, event)\n }\n\n private _dragSelectedNodes (event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>): void {\n const { config } = this\n const curr = pointer(event, this._graphGroup.node())\n\n const selectedNodes = smartTransition(\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.brushed}`)\n ) as Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n\n if (event.type === 'start') {\n this._groupDragInit = curr\n this._isDragging = true\n selectedNodes.each(n => {\n n.x = getX(n)\n n.y = getY(n)\n n._state.isDragged = true\n })\n } else if (event.type === 'drag') {\n const dx = curr[0] - this._groupDragInit[0]\n const dy = curr[1] - this._groupDragInit[1]\n\n selectedNodes.each(n => this._updateNodePosition(n, n.x + dx, n.y + dy))\n\n const connectedLinks = smartTransition(\n this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .filter(l => l.source?._state?.isDragged || l.target?._state?.isDragged)\n ) as Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n\n connectedLinks.call(updateLinks, this.config, 0, this._scale, this._getLinkArrowDefId)\n } else {\n this._isDragging = false\n selectedNodes.each(n => { n._state.isDragged = false })\n }\n selectedNodes.call(updateNodes, config, 0, this._scale)\n this.config.onNodeSelectionDrag?.(selectedNodes.data(), event)\n }\n\n private _activateBrush (): void {\n this._brush.classed('active', true)\n this._nodesGroup.selectAll(`.${nodeSelectors.gNode}`)\n .classed(nodeSelectors.brushable, true)\n }\n\n private _clearBrush (): void {\n this._brush.classed('active', false).call(this._brushBehavior?.clear)\n\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .classed(nodeSelectors.brushable, false)\n .classed(nodeSelectors.brushed, false)\n .each(n => { n._state.brushed = false })\n .call(updateNodesPartial, this.config, 0, this._scale)\n }\n\n private _shouldLayoutRecalculate (): boolean {\n const { prevConfig, config } = this\n if (prevConfig.layoutType !== config.layoutType) return true\n if (prevConfig.layoutNonConnectedAside !== config.layoutNonConnectedAside) return true\n\n if (prevConfig.layoutType === GraphLayoutType.Force) {\n const forceSettingsDiff = shallowDiff(prevConfig.forceLayoutSettings, config.forceLayoutSettings)\n if (Object.keys(forceSettingsDiff).length) return true\n }\n\n if (prevConfig.layoutType === GraphLayoutType.Dagre) {\n const dagreSettingsDiff = shallowDiff(prevConfig.dagreLayoutSettings, config.dagreLayoutSettings)\n if (Object.keys(dagreSettingsDiff).length) return true\n }\n\n if (prevConfig.layoutType === GraphLayoutType.Elk) {\n if (isPlainObject(prevConfig.layoutElkSettings) && isPlainObject(config.layoutElkSettings)) {\n // Do a deeper comparison if `config.layoutElkSettings` is an object\n const elkSettingsDiff = shallowDiff(\n prevConfig.layoutElkSettings as Record<string, string>,\n config.layoutElkSettings as Record<string, string>\n )\n return Boolean(Object.keys(elkSettingsDiff).length)\n } else {\n // Otherwise, do a simple `===` comparison\n return prevConfig.layoutElkSettings !== config.layoutElkSettings\n }\n }\n\n if (\n prevConfig.layoutType === GraphLayoutType.Parallel ||\n prevConfig.layoutType === GraphLayoutType.ParallelHorizontal ||\n prevConfig.layoutType === GraphLayoutType.Concentric\n ) {\n if (!isEqual(prevConfig.layoutGroupOrder, config.layoutGroupOrder)) return true\n if (prevConfig.layoutParallelNodesPerColumn !== config.layoutParallelNodesPerColumn) return true\n if (prevConfig.layoutParallelSortConnectionsByGroup !== config.layoutParallelSortConnectionsByGroup) return true\n }\n\n return false\n }\n\n private _getLinkArrowDefId (arrow: GraphLinkArrowStyle | undefined): string | null {\n return arrow ? `${this.uid}-${arrow}` : null\n }\n\n private _addSVGDefs (): void {\n // Clean up old defs\n this._defs.selectAll('*').remove()\n\n // Single Arrow\n this._defs.append('path').attr('d', getArrowPath())\n .attr('id', this._getLinkArrowDefId(GraphLinkArrowStyle.Single))\n\n // Double Arrow\n this._defs.append('path').attr('d', getDoubleArrowPath())\n .attr('id', this._getLinkArrowDefId(GraphLinkArrowStyle.Double))\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 getZoom (): number {\n return zoomTransform(this.g.node()).k\n }\n\n public fitView (duration = this.config.duration, nodeIds?: (string | number)[]): void {\n this._layoutCalculationPromise?.then(() => {\n this._fit(duration, nodeIds)\n })\n }\n\n /** Enable automatic fitting to container if it was disabled due to previous zoom / pan interactions */\n public resetAutofitState (): void {\n this._isAutoFitDisabled = 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","generalSelectors.brush","brush","panelSelectors.panels","linkSelectors.links","nodeSelectors.nodes","nodeSelectors.gNode","nodeSelectors.gNodeExit","linkSelectors.gLink","linkSelectors.gLinkExit","panelSelectors.gPanel","nodeSelectors.brushed","nodeSelectors.brushable","generalSelectors.root","nodeSelectors.node","nodeSelectors.nodeGauge","nodeSelectors.sideLabelGroup","nodeSelectors.label","nodeSelectors.greyedOutNode","linkSelectors.link","linkSelectors.linkLabelGroup","linkSelectors.greyedOutLink","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, max } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport { select, Selection, pointer } from 'd3-selection'\nimport { brush, BrushBehavior, D3BrushEvent } from 'd3-brush'\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, GraphInputData } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\n// Utils\nimport { isNumber, clamp, shallowDiff, isFunction, getBoolean, isPlainObject, isEqual } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphLayoutType, GraphLinkArrowStyle, GraphPanel, GraphNodeSelectionHighlightMode } from './types'\n\n// Config\nimport { GraphDefaultConfig, 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, updateNodesPartial } from './modules/node'\nimport { getMaxNodeSize, getNodeSize, getX, getY } from './modules/node/helper'\nimport { createLinks, updateLinks, removeLinks, zoomLinksThrottled, zoomLinks, animateLinkFlow, updateLinksPartial } from './modules/link'\nimport { getDoubleArrowPath, getArrowPath } from './modules/link/helper'\nimport { createPanels, updatePanels, removePanels } from './modules/panel'\nimport { setPanelForNodes, updatePanelBBoxSize, updatePanelNumNodes, initPanels } from './modules/panel/helper'\nimport { applyLayoutCircular, applyLayoutParallel, applyLayoutDagre, applyLayoutConcentric, applyLayoutForce, applyELKLayout } from './modules/layout'\n\nexport class Graph<\n N extends GraphInputNode,\n L extends GraphInputLink,\n> extends ComponentCore<\n GraphInputData<N, L>,\n GraphConfigInterface<N, L>\n > {\n static selectors = {\n root: generalSelectors.root,\n graphGroup: generalSelectors.graphGroup,\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 dimmedNode: nodeSelectors.greyedOutNode,\n link: linkSelectors.gLink,\n linkLine: linkSelectors.link,\n linkLabel: linkSelectors.linkLabelGroup,\n dimmedLink: linkSelectors.greyedOutLink,\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 protected _defaultConfig = GraphDefaultConfig as unknown as GraphConfigInterface<N, L>\n public config: GraphConfigInterface<N, L> = this._defaultConfig\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>> = new GraphDataModel()\n private _selectedNodes: GraphNode<N, L>[]\n private _selectedLink: GraphLink<N, L>\n\n private _graphGroup: Selection<SVGGElement, unknown, null, undefined>\n private _panelsGroup: Selection<SVGGElement, unknown, null, undefined>\n private _linksGroup: Selection<SVGGElement, unknown, null, undefined>\n private _nodesGroup: Selection<SVGGElement, unknown, null, undefined>\n private _brush: Selection<SVGGElement, unknown, null, unknown>\n private _timer: Timer\n\n private _isFirstRender = true\n private _prevWidth: number\n private _prevHeight: number\n private _shouldRecalculateLayout = false\n private _currentLayoutType: GraphLayoutType | undefined\n private _layoutCalculationPromise: Promise<void> | undefined\n\n private _shouldFitLayout: boolean\n private _shouldSetPanels = 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 _isAutoFitDisabled = false\n private _scale: number\n private _initialTransform: ZoomTransform\n private _isDragging = false\n private _brushBehavior: BrushBehavior<unknown>\n private _groupDragInit: [number, number]\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, L> {\n return this._selectedNodes?.[0]\n }\n\n public get selectedNodes (): GraphNode<N, L>[] {\n return this._selectedNodes\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.setConfig(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 this._brush = this.g.append('g').attr('class', generalSelectors.brush)\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 .on('start', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoomStart(e.transform, e))\n .on('end', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoomEnd(e.transform, e))\n\n this._brushBehavior = brush()\n .on('start brush end', this._onBrush.bind(this))\n .filter(event => event.shiftKey)\n .keyModifiers(false)\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 this._getLinkArrowDefId = this._getLinkArrowDefId.bind(this)\n }\n\n setData (data: GraphInputData<N, L>): void {\n const { config } = this\n if (!config.shouldDataUpdate(this.datamodel.data, data, this.datamodel)) return\n\n this.datamodel.nodeSort = config.nodeSort\n this.datamodel.data = data\n this._shouldRecalculateLayout = true\n if (config.layoutAutofit) this._shouldFitLayout = true\n this._shouldSetPanels = true\n\n this._addSVGDefs()\n }\n\n setConfig (config: GraphConfigInterface<N, L>): void {\n super.setConfig(config)\n const hasLayoutConfigurationChanged = this._shouldLayoutRecalculate()\n\n // If the data has changed (see above in `setData`) or the layout configuration has changed, we need to recalculate the layout\n this._shouldRecalculateLayout = this._shouldRecalculateLayout || hasLayoutConfigurationChanged\n\n // If the `config.layoutAutofit` is true and data has changed (see above in `setData`),\n // or the layout configuration has changed, we need to fit the layout\n this._shouldFitLayout = this._shouldFitLayout || hasLayoutConfigurationChanged\n\n if (this._shouldFitLayout) this._isAutoFitDisabled = false\n this._shouldSetPanels = true\n }\n\n get bleed (): Spacing {\n const extraPadding = 50 // Extra padding to take into account labels and selection outlines\n return { top: extraPadding, bottom: extraPadding, left: extraPadding, right: extraPadding }\n }\n\n _render (customDuration?: number): void {\n const { config: { disableBrush, disableZoom, duration, layoutAutofit, zoomEventFilter }, 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._shouldFitLayout = true\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n // Handle brush behavior\n if (!disableBrush) {\n this._brushBehavior.extent([[0, 0], [this._width, this._height]])\n this._brush.call(this._brushBehavior)\n\n // Activate the brush when the shift key is pressed\n select(window)\n .on('keydown.unovis-graph', e => e.key === 'Shift' && this._activateBrush())\n .on('keyup.unovis-graph', e => e.key === 'Shift' && this._clearBrush())\n\n this._zoomBehavior.filter(event => !event.shiftKey)\n } else {\n this._brush.on('.brush', null)\n\n select(window)\n .on('keydown.unovis-graph', null)\n .on('keyup.unovis-graph', null)\n\n // Clear brush in case it was disabled in an active state\n if (this._brush.classed('active')) this._clearBrush()\n }\n\n // Apply layout and render\n if (this._shouldRecalculateLayout || !this._layoutCalculationPromise) {\n this._layoutCalculationPromise = this._calculateLayout()\n\n // Call `onLayoutCalculated` after the layout calculation is done and the `this._layoutCalculationPromise`\n // variable is set because the `fitView` function relies on the promise to be initialized\n this._layoutCalculationPromise.then(() => {\n this.config.onLayoutCalculated?.(datamodel.nodes, datamodel.links)\n })\n }\n\n // Redefining Zoom Behavior filter to the one specified in the config,\n // or to the default one supporting `shiftKey` for node brushing\n // See more: https://d3js.org/d3-zoom#zoom_filter\n this._zoomBehavior.filter(\n isFunction(zoomEventFilter)\n ? zoomEventFilter\n : (e: PointerEvent) => (!e.ctrlKey || e.type === 'wheel') && !e.button && !e.shiftKey) // Default filter\n\n this._layoutCalculationPromise.then(() => {\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 this._initPanelsData()\n\n // Fit the view\n if (this._isFirstRender) {\n this._fit()\n this._shouldFitLayout = false\n } else if (this._shouldFitLayout && !this._isAutoFitDisabled) {\n this._fit(duration)\n this._shouldFitLayout = false\n }\n\n // Update Nodes and Links Selection State\n this._resetSelectionGreyoutState()\n if (this.config.selectedNodeId || this.config.selectedNodeIds) {\n const selectedIds = this.config.selectedNodeIds ?? [this.config.selectedNodeId]\n const selectedNodes = selectedIds.map(id => datamodel.getNodeById(id))\n this._setNodeSelectionState(selectedNodes)\n }\n\n if (this.config.selectedLinkId) {\n const selectedLink = datamodel.links.find(link => link.id === this.config.selectedLinkId)\n this._setLinkSelectionState(selectedLink)\n }\n\n // Draw\n this._drawNodes(animDuration)\n this._drawLinks(animDuration)\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 // 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 // On render complete callback\n this.config.onRenderComplete?.(this.g, datamodel.nodes, datamodel.links, this.config, animDuration, this._scale, this._containerWidth, this._containerHeight)\n this._isFirstRender = false\n })\n }\n\n private _drawNodes (duration: number): void {\n const { config, datamodel } = this\n\n const nodes: GraphNode<N, L>[] = datamodel.nodes\n const nodeGroups = this._nodesGroup\n .selectAll<SVGGElement, GraphNode<N, L>>(`.${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, this._scale)\n\n const nodeGroupsMerged = nodeGroups.merge(nodeGroupsEnter)\n const nodeUpdateSelection = updateNodes(nodeGroupsMerged, config, duration, this._scale)\n\n this._drawPanels(nodeUpdateSelection, duration)\n\n const nodesGroupExit = nodeGroups.exit<GraphNode<N, L>>()\n nodesGroupExit\n .classed(nodeSelectors.gNodeExit, true)\n .call(removeNodes, config, duration, this._scale)\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, L>>()\n .on('start drag end', function (event, d) {\n thisRef._handleDrag(d, event, select(this))\n })\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, this._getLinkArrowDefId)\n\n const linkGroupsExit = linkGroups.exit<GraphLink<N, L>>()\n linkGroupsExit\n .attr('class', linkSelectors.gLinkExit)\n .call(removeLinks, config, duration)\n }\n\n private _drawPanels (\n nodeUpdateSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n duration: number\n ): void {\n const { config } = this\n smartTransition(this._panelsGroup, duration / 2)\n .style('opacity', config.panels?.length ? 1 : 0)\n\n if (!this._panels) return\n\n const selection = ((nodeUpdateSelection as Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>).duration)\n ? (nodeUpdateSelection as Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>).selection()\n : nodeUpdateSelection as Selection<SVGGElement, GraphNode<N, L>, 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<GraphPanel<N, L>>()\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<void> {\n const { config, datamodel } = this\n\n // If the layout type has changed, we need to reset the node positions if they were fixed before\n if (this._currentLayoutType !== config.layoutType) {\n for (const node of datamodel.nodes) {\n delete node._state.fx\n delete node._state.fy\n }\n }\n\n switch (config.layoutType) {\n case GraphLayoutType.Precalculated:\n break\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.Elk:\n await applyELKLayout(datamodel, config, this._width)\n break\n case GraphLayoutType.Circular:\n default:\n applyLayoutCircular(datamodel, config, this._width, this._height)\n break\n }\n\n // We need to update the panels data right after the layout calculation\n // because we want to have the latest coordinates before calling `onLayoutCalculated`\n this._initPanelsData()\n\n this._shouldRecalculateLayout = false\n this._currentLayoutType = config.layoutType as GraphLayoutType\n }\n\n private _initPanelsData (): void {\n const { config, datamodel } = this\n\n if (this._shouldSetPanels) {\n this._panels = initPanels(config.panels)\n setPanelForNodes(this._panels, datamodel.nodes, this.config)\n this._shouldSetPanels = false\n }\n }\n\n private _fit (duration = 0, nodeIds?: (string | number)[]): void {\n const { datamodel: { nodes } } = this\n const fitViewNodes = nodeIds?.length ? nodes.filter(n => nodeIds.includes(n.id)) : nodes\n const transform = this._getTransform(fitViewNodes)\n smartTransition(this.g, duration)\n .call(this._zoomBehavior.transform, transform)\n this._onZoom(transform)\n }\n\n private _getTransform (nodes: GraphNode<N, L>[]): 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\n const xExtent = [\n min(nodes, d => getX(d) - maxNodeSize / 2 - (max((d._panels || []).map(p => p._padding.left)) || 0)),\n max(nodes, d => getX(d) + maxNodeSize / 2 + (max((d._panels || []).map(p => p._padding.right)) || 0)),\n ]\n const yExtent = [\n min(nodes, d => getY(d) - maxNodeSize / 2 - (max((d._panels || []).map(p => p._padding.top)) || 0)),\n max(nodes, d => getY(d) + maxNodeSize / 2 + (max((d._panels || []).map(p => p._padding.bottom)) || 0)),\n ]\n\n if (xExtent.some(item => item === undefined) || yExtent.some(item => item === undefined)) {\n console.warn('Unovis | Graph: Some of the node coordinates are undefined. This can happen if you try to fit the graph before the layout has been calculated.')\n return zoomIdentity\n }\n\n const xScale = w / (xExtent[1] - xExtent[0] + left + right)\n const yScale = h / (yExtent[1] - yExtent[0] + 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]) / 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\n private _setNodeSelectionState (nodesToSelect: (GraphNode<N, L> | undefined)[]): void {\n const { config, datamodel } = this\n\n // Grey out all nodes and set us unselected\n for (const n of datamodel.nodes) {\n n._state.selected = false\n if (config.nodeSelectionHighlightMode !== GraphNodeSelectionHighlightMode.None) {\n n._state.greyout = true\n }\n }\n\n // Grey out all links and set us unselected\n for (const l of datamodel.links) {\n l._state.selected = false\n if (config.nodeSelectionHighlightMode !== GraphNodeSelectionHighlightMode.None) {\n l._state.greyout = true\n }\n }\n\n // Filter out non-existing nodes\n this._selectedNodes = nodesToSelect.filter(n => {\n const doesNodeExist = Boolean(n)\n if (!doesNodeExist) console.warn('Unovis | Graph: Select Node: Not found')\n\n return doesNodeExist\n })\n\n // Set provided nodes as selected and ungreyout\n for (const n of this._selectedNodes) {\n n._state.selected = true\n n._state.greyout = false\n }\n\n // Highlight connected links and nodes\n if (config.nodeSelectionHighlightMode === GraphNodeSelectionHighlightMode.GreyoutNonConnected) {\n const connectedLinks = datamodel.links.filter(l => this._selectedNodes.includes(l.source) || this._selectedNodes.includes(l.target))\n connectedLinks.forEach(l => {\n l.source._state.greyout = false\n l.target._state.greyout = false\n l._state.greyout = false\n })\n }\n }\n\n private _setLinkSelectionState (link: GraphLink<N, L>): void {\n const { datamodel: { nodes, links } } = this\n if (!link) console.warn('Unovis: Graph: Select Link: Not found')\n\n this._selectedLink = link\n const selectedLinkSource = link?.source as GraphNode<N, L>\n const selectedLinkTarget = link?.target as GraphNode<N, L>\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, L>\n const target = l.target as GraphNode<N, L>\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\n private _resetSelectionGreyoutState (): void {\n const { datamodel: { nodes, links } } = this\n this._selectedNodes = []\n this._selectedLink = undefined\n\n // Disable Greyout\n nodes.forEach(n => {\n delete n._state.selected\n delete n._state.greyout\n })\n\n links.forEach(l => {\n delete l._state.greyout\n delete l._state.selected\n })\n }\n\n private _updateNodesLinksPartial (): void {\n const { config } = this\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n linkElements.call(updateLinksPartial, config, this._scale)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n nodeElements.call(updateNodesPartial, config, config.duration, this._scale)\n }\n\n private _onBackgroundClick (): void {\n this._resetSelectionGreyoutState()\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeClick (d: GraphNode<N, L>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOut (d: GraphNode<N, L>): void {\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOver (d: GraphNode<N, L>): void {\n this._updateNodesLinksPartial()\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 if (this.config.linkHighlightOnHover) d._state.hovered = true\n this._updateNodesLinksPartial()\n }\n\n private _onLinkMouseOut (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n delete d._state.hovered\n this._updateNodesLinksPartial()\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, event, transform)\n\n // console.warn('Unovis | Graph: Zoom: ', transform)\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 propVal = transform[prop as keyof ZoomTransform] as number\n const initialPropVal = this._initialTransform[prop as keyof ZoomTransform] as number\n const dVal = Math.abs(propVal - initialPropVal)\n const scaledDVal = prop === 'k' ? 20 * dVal : dVal / 15\n acc += scaledDVal\n return acc\n }, 0)\n\n if (diff > config.layoutAutofitTolerance) this._isAutoFitDisabled = true\n else this._isAutoFitDisabled = false\n }\n\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .call(\n (nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomNodesThrottled : zoomNodes) as typeof zoomNodes,\n config,\n this._scale\n )\n\n this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .call(\n (nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomLinksThrottled : zoomLinks) as typeof zoomLinks,\n config,\n this._scale,\n this._getLinkArrowDefId\n )\n }\n\n private _onZoomStart (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config } = this\n const transform = t || event.transform\n this._scale = transform.k\n if (isFunction(config.onZoomStart)) config.onZoomStart(this._scale, config.zoomScaleExtent, event, transform)\n }\n\n private _onZoomEnd (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config } = this\n const transform = t || event.transform\n this._scale = transform.k\n if (isFunction(config.onZoomEnd)) config.onZoomEnd(this._scale, config.zoomScaleExtent, event, transform)\n }\n\n private _updateNodePosition (d: GraphNode<N, L>, x: number, y: number): void {\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Prevent the node from being dragged offscreen or outside its panel\n const panels = this._panels?.filter(p => p.nodes.includes(d._id)) ?? []\n const nodeSizeValue = getNodeSize(d, this.config.nodeSize, d._index)\n const maxY = min([(this._height - transform.y) / scale, ...panels.map(p => p._y + p._height)]) - nodeSizeValue / 2\n const maxX = min([(this._width - transform.x) / scale, ...panels.map(p => p._x + p._width)]) - nodeSizeValue / 2\n const minY = max([-transform.y / scale, ...panels.map(p => p._y)]) + nodeSizeValue / 2\n const minX = max([-transform.x / scale, ...panels.map(p => p._x)]) + nodeSizeValue / 2\n\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 // Assign coordinates\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 private _onBrush (event: D3BrushEvent<SVGGElement>): void {\n if (!event.selection || !event.sourceEvent) return\n const { config } = this\n const transform = zoomTransform(this._graphGroup.node())\n const [xMin, yMin] = transform.invert(event.selection[0] as [number, number])\n const [xMax, yMax] = transform.invert(event.selection[1] as [number, number])\n\n // Update brushed nodes\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .each(n => {\n const x = getX(n)\n const y = getY(n)\n n._state.brushed = x >= xMin && x <= xMax && y >= yMin && y <= yMax\n })\n .classed(nodeSelectors.brushed, n => n._state.brushed)\n\n const brushedNodes = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.brushed}`)\n .call(updateNodesPartial, config, 0, this._scale)\n\n this._brush.classed('active', event.type !== 'end')\n config.onNodeSelectionBrush?.(brushedNodes.data(), event)\n }\n\n\n private _handleDrag (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n ): void {\n if (event.sourceEvent.shiftKey && d._state.brushed) {\n this._dragSelectedNodes(event)\n } else if (!event.sourceEvent.shiftKey) {\n switch (event.type) {\n case 'start':\n this._onDragStarted(d, event, nodeSelection)\n break\n case 'drag':\n this._onDragged(d, event)\n break\n case 'end':\n this._onDragEnded(d, event, nodeSelection)\n break\n }\n }\n }\n\n private _onDragStarted (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, 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 config.onNodeDragStart?.(d, event)\n }\n\n private _onDragged (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>\n ): void {\n const { config } = this\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Update node position\n const [x, y] = pointer(event, this._graphGroup.node())\n this._updateNodePosition(d, x, y)\n\n // Update affected DOM elements\n const nodeSelection = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n const nodeToUpdate = nodeSelection.filter((n: GraphNode<N, L>) => n._id === d._id)\n nodeToUpdate.call(updateNodes, config, 0, scale)\n\n const linkSelection = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n const linksToUpdate = linkSelection.filter((l: L) => {\n const source = l.source as GraphNode<N, L>\n const target = l.target as GraphNode<N, L>\n return source._id === d._id || target._id === d._id\n })\n linksToUpdate.call(updateLinks, config, 0, scale, this._getLinkArrowDefId)\n const linksToAnimate = linksToUpdate.filter(d => d._state.greyout)\n if (linksToAnimate.size()) animateLinkFlow(linksToAnimate, config, this._scale)\n\n config.onNodeDrag?.(d, event)\n }\n\n private _onDragEnded (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, 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 config.onNodeDragEnd?.(d, event)\n }\n\n private _dragSelectedNodes (event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>): void {\n const { config } = this\n const curr = pointer(event, this._graphGroup.node())\n\n const selectedNodes = smartTransition(\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.brushed}`)\n ) as Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n\n if (event.type === 'start') {\n this._groupDragInit = curr\n this._isDragging = true\n selectedNodes.each(n => {\n n.x = getX(n)\n n.y = getY(n)\n n._state.isDragged = true\n })\n } else if (event.type === 'drag') {\n const dx = curr[0] - this._groupDragInit[0]\n const dy = curr[1] - this._groupDragInit[1]\n\n selectedNodes.each(n => this._updateNodePosition(n, n.x + dx, n.y + dy))\n\n const connectedLinks = smartTransition(\n this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .filter(l => l.source?._state?.isDragged || l.target?._state?.isDragged)\n ) as Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n\n connectedLinks.call(updateLinks, this.config, 0, this._scale, this._getLinkArrowDefId)\n } else {\n this._isDragging = false\n selectedNodes.each(n => { n._state.isDragged = false })\n }\n selectedNodes.call(updateNodes, config, 0, this._scale)\n this.config.onNodeSelectionDrag?.(selectedNodes.data(), event)\n }\n\n private _activateBrush (): void {\n this._brush.classed('active', true)\n this._nodesGroup.selectAll(`.${nodeSelectors.gNode}`)\n .classed(nodeSelectors.brushable, true)\n }\n\n private _clearBrush (): void {\n this._brush.classed('active', false).call(this._brushBehavior?.clear)\n\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .classed(nodeSelectors.brushable, false)\n .classed(nodeSelectors.brushed, false)\n .each(n => { n._state.brushed = false })\n .call(updateNodesPartial, this.config, 0, this._scale)\n }\n\n private _shouldLayoutRecalculate (): boolean {\n const { prevConfig, config } = this\n if (prevConfig.layoutType !== config.layoutType) return true\n if (prevConfig.layoutNonConnectedAside !== config.layoutNonConnectedAside) return true\n\n if (prevConfig.layoutType === GraphLayoutType.Force) {\n const forceSettingsDiff = shallowDiff(prevConfig.forceLayoutSettings, config.forceLayoutSettings)\n if (Object.keys(forceSettingsDiff).length) return true\n }\n\n if (prevConfig.layoutType === GraphLayoutType.Dagre) {\n const dagreSettingsDiff = shallowDiff(prevConfig.dagreLayoutSettings, config.dagreLayoutSettings)\n if (Object.keys(dagreSettingsDiff).length) return true\n }\n\n if (prevConfig.layoutType === GraphLayoutType.Elk) {\n if (isPlainObject(prevConfig.layoutElkSettings) && isPlainObject(config.layoutElkSettings)) {\n // Do a deeper comparison if `config.layoutElkSettings` is an object\n const elkSettingsDiff = shallowDiff(\n prevConfig.layoutElkSettings as Record<string, string>,\n config.layoutElkSettings as Record<string, string>\n )\n return Boolean(Object.keys(elkSettingsDiff).length)\n } else {\n // Otherwise, do a simple `===` comparison\n return prevConfig.layoutElkSettings !== config.layoutElkSettings\n }\n }\n\n if (\n prevConfig.layoutType === GraphLayoutType.Parallel ||\n prevConfig.layoutType === GraphLayoutType.ParallelHorizontal ||\n prevConfig.layoutType === GraphLayoutType.Concentric\n ) {\n if (!isEqual(prevConfig.layoutGroupOrder, config.layoutGroupOrder)) return true\n if (prevConfig.layoutParallelNodesPerColumn !== config.layoutParallelNodesPerColumn) return true\n if (prevConfig.layoutParallelSortConnectionsByGroup !== config.layoutParallelSortConnectionsByGroup) return true\n }\n\n return false\n }\n\n private _getLinkArrowDefId (arrow: GraphLinkArrowStyle | undefined): string | null {\n return arrow ? `${this.uid}-${arrow}` : null\n }\n\n private _addSVGDefs (): void {\n // Clean up old defs\n this._defs.selectAll('*').remove()\n\n // Single Arrow\n this._defs.append('path').attr('d', getArrowPath())\n .attr('id', this._getLinkArrowDefId(GraphLinkArrowStyle.Single))\n\n // Double Arrow\n this._defs.append('path').attr('d', getDoubleArrowPath())\n .attr('id', this._getLinkArrowDefId(GraphLinkArrowStyle.Double))\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 getZoom (): number {\n return zoomTransform(this.g.node()).k\n }\n\n public fitView (duration = this.config.duration, nodeIds?: (string | number)[]): void {\n this._layoutCalculationPromise?.then(() => {\n this._fit(duration, nodeIds)\n })\n }\n\n /** Enable automatic fitting to container if it was disabled due to previous zoom / pan interactions */\n public resetAutofitState (): void {\n this._isAutoFitDisabled = 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 /** Set the node state by id */\n public setNodeStateById (nodeId: string, state: GraphNode<N, L>['_state']): void {\n this.datamodel.setNodeStateById(nodeId, state)\n this._updateNodesLinksPartial()\n }\n}\n"],"names":["generalSelectors.background","generalSelectors.graphGroup","generalSelectors.brush","brush","panelSelectors.panels","linkSelectors.links","nodeSelectors.nodes","nodeSelectors.gNode","nodeSelectors.gNodeExit","linkSelectors.gLink","linkSelectors.gLinkExit","panelSelectors.gPanel","nodeSelectors.brushed","nodeSelectors.brushable","generalSelectors.root","nodeSelectors.node","nodeSelectors.nodeGauge","nodeSelectors.sideLabelGroup","nodeSelectors.label","nodeSelectors.greyedOutNode","linkSelectors.link","linkSelectors.linkLabelGroup","linkSelectors.greyedOutLink","panelSelectors.panel","panelSelectors.panelSelection","panelSelectors.label","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.sideIconSymbol","nodeSelectors"],"mappings":"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"}
@@ -10,11 +10,11 @@ export declare class GraphDataModel<N extends GraphInputNode, L extends GraphInp
10
10
  private _nodes;
11
11
  private _links;
12
12
  private _inputNodesMap;
13
- private _nodeIds;
13
+ private _nodesMap;
14
14
  nodeId: ((n: N) => string | undefined);
15
15
  linkId: ((n: L) => string | undefined);
16
16
  nodeSort: ((a: N, b: N) => number);
17
- getNodeFromId(id: string | number): OutNode;
17
+ getNodeById(id: string | number): OutNode;
18
18
  get data(): GraphData<N, L>;
19
19
  set data(inputData: GraphData<N, L>);
20
20
  get nodes(): OutNode[];
@@ -23,4 +23,5 @@ export declare class GraphDataModel<N extends GraphInputNode, L extends GraphInp
23
23
  get nonConnectedNodes(): OutNode[];
24
24
  private findNode;
25
25
  private transferState;
26
+ setNodeStateById(id: string, state: Record<string, any>): void;
26
27
  }
@@ -7,13 +7,13 @@ class GraphDataModel extends CoreDataModel {
7
7
  this._nodes = [];
8
8
  this._links = [];
9
9
  this._inputNodesMap = new Map();
10
- this._nodeIds = new Map();
10
+ this._nodesMap = new Map();
11
11
  // Model configuration
12
12
  this.nodeId = n => (isString(n.id) || isFinite(n.id)) ? `${n.id}` : undefined;
13
13
  this.linkId = l => (isString(l.id) || isFinite(l.id)) ? `${l.id}` : undefined;
14
14
  }
15
- getNodeFromId(id) {
16
- return this._nodeIds.get(id);
15
+ getNodeById(id) {
16
+ return this._nodesMap.get(id);
17
17
  }
18
18
  get data() {
19
19
  return this._data;
@@ -26,7 +26,8 @@ class GraphDataModel extends CoreDataModel {
26
26
  const prevNodes = this.nodes;
27
27
  const prevLinks = this.links;
28
28
  this._inputNodesMap.clear();
29
- this._nodeIds.clear();
29
+ this._nodesMap.clear();
30
+ // Todo: Figure out why TypeScript complains about types
30
31
  const nodes = cloneDeep((_a = inputData === null || inputData === void 0 ? void 0 : inputData.nodes) !== null && _a !== void 0 ? _a : []);
31
32
  const links = cloneDeep((_b = inputData === null || inputData === void 0 ? void 0 : inputData.links) !== null && _b !== void 0 ? _b : []);
32
33
  // Every node or link can have a private state used for rendering needs
@@ -38,7 +39,7 @@ class GraphDataModel extends CoreDataModel {
38
39
  node._index = i;
39
40
  node._id = this.nodeId(node) || `${i}`;
40
41
  this._inputNodesMap.set(node, inputData.nodes[i]);
41
- this._nodeIds.set(node._id, node);
42
+ this._nodesMap.set(node._id, node);
42
43
  });
43
44
  // Sort nodes
44
45
  if (isFunction(this.nodeSort))
@@ -94,7 +95,7 @@ class GraphDataModel extends CoreDataModel {
94
95
  else if (isObject(nodeIdentifier))
95
96
  foundNode = nodes.find(node => isEqual(this._inputNodesMap.get(node), nodeIdentifier));
96
97
  if (!foundNode) {
97
- console.warn(`Node ${nodeIdentifier} is missing from the nodes list`);
98
+ console.warn(`Unovis | Graph Data Model: Node ${nodeIdentifier} is missing from the nodes list`);
98
99
  }
99
100
  return foundNode;
100
101
  }
@@ -107,6 +108,14 @@ class GraphDataModel extends CoreDataModel {
107
108
  item._state = {};
108
109
  }
109
110
  }
111
+ setNodeStateById(id, state) {
112
+ const node = this.getNodeById(id);
113
+ if (!node) {
114
+ console.warn(`Unovis | Graph Data Model: Node ${id} not found`);
115
+ return;
116
+ }
117
+ node._state = state;
118
+ }
110
119
  }
111
120
 
112
121
  export { GraphDataModel };
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sources":["../../src/data-models/graph.ts"],"sourcesContent":["import { isNumber, isUndefined, cloneDeep, isFunction, without, isString, isObject, isEqual } from 'utils/data'\n\n// Types\nimport { GraphInputLink, GraphInputNode, GraphLinkCore, GraphNodeCore } from 'types/graph'\n\n// Core Data Model\nimport { CoreDataModel } from './core'\n\nexport type GraphData<N extends GraphInputNode, L extends GraphInputLink> = {\n nodes: N[];\n links?: L[];\n}\n\nexport class GraphDataModel<\n N extends GraphInputNode,\n L extends GraphInputLink,\n OutNode extends GraphNodeCore<N, L> = GraphNodeCore<N, L>,\n OutLink extends GraphLinkCore<N, L> = GraphLinkCore<N, L>,\n> extends CoreDataModel<GraphData<N, L>> {\n private _nonConnectedNodes: OutNode[]\n private _connectedNodes: OutNode[]\n private _nodes: OutNode[] = []\n private _links: OutLink[] = []\n private _inputNodesMap = new Map<OutNode, N>()\n private _nodeIds = new Map<string | number, OutNode>()\n\n // Model configuration\n public nodeId: ((n: N) => string | undefined) = n => (isString(n.id) || isFinite(n.id as number)) ? `${n.id}` : undefined\n public linkId: ((n: L) => string | undefined) = l => (isString(l.id) || isFinite(l.id as number)) ? `${l.id}` : undefined\n public nodeSort: ((a: N, b: N) => number)\n\n public getNodeFromId (id: string | number): OutNode {\n return this._nodeIds.get(id)\n }\n\n get data (): GraphData<N, L> {\n return this._data\n }\n\n set data (inputData: GraphData<N, L>) {\n if (!inputData) return\n this._data = inputData\n const prevNodes = this.nodes\n const prevLinks = this.links\n\n this._inputNodesMap.clear()\n this._nodeIds.clear()\n const nodes = cloneDeep(inputData?.nodes ?? []) as OutNode[]\n const links = cloneDeep(inputData?.links ?? []) as OutLink[]\n\n // Every node or link can have a private state used for rendering needs\n // On data update we transfer state between objects with same ids\n this.transferState(nodes, prevNodes, this.nodeId)\n this.transferState(links, prevLinks, this.linkId)\n\n // Set node `_id` and `_index`\n nodes.forEach((node, i) => {\n node._index = i\n node._id = this.nodeId(node) || `${i}`\n this._inputNodesMap.set(node, inputData.nodes[i])\n this._nodeIds.set(node._id, node)\n })\n\n // Sort nodes\n if (isFunction(this.nodeSort)) nodes.sort(this.nodeSort)\n\n // Fill link source and target\n links.forEach((link, i) => {\n link._indexGlobal = i\n link.source = this.findNode(nodes, link.source)\n link.target = this.findNode(nodes, link.target)\n })\n\n // Set link index for multiple link rendering\n links.forEach((link, i) => {\n if (!isUndefined(link._index) && !isUndefined(link._neighbours)) return\n\n const linksFiltered = links.filter(l =>\n ((link.source === l.source) && (link.target === l.target)) ||\n ((link.source === l.target) && (link.target === l.source))\n )\n\n linksFiltered.forEach((l, i) => {\n l._index = i\n l._id = this.linkId(l) || `${l.source?._id}-${l.target?._id}-${i}`\n l._neighbours = linksFiltered.length\n l._direction = ((link.source === l.source) && (link.target === l.target)) ? 1 : -1\n })\n })\n\n nodes.forEach(d => {\n // Determine if a node is connected or not and store it as a property\n d.links = links.filter(l => (l.source === d) || (l.target === d))\n d._isConnected = d.links.length !== 0\n })\n\n this._nonConnectedNodes = nodes.filter(d => !d._isConnected)\n this._connectedNodes = without(nodes, ...this._nonConnectedNodes)\n\n this._nodes = nodes\n this._links = links.filter(l => l.source && l.target)\n }\n\n get nodes (): OutNode[] {\n return this._nodes\n }\n\n get links (): OutLink[] {\n return this._links\n }\n\n get connectedNodes (): OutNode[] {\n return this._connectedNodes\n }\n\n get nonConnectedNodes (): OutNode[] {\n return this._nonConnectedNodes\n }\n\n private findNode (nodes: OutNode[], nodeIdentifier: number | string | N): OutNode | undefined {\n let foundNode: OutNode | undefined\n\n if (isNumber(nodeIdentifier)) foundNode = nodes[nodeIdentifier as number]\n else if (isString(nodeIdentifier)) foundNode = nodes.find(node => this.nodeId(node) === nodeIdentifier)\n else if (isObject(nodeIdentifier)) foundNode = nodes.find(node => isEqual(this._inputNodesMap.get(node), nodeIdentifier))\n\n if (!foundNode) {\n console.warn(`Node ${nodeIdentifier} is missing from the nodes list`)\n }\n\n return foundNode\n }\n\n private transferState<T extends { _state: Record<string, any>}> (\n items: T[],\n itemsPrev: T[],\n getId: (d: T) => string\n ): void {\n for (const item of items) {\n const dPrev = itemsPrev.find((dp) => getId(dp) === getId(item))\n if (dPrev) item._state = { ...dPrev._state }\n else item._state = {}\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sources":["../../src/data-models/graph.ts"],"sourcesContent":["import { isNumber, isUndefined, cloneDeep, isFunction, without, isString, isObject, isEqual } from 'utils/data'\n\n// Types\nimport { GraphInputLink, GraphInputNode, GraphLinkCore, GraphNodeCore } from 'types/graph'\n\n// Core Data Model\nimport { CoreDataModel } from './core'\n\nexport type GraphData<N extends GraphInputNode, L extends GraphInputLink> = {\n nodes: N[];\n links?: L[];\n}\n\nexport class GraphDataModel<\n N extends GraphInputNode,\n L extends GraphInputLink,\n OutNode extends GraphNodeCore<N, L> = GraphNodeCore<N, L>,\n OutLink extends GraphLinkCore<N, L> = GraphLinkCore<N, L>,\n> extends CoreDataModel<GraphData<N, L>> {\n private _nonConnectedNodes: OutNode[]\n private _connectedNodes: OutNode[]\n private _nodes: OutNode[] = []\n private _links: OutLink[] = []\n private _inputNodesMap = new Map<OutNode, N>()\n private _nodesMap = new Map<string | number, OutNode>()\n\n // Model configuration\n public nodeId: ((n: N) => string | undefined) = n => (isString(n.id) || isFinite(n.id as number)) ? `${n.id}` : undefined\n public linkId: ((n: L) => string | undefined) = l => (isString(l.id) || isFinite(l.id as number)) ? `${l.id}` : undefined\n public nodeSort: ((a: N, b: N) => number)\n\n public getNodeById (id: string | number): OutNode {\n return this._nodesMap.get(id)\n }\n\n get data (): GraphData<N, L> {\n return this._data\n }\n\n set data (inputData: GraphData<N, L>) {\n if (!inputData) return\n this._data = inputData\n const prevNodes = this.nodes\n const prevLinks = this.links\n\n this._inputNodesMap.clear()\n this._nodesMap.clear()\n\n // Todo: Figure out why TypeScript complains about types\n const nodes = cloneDeep(inputData?.nodes ?? []) as undefined as OutNode[]\n const links = cloneDeep(inputData?.links ?? []) as undefined as OutLink[]\n\n // Every node or link can have a private state used for rendering needs\n // On data update we transfer state between objects with same ids\n this.transferState(nodes, prevNodes, this.nodeId)\n this.transferState(links, prevLinks, this.linkId)\n\n // Set node `_id` and `_index`\n nodes.forEach((node, i) => {\n node._index = i\n node._id = this.nodeId(node) || `${i}`\n this._inputNodesMap.set(node, inputData.nodes[i])\n this._nodesMap.set(node._id, node)\n })\n\n // Sort nodes\n if (isFunction(this.nodeSort)) nodes.sort(this.nodeSort)\n\n // Fill link source and target\n links.forEach((link, i) => {\n link._indexGlobal = i\n link.source = this.findNode(nodes, link.source)\n link.target = this.findNode(nodes, link.target)\n })\n\n // Set link index for multiple link rendering\n links.forEach((link, i) => {\n if (!isUndefined(link._index) && !isUndefined(link._neighbours)) return\n\n const linksFiltered = links.filter(l =>\n ((link.source === l.source) && (link.target === l.target)) ||\n ((link.source === l.target) && (link.target === l.source))\n )\n\n linksFiltered.forEach((l, i) => {\n l._index = i\n l._id = this.linkId(l) || `${l.source?._id}-${l.target?._id}-${i}`\n l._neighbours = linksFiltered.length\n l._direction = ((link.source === l.source) && (link.target === l.target)) ? 1 : -1\n })\n })\n\n nodes.forEach(d => {\n // Determine if a node is connected or not and store it as a property\n d.links = links.filter(l => (l.source === d) || (l.target === d))\n d._isConnected = d.links.length !== 0\n })\n\n this._nonConnectedNodes = nodes.filter(d => !d._isConnected)\n this._connectedNodes = without(nodes, ...this._nonConnectedNodes)\n\n this._nodes = nodes\n this._links = links.filter(l => l.source && l.target)\n }\n\n get nodes (): OutNode[] {\n return this._nodes\n }\n\n get links (): OutLink[] {\n return this._links\n }\n\n get connectedNodes (): OutNode[] {\n return this._connectedNodes\n }\n\n get nonConnectedNodes (): OutNode[] {\n return this._nonConnectedNodes\n }\n\n private findNode (nodes: OutNode[], nodeIdentifier: number | string | N): OutNode | undefined {\n let foundNode: OutNode | undefined\n\n if (isNumber(nodeIdentifier)) foundNode = nodes[nodeIdentifier as number]\n else if (isString(nodeIdentifier)) foundNode = nodes.find(node => this.nodeId(node) === nodeIdentifier)\n else if (isObject(nodeIdentifier)) foundNode = nodes.find(node => isEqual(this._inputNodesMap.get(node), nodeIdentifier))\n\n if (!foundNode) {\n console.warn(`Unovis | Graph Data Model: Node ${nodeIdentifier} is missing from the nodes list`)\n }\n\n return foundNode\n }\n\n private transferState<T extends { _state: Record<string, any>}> (\n items: T[],\n itemsPrev: T[],\n getId: (d: T) => string\n ): void {\n for (const item of items) {\n const dPrev = itemsPrev.find((dp) => getId(dp) === getId(item))\n if (dPrev) item._state = { ...dPrev._state }\n else item._state = {}\n }\n }\n\n public setNodeStateById (id: string, state: Record<string, any>): void {\n const node = this.getNodeById(id)\n if (!node) {\n console.warn(`Unovis | Graph Data Model: Node ${id} not found`)\n return\n }\n\n node._state = state\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@unovis/ts",
3
3
  "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript",
4
- "version": "1.5.1-exf.2",
4
+ "version": "1.5.1-exf.3",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/f5/unovis.git",