@acorex/charts 21.0.1-next.82 → 21.0.1-next.84

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":"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 { 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 noData: 'No data available',\n noDataHelp: 'Please provide hierarchy data to display the chart',\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 const result = {\n ...AXHierarchyChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { AXChartComponent, AXChartComponentBase } from '@acorex/charts';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\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.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXHierarchyChartComponent extends AXChartComponent implements AXChartComponentBase {\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\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(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n // Messages with defaults\n protected effectiveMessages = computed(() => {\n const defaultMessages = {\n noData: 'No data available',\n noDataHelp: 'Please provide hierarchy data to display the chart',\n noDataIcon: 'fa-light fa-sitemap',\n };\n return {\n ...defaultMessages,\n ...this.effectiveOptions().messages,\n };\n });\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 this.initializeExpandedState();\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.createChart();\n }\n });\n }\n\n /**\n * Initialize the expanded state for all nodes\n */\n private initializeExpandedState(): void {\n const newExpandedNodes = new Map<string, boolean>();\n const data = this.processedData();\n const expandAll = this.effectiveOptions().expandAll;\n\n // Helper function to recursively process nodes\n const processNode = (node: AXHierarchyChartData) => {\n if (node.children && node.children.length > 0) {\n // Set initial expansion state based on node property or global option\n newExpandedNodes.set(node.id, node.isExpanded !== undefined ? node.isExpanded : expandAll);\n\n // Process children\n node.children.forEach((child) => processNode(child));\n }\n };\n\n // Start processing\n if (data.children) {\n data.children.forEach((node) => processNode(node));\n } else if ((data as any).id) {\n processNode(data as AXHierarchyChartData);\n }\n\n this._expandedNodes.set(newExpandedNodes);\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, 300);\n const height = options.height || Math.max(containerRect.height, 400);\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 = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\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}, ${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\n .translate(\n isHorizontal ? margin.left : width / 2,\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 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: 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 // Force effect to run that will update the chart\n // This leverages Angular's reactivity rather than a direct method call\n // which is more consistent with Angular's reactive approach\n const expandedNodes = new Map(this._expandedNodes());\n this._expandedNodes.set(expandedNodes);\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 = await 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 const container = this.chartContainer()?.nativeElement;\n if (!container) return;\n\n // Remove existing SVG\n const svg = container.querySelector('svg');\n if (svg) {\n svg.remove();\n }\n }\n\n public updateChart(): void {\n this.createChart();\n }\n\n /**\n * Get D3 easing function from string name\n */\n private getEasingFunction(easing?: string): any {\n if (!easing) return this.d3.easeCubicInOut;\n\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicInOut;\n }\n }\n\n /**\n * Shows a message when no data is available\n */\n private showNoDataMessage(containerElement: HTMLElement): void {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-hierarchy-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html(`<i class=\"${this.effectiveMessages().noDataIcon} fa-2x\"></i>`);\n\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text(this.effectiveMessages().noData);\n\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text(this.effectiveMessages().noDataHelp);\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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"}
1
+ {"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 { 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 noData: 'No data available',\n noDataHelp: 'Please provide hierarchy data to display the chart',\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 const result = {\n ...AXHierarchyChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { AXChartComponent, AXChartComponentBase } from '@acorex/charts';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\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 standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXHierarchyChartComponent extends AXChartComponent implements AXChartComponentBase {\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\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(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n // Messages with defaults\n protected effectiveMessages = computed(() => {\n const defaultMessages = {\n noData: 'No data available',\n noDataHelp: 'Please provide hierarchy data to display the chart',\n noDataIcon: 'fa-light fa-sitemap',\n };\n return {\n ...defaultMessages,\n ...this.effectiveOptions().messages,\n };\n });\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 this.initializeExpandedState();\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.createChart();\n }\n });\n }\n\n /**\n * Initialize the expanded state for all nodes\n */\n private initializeExpandedState(): void {\n const newExpandedNodes = new Map<string, boolean>();\n const data = this.processedData();\n const expandAll = this.effectiveOptions().expandAll;\n\n // Helper function to recursively process nodes\n const processNode = (node: AXHierarchyChartData) => {\n if (node.children && node.children.length > 0) {\n // Set initial expansion state based on node property or global option\n newExpandedNodes.set(node.id, node.isExpanded !== undefined ? node.isExpanded : expandAll);\n\n // Process children\n node.children.forEach((child) => processNode(child));\n }\n };\n\n // Start processing\n if (data.children) {\n data.children.forEach((node) => processNode(node));\n } else if ((data as any).id) {\n processNode(data as AXHierarchyChartData);\n }\n\n this._expandedNodes.set(newExpandedNodes);\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, 300);\n const height = options.height || Math.max(containerRect.height, 400);\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 = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\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}, ${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,\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 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: 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 // Force effect to run that will update the chart\n // This leverages Angular's reactivity rather than a direct method call\n // which is more consistent with Angular's reactive approach\n const expandedNodes = new Map(this._expandedNodes());\n this._expandedNodes.set(expandedNodes);\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 = await 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 const container = this.chartContainer()?.nativeElement;\n if (!container) return;\n\n // Remove existing SVG\n const svg = container.querySelector('svg');\n if (svg) {\n svg.remove();\n }\n }\n\n public updateChart(): void {\n this.createChart();\n }\n\n /**\n * Get D3 easing function from string name\n */\n private getEasingFunction(easing?: string): any {\n if (!easing) return this.d3.easeCubicInOut;\n\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicInOut;\n }\n }\n\n /**\n * Shows a message when no data is available\n */\n private showNoDataMessage(containerElement: HTMLElement): void {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-hierarchy-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html(`<i class=\"${this.effectiveMessages().noDataIcon} fa-2x\"></i>`);\n\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text(this.effectiveMessages().noData);\n\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text(this.effectiveMessages().noDataHelp);\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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"}
@@ -472,10 +472,7 @@ class AXLineChartComponent extends AXChartComponent {
472
472
  const xMax = this.d3.max(allDataPoints, (d) => d.x) ?? 0;
473
473
  if (xMax === 0) {
474
474
  // If all values are 0, show -1 to 1 range
475
- this.xScale = this.d3
476
- .scaleLinear()
477
- .domain([-1, 1])
478
- .range([0, this.width]);
475
+ this.xScale = this.d3.scaleLinear().domain([-1, 1]).range([0, this.width]);
479
476
  }
480
477
  else {
481
478
  // Always start X axis from 0 for numeric data
@@ -1165,11 +1162,11 @@ class AXLineChartComponent extends AXChartComponent {
1165
1162
  }
1166
1163
  }
1167
1164
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1168
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.3", type: AXLineChartComponent, isStandalone: true, selector: "ax-line-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pointClick: "pointClick" }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n", styles: ["ax-line-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: 0, 0, 0, 0;--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;box-sizing:border-box;padding:clamp(.5rem,1.2vw,.875rem);border-radius:.5rem;overflow:hidden;color:rgba(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden}ax-line-chart .ax-line-chart svg g:has(text){font-family:inherit}ax-line-chart .ax-line-chart-no-data-message{text-align:center;background-color:rgb(var(--ax-comp-line-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-help{font-size:.8rem;opacity:.6}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1165
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.3", type: AXLineChartComponent, isStandalone: true, selector: "ax-line-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pointClick: "pointClick" }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n", styles: ["ax-line-chart{display:block;width:100%;height:100%;min-height:0;box-sizing:border-box;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: 0, 0, 0, 0;--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;box-sizing:border-box;padding:clamp(.5rem,1.2vw,.875rem);border-radius:.5rem;overflow:hidden;color:rgba(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden}ax-line-chart .ax-line-chart svg g:has(text){font-family:inherit}ax-line-chart .ax-line-chart-no-data-message{text-align:center;background-color:rgb(var(--ax-comp-line-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-help{font-size:.8rem;opacity:.6}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1169
1166
  }
1170
1167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXLineChartComponent, decorators: [{
1171
1168
  type: Component,
1172
- args: [{ selector: 'ax-line-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n", styles: ["ax-line-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: 0, 0, 0, 0;--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;box-sizing:border-box;padding:clamp(.5rem,1.2vw,.875rem);border-radius:.5rem;overflow:hidden;color:rgba(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden}ax-line-chart .ax-line-chart svg g:has(text){font-family:inherit}ax-line-chart .ax-line-chart-no-data-message{text-align:center;background-color:rgb(var(--ax-comp-line-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-help{font-size:.8rem;opacity:.6}\n"] }]
1169
+ args: [{ selector: 'ax-line-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n", styles: ["ax-line-chart{display:block;width:100%;height:100%;min-height:0;box-sizing:border-box;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: 0, 0, 0, 0;--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;box-sizing:border-box;padding:clamp(.5rem,1.2vw,.875rem);border-radius:.5rem;overflow:hidden;color:rgba(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden}ax-line-chart .ax-line-chart svg g:has(text){font-family:inherit}ax-line-chart .ax-line-chart-no-data-message{text-align:center;background-color:rgb(var(--ax-comp-line-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-help{font-size:.8rem;opacity:.6}\n"] }]
1173
1170
  }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], pointClick: [{ type: i0.Output, args: ["pointClick"] }], chartContainerEl: [{ type: i0.ViewChild, args: ['chartContainer', { isSignal: true }] }] } });
1174
1171
 
1175
1172
  /**