@acorex/charts 19.14.0-next.2 → 19.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bar-chart/lib/bar-chart.component.d.ts +2 -6
- package/bar-chart/lib/bar-chart.type.d.ts +13 -6
- package/donut-chart/lib/donut-chart.component.d.ts +5 -0
- package/donut-chart/lib/donut-chart.type.d.ts +57 -0
- package/fesm2022/acorex-charts-bar-chart.mjs +87 -67
- package/fesm2022/acorex-charts-bar-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-chart-tooltip.mjs.map +1 -1
- package/fesm2022/acorex-charts-donut-chart.mjs +128 -68
- package/fesm2022/acorex-charts-donut-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-gauge-chart.mjs +261 -110
- package/fesm2022/acorex-charts-gauge-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-hierarchy-chart.mjs +11 -14
- package/fesm2022/acorex-charts-hierarchy-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-line-chart.mjs +204 -66
- package/fesm2022/acorex-charts-line-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts.mjs.map +1 -1
- package/gauge-chart/lib/gauge-chart.component.d.ts +41 -13
- package/gauge-chart/lib/gauge-chart.type.d.ts +36 -5
- package/hierarchy-chart/lib/hierarchy-chart.component.d.ts +0 -3
- package/hierarchy-chart/lib/hierarchy-chart.type.d.ts +41 -13
- package/line-chart/lib/line-chart.component.d.ts +1 -0
- package/line-chart/lib/line-chart.type.d.ts +12 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-charts-gauge-chart.mjs","sources":["../../../../libs/charts/gauge-chart/src/lib/gauge-chart.config.ts","../../../../libs/charts/gauge-chart/src/lib/gauge-chart.component.ts","../../../../libs/charts/gauge-chart/src/lib/gauge-chart.component.html","../../../../libs/charts/gauge-chart/src/acorex-charts-gauge-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXPGaugeChartOption } from './gauge-chart.type';\n\nexport const AXGaugeChartDefaultConfig: AXPGaugeChartOption = {\n minValue: 0,\n maxValue: 100,\n gaugeWidth: 22,\n cornerRadius: 5,\n backgroundColor: 'transparent',\n baseColor: '#e2e8f0',\n showValue: true,\n valueColor: '#6366f1',\n valueFontSize: 24,\n labelFontSize: 16,\n animationDuration: 750,\n animationEasing: 'cubic-out',\n};\n\nexport const AX_GAUGE_CHART_CONFIG = new InjectionToken<AXPGaugeChartOption>('AX_GAUGE_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.gaugeChart', AXGaugeChartDefaultConfig);\n return AXGaugeChartDefaultConfig;\n },\n});\n\nexport type PartialGaugeChartConfig = Partial<AXPGaugeChartOption>;\n\nexport function gaugeChartConfig(config: PartialGaugeChartConfig = {}): AXPGaugeChartOption {\n const result = {\n ...AXGaugeChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { AX_GAUGE_CHART_CONFIG } from './gauge-chart.config';\nimport { AXPGaugeChartOption, AXPGaugeChartValue } from './gauge-chart.type';\n\n/**\n * Gauge Chart Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\n@Component({\n selector: 'ax-gauge-chart',\n templateUrl: './gauge-chart.component.html',\n styleUrls: ['./gauge-chart.component.scss'],\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXGaugeChartComponent implements OnDestroy {\n // Inputs\n /** Chart value input */\n value = input<AXPGaugeChartValue>(0);\n\n /** Chart options input */\n options = input<AXPGaugeChartOption>({});\n\n // Chart container reference\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // SVG element reference (created in the code)\n private svgElement: SVGSVGElement | null = null;\n\n // D3 reference - loaded asynchronously\n protected d3!: typeof import('d3');\n\n // Signals for component state\n private _initialized = signal(false);\n private _rendered = signal(false);\n private _prevValue = signal<number | null>(null);\n\n // Track previous options to detect changes\n private _prevOptionsString = '';\n\n // Inject configuration\n private configToken = inject(AX_GAUGE_CHART_CONFIG);\n\n // Computed configuration options\n protected effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n constructor() {\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n });\n\n // Watch for changes to redraw the chart\n effect(() => {\n // Access inputs to track them\n const currentValue = this.value();\n const options = this.effectiveOptions();\n\n // Update previous value\n this._prevValue.set(currentValue);\n\n // Only update if already rendered\n if (this._rendered()) {\n // If only the value changed, just update the value display and dial\n const optionsString = JSON.stringify(options);\n if (this._prevOptionsString === optionsString) {\n this.updateValueAndDial(currentValue);\n } else {\n // If options changed, recreate the whole chart\n this._prevOptionsString = optionsString;\n this.updateChart();\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.cleanupChart();\n }\n\n /**\n * Loads D3.js dynamically\n */\n protected async loadD3(): Promise<void> {\n try {\n this.d3 = await import('d3');\n // If container is ready, create chart\n if (this._initialized() && this.chartContainerEl()) {\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 * Creates the gauge chart with all elements\n */\n protected createChart(): void {\n // Clear container and create SVG\n if (this.svgElement) {\n this.svgElement.remove();\n }\n\n // Create SVG element\n this.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n this.chartContainerEl().nativeElement.appendChild(this.svgElement);\n\n // Get current options\n const options = this.effectiveOptions();\n\n // Store options string for comparison\n this._prevOptionsString = JSON.stringify(options);\n\n const backgroundColor = options.backgroundColor;\n const baseColor = options.baseColor;\n const showValue = options.showValue;\n const valueColor = options.valueColor;\n const valueFontSize = options.valueFontSize;\n const labelFontSize = options.labelFontSize;\n const minValue = options.minValue;\n const maxValue = options.maxValue;\n const thresholds = options.thresholds ?? [];\n const label = options.label ?? '';\n const gaugeWidth = options.gaugeWidth;\n const cornerRadius = options.cornerRadius;\n const animationDuration = options.animationDuration;\n\n // Calculate responsive dimensions\n const containerElement = this.chartContainerEl().nativeElement;\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n\n // Determine chart dimensions - use options if provided, otherwise use container dimensions\n const width = options.width || containerWidth;\n const height = options.height || containerHeight;\n\n // Ensure minimum dimensions\n const effectiveWidth = Math.max(width, 100);\n const effectiveHeight = Math.max(height, 50);\n\n // For a semi-circular gauge, width should be approximately twice the height\n const size = Math.min(effectiveWidth, effectiveHeight * 2);\n const margin = size * 0.1;\n\n // Set up SVG with responsive viewBox\n const svg = this.d3\n .select(this.svgElement)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${size} ${size / 2}`)\n .attr('preserveAspectRatio', 'xMidYMid meet');\n\n // Create a group for the chart with margin and move it to show only the top half\n const chartGroup = svg.append('g').attr('transform', `translate(${size / 2}, ${size / 2 - margin})`);\n\n // Define gauge parameters\n const radius = size / 2 - margin;\n const innerRadius = radius - gaugeWidth;\n const outerRadius = radius;\n\n // Create gradient definitions\n this.createGradients(svg, thresholds, baseColor, valueColor);\n\n // Draw the background arc\n this.drawBackgroundArc(chartGroup, innerRadius, outerRadius, cornerRadius, backgroundColor);\n\n // Draw the threshold arcs if thresholds exist\n if (thresholds.length > 0) {\n this.drawThresholds(chartGroup, innerRadius, outerRadius, minValue, maxValue, thresholds, cornerRadius);\n }\n\n // Draw tick marks\n this.drawTicks(chartGroup, outerRadius, minValue, maxValue);\n\n // Draw the dial/needle with animation\n this.drawDial(chartGroup, radius, this.value(), minValue, maxValue, valueColor, animationDuration);\n\n // Draw the value display (after the dial so it's on top)\n if (showValue) {\n this.drawValueDisplay(chartGroup, this.value(), label, radius, valueColor, valueFontSize, labelFontSize);\n }\n }\n\n /**\n * Updates the chart when options change\n */\n protected updateChart(): void {\n this.createChart();\n }\n\n /**\n * Updates only the value display and dial position without recreating the chart\n */\n protected updateValueAndDial(value: number): void {\n if (!this.svgElement) return;\n\n const options = this.effectiveOptions();\n const minValue = options.minValue;\n const maxValue = options.maxValue;\n const animationDuration = options.animationDuration;\n const easingFunction = this.getEasingFunction(options.animationEasing);\n\n const currentValue = value;\n const svg = this.d3.select(this.svgElement);\n\n // Get chart size from SVG viewBox\n const viewBoxValues = svg.attr('viewBox')?.split(' ').map(Number) || [0, 0, 300, 150];\n const size = viewBoxValues[2];\n const margin = size * 0.1;\n const radius = size / 2 - margin;\n\n // Update value text\n svg.select('.gauge-value').text(currentValue.toLocaleString());\n\n // Update needle position\n const angle = this.scaleValueToAngle(currentValue, minValue, maxValue);\n const angleInDegrees = this.radiansToDegrees(angle - Math.PI / 2);\n\n svg\n .select('.gauge-needle')\n .transition()\n .duration(animationDuration)\n .ease(easingFunction)\n .attr('transform', `rotate(${angleInDegrees})`);\n }\n\n /**\n * Cleans up chart resources\n */\n protected cleanupChart(): void {\n if (this.svgElement) {\n this.svgElement.remove();\n this.svgElement = null;\n }\n }\n\n /**\n * Creates gradient definitions for thresholds\n */\n private createGradients(svg, thresholds: { value: number; color: string }[], baseColor: string, valueColor: string) {\n const defs = svg.append('defs');\n\n // Create a radial gradient for the background\n const bgGradient = defs\n .append('radialGradient')\n .attr('id', 'gauge-bg-gradient')\n .attr('cx', '50%')\n .attr('cy', '50%')\n .attr('r', '50%')\n .attr('gradientUnits', 'userSpaceOnUse');\n\n if (thresholds.length === 0) {\n // Default gradient when no thresholds are provided\n bgGradient\n .append('stop')\n .attr('offset', '0%')\n .attr('stop-color', this.d3.color(valueColor)?.brighter(0.5).toString() || valueColor);\n bgGradient.append('stop').attr('offset', '100%').attr('stop-color', valueColor);\n } else {\n bgGradient\n .append('stop')\n .attr('offset', '0%')\n .attr('stop-color', this.d3.color(baseColor)?.brighter(0.5).toString() || baseColor);\n bgGradient.append('stop').attr('offset', '100%').attr('stop-color', baseColor);\n\n // Create gradients for each threshold\n thresholds.forEach((threshold, i) => {\n const gradient = defs\n .append('linearGradient')\n .attr('id', `threshold-gradient-${i}`)\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('x1', '-1')\n .attr('y1', '0')\n .attr('x2', '1')\n .attr('y2', '0');\n\n gradient\n .append('stop')\n .attr('offset', '0%')\n .attr('stop-color', this.d3.color(threshold.color)?.brighter(0.5).toString() || threshold.color);\n\n gradient.append('stop').attr('offset', '100%').attr('stop-color', threshold.color);\n });\n }\n }\n\n /**\n * Draws the background arc\n */\n private drawBackgroundArc(\n chartGroup,\n innerRadius: number,\n outerRadius: number,\n cornerRadius: number,\n backgroundColor: string,\n ) {\n const backgroundArc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle(-Math.PI / 2) // Start from bottom (-90 degrees)\n .endAngle(Math.PI / 2) // End at top (90 degrees)\n .cornerRadius(cornerRadius);\n\n chartGroup\n .append('path')\n .attr(\n 'd',\n backgroundArc({\n innerRadius,\n outerRadius,\n startAngle: -Math.PI / 2,\n endAngle: Math.PI / 2,\n }),\n )\n .attr('fill', backgroundColor === 'transparent' ? 'url(#gauge-bg-gradient)' : backgroundColor)\n .attr('filter', 'drop-shadow(0px 2px 3px rgba(0,0,0,0.1))');\n }\n\n /**\n * Draws the threshold arcs with colors\n */\n private drawThresholds(\n chartGroup,\n innerRadius: number,\n outerRadius: number,\n minValue: number,\n maxValue: number,\n thresholds: { value: number; color: string }[],\n cornerRadius: number,\n ) {\n const arc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius * 0.98)\n .cornerRadius(cornerRadius);\n\n // Sort thresholds by value in ascending order\n const sortedThresholds = [...thresholds].sort((a, b) => a.value - b.value);\n\n // Calculate all angles first using the color angle calculation\n const angles = sortedThresholds.map((t) => this.scaleValueToColorAngle(t.value, minValue, maxValue));\n\n // Start from the minimum value angle\n let previousEndAngle = this.scaleValueToColorAngle(minValue, minValue, maxValue);\n\n sortedThresholds.forEach((threshold, i) => {\n const endAngle = angles[i];\n\n chartGroup\n .append('path')\n .attr(\n 'd',\n arc({\n innerRadius,\n outerRadius,\n startAngle: previousEndAngle,\n endAngle,\n }),\n )\n .attr('fill', `url(#threshold-gradient-${i})`)\n .attr('class', 'threshold-arc')\n .attr('data-value', threshold.value);\n\n // Update the previous end angle for the next threshold\n previousEndAngle = endAngle;\n });\n\n // Draw the last segment if the last threshold is less than the max value\n if (previousEndAngle < Math.PI / 2) {\n chartGroup\n .append('path')\n .attr(\n 'd',\n arc({\n innerRadius,\n outerRadius,\n startAngle: previousEndAngle,\n endAngle: Math.PI / 2,\n }),\n )\n .attr('fill', 'url(#gauge-bg-gradient)')\n .attr('class', 'threshold-arc');\n }\n }\n\n /**\n * Draws tick marks and labels around the gauge\n */\n private drawTicks(chartGroup, radius: number, minValue: number, maxValue: number) {\n const tickCount = 5; // Number of ticks including min and max\n const tickLength = radius * 0.1;\n const labelOffset = radius * 0.15;\n\n // Create a group for the ticks\n const tickGroup = chartGroup.append('g').attr('class', 'ticks');\n\n // Generate tick values\n const tickValues = [];\n const step = (maxValue - minValue) / (tickCount - 1);\n for (let i = 0; i < tickCount; i++) {\n tickValues.push(minValue + i * step);\n }\n\n // Create ticks and labels\n tickValues.forEach((tick) => {\n // Calculate angle for this tick\n const angle = this.scaleValueToAngle(tick, minValue, maxValue);\n const radians = angle - Math.PI / 2; // Adjust for starting at bottom (-90 degrees)\n\n // Calculate positions\n const x1 = Math.cos(radians) * (radius + 5);\n const y1 = Math.sin(radians) * (radius + 5);\n const x2 = Math.cos(radians) * (radius + tickLength);\n const y2 = Math.sin(radians) * (radius + tickLength);\n\n // Calculate label position\n const labelX = Math.cos(radians) * (radius + labelOffset);\n const labelY = Math.sin(radians) * (radius + labelOffset);\n\n // Draw tick line\n tickGroup\n .append('line')\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n .attr('stroke', '#94a3b8')\n .attr('stroke-width', 2);\n\n // Add tick label\n tickGroup\n .append('text')\n .attr('x', labelX)\n .attr('y', labelY)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('fill', '#64748b')\n .attr('class', 'gauge-min-max')\n .style('font-size', '12px')\n .text(tick.toLocaleString());\n });\n }\n\n /**\n * Draws the value and label text in the center\n */\n private drawValueDisplay(\n chartGroup,\n value: number,\n label: string,\n radius: number,\n valueColor: string,\n valueFontSize: number,\n labelFontSize: number,\n ) {\n const valueGroup = chartGroup.append('g').attr('class', 'value-display');\n\n // Value display - moved closer to the dial\n valueGroup\n .append('text')\n .attr('x', 0)\n .attr('y', radius * 0.3)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('fill', valueColor)\n .attr('class', 'gauge-value')\n .style('font-size', `${valueFontSize}px`)\n .text(value.toLocaleString());\n\n // Label display (if provided), positioned closer to the value\n if (label) {\n valueGroup\n .append('text')\n .attr('x', 0)\n .attr('y', radius * 0.45)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('fill', '#64748b')\n .attr('class', 'gauge-label')\n .style('font-size', `${labelFontSize}px`)\n .text(label);\n }\n }\n\n /**\n * Draws the dial/needle pointing to the current value with animation\n */\n private drawDial(\n chartGroup,\n radius: number,\n value: number,\n minValue: number,\n maxValue: number,\n valueColor: string,\n animationDuration: number,\n ) {\n // Clamp value to min/max range\n const clampedValue = Math.max(minValue, Math.min(maxValue, value));\n\n // Calculate angle for needle based on value\n const angle = this.scaleValueToAngle(clampedValue, minValue, maxValue);\n const angleInDegrees = this.radiansToDegrees(angle - Math.PI / 2);\n\n // Create a group for the needle\n const dialGroup = chartGroup.append('g').attr('class', 'dial');\n\n // Draw the needle with initial position at minimum value\n const needlePath = dialGroup\n .append('path')\n .attr('d', this.createNeedlePath(radius))\n .attr('fill', valueColor)\n .attr('class', 'gauge-needle')\n .attr('transform', `rotate(${this.radiansToDegrees(-Math.PI)})`); // Start at -180 degrees (left)\n\n // Add a center circle\n dialGroup\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius * 0.08)\n .attr('fill', valueColor)\n .attr('stroke', '#fff')\n .attr('stroke-width', 2);\n\n // Add a smaller white center\n dialGroup\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius * 0.03)\n .attr('fill', '#fff');\n\n // Get easing function\n const easingFunction = this.getEasingFunction(this.options()?.animationEasing);\n\n // Animate the needle from min to current value\n needlePath\n .transition()\n .duration(animationDuration)\n .ease(easingFunction)\n .attr('transform', `rotate(${angleInDegrees})`);\n }\n\n /**\n * Gets the appropriate D3 easing function based on the option string\n */\n private getEasingFunction(easing?: string): any {\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.easeCubicOut; // Default easing\n }\n }\n\n /**\n * Creates a path string for the needle\n */\n private createNeedlePath(radius: number): string {\n const needleLength = radius * 0.8;\n const needleWidth = radius * 0.06;\n return `M 0,${needleWidth / 2} L ${needleLength},0 L 0,${-needleWidth / 2} Z`;\n }\n\n /**\n * Scales a value to an angle (in radians)\n */\n private scaleValueToAngle(value: number, min: number, max: number): number {\n const valueRange = max - min;\n const angleRange = Math.PI;\n return ((value - min) / valueRange) * angleRange - Math.PI / 2;\n }\n\n /**\n * Scales a value to an angle for color arcs (in radians)\n */\n private scaleValueToColorAngle(value: number, min: number, max: number): number {\n const valueRange = max - min;\n const angleRange = Math.PI; // 180 degrees in radians\n return ((value - min) / valueRange) * angleRange - Math.PI / 2;\n }\n\n /**\n * Converts radians to degrees\n */\n private radiansToDegrees(radians: number): number {\n return radians * (180 / Math.PI);\n }\n}\n","<div class=\"ax-gauge-chart\" #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-gauge-chart.mjs","sources":["../../../../packages/charts/gauge-chart/src/lib/gauge-chart.config.ts","../../../../packages/charts/gauge-chart/src/lib/gauge-chart.component.ts","../../../../packages/charts/gauge-chart/src/lib/gauge-chart.component.html","../../../../packages/charts/gauge-chart/src/acorex-charts-gauge-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXPGaugeChartOption } from './gauge-chart.type';\n\nexport const AXGaugeChartDefaultConfig: AXPGaugeChartOption = {\n minValue: 0,\n maxValue: 100,\n gaugeWidth: 22,\n cornerRadius: 5,\n showValue: true,\n showTooltip: true,\n animationDuration: 750,\n animationEasing: 'cubic-out',\n};\n\nexport const AX_GAUGE_CHART_CONFIG = new InjectionToken<AXPGaugeChartOption>('AX_GAUGE_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.gaugeChart', AXGaugeChartDefaultConfig);\n return AXGaugeChartDefaultConfig;\n },\n});\n\nexport type PartialGaugeChartConfig = Partial<AXPGaugeChartOption>;\n\nexport function gaugeChartConfig(config: PartialGaugeChartConfig = {}): AXPGaugeChartOption {\n const result = {\n ...AXGaugeChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n OnDestroy,\n ViewEncapsulation,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { AX_GAUGE_CHART_CONFIG } from './gauge-chart.config';\nimport { AXPGaugeChartOption, AXPGaugeChartValue } from './gauge-chart.type';\n\n/**\n * Gauge Chart Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\n@Component({\n selector: 'ax-gauge-chart',\n templateUrl: './gauge-chart.component.html',\n styleUrls: ['./gauge-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXChartTooltipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXGaugeChartComponent implements OnDestroy {\n // Inject ChangeDetectorRef\n private cdr = inject(ChangeDetectorRef);\n\n // Inputs\n /** Chart value input */\n value = input<AXPGaugeChartValue>(0);\n\n /** Chart options input */\n options = input<AXPGaugeChartOption>({});\n\n // Chart container reference\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // SVG element reference (created in the code)\n private svgElement: SVGSVGElement | null = null;\n\n // D3 reference - loaded asynchronously\n protected d3!: typeof import('d3');\n\n // Signals for component state\n private _initialized = signal(false);\n private _rendered = signal(false);\n private _prevValue = signal<number | null>(null);\n\n // Track previous options to detect changes\n private _prevOptionsString = '';\n\n // Tooltip signals\n private _tooltipVisible = signal(false);\n private _tooltipPosition = signal({ x: 0, y: 0 });\n private _tooltipData = signal<AXChartTooltipData>({\n title: '',\n value: '',\n });\n\n // Expose tooltip signals as read-only for the template\n protected tooltipVisible = this._tooltipVisible.asReadonly();\n protected tooltipPosition = this._tooltipPosition.asReadonly();\n protected tooltipData = this._tooltipData.asReadonly();\n\n // Inject configuration\n private configToken = inject(AX_GAUGE_CHART_CONFIG);\n\n // Computed configuration options\n protected effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n constructor() {\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n });\n\n // Watch for changes to redraw the chart\n effect(() => {\n // Access inputs to track them\n const currentValue = this.value();\n const options = this.effectiveOptions();\n\n // Update previous value\n this._prevValue.set(currentValue);\n\n // Only update if already rendered\n if (this._rendered()) {\n // If only the value changed, just update the value display and dial\n const optionsString = JSON.stringify(options);\n if (this._prevOptionsString === optionsString) {\n this.updateValueAndDial(currentValue);\n } else {\n // If options changed, recreate the whole chart\n this._prevOptionsString = optionsString;\n this.updateChart();\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.cleanupChart();\n }\n\n /**\n * Loads D3.js dynamically\n */\n protected async loadD3(): Promise<void> {\n try {\n this.d3 = await import('d3');\n // If container is ready, create chart\n if (this._initialized() && this.chartContainerEl()) {\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 * Creates the gauge chart with all elements\n */\n protected createChart(): void {\n // Clear container and create SVG\n if (this.svgElement) {\n this.svgElement.remove();\n }\n\n // Create SVG element\n this.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n this.chartContainerEl().nativeElement.appendChild(this.svgElement);\n\n // Get current options\n const options = this.effectiveOptions();\n\n // Store options string for comparison\n this._prevOptionsString = JSON.stringify(options);\n\n // Use design tokens instead of removed properties\n const showValue = options.showValue;\n const minValue = options.minValue;\n const maxValue = options.maxValue;\n const thresholds = options.thresholds ?? [];\n const label = options.label ?? '';\n const gaugeWidth = options.gaugeWidth;\n const cornerRadius = options.cornerRadius;\n const animationDuration = options.animationDuration;\n\n // Calculate responsive dimensions\n const containerElement = this.chartContainerEl().nativeElement;\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n\n // Determine chart dimensions - use options if provided, otherwise use container dimensions\n const width = options.width || containerWidth;\n const height = options.height || containerHeight;\n\n // Ensure minimum dimensions\n const effectiveWidth = Math.max(width, 100);\n const effectiveHeight = Math.max(height, 50);\n\n // For a semi-circular gauge, width should be approximately twice the height\n const size = Math.min(effectiveWidth, effectiveHeight * 2);\n const margin = size * 0.1;\n\n // Set up SVG with responsive viewBox\n const svg = this.d3\n .select(this.svgElement)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${size} ${size / 2}`)\n .attr('preserveAspectRatio', 'xMidYMid meet');\n\n // Create a group for the chart with margin and move it to show only the top half\n const chartGroup = svg.append('g').attr('transform', `translate(${size / 2}, ${size / 2 - margin})`);\n\n // Define gauge parameters\n const radius = size / 2 - margin;\n const innerRadius = radius - gaugeWidth;\n const outerRadius = radius;\n\n // Create gradient definitions\n this.createGradients(svg, thresholds);\n\n // Draw the background arc\n this.drawBackgroundArc(chartGroup, innerRadius, outerRadius, cornerRadius);\n\n // Draw the threshold arcs if thresholds exist\n if (thresholds.length > 0) {\n this.drawThresholds(chartGroup, innerRadius, outerRadius, minValue, maxValue, thresholds, cornerRadius);\n }\n\n // Draw tick marks\n this.drawTicks(chartGroup, outerRadius, minValue, maxValue);\n\n // Draw the dial/needle with animation\n this.drawDial(chartGroup, radius, this.value(), minValue, maxValue, animationDuration);\n\n // Draw the value display (after the dial so it's on top)\n if (showValue) {\n this.drawValueDisplay(chartGroup, this.value(), label, radius);\n }\n\n // Hide tooltip initially\n this._tooltipVisible.set(false);\n }\n\n /**\n * Updates the chart when options change\n */\n protected updateChart(): void {\n this.createChart();\n }\n\n /**\n * Updates only the value display and dial position without recreating the chart\n */\n protected updateValueAndDial(value: number): void {\n if (!this.svgElement) return;\n\n const options = this.effectiveOptions();\n const minValue = options.minValue;\n const maxValue = options.maxValue;\n const animationDuration = options.animationDuration;\n const easingFunction = this.getEasingFunction(options.animationEasing);\n\n const currentValue = value;\n const svg = this.d3.select(this.svgElement);\n\n // Get chart size from SVG viewBox\n const viewBoxValues = svg.attr('viewBox')?.split(' ').map(Number) || [0, 0, 300, 150];\n const size = viewBoxValues[2];\n const margin = size * 0.1;\n const radius = size / 2 - margin;\n\n // Update value text\n svg.select('.gauge-value').text(currentValue.toLocaleString());\n\n // Update needle position\n const angle = this.scaleValueToAngle(currentValue, minValue, maxValue);\n const angleInDegrees = this.radiansToDegrees(angle - Math.PI / 2);\n\n svg\n .select('.gauge-needle')\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .transition()\n .duration(animationDuration)\n .ease(easingFunction)\n .attr('transform', `rotate(${angleInDegrees})`);\n }\n\n /**\n * Draw the background arc\n */\n private drawBackgroundArc(chartGroup, innerRadius: number, outerRadius: number, cornerRadius: number) {\n // Create arc for the background\n const backgroundArc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle(-Math.PI / 2) // Start from bottom (-90 degrees)\n .endAngle(Math.PI / 2) // End at top (90 degrees)\n .cornerRadius(cornerRadius);\n\n // Draw background arc\n const backgroundPath = chartGroup\n .append('path')\n .attr('d', backgroundArc)\n .attr('class', 'gauge-arc gauge-base')\n .attr('fill', 'url(#gauge-bg-gradient)')\n .attr('filter', 'drop-shadow(0px 2px 3px rgba(0,0,0,0.1))');\n\n // Add tooltip for single arc if no thresholds\n if (!this.effectiveOptions().thresholds || this.effectiveOptions().thresholds.length === 0) {\n backgroundPath\n .style('cursor', 'pointer')\n .on('mouseenter', (event) => {\n if (!this.effectiveOptions().showTooltip) return;\n this.showSingleRangeTooltip(event);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n }\n\n /**\n * Draw the thresholds arcs\n */\n private drawThresholds(\n chartGroup,\n innerRadius: number,\n outerRadius: number,\n minValue: number,\n maxValue: number,\n thresholds: { value: number; color: string; label?: string }[],\n cornerRadius: number,\n ) {\n // Create arc generator\n const arc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius * 0.98)\n .cornerRadius(cornerRadius);\n\n // Sort thresholds by value in ascending order\n const sortedThresholds = [...thresholds].sort((a, b) => a.value - b.value);\n\n // Calculate all angles first using the color angle calculation\n const angles = sortedThresholds.map((t) => this.scaleValueToColorAngle(t.value, minValue, maxValue));\n\n // Start from the minimum value angle\n let previousEndAngle = this.scaleValueToColorAngle(minValue, minValue, maxValue);\n\n sortedThresholds.forEach((threshold, i) => {\n const endAngle = angles[i];\n\n // Skip if end angle is not greater than start angle\n if (endAngle <= previousEndAngle) return;\n\n const arcPath = chartGroup\n .append('path')\n .attr(\n 'd',\n arc({\n innerRadius,\n outerRadius,\n startAngle: previousEndAngle,\n endAngle,\n }),\n )\n .attr('fill', threshold.color || `url(#threshold-gradient-${i})`)\n .attr('class', 'gauge-arc threshold-arc')\n .attr('data-value', threshold.value)\n .style('cursor', 'pointer');\n\n // Add tooltip interaction\n if (this.effectiveOptions().showTooltip) {\n // Convert angles back to values for tooltip\n const startValue = this.angleToValue(previousEndAngle, minValue, maxValue);\n const endValue = threshold.value;\n\n arcPath\n .on('mouseenter', (event) => {\n this.showThresholdTooltip(event, startValue, endValue, threshold.color, threshold.label);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n\n // Update the previous end angle for the next threshold\n previousEndAngle = endAngle;\n });\n\n // Draw the last segment if the last threshold is less than the max value\n if (previousEndAngle < Math.PI / 2) {\n const lastArc = chartGroup\n .append('path')\n .attr(\n 'd',\n arc({\n innerRadius,\n outerRadius,\n startAngle: previousEndAngle,\n endAngle: Math.PI / 2,\n }),\n )\n .attr('fill', 'url(#gauge-bg-gradient)')\n .attr('class', 'gauge-arc threshold-arc')\n .style('cursor', 'pointer');\n\n // Add tooltip for the last segment\n if (this.effectiveOptions().showTooltip) {\n const startValue = this.angleToValue(previousEndAngle, minValue, maxValue);\n const endValue = maxValue;\n const lastThreshold = thresholds[thresholds.length - 1];\n\n lastArc\n .on('mouseenter', (event) => {\n this.showThresholdTooltip(event, startValue, endValue, lastThreshold.color, lastThreshold.label);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n }\n }\n\n /**\n * Shows tooltip for a threshold arc\n */\n private showThresholdTooltip(\n event: MouseEvent,\n startValue: number,\n endValue: number,\n color: string,\n label?: string,\n ): void {\n // Create tooltip data\n this._tooltipData.set({\n title: label || 'Range',\n value: `${startValue.toLocaleString()} - ${endValue.toLocaleString()}`,\n color: color,\n });\n\n // Show tooltip\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n this.cdr.detectChanges();\n }\n\n /**\n * Shows tooltip for the entire range when no thresholds are defined\n */\n private showSingleRangeTooltip(event: MouseEvent): void {\n const options = this.effectiveOptions();\n if (!options.showTooltip) return;\n\n this.updateTooltipPosition(event);\n this._tooltipData.set({\n title: options.label || 'Range',\n value: `${options.minValue.toLocaleString()} - ${options.maxValue.toLocaleString()}`,\n color: 'rgb(var(--ax-comp-gauge-chart-track-color))',\n });\n this._tooltipVisible.set(true);\n this.cdr.detectChanges();\n }\n\n /**\n * Updates the tooltip position based on the mouse event\n */\n private updateTooltipPosition(event: MouseEvent): void {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n\n // Get container dimensions to check if we're near the edge\n const containerWidth = container.width;\n const containerHeight = container.height;\n\n // Tooltip dimensions approximation (can't get exact dimensions without rendering)\n const tooltipWidth = 150; // Approximate width of tooltip\n const tooltipHeight = 80; // Approximate height of tooltip\n\n // Calculate position with edge detection\n let tooltipX = x + 8; // fix overlap with cursor\n const tooltipY = y - 12; // fix overlap with cursor\n\n // Check if we're too close to the right edge\n const rightEdgeDistance = containerWidth - x;\n if (rightEdgeDistance < tooltipWidth) {\n // Place tooltip to the left of the cursor with no gap\n tooltipX = x - tooltipWidth + 70; // Overlap more with cursor position\n }\n\n // Check if we're too close to the bottom edge\n // const bottomEdgeDistance = containerHeight - y;\n // if (bottomEdgeDistance < tooltipHeight + 10) {\n // // Move tooltip up if near bottom edge\n // tooltipY = y - tooltipHeight;\n // }\n\n this._tooltipPosition.set({\n x: tooltipX,\n y: tooltipY,\n });\n this.cdr.detectChanges();\n }\n\n /**\n * Hides the tooltip\n */\n private hideTooltip(): void {\n this._tooltipVisible.set(false);\n this.cdr.detectChanges();\n }\n\n /**\n * Cleans up chart resources\n */\n protected cleanupChart(): void {\n if (this.svgElement) {\n this.svgElement.remove();\n this.svgElement = null;\n }\n this._tooltipVisible.set(false);\n }\n\n /**\n * Creates gradient definitions for thresholds\n */\n private createGradients(svg, thresholds: { value: number; color: string }[]) {\n const defs = svg.append('defs');\n\n // Create a radial gradient for the background\n const bgGradient = defs\n .append('radialGradient')\n .attr('id', 'gauge-bg-gradient')\n .attr('cx', '50%')\n .attr('cy', '50%')\n .attr('r', '50%')\n .attr('gradientUnits', 'userSpaceOnUse');\n\n // Get CSS variable for track color\n if (thresholds.length === 0) {\n // Default gradient when no thresholds are provided\n bgGradient.append('stop').attr('offset', '0%').attr('stop-color', 'rgb(var(--ax-comp-gauge-chart-track-color))');\n bgGradient\n .append('stop')\n .attr('offset', '100%')\n .attr('stop-color', 'rgba(var(--ax-comp-gauge-chart-track-color), 0.8)');\n } else {\n bgGradient.append('stop').attr('offset', '0%').attr('stop-color', 'rgb(var(--ax-comp-gauge-chart-track-color))');\n bgGradient\n .append('stop')\n .attr('offset', '100%')\n .attr('stop-color', 'rgba(var(--ax-comp-gauge-chart-track-color), 0.8)');\n\n // Create gradients for each threshold\n thresholds.forEach((threshold, i) => {\n const gradient = defs\n .append('linearGradient')\n .attr('id', `threshold-gradient-${i}`)\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('x1', '-1')\n .attr('y1', '0')\n .attr('x2', '1')\n .attr('y2', '0');\n\n gradient\n .append('stop')\n .attr('offset', '0%')\n .attr('stop-color', this.d3.color(threshold.color)?.brighter(0.5).toString() || threshold.color);\n\n gradient.append('stop').attr('offset', '100%').attr('stop-color', threshold.color);\n });\n }\n }\n\n /**\n * Draws tick marks and labels around the gauge\n */\n private drawTicks(chartGroup, radius: number, minValue: number, maxValue: number) {\n const tickCount = 5; // Number of ticks including min and max\n const tickLength = radius * 0.1;\n const labelOffset = radius * 0.15;\n\n // Create a group for the ticks\n const tickGroup = chartGroup.append('g').attr('class', 'ticks');\n\n // Generate tick values\n const tickValues = [];\n const step = (maxValue - minValue) / (tickCount - 1);\n for (let i = 0; i < tickCount; i++) {\n tickValues.push(minValue + i * step);\n }\n\n // Create ticks and labels\n tickValues.forEach((tick) => {\n // Calculate angle for this tick\n const angle = this.scaleValueToAngle(tick, minValue, maxValue);\n const radians = angle - Math.PI / 2; // Adjust for starting at bottom (-90 degrees)\n\n // Calculate positions\n const x1 = Math.cos(radians) * (radius + 5);\n const y1 = Math.sin(radians) * (radius + 5);\n const x2 = Math.cos(radians) * (radius + tickLength);\n const y2 = Math.sin(radians) * (radius + tickLength);\n\n // Calculate label position\n const labelX = Math.cos(radians) * (radius + labelOffset);\n const labelY = Math.sin(radians) * (radius + labelOffset);\n\n // Draw tick line\n tickGroup\n .append('line')\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n .attr('stroke', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.5)')\n .attr('stroke-width', 2);\n\n // Add tick label\n tickGroup\n .append('text')\n .attr('x', labelX)\n .attr('y', labelY)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('fill', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.7)')\n .style('font-size', '12px')\n .text(tick.toLocaleString());\n });\n }\n\n /**\n * Draws the value and label text in the center\n */\n private drawValueDisplay(chartGroup, value: number, label: string, radius: number) {\n // Calculate appropriate font sizes based on chart dimensions\n const chartContainerWidth = this.chartContainerEl().nativeElement.clientWidth;\n const baseFontSize = Math.max(1.4, Math.min(2.4, chartContainerWidth / 200)); // Scale between 1.4rem and 2.4rem\n const subTextFontSize = baseFontSize * 0.5;\n\n // Create group for the value display\n const valueGroup = chartGroup.append('g').attr('class', 'gauge-value-display').attr('text-anchor', 'middle');\n\n // Add value display\n valueGroup\n .append('text')\n .attr('class', 'gauge-value')\n .attr('x', 0)\n .attr('y', radius * 0.25)\n .style('font-size', `${baseFontSize}rem`)\n .style('font-weight', '600')\n .style('fill', 'rgb(var(--ax-comp-gauge-chart-text-color))')\n .text(value.toLocaleString());\n\n // Add label display (if provided)\n if (label) {\n valueGroup\n .append('text')\n .attr('class', 'gauge-label')\n .attr('x', 0)\n .attr('y', radius * 0.35)\n .style('font-size', `${subTextFontSize}rem`)\n .style('fill', 'rgb(var(--ax-comp-gauge-chart-text-color))')\n .style('opacity', '0.8')\n .text(label);\n }\n }\n\n /**\n * Draws the dial/needle pointing to the current value with animation\n */\n private drawDial(\n chartGroup,\n radius: number,\n value: number,\n minValue: number,\n maxValue: number,\n animationDuration: number,\n ) {\n // Clamp value to min/max range\n const clampedValue = Math.max(minValue, Math.min(maxValue, value));\n\n // Calculate angle for needle based on value\n const angle = this.scaleValueToAngle(clampedValue, minValue, maxValue);\n const angleInDegrees = this.radiansToDegrees(angle - Math.PI / 2);\n\n // Create a group for the needle\n const dialGroup = chartGroup.append('g').attr('class', 'dial');\n\n // Draw the needle with initial position at minimum value\n const needlePath = dialGroup\n .append('path')\n .attr('d', this.createNeedlePath(radius))\n .attr('class', 'gauge-needle')\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .attr('transform', `rotate(${this.radiansToDegrees(-Math.PI)})`); // Start at -180 degrees (left)\n\n // Add a center circle\n dialGroup\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius * 0.08)\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .attr('stroke', '#fff')\n .attr('stroke-width', 2);\n\n // Add a smaller white center\n dialGroup\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius * 0.03)\n .attr('fill', '#fff');\n\n // Get easing function\n const easingFunction = this.getEasingFunction(this.options()?.animationEasing);\n\n // Animate the needle from min to current value\n needlePath\n .transition()\n .duration(animationDuration)\n .ease(easingFunction)\n .attr('transform', `rotate(${angleInDegrees})`);\n }\n\n /**\n * Gets the appropriate D3 easing function based on the option string\n */\n private getEasingFunction(easing?: string): any {\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.easeCubicOut; // Default easing\n }\n }\n\n /**\n * Creates a path string for the needle\n */\n private createNeedlePath(radius: number): string {\n const needleLength = radius * 0.8;\n const needleWidth = radius * 0.06;\n return `M 0,${needleWidth / 2} L ${needleLength},0 L 0,${-needleWidth / 2} Z`;\n }\n\n /**\n * Scales a value to an angle (in radians)\n */\n private scaleValueToAngle(value: number, min: number, max: number): number {\n const valueRange = max - min;\n const angleRange = Math.PI;\n return ((value - min) / valueRange) * angleRange - Math.PI / 2;\n }\n\n /**\n * Scales a value to an angle for color arcs (in radians)\n */\n private scaleValueToColorAngle(value: number, min: number, max: number): number {\n const valueRange = max - min;\n const angleRange = Math.PI; // 180 degrees in radians\n return ((value - min) / valueRange) * angleRange - Math.PI / 2;\n }\n\n /**\n * Converts an angle back to a value\n */\n private angleToValue(angle: number, min: number, max: number): number {\n const valueRange = max - min;\n const angleRange = Math.PI;\n return min + ((angle + Math.PI / 2) / angleRange) * valueRange;\n }\n\n /**\n * Converts radians to degrees\n */\n private radiansToDegrees(radians: number): number {\n return radians * (180 / Math.PI);\n }\n}\n","<div class=\"ax-gauge-chart\" #chartContainer></div>\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\"></ax-chart-tooltip>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { AXPanViewDirective } from '@acorex/cdk/pan-view';
|
|
|
2
2
|
import { NXComponent } from '@acorex/components/common';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { InjectionToken, inject, viewChild, contentChild, NgZone, ViewContainerRef, signal, input, output, computed, afterNextRender, effect, Component } from '@angular/core';
|
|
5
|
+
import { InjectionToken, inject, viewChild, contentChild, NgZone, ViewContainerRef, signal, input, output, computed, afterNextRender, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
6
6
|
import { AX_GLOBAL_CONFIG } from '@acorex/core/config';
|
|
7
7
|
import { set } from 'lodash-es';
|
|
8
8
|
|
|
@@ -10,10 +10,7 @@ const AXHierarchyChartDefaultConfig = {
|
|
|
10
10
|
direction: 'vertical',
|
|
11
11
|
margin: { top: 40, right: 120, bottom: 40, left: 120 },
|
|
12
12
|
nodeRadius: 30,
|
|
13
|
-
nodeColor: 'rgba(var(--ax-sys-color-primary-500))',
|
|
14
|
-
nodeStrokeColor: 'rgba(var(--ax-sys-color-primary-400))',
|
|
15
13
|
nodeStrokeWidth: 1.5,
|
|
16
|
-
linkColor: 'rgba(var(--ax-sys-color-primary-400))',
|
|
17
14
|
linkWidth: 1.5,
|
|
18
15
|
linkStyle: 'curved',
|
|
19
16
|
nodeWidth: 120,
|
|
@@ -332,7 +329,7 @@ class AXHierarchyChartComponent extends NXComponent {
|
|
|
332
329
|
}
|
|
333
330
|
}
|
|
334
331
|
})
|
|
335
|
-
.attr('stroke',
|
|
332
|
+
.attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-link-color))`)
|
|
336
333
|
.attr('stroke-width', options.linkWidth)
|
|
337
334
|
.attr('fill', 'none')
|
|
338
335
|
.attr('opacity', 1);
|
|
@@ -426,8 +423,8 @@ class AXHierarchyChartComponent extends NXComponent {
|
|
|
426
423
|
.attr('height', nodeHeight)
|
|
427
424
|
.attr('rx', 6)
|
|
428
425
|
.attr('ry', 6)
|
|
429
|
-
.attr('fill', node.color ||
|
|
430
|
-
.attr('stroke',
|
|
426
|
+
.attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)
|
|
427
|
+
.attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)
|
|
431
428
|
.attr('stroke-width', options.nodeStrokeWidth)
|
|
432
429
|
.attr('class', 'ax-hierarchy-chart-node');
|
|
433
430
|
// Main title/name
|
|
@@ -467,11 +464,11 @@ class AXHierarchyChartComponent extends NXComponent {
|
|
|
467
464
|
// Toggle button with better styling
|
|
468
465
|
group
|
|
469
466
|
.append('circle')
|
|
470
|
-
.attr('r',
|
|
471
|
-
.attr('cx', nodeWidth / 2 -
|
|
467
|
+
.attr('r', 10)
|
|
468
|
+
.attr('cx', nodeWidth / 2 - 12)
|
|
472
469
|
.attr('cy', -nodeHeight / 2 + 12)
|
|
473
470
|
.attr('fill', 'white')
|
|
474
|
-
.attr('stroke',
|
|
471
|
+
.attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)
|
|
475
472
|
.attr('stroke-width', 1)
|
|
476
473
|
.attr('class', 'ax-hierarchy-chart-toggle-indicator')
|
|
477
474
|
.style('cursor', 'pointer')
|
|
@@ -482,12 +479,12 @@ class AXHierarchyChartComponent extends NXComponent {
|
|
|
482
479
|
// Toggle icon
|
|
483
480
|
group
|
|
484
481
|
.append('text')
|
|
485
|
-
.attr('x', nodeWidth / 2 -
|
|
482
|
+
.attr('x', nodeWidth / 2 - 12)
|
|
486
483
|
.attr('y', -nodeHeight / 2 + 12)
|
|
487
484
|
.attr('dy', '0.32em')
|
|
488
485
|
.attr('text-anchor', 'middle')
|
|
489
486
|
.attr('class', 'ax-hierarchy-chart-toggle-icon')
|
|
490
|
-
.attr('fill', node.color ||
|
|
487
|
+
.attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)
|
|
491
488
|
.attr('font-weight', 'bold')
|
|
492
489
|
.style('cursor', 'pointer')
|
|
493
490
|
.text(isExpanded ? '−' : '+')
|
|
@@ -639,11 +636,11 @@ class AXHierarchyChartComponent extends NXComponent {
|
|
|
639
636
|
}
|
|
640
637
|
}
|
|
641
638
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXHierarchyChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
642
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.10", type: AXHierarchyChartComponent, isStandalone: true, selector: "ax-hierarchy-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", nodeToggle: "nodeToggle" }, queries: [{ propertyName: "customNodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "chartContainer", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div axPanView class=\"ax-hierarchy-chart\" #chartContainer></div>\n", styles: ["
|
|
639
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.10", type: AXHierarchyChartComponent, isStandalone: true, selector: "ax-hierarchy-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", nodeToggle: "nodeToggle" }, queries: [{ propertyName: "customNodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "chartContainer", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div axPanView class=\"ax-hierarchy-chart\" #chartContainer></div>\n", styles: ["ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: var(--ax-sys-color-lightest-surface);color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color))}.ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:visible}.ax-hierarchy-chart svg{display:block;width:100%;height:100%;overflow:visible}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: AXPanViewDirective, selector: "[axPanView]", inputs: ["zoomStep", "minZoom", "maxZoom", "freeMode", "fitContent", "disablePan", "disableZoom", "wrapperClasses", "panX", "panY", "zoom"], outputs: ["panXChange", "panYChange", "zoomChange", "positionChange"], exportAs: ["axPanView"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
643
640
|
}
|
|
644
641
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXHierarchyChartComponent, decorators: [{
|
|
645
642
|
type: Component,
|
|
646
|
-
args: [{ selector: 'ax-hierarchy-chart', standalone: true, imports: [CommonModule, AXPanViewDirective], template: "<div axPanView class=\"ax-hierarchy-chart\" #chartContainer></div>\n", styles: ["
|
|
643
|
+
args: [{ selector: 'ax-hierarchy-chart', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXPanViewDirective], template: "<div axPanView class=\"ax-hierarchy-chart\" #chartContainer></div>\n", styles: ["ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: var(--ax-sys-color-lightest-surface);color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color))}.ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:visible}.ax-hierarchy-chart svg{display:block;width:100%;height:100%;overflow:visible}\n"] }]
|
|
647
644
|
}], ctorParameters: () => [] });
|
|
648
645
|
|
|
649
646
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-charts-hierarchy-chart.mjs","sources":["../../../../libs/charts/hierarchy-chart/src/lib/hierarchy-chart.config.ts","../../../../libs/charts/hierarchy-chart/src/lib/hierarchy-chart.component.ts","../../../../libs/charts/hierarchy-chart/src/lib/hierarchy-chart.component.html","../../../../libs/charts/hierarchy-chart/src/acorex-charts-hierarchy-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\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 nodeColor: 'rgba(var(--ax-sys-color-primary-500))',\n nodeStrokeColor: 'rgba(var(--ax-sys-color-primary-400))',\n nodeStrokeWidth: 1.5,\n linkColor: 'rgba(var(--ax-sys-color-primary-400))',\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};\n\nexport const AX_HIERARCHY_CHART_CONFIG = new InjectionToken<AXHierarchyChartOption>('AX_HIERARCHY_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.hierarchyChart', AXHierarchyChartDefaultConfig);\n return AXHierarchyChartDefaultConfig;\n },\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 { AXPanViewDirective } from '@acorex/cdk/pan-view';\nimport { NXComponent } from '@acorex/components/common';\nimport { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n NgZone,\n TemplateRef,\n ViewContainerRef,\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 imports: [CommonModule, AXPanViewDirective],\n})\nexport class AXHierarchyChartComponent extends NXComponent {\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 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 private createChart(): void {\n if (!this.d3 || !this.processedData()) {\n return;\n }\n\n // Clear any existing chart\n this.clearChart();\n\n const container = this.chartContainer().nativeElement;\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 // 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', options.linkColor)\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 || options.nodeColor)\n .attr('stroke', options.nodeStrokeColor)\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', 12)\n .attr('cx', nodeWidth / 2 - 10)\n .attr('cy', -nodeHeight / 2 + 12)\n .attr('fill', 'white')\n .attr('stroke', options.nodeStrokeColor)\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 - 10)\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 || options.nodeColor)\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 private clearChart(): 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 /**\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","<div axPanView class=\"ax-hierarchy-chart\" #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 { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\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};\n\nexport const AX_HIERARCHY_CHART_CONFIG = new InjectionToken<AXHierarchyChartOption>('AX_HIERARCHY_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.hierarchyChart', AXHierarchyChartDefaultConfig);\n return AXHierarchyChartDefaultConfig;\n },\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 { AXPanViewDirective } from '@acorex/cdk/pan-view';\nimport { NXComponent } from '@acorex/components/common';\nimport { CommonModule } from '@angular/common';\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 imports: [CommonModule, AXPanViewDirective],\n})\nexport class AXHierarchyChartComponent extends NXComponent {\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 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 private createChart(): void {\n if (!this.d3 || !this.processedData()) {\n return;\n }\n\n // Clear any existing chart\n this.clearChart();\n\n const container = this.chartContainer().nativeElement;\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 // 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 private clearChart(): 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 /**\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","<div axPanView class=\"ax-hierarchy-chart\" #chartContainer></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|