@memberjunction/ng-entity-relationship-diagram 5.3.1 → 5.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/entity-to-erd-adapter.test.js.map +1 -1
- package/dist/__tests__/erd-types.test.js.map +1 -1
- package/dist/__tests__/index.test.js.map +1 -1
- package/dist/lib/components/entity-details/entity-details.component.js +2 -2
- package/dist/lib/components/entity-details/entity-details.component.js.map +1 -1
- package/dist/lib/components/entity-filter-panel/entity-filter-panel.component.js +2 -2
- package/dist/lib/components/entity-filter-panel/entity-filter-panel.component.js.map +1 -1
- package/dist/lib/components/erd-composite/erd-composite.component.js +2 -2
- package/dist/lib/components/erd-composite/erd-composite.component.js.map +1 -1
- package/dist/lib/components/erd-diagram.component.js +2 -2
- package/dist/lib/components/erd-diagram.component.js.map +1 -1
- package/dist/lib/components/mj-entity-erd.component.js.map +1 -1
- package/dist/lib/entity-relationship-diagram.module.js.map +1 -1
- package/dist/lib/interfaces/erd-types.js.map +1 -1
- package/dist/lib/utils/entity-to-erd-adapter.js.map +1 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erd-diagram.component.js","sourceRoot":"","sources":["../../../src/lib/components/erd-diagram.component.ts","../../../src/lib/components/erd-diagram.component.html"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"erd-diagram.component.js","sourceRoot":"","sources":["../../../src/lib/components/erd-diagram.component.ts","../../../src/lib/components/erd-diagram.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n ViewChild,\n AfterViewInit,\n OnDestroy,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport {\n ERDNode,\n ERDField,\n ERDLink,\n ERDConfig,\n ERDNodeClickEvent,\n ERDNodeDoubleClickEvent,\n ERDLinkClickEvent,\n ERDZoomEvent,\n ERDColorScheme,\n ERDState,\n ERDNodeHoverEvent,\n ERDLinkHoverEvent,\n ERDNodeContextMenuEvent,\n ERDLinkContextMenuEvent,\n ERDDiagramContextMenuEvent,\n ERDNodeDragEvent,\n ERDRelationshipInfo,\n ERDLayoutAlgorithm,\n ERDDagreConfig\n} from '../interfaces/erd-types';\nimport * as dagre from '@dagrejs/dagre';\n\n/**\n * Internal node representation for D3 force simulation.\n * Extends ERDNode with position and simulation-specific properties.\n * @internal\n */\ninterface InternalNode {\n id: string;\n name: string;\n node: ERDNode;\n x?: number;\n y?: number;\n fx?: number | null;\n fy?: number | null;\n width: number;\n height: number;\n primaryKeys: ERDField[];\n foreignKeys: ERDField[];\n}\n\n/**\n * Internal link representation for D3 force simulation.\n * @internal\n */\ninterface InternalLink {\n source: string | InternalNode;\n target: string | InternalNode;\n sourceField: ERDField;\n targetField?: ERDField;\n isSelfReference: boolean;\n /** Edge points computed by dagre for orthogonal routing */\n points?: Array<{ x: number; y: number }>;\n}\n\n/**\n * Default configuration values for the ERD diagram.\n * These values provide a good starting point for most use cases.\n */\n/** Default dagre configuration */\nconst DEFAULT_DAGRE_CONFIG: Required<ERDDagreConfig> = {\n rankDir: 'LR',\n nodeSep: 80, // Increased from 50 - more vertical space between nodes in same rank\n rankSep: 150, // Increased from 100 - more horizontal space between ranks for labels\n edgeSep: 20, // Increased from 10 - more space between edge paths\n ranker: 'network-simplex',\n align: undefined as unknown as 'UL' | 'UR' | 'DL' | 'DR'\n};\n\nconst DEFAULT_CONFIG: Required<ERDConfig> = {\n nodeWidth: 180,\n nodeBaseHeight: 60,\n fieldHeight: 20,\n maxNodeHeight: 300,\n chargeStrength: -800,\n linkDistance: 80,\n collisionPadding: 20,\n showFieldDetails: true,\n showRelationshipLabels: true,\n showHeader: true,\n showNodeCount: true,\n showMinimap: false,\n showLegend: false,\n enableDragging: true,\n enableZoom: true,\n enablePan: true,\n minZoom: 0.1,\n maxZoom: 4,\n initialZoom: 1,\n enableMultiSelect: false,\n animationDuration: 750,\n fitOnLoad: true,\n skipAnimation: false,\n emptyStateMessage: 'No entities to display',\n emptyStateIcon: 'fa-solid fa-diagram-project',\n layoutAlgorithm: 'dagre',\n dagreConfig: DEFAULT_DAGRE_CONFIG,\n colors: {\n nodeBackground: '#f8f9fa',\n nodeBorder: '#333',\n nodeHeader: '#007bff',\n nodeHeaderText: 'white',\n primaryKeyBackground: '#fff3cd',\n primaryKeyText: '#856404',\n foreignKeyBackground: '#cce5ff',\n foreignKeyText: '#004085',\n linkColor: '#666',\n selectedBorder: '#4CAF50',\n highlightBorder: '#ff9800',\n relatedBorder: '#ff6b35'\n }\n};\n\n/**\n * Entity Relationship Diagram component using D3.js force-directed graph.\n *\n * This is a **generic, reusable Angular component** that can visualize any data\n * that conforms to the `ERDNode` interface. It is completely decoupled from\n * MemberJunction-specific types and can be used in any Angular project.\n *\n * ## Features\n *\n * - **Interactive Force-Directed Layout**: Nodes automatically arrange themselves\n * using physics-based simulation with customizable forces\n * - **Zoom and Pan**: Mouse wheel zoom and drag-to-pan with configurable limits\n * - **Node Selection**: Click to select nodes with visual highlighting\n * - **Focus Mode**: Show a single node with its N-hop related entities\n * - **Relationship Visualization**: Arrows show foreign key relationships\n * - **Customizable Styling**: Full control over colors, sizes, and appearance\n * - **Rich Event System**: Comprehensive events for integration with parent components\n * - **State Persistence**: Save and restore diagram state (zoom, pan, selection, positions)\n *\n * ## Basic Usage\n *\n * ```html\n * <mj-erd-diagram\n * [nodes]=\"entityNodes\"\n * [selectedNodeId]=\"selectedId\"\n * [config]=\"erdConfig\"\n * (nodeClick)=\"onNodeClick($event)\"\n * (nodeSelected)=\"onNodeSelected($event)\"\n * (zoomChange)=\"onZoomChange($event)\">\n * </mj-erd-diagram>\n * ```\n *\n * ## Focus Mode Example\n *\n * Show a single entity with its immediate relationships:\n *\n * ```html\n * <mj-erd-diagram\n * [nodes]=\"allNodes\"\n * [focusNodeId]=\"'user-entity-id'\"\n * [focusDepth]=\"1\"\n * (nodeSelected)=\"onNodeSelected($event)\">\n * </mj-erd-diagram>\n * ```\n *\n * ## State Persistence Example\n *\n * ```typescript\n * // Save state\n * const state = this.erdDiagram.getState();\n * localStorage.setItem('erd-state', JSON.stringify(state));\n *\n * // Restore state\n * const savedState = JSON.parse(localStorage.getItem('erd-state'));\n * this.erdDiagram.setState(savedState);\n * ```\n *\n * @see ERDNode for the node data structure\n * @see ERDConfig for configuration options\n * @see ERDState for state persistence\n */\n@Component({\n standalone: false,\n selector: 'mj-erd-diagram',\n templateUrl: './erd-diagram.component.html',\n styleUrls: ['./erd-diagram.component.css']\n})\nexport class ERDDiagramComponent implements AfterViewInit, OnDestroy, OnChanges {\n @ViewChild('erdContainer', { static: false }) erdContainer!: ElementRef;\n\n // ============================================================================\n // INPUTS - Data\n // ============================================================================\n\n /**\n * The nodes (entities) to display in the diagram.\n * Each node should conform to the `ERDNode` interface.\n *\n * @example\n * ```typescript\n * nodes: ERDNode[] = [\n * {\n * id: 'user-1',\n * name: 'Users',\n * fields: [\n * { id: 'id', name: 'ID', isPrimaryKey: true },\n * { id: 'email', name: 'Email', isPrimaryKey: false }\n * ]\n * }\n * ];\n * ```\n */\n @Input() nodes: ERDNode[] = [];\n\n /**\n * ID of the currently selected node.\n * Use this for external control of selection state.\n * The component will highlight this node and emit selection events accordingly.\n *\n * @example `[selectedNodeId]=\"'entity-123'\"`\n */\n @Input() selectedNodeId: string | null = null;\n\n /**\n * IDs of nodes to highlight (in addition to selected node).\n * Highlighted nodes receive a distinct visual style (orange border by default).\n * Useful for showing search results or related items.\n *\n * @example `[highlightedNodeIds]=\"['entity-1', 'entity-2']\"`\n */\n @Input() highlightedNodeIds: string[] = [];\n\n /**\n * ID of the node to focus on.\n * When set, the diagram will only show this node and its related nodes\n * up to `focusDepth` hops away. This is useful for entity-centric views.\n *\n * Set to `null` to show all nodes.\n *\n * @example `[focusNodeId]=\"'user-entity-id'\"`\n */\n @Input() focusNodeId: string | null = null;\n\n /**\n * Number of relationship hops to include when in focus mode.\n * - `0`: Show only the focus node\n * - `1`: Show focus node + directly related nodes\n * - `2`: Show focus node + nodes within 2 relationship hops\n *\n * Only applies when `focusNodeId` is set.\n *\n * @default 1\n * @example `[focusDepth]=\"2\"`\n */\n @Input() focusDepth = 1;\n\n // ============================================================================\n // INPUTS - State\n // ============================================================================\n\n /**\n * Whether the diagram is currently refreshing/loading.\n * When `true`, displays a loading overlay on the diagram.\n *\n * @example `[isRefreshing]=\"isLoadingData\"`\n */\n @Input() isRefreshing = false;\n\n /**\n * Whether the diagram is in read-only mode.\n * When `true`, disables dragging and selection (zoom/pan still work).\n *\n * @default false\n */\n @Input() readOnly = false;\n\n // ============================================================================\n // INPUTS - Configuration\n // ============================================================================\n\n /**\n * Configuration options for the diagram.\n * All options are optional with sensible defaults.\n *\n * @see ERDConfig for all available options\n * @example\n * ```typescript\n * config: ERDConfig = {\n * nodeWidth: 200,\n * chargeStrength: -1000,\n * colors: {\n * nodeHeader: '#0066cc'\n * }\n * };\n * ```\n */\n @Input() config: ERDConfig = {};\n\n /**\n * Whether to show the header bar with zoom controls.\n * Set to `false` to hide the header and use programmatic control instead.\n *\n * @default true\n */\n @Input() showHeader = true;\n\n /**\n * Title to display in the header bar.\n * Only visible when `showHeader` is `true`.\n *\n * @default 'Entity Relationship Diagram'\n */\n @Input() headerTitle = 'Entity Relationship Diagram';\n\n // ============================================================================\n // OUTPUTS - Selection Events\n // ============================================================================\n\n /**\n * Emitted when a node is clicked.\n * Set `event.cancel = true` to prevent the default selection behavior.\n *\n * @example\n * ```typescript\n * onNodeClick(event: ERDNodeClickEvent) {\n * console.log('Clicked:', event.node.name);\n * // Prevent selection for certain nodes\n * if (event.node.customData?.['locked']) {\n * event.cancel = true;\n * }\n * }\n * ```\n */\n @Output() nodeClick = new EventEmitter<ERDNodeClickEvent>();\n\n /**\n * Emitted when a node is double-clicked.\n * Useful for opening detail views or triggering actions.\n *\n * @example\n * ```typescript\n * onNodeDoubleClick(event: ERDNodeDoubleClickEvent) {\n * this.openEntityDetail(event.node.id);\n * }\n * ```\n */\n @Output() nodeDoubleClick = new EventEmitter<ERDNodeDoubleClickEvent>();\n\n /**\n * Emitted when a node is selected (after click, unless cancelled).\n * The node parameter contains the full `ERDNode` data.\n */\n @Output() nodeSelected = new EventEmitter<ERDNode>();\n\n /**\n * Emitted when the current node is deselected.\n * This happens when clicking the background or selecting a different node.\n */\n @Output() nodeDeselected = new EventEmitter<void>();\n\n /**\n * Emitted when a relationship link is clicked.\n * The event includes both source and target nodes for context.\n */\n @Output() linkClick = new EventEmitter<ERDLinkClickEvent>();\n\n // ============================================================================\n // OUTPUTS - Hover Events\n // ============================================================================\n\n /**\n * Emitted when the mouse enters a node.\n * Includes related nodes and position for tooltip display.\n *\n * @example\n * ```typescript\n * onNodeHover(event: ERDNodeHoverEvent) {\n * this.showTooltip(event.node, event.position);\n * }\n * ```\n */\n @Output() nodeHover = new EventEmitter<ERDNodeHoverEvent>();\n\n /**\n * Emitted when the mouse leaves a node.\n */\n @Output() nodeHoverEnd = new EventEmitter<ERDNode>();\n\n /**\n * Emitted when the mouse enters a relationship link.\n */\n @Output() linkHover = new EventEmitter<ERDLinkHoverEvent>();\n\n /**\n * Emitted when the mouse leaves a relationship link.\n */\n @Output() linkHoverEnd = new EventEmitter<ERDLink>();\n\n // ============================================================================\n // OUTPUTS - Context Menu Events\n // ============================================================================\n\n /**\n * Emitted when a node is right-clicked.\n * Set `event.cancel = true` to prevent the default browser context menu.\n *\n * @example\n * ```typescript\n * onNodeContextMenu(event: ERDNodeContextMenuEvent) {\n * event.cancel = true;\n * this.showContextMenu(event.node, event.position);\n * }\n * ```\n */\n @Output() nodeContextMenu = new EventEmitter<ERDNodeContextMenuEvent>();\n\n /**\n * Emitted when a relationship link is right-clicked.\n */\n @Output() linkContextMenu = new EventEmitter<ERDLinkContextMenuEvent>();\n\n /**\n * Emitted when the diagram background is right-clicked.\n * Includes diagram coordinates for adding new nodes at click position.\n */\n @Output() diagramContextMenu = new EventEmitter<ERDDiagramContextMenuEvent>();\n\n // ============================================================================\n // OUTPUTS - Drag Events\n // ============================================================================\n\n /**\n * Emitted when a node drag operation starts.\n * Set `event.cancel = true` to prevent the drag.\n */\n @Output() nodeDragStart = new EventEmitter<ERDNodeDragEvent>();\n\n /**\n * Emitted when a node drag operation ends.\n */\n @Output() nodeDragEnd = new EventEmitter<ERDNodeDragEvent>();\n\n // ============================================================================\n // OUTPUTS - Diagram Events\n // ============================================================================\n\n /**\n * Emitted when zoom level or pan position changes.\n * Useful for synchronizing zoom controls or saving view state.\n */\n @Output() zoomChange = new EventEmitter<ERDZoomEvent>();\n\n /**\n * Emitted when the diagram requests a refresh.\n * Triggered by the refresh button in the header.\n */\n @Output() refreshRequested = new EventEmitter<void>();\n\n /**\n * Emitted when the force simulation completes initial layout.\n * Useful for performing actions after nodes have settled.\n */\n @Output() layoutComplete = new EventEmitter<void>();\n\n /**\n * Emitted when diagram state changes (selection, zoom, highlights).\n * Useful for auto-saving state or syncing with other components.\n */\n @Output() stateChange = new EventEmitter<ERDState>();\n\n // ============================================================================\n // PRIVATE STATE\n // ============================================================================\n\n private svg: d3.Selection<SVGSVGElement, unknown, null, undefined> | null = null;\n private simulation: d3.Simulation<InternalNode, InternalLink> | null = null;\n private internalNodes: InternalNode[] = [];\n private internalLinks: InternalLink[] = [];\n private visibleNodes: InternalNode[] = [];\n private visibleLinks: InternalLink[] = [];\n private zoom: d3.ZoomBehavior<SVGSVGElement, unknown> | null = null;\n private resizeObserver?: ResizeObserver;\n private lastKnownSize = { width: 0, height: 0 };\n private resizeTimeout?: number;\n private mergedConfig: Required<ERDConfig> = DEFAULT_CONFIG;\n private layoutCompleted = false;\n private isLayoutFrozen = false;\n\n // ============================================================================\n // LIFECYCLE HOOKS\n // ============================================================================\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.setupERD();\n }, 100);\n\n this.setupResizeObserver();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['nodes'] && !changes['nodes'].firstChange) {\n this.setupERD();\n }\n\n if (changes['selectedNodeId'] && !changes['selectedNodeId'].firstChange) {\n this.updateSelectionHighlighting();\n this.emitStateChange();\n }\n\n if (changes['highlightedNodeIds'] && !changes['highlightedNodeIds'].firstChange) {\n this.updateHighlighting();\n this.emitStateChange();\n }\n\n if (changes['focusNodeId'] && !changes['focusNodeId'].firstChange) {\n this.setupERD();\n this.emitStateChange();\n }\n\n if (changes['focusDepth'] && !changes['focusDepth'].firstChange) {\n if (this.focusNodeId) {\n this.setupERD();\n this.emitStateChange();\n }\n }\n\n if (changes['config'] && !changes['config'].firstChange) {\n this.mergeConfig();\n this.setupERD();\n }\n }\n\n ngOnDestroy(): void {\n if (this.simulation) {\n this.simulation.stop();\n }\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n }\n\n // ============================================================================\n // PUBLIC API - Zoom Control\n // ============================================================================\n\n /**\n * Zoom in on the diagram by a fixed factor (1.2x).\n * Uses smooth animation transition.\n */\n public zoomIn(): void {\n if (this.zoom && this.svg) {\n this.svg.transition().duration(300).call(\n this.zoom.scaleBy as unknown as (transition: d3.Transition<SVGSVGElement, unknown, null, undefined>, k: number) => void,\n 1.2\n );\n }\n }\n\n /**\n * Zoom out on the diagram by a fixed factor (0.83x).\n * Uses smooth animation transition.\n */\n public zoomOut(): void {\n if (this.zoom && this.svg) {\n this.svg.transition().duration(300).call(\n this.zoom.scaleBy as unknown as (transition: d3.Transition<SVGSVGElement, unknown, null, undefined>, k: number) => void,\n 0.83\n );\n }\n }\n\n /**\n * Reset zoom to default level (1x) and center the diagram.\n * Uses smooth animation transition.\n */\n public resetZoom(): void {\n if (this.zoom && this.svg) {\n this.svg.transition().duration(500).call(\n this.zoom.transform as unknown as (transition: d3.Transition<SVGSVGElement, unknown, null, undefined>, transform: d3.ZoomTransform) => void,\n d3.zoomIdentity\n );\n }\n }\n\n /**\n * Zoom and pan to center on a specific node.\n *\n * @param nodeId - ID of the node to center on\n * @param scale - Optional zoom scale (default: 1.5)\n *\n * @example\n * ```typescript\n * // Center on node with default zoom\n * this.erdDiagram.zoomToNode('user-entity-id');\n *\n * // Center with custom zoom level\n * this.erdDiagram.zoomToNode('user-entity-id', 2.0);\n * ```\n */\n public zoomToNode(nodeId: string, scale = 1.5): void {\n const node = this.internalNodes.find(n => n.id === nodeId);\n if (!node || !this.zoom || !this.svg) return;\n\n const container = this.erdContainer.nativeElement;\n const width = container.clientWidth;\n const height = container.clientHeight;\n\n const x = width / 2 - (node.x || 0) * scale;\n const y = height / 2 - (node.y || 0) * scale;\n\n this.svg.transition().duration(this.mergedConfig.animationDuration).call(\n this.zoom.transform as unknown as (transition: d3.Transition<SVGSVGElement, unknown, null, undefined>, transform: d3.ZoomTransform) => void,\n d3.zoomIdentity.translate(x, y).scale(scale)\n );\n }\n\n /**\n * Fit all visible nodes within the viewport.\n * Calculates optimal zoom level and position to show all nodes.\n *\n * @param padding - Padding around nodes (default: 50px)\n */\n public zoomToFit(padding = 50): void {\n if (!this.svg || !this.zoom || this.visibleNodes.length === 0) return;\n\n const container = this.erdContainer.nativeElement;\n const width = container.clientWidth;\n const height = container.clientHeight;\n\n // Guard against zero container dimensions (container not laid out yet)\n if (width === 0 || height === 0) return;\n\n // Calculate bounds\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n this.visibleNodes.forEach(node => {\n const halfWidth = node.width / 2;\n const halfHeight = node.height / 2;\n minX = Math.min(minX, (node.x || 0) - halfWidth);\n minY = Math.min(minY, (node.y || 0) - halfHeight);\n maxX = Math.max(maxX, (node.x || 0) + halfWidth);\n maxY = Math.max(maxY, (node.y || 0) + halfHeight);\n });\n\n // Guard against invalid bounds (nodes without valid positions)\n if (!isFinite(minX) || !isFinite(minY) || !isFinite(maxX) || !isFinite(maxY)) return;\n\n const boundsWidth = maxX - minX + padding * 2;\n const boundsHeight = maxY - minY + padding * 2;\n\n // Guard against zero-dimension bounds\n if (boundsWidth <= 0 || boundsHeight <= 0) return;\n\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n\n const scale = Math.min(\n width / boundsWidth,\n height / boundsHeight,\n this.mergedConfig.maxZoom\n );\n\n // Final sanity check before applying transform\n if (!isFinite(scale) || scale <= 0) return;\n\n const translateX = width / 2 - centerX * scale;\n const translateY = height / 2 - centerY * scale;\n\n this.svg.transition().duration(this.mergedConfig.animationDuration).call(\n this.zoom.transform as unknown as (transition: d3.Transition<SVGSVGElement, unknown, null, undefined>, transform: d3.ZoomTransform) => void,\n d3.zoomIdentity.translate(translateX, translateY).scale(scale)\n );\n }\n\n // ============================================================================\n // PUBLIC API - Selection\n // ============================================================================\n\n /**\n * Programmatically select a node by ID.\n *\n * @param nodeId - ID of the node to select\n * @returns `true` if node was found and selected, `false` otherwise\n */\n public selectNode(nodeId: string): boolean {\n const node = this.nodes.find(n => n.id === nodeId);\n if (node) {\n this.nodeSelected.emit(node);\n return true;\n }\n return false;\n }\n\n /**\n * Clear all selections.\n */\n public deselectAll(): void {\n this.nodeDeselected.emit();\n this.clearAllHighlighting();\n }\n\n // ============================================================================\n // PUBLIC API - Highlighting\n // ============================================================================\n\n /**\n * Highlight a specific node.\n *\n * @param nodeId - ID of the node to highlight\n */\n public highlightNode(nodeId: string): void {\n if (!this.highlightedNodeIds.includes(nodeId)) {\n this.highlightedNodeIds = [...this.highlightedNodeIds, nodeId];\n this.updateHighlighting();\n this.emitStateChange();\n }\n }\n\n /**\n * Clear all highlights.\n */\n public clearHighlights(): void {\n this.highlightedNodeIds = [];\n this.updateHighlighting();\n this.emitStateChange();\n }\n\n /**\n * Highlight a node and all its directly related nodes.\n *\n * @param nodeId - ID of the center node\n * @param depth - Number of relationship hops to highlight (default: 1)\n */\n public highlightRelated(nodeId: string, depth = 1): void {\n const relatedIds = this.getRelatedNodeIds(nodeId, depth);\n this.highlightedNodeIds = [nodeId, ...relatedIds];\n this.updateHighlighting();\n this.emitStateChange();\n }\n\n /**\n * Get nodes that are related to a specific node.\n *\n * @param nodeId - ID of the node to find relationships for\n * @param depth - Number of relationship hops (default: 1)\n * @returns Array of relationship information\n */\n public getRelatedNodes(nodeId: string, depth = 1): ERDRelationshipInfo[] {\n const result: ERDRelationshipInfo[] = [];\n const visited = new Set<string>([nodeId]);\n const toProcess = [{ id: nodeId, currentDepth: 0 }];\n\n while (toProcess.length > 0) {\n const current = toProcess.shift()!;\n if (current.currentDepth >= depth) continue;\n\n // Find outgoing relationships\n this.nodes.forEach(node => {\n node.fields.forEach(field => {\n if (field.relatedNodeId) {\n if (node.id === current.id && !visited.has(field.relatedNodeId)) {\n const targetNode = this.nodes.find(n => n.id === field.relatedNodeId);\n if (targetNode) {\n visited.add(field.relatedNodeId);\n toProcess.push({ id: field.relatedNodeId, currentDepth: current.currentDepth + 1 });\n result.push({\n node: targetNode,\n link: {\n sourceNodeId: node.id,\n targetNodeId: field.relatedNodeId,\n sourceField: field,\n isSelfReference: node.id === field.relatedNodeId\n },\n direction: 'outgoing',\n field\n });\n }\n }\n // Incoming relationships\n if (field.relatedNodeId === current.id && !visited.has(node.id)) {\n visited.add(node.id);\n toProcess.push({ id: node.id, currentDepth: current.currentDepth + 1 });\n result.push({\n node,\n link: {\n sourceNodeId: node.id,\n targetNodeId: field.relatedNodeId,\n sourceField: field,\n isSelfReference: node.id === field.relatedNodeId\n },\n direction: 'incoming',\n field\n });\n }\n }\n });\n });\n }\n\n return result;\n }\n\n // ============================================================================\n // PUBLIC API - State Management\n // ============================================================================\n\n /**\n * Get the current state of the diagram for persistence.\n * Includes selection, highlights, zoom, pan, and node positions.\n *\n * @returns Current diagram state\n *\n * @example\n * ```typescript\n * // Save to localStorage\n * const state = erdDiagram.getState();\n * localStorage.setItem('erd-state', JSON.stringify(state));\n * ```\n */\n public getState(): ERDState {\n const zoomState = this.getZoomState();\n const nodePositions: Record<string, { x: number; y: number; fx?: number | null; fy?: number | null }> = {};\n\n this.internalNodes.forEach(node => {\n nodePositions[node.id] = {\n x: node.x || 0,\n y: node.y || 0,\n fx: node.fx,\n fy: node.fy\n };\n });\n\n return {\n selectedNodeId: this.selectedNodeId,\n highlightedNodeIds: [...this.highlightedNodeIds],\n zoomLevel: zoomState.zoomLevel,\n translateX: zoomState.translateX,\n translateY: zoomState.translateY,\n focusNodeId: this.focusNodeId,\n focusDepth: this.focusDepth,\n nodePositions\n };\n }\n\n /**\n * Restore a previously saved diagram state.\n *\n * @param state - State object from `getState()`\n * @param restorePositions - Whether to restore node positions (default: true)\n *\n * @example\n * ```typescript\n * // Restore from localStorage\n * const savedState = JSON.parse(localStorage.getItem('erd-state'));\n * if (savedState) {\n * erdDiagram.setState(savedState);\n * }\n * ```\n */\n public setState(state: Partial<ERDState>, restorePositions = true): void {\n if (state.highlightedNodeIds) {\n this.highlightedNodeIds = [...state.highlightedNodeIds];\n }\n\n // Restore zoom/pan\n if (this.svg && this.zoom && state.zoomLevel != null) {\n this.svg.call(\n this.zoom.transform as unknown as (selection: d3.Selection<SVGSVGElement, unknown, null, undefined>, transform: d3.ZoomTransform) => void,\n d3.zoomIdentity\n .translate(state.translateX || 0, state.translateY || 0)\n .scale(state.zoomLevel)\n );\n }\n\n // Restore node positions\n if (restorePositions && state.nodePositions) {\n this.internalNodes.forEach(node => {\n const savedPos = state.nodePositions?.[node.id];\n if (savedPos) {\n node.x = savedPos.x;\n node.y = savedPos.y;\n node.fx = savedPos.fx;\n node.fy = savedPos.fy;\n }\n });\n\n // Restart simulation briefly to update display\n if (this.simulation) {\n this.simulation.alpha(0.1).restart();\n }\n }\n\n this.updateSelectionHighlighting();\n this.updateHighlighting();\n }\n\n // ============================================================================\n // PUBLIC API - Layout Control\n // ============================================================================\n\n /**\n * Freeze the layout simulation.\n * Nodes will stay in their current positions and won't move.\n */\n public freezeLayout(): void {\n this.isLayoutFrozen = true;\n if (this.simulation) {\n this.simulation.stop();\n // Fix all node positions\n this.internalNodes.forEach(node => {\n node.fx = node.x;\n node.fy = node.y;\n });\n }\n }\n\n /**\n * Unfreeze the layout simulation.\n * Nodes will resume natural movement based on forces.\n */\n public unfreezeLayout(): void {\n this.isLayoutFrozen = false;\n // Unfix all node positions\n this.internalNodes.forEach(node => {\n node.fx = null;\n node.fy = null;\n });\n if (this.simulation) {\n this.simulation.alpha(0.3).restart();\n }\n }\n\n /**\n * Center the diagram without changing zoom level.\n */\n public centerDiagram(): void {\n if (!this.svg || !this.zoom || this.visibleNodes.length === 0) return;\n\n const container = this.erdContainer.nativeElement;\n const width = container.clientWidth;\n const height = container.clientHeight;\n\n // Calculate center of all nodes\n let sumX = 0, sumY = 0;\n this.visibleNodes.forEach(node => {\n sumX += node.x || 0;\n sumY += node.y || 0;\n });\n const centerX = sumX / this.visibleNodes.length;\n const centerY = sumY / this.visibleNodes.length;\n\n const currentTransform = d3.zoomTransform(this.svg.node()!);\n const translateX = width / 2 - centerX * currentTransform.k;\n const translateY = height / 2 - centerY * currentTransform.k;\n\n this.svg.transition().duration(this.mergedConfig.animationDuration).call(\n this.zoom.transform as unknown as (transition: d3.Transition<SVGSVGElement, unknown, null, undefined>, transform: d3.ZoomTransform) => void,\n d3.zoomIdentity.translate(translateX, translateY).scale(currentTransform.k)\n );\n }\n\n // ============================================================================\n // PUBLIC API - Utilities\n // ============================================================================\n\n /**\n * Rebuild the entire ERD visualization.\n */\n public refresh(): void {\n this.setupERD();\n }\n\n /**\n * Trigger a resize recalculation.\n * Call this when the container size changes.\n */\n public triggerResize(): void {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n\n this.resizeTimeout = window.setTimeout(() => {\n this.resizeSVG();\n }, 100);\n }\n\n /**\n * Get current zoom state.\n *\n * @returns Current zoom level and translation\n */\n public getZoomState(): ERDZoomEvent {\n if (!this.svg) {\n return { zoomLevel: 1, translateX: 0, translateY: 0 };\n }\n const transform = d3.zoomTransform(this.svg.node()!);\n return {\n zoomLevel: transform.k,\n translateX: transform.x,\n translateY: transform.y\n };\n }\n\n /**\n * Export the diagram as an SVG string.\n *\n * @returns SVG markup string\n */\n public exportAsSVG(): string {\n if (!this.svg) return '';\n\n const svgNode = this.svg.node();\n if (!svgNode) return '';\n\n const serializer = new XMLSerializer();\n return serializer.serializeToString(svgNode);\n }\n\n // ============================================================================\n // SETUP METHODS\n // ============================================================================\n\n private setupERD(): void {\n if (!this.erdContainer?.nativeElement) {\n return;\n }\n\n this.layoutCompleted = false;\n this.mergeConfig();\n this.clearVisualization();\n this.createInternalNodes();\n this.createInternalLinks();\n this.applyFocusMode();\n this.createVisualization();\n }\n\n private mergeConfig(): void {\n this.mergedConfig = {\n ...DEFAULT_CONFIG,\n ...this.config,\n colors: {\n ...DEFAULT_CONFIG.colors,\n ...this.config.colors\n },\n dagreConfig: {\n ...DEFAULT_DAGRE_CONFIG,\n ...this.config.dagreConfig\n }\n };\n\n // Map 'horizontal' and 'vertical' layout algorithms to dagre with appropriate direction\n if (this.mergedConfig.layoutAlgorithm === 'horizontal') {\n this.mergedConfig.dagreConfig.rankDir = 'LR';\n } else if (this.mergedConfig.layoutAlgorithm === 'vertical') {\n this.mergedConfig.dagreConfig.rankDir = 'TB';\n }\n }\n\n private resizeSVG(): void {\n if (!this.svg || !this.erdContainer?.nativeElement) {\n return;\n }\n\n const container = this.erdContainer.nativeElement;\n const width = container.clientWidth || 800;\n const height = container.clientHeight || 600;\n\n if (Math.abs(this.lastKnownSize.width - width) < 5 &&\n Math.abs(this.lastKnownSize.height - height) < 5) {\n return;\n }\n\n this.lastKnownSize = { width, height };\n\n const svgElement = this.svg.node();\n if (svgElement) {\n svgElement.style.width = '100%';\n svgElement.style.height = '100%';\n }\n\n this.svg.attr('viewBox', `0 0 ${width} ${height}`);\n\n if (this.simulation && !this.isLayoutFrozen) {\n this.simulation.force('center', d3.forceCenter(width / 2, height / 2));\n this.simulation.alpha(0.3).restart();\n }\n }\n\n private setupResizeObserver(): void {\n if (!this.erdContainer?.nativeElement) {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n\n this.resizeTimeout = window.setTimeout(() => {\n const container = this.erdContainer?.nativeElement;\n if (!container) return;\n\n const newWidth = container.clientWidth;\n const newHeight = container.clientHeight;\n\n if (Math.abs(this.lastKnownSize.width - newWidth) >= 5 ||\n Math.abs(this.lastKnownSize.height - newHeight) >= 5) {\n requestAnimationFrame(() => {\n this.resizeSVG();\n });\n }\n }, 50);\n });\n\n this.resizeObserver.observe(this.erdContainer.nativeElement);\n }\n\n private clearVisualization(): void {\n if (this.simulation) {\n this.simulation.stop();\n }\n d3.select(this.erdContainer.nativeElement).selectAll('*').remove();\n }\n\n // ============================================================================\n // FOCUS MODE\n // ============================================================================\n\n private applyFocusMode(): void {\n if (!this.focusNodeId) {\n // No focus mode - show all nodes\n this.visibleNodes = [...this.internalNodes];\n this.visibleLinks = [...this.internalLinks];\n return;\n }\n\n // Get IDs of nodes within focus depth\n const visibleIds = new Set<string>([this.focusNodeId]);\n const relatedIds = this.getRelatedNodeIds(this.focusNodeId, this.focusDepth);\n relatedIds.forEach(id => visibleIds.add(id));\n\n // Filter nodes\n this.visibleNodes = this.internalNodes.filter(n => visibleIds.has(n.id));\n\n // Filter links - only show links between visible nodes\n this.visibleLinks = this.internalLinks.filter(link => {\n const sourceId = typeof link.source === 'string' ? link.source : link.source.id;\n const targetId = typeof link.target === 'string' ? link.target : link.target.id;\n return visibleIds.has(sourceId) && visibleIds.has(targetId);\n });\n }\n\n private getRelatedNodeIds(nodeId: string, depth: number): string[] {\n const visited = new Set<string>([nodeId]);\n const toProcess = [{ id: nodeId, currentDepth: 0 }];\n const result: string[] = [];\n\n while (toProcess.length > 0) {\n const current = toProcess.shift()!;\n if (current.currentDepth >= depth) continue;\n\n // Find relationships\n this.nodes.forEach(node => {\n node.fields.forEach(field => {\n if (field.relatedNodeId) {\n // Outgoing from current\n if (node.id === current.id && !visited.has(field.relatedNodeId)) {\n visited.add(field.relatedNodeId);\n result.push(field.relatedNodeId);\n toProcess.push({ id: field.relatedNodeId, currentDepth: current.currentDepth + 1 });\n }\n // Incoming to current\n if (field.relatedNodeId === current.id && !visited.has(node.id)) {\n visited.add(node.id);\n result.push(node.id);\n toProcess.push({ id: node.id, currentDepth: current.currentDepth + 1 });\n }\n }\n });\n });\n }\n\n return result;\n }\n\n // ============================================================================\n // NODE/LINK CREATION\n // ============================================================================\n\n private createInternalNodes(): void {\n const cfg = this.mergedConfig;\n\n this.internalNodes = this.nodes.map(node => {\n const primaryKeys = node.fields.filter(f => f.isPrimaryKey);\n const foreignKeys = node.fields.filter(f => f.relatedNodeId && !f.isPrimaryKey);\n\n const fieldCount = Math.max(1, primaryKeys.length + foreignKeys.length);\n const calculatedHeight = Math.min(\n cfg.nodeBaseHeight + (fieldCount * cfg.fieldHeight),\n cfg.maxNodeHeight\n );\n\n return {\n id: node.id,\n name: node.name || node.schemaName || 'Unknown',\n node: node,\n width: cfg.nodeWidth,\n height: calculatedHeight,\n primaryKeys: primaryKeys,\n foreignKeys: foreignKeys\n };\n });\n }\n\n private createInternalLinks(): void {\n this.internalLinks = [];\n const nodeMap = new Map(this.internalNodes.map(n => [n.id, n]));\n\n this.nodes.forEach(node => {\n node.fields.forEach(field => {\n if (field.relatedNodeId) {\n const sourceNode = nodeMap.get(node.id);\n const targetNode = nodeMap.get(field.relatedNodeId);\n\n if (sourceNode && targetNode) {\n const isSelfReference = node.id === field.relatedNodeId;\n const targetField = targetNode.primaryKeys.find(pk => pk.name === field.relatedFieldName);\n\n this.internalLinks.push({\n source: sourceNode,\n target: targetNode,\n sourceField: field,\n targetField: targetField,\n isSelfReference: isSelfReference\n });\n }\n }\n });\n });\n }\n\n // ============================================================================\n // DAGRE LAYOUT\n // ============================================================================\n\n /**\n * Applies dagre hierarchical layout to position nodes and compute edge paths.\n * This provides clean, orthogonal edge routing.\n */\n private applyDagreLayout(): void {\n const cfg = this.mergedConfig;\n const dagreCfg = cfg.dagreConfig as Required<ERDDagreConfig>;\n\n // Create a new directed graph\n const g = new dagre.graphlib.Graph({ directed: true, multigraph: true });\n\n // Set graph options\n g.setGraph({\n rankdir: dagreCfg.rankDir,\n nodesep: dagreCfg.nodeSep,\n ranksep: dagreCfg.rankSep,\n edgesep: dagreCfg.edgeSep,\n ranker: dagreCfg.ranker,\n align: dagreCfg.align\n });\n\n // Default edge label (required by dagre)\n g.setDefaultEdgeLabel(() => ({}));\n\n // Add nodes to the graph\n this.visibleNodes.forEach(node => {\n g.setNode(node.id, {\n width: node.width,\n height: node.height,\n label: node.name\n });\n });\n\n // Add edges to the graph\n this.visibleLinks.forEach((link, index) => {\n const sourceId = typeof link.source === 'string' ? link.source : link.source.id;\n const targetId = typeof link.target === 'string' ? link.target : link.target.id;\n\n // Use index as edge name for multigraph support (multiple edges between same nodes)\n g.setEdge(sourceId, targetId, {\n label: link.sourceField.name || '',\n labelpos: 'c',\n labeloffset: 10\n }, `edge-${index}`);\n });\n\n // Run the layout algorithm\n dagre.layout(g);\n\n // Apply computed positions to nodes\n this.visibleNodes.forEach(node => {\n const dagreNode = g.node(node.id);\n if (dagreNode) {\n node.x = dagreNode.x;\n node.y = dagreNode.y;\n // Fix position to prevent force simulation from moving nodes\n node.fx = dagreNode.x;\n node.fy = dagreNode.y;\n }\n });\n\n // Store edge points for orthogonal path rendering\n this.visibleLinks.forEach((link, index) => {\n const sourceId = typeof link.source === 'string' ? link.source : link.source.id;\n const targetId = typeof link.target === 'string' ? link.target : link.target.id;\n\n const edge = g.edge(sourceId, targetId, `edge-${index}`);\n if (edge && edge.points) {\n link.points = edge.points;\n }\n });\n }\n\n /**\n * Checks if the current layout algorithm uses dagre.\n */\n private usesDagreLayout(): boolean {\n const algo = this.mergedConfig.layoutAlgorithm;\n return algo === 'dagre' || algo === 'horizontal' || algo === 'vertical';\n }\n\n // ============================================================================\n // VISUALIZATION\n // ============================================================================\n\n private createVisualization(): void {\n const container = this.erdContainer.nativeElement;\n const width = container.clientWidth || 800;\n const height = container.clientHeight || 600;\n const cfg = this.mergedConfig;\n const colors = cfg.colors as Required<ERDColorScheme>;\n\n this.lastKnownSize = { width, height };\n\n // Create zoom behavior\n if (cfg.enableZoom) {\n this.zoom = d3.zoom<SVGSVGElement, unknown>()\n .scaleExtent([cfg.minZoom, cfg.maxZoom])\n .on('zoom', (event) => {\n if (this.svg) {\n this.svg.select('.chart-area').attr('transform', event.transform);\n this.zoomChange.emit({\n zoomLevel: event.transform.k,\n translateX: event.transform.x,\n translateY: event.transform.y\n });\n }\n });\n }\n\n // Create SVG\n this.svg = d3\n .select(container)\n .append('svg')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .style('width', '100%')\n .style('height', '100%')\n .style('position', 'absolute')\n .style('top', '0')\n .style('left', '0');\n\n if (this.zoom) {\n this.svg.call(this.zoom);\n }\n\n // Background click handler\n this.svg.on('click', (event: MouseEvent) => {\n if (event.target === event.currentTarget) {\n this.nodeDeselected.emit();\n this.clearAllHighlighting();\n }\n });\n\n // Background context menu handler\n this.svg.on('contextmenu', (event: MouseEvent) => {\n if (event.target === event.currentTarget) {\n const contextEvent: ERDDiagramContextMenuEvent = {\n mouseEvent: event,\n cancel: false,\n position: { x: event.clientX, y: event.clientY },\n diagramPosition: this.screenToDiagramCoords(event.clientX, event.clientY)\n };\n this.diagramContextMenu.emit(contextEvent);\n if (contextEvent.cancel) {\n event.preventDefault();\n }\n }\n });\n\n const chartArea = this.svg.append('g').attr('class', 'chart-area');\n\n // Define arrow marker\n this.svg\n .append('defs')\n .selectAll('marker')\n .data(['end-arrow'])\n .enter()\n .append('marker')\n .attr('id', 'end-arrow')\n .attr('viewBox', '0 -5 10 10')\n .attr('refX', 8)\n .attr('refY', 0)\n .attr('markerWidth', 6)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M0,-5L10,0L0,5')\n .attr('fill', colors.linkColor);\n\n // Apply layout based on algorithm\n if (this.usesDagreLayout()) {\n // Use dagre for hierarchical layout with orthogonal edges\n this.applyDagreLayout();\n this.simulation = null; // No force simulation needed\n } else {\n // Create force simulation with visible nodes only (original behavior)\n this.simulation = d3\n .forceSimulation<InternalNode>(this.visibleNodes)\n .force(\n 'link',\n d3\n .forceLink<InternalNode, InternalLink>(this.visibleLinks)\n .id((d) => d.id)\n .distance((d) => {\n const source = d.source as InternalNode;\n const target = d.target as InternalNode;\n const sourceSize = Math.max(source.width, source.height);\n const targetSize = Math.max(target.width, target.height);\n return (sourceSize + targetSize) / 2 + cfg.linkDistance;\n })\n )\n .force('charge', d3.forceManyBody().strength(cfg.chargeStrength))\n .force('center', d3.forceCenter(width / 2, height / 2))\n .force(\n 'collision',\n d3.forceCollide<InternalNode>().radius((d) => {\n return Math.max(d.width, d.height) / 2 + cfg.collisionPadding;\n })\n );\n }\n\n // Create links\n const link = chartArea\n .selectAll('.link')\n .data(this.visibleLinks)\n .enter()\n .append('g')\n .attr('class', 'link-group');\n\n link\n .append('path')\n .attr('class', 'link')\n .attr('stroke', colors.linkColor)\n .attr('stroke-opacity', 0.8)\n .attr('stroke-width', 2)\n .attr('fill', 'none')\n .attr('marker-end', (d) => (d.isSelfReference ? 'none' : 'url(#end-arrow)'));\n\n if (cfg.showRelationshipLabels) {\n // Add background rect for label (will be sized after text is rendered)\n // Self-referencing links get a green background to stand out\n link\n .append('rect')\n .attr('class', 'link-label-bg')\n .attr('fill', (d) => d.isSelfReference ? '#e8f5e9' : 'white')\n .attr('stroke', (d) => d.isSelfReference ? '#4CAF50' : colors.linkColor)\n .attr('stroke-width', 0.5)\n .attr('stroke-opacity', (d) => d.isSelfReference ? 0.6 : 0.4)\n .attr('rx', 2)\n .attr('ry', 2);\n\n // Add the label text\n link\n .append('text')\n .attr('class', 'link-label')\n .attr('font-size', '10px')\n .attr('fill', (d) => d.isSelfReference ? '#2e7d32' : colors.linkColor)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .text((d) => d.sourceField.name || '');\n }\n\n // Link event handlers\n this.attachLinkEventHandlers(link);\n\n // Create nodes\n const nodeGroup = chartArea\n .selectAll('.node')\n .data(this.visibleNodes)\n .enter()\n .append('g')\n .attr('class', 'node')\n .style('cursor', this.readOnly ? 'default' : 'pointer');\n\n if (cfg.enableDragging && !this.readOnly) {\n nodeGroup.call(\n d3.drag<SVGGElement, InternalNode>()\n .on('start', (event, d) => this.dragstarted(event, d))\n .on('drag', (event, d) => this.dragged(event, d))\n .on('end', (event, d) => this.dragended(event, d))\n );\n }\n\n // Node rectangle\n nodeGroup\n .append('rect')\n .attr('class', 'entity-rect')\n .attr('width', (d) => d.width)\n .attr('height', (d) => d.height)\n .attr('x', (d) => -d.width / 2)\n .attr('y', (d) => -d.height / 2)\n .attr('fill', colors.nodeBackground)\n .attr('stroke', colors.nodeBorder)\n .attr('stroke-width', 2)\n .attr('rx', 4);\n\n // Node header\n nodeGroup\n .append('rect')\n .attr('class', 'entity-header')\n .attr('width', (d) => d.width)\n .attr('height', 30)\n .attr('x', (d) => -d.width / 2)\n .attr('y', (d) => -d.height / 2)\n .attr('fill', colors.nodeHeader)\n .attr('rx', 4);\n\n nodeGroup\n .append('rect')\n .attr('class', 'entity-header-bottom')\n .attr('width', (d) => d.width)\n .attr('height', 15)\n .attr('x', (d) => -d.width / 2)\n .attr('y', (d) => -d.height / 2 + 15)\n .attr('fill', colors.nodeHeader);\n\n // Node name\n nodeGroup\n .append('text')\n .attr('class', 'entity-name')\n .attr('text-anchor', 'middle')\n .attr('y', (d) => -d.height / 2 + 20)\n .attr('font-size', '12px')\n .attr('font-weight', 'bold')\n .attr('fill', colors.nodeHeaderText)\n .text((d) => d.name);\n\n // Add fields if configured\n if (cfg.showFieldDetails) {\n this.renderNodeFields(nodeGroup, colors);\n }\n\n // Event handlers\n this.attachNodeEventHandlers(nodeGroup);\n\n // Tooltips\n nodeGroup\n .append('title')\n .text((d) => `${d.name}\\nPrimary Keys: ${d.primaryKeys.length}\\nForeign Keys: ${d.foreignKeys.length}`);\n\n // Handle layout completion based on algorithm type\n if (this.usesDagreLayout()) {\n // Dagre layout is synchronous - positions are already set\n this.updatePositions(link, nodeGroup);\n this.layoutCompleted = true;\n this.layoutComplete.emit();\n\n // Fit to view after positions are set\n if (cfg.fitOnLoad && this.visibleNodes.length > 1) {\n setTimeout(() => this.zoomToFit(), 50);\n }\n } else if (this.simulation) {\n // Force simulation layout\n if (cfg.skipAnimation) {\n // Run simulation to completion without animation\n this.simulation.stop();\n\n // Run enough ticks to settle the layout (typically 300 is enough)\n const tickCount = 300;\n for (let i = 0; i < tickCount; i++) {\n this.simulation.tick();\n }\n\n // Update positions once at the end\n this.updatePositions(link, nodeGroup);\n this.layoutCompleted = true;\n this.layoutComplete.emit();\n\n // Fit to view after positions are set\n if (cfg.fitOnLoad && this.visibleNodes.length > 1) {\n setTimeout(() => this.zoomToFit(), 50);\n }\n } else {\n // Normal animated mode\n // Simulation tick\n this.simulation.on('tick', () => {\n this.updatePositions(link, nodeGroup);\n });\n\n // Layout complete detection\n this.simulation.on('end', () => {\n if (!this.layoutCompleted) {\n this.layoutCompleted = true;\n this.layoutComplete.emit();\n if (cfg.fitOnLoad && this.visibleNodes.length > 1) {\n setTimeout(() => this.zoomToFit(), 100);\n }\n }\n });\n }\n }\n\n // Apply initial selection highlighting\n this.updateSelectionHighlighting();\n this.updateHighlighting();\n }\n\n private renderNodeFields(\n nodeGroup: d3.Selection<SVGGElement, InternalNode, SVGGElement, unknown>,\n colors: Required<ERDColorScheme>\n ): void {\n nodeGroup.each((d, i, nodes) => {\n const group = d3.select(nodes[i]);\n let currentY = -d.height / 2 + 40;\n\n // Primary keys\n d.primaryKeys.forEach((pk) => {\n const fieldGroup = group.append('g').attr('class', 'field-group primary-key');\n\n fieldGroup\n .append('rect')\n .attr('class', 'field-bg')\n .attr('x', -d.width / 2 + 2)\n .attr('y', currentY - 15)\n .attr('width', d.width - 4)\n .attr('height', 18)\n .attr('fill', colors.primaryKeyBackground);\n\n fieldGroup\n .append('text')\n .attr('class', 'field-icon')\n .attr('x', -d.width / 2 + 8)\n .attr('y', currentY - 2)\n .attr('font-size', '10px')\n .attr('fill', colors.primaryKeyText)\n .text('🔑');\n\n fieldGroup\n .append('text')\n .attr('class', 'field-name')\n .attr('x', -d.width / 2 + 25)\n .attr('y', currentY - 2)\n .attr('font-size', '11px')\n .attr('font-weight', 'bold')\n .attr('fill', colors.primaryKeyText)\n .text(pk.name || '');\n\n currentY += 20;\n });\n\n // Foreign keys\n d.foreignKeys.forEach((fk) => {\n const fieldGroup = group.append('g').attr('class', 'field-group foreign-key');\n\n fieldGroup\n .append('rect')\n .attr('class', 'field-bg')\n .attr('x', -d.width / 2 + 2)\n .attr('y', currentY - 15)\n .attr('width', d.width - 4)\n .attr('height', 18)\n .attr('fill', colors.foreignKeyBackground);\n\n fieldGroup\n .append('text')\n .attr('class', 'field-icon')\n .attr('x', -d.width / 2 + 8)\n .attr('y', currentY - 2)\n .attr('font-size', '10px')\n .attr('fill', colors.foreignKeyText)\n .text('🔗');\n\n fieldGroup\n .append('text')\n .attr('class', 'field-name')\n .attr('x', -d.width / 2 + 25)\n .attr('y', currentY - 2)\n .attr('font-size', '11px')\n .attr('fill', colors.foreignKeyText)\n .text(fk.name || '');\n\n currentY += 20;\n });\n });\n }\n\n private attachNodeEventHandlers(\n nodeGroup: d3.Selection<SVGGElement, InternalNode, SVGGElement, unknown>\n ): void {\n nodeGroup\n .on('click', (event: MouseEvent, d: InternalNode) => {\n if (this.readOnly) return;\n event.stopPropagation();\n\n // Emit click event with cancel pattern\n const clickEvent: ERDNodeClickEvent = {\n node: d.node,\n mouseEvent: event,\n cancel: false\n };\n this.nodeClick.emit(clickEvent);\n\n if (clickEvent.cancel) {\n return;\n }\n\n // Handle selection\n if (this.selectedNodeId === d.node.id) {\n this.nodeDeselected.emit();\n } else {\n this.nodeSelected.emit(d.node);\n\n // Auto-zoom if node is too small\n if (this.svg) {\n const currentTransform = d3.zoomTransform(this.svg.node()!);\n const currentRenderedWidth = d.width * currentTransform.k;\n if (currentRenderedWidth < 20) {\n this.zoomToNode(d.node.id);\n }\n }\n }\n\n this.updateSelectionHighlighting();\n })\n .on('dblclick', (event: MouseEvent, d: InternalNode) => {\n event.stopPropagation();\n\n const dblClickEvent: ERDNodeDoubleClickEvent = {\n node: d.node,\n mouseEvent: event,\n cancel: false\n };\n this.nodeDoubleClick.emit(dblClickEvent);\n })\n .on('mouseenter', (event: MouseEvent, d: InternalNode) => {\n const relatedInfo = this.getRelatedNodes(d.node.id, 1);\n const relatedNodes = relatedInfo.map(r => r.node);\n\n const hoverEvent: ERDNodeHoverEvent = {\n node: d.node,\n mouseEvent: event,\n relatedNodes,\n position: { x: event.clientX, y: event.clientY }\n };\n this.nodeHover.emit(hoverEvent);\n })\n .on('mouseleave', (_event: MouseEvent, d: InternalNode) => {\n this.nodeHoverEnd.emit(d.node);\n })\n .on('contextmenu', (event: MouseEvent, d: InternalNode) => {\n const contextEvent: ERDNodeContextMenuEvent = {\n node: d.node,\n mouseEvent: event,\n cancel: false,\n position: { x: event.clientX, y: event.clientY }\n };\n this.nodeContextMenu.emit(contextEvent);\n\n if (contextEvent.cancel) {\n event.preventDefault();\n }\n });\n }\n\n private attachLinkEventHandlers(\n linkGroup: d3.Selection<SVGGElement, InternalLink, SVGGElement, unknown>\n ): void {\n linkGroup\n .on('click', (event: MouseEvent, d: InternalLink) => {\n event.stopPropagation();\n\n const sourceNode = (d.source as InternalNode).node;\n const targetNode = (d.target as InternalNode).node;\n\n const link: ERDLink = {\n sourceNodeId: sourceNode.id,\n targetNodeId: targetNode.id,\n sourceField: d.sourceField,\n targetField: d.targetField,\n isSelfReference: d.isSelfReference\n };\n\n const clickEvent: ERDLinkClickEvent = {\n link,\n sourceNode,\n targetNode,\n mouseEvent: event,\n cancel: false\n };\n this.linkClick.emit(clickEvent);\n })\n .on('mouseenter', (event: MouseEvent, d: InternalLink) => {\n const sourceNode = (d.source as InternalNode).node;\n const targetNode = (d.target as InternalNode).node;\n\n const link: ERDLink = {\n sourceNodeId: sourceNode.id,\n targetNodeId: targetNode.id,\n sourceField: d.sourceField,\n targetField: d.targetField,\n isSelfReference: d.isSelfReference\n };\n\n const hoverEvent: ERDLinkHoverEvent = {\n link,\n sourceNode,\n targetNode,\n mouseEvent: event,\n position: { x: event.clientX, y: event.clientY }\n };\n this.linkHover.emit(hoverEvent);\n })\n .on('mouseleave', (_event: MouseEvent, d: InternalLink) => {\n const sourceNode = (d.source as InternalNode).node;\n const targetNode = (d.target as InternalNode).node;\n\n const link: ERDLink = {\n sourceNodeId: sourceNode.id,\n targetNodeId: targetNode.id,\n sourceField: d.sourceField,\n targetField: d.targetField,\n isSelfReference: d.isSelfReference\n };\n this.linkHoverEnd.emit(link);\n })\n .on('contextmenu', (event: MouseEvent, d: InternalLink) => {\n const sourceNode = (d.source as InternalNode).node;\n const targetNode = (d.target as InternalNode).node;\n\n const link: ERDLink = {\n sourceNodeId: sourceNode.id,\n targetNodeId: targetNode.id,\n sourceField: d.sourceField,\n targetField: d.targetField,\n isSelfReference: d.isSelfReference\n };\n\n const contextEvent: ERDLinkContextMenuEvent = {\n link,\n sourceNode,\n targetNode,\n mouseEvent: event,\n cancel: false,\n position: { x: event.clientX, y: event.clientY }\n };\n this.linkContextMenu.emit(contextEvent);\n\n if (contextEvent.cancel) {\n event.preventDefault();\n }\n });\n }\n\n private updatePositions(\n link: d3.Selection<SVGGElement, InternalLink, SVGGElement, unknown>,\n nodeGroup: d3.Selection<SVGGElement, InternalNode, SVGGElement, unknown>\n ): void {\n const usesDagre = this.usesDagreLayout();\n\n // Update link paths\n link.select('path').attr('d', (d) => {\n const source = d.source as InternalNode;\n const target = d.target as InternalNode;\n\n if (d.isSelfReference) {\n // Create a larger loop that goes around the bottom of the entity\n // Start from right side, loop down and around, return to left side\n const startX = source.x! + source.width / 2; // Right edge center\n const startY = source.y!;\n const endY = source.y! + source.height / 2; // Bottom edge Y\n const loopExtent = 60; // How far out the loop extends\n\n // Use a path that goes: right edge -> curves down-right -> bottom -> curves up to bottom edge\n return `M ${startX} ${startY}\n C ${startX + loopExtent} ${startY},\n ${startX + loopExtent} ${endY + loopExtent},\n ${source.x!} ${endY + loopExtent}\n C ${source.x! - loopExtent} ${endY + loopExtent},\n ${source.x! - source.width / 2 - loopExtent / 2} ${endY},\n ${source.x! - source.width / 2} ${endY}`;\n }\n\n // Use dagre edge points if available (provides cleaner orthogonal paths)\n if (usesDagre && d.points && d.points.length >= 2) {\n return this.createPathFromDagrePoints(d.points);\n }\n\n // Fallback to manual orthogonal path\n const sourcePoint = this.getSourceConnectionPoint(source, d.sourceField);\n const targetPoint = this.getTargetConnectionPoint(target, d.targetField);\n return this.createOrthogonalPath(sourcePoint, targetPoint);\n });\n\n // Update link labels and their background boxes\n link.select('text').attr('transform', (d) => {\n const source = d.source as InternalNode;\n const target = d.target as InternalNode;\n\n if (d.isSelfReference) {\n // Position label at the bottom of the loop (below the entity)\n const loopExtent = 60;\n return `translate(${source.x!}, ${source.y! + source.height / 2 + loopExtent + 8})`;\n }\n\n // Use midpoint of dagre edge points if available\n if (usesDagre && d.points && d.points.length >= 2) {\n const midIndex = Math.floor(d.points.length / 2);\n const midPoint = d.points[midIndex];\n return `translate(${midPoint.x}, ${midPoint.y})`;\n }\n\n // Fallback to midpoint between nodes\n const midX = (source.x! + target.x!) / 2;\n const midY = (source.y! + target.y!) / 2;\n return `translate(${midX}, ${midY - 8})`;\n });\n\n // Update label background rects to match text size and position\n link.each(function() {\n const group = d3.select(this);\n const textEl = group.select('text.link-label').node() as SVGTextElement | null;\n const bgRect = group.select('rect.link-label-bg');\n\n if (textEl && !bgRect.empty()) {\n const bbox = textEl.getBBox();\n const padding = 3;\n\n // Get the transform from the text element\n const transform = group.select('text.link-label').attr('transform');\n\n bgRect\n .attr('x', bbox.x - padding)\n .attr('y', bbox.y - padding)\n .attr('width', bbox.width + padding * 2)\n .attr('height', bbox.height + padding * 2)\n .attr('transform', transform);\n }\n });\n\n // Update node positions\n nodeGroup.attr('transform', (d) => `translate(${d.x},${d.y})`);\n }\n\n // ============================================================================\n // GEOMETRY HELPERS\n // ============================================================================\n\n private getSourceConnectionPoint(sourceNode: InternalNode, field?: ERDField): { x: number; y: number } {\n let connectY = sourceNode.y!;\n\n if (field) {\n const fkIndex = sourceNode.foreignKeys.findIndex((fk) => fk.id === field.id);\n if (fkIndex >= 0) {\n const fieldY = -sourceNode.height / 2 + 40 + sourceNode.primaryKeys.length * 20 + fkIndex * 20;\n connectY = sourceNode.y! + fieldY + 10;\n } else {\n // Check if the field is a primary key that also serves as a foreign key (IS-A pattern)\n const pkIndex = sourceNode.primaryKeys.findIndex((pk) => pk.id === field.id);\n if (pkIndex >= 0) {\n const fieldY = -sourceNode.height / 2 + 40 + pkIndex * 20;\n connectY = sourceNode.y! + fieldY + 10;\n }\n }\n }\n\n return {\n x: sourceNode.x! + sourceNode.width / 2,\n y: connectY,\n };\n }\n\n private getTargetConnectionPoint(targetNode: InternalNode, targetField?: ERDField): { x: number; y: number } {\n let connectY = targetNode.y! - targetNode.height / 2 + 40;\n\n if (targetField && targetField.isPrimaryKey) {\n const pkIndex = targetNode.primaryKeys.findIndex((pk) => pk.id === targetField.id);\n if (pkIndex >= 0) {\n const fieldY = -targetNode.height / 2 + 40 + pkIndex * 20;\n connectY = targetNode.y! + fieldY + 10;\n }\n }\n\n return {\n x: targetNode.x! - targetNode.width / 2,\n y: connectY,\n };\n }\n\n private createOrthogonalPath(source: { x: number; y: number }, target: { x: number; y: number }): string {\n const dx = target.x - source.x;\n let midX: number;\n\n if (dx > 0) {\n midX = source.x + dx * 0.7;\n } else {\n midX = source.x + Math.max(dx * 0.3, -50);\n }\n\n return `M ${source.x} ${source.y}\n L ${midX} ${source.y}\n L ${midX} ${target.y}\n L ${target.x} ${target.y}`;\n }\n\n /**\n * Creates an SVG path string from dagre's edge points.\n * Dagre provides an array of points for each edge that forms a clean orthogonal path.\n * @param points Array of {x, y} coordinates from dagre layout\n * @returns SVG path string\n */\n private createPathFromDagrePoints(points: Array<{ x: number; y: number }>): string {\n if (!points || points.length < 2) {\n return '';\n }\n\n // Start with Move to first point\n let path = `M ${points[0].x} ${points[0].y}`;\n\n // Add Line to each subsequent point\n for (let i = 1; i < points.length; i++) {\n path += ` L ${points[i].x} ${points[i].y}`;\n }\n\n return path;\n }\n\n private screenToDiagramCoords(screenX: number, screenY: number): { x: number; y: number } {\n if (!this.svg) return { x: 0, y: 0 };\n\n const svgNode = this.svg.node();\n if (!svgNode) return { x: 0, y: 0 };\n\n const rect = svgNode.getBoundingClientRect();\n const transform = d3.zoomTransform(svgNode);\n\n return {\n x: (screenX - rect.left - transform.x) / transform.k,\n y: (screenY - rect.top - transform.y) / transform.k\n };\n }\n\n // ============================================================================\n // HIGHLIGHTING\n // ============================================================================\n\n private clearAllHighlighting(): void {\n if (!this.svg) return;\n\n this.svg.selectAll('.node')\n .classed('selected', false)\n .classed('highlighted', false)\n .classed('relationship-connected', false)\n .classed('entity-connections-highlighted', false);\n\n this.svg.selectAll('.entity-rect')\n .classed('highlighted', false)\n .classed('relationship-highlighted', false)\n .classed('connection-highlighted', false)\n .style('stroke', this.mergedConfig.colors?.nodeBorder || '#333')\n .style('stroke-width', '2px')\n .style('filter', null);\n\n this.svg.selectAll('.link-group')\n .classed('highlighted', false);\n\n this.svg.selectAll('.link')\n .classed('highlighted', false);\n\n this.svg.selectAll('.link-label')\n .classed('highlighted', false);\n }\n\n private updateSelectionHighlighting(): void {\n if (!this.svg) return;\n\n // Clear previous selection styling\n this.svg.selectAll('.node')\n .classed('selected', false)\n .select('.entity-rect')\n .style('stroke', this.mergedConfig.colors?.nodeBorder || '#333')\n .style('stroke-width', '2px')\n .style('filter', null);\n\n if (this.selectedNodeId) {\n const selectedColor = this.mergedConfig.colors?.selectedBorder || '#4CAF50';\n\n this.svg.selectAll('.node')\n .filter((d: unknown) => (d as InternalNode).id === this.selectedNodeId)\n .classed('selected', true)\n .select('.entity-rect')\n .style('stroke', selectedColor)\n .style('stroke-width', '4px')\n .style('filter', `drop-shadow(0 0 8px ${selectedColor}80)`);\n }\n }\n\n private updateHighlighting(): void {\n if (!this.svg) return;\n\n const highlightColor = this.mergedConfig.colors?.highlightBorder || '#ff9800';\n const highlightSet = new Set(this.highlightedNodeIds);\n\n this.svg.selectAll('.node')\n .classed('highlighted', (d: unknown) => highlightSet.has((d as InternalNode).id))\n .filter((d: unknown) => highlightSet.has((d as InternalNode).id))\n .select('.entity-rect')\n .style('stroke', highlightColor)\n .style('stroke-width', '3px')\n .style('filter', `drop-shadow(0 0 6px ${highlightColor}80)`);\n }\n\n private emitStateChange(): void {\n const state = this.getState();\n this.stateChange.emit(state);\n }\n\n // ============================================================================\n // DRAG HANDLERS\n // ============================================================================\n\n private dragstarted(event: d3.D3DragEvent<SVGGElement, InternalNode, InternalNode>, d: InternalNode): void {\n if (this.isLayoutFrozen) return;\n\n const dragEvent: ERDNodeDragEvent = {\n node: d.node,\n startPosition: { x: d.x || 0, y: d.y || 0 },\n currentPosition: { x: d.x || 0, y: d.y || 0 },\n cancel: false\n };\n this.nodeDragStart.emit(dragEvent);\n\n if (dragEvent.cancel) return;\n\n if (!event.active && this.simulation) {\n this.simulation.alphaTarget(0.3).restart();\n }\n d.fx = d.x;\n d.fy = d.y;\n }\n\n private dragged(event: d3.D3DragEvent<SVGGElement, InternalNode, InternalNode>, d: InternalNode): void {\n if (this.isLayoutFrozen) return;\n\n d.fx = event.x;\n d.fy = event.y;\n }\n\n private dragended(event: d3.D3DragEvent<SVGGElement, InternalNode, InternalNode>, d: InternalNode): void {\n if (this.isLayoutFrozen) return;\n\n const dragEvent: ERDNodeDragEvent = {\n node: d.node,\n startPosition: { x: 0, y: 0 }, // Start position not tracked in drag\n currentPosition: { x: d.x || 0, y: d.y || 0 },\n cancel: false\n };\n this.nodeDragEnd.emit(dragEvent);\n\n if (!event.active && this.simulation) {\n this.simulation.alphaTarget(0);\n }\n d.fx = null;\n d.fy = null;\n }\n}\n","<div class=\"erd-section\">\n @if (showHeader) {\n <div class=\"section-header\">\n <h3>{{ headerTitle }}</h3>\n <div class=\"erd-controls\">\n <button class=\"control-btn\" (click)=\"zoomIn()\" title=\"Zoom In\">\n <span class=\"fa-solid fa-search-plus\"></span>\n </button>\n <button class=\"control-btn\" (click)=\"zoomOut()\" title=\"Zoom Out\">\n <span class=\"fa-solid fa-search-minus\"></span>\n </button>\n <button class=\"control-btn\" (click)=\"resetZoom()\" title=\"Reset Zoom\">\n <span class=\"fa-solid fa-expand\"></span>\n </button>\n <button class=\"control-btn\" (click)=\"refresh(); refreshRequested.emit()\" title=\"Refresh Diagram\">\n <span class=\"fa-solid fa-refresh\"></span>\n </button>\n </div>\n </div>\n }\n <div class=\"erd-container\" #erdContainer>\n @if (isRefreshing) {\n <div class=\"loading-overlay\">\n <div class=\"loading-content\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">Loading diagram...</div>\n </div>\n </div>\n }\n </div>\n</div>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mj-entity-erd.component.js","sourceRoot":"","sources":["../../../src/lib/components/mj-entity-erd.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,YAAY,EAGZ,SAAS,EACT,uBAAuB,EACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAc,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAS9D,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;;;AAqCxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AA2BH,MAAM,OAAO,oBAAoB;IACC,UAAU,CAAuB;IAEjE,+EAA+E;IAC/E,gBAAgB;IAChB,+EAA+E;IAE/E;;;;;;;;;;;;;OAaG;IACM,QAAQ,GAAiB,EAAE,CAAC;IAErC;;;;OAIG;IACM,WAAW,CAAgB;IAEpC;;;;OAIG;IACM,gBAAgB,GAAkB,IAAI,CAAC;IAEhD;;OAEG;IACM,oBAAoB,GAAa,EAAE,CAAC;IAE7C;;;OAGG;IACM,aAAa,GAAkB,IAAI,CAAC;IAE7C;;OAEG;IACM,UAAU,GAAG,CAAC,CAAC;IAExB,+EAA+E;IAC/E,gCAAgC;IAChC,+EAA+E;IAE/E;;;;;;;OAOG;IACM,KAAK,GAAG,CAAC,CAAC;IAEnB;;;OAGG;IACM,eAAe,GAAG,IAAI,CAAC;IAEhC;;;OAGG;IACM,eAAe,GAAG,IAAI,CAAC;IAEhC,+EAA+E;IAC/E,yBAAyB;IACzB,+EAA+E;IAE/E;;OAEG;IACM,MAAM,GAAc,EAAE,CAAC;IAEhC;;;OAGG;IACM,UAAU,GAAG,IAAI,CAAC;IAE3B;;OAEG;IACM,WAAW,GAAG,6BAA6B,CAAC;IAErD;;OAEG;IACM,YAAY,GAAG,KAAK,CAAC;IAE9B;;OAEG;IACM,QAAQ,GAAG,KAAK,CAAC;IAE1B,+EAA+E;IAC/E,UAAU;IACV,+EAA+E;IAE/E;;;OAGG;IACO,cAAc,GAAG,IAAI,YAAY,EAAuB,CAAC;IAEnE;;OAEG;IACO,gBAAgB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAEtD;;;OAGG;IACO,iBAAiB,GAAG,IAAI,YAAY,EAAuB,CAAC;IAEtE;;;OAGG;IACO,UAAU,GAAG,IAAI,YAAY,EAAyB,CAAC;IAEjE;;;OAGG;IACO,UAAU,GAAG,IAAI,YAAY,EAAgB,CAAC;IAExD;;;OAGG;IACO,WAAW,GAAG,IAAI,YAAY,EAAY,CAAC;IAErD;;OAEG;IACO,gBAAgB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAEtD,+EAA+E;IAC/E,iBAAiB;IACjB,+EAA+E;IAE/E,yBAAyB;IACzB,QAAQ,GAAc,EAAE,CAAC;IAEjB,SAAS,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEnC,+EAA+E;IAC/E,YAAY;IACZ,+EAA+E;IAE/E,WAAW,CAAC,OAAsB;QAChC,gEAAgE;QAChE,IACE,OAAO,CAAC,UAAU,CAAC;YACnB,OAAO,CAAC,aAAa,CAAC;YACtB,OAAO,CAAC,OAAO,CAAC;YAChB,OAAO,CAAC,iBAAiB,CAAC;YAC1B,OAAO,CAAC,iBAAiB,CAAC,EAC1B,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,oBAAoB;IACpB,+EAA+E;IAEvE,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,oDAAoD;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;QAEhE,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE;YACrD,WAAW;YACX,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,qEAAqE;QACrE,oDAAoD;QACpD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,+EAA+E;IAC/E,iBAAiB;IACjB,+EAA+E;IAE/E,WAAW,CAAC,MAAyB;QACnC,0CAA0C;QAC1C,wCAAwC;IAC1C,CAAC;IAED,iBAAiB,CAAC,KAA8B;QAC9C,MAAM,MAAM,GAAG,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,sEAAsE;YACtE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,UAAU,EAAE,cAAc;gBAC1B,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,cAAc,CAAC,IAAa;QAC1B,MAAM,MAAM,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,YAAY,CAAC,KAAmB;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,KAAe;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,+EAA+E;IAC/E,iDAAiD;IACjD,+EAA+E;IAE/E;;OAEG;IACI,MAAM;QACX,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,SAAS;QACd,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,OAAgB;QAC/B,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,QAAgB,EAAE,KAAc;QAClD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;IAC7C,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,KAAwB,EAAE,gBAA0B;QAClE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACI,aAAa;QAClB,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC;IACnC,CAAC;8GAlUU,oBAAoB;6DAApB,oBAAoB;2BACpB,mBAAmB;;;;;YAvB5B,yCAiB4C;YAA1C,AADA,AADA,AADA,AADA,AADA,AADA,uHAAa,uBAAmB,IAAC,sHACd,6BAAyB,IAAC,gHAC7B,0BAAsB,IAAC,8GACrB,sBAAkB,IAAC,4GACvB,wBAAoB,IAAC,8GACpB,yBAAqB,IAAC,kHACjB,wBAAoB,IAAC;YAC3C,iBAAiB;;YARf,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,oCAAkB,wCACiB,gDACQ,kCACd,8BACJ,sBACR,8BACQ,gCACE,kCACE,0BACR;;;iFAYd,oBAAoB;cA1BhC,SAAS;eAAC;gBACT,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,eAAe;gBACzB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;GAoBT;gBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;aAChD;;kBAEE,SAAS;mBAAC,mBAAmB;;kBAoB7B,KAAK;;kBAOL,KAAK;;kBAOL,KAAK;;kBAKL,KAAK;;kBAML,KAAK;;kBAKL,KAAK;;kBAcL,KAAK;;kBAML,KAAK;;kBAML,KAAK;;kBASL,KAAK;;kBAML,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAUL,MAAM;;kBAKN,MAAM;;kBAMN,MAAM;;kBAMN,MAAM;;kBAMN,MAAM;;kBAMN,MAAM;;kBAKN,MAAM;;kFAvJI,oBAAoB"}
|
|
1
|
+
{"version":3,"file":"mj-entity-erd.component.js","sourceRoot":"","sources":["../../../src/lib/components/mj-entity-erd.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { EntityInfo, Metadata } from '@memberjunction/core';\nimport { ERDDiagramComponent } from './erd-diagram.component';\nimport {\n ERDNode,\n ERDConfig,\n ERDState,\n ERDNodeClickEvent,\n ERDNodeDoubleClickEvent,\n ERDZoomEvent\n} from '../interfaces/erd-types';\nimport {\n buildERDDataFromEntities,\n getOriginalEntityFromERDNode\n} from '../utils/entity-to-erd-adapter';\n\n/**\n * Event emitted when an entity is selected in the ERD.\n * Set `cancel = true` in your handler to prevent default behavior.\n */\nexport interface EntitySelectedEvent {\n /** The selected EntityInfo */\n entity: EntityInfo;\n /** The corresponding ERD node */\n node: ERDNode;\n /**\n * Set to true to cancel default behavior.\n * Default behavior: updates internal selection state.\n */\n cancel?: boolean;\n}\n\n/**\n * Event emitted when requesting to open an entity record.\n * Set `cancel = true` in your handler to prevent default behavior.\n */\nexport interface OpenEntityRecordEvent {\n /** Entity name for the record */\n EntityName: string;\n /** Record ID to open */\n RecordID: string;\n /** The EntityInfo being opened */\n entity: EntityInfo;\n /**\n * Set to true to cancel default behavior.\n * Default behavior: none (just emits the event).\n * Container is expected to handle navigation.\n */\n cancel?: boolean;\n}\n\n/**\n * Higher-level MemberJunction Entity ERD component that provides a simplified API\n * for displaying entity relationship diagrams using EntityInfo objects.\n *\n * This component wraps the generic `ERDDiagramComponent` and handles the transformation\n * of MemberJunction EntityInfo objects to the generic ERD format automatically.\n *\n * ## Key Features\n *\n * - **Simple Input**: Just pass `EntityInfo[]` - no manual transformation needed\n * - **Auto-Discovery**: Automatically discovers and displays relationships\n * - **Configurable Depth**: Control how many relationship hops to include\n * - **State Control**: Parent controls selection/state - component doesn't persist\n *\n * ## Usage Modes\n *\n * ### Single Entity Mode (Entity Form)\n * Show one entity and its immediate relationships:\n *\n * ```html\n * <mj-entity-erd\n * [entities]=\"[currentEntity]\"\n * [selectedEntityId]=\"currentEntity.ID\"\n * [depth]=\"1\"\n * (openRecord)=\"onOpenRecord($event)\">\n * </mj-entity-erd>\n * ```\n *\n * ### Multi-Entity Mode (Schema Explorer)\n * Show multiple entities with persistence handled by parent:\n *\n * ```html\n * <mj-entity-erd\n * [entities]=\"filteredEntities\"\n * [selectedEntityId]=\"savedSelectedId\"\n * [depth]=\"savedDepth\"\n * (entitySelected)=\"onEntitySelected($event); saveState()\"\n * (stateChange)=\"onStateChange($event); saveState()\"\n * (openRecord)=\"onOpenRecord($event)\">\n * </mj-entity-erd>\n * ```\n *\n * ## Important Design Decisions\n *\n * - **No State Persistence**: This component does NOT persist user state (selection, zoom, etc.).\n * The parent is responsible for saving/restoring state via the inputs and events.\n * - **No Filtering**: The caller filters entities before passing them. This keeps the component simple.\n * - **Controlled Selection**: Selection is controlled via `selectedEntityId` input. The component\n * emits `entitySelected` when user clicks, but parent decides what to do.\n *\n * @see ERDDiagramComponent for the underlying generic component\n */\n@Component({\n standalone: false,\n selector: 'mj-entity-erd',\n template: `\n <mj-erd-diagram\n [nodes]=\"erdNodes\"\n [selectedNodeId]=\"selectedEntityId\"\n [highlightedNodeIds]=\"highlightedEntityIds\"\n [focusNodeId]=\"focusEntityId\"\n [focusDepth]=\"focusDepth\"\n [config]=\"config\"\n [showHeader]=\"showHeader\"\n [headerTitle]=\"headerTitle\"\n [isRefreshing]=\"isRefreshing\"\n [readOnly]=\"readOnly\"\n (nodeClick)=\"onNodeClick($event)\"\n (nodeDoubleClick)=\"onNodeDoubleClick($event)\"\n (nodeSelected)=\"onNodeSelected($event)\"\n (nodeDeselected)=\"onNodeDeselected()\"\n (zoomChange)=\"onZoomChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (refreshRequested)=\"onRefreshRequested()\">\n </mj-erd-diagram>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJEntityERDComponent implements OnChanges {\n @ViewChild(ERDDiagramComponent) erdDiagram!: ERDDiagramComponent;\n\n // ============================================================================\n // INPUTS - Data\n // ============================================================================\n\n /**\n * The entities to display in the ERD.\n * Pass one or more EntityInfo objects. The component will automatically\n * discover and display related entities based on the `depth` setting.\n *\n * @example\n * ```typescript\n * // Single entity\n * [entities]=\"[currentEntity]\"\n *\n * // Multiple entities (schema view)\n * [entities]=\"filteredEntities\"\n * ```\n */\n @Input() entities: EntityInfo[] = [];\n\n /**\n * All entities in the system for relationship discovery.\n * If not provided, uses Metadata.Entities automatically.\n * This is used to look up related entities when building the ERD.\n */\n @Input() allEntities?: EntityInfo[];\n\n /**\n * ID of the currently selected entity.\n * Controlled by parent - the component emits selection events but doesn't\n * manage selection state internally.\n */\n @Input() selectedEntityId: string | null = null;\n\n /**\n * IDs of entities to highlight (in addition to selected).\n */\n @Input() highlightedEntityIds: string[] = [];\n\n /**\n * ID of entity to focus on (shows only this entity and related up to depth).\n * If null, shows all provided entities.\n */\n @Input() focusEntityId: string | null = null;\n\n /**\n * Focus depth when focusEntityId is set.\n */\n @Input() focusDepth = 1;\n\n // ============================================================================\n // INPUTS - Relationship Options\n // ============================================================================\n\n /**\n * Number of relationship hops to include when auto-discovering related entities.\n * - `0`: Show only the provided entities (no auto-discovery)\n * - `1`: Show provided entities + directly related entities (default)\n * - `2+`: Show entities within N relationship hops\n *\n * @default 1\n */\n @Input() depth = 1;\n\n /**\n * Include incoming relationships (entities that reference these entities).\n * @default true\n */\n @Input() includeIncoming = true;\n\n /**\n * Include outgoing relationships (entities these reference via FK).\n * @default true\n */\n @Input() includeOutgoing = true;\n\n // ============================================================================\n // INPUTS - Configuration\n // ============================================================================\n\n /**\n * Configuration options passed to the underlying ERD component.\n */\n @Input() config: ERDConfig = {};\n\n /**\n * Whether to show the header bar with controls.\n * @default true\n */\n @Input() showHeader = true;\n\n /**\n * Title for the header bar.\n */\n @Input() headerTitle = 'Entity Relationship Diagram';\n\n /**\n * Whether the diagram is in a loading/refreshing state.\n */\n @Input() isRefreshing = false;\n\n /**\n * Whether the diagram is read-only (no selection/dragging).\n */\n @Input() readOnly = false;\n\n // ============================================================================\n // OUTPUTS\n // ============================================================================\n\n /**\n * Emitted when an entity is selected by clicking.\n * The parent should update `selectedEntityId` in response.\n */\n @Output() entitySelected = new EventEmitter<EntitySelectedEvent>();\n\n /**\n * Emitted when the selection is cleared.\n */\n @Output() entityDeselected = new EventEmitter<void>();\n\n /**\n * Emitted when an entity is double-clicked.\n * Typically used to open the entity record.\n */\n @Output() entityDoubleClick = new EventEmitter<EntitySelectedEvent>();\n\n /**\n * Emitted when requesting to open an entity record.\n * This is the standard MJ pattern for navigation.\n */\n @Output() openRecord = new EventEmitter<OpenEntityRecordEvent>();\n\n /**\n * Emitted when zoom/pan changes.\n * Parent can use this for state persistence.\n */\n @Output() zoomChange = new EventEmitter<ERDZoomEvent>();\n\n /**\n * Emitted when diagram state changes (selection, zoom, etc.).\n * Parent can use this for state persistence.\n */\n @Output() stateChange = new EventEmitter<ERDState>();\n\n /**\n * Emitted when user requests a refresh via the header button.\n */\n @Output() refreshRequested = new EventEmitter<void>();\n\n // ============================================================================\n // INTERNAL STATE\n // ============================================================================\n\n /** Computed ERD nodes */\n erdNodes: ERDNode[] = [];\n\n private _metadata = new Metadata();\n\n // ============================================================================\n // LIFECYCLE\n // ============================================================================\n\n ngOnChanges(changes: SimpleChanges): void {\n // Rebuild ERD data when entities or relationship options change\n if (\n changes['entities'] ||\n changes['allEntities'] ||\n changes['depth'] ||\n changes['includeIncoming'] ||\n changes['includeOutgoing']\n ) {\n this.buildERDData();\n }\n }\n\n // ============================================================================\n // ERD DATA BUILDING\n // ============================================================================\n\n private buildERDData(): void {\n if (!this.entities || this.entities.length === 0) {\n this.erdNodes = [];\n return;\n }\n\n // Use provided allEntities or fall back to Metadata\n const allEntities = this.allEntities || this._metadata.Entities;\n\n const result = buildERDDataFromEntities(this.entities, {\n allEntities,\n includeIncoming: this.includeIncoming,\n includeOutgoing: this.includeOutgoing,\n depth: this.depth\n });\n\n // Note: Links are derived automatically by the ERD diagram component\n // from the node field relationships (relatedNodeId)\n this.erdNodes = result.nodes;\n }\n\n // ============================================================================\n // EVENT HANDLERS\n // ============================================================================\n\n onNodeClick(_event: ERDNodeClickEvent): void {\n // Let the base component handle the click\n // Selection is handled via nodeSelected\n }\n\n onNodeDoubleClick(event: ERDNodeDoubleClickEvent): void {\n const entity = getOriginalEntityFromERDNode(event.node);\n if (entity) {\n this.entityDoubleClick.emit({ entity, node: event.node });\n // Also emit openRecord for convenience - container handles navigation\n this.openRecord.emit({\n EntityName: 'MJ: Entities',\n RecordID: entity.ID,\n entity\n });\n }\n }\n\n onNodeSelected(node: ERDNode): void {\n const entity = getOriginalEntityFromERDNode(node);\n if (entity) {\n this.entitySelected.emit({ entity, node });\n }\n }\n\n onNodeDeselected(): void {\n this.entityDeselected.emit();\n }\n\n onZoomChange(event: ERDZoomEvent): void {\n this.zoomChange.emit(event);\n }\n\n onStateChange(state: ERDState): void {\n this.stateChange.emit(state);\n }\n\n onRefreshRequested(): void {\n this.refreshRequested.emit();\n }\n\n // ============================================================================\n // PUBLIC API (Delegates to underlying component)\n // ============================================================================\n\n /**\n * Zoom in on the diagram.\n */\n public zoomIn(): void {\n this.erdDiagram?.zoomIn();\n }\n\n /**\n * Zoom out on the diagram.\n */\n public zoomOut(): void {\n this.erdDiagram?.zoomOut();\n }\n\n /**\n * Reset zoom to default.\n */\n public resetZoom(): void {\n this.erdDiagram?.resetZoom();\n }\n\n /**\n * Fit all nodes in view.\n */\n public zoomToFit(padding?: number): void {\n this.erdDiagram?.zoomToFit(padding);\n }\n\n /**\n * Zoom to a specific entity.\n */\n public zoomToEntity(entityId: string, scale?: number): void {\n this.erdDiagram?.zoomToNode(entityId, scale);\n }\n\n /**\n * Get current diagram state for persistence.\n */\n public getState(): ERDState | null {\n return this.erdDiagram?.getState() || null;\n }\n\n /**\n * Restore diagram state.\n */\n public setState(state: Partial<ERDState>, restorePositions?: boolean): void {\n this.erdDiagram?.setState(state, restorePositions);\n }\n\n /**\n * Refresh the diagram.\n */\n public refresh(): void {\n this.buildERDData();\n this.erdDiagram?.refresh();\n }\n\n /**\n * Export diagram as SVG.\n */\n public exportAsSVG(): string {\n return this.erdDiagram?.exportAsSVG() || '';\n }\n\n /**\n * Trigger a resize recalculation. Call this when the container size changes.\n */\n public triggerResize(): void {\n this.erdDiagram?.triggerResize();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-relationship-diagram.module.js","sourceRoot":"","sources":["../../src/lib/entity-relationship-diagram.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,gEAAgE,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAsBH,MAAM,OAAO,+BAA+B;yHAA/B,+BAA+B;4DAA/B,+BAA+B;gEAZxC,YAAY;YACZ,WAAW;YACX,YAAY;;iFAUH,+BAA+B;cArB3C,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,mBAAmB;oBACnB,oBAAoB;oBACpB,sBAAsB;oBACtB,0BAA0B;oBAC1B,qBAAqB;iBACtB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,YAAY;iBACb;gBACD,OAAO,EAAE;oBACP,mBAAmB;oBACnB,oBAAoB;oBACpB,sBAAsB;oBACtB,0BAA0B;oBAC1B,qBAAqB;iBACtB;aACF;;wFACY,+BAA+B,mBAnBxC,mBAAmB;QACnB,oBAAoB;QACpB,sBAAsB;QACtB,0BAA0B;QAC1B,qBAAqB,aAGrB,YAAY;QACZ,WAAW;QACX,YAAY,aAGZ,mBAAmB;QACnB,oBAAoB;QACpB,sBAAsB;QACtB,0BAA0B;QAC1B,qBAAqB"}
|
|
1
|
+
{"version":3,"file":"entity-relationship-diagram.module.js","sourceRoot":"","sources":["../../src/lib/entity-relationship-diagram.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,gEAAgE,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAsBH,MAAM,OAAO,+BAA+B;yHAA/B,+BAA+B;4DAA/B,+BAA+B;gEAZxC,YAAY;YACZ,WAAW;YACX,YAAY;;iFAUH,+BAA+B;cArB3C,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,mBAAmB;oBACnB,oBAAoB;oBACpB,sBAAsB;oBACtB,0BAA0B;oBAC1B,qBAAqB;iBACtB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,YAAY;iBACb;gBACD,OAAO,EAAE;oBACP,mBAAmB;oBACnB,oBAAoB;oBACpB,sBAAsB;oBACtB,0BAA0B;oBAC1B,qBAAqB;iBACtB;aACF;;wFACY,+BAA+B,mBAnBxC,mBAAmB;QACnB,oBAAoB;QACpB,sBAAsB;QACtB,0BAA0B;QAC1B,qBAAqB,aAGrB,YAAY;QACZ,WAAW;QACX,YAAY,aAGZ,mBAAmB;QACnB,oBAAoB;QACpB,sBAAsB;QACtB,0BAA0B;QAC1B,qBAAqB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { LayoutModule } from '@progress/kendo-angular-layout';\n\nimport { ERDDiagramComponent } from './components/erd-diagram.component';\nimport { MJEntityERDComponent } from './components/mj-entity-erd.component';\nimport { EntityDetailsComponent } from './components/entity-details/entity-details.component';\nimport { EntityFilterPanelComponent } from './components/entity-filter-panel/entity-filter-panel.component';\nimport { ERDCompositeComponent } from './components/erd-composite/erd-composite.component';\n\n/**\n * Module for the Entity Relationship Diagram (ERD) visualization components.\n *\n * This module provides a complete suite of components for visualizing and\n * exploring entity relationships:\n *\n * ## Components\n *\n * ### 1. ERDDiagramComponent (`<mj-erd-diagram>`)\n * A generic, reusable ERD component that visualizes entity relationships using\n * D3.js force-directed graphs. It works with any data conforming to the `ERDNode`\n * interface and is completely decoupled from MemberJunction-specific types.\n *\n * ### 2. MJEntityERDComponent (`<mj-entity-erd>`)\n * A higher-level wrapper specifically for MemberJunction. It accepts `EntityInfo[]`\n * directly and handles all the transformation to ERD format automatically.\n *\n * ### 3. EntityDetailsComponent (`<mj-entity-details>`)\n * A detail panel that shows entity information, fields, and relationships when\n * an entity is selected. Designed to work alongside the ERD diagram.\n *\n * ### 4. EntityFilterPanelComponent (`<mj-entity-filter-panel>`)\n * A filter panel for filtering entities by schema, name, status, and base table.\n *\n * ### 5. ERDCompositeComponent (`<mj-erd-composite>`)\n * A complete, ready-to-use ERD exploration interface that combines:\n * - Left panel: Entity filter controls\n * - Center: Interactive ERD diagram\n * - Right panel: Entity details (shown when an entity is selected)\n *\n * ### Choosing Which Component to Use\n *\n * | Use Case | Component |\n * |----------|-----------|\n * | Complete ERD exploration UI | `<mj-erd-composite>` |\n * | ERD diagram with MJ EntityInfo | `<mj-entity-erd>` |\n * | Custom data sources (non-MJ) | `<mj-erd-diagram>` |\n * | Entity detail panel standalone | `<mj-entity-details>` |\n * | Entity filter panel standalone | `<mj-entity-filter-panel>` |\n *\n * @example Using the composite (recommended for dashboards)\n * ```html\n * <mj-erd-composite\n * (userStateChange)=\"saveUserPreferences($event)\"\n * (openRecord)=\"navigateToRecord($event)\">\n * </mj-erd-composite>\n * ```\n *\n * @example Using the MJ wrapper\n * ```html\n * <mj-entity-erd\n * [entities]=\"[currentEntity]\"\n * [selectedEntityId]=\"currentEntity.ID\"\n * [depth]=\"1\"\n * (entitySelected)=\"onEntitySelected($event)\"\n * (openRecord)=\"onOpenRecord($event)\">\n * </mj-entity-erd>\n * ```\n *\n * @example Using the generic component\n * ```html\n * <mj-erd-diagram\n * [nodes]=\"myNodes\"\n * [selectedNodeId]=\"selectedId\"\n * (nodeSelected)=\"onNodeSelected($event)\">\n * </mj-erd-diagram>\n * ```\n */\n@NgModule({\n declarations: [\n ERDDiagramComponent,\n MJEntityERDComponent,\n EntityDetailsComponent,\n EntityFilterPanelComponent,\n ERDCompositeComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n LayoutModule\n ],\n exports: [\n ERDDiagramComponent,\n MJEntityERDComponent,\n EntityDetailsComponent,\n EntityFilterPanelComponent,\n ERDCompositeComponent\n ]\n})\nexport class EntityRelationshipDiagramModule {}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erd-types.js","sourceRoot":"","sources":["../../../src/lib/interfaces/erd-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
1
|
+
{"version":3,"file":"erd-types.js","sourceRoot":"","sources":["../../../src/lib/interfaces/erd-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * Generic ERD Types for the Entity Relationship Diagram component.\n * These types are designed to be framework-agnostic and can work with any data source.\n */\n\n/**\n * Represents a field in an ERD node (entity).\n */\nexport interface ERDField {\n /** Unique identifier for the field */\n id: string;\n /** Display name of the field */\n name: string;\n /** Data type of the field (e.g., 'string', 'int', 'uuid') */\n type?: string;\n /** Whether this field is a primary key */\n isPrimaryKey: boolean;\n /** ID of the related node (for foreign keys) */\n relatedNodeId?: string;\n /** Name of the related node (for display purposes) */\n relatedNodeName?: string;\n /** Name of the field in the related node (for FK relationships) */\n relatedFieldName?: string;\n /** Optional description of the field */\n description?: string;\n /** Whether the field allows null values */\n allowsNull?: boolean;\n /** Default value for the field */\n defaultValue?: string;\n /** Maximum length (for string fields) */\n length?: number;\n /** Precision (for numeric fields) */\n precision?: number;\n /** Scale (for numeric fields) */\n scale?: number;\n /** Whether the field is virtual/computed */\n isVirtual?: boolean;\n /** Whether the field is auto-increment */\n autoIncrement?: boolean;\n /** Possible values for the field (for enums/dropdowns) */\n possibleValues?: ERDFieldValue[];\n /** Additional custom data */\n customData?: Record<string, unknown>;\n}\n\n/**\n * Represents a possible value for an ERD field (enum values, dropdown options, etc.)\n */\nexport interface ERDFieldValue {\n /** Unique identifier for the value */\n id?: string;\n /** The actual value */\n value: string;\n /** Code representation (may differ from value) */\n code?: string;\n /** Description of what this value means */\n description?: string;\n /** Sort order */\n sequence?: number;\n}\n\n/**\n * Represents a node (entity/table) in the ERD.\n */\nexport interface ERDNode {\n /** Unique identifier for the node */\n id: string;\n /** Display name of the node */\n name: string;\n /** Optional schema/namespace name */\n schemaName?: string;\n /** Optional description */\n description?: string;\n /** Status of the node (e.g., 'Active', 'Deprecated') */\n status?: string;\n /** Base table name (if different from display name) */\n baseTable?: string;\n /** All fields in this node */\n fields: ERDField[];\n /** Additional custom data that can be used by the consumer */\n customData?: Record<string, unknown>;\n}\n\n/**\n * Represents a link (relationship) between two nodes in the ERD.\n */\nexport interface ERDLink {\n /** ID of the source node */\n sourceNodeId: string;\n /** ID of the target node */\n targetNodeId: string;\n /** The field that creates this relationship (usually the FK field) */\n sourceField: ERDField;\n /** The field in the target node (usually the PK field) */\n targetField?: ERDField;\n /** Whether this is a self-referencing relationship */\n isSelfReference: boolean;\n /** Relationship type (e.g., 'one-to-many', 'many-to-one') */\n relationshipType?: 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many';\n /** Optional label for the relationship */\n label?: string;\n}\n\n/**\n * Configuration options for the ERD diagram.\n */\nexport interface ERDConfig {\n /** Width of each node box in pixels */\n nodeWidth?: number;\n /** Base height of each node box in pixels */\n nodeBaseHeight?: number;\n /** Height per field in pixels */\n fieldHeight?: number;\n /** Maximum height of a node in pixels */\n maxNodeHeight?: number;\n /** Charge strength for force simulation (negative = repel) */\n chargeStrength?: number;\n /** Link distance for force simulation */\n linkDistance?: number;\n /** Collision radius padding */\n collisionPadding?: number;\n /** Whether to show field details in nodes */\n showFieldDetails?: boolean;\n /** Whether to show relationship labels */\n showRelationshipLabels?: boolean;\n /** Whether to enable node dragging */\n enableDragging?: boolean;\n /** Whether to enable zoom/pan */\n enableZoom?: boolean;\n /** Initial zoom level */\n initialZoom?: number;\n /** Colors for different node states */\n colors?: ERDColorScheme;\n}\n\n/**\n * Color scheme for the ERD diagram.\n */\nexport interface ERDColorScheme {\n /** Background color for node rectangles */\n nodeBackground?: string;\n /** Border color for node rectangles */\n nodeBorder?: string;\n /** Header background color for nodes */\n nodeHeader?: string;\n /** Text color for node headers */\n nodeHeaderText?: string;\n /** Background color for primary key fields */\n primaryKeyBackground?: string;\n /** Text color for primary key fields */\n primaryKeyText?: string;\n /** Background color for foreign key fields */\n foreignKeyBackground?: string;\n /** Text color for foreign key fields */\n foreignKeyText?: string;\n /** Color for relationship links */\n linkColor?: string;\n /** Color for selected nodes */\n selectedBorder?: string;\n /** Color for highlighted nodes */\n highlightBorder?: string;\n /** Color for related nodes (when showing relationships) */\n relatedBorder?: string;\n}\n\n/**\n * Filter configuration for the ERD.\n */\nexport interface ERDFilter {\n /** Filter by schema name */\n schemaName?: string | null;\n /** Filter by node name (search) */\n nodeName?: string;\n /** Filter by node status */\n nodeStatus?: string | null;\n /** Filter by base table name (search) */\n baseTable?: string;\n /** Custom filter function */\n customFilter?: (node: ERDNode) => boolean;\n}\n\n/**\n * Event data for node selection events.\n */\nexport interface ERDNodeSelectionEvent {\n /** The selected node (null if deselected) */\n node: ERDNode | null;\n /** Previous selected node (null if none) */\n previousNode: ERDNode | null;\n /** Whether the consumer can cancel this selection */\n cancel: boolean;\n}\n\n/**\n * Event data for node click events.\n */\nexport interface ERDNodeClickEvent {\n /** The clicked node */\n node: ERDNode;\n /** The mouse event */\n mouseEvent: MouseEvent;\n /** Whether to cancel default behavior (selection) */\n cancel: boolean;\n}\n\n/**\n * Event data for node double-click events.\n */\nexport interface ERDNodeDoubleClickEvent {\n /** The double-clicked node */\n node: ERDNode;\n /** The mouse event */\n mouseEvent: MouseEvent;\n /** Whether to cancel default behavior */\n cancel: boolean;\n}\n\n/**\n * Event data for link click events.\n */\nexport interface ERDLinkClickEvent {\n /** The clicked link */\n link: ERDLink;\n /** Source node */\n sourceNode: ERDNode;\n /** Target node */\n targetNode: ERDNode;\n /** The mouse event */\n mouseEvent: MouseEvent;\n /** Whether to cancel default behavior */\n cancel: boolean;\n}\n\n/**\n * Event data for zoom change events.\n */\nexport interface ERDZoomEvent {\n /** Current zoom level */\n zoomLevel: number;\n /** X translation */\n translateX: number;\n /** Y translation */\n translateY: number;\n}\n\n/**\n * State of the ERD diagram for saving/restoring.\n * Use with `getState()` and `setState()` methods for persistence.\n *\n * @example\n * ```typescript\n * // Save state to localStorage\n * const state = erdComponent.getState();\n * localStorage.setItem('erd-state', JSON.stringify(state));\n *\n * // Restore state\n * const savedState = JSON.parse(localStorage.getItem('erd-state'));\n * erdComponent.setState(savedState);\n * ```\n */\nexport interface ERDState {\n /** ID of the currently selected node */\n selectedNodeId: string | null;\n /** IDs of highlighted nodes */\n highlightedNodeIds: string[];\n /** Current zoom level (1 = 100%) */\n zoomLevel: number;\n /** X translation (pan position) */\n translateX: number;\n /** Y translation (pan position) */\n translateY: number;\n /** Focus node ID (if in focus mode) */\n focusNodeId: string | null;\n /** Focus depth (number of relationship hops to show) */\n focusDepth: number;\n /** Node positions for restoring exact layout */\n nodePositions: Record<string, { x: number; y: number; fx?: number | null; fy?: number | null }>;\n}\n\n/**\n * Event data for node hover events.\n * Emitted when the mouse enters a node.\n */\nexport interface ERDNodeHoverEvent {\n /** The hovered node */\n node: ERDNode;\n /** The mouse event */\n mouseEvent: MouseEvent;\n /** Nodes directly connected to this node via relationships */\n relatedNodes: ERDNode[];\n /** Position for displaying tooltips */\n position: { x: number; y: number };\n}\n\n/**\n * Event data for link hover events.\n * Emitted when the mouse enters a relationship link.\n */\nexport interface ERDLinkHoverEvent {\n /** The hovered link */\n link: ERDLink;\n /** Source node of the relationship */\n sourceNode: ERDNode;\n /** Target node of the relationship */\n targetNode: ERDNode;\n /** The mouse event */\n mouseEvent: MouseEvent;\n /** Position for displaying tooltips */\n position: { x: number; y: number };\n}\n\n/**\n * Event data for context menu events on nodes.\n * Set `cancel = true` to prevent default browser context menu.\n */\nexport interface ERDNodeContextMenuEvent {\n /** The right-clicked node */\n node: ERDNode;\n /** The mouse event */\n mouseEvent: MouseEvent;\n /** Set to true to prevent default context menu */\n cancel: boolean;\n /** Screen position for showing custom context menu */\n position: { x: number; y: number };\n}\n\n/**\n * Event data for context menu events on links.\n * Set `cancel = true` to prevent default browser context menu.\n */\nexport interface ERDLinkContextMenuEvent {\n /** The right-clicked link */\n link: ERDLink;\n /** Source node */\n sourceNode: ERDNode;\n /** Target node */\n targetNode: ERDNode;\n /** The mouse event */\n mouseEvent: MouseEvent;\n /** Set to true to prevent default context menu */\n cancel: boolean;\n /** Screen position for showing custom context menu */\n position: { x: number; y: number };\n}\n\n/**\n * Event data for context menu events on the diagram background.\n * Set `cancel = true` to prevent default browser context menu.\n */\nexport interface ERDDiagramContextMenuEvent {\n /** The mouse event */\n mouseEvent: MouseEvent;\n /** Set to true to prevent default context menu */\n cancel: boolean;\n /** Screen position for showing custom context menu */\n position: { x: number; y: number };\n /** Diagram coordinates of the click */\n diagramPosition: { x: number; y: number };\n}\n\n/**\n * Event data for node drag events.\n * Set `cancel = true` in dragStart to prevent dragging.\n */\nexport interface ERDNodeDragEvent {\n /** The dragged node */\n node: ERDNode;\n /** Position when drag started */\n startPosition: { x: number; y: number };\n /** Current position during drag */\n currentPosition: { x: number; y: number };\n /** Set to true in dragStart to cancel the drag */\n cancel: boolean;\n}\n\n/**\n * Layout algorithm options for the ERD diagram.\n * - 'force': D3 force-directed layout (dynamic, animated)\n * - 'dagre': Dagre hierarchical layout with orthogonal edges (static, clean)\n * - 'horizontal': Left-to-right hierarchical layout using Dagre\n * - 'vertical': Top-to-bottom hierarchical layout using Dagre\n * - 'radial': Radial layout (not yet implemented)\n */\nexport type ERDLayoutAlgorithm = 'force' | 'dagre' | 'horizontal' | 'vertical' | 'radial';\n\n/**\n * Dagre-specific layout configuration options.\n */\nexport interface ERDDagreConfig {\n /** Direction of the graph layout. Default: 'LR' (left-to-right) */\n rankDir?: 'TB' | 'BT' | 'LR' | 'RL';\n /** Horizontal separation between nodes. Default: 50 */\n nodeSep?: number;\n /** Vertical separation between ranks/layers. Default: 100 */\n rankSep?: number;\n /** Separation between different edge paths. Default: 10 */\n edgeSep?: number;\n /** Algorithm for ranking nodes: 'network-simplex', 'tight-tree', 'longest-path'. Default: 'network-simplex' */\n ranker?: 'network-simplex' | 'tight-tree' | 'longest-path';\n /** Alignment of nodes within their rank: 'UL', 'UR', 'DL', 'DR'. Default: undefined (centered) */\n align?: 'UL' | 'UR' | 'DL' | 'DR';\n}\n\n/**\n * Extended configuration options for the ERD diagram.\n * All options are optional with sensible defaults.\n */\nexport interface ERDConfig {\n // ============================================================================\n // Node Sizing\n // ============================================================================\n\n /** Width of each node box in pixels. Default: 180 */\n nodeWidth?: number;\n /** Base height of each node box in pixels (before adding fields). Default: 60 */\n nodeBaseHeight?: number;\n /** Height per field row in pixels. Default: 20 */\n fieldHeight?: number;\n /** Maximum height of a node in pixels. Default: 300 */\n maxNodeHeight?: number;\n\n // ============================================================================\n // Force Simulation\n // ============================================================================\n\n /** Charge strength for force simulation (negative = repel). Default: -800 */\n chargeStrength?: number;\n /** Base distance between linked nodes. Default: 80 */\n linkDistance?: number;\n /** Extra padding for collision detection. Default: 20 */\n collisionPadding?: number;\n\n // ============================================================================\n // Display Options\n // ============================================================================\n\n /** Whether to show field details (PKs, FKs) in nodes. Default: true */\n showFieldDetails?: boolean;\n /** Whether to show relationship labels on links. Default: true */\n showRelationshipLabels?: boolean;\n /** Whether to show the header bar with controls. Default: true */\n showHeader?: boolean;\n /** Whether to show node count in header. Default: true */\n showNodeCount?: boolean;\n /** Whether to show a minimap for navigation. Default: false */\n showMinimap?: boolean;\n /** Whether to show a legend explaining colors. Default: false */\n showLegend?: boolean;\n\n // ============================================================================\n // Interaction Options\n // ============================================================================\n\n /** Enable node dragging. Default: true */\n enableDragging?: boolean;\n /** Enable zoom with mouse wheel. Default: true */\n enableZoom?: boolean;\n /** Enable panning by dragging background. Default: true */\n enablePan?: boolean;\n /** Minimum zoom level. Default: 0.1 */\n minZoom?: number;\n /** Maximum zoom level. Default: 4 */\n maxZoom?: number;\n /** Initial zoom level (1 = 100%). Default: 1 */\n initialZoom?: number;\n /** Enable multi-select with Ctrl+click. Default: false */\n enableMultiSelect?: boolean;\n\n // ============================================================================\n // Animation\n // ============================================================================\n\n /** Duration of zoom/pan animations in milliseconds. Default: 750 */\n animationDuration?: number;\n /** Whether to auto-fit diagram to container on initial load. Default: true */\n fitOnLoad?: boolean;\n /**\n * Skip the D3 force simulation animation and render immediately.\n * When true, the simulation runs to completion synchronously and nodes\n * are positioned immediately without animation.\n * Default: false\n */\n skipAnimation?: boolean;\n\n // ============================================================================\n // Empty State\n // ============================================================================\n\n /** Message to show when no nodes are provided. Default: 'No entities to display' */\n emptyStateMessage?: string;\n /** Icon class for empty state. Default: 'fa-solid fa-diagram-project' */\n emptyStateIcon?: string;\n\n // ============================================================================\n // Layout\n // ============================================================================\n\n /** Layout algorithm to use. Default: 'force' */\n layoutAlgorithm?: ERDLayoutAlgorithm;\n\n /** Dagre-specific layout configuration (only used when layoutAlgorithm is 'dagre', 'horizontal', or 'vertical') */\n dagreConfig?: ERDDagreConfig;\n\n // ============================================================================\n // Colors\n // ============================================================================\n\n /** Color scheme for the diagram */\n colors?: ERDColorScheme;\n}\n\n/**\n * Information about a relationship for highlighting purposes.\n */\nexport interface ERDRelationshipInfo {\n /** The related node */\n node: ERDNode;\n /** The link connecting them */\n link: ERDLink;\n /** Direction of relationship from the perspective of the source node */\n direction: 'outgoing' | 'incoming';\n /** The field creating this relationship */\n field: ERDField;\n}\n"]}
|