@memberjunction/ng-hierarchy-tree 6.1.4 → 6.2.0-edge.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hierarchy-tree.component.js","sourceRoot":"","sources":["../../../src/lib/components/hierarchy-tree.component.ts","../../../src/lib/components/hierarchy-tree.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n ViewChild,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n inject,\n AfterViewInit\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RunView, CompositeKey, EntityInfo, KeyValuePair } from '@memberjunction/core';\nimport { UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { FormNavigationEvent, RecordNavigationEvent } from '@memberjunction/ng-base-forms';\nimport * as d3 from 'd3';\nimport {\n HierarchyTreeConfig,\n HierarchyNodeData,\n HierarchyTreeOrientation,\n HierarchyNodeStyle\n} from '../models/hierarchy-tree.types';\nimport {\n HierarchyNodeEvent,\n CancelableHierarchyNodeEvent,\n ReparentEvent,\n CancelableReparentEvent,\n NodeActionEvent\n} from '../events/hierarchy-tree.events';\n\n/**\n * Modern, interactive, canvas-based visual hierarchy and organizational chart component.\n *\n * Automatically generates a dynamic, zoomable tree visualization for any MemberJunction entity\n * with a self-referencing parent foreign key (such as Corporate Subsidiaries, Product Categories,\n * Committee Governance structures, Tag Taxonomies, and Management Lines).\n *\n * Features:\n * - **Metadata Driven**: Auto-derives primary keys (including composite keys) and parent fields from MJ metadata.\n * - **Interactive Canvas**: D3-powered smooth pan, zoom, auto-fit, and mini-toolbar controls.\n * - **Collapsible Subtrees**: Interactive `[+]` / `[-]` badges with direct and total descendant counts.\n * - **Live Search & Path Expansion**: Instant keyword search that highlights matches and auto-expands ancestor branches.\n * - **Subtree Focus**: Isolate any node as the root of the view with 1-click return to full hierarchy.\n * - **Full Design Token Theming**: Uses `--mj-*` surface, border, typography, and accent tokens.\n * - **Extensive Cancelable Events**: Before/After events for expansion, collapse, reparenting, and navigation.\n *\n * @example\n * ```html\n * <mj-hierarchy-tree\n * [Config]=\"{\n * EntityName: 'MJ_BizApps_Common: Organizations',\n * ParentField: 'ParentID',\n * SubtitleField: 'OrganizationType',\n * DefaultIcon: 'fa-solid fa-building'\n * }\"\n * (Navigate)=\"onNavigate($event)\">\n * </mj-hierarchy-tree>\n * ```\n */\n@Component({\n selector: 'mj-hierarchy-tree',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './hierarchy-tree.component.html',\n styleUrls: ['./hierarchy-tree.component.css']\n})\nexport class HierarchyTreeComponent extends BaseAngularComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n constructor(private cdr?: ChangeDetectorRef) {\n super();\n }\n\n @ViewChild('svgContainer', { static: false }) svgContainerRef!: ElementRef<HTMLDivElement>;\n @ViewChild('svgElement', { static: false }) svgRef!: ElementRef<SVGSVGElement>;\n\n /**\n * Declarative configuration defining the target entity and visual layout properties.\n */\n @Input() Config!: HierarchyTreeConfig;\n\n /**\n * Optional pre-loaded data array. If provided, the component skips the automated\n * `RunView` query and constructs the tree directly from these items.\n */\n @Input() Data?: Record<string, unknown>[];\n\n /**\n * Optional active / selected record ID. When provided, the node is highlighted and all ancestors\n * are expanded so it is visible in full tree context.\n */\n @Input() ActiveRecordID?: string;\n\n /**\n * Primary key ID to focus as the subtree root.\n */\n @Input() FocusRecordID?: string;\n\n /**\n * Controls whether action buttons (Open Record, Focus, Add Child) appear on node cards.\n */\n @Input() AllowNodeActions = true;\n\n /**\n * Emitted when a node is clicked.\n */\n @Output() NodeClick = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted when a node is double-clicked.\n */\n @Output() NodeDoubleClick = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted when a node is selected / set as active.\n */\n @Output() NodeSelect = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted before a node expands its children. Cancelable.\n */\n @Output() BeforeNodeExpand = new EventEmitter<CancelableHierarchyNodeEvent>();\n\n /**\n * Emitted after a node has expanded its children.\n */\n @Output() AfterNodeExpand = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted before a node collapses its children. Cancelable.\n */\n @Output() BeforeNodeCollapse = new EventEmitter<CancelableHierarchyNodeEvent>();\n\n /**\n * Emitted after a node has collapsed its children.\n */\n @Output() AfterNodeCollapse = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted before a node is reparented. Cancelable.\n */\n @Output() BeforeReparent = new EventEmitter<CancelableReparentEvent>();\n\n /**\n * Emitted after a node has been reparented.\n */\n @Output() AfterReparent = new EventEmitter<ReparentEvent>();\n\n /**\n * Emitted when an action button (e.g. Open, Add Child, Focus) is invoked on a node.\n */\n @Output() NodeAction = new EventEmitter<NodeActionEvent>();\n\n /**\n * Optional persisted zoom scale factor to restore.\n */\n @Input() ZoomLevel?: number;\n\n /**\n * Emitted when the user zooms in or out on the hierarchy canvas.\n */\n @Output() ZoomChange = new EventEmitter<number>();\n\n /**\n * Emitted when the user requests navigation to a full entity record.\n */\n @Output() Navigate = new EventEmitter<FormNavigationEvent>();\n\n // --- State ---\n public Loading = false;\n public ErrorMessage: string | null = null;\n public SearchQuery = '';\n public MatchingNodeCount = 0;\n public FocusedNode: HierarchyNodeData | null = null;\n public SelectedNode: HierarchyNodeData | null = null;\n public ShowDetailsDrawer = false;\n\n /** Flattened list of all loaded hierarchy nodes for search and lookup. */\n public AllNodes: HierarchyNodeData[] = [];\n private nodeMap = new Map<string, HierarchyNodeData>();\n\n /** The root nodes of the active view. */\n public RootNodes: HierarchyNodeData[] = [];\n\n /** D3 zoom behavior and SVG group selection */\n private zoomBehavior: d3.ZoomBehavior<SVGSVGElement, unknown> | null = null;\n private svgSelection: d3.Selection<SVGSVGElement, unknown, null, undefined> | null = null;\n private gSelection: d3.Selection<SVGGElement, unknown, null, undefined> | null = null;\n private currentZoomTransform: d3.ZoomTransform = d3.zoomIdentity;\n\n private resizeObserver: ResizeObserver | null = null;\n private entityInfo: EntityInfo | null = null;\n private previousConfigState: Partial<HierarchyTreeConfig> = {};\n\n public ngOnInit(): void {\n this.initializeConfig();\n this.log('[HierarchyTree:ngOnInit] Initializing with Config:', this.Config);\n if (this.Config) {\n this.previousConfigState = {\n EntityName: this.Config.EntityName,\n ExtraFilter: this.Config.ExtraFilter,\n OrderBy: this.Config.OrderBy,\n MaxRows: this.Config.MaxRows,\n ParentField: this.Config.ParentField\n };\n }\n this.loadData();\n }\n\n public ngAfterViewInit(): void {\n this.log('[HierarchyTree:ngAfterViewInit] Initializing D3 Zoom & ResizeObserver. svgRef:', !!this.svgRef?.nativeElement, 'containerRect:', this.svgContainerRef?.nativeElement?.getBoundingClientRect());\n this.initD3Zoom();\n this.setupResizeObserver();\n if (this.AllNodes.length > 0) {\n this.log('[HierarchyTree:ngAfterViewInit] AllNodes already loaded (' + this.AllNodes.length + '), triggering renderTree');\n this.renderTree();\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.log('[HierarchyTree:ngOnChanges] Changes detected:', Object.keys(changes));\n if (changes['Config'] && !changes['Config'].isFirstChange()) {\n this.initializeConfig();\n if (this.hasDataConfigChanged(this.Config)) {\n this.log('[HierarchyTree:ngOnChanges] Data config changed, triggering loadData');\n this.loadData();\n } else {\n const activeId = this.ActiveRecordID || this.Config?.ActiveRecordID;\n this.log('[HierarchyTree:ngOnChanges] Config changed but data identical, updating active node:', activeId);\n this.updateActiveNodeSelection(activeId);\n }\n } else if (changes['ActiveRecordID'] && !changes['ActiveRecordID'].isFirstChange()) {\n this.updateActiveNodeSelection(this.ActiveRecordID);\n } else if (changes['Data'] && !changes['Data'].isFirstChange()) {\n this.buildTreeFromData(this.Data || []);\n } else if (changes['FocusRecordID'] && !changes['FocusRecordID'].isFirstChange()) {\n this.setFocusRoot(this.FocusRecordID);\n } else if (changes['ZoomLevel'] && !changes['ZoomLevel'].isFirstChange() && this.ZoomLevel !== undefined) {\n this.setZoomLevel(this.ZoomLevel, true);\n }\n }\n\n private hasDataConfigChanged(newConfig?: HierarchyTreeConfig): boolean {\n if (!newConfig) return false;\n const prev = this.previousConfigState;\n const hasChanged =\n prev.EntityName !== newConfig.EntityName ||\n prev.ExtraFilter !== newConfig.ExtraFilter ||\n prev.OrderBy !== newConfig.OrderBy ||\n prev.MaxRows !== newConfig.MaxRows ||\n prev.ParentField !== newConfig.ParentField;\n\n if (hasChanged) {\n this.previousConfigState = {\n EntityName: newConfig.EntityName,\n ExtraFilter: newConfig.ExtraFilter,\n OrderBy: newConfig.OrderBy,\n MaxRows: newConfig.MaxRows,\n ParentField: newConfig.ParentField\n };\n }\n return hasChanged;\n }\n\n private updateActiveNodeSelection(activeId?: string): void {\n if (!activeId) return;\n const activeNode = this.nodeMap.get(NormalizeUUID(activeId));\n if (activeNode && (!this.SelectedNode || !UUIDsEqual(this.SelectedNode.ID, activeNode.ID))) {\n for (const n of this.AllNodes) {\n n.IsSelected = UUIDsEqual(n.ID, activeNode.ID);\n }\n this.SelectedNode = activeNode;\n this.expandAncestors(activeNode);\n this.renderTree();\n }\n }\n\n public ngOnDestroy(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n // --- Configuration Initialization ---\n private initializeConfig(): void {\n if (!this.Config) return;\n this.Config = {\n DefaultIcon: 'fa-solid fa-sitemap',\n // Design token, not a literal — the accent is bound to [style.background]/[style.color],\n // so a var() resolves at paint time and follows the active theme. The fallback keeps the\n // original rendering wherever the token stylesheet isn't loaded.\n DefaultColor: 'var(--mj-brand-primary, #38bdf8)',\n Orientation: 'top-to-bottom',\n NodeStyle: 'card',\n AllowDragDropReparent: false,\n AllowNodeActions: true,\n ShowSearch: true,\n ShowToolbar: true,\n NodeWidth: 230,\n NodeHeight: 90,\n SiblingSpacing: 40,\n LevelSpacing: 75,\n Height: '100%',\n MinHeight: '500px',\n NavigateOnNodeClick: true,\n AutoRootFocus: true,\n Verbose: false,\n ...this.Config\n };\n }\n\n private log(message: string, ...args: unknown[]): void {\n if (this.Config?.Verbose) {\n console.log(message, ...args);\n }\n }\n\n // --- Data Loading & Tree Construction ---\n\n /**\n * Loads records from the server via `RunView` using entity metadata.\n */\n public async loadData(): Promise<void> {\n if (!this.Config?.EntityName) return;\n\n this.Loading = true;\n this.ErrorMessage = null;\n this.cdr?.detectChanges();\n\n try {\n // ProviderToUse, not `new Metadata()` — this is an L1 widget, so it must read metadata\n // from whatever provider the host bound via @Input() Provider (BaseAngularComponent\n // falls back to the ambient one). Binding the global provider here would silently query\n // the wrong database wherever the component is hosted against a non-default connection.\n const configEntityLower = this.Config.EntityName.toLowerCase();\n const configEntityStripped = this.Config.EntityName.replace(/^mj[:_\\s]+/i, '').trim().toLowerCase();\n this.entityInfo = this.ProviderToUse.Entities.find((e) => {\n const eNameLower = e.Name.toLowerCase();\n const eNameStripped = e.Name.replace(/^mj[:_\\s]+/i, '').trim().toLowerCase();\n return eNameLower === configEntityLower || eNameStripped === configEntityStripped;\n }) || null;\n\n const targetEntityName = this.entityInfo ? this.entityInfo.Name : this.Config.EntityName;\n this.log('[HierarchyTree:loadData] Starting load for:', targetEntityName, {\n configuredEntity: this.Config.EntityName,\n resolvedEntity: this.entityInfo?.Name,\n activeRecordId: this.ActiveRecordID || this.Config?.ActiveRecordID,\n focusRecordId: this.FocusRecordID || this.Config?.FocusRecordID,\n extraFilter: this.Config.ExtraFilter\n });\n\n if (this.Data) {\n this.log('[HierarchyTree:loadData] Using provided Data prop:', this.Data.length, 'items');\n this.buildTreeFromData(this.Data);\n return;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const defaultOrderBy = `${this.resolveNameFieldName()} ASC`;\n const rvParams = {\n EntityName: targetEntityName,\n ExtraFilter: this.Config.ExtraFilter || '',\n OrderBy: this.Config.OrderBy || defaultOrderBy,\n ResultType: 'simple' as const,\n MaxRows: this.Config.MaxRows ?? 0\n };\n this.log('[HierarchyTree:loadData] Calling RunView with params:', rvParams);\n const result = await rv.RunView(rvParams);\n\n this.log('[HierarchyTree:loadData] RunView response:', {\n success: result.Success,\n rowCount: result.RowCount,\n resultsLength: result.Results?.length,\n errorMessage: result.ErrorMessage,\n sampleRow: result.Results?.[0]\n });\n\n if (!result.Success) {\n this.ErrorMessage = result.ErrorMessage || 'Failed to load hierarchy data.';\n return;\n }\n\n const rawItems = (result.Results as Record<string, unknown>[]) || [];\n this.buildTreeFromData(rawItems);\n } catch (err) {\n this.ErrorMessage = err instanceof Error ? err.message : 'Error loading hierarchy tree.';\n console.error('[HierarchyTree:loadData] Error:', err);\n } finally {\n this.Loading = false;\n this.cdr?.detectChanges();\n setTimeout(() => {\n this.renderTree();\n this.fitToScreen(false);\n }, 80);\n }\n }\n\n /**\n * Helper to retrieve a property value from a record item in a case-insensitive manner.\n */\n private getItemValue(item: Record<string, unknown>, fieldName?: string): unknown {\n if (!item || !fieldName) return undefined;\n if (item[fieldName] !== undefined) return item[fieldName];\n const lower = fieldName.toLowerCase();\n for (const [k, v] of Object.entries(item)) {\n if (k.toLowerCase() === lower) return v;\n }\n return undefined;\n }\n\n /**\n * Constructs the in-memory tree nodes, computes composite keys, descendant counts, and depths.\n */\n public buildTreeFromData(items: Record<string, unknown>[]): void {\n this.nodeMap.clear();\n this.AllNodes = [];\n\n const parentFieldName = this.resolveParentFieldName();\n const nameFieldName = this.resolveNameFieldName();\n const subtitleFieldName = this.Config?.SubtitleField;\n const iconFieldName = this.Config?.IconField;\n const colorFieldName = this.Config?.ColorField;\n\n this.log(`[HierarchyTree:buildTreeFromData] Input items: ${items.length}, parentField=\"${parentFieldName}\", nameField=\"${nameFieldName}\"`);\n\n // 1. Create flat nodes\n for (const item of items) {\n const { pk, id } = this.extractPrimaryKey(item);\n const parentVal = this.getItemValue(item, parentFieldName);\n const parentId = parentVal != null && String(parentVal).trim() !== '' ? String(parentVal) : null;\n\n const nameVal = this.getItemValue(item, nameFieldName) ?? this.getItemValue(item, 'Name') ?? 'Unnamed';\n const name = String(nameVal);\n const subtitleVal = this.getItemValue(item, subtitleFieldName);\n const subtitle = subtitleVal != null ? String(subtitleVal) : undefined;\n const iconVal = this.getItemValue(item, iconFieldName);\n const icon = iconVal != null ? String(iconVal) : this.Config.DefaultIcon;\n const colorVal = this.getItemValue(item, colorFieldName);\n const color = colorVal != null ? String(colorVal) : this.Config.DefaultColor;\n\n const node: HierarchyNodeData = {\n ID: id,\n PrimaryKey: pk,\n Name: name,\n Subtitle: subtitle || undefined,\n Icon: icon,\n Color: color,\n ParentID: parentId,\n DirectChildCount: 0,\n TotalDescendantCount: 0,\n Depth: 0,\n IsExpanded: true,\n IsSelected: false,\n IsHighlighted: false,\n IsFocusRoot: false,\n Record: item,\n Children: []\n };\n\n this.nodeMap.set(NormalizeUUID(id), node);\n this.AllNodes.push(node);\n }\n\n // 2. Build parent-child relationships and detect cycles\n const roots: HierarchyNodeData[] = [];\n for (const node of this.AllNodes) {\n if (node.ParentID && this.nodeMap.has(NormalizeUUID(node.ParentID))) {\n const parentNode = this.nodeMap.get(NormalizeUUID(node.ParentID))!;\n if (!this.wouldCreateCycle(node, parentNode)) {\n parentNode.Children.push(node);\n } else {\n console.warn(`[HierarchyTree] Circular reference detected between ${node.ID} and ${parentNode.ID}. Promoting to root.`);\n roots.push(node);\n }\n } else {\n roots.push(node);\n }\n }\n\n // 3. Compute counts and depths\n for (const root of roots) {\n this.computeSubtreeMetrics(root, 0);\n }\n\n // 4. Preserve _allChildren for collapse/expand\n for (const node of this.AllNodes) {\n node._allChildren = [...node.Children];\n }\n\n this.RootNodes = roots;\n this.log(`[HierarchyTree:buildTreeFromData] Built ${this.AllNodes.length} nodes, ${roots.length} root(s):`, roots.map(r => ({ Name: r.Name, ID: r.ID, Children: r.Children.length, TotalDescendants: r.TotalDescendantCount })));\n\n // 5. Apply active record selection & auto-expand ancestors\n const activeId = this.ActiveRecordID || this.Config?.ActiveRecordID;\n if (activeId) {\n const activeNode = this.nodeMap.get(NormalizeUUID(activeId));\n if (activeNode) {\n activeNode.IsSelected = true;\n activeNode.IsHighlighted = true;\n this.SelectedNode = activeNode;\n // Expand all ancestors so the active node is visible in full context\n let curr = activeNode.ParentID ? this.nodeMap.get(NormalizeUUID(activeNode.ParentID)) : undefined;\n while (curr) {\n curr.IsExpanded = true;\n curr.Children = [...(curr._allChildren || [])];\n curr = curr.ParentID ? this.nodeMap.get(NormalizeUUID(curr.ParentID)) : undefined;\n }\n\n // If AutoRootFocus is enabled and multiple roots exist, focus on the active root tree\n if (this.Config.AutoRootFocus !== false && roots.length > 1 && !this.FocusRecordID && !this.Config.FocusRecordID) {\n let rootAncestor = activeNode;\n while (rootAncestor.ParentID && this.nodeMap.has(NormalizeUUID(rootAncestor.ParentID))) {\n rootAncestor = this.nodeMap.get(NormalizeUUID(rootAncestor.ParentID))!;\n }\n rootAncestor.IsFocusRoot = true;\n this.FocusedNode = rootAncestor;\n }\n }\n }\n\n // 6. Apply initial expand depth if configured (and not explicitly expanded by active node)\n if (this.Config.InitialExpandDepth && this.Config.InitialExpandDepth > 0 && !activeId) {\n for (const node of this.AllNodes) {\n if (node.Depth >= this.Config.InitialExpandDepth) {\n node.IsExpanded = false;\n node.Children = [];\n }\n }\n }\n\n if (this.FocusRecordID || this.Config?.FocusRecordID) {\n this.setFocusRoot(this.FocusRecordID || this.Config?.FocusRecordID);\n }\n }\n\n private resolveParentFieldName(): string {\n if (this.Config?.ParentField) return this.Config.ParentField;\n if (this.entityInfo) {\n // Check self-referencing foreign keys\n const selfFk = this.entityInfo.Fields.find(\n (f) => f.RelatedEntity && f.RelatedEntity.toLowerCase() === this.entityInfo!.Name.toLowerCase()\n );\n if (selfFk) return selfFk.Name;\n }\n return 'ParentID';\n }\n\n private resolveNameFieldName(): string {\n if (this.Config?.NameField) return this.Config.NameField;\n if (this.entityInfo?.NameField) return this.entityInfo.NameField.Name;\n return 'Name';\n }\n\n private extractPrimaryKey(item: Record<string, unknown>): { pk: CompositeKey; id: string } {\n const pk = this.entityInfo && this.entityInfo.PrimaryKeys.length > 0\n ? new CompositeKey(this.entityInfo.PrimaryKeys.map(k => new KeyValuePair(k.Name, this.getItemValue(item, k.Name))))\n // No entity metadata: the tree's default item shape is keyed by ID/id.\n : CompositeKey.FromID(this.getItemValue(item, 'ID') ?? this.getItemValue(item, 'id') ?? ''); // first-pk-ok: reached only when no entity metadata is available; the metadata branch above uses every PrimaryKeys column\n return { pk, id: pk.ToCompactURLSegment() };\n }\n\n private wouldCreateCycle(node: HierarchyNodeData, proposedParent: HierarchyNodeData): boolean {\n let curr: HierarchyNodeData | undefined = proposedParent;\n while (curr) {\n if (UUIDsEqual(curr.ID, node.ID)) return true;\n curr = curr.ParentID ? this.nodeMap.get(NormalizeUUID(curr.ParentID)) : undefined;\n }\n return false;\n }\n\n private computeSubtreeMetrics(node: HierarchyNodeData, depth: number): number {\n node.Depth = depth;\n node.DirectChildCount = node.Children.length;\n let descendantCount = node.Children.length;\n\n for (const child of node.Children) {\n descendantCount += this.computeSubtreeMetrics(child, depth + 1);\n }\n\n node.TotalDescendantCount = descendantCount;\n return descendantCount;\n }\n\n // --- D3 Layout & Visual Rendering ---\n\n private initD3Zoom(): void {\n if (!this.svgRef?.nativeElement) return;\n\n this.svgSelection = d3.select(this.svgRef.nativeElement);\n this.gSelection = this.svgSelection.select<SVGGElement>('g.mj-hierarchy-canvas');\n\n this.zoomBehavior = d3.zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4.0])\n .on('zoom', (event: d3.D3ZoomEvent<SVGSVGElement, unknown>) => {\n this.currentZoomTransform = event.transform;\n if (this.gSelection) {\n this.gSelection.attr('transform', event.transform.toString());\n }\n if (event.sourceEvent != null) {\n this.ZoomLevel = event.transform.k;\n this.ZoomChange.emit(event.transform.k);\n }\n });\n\n this.svgSelection.call(this.zoomBehavior);\n }\n\n private setupResizeObserver(): void {\n if (!this.svgContainerRef?.nativeElement) return;\n\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.contentRect.width > 50 && entry.contentRect.height > 50) {\n if (this.AllNodes.length > 0) {\n this.renderTree();\n }\n }\n }\n });\n this.resizeObserver.observe(this.svgContainerRef.nativeElement);\n }\n\n /**\n * Computes the D3 hierarchy tree layout and updates the SVG rendering.\n */\n public renderTree(preserveTransform = false): void {\n if (!this.svgRef?.nativeElement || !this.gSelection) {\n if (this.svgRef?.nativeElement) {\n this.initD3Zoom();\n }\n if (!this.gSelection) {\n setTimeout(() => this.renderTree(preserveTransform), 30);\n return;\n }\n }\n\n // Reset positions across all nodes\n for (const n of this.AllNodes) {\n n.x = undefined;\n n.y = undefined;\n }\n\n const isVertical = this.Config.Orientation !== 'left-to-right';\n const nodeWidth = this.Config.NodeWidth || 230;\n const nodeHeight = this.Config.NodeHeight || 90;\n const siblingGap = this.Config.SiblingSpacing || 40;\n const levelGap = this.Config.LevelSpacing || 75;\n\n const activeRoots = this.FocusedNode ? [this.FocusedNode] : this.RootNodes;\n this.log(`[HierarchyTree:renderTree] Starting render for ${activeRoots.length} active root(s):`, activeRoots.map(r => r.Name));\n\n if (activeRoots.length === 0) {\n this.gSelection.selectAll('*').remove();\n return;\n }\n\n // 1. Create root hierarchy\n let rootHierarchy: d3.HierarchyNode<HierarchyNodeData>;\n if (activeRoots.length === 1) {\n rootHierarchy = d3.hierarchy(activeRoots[0], (d) => (d.IsExpanded ? d.Children : []));\n } else {\n // Multiple roots: wrap under a synthetic virtual root\n const virtualRoot: HierarchyNodeData = {\n ID: '__virtual_root__',\n PrimaryKey: new CompositeKey(),\n Name: 'Root',\n DirectChildCount: activeRoots.length,\n TotalDescendantCount: activeRoots.length,\n Depth: -1,\n IsExpanded: true,\n IsSelected: false,\n IsHighlighted: false,\n IsFocusRoot: false,\n Children: activeRoots\n };\n rootHierarchy = d3.hierarchy(virtualRoot, (d) => (d.IsExpanded ? d.Children : []));\n }\n\n // 2. Compute tree layout\n const treeLayout = d3.tree<HierarchyNodeData>()\n .nodeSize(isVertical ? [nodeWidth + siblingGap, nodeHeight + levelGap] : [nodeHeight + siblingGap, nodeWidth + levelGap])\n .separation((a, b) => (a.parent === b.parent ? 1.05 : 1.2));\n\n const treeData = treeLayout(rootHierarchy);\n\n // Filter out virtual root if multi-root\n const nodes = treeData.descendants().filter((d) => d.data.ID !== '__virtual_root__');\n const links = treeData.links().filter((d) => d.source.data.ID !== '__virtual_root__');\n\n // Update positions on node data (centered on D3 node point)\n for (const n of nodes) {\n n.data.x = isVertical ? n.x - nodeWidth / 2 : n.y;\n n.data.y = isVertical ? n.y : n.x - nodeHeight / 2;\n }\n\n this.log(`[HierarchyTree:renderTree] Tree layout computed: ${nodes.length} nodes, ${links.length} links. Node positions:`, nodes.map(n => ({ Name: n.data.Name, x: n.data.x, y: n.data.y })));\n\n // 3. Render Links\n const linkPathGen = (d: d3.HierarchyLink<HierarchyNodeData>): string => {\n const sx = isVertical ? d.source.data.x! + nodeWidth / 2 : d.source.data.x! + nodeWidth;\n const sy = isVertical ? d.source.data.y! + nodeHeight : d.source.data.y! + nodeHeight / 2;\n const tx = isVertical ? d.target.data.x! + nodeWidth / 2 : d.target.data.x!;\n const ty = isVertical ? d.target.data.y! : d.target.data.y! + nodeHeight / 2;\n\n if (isVertical) {\n const midY = (sy + ty) / 2;\n return `M ${sx} ${sy} C ${sx} ${midY}, ${tx} ${midY}, ${tx} ${ty}`;\n } else {\n const midX = (sx + tx) / 2;\n return `M ${sx} ${sy} C ${midX} ${sy}, ${midX} ${ty}, ${tx} ${ty}`;\n }\n };\n\n const linkGroup = this.gSelection.select<SVGGElement>('g.mj-links-group');\n const linkSelection = linkGroup.selectAll<SVGPathElement, d3.HierarchyLink<HierarchyNodeData>>('path.mj-tree-link')\n .data(links, (d) => `${d.source.data.ID}->${d.target.data.ID}`);\n\n linkSelection.exit().remove();\n\n linkSelection.enter()\n .append('path')\n .attr('class', 'mj-tree-link')\n .merge(linkSelection)\n .attr('d', linkPathGen)\n .attr('stroke', (d) => (d.target.data.IsHighlighted ? 'var(--mj-brand-primary, #38bdf8)' : 'var(--mj-border-default, #223254)'))\n .attr('stroke-width', (d) => (d.target.data.IsHighlighted ? 2.5 : 1.5))\n .attr('fill', 'none');\n\n this.AllNodes = [...this.AllNodes];\n this.cdr?.markForCheck();\n this.cdr?.detectChanges();\n if (!preserveTransform) {\n this.fitToScreen(true);\n }\n }\n\n // --- Interactive Actions ---\n\n /**\n * Toggles the expand/collapse state of a node, firing cancelable Before and After events.\n */\n public toggleNodeExpansion(node: HierarchyNodeData, event?: MouseEvent): void {\n if (event) event.stopPropagation();\n\n if (node.IsExpanded) {\n const beforeEvt = new CancelableHierarchyNodeEvent(node, event);\n this.BeforeNodeCollapse.emit(beforeEvt);\n if (beforeEvt.IsCanceled) return;\n\n node.IsExpanded = false;\n node.Children = [];\n this.AfterNodeCollapse.emit({ Node: node, OriginalEvent: event });\n } else {\n const beforeEvt = new CancelableHierarchyNodeEvent(node, event);\n this.BeforeNodeExpand.emit(beforeEvt);\n if (beforeEvt.IsCanceled) return;\n\n node.IsExpanded = true;\n node.Children = [...(node._allChildren || [])];\n this.AfterNodeExpand.emit({ Node: node, OriginalEvent: event });\n }\n\n this.renderTree(true);\n }\n\n public closeDetailsDrawer(): void {\n this.ShowDetailsDrawer = false;\n this.cdr?.markForCheck();\n }\n\n public openDetailsDrawer(): void {\n this.ShowDetailsDrawer = true;\n this.cdr?.markForCheck();\n }\n\n public onCanvasBackgroundClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (target?.closest('.mj-details-drawer') || target?.closest('.mj-node-card') || target?.closest('.mj-tool-btn')) {\n return;\n }\n }\n\n public onNodeClick(node: HierarchyNodeData, event: MouseEvent): void {\n event.stopPropagation();\n this.SelectedNode = node;\n this.ShowDetailsDrawer = true;\n for (const n of this.AllNodes) {\n n.IsSelected = UUIDsEqual(n.ID, node.ID);\n }\n this.NodeClick.emit({ Node: node, OriginalEvent: event });\n this.NodeSelect.emit({ Node: node, OriginalEvent: event });\n this.cdr?.markForCheck();\n }\n\n public onNodeDoubleClick(node: HierarchyNodeData, event: MouseEvent): void {\n event.stopPropagation();\n this.NodeDoubleClick.emit({ Node: node, OriginalEvent: event });\n this.navigateToRecord(node, event);\n }\n\n public onNodeAction(node: HierarchyNodeData, action: string, event: MouseEvent): void {\n event.stopPropagation();\n this.NodeAction.emit({ Node: node, Action: action });\n\n switch (action) {\n case 'open':\n this.navigateToRecord(node, event);\n break;\n case 'focus':\n this.setFocusRoot(node.ID);\n break;\n case 'reset-focus':\n this.resetFocus();\n break;\n case 'add-child':\n // Handled via custom subscriber or event\n break;\n }\n }\n\n public navigateToRecord(node: HierarchyNodeData, event?: MouseEvent): void {\n const entityName = this.entityInfo ? this.entityInfo.Name : this.Config.EntityName;\n const navEvent: RecordNavigationEvent = {\n Kind: 'record',\n EntityName: entityName,\n PrimaryKey: node.PrimaryKey,\n OpenInNewTab: event ? event.ctrlKey || event.metaKey : false\n };\n this.Navigate.emit(navEvent);\n }\n\n public getRecordAttributeEntries(record: Record<string, unknown>): { key: string; label: string; value: string }[] {\n const entries: { key: string; label: string; value: string }[] = [];\n const skipFields = new Set([\n 'id', 'parentid', 'parentproductcategoryid', 'parentcategoryid',\n 'companyid', '__mj_version', 'createdat', 'updatedat', 'name'\n ]);\n\n for (const [k, v] of Object.entries(record)) {\n if (skipFields.has(k.toLowerCase()) || k.startsWith('__mj_') || v == null) continue;\n const strVal = typeof v === 'object' ? JSON.stringify(v) : String(v);\n if (strVal.trim() === '') continue;\n entries.push({\n key: k,\n label: k.replace(/([A-Z])/g, ' $1').trim(),\n value: strVal\n });\n }\n return entries.slice(0, 8);\n }\n\n // --- Search & Highlight ---\n\n public onSearchInput(): void {\n const q = this.SearchQuery.trim().toLowerCase();\n if (!q) {\n for (const n of this.AllNodes) {\n n.IsHighlighted = false;\n }\n this.MatchingNodeCount = 0;\n this.renderTree(true);\n return;\n }\n\n let count = 0;\n let firstMatch: HierarchyNodeData | null = null;\n for (const n of this.AllNodes) {\n const matches = n.Name.toLowerCase().includes(q) || (n.Subtitle && n.Subtitle.toLowerCase().includes(q));\n n.IsHighlighted = !!matches;\n if (matches) {\n count++;\n if (!firstMatch) firstMatch = n;\n this.expandAncestors(n);\n }\n }\n\n this.MatchingNodeCount = count;\n this.renderTree(true);\n\n if (firstMatch && firstMatch.x != null && firstMatch.y != null) {\n this.centerOnNode(firstMatch);\n }\n }\n\n public clearSearch(): void {\n this.SearchQuery = '';\n this.onSearchInput();\n }\n\n public centerOnNode(node: HierarchyNodeData): void {\n if (!this.svgSelection || !this.zoomBehavior || !this.svgContainerRef?.nativeElement) return;\n if (node.x == null || node.y == null) return;\n\n const rect = this.svgContainerRef.nativeElement.getBoundingClientRect();\n const width = rect.width > 50 ? rect.width : (this.svgContainerRef.nativeElement.clientWidth || 800);\n const height = rect.height > 50 ? rect.height : (this.svgContainerRef.nativeElement.clientHeight || 500);\n const rightMargin = (this.ShowDetailsDrawer && this.SelectedNode) ? 340 : 0;\n const visibleWidth = Math.max(width - rightMargin, 200);\n\n const currentScale = this.currentZoomTransform?.k || this.ZoomLevel || 1;\n const nodeWidth = this.Config.NodeWidth || 230;\n const nodeHeight = this.Config.NodeHeight || 90;\n\n const nodeCenterX = node.x + nodeWidth / 2;\n const nodeCenterY = node.y + nodeHeight / 2;\n\n const tx = visibleWidth / 2 - nodeCenterX * currentScale;\n const ty = height / 2 - nodeCenterY * currentScale;\n\n const target = d3.zoomIdentity.translate(tx, ty).scale(currentScale);\n this.svgSelection.interrupt().transition().duration(400).ease(d3.easeCubicOut).call(this.zoomBehavior.transform, target);\n }\n\n private expandAncestors(node: HierarchyNodeData): void {\n let curr = node.ParentID ? this.nodeMap.get(NormalizeUUID(node.ParentID)) : undefined;\n while (curr) {\n curr.IsExpanded = true;\n curr.Children = [...(curr._allChildren || [])];\n curr = curr.ParentID ? this.nodeMap.get(NormalizeUUID(curr.ParentID)) : undefined;\n }\n }\n\n // --- Subtree Focus ---\n\n public setFocusRoot(recordId?: string): void {\n if (!recordId) {\n this.resetFocus();\n return;\n }\n\n const target = this.nodeMap.get(NormalizeUUID(recordId));\n if (!target) return;\n\n for (const n of this.AllNodes) n.IsFocusRoot = false;\n target.IsFocusRoot = true;\n this.FocusedNode = target;\n this.renderTree();\n this.onFitToViewClick();\n }\n\n public resetFocus(): void {\n for (const n of this.AllNodes) n.IsFocusRoot = false;\n this.FocusedNode = null;\n this.renderTree();\n this.onFitToViewClick();\n }\n\n // --- Toolbar Actions / Verbs ---\n\n public expandAll(): void {\n for (const n of this.AllNodes) {\n n.IsExpanded = true;\n n.Children = [...(n._allChildren || [])];\n }\n this.renderTree(true);\n }\n\n public collapseAll(): void {\n for (const n of this.AllNodes) {\n if (n.Depth > 0) {\n n.IsExpanded = false;\n n.Children = [];\n }\n }\n this.renderTree(true);\n }\n\n public zoomIn(): void {\n if (!this.svgSelection || !this.zoomBehavior) return;\n const currentScale = this.currentZoomTransform?.k || 1;\n const targetScale = Math.min(currentScale * 1.25, 4.0);\n this.setZoomLevel(targetScale, true);\n this.ZoomLevel = targetScale;\n this.ZoomChange.emit(targetScale);\n }\n\n public zoomOut(): void {\n if (!this.svgSelection || !this.zoomBehavior) return;\n const currentScale = this.currentZoomTransform?.k || 1;\n const targetScale = Math.max(currentScale * 0.8, 0.1);\n this.setZoomLevel(targetScale, true);\n this.ZoomLevel = targetScale;\n this.ZoomChange.emit(targetScale);\n }\n\n public setZoomLevel(scale: number, animated = true): void {\n if (!this.svgSelection || !this.zoomBehavior || !scale) return;\n const container = this.svgContainerRef?.nativeElement;\n const rect = container?.getBoundingClientRect();\n const width = rect?.width && rect.width > 50 ? rect.width : (container?.clientWidth || 800);\n const height = rect?.height && rect.height > 50 ? rect.height : (container?.clientHeight || 500);\n const current = this.currentZoomTransform || d3.zoomIdentity;\n const cx = width / 2;\n const cy = height / 2;\n const newX = cx - (cx - current.x) * (scale / (current.k || 1));\n const newY = cy - (cy - current.y) * (scale / (current.k || 1));\n const target = d3.zoomIdentity.translate(newX, newY).scale(scale);\n\n if (animated) {\n this.svgSelection.interrupt().transition().duration(250).ease(d3.easeCubicOut).call(this.zoomBehavior.transform, target);\n } else {\n this.svgSelection.interrupt().call(this.zoomBehavior.transform, target);\n }\n }\n\n public resetZoom(): void {\n if (!this.svgSelection || !this.zoomBehavior) return;\n this.onFitToViewClick();\n }\n\n public onFitToViewClick(): void {\n this.fitToScreen(false, true);\n setTimeout(() => {\n this.fitToScreen(false, true);\n }, 320);\n }\n\n public fitToScreen(immediate = false, forceAutoScale = false): void {\n if (!this.svgSelection || !this.zoomBehavior || !this.svgContainerRef?.nativeElement) return;\n\n const visibleNodes = this.AllNodes.filter((n) => n.x != null && n.y != null);\n if (visibleNodes.length === 0) return;\n\n const nodeWidth = this.Config.NodeWidth || 230;\n const nodeHeight = this.Config.NodeHeight || 90;\n\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\n for (const n of visibleNodes) {\n minX = Math.min(minX, n.x!);\n maxX = Math.max(maxX, n.x! + nodeWidth);\n minY = Math.min(minY, n.y!);\n maxY = Math.max(maxY, n.y! + nodeHeight);\n }\n\n const treeWidth = Math.max(maxX - minX, 1);\n const treeHeight = Math.max(maxY - minY, 1);\n const treeCenterX = (minX + maxX) / 2;\n const treeCenterY = (minY + maxY) / 2;\n\n const rect = this.svgContainerRef.nativeElement.getBoundingClientRect();\n const width = rect.width > 50 ? rect.width : (this.svgContainerRef.nativeElement.clientWidth || 800);\n const height = rect.height > 50 ? rect.height : (this.svgContainerRef.nativeElement.clientHeight || 500);\n const rightMargin = (this.ShowDetailsDrawer && this.SelectedNode) ? 340 : 0;\n const visibleWidth = Math.max(width - rightMargin, 200);\n const padding = 40;\n\n const availWidth = Math.max(visibleWidth - padding * 2, 100);\n const availHeight = Math.max(height - padding * 2, 100);\n const autoScale = Math.max(\n Math.min(\n availWidth / treeWidth,\n availHeight / treeHeight,\n 1.05\n ),\n 0.15\n );\n\n const scale = (forceAutoScale || !this.ZoomLevel) ? autoScale : this.ZoomLevel;\n\n if (forceAutoScale) {\n this.ZoomLevel = autoScale;\n this.ZoomChange.emit(autoScale);\n }\n\n const tx = visibleWidth / 2 - treeCenterX * scale;\n const ty = height / 2 - treeCenterY * scale;\n\n const targetTransform = d3.zoomIdentity.translate(tx, ty).scale(scale);\n\n this.log(`[HierarchyTree:fitToScreen] Container=${width}x${height} (visible=${visibleWidth}), visibleNodes=${visibleNodes.length}, bounds=[${minX.toFixed(1)}, ${minY.toFixed(1)}] to [${maxX.toFixed(1)}, ${maxY.toFixed(1)}] (${treeWidth.toFixed(1)}x${treeHeight.toFixed(1)}), autoScale=${autoScale.toFixed(3)}, usingScale=${scale.toFixed(3)}, translate=(${tx.toFixed(1)}, ${ty.toFixed(1)})`);\n\n if (immediate) {\n this.svgSelection.interrupt().call(this.zoomBehavior.transform, targetTransform);\n } else {\n this.svgSelection.interrupt().transition().duration(300).ease(d3.easeCubicOut).call(this.zoomBehavior.transform, targetTransform);\n }\n }\n\n public exportAsSVG(): string {\n return this.svgRef?.nativeElement ? this.svgRef.nativeElement.outerHTML : '';\n }\n\n public async refresh(): Promise<void> {\n await this.loadData();\n }\n}\n","<div class=\"mj-hierarchy-wrapper\" [style.height]=\"Config.Height || '100%'\" [style.min-height]=\"Config.MinHeight || '500px'\">\n <!-- Top Controls Bar -->\n @if (Config.ShowToolbar || Config.ShowSearch) {\n <div class=\"mj-hierarchy-toolbar\">\n <!-- Search Box -->\n @if (Config.ShowSearch) {\n <div class=\"mj-search-box\">\n <i class=\"fa-solid fa-magnifying-glass mj-search-icon\"></i>\n <input\n type=\"text\"\n class=\"mj-search-input\"\n placeholder=\"Search hierarchy...\"\n [(ngModel)]=\"SearchQuery\"\n (input)=\"onSearchInput()\"\n />\n @if (SearchQuery) {\n <button type=\"button\" class=\"mj-clear-btn\" (click)=\"clearSearch()\" title=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n @if (SearchQuery && MatchingNodeCount > 0) {\n <span class=\"mj-match-badge\">{{ MatchingNodeCount }} found</span>\n }\n </div>\n }\n\n <!-- Focus Subtree Indicator -->\n @if (FocusedNode) {\n <div class=\"mj-focus-indicator\">\n <i class=\"fa-solid fa-crosshairs\"></i>\n <span>Focusing subtree: <strong>{{ FocusedNode.Name }}</strong></span>\n <button type=\"button\" class=\"mj-reset-focus-btn\" (click)=\"resetFocus()\" title=\"Show entire hierarchy\">\n <i class=\"fa-solid fa-rotate-left\"></i> View Full Hierarchy\n </button>\n </div>\n }\n\n <!-- Toolbar Action Buttons -->\n @if (Config.ShowToolbar) {\n <div class=\"mj-toolbar-actions\">\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"expandAll()\" title=\"Expand all subtrees\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </button>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"collapseAll()\" title=\"Collapse all subtrees\">\n <i class=\"fa-solid fa-folder\"></i>\n </button>\n <div class=\"mj-tool-divider\"></div>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"zoomIn()\" title=\"Zoom in\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"zoomOut()\" title=\"Zoom out\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"onFitToViewClick()\" title=\"Fit hierarchy to view\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n <div class=\"mj-tool-divider\"></div>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"refresh()\" title=\"Reload hierarchy data\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n\n <!-- SVG Canvas Container -->\n <div #svgContainer class=\"mj-canvas-container\" (click)=\"onCanvasBackgroundClick($event)\">\n @if (Loading) {\n <div class=\"mj-state-overlay\">\n <div class=\"mj-spinner\"></div>\n <span>Loading hierarchy...</span>\n </div>\n } @else if (ErrorMessage) {\n <div class=\"mj-state-overlay mj-error-state\">\n <i class=\"fa-solid fa-circle-exclamation mj-error-icon\"></i>\n <span>{{ ErrorMessage }}</span>\n <button type=\"button\" class=\"mj-retry-btn\" (click)=\"loadData()\">Retry</button>\n </div>\n } @else if (AllNodes.length === 0) {\n <div class=\"mj-state-overlay mj-empty-state\">\n <i class=\"fa-solid fa-sitemap mj-empty-icon\"></i>\n <span>No hierarchy records found.</span>\n </div>\n }\n\n <svg #svgElement class=\"mj-hierarchy-svg\">\n <defs>\n <pattern id=\"mj-tree-grid\" width=\"24\" height=\"24\" patternUnits=\"userSpaceOnUse\">\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"var(--mj-border-subtle, #1e293b)\" opacity=\"0.4\" />\n </pattern>\n </defs>\n\n <!-- Background grid -->\n <rect width=\"100%\" height=\"100%\" fill=\"url(#mj-tree-grid)\" />\n\n <!-- Main Canvas Group (Zoomable & Pannable) -->\n <g class=\"mj-hierarchy-canvas\">\n <!-- Connective Link Curves -->\n <g class=\"mj-links-group\"></g>\n\n <!-- Interactive Node Cards via ForeignObject -->\n <g class=\"mj-nodes-group\">\n @for (node of AllNodes; track node.ID) {\n @if (node.x != null && node.y != null) {\n <foreignObject\n [attr.x]=\"node.x\"\n [attr.y]=\"node.y\"\n [attr.width]=\"Config.NodeWidth || 230\"\n [attr.height]=\"Config.NodeHeight || 90\"\n class=\"mj-node-foreign-object\"\n >\n <div\n class=\"mj-node-card\"\n [class.selected]=\"node.IsSelected\"\n [class.highlighted]=\"node.IsHighlighted\"\n [class.focus-root]=\"node.IsFocusRoot\"\n (click)=\"onNodeClick(node, $event)\"\n (dblclick)=\"onNodeDoubleClick(node, $event)\"\n >\n <!-- Accent Top Border -->\n <div class=\"mj-card-accent\" [style.background]=\"node.Color || Config.DefaultColor\"></div>\n\n <!-- Node Card Header -->\n <div class=\"mj-node-header\">\n <div class=\"mj-node-icon\" [style.color]=\"node.Color || Config.DefaultColor\">\n <i [class]=\"node.Icon || Config.DefaultIcon\"></i>\n </div>\n <div class=\"mj-node-title-group\">\n <div class=\"mj-node-name\" [title]=\"node.Name\">{{ node.Name }}</div>\n @if (node.Subtitle) {\n <div class=\"mj-node-subtitle\">{{ node.Subtitle }}</div>\n }\n </div>\n </div>\n\n <!-- Node Card Footer & Actions -->\n <div class=\"mj-node-footer\">\n <!-- Subtree Expansion Pill -->\n @if (node.DirectChildCount > 0) {\n <button\n type=\"button\"\n class=\"mj-expand-badge\"\n [class.collapsed]=\"!node.IsExpanded\"\n (click)=\"toggleNodeExpansion(node, $event)\"\n [title]=\"node.IsExpanded ? 'Collapse sub-branch' : 'Expand ' + node.DirectChildCount + ' children'\"\n >\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"node.IsExpanded\" [class.fa-chevron-right]=\"!node.IsExpanded\"></i>\n <span>{{ node.DirectChildCount }}</span>\n </button>\n } @else {\n <span class=\"mj-leaf-indicator\">Leaf</span>\n }\n\n <!-- Quick Action Buttons -->\n @if (AllowNodeActions) {\n <div class=\"mj-node-actions\">\n <button\n type=\"button\"\n class=\"mj-node-action-btn\"\n (click)=\"onNodeAction(node, 'focus', $event)\"\n title=\"Focus on this subtree\"\n >\n <i class=\"fa-solid fa-crosshairs\"></i>\n </button>\n <button\n type=\"button\"\n class=\"mj-node-action-btn\"\n (click)=\"onNodeAction(node, 'open', $event)\"\n title=\"Open record in Explorer\"\n >\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n </foreignObject>\n }\n }\n </g>\n </g>\n </svg>\n\n <!-- Slide-In Node Details Drawer -->\n <aside\n class=\"mj-details-drawer\"\n [class.open]=\"SelectedNode != null && ShowDetailsDrawer\"\n aria-label=\"Node details panel\"\n >\n @if (SelectedNode) {\n <div class=\"mj-drawer-header\">\n <div class=\"mj-drawer-title-group\">\n <div class=\"mj-drawer-icon\" [style.color]=\"SelectedNode.Color || Config.DefaultColor\">\n <i [class]=\"SelectedNode.Icon || Config.DefaultIcon\"></i>\n </div>\n <div class=\"mj-drawer-titles\">\n <h4 class=\"mj-drawer-name\" [title]=\"SelectedNode.Name\">{{ SelectedNode.Name }}</h4>\n @if (SelectedNode.Subtitle) {\n <p class=\"mj-drawer-subtitle\">{{ SelectedNode.Subtitle }}</p>\n }\n </div>\n </div>\n <button\n type=\"button\"\n class=\"mj-drawer-close-btn\"\n (click)=\"closeDetailsDrawer()\"\n title=\"Close details\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"mj-drawer-body\">\n <div class=\"mj-drawer-stats\">\n <div class=\"mj-stat-card\">\n <span class=\"mj-stat-num\">{{ SelectedNode.Depth }}</span>\n <span class=\"mj-stat-label\">Hierarchy Level</span>\n </div>\n <div class=\"mj-stat-card\">\n <span class=\"mj-stat-num\">{{ SelectedNode.DirectChildCount }}</span>\n <span class=\"mj-stat-label\">Direct Children</span>\n </div>\n <div class=\"mj-stat-card\">\n <span class=\"mj-stat-num\">{{ SelectedNode.TotalDescendantCount }}</span>\n <span class=\"mj-stat-label\">Total Subtree</span>\n </div>\n </div>\n\n @if (SelectedNode.Record && getRecordAttributeEntries(SelectedNode.Record).length > 0) {\n <div class=\"mj-drawer-section\">\n <h5 class=\"mj-section-heading\">Attributes</h5>\n <dl class=\"mj-attr-list\">\n @for (attr of getRecordAttributeEntries(SelectedNode.Record); track attr.key) {\n <div class=\"mj-attr-row\">\n <dt class=\"mj-attr-dt\">{{ attr.label }}</dt>\n <dd class=\"mj-attr-dd\" [title]=\"attr.value\">{{ attr.value }}</dd>\n </div>\n }\n </dl>\n </div>\n }\n\n <div class=\"mj-drawer-actions\">\n <button\n type=\"button\"\n class=\"mj-drawer-btn-primary\"\n (click)=\"navigateToRecord(SelectedNode)\"\n title=\"Open this record in Explorer\"\n >\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n <span>Open Record</span>\n </button>\n\n <div class=\"mj-drawer-btn-row\">\n @if (SelectedNode.DirectChildCount > 0) {\n <button\n type=\"button\"\n class=\"mj-drawer-btn-secondary\"\n (click)=\"toggleNodeExpansion(SelectedNode)\"\n >\n <i class=\"fa-solid\" [class.fa-folder-open]=\"SelectedNode.IsExpanded\" [class.fa-folder]=\"!SelectedNode.IsExpanded\"></i>\n <span>{{ SelectedNode.IsExpanded ? 'Collapse' : 'Expand' }}</span>\n </button>\n }\n <button\n type=\"button\"\n class=\"mj-drawer-btn-secondary\"\n (click)=\"setFocusRoot(SelectedNode.ID)\"\n title=\"Focus hierarchy on this subtree\"\n >\n <i class=\"fa-solid fa-crosshairs\"></i>\n <span>Focus Tree</span>\n </button>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"hierarchy-tree.component.js","sourceRoot":"","sources":["../../../src/lib/components/hierarchy-tree.component.ts","../../../src/lib/components/hierarchy-tree.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n ViewChild,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n inject,\n AfterViewInit\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RunView, CompositeKey, EntityInfo, KeyValuePair } from '@memberjunction/core';\nimport { UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { FormNavigationEvent, RecordNavigationEvent } from '@memberjunction/ng-base-forms';\nimport * as d3 from 'd3';\nimport {\n HierarchyTreeConfig,\n HierarchyNodeData,\n HierarchyTreeOrientation,\n HierarchyNodeStyle\n} from '../models/hierarchy-tree.types';\nimport {\n HierarchyNodeEvent,\n CancelableHierarchyNodeEvent,\n ReparentEvent,\n CancelableReparentEvent,\n NodeActionEvent\n} from '../events/hierarchy-tree.events';\n\n/**\n * Modern, interactive, canvas-based visual hierarchy and organizational chart component.\n *\n * Automatically generates a dynamic, zoomable tree visualization for any MemberJunction entity\n * with a self-referencing parent foreign key (such as Corporate Subsidiaries, Product Categories,\n * Committee Governance structures, Tag Taxonomies, and Management Lines).\n *\n * Features:\n * - **Metadata Driven**: Auto-derives primary keys (including composite keys) and parent fields from MJ metadata.\n * - **Interactive Canvas**: D3-powered smooth pan, zoom, auto-fit, and mini-toolbar controls.\n * - **Collapsible Subtrees**: Interactive `[+]` / `[-]` badges with direct and total descendant counts.\n * - **Live Search & Path Expansion**: Instant keyword search that highlights matches and auto-expands ancestor branches.\n * - **Subtree Focus**: Isolate any node as the root of the view with 1-click return to full hierarchy.\n * - **Full Design Token Theming**: Uses `--mj-*` surface, border, typography, and accent tokens.\n * - **Extensive Cancelable Events**: Before/After events for expansion, collapse, reparenting, and navigation.\n *\n * @example\n * ```html\n * <mj-hierarchy-tree\n * [Config]=\"{\n * EntityName: 'MJ_BizApps_Common: Organizations',\n * ParentField: 'ParentID',\n * SubtitleField: 'OrganizationType',\n * DefaultIcon: 'fa-solid fa-building'\n * }\"\n * (Navigate)=\"onNavigate($event)\">\n * </mj-hierarchy-tree>\n * ```\n */\n@Component({\n selector: 'mj-hierarchy-tree',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './hierarchy-tree.component.html',\n styleUrls: ['./hierarchy-tree.component.css']\n})\nexport class HierarchyTreeComponent extends BaseAngularComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n constructor(private cdr?: ChangeDetectorRef) {\n super();\n }\n\n @ViewChild('svgContainer', { static: false }) SvgContainerRef!: ElementRef<HTMLDivElement>;\n\n /** @deprecated Use {@link SvgContainerRef}. */\n get svgContainerRef(): ElementRef<HTMLDivElement> {\n return this.SvgContainerRef;\n }\n /** @deprecated Use {@link SvgContainerRef}. */\n set svgContainerRef(value: ElementRef<HTMLDivElement>) {\n this.SvgContainerRef = value;\n }\n @ViewChild('svgElement', { static: false }) SvgRef!: ElementRef<SVGSVGElement>;\n\n /** @deprecated Use {@link SvgRef}. */\n get svgRef(): ElementRef<SVGSVGElement> {\n return this.SvgRef;\n }\n /** @deprecated Use {@link SvgRef}. */\n set svgRef(value: ElementRef<SVGSVGElement>) {\n this.SvgRef = value;\n }\n\n /**\n * Declarative configuration defining the target entity and visual layout properties.\n */\n @Input() Config!: HierarchyTreeConfig;\n\n /**\n * Optional pre-loaded data array. If provided, the component skips the automated\n * `RunView` query and constructs the tree directly from these items.\n */\n @Input() Data?: Record<string, unknown>[];\n\n /**\n * Optional active / selected record ID. When provided, the node is highlighted and all ancestors\n * are expanded so it is visible in full tree context.\n */\n @Input() ActiveRecordID?: string;\n\n /**\n * Primary key ID to focus as the subtree root.\n */\n @Input() FocusRecordID?: string;\n\n /**\n * Controls whether action buttons (Open Record, Focus, Add Child) appear on node cards.\n */\n @Input() AllowNodeActions = true;\n\n /**\n * Emitted when a node is clicked.\n */\n @Output() NodeClick = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted when a node is double-clicked.\n */\n @Output() NodeDoubleClick = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted when a node is selected / set as active.\n */\n @Output() NodeSelect = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted before a node expands its children. Cancelable.\n */\n @Output() BeforeNodeExpand = new EventEmitter<CancelableHierarchyNodeEvent>();\n\n /**\n * Emitted after a node has expanded its children.\n */\n @Output() AfterNodeExpand = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted before a node collapses its children. Cancelable.\n */\n @Output() BeforeNodeCollapse = new EventEmitter<CancelableHierarchyNodeEvent>();\n\n /**\n * Emitted after a node has collapsed its children.\n */\n @Output() AfterNodeCollapse = new EventEmitter<HierarchyNodeEvent>();\n\n /**\n * Emitted before a node is reparented. Cancelable.\n */\n @Output() BeforeReparent = new EventEmitter<CancelableReparentEvent>();\n\n /**\n * Emitted after a node has been reparented.\n */\n @Output() AfterReparent = new EventEmitter<ReparentEvent>();\n\n /**\n * Emitted when an action button (e.g. Open, Add Child, Focus) is invoked on a node.\n */\n @Output() NodeAction = new EventEmitter<NodeActionEvent>();\n\n /**\n * Optional persisted zoom scale factor to restore.\n */\n @Input() ZoomLevel?: number;\n\n /**\n * Emitted when the user zooms in or out on the hierarchy canvas.\n */\n @Output() ZoomChange = new EventEmitter<number>();\n\n /**\n * Emitted when the user requests navigation to a full entity record.\n */\n @Output() Navigate = new EventEmitter<FormNavigationEvent>();\n\n // --- State ---\n public Loading = false;\n public ErrorMessage: string | null = null;\n public SearchQuery = '';\n public MatchingNodeCount = 0;\n public FocusedNode: HierarchyNodeData | null = null;\n public SelectedNode: HierarchyNodeData | null = null;\n public ShowDetailsDrawer = false;\n\n /** Flattened list of all loaded hierarchy nodes for search and lookup. */\n public AllNodes: HierarchyNodeData[] = [];\n private nodeMap = new Map<string, HierarchyNodeData>();\n\n /** The root nodes of the active view. */\n public RootNodes: HierarchyNodeData[] = [];\n\n /** D3 zoom behavior and SVG group selection */\n private zoomBehavior: d3.ZoomBehavior<SVGSVGElement, unknown> | null = null;\n private svgSelection: d3.Selection<SVGSVGElement, unknown, null, undefined> | null = null;\n private gSelection: d3.Selection<SVGGElement, unknown, null, undefined> | null = null;\n private currentZoomTransform: d3.ZoomTransform = d3.zoomIdentity;\n\n private resizeObserver: ResizeObserver | null = null;\n private entityInfo: EntityInfo | null = null;\n private previousConfigState: Partial<HierarchyTreeConfig> = {};\n\n public ngOnInit(): void {\n this.initializeConfig();\n this.log('[HierarchyTree:ngOnInit] Initializing with Config:', this.Config);\n if (this.Config) {\n this.previousConfigState = {\n EntityName: this.Config.EntityName,\n ExtraFilter: this.Config.ExtraFilter,\n OrderBy: this.Config.OrderBy,\n MaxRows: this.Config.MaxRows,\n ParentField: this.Config.ParentField\n };\n }\n this.loadData();\n }\n\n public ngAfterViewInit(): void {\n this.log('[HierarchyTree:ngAfterViewInit] Initializing D3 Zoom & ResizeObserver. svgRef:', !!this.SvgRef?.nativeElement, 'containerRect:', this.SvgContainerRef?.nativeElement?.getBoundingClientRect());\n this.initD3Zoom();\n this.setupResizeObserver();\n if (this.AllNodes.length > 0) {\n this.log('[HierarchyTree:ngAfterViewInit] AllNodes already loaded (' + this.AllNodes.length + '), triggering renderTree');\n this.RenderTree();\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.log('[HierarchyTree:ngOnChanges] Changes detected:', Object.keys(changes));\n if (changes['Config'] && !changes['Config'].isFirstChange()) {\n this.initializeConfig();\n if (this.hasDataConfigChanged(this.Config)) {\n this.log('[HierarchyTree:ngOnChanges] Data config changed, triggering loadData');\n this.loadData();\n } else {\n const activeId = this.ActiveRecordID || this.Config?.ActiveRecordID;\n this.log('[HierarchyTree:ngOnChanges] Config changed but data identical, updating active node:', activeId);\n this.updateActiveNodeSelection(activeId);\n }\n } else if (changes['ActiveRecordID'] && !changes['ActiveRecordID'].isFirstChange()) {\n this.updateActiveNodeSelection(this.ActiveRecordID);\n } else if (changes['Data'] && !changes['Data'].isFirstChange()) {\n this.BuildTreeFromData(this.Data || []);\n } else if (changes['FocusRecordID'] && !changes['FocusRecordID'].isFirstChange()) {\n this.SetFocusRoot(this.FocusRecordID);\n } else if (changes['ZoomLevel'] && !changes['ZoomLevel'].isFirstChange() && this.ZoomLevel !== undefined) {\n this.SetZoomLevel(this.ZoomLevel, true);\n }\n }\n\n private hasDataConfigChanged(newConfig?: HierarchyTreeConfig): boolean {\n if (!newConfig) return false;\n const prev = this.previousConfigState;\n const hasChanged =\n prev.EntityName !== newConfig.EntityName ||\n prev.ExtraFilter !== newConfig.ExtraFilter ||\n prev.OrderBy !== newConfig.OrderBy ||\n prev.MaxRows !== newConfig.MaxRows ||\n prev.ParentField !== newConfig.ParentField;\n\n if (hasChanged) {\n this.previousConfigState = {\n EntityName: newConfig.EntityName,\n ExtraFilter: newConfig.ExtraFilter,\n OrderBy: newConfig.OrderBy,\n MaxRows: newConfig.MaxRows,\n ParentField: newConfig.ParentField\n };\n }\n return hasChanged;\n }\n\n private updateActiveNodeSelection(activeId?: string): void {\n if (!activeId) return;\n const activeNode = this.nodeMap.get(NormalizeUUID(activeId));\n if (activeNode && (!this.SelectedNode || !UUIDsEqual(this.SelectedNode.ID, activeNode.ID))) {\n for (const n of this.AllNodes) {\n n.IsSelected = UUIDsEqual(n.ID, activeNode.ID);\n }\n this.SelectedNode = activeNode;\n this.expandAncestors(activeNode);\n this.RenderTree();\n }\n }\n\n public ngOnDestroy(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n // --- Configuration Initialization ---\n private initializeConfig(): void {\n if (!this.Config) return;\n this.Config = {\n DefaultIcon: 'fa-solid fa-sitemap',\n // Design token, not a literal — the accent is bound to [style.background]/[style.color],\n // so a var() resolves at paint time and follows the active theme. The fallback keeps the\n // original rendering wherever the token stylesheet isn't loaded.\n DefaultColor: 'var(--mj-brand-primary, #38bdf8)',\n Orientation: 'top-to-bottom',\n NodeStyle: 'card',\n AllowDragDropReparent: false,\n AllowNodeActions: true,\n ShowSearch: true,\n ShowToolbar: true,\n NodeWidth: 230,\n NodeHeight: 90,\n SiblingSpacing: 40,\n LevelSpacing: 75,\n Height: '100%',\n MinHeight: '500px',\n NavigateOnNodeClick: true,\n AutoRootFocus: true,\n Verbose: false,\n ...this.Config\n };\n }\n\n private log(message: string, ...args: unknown[]): void {\n if (this.Config?.Verbose) {\n console.log(message, ...args);\n }\n }\n\n // --- Data Loading & Tree Construction ---\n\n /**\n * Loads records from the server via `RunView` using entity metadata.\n */\n public async loadData(): Promise<void> {\n if (!this.Config?.EntityName) return;\n\n this.Loading = true;\n this.ErrorMessage = null;\n this.cdr?.detectChanges();\n\n try {\n // ProviderToUse, not `new Metadata()` — this is an L1 widget, so it must read metadata\n // from whatever provider the host bound via @Input() Provider (BaseAngularComponent\n // falls back to the ambient one). Binding the global provider here would silently query\n // the wrong database wherever the component is hosted against a non-default connection.\n const configEntityLower = this.Config.EntityName.toLowerCase();\n const configEntityStripped = this.Config.EntityName.replace(/^mj[:_\\s]+/i, '').trim().toLowerCase();\n this.entityInfo = this.ProviderToUse.Entities.find((e) => {\n const eNameLower = e.Name.toLowerCase();\n const eNameStripped = e.Name.replace(/^mj[:_\\s]+/i, '').trim().toLowerCase();\n return eNameLower === configEntityLower || eNameStripped === configEntityStripped;\n }) || null;\n\n const targetEntityName = this.entityInfo ? this.entityInfo.Name : this.Config.EntityName;\n this.log('[HierarchyTree:loadData] Starting load for:', targetEntityName, {\n configuredEntity: this.Config.EntityName,\n resolvedEntity: this.entityInfo?.Name,\n activeRecordId: this.ActiveRecordID || this.Config?.ActiveRecordID,\n focusRecordId: this.FocusRecordID || this.Config?.FocusRecordID,\n extraFilter: this.Config.ExtraFilter\n });\n\n if (this.Data) {\n this.log('[HierarchyTree:loadData] Using provided Data prop:', this.Data.length, 'items');\n this.BuildTreeFromData(this.Data);\n return;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const defaultOrderBy = `${this.resolveNameFieldName()} ASC`;\n const rvParams = {\n EntityName: targetEntityName,\n ExtraFilter: this.Config.ExtraFilter || '',\n OrderBy: this.Config.OrderBy || defaultOrderBy,\n ResultType: 'simple' as const,\n MaxRows: this.Config.MaxRows ?? 0\n };\n this.log('[HierarchyTree:loadData] Calling RunView with params:', rvParams);\n const result = await rv.RunView(rvParams);\n\n this.log('[HierarchyTree:loadData] RunView response:', {\n success: result.Success,\n rowCount: result.RowCount,\n resultsLength: result.Results?.length,\n errorMessage: result.ErrorMessage,\n sampleRow: result.Results?.[0]\n });\n\n if (!result.Success) {\n this.ErrorMessage = result.ErrorMessage || 'Failed to load hierarchy data.';\n return;\n }\n\n const rawItems = (result.Results as Record<string, unknown>[]) || [];\n this.BuildTreeFromData(rawItems);\n } catch (err) {\n this.ErrorMessage = err instanceof Error ? err.message : 'Error loading hierarchy tree.';\n console.error('[HierarchyTree:loadData] Error:', err);\n } finally {\n this.Loading = false;\n this.cdr?.detectChanges();\n setTimeout(() => {\n this.RenderTree();\n this.FitToScreen(false);\n }, 80);\n }\n }\n\n /**\n * Helper to retrieve a property value from a record item in a case-insensitive manner.\n */\n private getItemValue(item: Record<string, unknown>, fieldName?: string): unknown {\n if (!item || !fieldName) return undefined;\n if (item[fieldName] !== undefined) return item[fieldName];\n const lower = fieldName.toLowerCase();\n for (const [k, v] of Object.entries(item)) {\n if (k.toLowerCase() === lower) return v;\n }\n return undefined;\n }\n\n /**\n * Constructs the in-memory tree nodes, computes composite keys, descendant counts, and depths.\n */\n public BuildTreeFromData(items: Record<string, unknown>[]): void {\n this.nodeMap.clear();\n this.AllNodes = [];\n\n const parentFieldName = this.resolveParentFieldName();\n const nameFieldName = this.resolveNameFieldName();\n const subtitleFieldName = this.Config?.SubtitleField;\n const iconFieldName = this.Config?.IconField;\n const colorFieldName = this.Config?.ColorField;\n\n this.log(`[HierarchyTree:buildTreeFromData] Input items: ${items.length}, parentField=\"${parentFieldName}\", nameField=\"${nameFieldName}\"`);\n\n // 1. Create flat nodes\n for (const item of items) {\n const { pk, id } = this.extractPrimaryKey(item);\n const parentVal = this.getItemValue(item, parentFieldName);\n const parentId = parentVal != null && String(parentVal).trim() !== '' ? String(parentVal) : null;\n\n const nameVal = this.getItemValue(item, nameFieldName) ?? this.getItemValue(item, 'Name') ?? 'Unnamed';\n const name = String(nameVal);\n const subtitleVal = this.getItemValue(item, subtitleFieldName);\n const subtitle = subtitleVal != null ? String(subtitleVal) : undefined;\n const iconVal = this.getItemValue(item, iconFieldName);\n const icon = iconVal != null ? String(iconVal) : this.Config.DefaultIcon;\n const colorVal = this.getItemValue(item, colorFieldName);\n const color = colorVal != null ? String(colorVal) : this.Config.DefaultColor;\n\n const node: HierarchyNodeData = {\n ID: id,\n PrimaryKey: pk,\n Name: name,\n Subtitle: subtitle || undefined,\n Icon: icon,\n Color: color,\n ParentID: parentId,\n DirectChildCount: 0,\n TotalDescendantCount: 0,\n Depth: 0,\n IsExpanded: true,\n IsSelected: false,\n IsHighlighted: false,\n IsFocusRoot: false,\n Record: item,\n Children: []\n };\n\n this.nodeMap.set(NormalizeUUID(id), node);\n this.AllNodes.push(node);\n }\n\n // 2. Build parent-child relationships and detect cycles\n const roots: HierarchyNodeData[] = [];\n for (const node of this.AllNodes) {\n if (node.ParentID && this.nodeMap.has(NormalizeUUID(node.ParentID))) {\n const parentNode = this.nodeMap.get(NormalizeUUID(node.ParentID))!;\n if (!this.wouldCreateCycle(node, parentNode)) {\n parentNode.Children.push(node);\n } else {\n console.warn(`[HierarchyTree] Circular reference detected between ${node.ID} and ${parentNode.ID}. Promoting to root.`);\n roots.push(node);\n }\n } else {\n roots.push(node);\n }\n }\n\n // 3. Compute counts and depths\n for (const root of roots) {\n this.computeSubtreeMetrics(root, 0);\n }\n\n // 4. Preserve _allChildren for collapse/expand\n for (const node of this.AllNodes) {\n node._allChildren = [...node.Children];\n }\n\n this.RootNodes = roots;\n this.log(`[HierarchyTree:buildTreeFromData] Built ${this.AllNodes.length} nodes, ${roots.length} root(s):`, roots.map(r => ({ Name: r.Name, ID: r.ID, Children: r.Children.length, TotalDescendants: r.TotalDescendantCount })));\n\n // 5. Apply active record selection & auto-expand ancestors\n const activeId = this.ActiveRecordID || this.Config?.ActiveRecordID;\n if (activeId) {\n const activeNode = this.nodeMap.get(NormalizeUUID(activeId));\n if (activeNode) {\n activeNode.IsSelected = true;\n activeNode.IsHighlighted = true;\n this.SelectedNode = activeNode;\n // Expand all ancestors so the active node is visible in full context\n let curr = activeNode.ParentID ? this.nodeMap.get(NormalizeUUID(activeNode.ParentID)) : undefined;\n while (curr) {\n curr.IsExpanded = true;\n curr.Children = [...(curr._allChildren || [])];\n curr = curr.ParentID ? this.nodeMap.get(NormalizeUUID(curr.ParentID)) : undefined;\n }\n\n // If AutoRootFocus is enabled and multiple roots exist, focus on the active root tree\n if (this.Config.AutoRootFocus !== false && roots.length > 1 && !this.FocusRecordID && !this.Config.FocusRecordID) {\n let rootAncestor = activeNode;\n while (rootAncestor.ParentID && this.nodeMap.has(NormalizeUUID(rootAncestor.ParentID))) {\n rootAncestor = this.nodeMap.get(NormalizeUUID(rootAncestor.ParentID))!;\n }\n rootAncestor.IsFocusRoot = true;\n this.FocusedNode = rootAncestor;\n }\n }\n }\n\n // 6. Apply initial expand depth if configured (and not explicitly expanded by active node)\n if (this.Config.InitialExpandDepth && this.Config.InitialExpandDepth > 0 && !activeId) {\n for (const node of this.AllNodes) {\n if (node.Depth >= this.Config.InitialExpandDepth) {\n node.IsExpanded = false;\n node.Children = [];\n }\n }\n }\n\n if (this.FocusRecordID || this.Config?.FocusRecordID) {\n this.SetFocusRoot(this.FocusRecordID || this.Config?.FocusRecordID);\n }\n }\n\n /** @deprecated Use {@link BuildTreeFromData}. */\n public buildTreeFromData(items: Record<string, unknown>[]): void {\n return this.BuildTreeFromData(items);\n }\n\n private resolveParentFieldName(): string {\n if (this.Config?.ParentField) return this.Config.ParentField;\n if (this.entityInfo) {\n // Check self-referencing foreign keys\n const selfFk = this.entityInfo.Fields.find(\n (f) => f.RelatedEntity && f.RelatedEntity.toLowerCase() === this.entityInfo!.Name.toLowerCase()\n );\n if (selfFk) return selfFk.Name;\n }\n return 'ParentID';\n }\n\n private resolveNameFieldName(): string {\n if (this.Config?.NameField) return this.Config.NameField;\n if (this.entityInfo?.NameField) return this.entityInfo.NameField.Name;\n return 'Name';\n }\n\n private extractPrimaryKey(item: Record<string, unknown>): { pk: CompositeKey; id: string } {\n const pk = this.entityInfo && this.entityInfo.PrimaryKeys.length > 0\n ? new CompositeKey(this.entityInfo.PrimaryKeys.map(k => new KeyValuePair(k.Name, this.getItemValue(item, k.Name))))\n // No entity metadata: the tree's default item shape is keyed by ID/id.\n : CompositeKey.FromID(this.getItemValue(item, 'ID') ?? this.getItemValue(item, 'id') ?? ''); // first-pk-ok: reached only when no entity metadata is available; the metadata branch above uses every PrimaryKeys column\n return { pk, id: pk.ToCompactURLSegment() };\n }\n\n private wouldCreateCycle(node: HierarchyNodeData, proposedParent: HierarchyNodeData): boolean {\n let curr: HierarchyNodeData | undefined = proposedParent;\n while (curr) {\n if (UUIDsEqual(curr.ID, node.ID)) return true;\n curr = curr.ParentID ? this.nodeMap.get(NormalizeUUID(curr.ParentID)) : undefined;\n }\n return false;\n }\n\n private computeSubtreeMetrics(node: HierarchyNodeData, depth: number): number {\n node.Depth = depth;\n node.DirectChildCount = node.Children.length;\n let descendantCount = node.Children.length;\n\n for (const child of node.Children) {\n descendantCount += this.computeSubtreeMetrics(child, depth + 1);\n }\n\n node.TotalDescendantCount = descendantCount;\n return descendantCount;\n }\n\n // --- D3 Layout & Visual Rendering ---\n\n private initD3Zoom(): void {\n if (!this.SvgRef?.nativeElement) return;\n\n this.svgSelection = d3.select(this.SvgRef.nativeElement);\n this.gSelection = this.svgSelection.select<SVGGElement>('g.mj-hierarchy-canvas');\n\n this.zoomBehavior = d3.zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4.0])\n .on('zoom', (event: d3.D3ZoomEvent<SVGSVGElement, unknown>) => {\n this.currentZoomTransform = event.transform;\n if (this.gSelection) {\n this.gSelection.attr('transform', event.transform.toString());\n }\n if (event.sourceEvent != null) {\n this.ZoomLevel = event.transform.k;\n this.ZoomChange.emit(event.transform.k);\n }\n });\n\n this.svgSelection.call(this.zoomBehavior);\n }\n\n private setupResizeObserver(): void {\n if (!this.SvgContainerRef?.nativeElement) return;\n\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.contentRect.width > 50 && entry.contentRect.height > 50) {\n if (this.AllNodes.length > 0) {\n this.RenderTree();\n }\n }\n }\n });\n this.resizeObserver.observe(this.SvgContainerRef.nativeElement);\n }\n\n /**\n * Computes the D3 hierarchy tree layout and updates the SVG rendering.\n */\n public RenderTree(preserveTransform = false): void {\n if (!this.SvgRef?.nativeElement || !this.gSelection) {\n if (this.SvgRef?.nativeElement) {\n this.initD3Zoom();\n }\n if (!this.gSelection) {\n setTimeout(() => this.RenderTree(preserveTransform), 30);\n return;\n }\n }\n\n // Reset positions across all nodes\n for (const n of this.AllNodes) {\n n.x = undefined;\n n.y = undefined;\n }\n\n const isVertical = this.Config.Orientation !== 'left-to-right';\n const nodeWidth = this.Config.NodeWidth || 230;\n const nodeHeight = this.Config.NodeHeight || 90;\n const siblingGap = this.Config.SiblingSpacing || 40;\n const levelGap = this.Config.LevelSpacing || 75;\n\n const activeRoots = this.FocusedNode ? [this.FocusedNode] : this.RootNodes;\n this.log(`[HierarchyTree:renderTree] Starting render for ${activeRoots.length} active root(s):`, activeRoots.map(r => r.Name));\n\n if (activeRoots.length === 0) {\n this.gSelection.selectAll('*').remove();\n return;\n }\n\n // 1. Create root hierarchy\n let rootHierarchy: d3.HierarchyNode<HierarchyNodeData>;\n if (activeRoots.length === 1) {\n rootHierarchy = d3.hierarchy(activeRoots[0], (d) => (d.IsExpanded ? d.Children : []));\n } else {\n // Multiple roots: wrap under a synthetic virtual root\n const virtualRoot: HierarchyNodeData = {\n ID: '__virtual_root__',\n PrimaryKey: new CompositeKey(),\n Name: 'Root',\n DirectChildCount: activeRoots.length,\n TotalDescendantCount: activeRoots.length,\n Depth: -1,\n IsExpanded: true,\n IsSelected: false,\n IsHighlighted: false,\n IsFocusRoot: false,\n Children: activeRoots\n };\n rootHierarchy = d3.hierarchy(virtualRoot, (d) => (d.IsExpanded ? d.Children : []));\n }\n\n // 2. Compute tree layout\n const treeLayout = d3.tree<HierarchyNodeData>()\n .nodeSize(isVertical ? [nodeWidth + siblingGap, nodeHeight + levelGap] : [nodeHeight + siblingGap, nodeWidth + levelGap])\n .separation((a, b) => (a.parent === b.parent ? 1.05 : 1.2));\n\n const treeData = treeLayout(rootHierarchy);\n\n // Filter out virtual root if multi-root\n const nodes = treeData.descendants().filter((d) => d.data.ID !== '__virtual_root__');\n const links = treeData.links().filter((d) => d.source.data.ID !== '__virtual_root__');\n\n // Update positions on node data (centered on D3 node point)\n for (const n of nodes) {\n n.data.x = isVertical ? n.x - nodeWidth / 2 : n.y;\n n.data.y = isVertical ? n.y : n.x - nodeHeight / 2;\n }\n\n this.log(`[HierarchyTree:renderTree] Tree layout computed: ${nodes.length} nodes, ${links.length} links. Node positions:`, nodes.map(n => ({ Name: n.data.Name, x: n.data.x, y: n.data.y })));\n\n // 3. Render Links\n const linkPathGen = (d: d3.HierarchyLink<HierarchyNodeData>): string => {\n const sx = isVertical ? d.source.data.x! + nodeWidth / 2 : d.source.data.x! + nodeWidth;\n const sy = isVertical ? d.source.data.y! + nodeHeight : d.source.data.y! + nodeHeight / 2;\n const tx = isVertical ? d.target.data.x! + nodeWidth / 2 : d.target.data.x!;\n const ty = isVertical ? d.target.data.y! : d.target.data.y! + nodeHeight / 2;\n\n if (isVertical) {\n const midY = (sy + ty) / 2;\n return `M ${sx} ${sy} C ${sx} ${midY}, ${tx} ${midY}, ${tx} ${ty}`;\n } else {\n const midX = (sx + tx) / 2;\n return `M ${sx} ${sy} C ${midX} ${sy}, ${midX} ${ty}, ${tx} ${ty}`;\n }\n };\n\n const linkGroup = this.gSelection.select<SVGGElement>('g.mj-links-group');\n const linkSelection = linkGroup.selectAll<SVGPathElement, d3.HierarchyLink<HierarchyNodeData>>('path.mj-tree-link')\n .data(links, (d) => `${d.source.data.ID}->${d.target.data.ID}`);\n\n linkSelection.exit().remove();\n\n linkSelection.enter()\n .append('path')\n .attr('class', 'mj-tree-link')\n .merge(linkSelection)\n .attr('d', linkPathGen)\n .attr('stroke', (d) => (d.target.data.IsHighlighted ? 'var(--mj-brand-primary, #38bdf8)' : 'var(--mj-border-default, #223254)'))\n .attr('stroke-width', (d) => (d.target.data.IsHighlighted ? 2.5 : 1.5))\n .attr('fill', 'none');\n\n this.AllNodes = [...this.AllNodes];\n this.cdr?.markForCheck();\n this.cdr?.detectChanges();\n if (!preserveTransform) {\n this.FitToScreen(true);\n }\n }\n\n /** @deprecated Use {@link RenderTree}. */\n public renderTree(preserveTransform = false): void {\n return this.RenderTree(preserveTransform);\n }\n\n // --- Interactive Actions ---\n\n /**\n * Toggles the expand/collapse state of a node, firing cancelable Before and After events.\n */\n public ToggleNodeExpansion(node: HierarchyNodeData, event?: MouseEvent): void {\n if (event) event.stopPropagation();\n\n if (node.IsExpanded) {\n const beforeEvt = new CancelableHierarchyNodeEvent(node, event);\n this.BeforeNodeCollapse.emit(beforeEvt);\n if (beforeEvt.IsCanceled) return;\n\n node.IsExpanded = false;\n node.Children = [];\n this.AfterNodeCollapse.emit({ Node: node, OriginalEvent: event });\n } else {\n const beforeEvt = new CancelableHierarchyNodeEvent(node, event);\n this.BeforeNodeExpand.emit(beforeEvt);\n if (beforeEvt.IsCanceled) return;\n\n node.IsExpanded = true;\n node.Children = [...(node._allChildren || [])];\n this.AfterNodeExpand.emit({ Node: node, OriginalEvent: event });\n }\n\n this.RenderTree(true);\n }\n\n /** @deprecated Use {@link ToggleNodeExpansion}. */\n public toggleNodeExpansion(node: HierarchyNodeData, event?: MouseEvent): void {\n return this.ToggleNodeExpansion(node, event);\n }\n\n public CloseDetailsDrawer(): void {\n this.ShowDetailsDrawer = false;\n this.cdr?.markForCheck();\n }\n\n /** @deprecated Use {@link CloseDetailsDrawer}. */\n public closeDetailsDrawer(): void {\n return this.CloseDetailsDrawer();\n }\n\n public OpenDetailsDrawer(): void {\n this.ShowDetailsDrawer = true;\n this.cdr?.markForCheck();\n }\n\n /** @deprecated Use {@link OpenDetailsDrawer}. */\n public openDetailsDrawer(): void {\n return this.OpenDetailsDrawer();\n }\n\n public OnCanvasBackgroundClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (target?.closest('.mj-details-drawer') || target?.closest('.mj-node-card') || target?.closest('.mj-tool-btn')) {\n return;\n }\n }\n\n /** @deprecated Use {@link OnCanvasBackgroundClick}. */\n public onCanvasBackgroundClick(event: MouseEvent): void {\n return this.OnCanvasBackgroundClick(event);\n }\n\n public OnNodeClick(node: HierarchyNodeData, event: MouseEvent): void {\n event.stopPropagation();\n this.SelectedNode = node;\n this.ShowDetailsDrawer = true;\n for (const n of this.AllNodes) {\n n.IsSelected = UUIDsEqual(n.ID, node.ID);\n }\n this.NodeClick.emit({ Node: node, OriginalEvent: event });\n this.NodeSelect.emit({ Node: node, OriginalEvent: event });\n this.cdr?.markForCheck();\n }\n\n /** @deprecated Use {@link OnNodeClick}. */\n public onNodeClick(node: HierarchyNodeData, event: MouseEvent): void {\n return this.OnNodeClick(node, event);\n }\n\n public OnNodeDoubleClick(node: HierarchyNodeData, event: MouseEvent): void {\n event.stopPropagation();\n this.NodeDoubleClick.emit({ Node: node, OriginalEvent: event });\n this.NavigateToRecord(node, event);\n }\n\n /** @deprecated Use {@link OnNodeDoubleClick}. */\n public onNodeDoubleClick(node: HierarchyNodeData, event: MouseEvent): void {\n return this.OnNodeDoubleClick(node, event);\n }\n\n public OnNodeAction(node: HierarchyNodeData, action: string, event: MouseEvent): void {\n event.stopPropagation();\n this.NodeAction.emit({ Node: node, Action: action });\n\n switch (action) {\n case 'open':\n this.NavigateToRecord(node, event);\n break;\n case 'focus':\n this.SetFocusRoot(node.ID);\n break;\n case 'reset-focus':\n this.ResetFocus();\n break;\n case 'add-child':\n // Handled via custom subscriber or event\n break;\n }\n }\n\n /** @deprecated Use {@link OnNodeAction}. */\n public onNodeAction(node: HierarchyNodeData, action: string, event: MouseEvent): void {\n return this.OnNodeAction(node, action, event);\n }\n\n public NavigateToRecord(node: HierarchyNodeData, event?: MouseEvent): void {\n const entityName = this.entityInfo ? this.entityInfo.Name : this.Config.EntityName;\n const navEvent: RecordNavigationEvent = {\n Kind: 'record',\n EntityName: entityName,\n PrimaryKey: node.PrimaryKey,\n OpenInNewTab: event ? event.ctrlKey || event.metaKey : false\n };\n this.Navigate.emit(navEvent);\n }\n\n /** @deprecated Use {@link NavigateToRecord}. */\n public navigateToRecord(node: HierarchyNodeData, event?: MouseEvent): void {\n return this.NavigateToRecord(node, event);\n }\n\n public GetRecordAttributeEntries(record: Record<string, unknown>): { key: string; label: string; value: string }[] {\n const entries: { key: string; label: string; value: string }[] = [];\n const skipFields = new Set([\n 'id', 'parentid', 'parentproductcategoryid', 'parentcategoryid',\n 'companyid', '__mj_version', 'createdat', 'updatedat', 'name'\n ]);\n\n for (const [k, v] of Object.entries(record)) {\n if (skipFields.has(k.toLowerCase()) || k.startsWith('__mj_') || v == null) continue;\n const strVal = typeof v === 'object' ? JSON.stringify(v) : String(v);\n if (strVal.trim() === '') continue;\n entries.push({\n key: k,\n label: k.replace(/([A-Z])/g, ' $1').trim(),\n value: strVal\n });\n }\n return entries.slice(0, 8);\n }\n\n /** @deprecated Use {@link GetRecordAttributeEntries}. */\n public getRecordAttributeEntries(record: Record<string, unknown>): { key: string; label: string; value: string }[] {\n return this.GetRecordAttributeEntries(record);\n }\n\n // --- Search & Highlight ---\n\n public OnSearchInput(): void {\n const q = this.SearchQuery.trim().toLowerCase();\n if (!q) {\n for (const n of this.AllNodes) {\n n.IsHighlighted = false;\n }\n this.MatchingNodeCount = 0;\n this.RenderTree(true);\n return;\n }\n\n let count = 0;\n let firstMatch: HierarchyNodeData | null = null;\n for (const n of this.AllNodes) {\n const matches = n.Name.toLowerCase().includes(q) || (n.Subtitle && n.Subtitle.toLowerCase().includes(q));\n n.IsHighlighted = !!matches;\n if (matches) {\n count++;\n if (!firstMatch) firstMatch = n;\n this.expandAncestors(n);\n }\n }\n\n this.MatchingNodeCount = count;\n this.RenderTree(true);\n\n if (firstMatch && firstMatch.x != null && firstMatch.y != null) {\n this.CenterOnNode(firstMatch);\n }\n }\n\n /** @deprecated Use {@link OnSearchInput}. */\n public onSearchInput(): void {\n return this.OnSearchInput();\n }\n\n public ClearSearch(): void {\n this.SearchQuery = '';\n this.OnSearchInput();\n }\n\n /** @deprecated Use {@link ClearSearch}. */\n public clearSearch(): void {\n return this.ClearSearch();\n }\n\n public CenterOnNode(node: HierarchyNodeData): void {\n if (!this.svgSelection || !this.zoomBehavior || !this.SvgContainerRef?.nativeElement) return;\n if (node.x == null || node.y == null) return;\n\n const rect = this.SvgContainerRef.nativeElement.getBoundingClientRect();\n const width = rect.width > 50 ? rect.width : (this.SvgContainerRef.nativeElement.clientWidth || 800);\n const height = rect.height > 50 ? rect.height : (this.SvgContainerRef.nativeElement.clientHeight || 500);\n const rightMargin = (this.ShowDetailsDrawer && this.SelectedNode) ? 340 : 0;\n const visibleWidth = Math.max(width - rightMargin, 200);\n\n const currentScale = this.currentZoomTransform?.k || this.ZoomLevel || 1;\n const nodeWidth = this.Config.NodeWidth || 230;\n const nodeHeight = this.Config.NodeHeight || 90;\n\n const nodeCenterX = node.x + nodeWidth / 2;\n const nodeCenterY = node.y + nodeHeight / 2;\n\n const tx = visibleWidth / 2 - nodeCenterX * currentScale;\n const ty = height / 2 - nodeCenterY * currentScale;\n\n const target = d3.zoomIdentity.translate(tx, ty).scale(currentScale);\n this.svgSelection.interrupt().transition().duration(400).ease(d3.easeCubicOut).call(this.zoomBehavior.transform, target);\n }\n\n /** @deprecated Use {@link CenterOnNode}. */\n public centerOnNode(node: HierarchyNodeData): void {\n return this.CenterOnNode(node);\n }\n\n private expandAncestors(node: HierarchyNodeData): void {\n let curr = node.ParentID ? this.nodeMap.get(NormalizeUUID(node.ParentID)) : undefined;\n while (curr) {\n curr.IsExpanded = true;\n curr.Children = [...(curr._allChildren || [])];\n curr = curr.ParentID ? this.nodeMap.get(NormalizeUUID(curr.ParentID)) : undefined;\n }\n }\n\n // --- Subtree Focus ---\n\n public SetFocusRoot(recordId?: string): void {\n if (!recordId) {\n this.ResetFocus();\n return;\n }\n\n const target = this.nodeMap.get(NormalizeUUID(recordId));\n if (!target) return;\n\n for (const n of this.AllNodes) n.IsFocusRoot = false;\n target.IsFocusRoot = true;\n this.FocusedNode = target;\n this.RenderTree();\n this.OnFitToViewClick();\n }\n\n /** @deprecated Use {@link SetFocusRoot}. */\n public setFocusRoot(recordId?: string): void {\n return this.SetFocusRoot(recordId);\n }\n\n public ResetFocus(): void {\n for (const n of this.AllNodes) n.IsFocusRoot = false;\n this.FocusedNode = null;\n this.RenderTree();\n this.OnFitToViewClick();\n }\n\n /** @deprecated Use {@link ResetFocus}. */\n public resetFocus(): void {\n return this.ResetFocus();\n }\n\n // --- Toolbar Actions / Verbs ---\n\n public ExpandAll(): void {\n for (const n of this.AllNodes) {\n n.IsExpanded = true;\n n.Children = [...(n._allChildren || [])];\n }\n this.RenderTree(true);\n }\n\n /** @deprecated Use {@link ExpandAll}. */\n public expandAll(): void {\n return this.ExpandAll();\n }\n\n public CollapseAll(): void {\n for (const n of this.AllNodes) {\n if (n.Depth > 0) {\n n.IsExpanded = false;\n n.Children = [];\n }\n }\n this.RenderTree(true);\n }\n\n /** @deprecated Use {@link CollapseAll}. */\n public collapseAll(): void {\n return this.CollapseAll();\n }\n\n public ZoomIn(): void {\n if (!this.svgSelection || !this.zoomBehavior) return;\n const currentScale = this.currentZoomTransform?.k || 1;\n const targetScale = Math.min(currentScale * 1.25, 4.0);\n this.SetZoomLevel(targetScale, true);\n this.ZoomLevel = targetScale;\n this.ZoomChange.emit(targetScale);\n }\n\n /** @deprecated Use {@link ZoomIn}. */\n public zoomIn(): void {\n return this.ZoomIn();\n }\n\n public ZoomOut(): void {\n if (!this.svgSelection || !this.zoomBehavior) return;\n const currentScale = this.currentZoomTransform?.k || 1;\n const targetScale = Math.max(currentScale * 0.8, 0.1);\n this.SetZoomLevel(targetScale, true);\n this.ZoomLevel = targetScale;\n this.ZoomChange.emit(targetScale);\n }\n\n /** @deprecated Use {@link ZoomOut}. */\n public zoomOut(): void {\n return this.ZoomOut();\n }\n\n public SetZoomLevel(scale: number, animated = true): void {\n if (!this.svgSelection || !this.zoomBehavior || !scale) return;\n const container = this.SvgContainerRef?.nativeElement;\n const rect = container?.getBoundingClientRect();\n const width = rect?.width && rect.width > 50 ? rect.width : (container?.clientWidth || 800);\n const height = rect?.height && rect.height > 50 ? rect.height : (container?.clientHeight || 500);\n const current = this.currentZoomTransform || d3.zoomIdentity;\n const cx = width / 2;\n const cy = height / 2;\n const newX = cx - (cx - current.x) * (scale / (current.k || 1));\n const newY = cy - (cy - current.y) * (scale / (current.k || 1));\n const target = d3.zoomIdentity.translate(newX, newY).scale(scale);\n\n if (animated) {\n this.svgSelection.interrupt().transition().duration(250).ease(d3.easeCubicOut).call(this.zoomBehavior.transform, target);\n } else {\n this.svgSelection.interrupt().call(this.zoomBehavior.transform, target);\n }\n }\n\n /** @deprecated Use {@link SetZoomLevel}. */\n public setZoomLevel(scale: number, animated = true): void {\n return this.SetZoomLevel(scale, animated);\n }\n\n public ResetZoom(): void {\n if (!this.svgSelection || !this.zoomBehavior) return;\n this.OnFitToViewClick();\n }\n\n /** @deprecated Use {@link ResetZoom}. */\n public resetZoom(): void {\n return this.ResetZoom();\n }\n\n public OnFitToViewClick(): void {\n this.FitToScreen(false, true);\n setTimeout(() => {\n this.FitToScreen(false, true);\n }, 320);\n }\n\n /** @deprecated Use {@link OnFitToViewClick}. */\n public onFitToViewClick(): void {\n return this.OnFitToViewClick();\n }\n\n public FitToScreen(immediate = false, forceAutoScale = false): void {\n if (!this.svgSelection || !this.zoomBehavior || !this.SvgContainerRef?.nativeElement) return;\n\n const visibleNodes = this.AllNodes.filter((n) => n.x != null && n.y != null);\n if (visibleNodes.length === 0) return;\n\n const nodeWidth = this.Config.NodeWidth || 230;\n const nodeHeight = this.Config.NodeHeight || 90;\n\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\n for (const n of visibleNodes) {\n minX = Math.min(minX, n.x!);\n maxX = Math.max(maxX, n.x! + nodeWidth);\n minY = Math.min(minY, n.y!);\n maxY = Math.max(maxY, n.y! + nodeHeight);\n }\n\n const treeWidth = Math.max(maxX - minX, 1);\n const treeHeight = Math.max(maxY - minY, 1);\n const treeCenterX = (minX + maxX) / 2;\n const treeCenterY = (minY + maxY) / 2;\n\n const rect = this.SvgContainerRef.nativeElement.getBoundingClientRect();\n const width = rect.width > 50 ? rect.width : (this.SvgContainerRef.nativeElement.clientWidth || 800);\n const height = rect.height > 50 ? rect.height : (this.SvgContainerRef.nativeElement.clientHeight || 500);\n const rightMargin = (this.ShowDetailsDrawer && this.SelectedNode) ? 340 : 0;\n const visibleWidth = Math.max(width - rightMargin, 200);\n const padding = 40;\n\n const availWidth = Math.max(visibleWidth - padding * 2, 100);\n const availHeight = Math.max(height - padding * 2, 100);\n const autoScale = Math.max(\n Math.min(\n availWidth / treeWidth,\n availHeight / treeHeight,\n 1.05\n ),\n 0.15\n );\n\n const scale = (forceAutoScale || !this.ZoomLevel) ? autoScale : this.ZoomLevel;\n\n if (forceAutoScale) {\n this.ZoomLevel = autoScale;\n this.ZoomChange.emit(autoScale);\n }\n\n const tx = visibleWidth / 2 - treeCenterX * scale;\n const ty = height / 2 - treeCenterY * scale;\n\n const targetTransform = d3.zoomIdentity.translate(tx, ty).scale(scale);\n\n this.log(`[HierarchyTree:fitToScreen] Container=${width}x${height} (visible=${visibleWidth}), visibleNodes=${visibleNodes.length}, bounds=[${minX.toFixed(1)}, ${minY.toFixed(1)}] to [${maxX.toFixed(1)}, ${maxY.toFixed(1)}] (${treeWidth.toFixed(1)}x${treeHeight.toFixed(1)}), autoScale=${autoScale.toFixed(3)}, usingScale=${scale.toFixed(3)}, translate=(${tx.toFixed(1)}, ${ty.toFixed(1)})`);\n\n if (immediate) {\n this.svgSelection.interrupt().call(this.zoomBehavior.transform, targetTransform);\n } else {\n this.svgSelection.interrupt().transition().duration(300).ease(d3.easeCubicOut).call(this.zoomBehavior.transform, targetTransform);\n }\n }\n\n /** @deprecated Use {@link FitToScreen}. */\n public fitToScreen(immediate = false, forceAutoScale = false): void {\n return this.FitToScreen(immediate, forceAutoScale);\n }\n\n public ExportAsSVG(): string {\n return this.SvgRef?.nativeElement ? this.SvgRef.nativeElement.outerHTML : '';\n }\n\n /** @deprecated Use {@link ExportAsSVG}. */\n public exportAsSVG(): string {\n return this.ExportAsSVG();\n }\n\n public async Refresh(): Promise<void> {\n await this.loadData();\n }\n\n /** @deprecated Use {@link Refresh}. */\n public async refresh(): Promise<void> {\n return this.Refresh();\n }\n}\n","<div class=\"mj-hierarchy-wrapper\" [style.height]=\"Config.Height || '100%'\" [style.min-height]=\"Config.MinHeight || '500px'\">\n <!-- Top Controls Bar -->\n @if (Config.ShowToolbar || Config.ShowSearch) {\n <div class=\"mj-hierarchy-toolbar\">\n <!-- Search Box -->\n @if (Config.ShowSearch) {\n <div class=\"mj-search-box\">\n <i class=\"fa-solid fa-magnifying-glass mj-search-icon\"></i>\n <input\n type=\"text\"\n class=\"mj-search-input\"\n placeholder=\"Search hierarchy...\"\n [(ngModel)]=\"SearchQuery\"\n (input)=\"onSearchInput()\"\n />\n @if (SearchQuery) {\n <button type=\"button\" class=\"mj-clear-btn\" (click)=\"clearSearch()\" title=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n @if (SearchQuery && MatchingNodeCount > 0) {\n <span class=\"mj-match-badge\">{{ MatchingNodeCount }} found</span>\n }\n </div>\n }\n\n <!-- Focus Subtree Indicator -->\n @if (FocusedNode) {\n <div class=\"mj-focus-indicator\">\n <i class=\"fa-solid fa-crosshairs\"></i>\n <span>Focusing subtree: <strong>{{ FocusedNode.Name }}</strong></span>\n <button type=\"button\" class=\"mj-reset-focus-btn\" (click)=\"resetFocus()\" title=\"Show entire hierarchy\">\n <i class=\"fa-solid fa-rotate-left\"></i> View Full Hierarchy\n </button>\n </div>\n }\n\n <!-- Toolbar Action Buttons -->\n @if (Config.ShowToolbar) {\n <div class=\"mj-toolbar-actions\">\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"expandAll()\" title=\"Expand all subtrees\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </button>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"collapseAll()\" title=\"Collapse all subtrees\">\n <i class=\"fa-solid fa-folder\"></i>\n </button>\n <div class=\"mj-tool-divider\"></div>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"zoomIn()\" title=\"Zoom in\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"zoomOut()\" title=\"Zoom out\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"onFitToViewClick()\" title=\"Fit hierarchy to view\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n <div class=\"mj-tool-divider\"></div>\n <button type=\"button\" class=\"mj-tool-btn\" (click)=\"refresh()\" title=\"Reload hierarchy data\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n\n <!-- SVG Canvas Container -->\n <div #svgContainer class=\"mj-canvas-container\" (click)=\"onCanvasBackgroundClick($event)\">\n @if (Loading) {\n <div class=\"mj-state-overlay\">\n <div class=\"mj-spinner\"></div>\n <span>Loading hierarchy...</span>\n </div>\n } @else if (ErrorMessage) {\n <div class=\"mj-state-overlay mj-error-state\">\n <i class=\"fa-solid fa-circle-exclamation mj-error-icon\"></i>\n <span>{{ ErrorMessage }}</span>\n <button type=\"button\" class=\"mj-retry-btn\" (click)=\"loadData()\">Retry</button>\n </div>\n } @else if (AllNodes.length === 0) {\n <div class=\"mj-state-overlay mj-empty-state\">\n <i class=\"fa-solid fa-sitemap mj-empty-icon\"></i>\n <span>No hierarchy records found.</span>\n </div>\n }\n\n <svg #svgElement class=\"mj-hierarchy-svg\">\n <defs>\n <pattern id=\"mj-tree-grid\" width=\"24\" height=\"24\" patternUnits=\"userSpaceOnUse\">\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"var(--mj-border-subtle, #1e293b)\" opacity=\"0.4\" />\n </pattern>\n </defs>\n\n <!-- Background grid -->\n <rect width=\"100%\" height=\"100%\" fill=\"url(#mj-tree-grid)\" />\n\n <!-- Main Canvas Group (Zoomable & Pannable) -->\n <g class=\"mj-hierarchy-canvas\">\n <!-- Connective Link Curves -->\n <g class=\"mj-links-group\"></g>\n\n <!-- Interactive Node Cards via ForeignObject -->\n <g class=\"mj-nodes-group\">\n @for (node of AllNodes; track node.ID) {\n @if (node.x != null && node.y != null) {\n <foreignObject\n [attr.x]=\"node.x\"\n [attr.y]=\"node.y\"\n [attr.width]=\"Config.NodeWidth || 230\"\n [attr.height]=\"Config.NodeHeight || 90\"\n class=\"mj-node-foreign-object\"\n >\n <div\n class=\"mj-node-card\"\n [class.selected]=\"node.IsSelected\"\n [class.highlighted]=\"node.IsHighlighted\"\n [class.focus-root]=\"node.IsFocusRoot\"\n (click)=\"onNodeClick(node, $event)\"\n (dblclick)=\"onNodeDoubleClick(node, $event)\"\n >\n <!-- Accent Top Border -->\n <div class=\"mj-card-accent\" [style.background]=\"node.Color || Config.DefaultColor\"></div>\n\n <!-- Node Card Header -->\n <div class=\"mj-node-header\">\n <div class=\"mj-node-icon\" [style.color]=\"node.Color || Config.DefaultColor\">\n <i [class]=\"node.Icon || Config.DefaultIcon\"></i>\n </div>\n <div class=\"mj-node-title-group\">\n <div class=\"mj-node-name\" [title]=\"node.Name\">{{ node.Name }}</div>\n @if (node.Subtitle) {\n <div class=\"mj-node-subtitle\">{{ node.Subtitle }}</div>\n }\n </div>\n </div>\n\n <!-- Node Card Footer & Actions -->\n <div class=\"mj-node-footer\">\n <!-- Subtree Expansion Pill -->\n @if (node.DirectChildCount > 0) {\n <button\n type=\"button\"\n class=\"mj-expand-badge\"\n [class.collapsed]=\"!node.IsExpanded\"\n (click)=\"toggleNodeExpansion(node, $event)\"\n [title]=\"node.IsExpanded ? 'Collapse sub-branch' : 'Expand ' + node.DirectChildCount + ' children'\"\n >\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"node.IsExpanded\" [class.fa-chevron-right]=\"!node.IsExpanded\"></i>\n <span>{{ node.DirectChildCount }}</span>\n </button>\n } @else {\n <span class=\"mj-leaf-indicator\">Leaf</span>\n }\n\n <!-- Quick Action Buttons -->\n @if (AllowNodeActions) {\n <div class=\"mj-node-actions\">\n <button\n type=\"button\"\n class=\"mj-node-action-btn\"\n (click)=\"onNodeAction(node, 'focus', $event)\"\n title=\"Focus on this subtree\"\n >\n <i class=\"fa-solid fa-crosshairs\"></i>\n </button>\n <button\n type=\"button\"\n class=\"mj-node-action-btn\"\n (click)=\"onNodeAction(node, 'open', $event)\"\n title=\"Open record in Explorer\"\n >\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n </foreignObject>\n }\n }\n </g>\n </g>\n </svg>\n\n <!-- Slide-In Node Details Drawer -->\n <aside\n class=\"mj-details-drawer\"\n [class.open]=\"SelectedNode != null && ShowDetailsDrawer\"\n aria-label=\"Node details panel\"\n >\n @if (SelectedNode) {\n <div class=\"mj-drawer-header\">\n <div class=\"mj-drawer-title-group\">\n <div class=\"mj-drawer-icon\" [style.color]=\"SelectedNode.Color || Config.DefaultColor\">\n <i [class]=\"SelectedNode.Icon || Config.DefaultIcon\"></i>\n </div>\n <div class=\"mj-drawer-titles\">\n <h4 class=\"mj-drawer-name\" [title]=\"SelectedNode.Name\">{{ SelectedNode.Name }}</h4>\n @if (SelectedNode.Subtitle) {\n <p class=\"mj-drawer-subtitle\">{{ SelectedNode.Subtitle }}</p>\n }\n </div>\n </div>\n <button\n type=\"button\"\n class=\"mj-drawer-close-btn\"\n (click)=\"closeDetailsDrawer()\"\n title=\"Close details\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"mj-drawer-body\">\n <div class=\"mj-drawer-stats\">\n <div class=\"mj-stat-card\">\n <span class=\"mj-stat-num\">{{ SelectedNode.Depth }}</span>\n <span class=\"mj-stat-label\">Hierarchy Level</span>\n </div>\n <div class=\"mj-stat-card\">\n <span class=\"mj-stat-num\">{{ SelectedNode.DirectChildCount }}</span>\n <span class=\"mj-stat-label\">Direct Children</span>\n </div>\n <div class=\"mj-stat-card\">\n <span class=\"mj-stat-num\">{{ SelectedNode.TotalDescendantCount }}</span>\n <span class=\"mj-stat-label\">Total Subtree</span>\n </div>\n </div>\n\n @if (SelectedNode.Record && getRecordAttributeEntries(SelectedNode.Record).length > 0) {\n <div class=\"mj-drawer-section\">\n <h5 class=\"mj-section-heading\">Attributes</h5>\n <dl class=\"mj-attr-list\">\n @for (attr of getRecordAttributeEntries(SelectedNode.Record); track attr.key) {\n <div class=\"mj-attr-row\">\n <dt class=\"mj-attr-dt\">{{ attr.label }}</dt>\n <dd class=\"mj-attr-dd\" [title]=\"attr.value\">{{ attr.value }}</dd>\n </div>\n }\n </dl>\n </div>\n }\n\n <div class=\"mj-drawer-actions\">\n <button\n type=\"button\"\n class=\"mj-drawer-btn-primary\"\n (click)=\"navigateToRecord(SelectedNode)\"\n title=\"Open this record in Explorer\"\n >\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n <span>Open Record</span>\n </button>\n\n <div class=\"mj-drawer-btn-row\">\n @if (SelectedNode.DirectChildCount > 0) {\n <button\n type=\"button\"\n class=\"mj-drawer-btn-secondary\"\n (click)=\"toggleNodeExpansion(SelectedNode)\"\n >\n <i class=\"fa-solid\" [class.fa-folder-open]=\"SelectedNode.IsExpanded\" [class.fa-folder]=\"!SelectedNode.IsExpanded\"></i>\n <span>{{ SelectedNode.IsExpanded ? 'Collapse' : 'Expand' }}</span>\n </button>\n }\n <button\n type=\"button\"\n class=\"mj-drawer-btn-secondary\"\n (click)=\"setFocusRoot(SelectedNode.ID)\"\n title=\"Focus hierarchy on this subtree\"\n >\n <i class=\"fa-solid fa-crosshairs\"></i>\n <span>Focus Tree</span>\n </button>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n</div>\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-hierarchy-tree",
|
|
3
|
-
"version": "6.1
|
|
3
|
+
"version": "6.2.0-edge.1",
|
|
4
4
|
"description": "MemberJunction: Generic interactive visual hierarchy and org-chart component with D3 layout, Before/After cancelable events, and MJ design tokens",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@angular/compiler": "21.2.22",
|
|
23
23
|
"@angular/compiler-cli": "21.2.22",
|
|
24
|
-
"@memberjunction/ng-test-utils": "6.1
|
|
24
|
+
"@memberjunction/ng-test-utils": "6.2.0-edge.1",
|
|
25
25
|
"@types/d3": "^7.4.3",
|
|
26
26
|
"vitest": "^4.0.18"
|
|
27
27
|
},
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"@angular/forms": "^21.2.22"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@memberjunction/core": "6.1
|
|
35
|
-
"@memberjunction/core-entities": "6.1
|
|
36
|
-
"@memberjunction/global": "6.1
|
|
37
|
-
"@memberjunction/ng-base-forms": "6.1
|
|
38
|
-
"@memberjunction/ng-base-types": "6.1
|
|
39
|
-
"@memberjunction/ng-ui-components": "6.1
|
|
34
|
+
"@memberjunction/core": "6.2.0-edge.1",
|
|
35
|
+
"@memberjunction/core-entities": "6.2.0-edge.1",
|
|
36
|
+
"@memberjunction/global": "6.2.0-edge.1",
|
|
37
|
+
"@memberjunction/ng-base-forms": "6.2.0-edge.1",
|
|
38
|
+
"@memberjunction/ng-base-types": "6.2.0-edge.1",
|
|
39
|
+
"@memberjunction/ng-ui-components": "6.2.0-edge.1",
|
|
40
40
|
"d3": "^7.9.0",
|
|
41
41
|
"rxjs": "^7.8.2",
|
|
42
42
|
"tslib": "^2.8.1"
|