@acorex/charts 21.0.2-next.4 → 21.0.2-next.40

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.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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"}
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 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 standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\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(() => {\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 = 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: 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 this.destroyEmbeddedViews();\n\n const container = this.chartContainer()?.nativeElement;\n if (!container) return;\n\n container.querySelectorAll('svg, .ax-hierarchy-chart-no-data-message').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 * 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 this.cleanupChart();\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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"}
@@ -51,8 +51,8 @@ function lineChartConfig(config = {}) {
51
51
  * Line Chart Component for rendering data as lines with interactive hover effects and animations
52
52
  */
53
53
  class AXLineChartComponent extends AXChartComponent {
54
- data = input([], ...(ngDevMode ? [{ debugName: "data" }] : []));
55
- options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : []));
54
+ data = input([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
55
+ options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
56
56
  pointClick = output();
57
57
  chartContainerEl = viewChild.required('chartContainer');
58
58
  d3;
@@ -65,18 +65,18 @@ class AXLineChartComponent extends AXChartComponent {
65
65
  width;
66
66
  height;
67
67
  margin = { top: 20, right: 25, bottom: 40, left: 50 };
68
- _tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: "_tooltipVisible" }] : []));
69
- _tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "_tooltipPosition" }] : []));
68
+ _tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: "_tooltipVisible" }] : /* istanbul ignore next */ []));
69
+ _tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "_tooltipPosition" }] : /* istanbul ignore next */ []));
70
70
  _tooltipData = signal({
71
71
  title: '',
72
72
  value: '0',
73
73
  percentage: '0%',
74
74
  color: '',
75
- }, ...(ngDevMode ? [{ debugName: "_tooltipData" }] : []));
75
+ }, ...(ngDevMode ? [{ debugName: "_tooltipData" }] : /* istanbul ignore next */ []));
76
76
  _tooltipRafId = null;
77
77
  _pendingTooltipCoords = null;
78
- _initialized = signal(false, ...(ngDevMode ? [{ debugName: "_initialized" }] : []));
79
- _rendered = signal(false, ...(ngDevMode ? [{ debugName: "_rendered" }] : []));
78
+ _initialized = signal(false, ...(ngDevMode ? [{ debugName: "_initialized" }] : /* istanbul ignore next */ []));
79
+ _rendered = signal(false, ...(ngDevMode ? [{ debugName: "_rendered" }] : /* istanbul ignore next */ []));
80
80
  hiddenSeries = new Set();
81
81
  _fullNormalizedData = [];
82
82
  tooltipVisible = this._tooltipVisible.asReadonly();
@@ -91,7 +91,7 @@ class AXLineChartComponent extends AXChartComponent {
91
91
  ...this.configToken,
92
92
  ...this.options(),
93
93
  };
94
- }, ...(ngDevMode ? [{ debugName: "effectiveOptions" }] : []));
94
+ }, ...(ngDevMode ? [{ debugName: "effectiveOptions" }] : /* istanbul ignore next */ []));
95
95
  // Messages with defaults
96
96
  effectiveMessages = computed(() => {
97
97
  const defaultMessages = {
@@ -106,7 +106,7 @@ class AXLineChartComponent extends AXChartComponent {
106
106
  ...defaultMessages,
107
107
  ...this.effectiveOptions().messages,
108
108
  };
109
- }, ...(ngDevMode ? [{ debugName: "effectiveMessages" }] : []));
109
+ }, ...(ngDevMode ? [{ debugName: "effectiveMessages" }] : /* istanbul ignore next */ []));
110
110
  // Layout & Dimensions
111
111
  MIN_DIMENSION = 100;
112
112
  MIN_CONTAINER_DIMENSION = 200;
