{"version":3,"file":"acorex-charts-hierarchy-chart.mjs","sources":["../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.config.ts","../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.component.ts","../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.component.html","../../../../packages/charts/hierarchy-chart/src/acorex-charts-hierarchy-chart.ts"],"sourcesContent":["import { AX_CHART_DEFAULT_MESSAGES } from '@acorex/charts';\nimport { InjectionToken } from '@angular/core';\nimport { AXHierarchyChartOption } from './hierarchy-chart.type';\n\nexport const AXHierarchyChartDefaultConfig: AXHierarchyChartOption = {\n  direction: 'vertical',\n  margin: { top: 40, right: 120, bottom: 40, left: 120 },\n  nodeRadius: 30,\n  nodeStrokeWidth: 1.5,\n  linkWidth: 1.5,\n  linkStyle: 'curved',\n  nodeWidth: 120,\n  nodeHeight: 60,\n  nodeSpacingX: 80,\n  nodeSpacingY: 120,\n  showTooltip: true,\n  collapsible: true,\n  expandAll: false,\n  animationDuration: 100,\n  animationEasing: 'cubic-out',\n  messages: {\n    ...AX_CHART_DEFAULT_MESSAGES,\n    noDataIcon: 'fa-light fa-sitemap',\n  },\n};\n\nexport const AX_HIERARCHY_CHART_CONFIG = new InjectionToken<AXHierarchyChartOption>('AX_HIERARCHY_CHART_CONFIG', {\n  providedIn: 'root',\n  factory: () => AXHierarchyChartDefaultConfig,\n});\n\nexport type PartialHierarchyChartConfig = Partial<AXHierarchyChartOption>;\n\nexport function hierarchyChartConfig(config: PartialHierarchyChartConfig = {}): AXHierarchyChartOption {\n  return {\n    ...AXHierarchyChartDefaultConfig,\n    ...config,\n    margin: {\n      ...AXHierarchyChartDefaultConfig.margin,\n      ...config.margin,\n    },\n    messages: {\n      ...AXHierarchyChartDefaultConfig.messages,\n      ...config.messages,\n    },\n  };\n}\n","import {\n  AXChartComponent,\n  AXChartComponentBase,\n  mergeChartMessages,\n  mergeChartOptions,\n  renderChartEmptyMessage,\n} from '@acorex/charts';\n\nimport {\n  Component,\n  ElementRef,\n  EmbeddedViewRef,\n  NgZone,\n  OnDestroy,\n  TemplateRef,\n  ViewContainerRef,\n  ViewEncapsulation,\n  afterNextRender,\n  computed,\n  contentChild,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { AX_HIERARCHY_CHART_CONFIG } from './hierarchy-chart.config';\nimport {\n  AXHierarchyChartClickEvent,\n  AXHierarchyChartData,\n  AXHierarchyChartNode,\n  AXHierarchyChartNodeContext,\n  AXHierarchyChartOption,\n  AXHierarchyChartToggleEvent,\n} from './hierarchy-chart.type';\n/**\n * A highly customizable hierarchical visualization component that can be used for:\n * - Organization charts\n * - Tree diagrams\n * - Dependency visualizations\n * - Process flows\n *\n * Supports both default node styling and custom node templates.\n */\n@Component({\n  selector: 'ax-hierarchy-chart',\n  templateUrl: './hierarchy-chart.component.html',\n  styleUrls: ['./hierarchy-chart.component.css'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AXHierarchyChartComponent extends AXChartComponent implements AXChartComponentBase, OnDestroy {\n  // Chart container reference\n  private chartContainer = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n  // Custom node template provided by the user\n  customNodeTemplate = contentChild<TemplateRef<AXHierarchyChartNodeContext>>('nodeTemplate');\n  // Services\n  private ngZone = inject(NgZone);\n  private viewContainerRef = inject(ViewContainerRef);\n  private configToken = inject(AX_HIERARCHY_CHART_CONFIG);\n\n  // D3 instance\n  private d3: any;\n\n  // Internal state signals\n  private _expandedNodes = signal<Map<string, boolean>>(new Map());\n  private _initialized = signal(false);\n  private _rendered = signal(false);\n  private _dimensions = signal({ width: 0, height: 0 });\n  private _nodeElements = signal<Map<string, any>>(new Map()); // Store references to node elements\n  private _chartData = signal<any>(null); // Store the current chart data and layout\n  private embeddedViews: EmbeddedViewRef<unknown>[] = [];\n\n  // Inputs\n  data = input<AXHierarchyChartData | AXHierarchyChartData[]>([]);\n  options = input<AXHierarchyChartOption>({});\n  nodeTemplate = input<TemplateRef<AXHierarchyChartNodeContext> | null>(null);\n\n  // Outputs\n  itemClick = output<AXHierarchyChartClickEvent>();\n  nodeToggle = output<AXHierarchyChartToggleEvent>();\n\n  // Computed values\n  protected processedData = computed(() => {\n    const data = this.data();\n    // Handle both single node and array formats\n    return Array.isArray(data) ? { id: 'root', children: data } : data;\n  });\n\n  // Check if custom template is available\n  protected hasCustomTemplate = computed(() => {\n    return Boolean(this.customNodeTemplate() || this.nodeTemplate());\n  });\n\n  protected effectiveOptions = computed(() => mergeChartOptions(this.configToken, this.options()));\n\n  // Messages with defaults\n  protected effectiveMessages = computed(() => mergeChartMessages(this.configToken.messages, this.options()?.messages));\n\n  constructor() {\n    super();\n    // Dynamically load D3 and initialize the chart when the component is ready\n    afterNextRender(() => {\n      this._initialized.set(true);\n      this.loadD3();\n    });\n\n    effect(() => {\n      const data = this.processedData();\n      const expandAll = this.effectiveOptions().expandAll ?? false;\n      const expandedMap = new Map<string, boolean>();\n\n      const processNode = (node: AXHierarchyChartData) => {\n        if (!node.children?.length) {\n          return;\n        }\n\n        const defaultExpanded = node.isExpanded !== undefined ? node.isExpanded : expandAll;\n        expandedMap.set(node.id, defaultExpanded);\n        node.children.forEach((child) => processNode(child));\n      };\n\n      if (data.children?.length) {\n        data.children.forEach((node) => processNode(node));\n      } else if (data.id) {\n        processNode(data);\n      }\n\n      this._expandedNodes.set(expandedMap);\n    });\n\n    // Watch for changes to redraw the chart\n    effect(() => {\n      // Access these to track them\n      this.processedData();\n      this.nodeTemplate();\n      this.customNodeTemplate();\n      this.effectiveOptions();\n      this._expandedNodes();\n\n      if (this._initialized() && this.d3 && this._rendered()) {\n        this.updateDimensions();\n        this.createChart();\n      }\n    });\n  }\n\n  /**\n   * Dynamically load D3.js to reduce initial bundle size\n   */\n  protected async loadD3(): Promise<void> {\n    try {\n      this.d3 = await import('d3');\n      if (this._initialized() && this.chartContainer()) {\n        this.updateDimensions();\n        this.createChart();\n        this._rendered.set(true);\n      }\n    } catch (error) {\n      console.error('Failed to load D3.js:', error);\n    }\n  }\n\n  /**\n   * Update dimensions based on container size\n   */\n  private updateDimensions(): void {\n    const container = this.chartContainer().nativeElement;\n    const options = this.effectiveOptions();\n\n    const containerRect = container.getBoundingClientRect();\n    const width = options.width || Math.max(containerRect.width || 0, 1);\n    const height = options.height || Math.max(containerRect.height || 0, 1);\n\n    this._dimensions.set({ width, height });\n  }\n\n  /**\n   * Create and render the hierarchy chart\n   */\n  public createChart(): void {\n    if (!this.d3) {\n      return;\n    }\n\n    // Clear any existing chart\n    this.cleanupChart();\n\n    const container = this.chartContainer().nativeElement;\n    const data = this.processedData();\n\n    // Check for null/undefined data or empty children\n    if (!data || !data.children || data.children.length === 0) {\n      this.showNoDataMessage(container);\n      return;\n    }\n\n    const options = this.effectiveOptions();\n    const dimensions = this._dimensions();\n    const expandedNodes = this._expandedNodes();\n\n    this.ngZone.runOutsideAngular(() => {\n      // Get dimensions and options\n      const { width, height } = dimensions;\n      const margin = options.margin || { top: 40, right: 120, bottom: 40, left: 120 };\n      const nodeWidth = options.nodeWidth || 120;\n      const nodeHeight = options.nodeHeight || 60;\n      const nodeSpacingX = options.nodeSpacingX || 80;\n      const nodeSpacingY = options.nodeSpacingY || 120;\n      const isHorizontal = options.direction === 'horizontal';\n\n      // Create SVG container with viewBox for responsiveness\n      const svg = this.d3\n        .select(container)\n        .append('svg')\n        .attr('width', '100%')\n        .attr('height', '100%')\n        .attr('viewBox', `0 0 ${width} ${height}`)\n        .attr('preserveAspectRatio', 'xMidYMid meet')\n        .style('overflow', 'visible')\n        .classed(options.className || '', !!options.className);\n\n      // Create hierarchy layout from data\n      const rootData = this.processedData();\n      const root = this.d3.hierarchy(rootData);\n\n      // Apply expansion state to nodes\n      root.descendants().forEach((node: any) => {\n        if (node.data.id !== 'root' && node.children) {\n          if (expandedNodes.has(node.data.id) && !expandedNodes.get(node.data.id)) {\n            node._children = node.children; // Store children\n            node.children = null; // Collapse node\n          }\n        }\n      });\n\n      // Set up the tree layout based on direction option\n      const treeLayout = this.d3\n        .tree()\n        .nodeSize([\n          isHorizontal ? nodeHeight + nodeSpacingY : nodeWidth + nodeSpacingX,\n          isHorizontal ? nodeWidth + nodeSpacingX : nodeHeight + nodeSpacingY,\n        ])\n        .separation((a: any, b: any) => {\n          return a.parent === b.parent ? 1.2 : 1.5;\n        });\n\n      treeLayout(root);\n\n      // Store the current tree layout data for future updates\n      this._chartData.set({\n        root,\n        treeLayout,\n        isHorizontal,\n        nodeWidth,\n        nodeHeight,\n      });\n\n      // Adjust root position based on direction\n      const rootX = isHorizontal ? margin.top : width / 2;\n      const rootY = isHorizontal ? margin.left : margin.top;\n\n      // Calculate bounds of the tree after layout\n      let minX = Infinity;\n      let maxX = -Infinity;\n      let minY = Infinity;\n      let maxY = -Infinity;\n\n      root.descendants().forEach((d: any) => {\n        if (d.data.id === 'root') return;\n\n        const x = isHorizontal ? d.x : d.x;\n        const y = isHorizontal ? d.y : d.y;\n\n        minX = Math.min(minX, x);\n        maxX = Math.max(maxX, x);\n        minY = Math.min(minY, y);\n        maxY = Math.max(maxY, y);\n      });\n\n      // Calculate the center of the tree\n      const centerX = Number.isFinite(minX) && Number.isFinite(maxX) ? (minX + maxX) / 2 : 0;\n      const centerY = Number.isFinite(minY) && Number.isFinite(maxY) ? (minY + maxY) / 2 : 0;\n\n      // Create a group for the chart content with proper centering\n      const g = svg\n        .append('g')\n        .attr(\n          'transform',\n          isHorizontal\n            ? `translate(${margin.left}, ${height / 2 - centerX})`\n            : `translate(${width / 2 - centerX}, ${margin.top})`,\n        );\n\n      // Add zoom and pan behavior (replaces AXPanViewDirective)\n      const zoom = this.d3\n        .zoom()\n        .scaleExtent([0.1, 3]) // Min zoom: 10%, Max zoom: 300%\n        .on('zoom', (event: any) => {\n          g.attr('transform', event.transform);\n        });\n\n      // Apply zoom behavior to SVG\n      svg.call(zoom);\n\n      // Set initial transform to match the centering\n      const initialTransform = this.d3.zoomIdentity.translate(\n        isHorizontal ? margin.left : width / 2 - centerX,\n        isHorizontal ? height / 2 - centerX : margin.top,\n      );\n      svg.call(zoom.transform, initialTransform);\n\n      // Draw links between nodes\n      const links = g\n        .selectAll('.link')\n        .data(root.links().filter((d: any) => d.source.data.id !== 'root'))\n        .enter()\n        .append('path')\n        .attr('class', 'ax-hierarchy-chart-link')\n        .attr('d', (d: any) => {\n          // Get the link style from options\n          const linkStyle = options.linkStyle || 'curved';\n\n          // Source and target coordinates based on direction\n          const sourceX = isHorizontal ? d.source.y : d.source.x;\n          const sourceY = isHorizontal ? d.source.x : d.source.y;\n          const targetX = isHorizontal ? d.target.y : d.target.x;\n          const targetY = isHorizontal ? d.target.x : d.target.y;\n\n          // Variables for rounded corners\n          let xDistance, yDistance, cornerRadius, midX, midY;\n\n          switch (linkStyle) {\n            case 'straight':\n              // Direct straight line\n              return `M${sourceX},${sourceY}L${targetX},${targetY}`;\n\n            case 'rounded':\n              // Curved line with rounded corners\n              xDistance = Math.abs(targetX - sourceX);\n              yDistance = Math.abs(targetY - sourceY);\n              cornerRadius = Math.min(xDistance, yDistance) * 0.2; // Reduced radius for better appearance\n\n              if (isHorizontal) {\n                // For horizontal layout\n                const halfDistance = (targetX - sourceX) / 2;\n                const xMid = sourceX + halfDistance;\n\n                return `\n                  M${sourceX},${sourceY}\n                  H${xMid - cornerRadius}\n                  Q${xMid},${sourceY} ${xMid},${sourceY + Math.sign(targetY - sourceY) * cornerRadius}\n                  V${targetY - Math.sign(targetY - sourceY) * cornerRadius}\n                  Q${xMid},${targetY} ${xMid + cornerRadius},${targetY}\n                  H${targetX}\n                `;\n              } else {\n                // For vertical layout\n                const halfDistance = (targetY - sourceY) / 2;\n                const yMid = sourceY + halfDistance;\n\n                return `\n                  M${sourceX},${sourceY}\n                  V${yMid - cornerRadius}\n                  Q${sourceX},${yMid} ${sourceX + Math.sign(targetX - sourceX) * cornerRadius},${yMid}\n                  H${targetX - Math.sign(targetX - sourceX) * cornerRadius}\n                  Q${targetX},${yMid} ${targetX},${yMid + cornerRadius}\n                  V${targetY}\n                `;\n              }\n\n            case 'step':\n              // L-shaped stepped line\n              if (isHorizontal) {\n                return `M${sourceX},${sourceY}H${(sourceX + targetX) / 2}V${targetY}H${targetX}`;\n              } else {\n                return `M${sourceX},${sourceY}V${(sourceY + targetY) / 2}H${targetX}V${targetY}`;\n              }\n\n            case 'curved':\n            default:\n              // Default curved line using D3's built-in link generator\n              if (isHorizontal) {\n                return this.d3\n                  .linkHorizontal()\n                  .x((d: any) => d.y)\n                  .y((d: any) => d.x)(d);\n              } else {\n                return this.d3\n                  .linkVertical()\n                  .x((d: any) => d.x)\n                  .y((d: any) => d.y)(d);\n              }\n          }\n        })\n        .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-link-color))`)\n        .attr('stroke-width', options.linkWidth)\n        .attr('fill', 'none')\n        .attr('opacity', 1);\n\n      // Determine which template to use for rendering nodes\n      const useCustomTemplate = this.hasCustomTemplate();\n      const templateToUse = this.nodeTemplate() || this.customNodeTemplate();\n\n      // Create a map to store node elements for future updates\n      const nodeElementsMap = new Map<string, any>();\n\n      // Create node groups\n      const nodeGroups = g\n        .selectAll('.node-group')\n        .data(root.descendants().filter((d: any) => d.data.id !== 'root'))\n        .enter()\n        .append('g')\n        .attr('class', 'ax-hierarchy-chart-node-group')\n        .attr('data-node-id', (d: any) => d.data.id) // Add a data attribute for easier selection\n        .attr('transform', (d: any) => {\n          const x = isHorizontal ? d.y : d.x;\n          const y = isHorizontal ? d.x : d.y;\n          return `translate(${x},${y})`;\n        })\n        .attr('opacity', 1); // Display nodes immediately with full opacity\n\n      // Store node elements in the map\n      nodeGroups.each(function (this: SVGGElement, d: any) {\n        nodeElementsMap.set(d.data.id, this);\n      });\n\n      // Update the node elements signal\n      this._nodeElements.set(nodeElementsMap);\n\n      if (useCustomTemplate && templateToUse) {\n        // Render custom node templates\n        nodeGroups.each((d: any, i: number, nodes: any[]) => {\n          const node = d.data;\n          const element = nodes[i];\n          const hasChildren = !!(node.children && node.children.length > 0);\n          const isExpanded = hasChildren && this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n\n          // Enhance the node with expanded state and toggle function\n          node.expanded = isExpanded || false;\n          node.toggleExpanded = () => this.toggleNode(node.id);\n\n          // Create a foreignObject for the template\n          const foreignObject = this.d3\n            .select(element)\n            .append('foreignObject')\n            .attr('x', -nodeWidth / 2)\n            .attr('y', -nodeHeight / 2)\n            .attr('width', nodeWidth)\n            .attr('height', nodeHeight)\n            .attr('class', 'ax-hierarchy-chart-node-container')\n            .on('click', (event: MouseEvent) => {\n              // Don't propagate the event if it's coming from an interactive element\n              // like a button inside the template\n              const target = event.target as HTMLElement;\n              const isInteractive =\n                target.tagName === 'BUTTON' || target.tagName === 'A' || target.closest('button, a, [role=\"button\"]');\n\n              if (!isInteractive) {\n                this.handleNodeClick(event, d);\n              }\n            });\n\n          // Create a div to hold the template\n          const div = foreignObject\n            .append('xhtml:div')\n            .attr('class', 'ax-hierarchy-chart-node-content')\n            .style('width', '100%')\n            .style('height', '100%');\n\n          // Render the template into the div\n          this.ngZone.run(() => {\n            // Create context with enhanced node as the implicit value\n            const context: AXHierarchyChartNodeContext = {\n              $implicit: node as AXHierarchyChartNode & { expanded: boolean; toggleExpanded: () => void },\n            };\n\n            const viewRef = this.viewContainerRef.createEmbeddedView(templateToUse!, context);\n            this.embeddedViews.push(viewRef);\n            viewRef.detectChanges();\n\n            // Append template contents to the div\n            const nodes = viewRef.rootNodes;\n            for (const node of nodes) {\n              div.node().appendChild(node);\n            }\n          });\n        });\n      } else {\n        // Render enhanced default nodes (rectangles with text and icons)\n        nodeGroups.each((d: any, i: number, nodes: any[]) => {\n          const group = this.d3.select(nodes[i]);\n          const node = d.data;\n          const hasChildren = !!(node.children && node.children.length > 0);\n\n          // Node background rect with rounded corners\n          group\n            .append('rect')\n            .attr('x', -nodeWidth / 2)\n            .attr('y', -nodeHeight / 2)\n            .attr('width', nodeWidth)\n            .attr('height', nodeHeight)\n            .attr('rx', 6)\n            .attr('ry', 6)\n            .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n            .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n            .attr('stroke-width', options.nodeStrokeWidth)\n            .attr('class', 'ax-hierarchy-chart-node');\n\n          // Main title/name\n          group\n            .append('text')\n            .attr('y', -10)\n            .attr('text-anchor', 'middle')\n            .attr('class', 'ax-hierarchy-chart-node-title')\n            .attr('fill', 'white')\n            .attr('font-weight', 'bold')\n            .text(node.name || node.label || '');\n\n          // Subtitle if provided\n          if (node.subtitle) {\n            group\n              .append('text')\n              .attr('y', 10)\n              .attr('text-anchor', 'middle')\n              .attr('class', 'ax-hierarchy-chart-node-subtitle')\n              .attr('fill', 'rgba(255, 255, 255, 0.8)')\n              .attr('font-size', '0.8em')\n              .text(node.subtitle);\n          }\n\n          // Type label if provided\n          if (node.type) {\n            group\n              .append('text')\n              .attr('y', 25)\n              .attr('text-anchor', 'middle')\n              .attr('class', 'ax-hierarchy-chart-node-type')\n              .attr('fill', 'rgba(255, 255, 255, 0.7)')\n              .attr('font-size', '0.7em')\n              .text(node.type);\n          }\n\n          // Add expand/collapse indicator if node has children\n          if (hasChildren && options.collapsible) {\n            const isExpanded = this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n\n            // Toggle button with better styling\n            group\n              .append('circle')\n              .attr('r', 10)\n              .attr('cx', nodeWidth / 2 - 12)\n              .attr('cy', -nodeHeight / 2 + 12)\n              .attr('fill', 'white')\n              .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n              .attr('stroke-width', 1)\n              .attr('class', 'ax-hierarchy-chart-toggle-indicator')\n              .style('cursor', 'pointer')\n              .on('click', (event: MouseEvent) => {\n                event.stopPropagation();\n                this.toggleNode(node.id);\n              });\n\n            // Toggle icon\n            group\n              .append('text')\n              .attr('x', nodeWidth / 2 - 12)\n              .attr('y', -nodeHeight / 2 + 12)\n              .attr('dy', '0.32em')\n              .attr('text-anchor', 'middle')\n              .attr('class', 'ax-hierarchy-chart-toggle-icon')\n              .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n              .attr('font-weight', 'bold')\n              .style('cursor', 'pointer')\n              .text(isExpanded ? '−' : '+')\n              .on('click', (event: MouseEvent) => {\n                event.stopPropagation();\n                this.toggleNode(node.id);\n              });\n          }\n\n          // Icon if provided\n          if (node.icon) {\n            group\n              .append('text')\n              .attr('x', -nodeWidth / 2 + 15)\n              .attr('y', 0)\n              .attr('dy', '0.32em')\n              .attr('class', 'ax-hierarchy-chart-node-icon')\n              .attr('fill', 'white')\n              .attr('class', node.icon);\n          }\n\n          // Add click handler to the whole node\n          group.on('click', (event: MouseEvent) => {\n            this.handleNodeClick(event, d);\n          });\n\n          // Add tooltip if enabled\n          if (options.showTooltip && (node.tooltip || node.description)) {\n            group.append('title').text(node.tooltip || node.description || '');\n          }\n        });\n      }\n    });\n  }\n\n  /**\n   * Toggle node expansion state\n   */\n  public toggleNode(nodeId: string): void {\n    const expandedNodes = new Map(this._expandedNodes());\n    const currentState = expandedNodes.get(nodeId);\n    const newState = currentState === undefined ? false : !currentState;\n\n    expandedNodes.set(nodeId, newState);\n    this._expandedNodes.set(expandedNodes);\n\n    // Emit toggle event\n    this.findNodeById(this.processedData(), nodeId).then((node) => {\n      if (node) {\n        this.nodeToggle.emit({\n          node,\n          expanded: newState,\n        });\n      }\n    });\n\n    // Update toggle indicator immediately for better UX\n    this.updateToggleIndicator(nodeId, newState);\n  }\n\n  /**\n   * Update just the toggle indicator without redrawing the chart\n   */\n  private updateToggleIndicator(nodeId: string, expanded: boolean): void {\n    if (!this.d3 || !this.chartContainer()) return;\n\n    this.ngZone.runOutsideAngular(() => {\n      const container = this.chartContainer().nativeElement;\n      const svg = container.querySelector('svg');\n      if (!svg) return;\n\n      // Find and update the toggle indicator for the specific node\n      const nodeGroup = this.d3.select(svg).select(`[data-node-id=\"${nodeId}\"]`);\n      if (nodeGroup.empty()) return;\n\n      // Update the toggle icon (if it exists)\n      const toggleIcon = nodeGroup.select('.ax-hierarchy-chart-toggle-icon');\n      if (!toggleIcon.empty()) {\n        toggleIcon.text(expanded ? '−' : '+');\n      }\n    });\n  }\n\n  /**\n   * Find a node by ID\n   */\n  private async findNodeById(data: AXHierarchyChartData, id: string): Promise<AXHierarchyChartData | null> {\n    if (data.id === id) {\n      return data;\n    }\n\n    if (data.children) {\n      for (const child of data.children) {\n        const found = this.findNodeById(child, id);\n        if (found) {\n          return found;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Handle node click events\n   */\n  private handleNodeClick(event: MouseEvent, d: any): void {\n    const node = d.data;\n\n    // Emit click event\n    this.itemClick.emit({\n      event: { nativeEvent: event, sender: this },\n      item: node,\n      element: event.currentTarget as HTMLElement,\n    });\n  }\n\n  /**\n   * Clear existing chart\n   */\n  public cleanupChart(): void {\n    this.destroyEmbeddedViews();\n\n    const container = this.chartContainer()?.nativeElement;\n    if (!container) return;\n\n    container\n      .querySelectorAll('svg, .ax-chart-empty, .ax-hierarchy-chart-no-data-message')\n      .forEach((el) => el.remove());\n  }\n\n  ngOnDestroy(): void {\n    this.cleanupChart();\n  }\n\n  private destroyEmbeddedViews(): void {\n    for (const view of this.embeddedViews) {\n      view.destroy();\n    }\n    this.embeddedViews = [];\n  }\n\n  public updateChart(): void {\n    this.createChart();\n  }\n\n  /**\n   * Shows a message when no data is available\n   */\n  private showNoDataMessage(containerElement: HTMLElement): void {\n    const messages = this.effectiveMessages();\n    renderChartEmptyMessage(this.d3, containerElement, {\n      icon: messages.noDataIcon,\n      title: messages.noData,\n      help: messages.noDataHelp,\n    });\n  }\n}\n","<div class=\"ax-hierarchy-chart\" role=\"img\" #chartContainer></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}