Skip to content

@memberjunction/ng-graph-view

An interactive, high-performance network and relationship graph visualization component for MemberJunction and Angular applications.

  • 🌐 Force-Directed Physics Simulation: Smooth Spring-Charge layout with repulsion, link elasticity, and velocity damping.
  • πŸ“ Multiple Layout Modes: Switch between force (organic cluster network), hierarchy (ranked authority/depth rows), circular, and grid topologies.
  • πŸ›οΈ Semantic Graph & Canon Support: Native support for Rank-ordered concept categories (GraphConceptType), Status (Active, Proposed, Superseded, Archived), AuthorityTier, animated dashed Contradicts edges, directed SVG arrowheads, grounded MJ primitives, and provenance chunks.
  • 🏷️ Interactive Category Filter Legend: Click any category pill in the legend to isolate nodes by category or GraphConceptType.
  • πŸ” Interactive Search & Degree Filter: Node keyword filtering and hop-distance neighborhood expansion.
  • 🎯 Cancelable Before/After Event System: Full control over user interactions (BeforeNodeSelect, BeforeEdgeSelect, BeforeHopExpand, BeforeLayoutChange, BeforeNodeAction).
  • 🎨 MemberJunction Design Tokens: Seamless integration with MJ dark/light themes and typography.
  • πŸ”Ž Selected Node Inspector Pane: Built-in side drawer displaying authority badges, specifications, authority conflicts, grounded MJ primitives, source provenance chunks, and governance actions (NodeAction). Navigation is an intent event (NodeNavigated) so the host opens the record.

import { GraphViewComponent } from '@memberjunction/ng-graph-view';
@Component({
standalone: true,
imports: [GraphViewComponent],
template: `
<mj-graph-view
[Nodes]="graphNodes"
[Edges]="graphEdges"
[LayoutMode]="'force'"
(NodeSelected)="onNodeSelected($event)">
</mj-graph-view>
`
})
export class MyFeatureComponent {
public graphNodes: GraphNode[] = [...];
public graphEdges: GraphEdge[] = [...];
public onNodeSelected(event: NodeSelectedEventArgs): void {
console.log('Selected node:', event.Node.Label);
}
}

PropertyTypeDefaultDescription
NodesGraphNode[][]Array of graph node entities to render.
EdgesGraphEdge[][]Array of relationship edges connecting nodes.
CategoriesGraphCategoryConfig[]DEFAULT_GRAPH_CATEGORIESCategory color/icon/rank configs (e.g., seeded or DB-loaded GraphConceptType rows).
LayoutMode'force' | 'circular' | 'hierarchy' | 'grid''force'Active layout algorithm.
ActiveCategoryFilterstring | nullnullOptional active category filter key to isolate nodes in a category.
MaxHopDistancenumber2Max hop depth for neighborhood traversals.
SelectedNodeIdstringundefinedID of the node to initially select/highlight.
ShowToolbarbooleantrueShow floating controls toolbar.
ShowLegendbooleantrueShow category color legend.
ShowInspectorbooleantrueShow slide-in selected node inspector drawer.
SearchablebooleantrueEnable keyword search input in toolbar.
PhysicsGraphPhysicsConfigDEFAULTPhysics parameters (repulsion, linkDistance, damping).

EventPayload TypeCancelableDescription
BeforeNodeSelectBeforeNodeSelectEventArgsβœ… YesFired before a node is selected. Set event.Cancel = true to abort.
NodeSelectedNodeSelectedEventArgs❌ NoFired after node selection completes.
BeforeEdgeSelectBeforeEdgeSelectEventArgsβœ… YesFired before an edge relationship is selected.
EdgeSelectedEdgeSelectedEventArgs❌ NoFired after edge selection completes.
BeforeHopExpandBeforeHopExpandEventArgsβœ… YesFired before expanding neighbors for incremental data loading.
HopExpandedHopExpandedEventArgs❌ NoFired after hop expansion executes.
BeforeLayoutChangeBeforeLayoutChangeEventArgsβœ… YesFired before layout mode changes.
LayoutChangedLayoutChangedEventArgs❌ NoFired after layout algorithm recalculates.
BeforeNodeNavigateBeforeNodeNavigateEventArgsβœ… YesFired before opening full entity record form.
NodeNavigatedNodeNavigatedEventArgs❌ NoFired after the user asks to open a record. The host owns navigation.
BeforeNodeActionBeforeNodeActionEventArgsβœ… YesFired before a governance action (e.g. 'approve', 'reject', 'deprecate') executes on a node.
NodeActionNodeActionEventArgs❌ NoFired when a user confirms a governance action in the inspector drawer.
CategoryFilterChangedstring | null❌ NoFired when the user toggles a category filter pill in the interactive legend.

Call these directly via @ViewChild(GraphViewComponent):

  • ZoomIn() / ZoomOut(): Step viewport scale in or out.
  • FitToView(): Reset zoom and center the network graph.
  • Rearrange(): Re-seed positions and re-run physics relaxation.
  • SetLayoutMode(mode): Change between 'force', 'hierarchy', 'circular', and 'grid'.
  • ToggleCategoryFilter(category): Toggle isolating nodes by a specific category or GraphConceptType.
  • SelectNode(id): Select a node programmatically.
  • ClearSelection(): Deselect currently active node or edge.
  • ExpandHops(nodeId, depth): Request incremental neighbor loading.