@@ -230,7 +230,7 @@ class AXLineChartComponent extends AXChartComponent {
230
230
  if (this._rendered()) {
231
231
  this.updateChart();
232
232
  }
233
- }, ...(ngDevMode ? [{ debugName: "#effect" }] : []));
233
+ }, ...(ngDevMode ? [{ debugName: "#effect" }] : /* istanbul ignore next */ []));
234
234
  ngAfterViewInit() {
235
235
  this._initialized.set(true);
236
236
  if (this.d3 && this.chartContainerEl()) {
@@ -359,7 +359,10 @@ class AXLineChartComponent extends AXChartComponent {
359
359
  }
360
360
  this._pendingTooltipCoords = null;
361
361
  if (this.svg) {
362
- this.d3?.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();
362
+ this.d3
363
+ ?.select(this.chartContainerEl()?.nativeElement)
364
+ .selectAll('svg, .ax-line-chart-no-data-message, .ax-line-chart-all-hidden-message')
365
+ .remove();
363
366
  this.svg = null;
364
367
  this.chart = null;
365
368
  }
@@ -480,9 +483,18 @@ class AXLineChartComponent extends AXChartComponent {
480
483
  }
481
484
  }
482
485
  else {
486
+ const xDomain = [];
487
+ const seenX = new Set();
488
+ for (const point of allDataPoints) {
489
+ const key = String(point.x);
490
+ if (!seenX.has(key)) {
491
+ seenX.add(key);
492
+ xDomain.push(key);
493
+ }
494
+ }
483
495
  this.xScale = this.d3
484
496
  .scaleBand()
485
- .domain(allDataPoints.map((d) => String(d.x)))
497
+ .domain(xDomain)
486
498
  .range([0, this.width])
487
499
  .paddingInner(0.2)
488
500
  .paddingOuter(0);
@@ -898,23 +910,23 @@ class AXLineChartComponent extends AXChartComponent {
898
910
  else {
899
911
  this.handlePointHover(event, d, series, series.originalIndex);
900
912
  }
913
+ const pointRadius = this.effectiveOptions().pointRadius ?? this.DEFAULT_POINT_RADIUS;
901
914
  this.d3
902
915
  .select(event.target)
903
- .transition()
904
- .duration(this.HOVER_TRANSITION_DURATION)
905
- .attr('r', (this.effectiveOptions().pointRadius ?? 4) * 1.5)
906
- .attr('stroke-width', 2)
916
+ .interrupt()
917
+ .attr('r', pointRadius * this.POINT_HIGHLIGHT_MULTIPLIER)
918
+ .attr('stroke-width', this.POINT_HOVER_STROKE_WIDTH)
907
919
  .attr('stroke', `rgb(var(--ax-comp-line-chart-bg-color))`);
908
920
  })
909
921
  .on('mousemove', (event) => this.updateTooltipPosition(event))
910
922
  .on('mouseleave', (event) => {
911
923
  this._tooltipVisible.set(false);
924
+ const pointRadius = this.effectiveOptions().pointRadius ?? this.DEFAULT_POINT_RADIUS;
912
925
  this.d3
913
926
  .select(event.target)
914
- .transition()
915
- .duration(this.HOVER_TRANSITION_DURATION)
916
- .attr('r', this.effectiveOptions().pointRadius ?? this.DEFAULT_POINT_RADIUS)
917
- .attr('stroke-width', 1)
927
+ .interrupt()
928
+ .attr('r', pointRadius)
929
+ .attr('stroke-width', this.POINT_STROKE_WIDTH)
918
930
  .attr('stroke', '#fff');
919
931
  })
920
932
  .on('click', (event, d) => {
@@ -1052,19 +1064,33 @@ class AXLineChartComponent extends AXChartComponent {
1052
1064
  this._pendingTooltipCoords = { x: event.clientX, y: event.clientY };
1053
1065
  if (this._tooltipRafId != null)
1054
1066
  return;
1067
+ this.scheduleTooltipPosition(0);
1068
+ }
1069
+ scheduleTooltipPosition(attempt) {
1055
1070
  this._tooltipRafId = requestAnimationFrame(() => {
1056
- this._tooltipRafId = null;
1057
1071
  const coords = this._pendingTooltipCoords;
1058
- if (!coords)
1072
+ if (!coords) {
1073
+ this._tooltipRafId = null;
1059
1074
  return;
1075
+ }
1060
1076
  const containerEl = this.chartContainerEl()?.nativeElement;
1061
- if (!containerEl)
1077
+ if (!containerEl) {
1078
+ this._tooltipRafId = null;
1062
1079
  return;
1063
- const rect = containerEl.getBoundingClientRect();
1080
+ }
1064
1081
  const tooltipEl = containerEl.querySelector('.chart-tooltip');
1082
+ if (!tooltipEl && this._tooltipVisible() && attempt < 3) {
1083
+ this.scheduleTooltipPosition(attempt + 1);
1084
+ return;
1085
+ }
1086
+ this._tooltipRafId = null;
1087
+ const rect = containerEl.getBoundingClientRect();
1065
1088
  const tooltipRect = tooltipEl ? tooltipEl.getBoundingClientRect() : null;
1066
1089
  const pos = computeTooltipPosition(rect, tooltipRect, coords.x, coords.y, this.TOOLTIP_GAP);
1067
- this._tooltipPosition.set(pos);
1090
+ const prev = this._tooltipPosition();
1091
+ if (prev.x !== pos.x || prev.y !== pos.y) {
1092
+ this._tooltipPosition.set(pos);
1093
+ }
1068
1094
  });
1069
1095
  }
1070
1096
  // computeTooltipPosition moved to shared chart utils
@@ -1161,12 +1187,12 @@ class AXLineChartComponent extends AXChartComponent {
1161
1187
  this.showCrosshairLines(overlappingPoints[0].point);
1162
1188
  }
1163
1189
  }
1164
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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 });
1190
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1191
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", 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;contain:layout style;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;flex-shrink:0}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 });
1166
1192
  }
1167
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXLineChartComponent, decorators: [{
1193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXLineChartComponent, decorators: [{
1168
1194
  type: Component,
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"] }]
1195
+ 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;contain:layout style;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;flex-shrink:0}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"] }]
1170
1196
  }], 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 }] }] } });
1171
1197
 
1172
1198
  /**