@acorex/charts 19.14.2 → 19.14.4

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.
@@ -3,10 +3,6 @@ import { AXChartTooltipData } from '@acorex/charts/chart-tooltip';
3
3
  import { OnDestroy } from '@angular/core';
4
4
  import { AXBarChartClickEvent, AXBarChartData, AXBarChartOption } from './bar-chart.type';
5
5
  import * as i0 from "@angular/core";
6
- export declare const AXBarChartColors: {
7
- defaultColors: string[];
8
- getColor: (index: number, customPalette?: string[]) => string;
9
- };
10
6
  /**
11
7
  * Bar Chart Component
12
8
  * Renders data as vertical bars with interactive hover effects and animations
@@ -42,6 +38,7 @@ export declare class AXBarChartComponent extends NXComponent implements OnDestro
42
38
  }>;
43
39
  protected tooltipData: import("@angular/core").Signal<AXChartTooltipData>;
44
40
  private configToken;
41
+ private chartColors;
45
42
  protected effectiveOptions: import("@angular/core").Signal<{
46
43
  width?: number;
47
44
  height?: number;
@@ -2,10 +2,6 @@ import { AXChartTooltipData } from '@acorex/charts/chart-tooltip';
2
2
  import { OnDestroy } from '@angular/core';
3
3
  import { AXDonutChartData, AXDonutChartOption, AXDonutChartValue } from './donut-chart.type';
4
4
  import * as i0 from "@angular/core";
5
- export declare const AXDonutChartColors: {
6
- defaultColors: string[];
7
- getColor: (index: number, customPalette?: string[]) => string;
8
- };
9
5
  /**
10
6
  * Donut Chart Component
11
7
  * Displays data in a circular donut chart with interactive segments
@@ -39,6 +35,7 @@ export declare class AXDonutChartComponent implements OnDestroy {
39
35
  }>;
40
36
  protected tooltipData: import("@angular/core").Signal<AXChartTooltipData>;
41
37
  private configToken;
38
+ private chartColors;
42
39
  protected effectiveOptions: import("@angular/core").Signal<{
43
40
  width?: number;
44
41
  height?: number;
@@ -1,4 +1,5 @@
1
1
  import { NXComponent } from '@acorex/cdk/common';
2
+ import { AX_CHART_COLOR_PALETTE, getChartColor } from '@acorex/charts';
2
3
  import { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';
3
4
  import { CommonModule } from '@angular/common';
4
5
  import * as i0 from '@angular/core';
@@ -33,26 +34,6 @@ function barChartConfig(config = {}) {
33
34
  return result;
34
35
  }
35
36
 
36
- const AXBarChartColors = {
37
- // Modern color palette suitable for data visualization
38
- defaultColors: [
39
- '#4361ee', // Blue
40
- '#3a0ca3', // Purple
41
- '#7209b7', // Violet
42
- '#f72585', // Pink
43
- '#4cc9f0', // Light Blue
44
- '#4895ef', // Sky Blue
45
- '#560bad', // Deep Purple
46
- '#f15bb5', // Light Pink
47
- '#00bbf9', // Cyan
48
- '#00f5d4', // Teal
49
- ],
50
- // Get a color from the palette by index with wraparound
51
- getColor: (index, customPalette) => {
52
- const palette = customPalette || AXBarChartColors.defaultColors;
53
- return palette[index % palette.length];
54
- },
55
- };
56
37
  /**
57
38
  * Bar Chart Component
58
39
  * Renders data as vertical bars with interactive hover effects and animations
@@ -101,6 +82,8 @@ class AXBarChartComponent extends NXComponent {
101
82
  tooltipData = this._tooltipData.asReadonly();
102
83
  // Inject configuration
103
84
  configToken = inject(AX_BAR_CHART_CONFIG);
85
+ // Inject the chart colors
86
+ chartColors = inject(AX_CHART_COLOR_PALETTE);
104
87
  // Configuration with defaults
105
88
  effectiveOptions = computed(() => {
106
89
  return {
@@ -392,7 +375,7 @@ class AXBarChartComponent extends NXComponent {
392
375
  .attr('height', 0) // Start with height 0 for animation
393
376
  .attr('rx', radius) // Rounded corners
394
377
  .attr('ry', radius) // Rounded corners
395
- .attr('fill', (d, i) => d.color || AXBarChartColors.getColor(i));
378
+ .attr('fill', (d, i) => d.color || getChartColor(i, this.chartColors));
396
379
  // Add data labels if they're enabled
397
380
  if (this.effectiveOptions().showDataLabels !== false) {
398
381
  barGroups
@@ -495,7 +478,7 @@ class AXBarChartComponent extends NXComponent {
495
478
  handleBarHover(event, datum) {
496
479
  if (this.effectiveOptions().showTooltip !== false) {
497
480
  const index = this.data().findIndex((item) => item.id === datum.id);
498
- const color = datum.color || AXBarChartColors.getColor(index);
481
+ const color = datum.color || getChartColor(index, this.chartColors);
499
482
  // Calculate percentage of total
500
483
  const total = this.data().reduce((sum, item) => sum + item.value, 0);
501
484
  const percentage = total > 0 ? ((datum.value / total) * 100).toFixed(1) : '0';
@@ -595,5 +578,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
595
578
  * Generated bundle index. Do not edit.
596
579
  */
597
580
 
598
- export { AXBarChartColors, AXBarChartComponent, AXBarChartDefaultConfig, AX_BAR_CHART_CONFIG, barChartConfig };
581
+ export { AXBarChartComponent, AXBarChartDefaultConfig, AX_BAR_CHART_CONFIG, barChartConfig };
599
582
  //# sourceMappingURL=acorex-charts-bar-chart.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-charts-bar-chart.mjs","sources":["../../../../packages/charts/bar-chart/src/lib/bar-chart.config.ts","../../../../packages/charts/bar-chart/src/lib/bar-chart.component.ts","../../../../packages/charts/bar-chart/src/lib/bar-chart.component.html","../../../../packages/charts/bar-chart/src/acorex-charts-bar-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXBarChartOption } from './bar-chart.type';\n\nexport const AXBarChartDefaultConfig: AXBarChartOption = {\n showXAxis: true,\n showYAxis: true,\n showGrid: true,\n showDataLabels: true,\n showTooltip: true,\n barWidth: 80,\n cornerRadius: 4,\n animationDuration: 800,\n animationEasing: 'cubic-out',\n};\n\nexport const AX_BAR_CHART_CONFIG = new InjectionToken<AXBarChartOption>('AX_BAR_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.barChart', AXBarChartDefaultConfig);\n return AXBarChartDefaultConfig;\n },\n});\n\nexport type PartialBarChartConfig = Partial<AXBarChartOption>;\n\nexport function barChartConfig(config: PartialBarChartConfig = {}): AXBarChartOption {\n const result = {\n ...AXBarChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { NXComponent } from '@acorex/cdk/common';\nimport { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AX_BAR_CHART_CONFIG } from './bar-chart.config';\nimport { AXBarChartClickEvent, AXBarChartData, AXBarChartOption } from './bar-chart.type';\n\nexport const AXBarChartColors = {\n // Modern color palette suitable for data visualization\n defaultColors: [\n '#4361ee', // Blue\n '#3a0ca3', // Purple\n '#7209b7', // Violet\n '#f72585', // Pink\n '#4cc9f0', // Light Blue\n '#4895ef', // Sky Blue\n '#560bad', // Deep Purple\n '#f15bb5', // Light Pink\n '#00bbf9', // Cyan\n '#00f5d4', // Teal\n ],\n\n // Get a color from the palette by index with wraparound\n getColor: (index: number, customPalette?: string[]): string => {\n const palette = customPalette || AXBarChartColors.defaultColors;\n return palette[index % palette.length];\n },\n};\n\n/**\n * Bar Chart Component\n * Renders data as vertical bars with interactive hover effects and animations\n */\n@Component({\n selector: 'ax-bar-chart',\n templateUrl: './bar-chart.component.html',\n styleUrls: ['./bar-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXChartTooltipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXBarChartComponent extends NXComponent implements OnDestroy {\n // Inputs\n /** Chart data input */\n data = input<AXBarChartData[]>([]);\n\n /** Chart options input */\n options = input<AXBarChartOption>({});\n\n // Outputs\n /** Emitted when a bar is clicked */\n barClick = output<AXBarChartClickEvent>();\n\n // Chart container reference\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // D3 reference - loaded asynchronously\n protected d3!: typeof import('d3');\n\n // Chart elements\n private svg!: any;\n private chart!: any;\n private xScale!: any;\n private yScale!: any;\n private xAxis!: any;\n private yAxis!: any;\n\n // Chart dimensions\n private width!: number;\n private height!: number;\n private margin = { top: 20, right: 20, bottom: 30, left: 40 };\n\n // Animation state\n private _initialAnimationComplete = signal(false);\n\n // Tooltip state\n private _tooltipVisible = signal(false);\n private _tooltipPosition = signal({ x: 0, y: 0 });\n private _tooltipData = signal<AXChartTooltipData>({\n title: '',\n value: '0',\n percentage: '0%',\n color: '',\n });\n\n // Signals for component state\n private _initialized = signal(false);\n private _rendered = signal(false);\n\n // Tooltip accessors\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_BAR_CHART_CONFIG);\n\n // Configuration with defaults\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 // Create chart after D3 is loaded and container is available\n if (this.d3 && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n });\n\n // Watch for changes to redraw the chart\n effect(() => {\n // Access inputs to track them\n this.data();\n this.effectiveOptions();\n\n // Only update if already rendered\n if (this._rendered()) {\n this.updateChart();\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 bar chart SVG and renders all elements\n */\n protected createChart(): void {\n if (!this.d3 || !this.chartContainerEl()?.nativeElement) return;\n\n const containerElement = this.chartContainerEl().nativeElement;\n const data = this.data() || [];\n\n // Clear existing chart\n this.d3.select(containerElement).selectAll('svg').remove();\n\n // Early return if no data\n if (!data.length) {\n this.showNoDataMessage(containerElement);\n return;\n }\n\n // Get options and setup dimensions\n const chartOptions = this.effectiveOptions();\n this.setupDimensions(containerElement, chartOptions);\n\n // Create scales and axes\n this.setupScales(data);\n this.createAxes(chartOptions);\n\n // Render the bars\n this.renderBars(data);\n }\n\n /**\n * Updates the chart when inputs change\n */\n protected updateChart(): void {\n this.createChart();\n }\n\n /**\n * Cleans up chart resources\n */\n protected cleanupChart(): void {\n if (this.svg) {\n this.d3?.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();\n this.svg = null;\n this.chart = null;\n }\n this._tooltipVisible.set(false);\n }\n\n /**\n * Sets up chart dimensions and creates SVG with responsive attributes\n */\n private setupDimensions(containerElement: HTMLElement, options: AXBarChartOption): void {\n // Calculate margins based on options\n this.calculateMargins(options);\n\n // Get container dimensions\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n\n // If options specify width and height, use those, otherwise default to container size\n const minDim = Math.min(200, containerWidth, containerHeight); // Ensure reasonable minimum\n\n if (options.width && options.height) {\n // Explicit dimensions provided\n this.width = options.width - this.margin.left - this.margin.right;\n this.height = options.height - this.margin.top - this.margin.bottom;\n } else {\n // Responsive dimensions\n this.width = Math.max(containerWidth, minDim) - this.margin.left - this.margin.right;\n this.height = Math.max(containerHeight, minDim) - this.margin.top - this.margin.bottom;\n }\n\n // Create responsive SVG that scales with its container\n const svg = this.d3\n .select(containerElement)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr(\n 'viewBox',\n `0 0 ${this.width + this.margin.left + this.margin.right} ${this.height + this.margin.top + this.margin.bottom}`,\n )\n .attr('preserveAspectRatio', 'xMidYMid meet');\n\n this.svg = svg;\n\n // Create chart group with margins\n this.chart = this.svg.append('g').attr('transform', `translate(${this.margin.left},${this.margin.top})`);\n }\n\n /**\n * Calculates chart margins based on options\n */\n private calculateMargins(options: AXBarChartOption): void {\n // Start with default margins\n this.margin = {\n top: 20,\n right: 20,\n bottom: 30,\n left: 40,\n };\n\n // Adjust margins if axis labels are present\n if (options.xAxisLabel) {\n const xLabelLength = options.xAxisLabel.length;\n const extraBottomMargin = Math.min(20, Math.max(10, xLabelLength * 0.8));\n this.margin.bottom = Math.max(this.margin.bottom, 30 + extraBottomMargin);\n }\n\n if (options.yAxisLabel) {\n const yLabelLength = options.yAxisLabel.length;\n const extraLeftMargin = Math.min(20, Math.max(10, yLabelLength * 0.8));\n this.margin.left = Math.max(this.margin.left, 40 + extraLeftMargin);\n }\n\n // Ensure minimum margins for axes\n if (options.showXAxis !== false) {\n this.margin.bottom = Math.max(this.margin.bottom, 35);\n }\n\n if (options.showYAxis !== false) {\n this.margin.left = Math.max(this.margin.left, 45);\n }\n }\n\n /**\n * Creates x and y scales for the chart\n */\n private setupScales(data: AXBarChartData[]): void {\n // Get the bar width percentage (default 80%)\n const barWidthPercent = this.effectiveOptions().barWidth ?? 60 / 100;\n // Calculate padding based on barWidth (inverse relationship)\n const padding = Math.max(0.1, 1 - barWidthPercent);\n\n // Create x scale (band scale for categorical data)\n this.xScale = this.d3\n .scaleBand()\n .domain(data.map((d) => d.label))\n .range([0, this.width])\n .padding(padding);\n\n // Create y scale (linear scale for values)\n this.yScale = this.d3\n .scaleLinear()\n .domain([0, this.d3.max(data, (d) => d.value) || 0])\n .nice()\n .range([this.height, 0]);\n }\n\n /**\n * Creates x and y axes with grid lines\n */\n private createAxes(options: AXBarChartOption): void {\n // Only create axes if they are enabled in options\n const showXAxis = options.showXAxis !== false;\n const showYAxis = options.showYAxis !== false;\n const showGrid = options.showGrid !== false;\n\n // Create a group for all axes\n const axesGroup = this.chart.append('g').attr('class', 'ax-bar-chart-axes');\n\n if (showXAxis) {\n // Create X axis\n this.xAxis = axesGroup\n .append('g')\n .attr('class', 'ax-bar-chart-axis-x')\n .attr('transform', `translate(0,${this.height})`)\n .call(this.d3.axisBottom(this.xScale));\n\n // Style the axis text\n this.xAxis\n .selectAll('text')\n .style('font-size', '11px')\n .style('font-weight', '400')\n .style('fill', 'rgba(var(--ax-comp-bar-chart-labels-color), 0.7)');\n\n // Style all lines in the x-axis (path, ticks)\n this.xAxis.selectAll('line, path').style('stroke', 'rgb(var(--ax-comp-bar-chart-grid-lines-color))');\n\n // Add X axis label if provided\n if (options.xAxisLabel) {\n const labelY = this.height + this.margin.bottom * 0.65;\n\n axesGroup\n .append('text')\n .attr('class', 'ax-bar-chart-axis-label ax-x-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('x', this.width / 2)\n .attr('y', labelY)\n .style('font-size', '13px')\n .style('font-weight', '500')\n .style('fill', 'rgb(var(--ax-comp-bar-chart-axis-label-color))')\n .text(options.xAxisLabel);\n }\n }\n\n if (showYAxis) {\n // Create Y axis\n this.yAxis = axesGroup.append('g').attr('class', 'ax-bar-chart-axis-y').call(this.d3.axisLeft(this.yScale));\n\n // Style the axis text\n this.yAxis\n .selectAll('text')\n .style('font-size', '11px')\n .style('font-weight', '400')\n .style('fill', 'rgba(var(--ax-comp-bar-chart-labels-color), 0.7)');\n\n // Style all lines in the y-axis (path, ticks)\n this.yAxis.selectAll('line, path').style('stroke', 'rgb(var(--ax-comp-bar-chart-grid-lines-color))');\n\n // Add Y axis label if provided\n if (options.yAxisLabel) {\n const labelX = -this.height / 2;\n const labelY = -this.margin.left * 0.65;\n\n axesGroup\n .append('text')\n .attr('class', 'ax-bar-chart-axis-label ax-y-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('transform', 'rotate(-90)')\n .attr('x', labelX)\n .attr('y', labelY)\n .style('font-size', '13px')\n .style('font-weight', '500')\n .style('fill', 'rgb(var(--ax-comp-bar-chart-axis-label-color))')\n .text(options.yAxisLabel);\n }\n }\n\n if (showGrid) {\n // Add horizontal grid lines\n this.chart\n .append('g')\n .attr('class', 'ax-bar-chart-grid')\n .call(\n this.d3\n .axisLeft(this.yScale)\n .tickSize(-this.width)\n .tickFormat(() => ''),\n )\n .selectAll('line')\n .style('stroke', 'rgb(var(--ax-comp-bar-chart-grid-lines-color))')\n .style('stroke-opacity', 0.2);\n\n // Remove unneeded elements from grid\n this.chart.select('.ax-bar-chart-grid').selectAll('path, text').remove();\n }\n }\n\n /**\n * Renders the bars with animations\n */\n private renderBars(data: AXBarChartData[]): void {\n // Reset animation state\n this._initialAnimationComplete.set(false);\n\n // Get corner radius from options\n const radius = this.effectiveOptions().cornerRadius;\n\n // Get animation options\n const animationDuration = this.effectiveOptions().animationDuration;\n const animationEasing = this.getEasingFunction(this.effectiveOptions().animationEasing);\n\n // Create a container for all bars\n const barsContainer = this.chart.append('g').attr('class', 'ax-bar-chart-bars-container');\n\n // Create groups for each bar to handle transformations\n const barGroups = barsContainer\n .selectAll('.ax-bar-chart-bar-group')\n .data(data)\n .enter()\n .append('g')\n .style('cursor', 'pointer')\n .attr('class', 'ax-bar-chart-bar-group');\n\n // Add bars inside groups\n const bars = barGroups\n .append('rect')\n .attr('class', 'ax-bar-chart-bar')\n .attr('x', (d: AXBarChartData) => this.xScale(d.label))\n .attr('width', this.xScale.bandwidth())\n .attr('y', this.height) // Start from bottom for animation\n .attr('height', 0) // Start with height 0 for animation\n .attr('rx', radius) // Rounded corners\n .attr('ry', radius) // Rounded corners\n .attr('fill', (d: AXBarChartData, i: number) => d.color || AXBarChartColors.getColor(i));\n\n // Add data labels if they're enabled\n if (this.effectiveOptions().showDataLabels !== false) {\n barGroups\n .append('text')\n .attr('class', 'ax-bar-chart-data-label')\n .attr('text-anchor', 'middle')\n .attr('x', (d: AXBarChartData) => this.xScale(d.label) + this.xScale.bandwidth() / 2)\n .attr('y', this.height) // Start from bottom for animation\n .style('font-size', 'clamp(8px, 2vmin, 12px)')\n .style('font-weight', '500')\n .style('fill', 'rgb(var(--ax-comp-bar-chart-data-labels-color))')\n .style('opacity', 0) // Start invisible for animation\n .text((d: AXBarChartData) => d.value);\n\n // Animate data labels\n barGroups\n .selectAll('.ax-bar-chart-data-label')\n .transition()\n .duration(animationDuration)\n .delay((d: AXBarChartData, i: number) => i * 50 + 100) // Slightly delayed after bar animation\n .attr('y', (d: AXBarChartData) => this.yScale(d.value) - 8) // Position above bar\n .style('opacity', 1)\n .ease(animationEasing);\n }\n\n // Set up event handlers on each group\n barGroups\n .on('mouseenter', (event: MouseEvent, d: AXBarChartData) => {\n // Only apply hover effects if initial animation is complete\n if (!this._initialAnimationComplete()) return;\n\n const barEl = this.d3.select(event.currentTarget).select('rect');\n\n // Standard hover effect - darken the bar slightly and add a subtle shadow\n barEl.transition().duration(150).style('filter', 'brightness(0.7) drop-shadow(0 0 2px rgba(0,0,0,0.1))');\n\n this.handleBarHover(event, d);\n })\n .on('mousemove', (event: MouseEvent) => {\n // Only update tooltip if initial animation is complete\n if (this._initialAnimationComplete()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', (event: MouseEvent, d: AXBarChartData) => {\n // Only apply hover effects if initial animation is complete\n if (!this._initialAnimationComplete()) return;\n\n const barEl = this.d3.select(event.currentTarget).select('rect');\n\n // Remove hover effect\n barEl.transition().duration(150).style('filter', null);\n\n this._tooltipVisible.set(false);\n })\n .on('click', (event: MouseEvent, d: AXBarChartData) => {\n // Only trigger click events if initial animation is complete\n if (this._initialAnimationComplete()) {\n this.handleBarClick(event, d);\n }\n });\n\n // Add animation\n bars\n .transition()\n .duration(animationDuration)\n .delay((d: AXBarChartData, i: number) => i * 50) // Stagger each bar animation\n .attr('y', (d: AXBarChartData) => this.yScale(d.value))\n .attr('height', (d: AXBarChartData) => this.height - this.yScale(d.value))\n .ease(animationEasing) // Use the configured easing function\n .end() // Wait for all animations to complete\n .then(() => {\n // Mark animation as complete to enable hover effects\n this._initialAnimationComplete.set(true);\n });\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 * Handles bar hover event and shows tooltip\n */\n private handleBarHover(event: MouseEvent, datum: AXBarChartData): void {\n if (this.effectiveOptions().showTooltip !== false) {\n const index = this.data().findIndex((item) => item.id === datum.id);\n const color = datum.color || AXBarChartColors.getColor(index);\n\n // Calculate percentage of total\n const total = this.data().reduce((sum, item) => sum + item.value, 0);\n const percentage = total > 0 ? ((datum.value / total) * 100).toFixed(1) : '0';\n\n this._tooltipData.set({\n title: datum.tooltipLabel || datum.label,\n value: datum.value.toString(),\n percentage: `${percentage}%`,\n color: color,\n });\n\n this.updateTooltipPosition(event);\n this._tooltipVisible.set(true);\n }\n }\n\n /**\n * Updates tooltip position based on mouse coordinates\n */\n private updateTooltipPosition(event: MouseEvent): void {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.chartContainerEl().nativeElement.querySelector('.chart-tooltip');\n\n if (!tooltipEl) {\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n this._tooltipPosition.set({ x, y });\n return;\n }\n\n const tooltipRect = tooltipEl.getBoundingClientRect();\n let x = event.clientX - container.left;\n const y = event.clientY - container.top;\n\n // Adjust position if near the right edge\n if (x + tooltipRect.width + 10 > container.width) {\n x = x - tooltipRect.width - 10;\n } else {\n x = x + 10;\n }\n\n this._tooltipPosition.set({ x, y });\n }\n\n /**\n * Handles bar click event\n */\n private handleBarClick(event: MouseEvent, datum: AXBarChartData): void {\n this.barClick.emit({ item: datum, event: { nativeEvent: event, sender: this } });\n }\n\n /**\n * Shows a message when no data is available\n */\n private showNoDataMessage(containerElement: HTMLElement): void {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-bar-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-bar-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-bar-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-chart-column fa-2x\"></i>');\n\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-bar-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('No data available');\n\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-bar-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Please provide data to display the chart');\n }\n}\n","<div class=\"ax-bar-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"true\"\n ></ax-chart-tooltip>\n</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-bar-chart.mjs","sources":["../../../../packages/charts/bar-chart/src/lib/bar-chart.config.ts","../../../../packages/charts/bar-chart/src/lib/bar-chart.component.ts","../../../../packages/charts/bar-chart/src/lib/bar-chart.component.html","../../../../packages/charts/bar-chart/src/acorex-charts-bar-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXBarChartOption } from './bar-chart.type';\n\nexport const AXBarChartDefaultConfig: AXBarChartOption = {\n showXAxis: true,\n showYAxis: true,\n showGrid: true,\n showDataLabels: true,\n showTooltip: true,\n barWidth: 80,\n cornerRadius: 4,\n animationDuration: 800,\n animationEasing: 'cubic-out',\n};\n\nexport const AX_BAR_CHART_CONFIG = new InjectionToken<AXBarChartOption>('AX_BAR_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.barChart', AXBarChartDefaultConfig);\n return AXBarChartDefaultConfig;\n },\n});\n\nexport type PartialBarChartConfig = Partial<AXBarChartOption>;\n\nexport function barChartConfig(config: PartialBarChartConfig = {}): AXBarChartOption {\n const result = {\n ...AXBarChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { NXComponent } from '@acorex/cdk/common';\nimport { AX_CHART_COLOR_PALETTE, getChartColor } from '@acorex/charts';\nimport { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AX_BAR_CHART_CONFIG } from './bar-chart.config';\nimport { AXBarChartClickEvent, AXBarChartData, AXBarChartOption } from './bar-chart.type';\n\n/**\n * Bar Chart Component\n * Renders data as vertical bars with interactive hover effects and animations\n */\n@Component({\n selector: 'ax-bar-chart',\n templateUrl: './bar-chart.component.html',\n styleUrls: ['./bar-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXChartTooltipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXBarChartComponent extends NXComponent implements OnDestroy {\n // Inputs\n /** Chart data input */\n data = input<AXBarChartData[]>([]);\n\n /** Chart options input */\n options = input<AXBarChartOption>({});\n\n // Outputs\n /** Emitted when a bar is clicked */\n barClick = output<AXBarChartClickEvent>();\n\n // Chart container reference\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // D3 reference - loaded asynchronously\n protected d3!: typeof import('d3');\n\n // Chart elements\n private svg!: any;\n private chart!: any;\n private xScale!: any;\n private yScale!: any;\n private xAxis!: any;\n private yAxis!: any;\n\n // Chart dimensions\n private width!: number;\n private height!: number;\n private margin = { top: 20, right: 20, bottom: 30, left: 40 };\n\n // Animation state\n private _initialAnimationComplete = signal(false);\n\n // Tooltip state\n private _tooltipVisible = signal(false);\n private _tooltipPosition = signal({ x: 0, y: 0 });\n private _tooltipData = signal<AXChartTooltipData>({\n title: '',\n value: '0',\n percentage: '0%',\n color: '',\n });\n\n // Signals for component state\n private _initialized = signal(false);\n private _rendered = signal(false);\n\n // Tooltip accessors\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_BAR_CHART_CONFIG);\n\n // Inject the chart colors\n private chartColors = inject(AX_CHART_COLOR_PALETTE);\n\n // Configuration with defaults\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 // Create chart after D3 is loaded and container is available\n if (this.d3 && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n });\n\n // Watch for changes to redraw the chart\n effect(() => {\n // Access inputs to track them\n this.data();\n this.effectiveOptions();\n\n // Only update if already rendered\n if (this._rendered()) {\n this.updateChart();\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 bar chart SVG and renders all elements\n */\n protected createChart(): void {\n if (!this.d3 || !this.chartContainerEl()?.nativeElement) return;\n\n const containerElement = this.chartContainerEl().nativeElement;\n const data = this.data() || [];\n\n // Clear existing chart\n this.d3.select(containerElement).selectAll('svg').remove();\n\n // Early return if no data\n if (!data.length) {\n this.showNoDataMessage(containerElement);\n return;\n }\n\n // Get options and setup dimensions\n const chartOptions = this.effectiveOptions();\n this.setupDimensions(containerElement, chartOptions);\n\n // Create scales and axes\n this.setupScales(data);\n this.createAxes(chartOptions);\n\n // Render the bars\n this.renderBars(data);\n }\n\n /**\n * Updates the chart when inputs change\n */\n protected updateChart(): void {\n this.createChart();\n }\n\n /**\n * Cleans up chart resources\n */\n protected cleanupChart(): void {\n if (this.svg) {\n this.d3?.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();\n this.svg = null;\n this.chart = null;\n }\n this._tooltipVisible.set(false);\n }\n\n /**\n * Sets up chart dimensions and creates SVG with responsive attributes\n */\n private setupDimensions(containerElement: HTMLElement, options: AXBarChartOption): void {\n // Calculate margins based on options\n this.calculateMargins(options);\n\n // Get container dimensions\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n\n // If options specify width and height, use those, otherwise default to container size\n const minDim = Math.min(200, containerWidth, containerHeight); // Ensure reasonable minimum\n\n if (options.width && options.height) {\n // Explicit dimensions provided\n this.width = options.width - this.margin.left - this.margin.right;\n this.height = options.height - this.margin.top - this.margin.bottom;\n } else {\n // Responsive dimensions\n this.width = Math.max(containerWidth, minDim) - this.margin.left - this.margin.right;\n this.height = Math.max(containerHeight, minDim) - this.margin.top - this.margin.bottom;\n }\n\n // Create responsive SVG that scales with its container\n const svg = this.d3\n .select(containerElement)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr(\n 'viewBox',\n `0 0 ${this.width + this.margin.left + this.margin.right} ${this.height + this.margin.top + this.margin.bottom}`,\n )\n .attr('preserveAspectRatio', 'xMidYMid meet');\n\n this.svg = svg;\n\n // Create chart group with margins\n this.chart = this.svg.append('g').attr('transform', `translate(${this.margin.left},${this.margin.top})`);\n }\n\n /**\n * Calculates chart margins based on options\n */\n private calculateMargins(options: AXBarChartOption): void {\n // Start with default margins\n this.margin = {\n top: 20,\n right: 20,\n bottom: 30,\n left: 40,\n };\n\n // Adjust margins if axis labels are present\n if (options.xAxisLabel) {\n const xLabelLength = options.xAxisLabel.length;\n const extraBottomMargin = Math.min(20, Math.max(10, xLabelLength * 0.8));\n this.margin.bottom = Math.max(this.margin.bottom, 30 + extraBottomMargin);\n }\n\n if (options.yAxisLabel) {\n const yLabelLength = options.yAxisLabel.length;\n const extraLeftMargin = Math.min(20, Math.max(10, yLabelLength * 0.8));\n this.margin.left = Math.max(this.margin.left, 40 + extraLeftMargin);\n }\n\n // Ensure minimum margins for axes\n if (options.showXAxis !== false) {\n this.margin.bottom = Math.max(this.margin.bottom, 35);\n }\n\n if (options.showYAxis !== false) {\n this.margin.left = Math.max(this.margin.left, 45);\n }\n }\n\n /**\n * Creates x and y scales for the chart\n */\n private setupScales(data: AXBarChartData[]): void {\n // Get the bar width percentage (default 80%)\n const barWidthPercent = this.effectiveOptions().barWidth ?? 60 / 100;\n // Calculate padding based on barWidth (inverse relationship)\n const padding = Math.max(0.1, 1 - barWidthPercent);\n\n // Create x scale (band scale for categorical data)\n this.xScale = this.d3\n .scaleBand()\n .domain(data.map((d) => d.label))\n .range([0, this.width])\n .padding(padding);\n\n // Create y scale (linear scale for values)\n this.yScale = this.d3\n .scaleLinear()\n .domain([0, this.d3.max(data, (d) => d.value) || 0])\n .nice()\n .range([this.height, 0]);\n }\n\n /**\n * Creates x and y axes with grid lines\n */\n private createAxes(options: AXBarChartOption): void {\n // Only create axes if they are enabled in options\n const showXAxis = options.showXAxis !== false;\n const showYAxis = options.showYAxis !== false;\n const showGrid = options.showGrid !== false;\n\n // Create a group for all axes\n const axesGroup = this.chart.append('g').attr('class', 'ax-bar-chart-axes');\n\n if (showXAxis) {\n // Create X axis\n this.xAxis = axesGroup\n .append('g')\n .attr('class', 'ax-bar-chart-axis-x')\n .attr('transform', `translate(0,${this.height})`)\n .call(this.d3.axisBottom(this.xScale));\n\n // Style the axis text\n this.xAxis\n .selectAll('text')\n .style('font-size', '11px')\n .style('font-weight', '400')\n .style('fill', 'rgba(var(--ax-comp-bar-chart-labels-color), 0.7)');\n\n // Style all lines in the x-axis (path, ticks)\n this.xAxis.selectAll('line, path').style('stroke', 'rgb(var(--ax-comp-bar-chart-grid-lines-color))');\n\n // Add X axis label if provided\n if (options.xAxisLabel) {\n const labelY = this.height + this.margin.bottom * 0.65;\n\n axesGroup\n .append('text')\n .attr('class', 'ax-bar-chart-axis-label ax-x-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('x', this.width / 2)\n .attr('y', labelY)\n .style('font-size', '13px')\n .style('font-weight', '500')\n .style('fill', 'rgb(var(--ax-comp-bar-chart-axis-label-color))')\n .text(options.xAxisLabel);\n }\n }\n\n if (showYAxis) {\n // Create Y axis\n this.yAxis = axesGroup.append('g').attr('class', 'ax-bar-chart-axis-y').call(this.d3.axisLeft(this.yScale));\n\n // Style the axis text\n this.yAxis\n .selectAll('text')\n .style('font-size', '11px')\n .style('font-weight', '400')\n .style('fill', 'rgba(var(--ax-comp-bar-chart-labels-color), 0.7)');\n\n // Style all lines in the y-axis (path, ticks)\n this.yAxis.selectAll('line, path').style('stroke', 'rgb(var(--ax-comp-bar-chart-grid-lines-color))');\n\n // Add Y axis label if provided\n if (options.yAxisLabel) {\n const labelX = -this.height / 2;\n const labelY = -this.margin.left * 0.65;\n\n axesGroup\n .append('text')\n .attr('class', 'ax-bar-chart-axis-label ax-y-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('transform', 'rotate(-90)')\n .attr('x', labelX)\n .attr('y', labelY)\n .style('font-size', '13px')\n .style('font-weight', '500')\n .style('fill', 'rgb(var(--ax-comp-bar-chart-axis-label-color))')\n .text(options.yAxisLabel);\n }\n }\n\n if (showGrid) {\n // Add horizontal grid lines\n this.chart\n .append('g')\n .attr('class', 'ax-bar-chart-grid')\n .call(\n this.d3\n .axisLeft(this.yScale)\n .tickSize(-this.width)\n .tickFormat(() => ''),\n )\n .selectAll('line')\n .style('stroke', 'rgb(var(--ax-comp-bar-chart-grid-lines-color))')\n .style('stroke-opacity', 0.2);\n\n // Remove unneeded elements from grid\n this.chart.select('.ax-bar-chart-grid').selectAll('path, text').remove();\n }\n }\n\n /**\n * Renders the bars with animations\n */\n private renderBars(data: AXBarChartData[]): void {\n // Reset animation state\n this._initialAnimationComplete.set(false);\n\n // Get corner radius from options\n const radius = this.effectiveOptions().cornerRadius;\n\n // Get animation options\n const animationDuration = this.effectiveOptions().animationDuration;\n const animationEasing = this.getEasingFunction(this.effectiveOptions().animationEasing);\n\n // Create a container for all bars\n const barsContainer = this.chart.append('g').attr('class', 'ax-bar-chart-bars-container');\n\n // Create groups for each bar to handle transformations\n const barGroups = barsContainer\n .selectAll('.ax-bar-chart-bar-group')\n .data(data)\n .enter()\n .append('g')\n .style('cursor', 'pointer')\n .attr('class', 'ax-bar-chart-bar-group');\n\n // Add bars inside groups\n const bars = barGroups\n .append('rect')\n .attr('class', 'ax-bar-chart-bar')\n .attr('x', (d: AXBarChartData) => this.xScale(d.label))\n .attr('width', this.xScale.bandwidth())\n .attr('y', this.height) // Start from bottom for animation\n .attr('height', 0) // Start with height 0 for animation\n .attr('rx', radius) // Rounded corners\n .attr('ry', radius) // Rounded corners\n .attr('fill', (d: AXBarChartData, i: number) => d.color || getChartColor(i, this.chartColors));\n\n // Add data labels if they're enabled\n if (this.effectiveOptions().showDataLabels !== false) {\n barGroups\n .append('text')\n .attr('class', 'ax-bar-chart-data-label')\n .attr('text-anchor', 'middle')\n .attr('x', (d: AXBarChartData) => this.xScale(d.label) + this.xScale.bandwidth() / 2)\n .attr('y', this.height) // Start from bottom for animation\n .style('font-size', 'clamp(8px, 2vmin, 12px)')\n .style('font-weight', '500')\n .style('fill', 'rgb(var(--ax-comp-bar-chart-data-labels-color))')\n .style('opacity', 0) // Start invisible for animation\n .text((d: AXBarChartData) => d.value);\n\n // Animate data labels\n barGroups\n .selectAll('.ax-bar-chart-data-label')\n .transition()\n .duration(animationDuration)\n .delay((d: AXBarChartData, i: number) => i * 50 + 100) // Slightly delayed after bar animation\n .attr('y', (d: AXBarChartData) => this.yScale(d.value) - 8) // Position above bar\n .style('opacity', 1)\n .ease(animationEasing);\n }\n\n // Set up event handlers on each group\n barGroups\n .on('mouseenter', (event: MouseEvent, d: AXBarChartData) => {\n // Only apply hover effects if initial animation is complete\n if (!this._initialAnimationComplete()) return;\n\n const barEl = this.d3.select(event.currentTarget).select('rect');\n\n // Standard hover effect - darken the bar slightly and add a subtle shadow\n barEl.transition().duration(150).style('filter', 'brightness(0.7) drop-shadow(0 0 2px rgba(0,0,0,0.1))');\n\n this.handleBarHover(event, d);\n })\n .on('mousemove', (event: MouseEvent) => {\n // Only update tooltip if initial animation is complete\n if (this._initialAnimationComplete()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', (event: MouseEvent, d: AXBarChartData) => {\n // Only apply hover effects if initial animation is complete\n if (!this._initialAnimationComplete()) return;\n\n const barEl = this.d3.select(event.currentTarget).select('rect');\n\n // Remove hover effect\n barEl.transition().duration(150).style('filter', null);\n\n this._tooltipVisible.set(false);\n })\n .on('click', (event: MouseEvent, d: AXBarChartData) => {\n // Only trigger click events if initial animation is complete\n if (this._initialAnimationComplete()) {\n this.handleBarClick(event, d);\n }\n });\n\n // Add animation\n bars\n .transition()\n .duration(animationDuration)\n .delay((d: AXBarChartData, i: number) => i * 50) // Stagger each bar animation\n .attr('y', (d: AXBarChartData) => this.yScale(d.value))\n .attr('height', (d: AXBarChartData) => this.height - this.yScale(d.value))\n .ease(animationEasing) // Use the configured easing function\n .end() // Wait for all animations to complete\n .then(() => {\n // Mark animation as complete to enable hover effects\n this._initialAnimationComplete.set(true);\n });\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 * Handles bar hover event and shows tooltip\n */\n private handleBarHover(event: MouseEvent, datum: AXBarChartData): void {\n if (this.effectiveOptions().showTooltip !== false) {\n const index = this.data().findIndex((item) => item.id === datum.id);\n const color = datum.color || getChartColor(index, this.chartColors);\n\n // Calculate percentage of total\n const total = this.data().reduce((sum, item) => sum + item.value, 0);\n const percentage = total > 0 ? ((datum.value / total) * 100).toFixed(1) : '0';\n\n this._tooltipData.set({\n title: datum.tooltipLabel || datum.label,\n value: datum.value.toString(),\n percentage: `${percentage}%`,\n color: color,\n });\n\n this.updateTooltipPosition(event);\n this._tooltipVisible.set(true);\n }\n }\n\n /**\n * Updates tooltip position based on mouse coordinates\n */\n private updateTooltipPosition(event: MouseEvent): void {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.chartContainerEl().nativeElement.querySelector('.chart-tooltip');\n\n if (!tooltipEl) {\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n this._tooltipPosition.set({ x, y });\n return;\n }\n\n const tooltipRect = tooltipEl.getBoundingClientRect();\n let x = event.clientX - container.left;\n const y = event.clientY - container.top;\n\n // Adjust position if near the right edge\n if (x + tooltipRect.width + 10 > container.width) {\n x = x - tooltipRect.width - 10;\n } else {\n x = x + 10;\n }\n\n this._tooltipPosition.set({ x, y });\n }\n\n /**\n * Handles bar click event\n */\n private handleBarClick(event: MouseEvent, datum: AXBarChartData): void {\n this.barClick.emit({ item: datum, event: { nativeEvent: event, sender: this } });\n }\n\n /**\n * Shows a message when no data is available\n */\n private showNoDataMessage(containerElement: HTMLElement): void {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-bar-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-bar-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-bar-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-chart-column fa-2x\"></i>');\n\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-bar-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('No data available');\n\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-bar-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Please provide data to display the chart');\n }\n}\n","<div class=\"ax-bar-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"true\"\n ></ax-chart-tooltip>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { AX_CHART_COLOR_PALETTE, getChartColor } from '@acorex/charts';
1
2
  import { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';
2
3
  import { CommonModule } from '@angular/common';
3
4
  import * as i0 from '@angular/core';
@@ -29,26 +30,6 @@ function donutChartConfig(config = {}) {
29
30
  return result;
30
31
  }
31
32
 
32
- const AXDonutChartColors = {
33
- // Modern color palette suitable for data visualization
34
- defaultColors: [
35
- '#4361ee', // Blue
36
- '#3a0ca3', // Purple
37
- '#7209b7', // Violet
38
- '#f72585', // Pink
39
- '#4cc9f0', // Light Blue
40
- '#4895ef', // Sky Blue
41
- '#560bad', // Deep Purple
42
- '#f15bb5', // Light Pink
43
- '#00bbf9', // Cyan
44
- '#00f5d4', // Teal
45
- ],
46
- // Get a color from the palette by index with wraparound
47
- getColor: (index, customPalette) => {
48
- const palette = customPalette || AXDonutChartColors.defaultColors;
49
- return palette[index % palette.length];
50
- },
51
- };
52
33
  /**
53
34
  * Donut Chart Component
54
35
  * Displays data in a circular donut chart with interactive segments
@@ -94,6 +75,8 @@ class AXDonutChartComponent {
94
75
  tooltipData = this._tooltipData.asReadonly();
95
76
  // Inject configuration
96
77
  configToken = inject(AX_DONUT_CHART_CONFIG);
78
+ // Inject the chart colors
79
+ chartColors = inject(AX_CHART_COLOR_PALETTE);
97
80
  // Computed configuration options
98
81
  effectiveOptions = computed(() => {
99
82
  return {
@@ -107,7 +90,7 @@ class AXDonutChartComponent {
107
90
  });
108
91
  // Color accessor method
109
92
  getColor(index) {
110
- return AXDonutChartColors.getColor(index);
93
+ return getChartColor(index, this.chartColors);
111
94
  }
112
95
  // Segment visibility check
113
96
  isSegmentHidden(id) {
@@ -422,10 +405,10 @@ class AXDonutChartComponent {
422
405
  const minFontSize = segmentPercentage < 5
423
406
  ? 0 // Hide very small segments
424
407
  : segmentPercentage < 10
425
- ? 8 // Smaller font for small segments
408
+ ? 7 // Smaller font for small segments
426
409
  : segmentPercentage < 15
427
- ? 9 // Medium font for medium segments
428
- : 10; // Regular font for large segments
410
+ ? 8 // Medium font for medium segments
411
+ : 9; // Regular font for large segments
429
412
  // Adjust font size based on chart size
430
413
  return Math.min(Math.max(minFontSize, (angleSize * radius) / 10), 12);
431
414
  };
@@ -505,7 +488,7 @@ class AXDonutChartComponent {
505
488
  handleSliceHover(event, datum) {
506
489
  if (this.effectiveOptions().showTooltip !== false) {
507
490
  const index = this.data().findIndex((item) => item.id === datum.id);
508
- const color = datum.color || AXDonutChartColors.getColor(index);
491
+ const color = datum.color || getChartColor(index, this.chartColors);
509
492
  // Calculate percentage of total
510
493
  const total = this.data().reduce((sum, item) => sum + item.value, 0);
511
494
  const percentage = total > 0 ? ((datum.value / total) * 100).toFixed(1) : '0';
@@ -651,16 +634,16 @@ class AXDonutChartComponent {
651
634
  return `Donut chart with ${data.length} segments. Total value: ${total}. ${segmentDescriptions}`;
652
635
  }
653
636
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: AXDonutChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
654
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.11", type: AXDonutChartComponent, isStandalone: true, selector: "ax-donut-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { segmentClick: "segmentClick", segmentHover: "segmentHover" }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ax-donut-chart\" #chartContainer role=\"img\" [attr.aria-label]=\"getAccessibilityLabel()\" tabindex=\"0\">\n <!-- Tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"true\"\n ></ax-chart-tooltip>\n</div>\n", styles: ["ax-donut-chart{display:block;width:100%;height:100%;--ax-comp-donut-chart-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-donut-chart-data-labels-color: var(--ax-sys-color-light);--ax-comp-donut-chart-value-color: var(--ax-sys-color-on-lightest-surface)}ax-donut-chart .ax-donut-chart{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;border-radius:.5rem;overflow:hidden;color:rgb(var(--ax-comp-donut-chart-data-labels-color));background-color:rgb(var(--ax-comp-donut-chart-bg-color))}ax-donut-chart .ax-donut-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-donut-chart .ax-donut-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-donut-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-help{font-size:.8rem;opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
637
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.11", type: AXDonutChartComponent, isStandalone: true, selector: "ax-donut-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { segmentClick: "segmentClick", segmentHover: "segmentHover" }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ax-donut-chart\" #chartContainer role=\"img\" [attr.aria-label]=\"getAccessibilityLabel()\" tabindex=\"0\">\n <!-- Tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"true\"\n ></ax-chart-tooltip>\n</div>\n", styles: ["ax-donut-chart{display:block;width:100%;height:100%;--ax-comp-donut-chart-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-donut-chart-data-labels-color: var(--ax-sys-color-dark);--ax-comp-donut-chart-value-color: var(--ax-sys-color-on-lightest-surface)}ax-donut-chart .ax-donut-chart{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;border-radius:.5rem;overflow:hidden;color:rgb(var(--ax-comp-donut-chart-data-labels-color));background-color:rgb(var(--ax-comp-donut-chart-bg-color))}ax-donut-chart .ax-donut-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-donut-chart .ax-donut-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-donut-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-help{font-size:.8rem;opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
655
638
  }
656
639
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: AXDonutChartComponent, decorators: [{
657
640
  type: Component,
658
- args: [{ selector: 'ax-donut-chart', encapsulation: ViewEncapsulation.None, imports: [CommonModule, AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-donut-chart\" #chartContainer role=\"img\" [attr.aria-label]=\"getAccessibilityLabel()\" tabindex=\"0\">\n <!-- Tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"true\"\n ></ax-chart-tooltip>\n</div>\n", styles: ["ax-donut-chart{display:block;width:100%;height:100%;--ax-comp-donut-chart-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-donut-chart-data-labels-color: var(--ax-sys-color-light);--ax-comp-donut-chart-value-color: var(--ax-sys-color-on-lightest-surface)}ax-donut-chart .ax-donut-chart{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;border-radius:.5rem;overflow:hidden;color:rgb(var(--ax-comp-donut-chart-data-labels-color));background-color:rgb(var(--ax-comp-donut-chart-bg-color))}ax-donut-chart .ax-donut-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-donut-chart .ax-donut-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-donut-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-help{font-size:.8rem;opacity:.6}\n"] }]
641
+ args: [{ selector: 'ax-donut-chart', encapsulation: ViewEncapsulation.None, imports: [CommonModule, AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-donut-chart\" #chartContainer role=\"img\" [attr.aria-label]=\"getAccessibilityLabel()\" tabindex=\"0\">\n <!-- Tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"true\"\n ></ax-chart-tooltip>\n</div>\n", styles: ["ax-donut-chart{display:block;width:100%;height:100%;--ax-comp-donut-chart-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-donut-chart-data-labels-color: var(--ax-sys-color-dark);--ax-comp-donut-chart-value-color: var(--ax-sys-color-on-lightest-surface)}ax-donut-chart .ax-donut-chart{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;border-radius:.5rem;overflow:hidden;color:rgb(var(--ax-comp-donut-chart-data-labels-color));background-color:rgb(var(--ax-comp-donut-chart-bg-color))}ax-donut-chart .ax-donut-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-donut-chart .ax-donut-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-donut-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-donut-chart .ax-donut-chart-no-data-message .ax-donut-chart-no-data-help{font-size:.8rem;opacity:.6}\n"] }]
659
642
  }], ctorParameters: () => [] });
660
643
 
661
644
  /**
662
645
  * Generated bundle index. Do not edit.
663
646
  */
664
647
 
665
- export { AXDonutChartColors, AXDonutChartComponent, AXDonutChartDefaultConfig, AX_DONUT_CHART_CONFIG, donutChartConfig };
648
+ export { AXDonutChartComponent, AXDonutChartDefaultConfig, AX_DONUT_CHART_CONFIG, donutChartConfig };
666
649
  //# sourceMappingURL=acorex-charts-donut-chart.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-charts-donut-chart.mjs","sources":["../../../../packages/charts/donut-chart/src/lib/donut-chart.config.ts","../../../../packages/charts/donut-chart/src/lib/donut-chart.component.ts","../../../../packages/charts/donut-chart/src/lib/donut-chart.component.html","../../../../packages/charts/donut-chart/src/acorex-charts-donut-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXDonutChartOption } from './donut-chart.type';\n\nexport const AXDonutChartDefaultConfig: AXDonutChartOption = {\n showTooltip: true,\n showDataLabels: true,\n donutWidth: 35,\n cornerRadius: 4,\n animationDuration: 800,\n animationEasing: 'cubic-out',\n};\n\nexport const AX_DONUT_CHART_CONFIG = new InjectionToken<AXDonutChartOption>('AX_DONUT_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.donutChart', AXDonutChartDefaultConfig);\n return AXDonutChartDefaultConfig;\n },\n});\n\nexport type PartialDonutChartConfig = Partial<AXDonutChartOption>;\n\nexport function donutChartConfig(config: PartialDonutChartConfig = {}): AXDonutChartOption {\n const result = {\n ...AXDonutChartDefaultConfig,\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 output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { AX_DONUT_CHART_CONFIG } from './donut-chart.config';\nimport { AXDonutChartData, AXDonutChartOption, AXDonutChartValue } from './donut-chart.type';\n\nexport const AXDonutChartColors = {\n // Modern color palette suitable for data visualization\n defaultColors: [\n '#4361ee', // Blue\n '#3a0ca3', // Purple\n '#7209b7', // Violet\n '#f72585', // Pink\n '#4cc9f0', // Light Blue\n '#4895ef', // Sky Blue\n '#560bad', // Deep Purple\n '#f15bb5', // Light Pink\n '#00bbf9', // Cyan\n '#00f5d4', // Teal\n ],\n\n // Get a color from the palette by index with wraparound\n getColor: (index: number, customPalette?: string[]): string => {\n const palette = customPalette || AXDonutChartColors.defaultColors;\n return palette[index % palette.length];\n },\n};\n\n/**\n * Donut Chart Component\n * Displays data in a circular donut chart with interactive segments\n */\n@Component({\n selector: 'ax-donut-chart',\n templateUrl: './donut-chart.component.html',\n styleUrls: ['./donut-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXChartTooltipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXDonutChartComponent implements OnDestroy {\n // Dependency Injection\n private cdr = inject(ChangeDetectorRef);\n\n // Inputs\n /** Chart data input */\n data = input<AXDonutChartValue>([]);\n\n /** Chart options input */\n options = input<AXDonutChartOption>({});\n\n // Outputs\n /** Emitted when a segment is clicked */\n segmentClick = output<AXDonutChartData>();\n\n /** Emitted when a segment has mouse hover\n * Can be used by external elements to highlight this segment\n */\n segmentHover = output<AXDonutChartData | null>();\n\n // Chart container reference\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // D3 reference - loaded asynchronously\n protected d3!: typeof import('d3');\n\n // Chart SVG reference\n private svg!: any;\n private pieData: any[] = [];\n\n // State management\n private hiddenSegments = new Set<string>();\n private _initialized = signal(false);\n private _rendered = signal(false);\n\n // Tooltip state\n private _tooltipVisible = signal(false);\n private _tooltipPosition = signal({ x: 0, y: 0 });\n private _tooltipData = signal<AXChartTooltipData>({\n title: '',\n value: 0,\n percentage: '0%',\n color: '',\n });\n\n // Public computed properties 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_DONUT_CHART_CONFIG);\n\n // Computed configuration options\n protected effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n // Data accessor for handling different incoming data formats\n protected chartDataArray = computed((): AXDonutChartData[] => {\n return this.data() || [];\n });\n\n // Color accessor method\n protected getColor(index: number): string {\n return AXDonutChartColors.getColor(index);\n }\n\n // Segment visibility check\n protected isSegmentHidden(id: string): boolean {\n return this.hiddenSegments.has(id);\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 this.data();\n this.effectiveOptions();\n\n // Only update if already rendered\n if (this._rendered()) {\n this.updateChart();\n }\n });\n }\n\n /**\n * Highlights a specific segment by ID\n * @param id The segment ID to highlight, or null to clear highlight\n */\n highlightSegment(id: string | null): void {\n if (!this.svg) return;\n\n // Reset all segments first\n this.svg\n .selectAll('path')\n .classed('ax-donut-chart-highlighted', false)\n .classed('ax-donut-chart-dimmed', false)\n .attr('transform', 'scale(1)');\n\n if (id !== null) {\n // Highlight the target segment\n this.svg\n .selectAll('path')\n .filter((d: any) => d?.data?.id === id)\n .classed('ax-donut-chart-highlighted', true)\n .attr('transform', 'scale(1.02)');\n\n // Dim other segments\n this.svg\n .selectAll('path')\n .filter((d: any) => d?.data?.id !== id)\n .classed('ax-donut-chart-dimmed', true);\n }\n\n this.cdr.detectChanges();\n }\n\n /**\n * Toggles visibility of a segment by ID\n * @param id Segment ID to toggle\n * @returns New visibility state (true = visible, false = hidden)\n */\n toggleSegment(id: string): boolean {\n this.toggleSegmentVisibility(id);\n return !this.isSegmentHidden(id);\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 protected onSegmentClick(item: AXDonutChartData): void {\n // this.toggleSegmentVisibility(item.id);\n this.segmentClick.emit(item);\n }\n\n /**\n * Creates the donut chart\n */\n protected createChart(): void {\n if (!this.d3 || !this.chartContainerEl()?.nativeElement) return;\n\n try {\n const containerElement = this.chartContainerEl().nativeElement;\n\n this.clearChart(containerElement);\n\n const data = this.chartDataArray();\n\n if (!data || data.length === 0) {\n this.showNoDataMessage();\n return;\n }\n\n // Filter out hidden segments\n const visibleData = data.filter((item) => !this.hiddenSegments.has(item.id));\n\n // If all segments are hidden, show message\n if (visibleData.length === 0) {\n this.showAllSegmentsHiddenMessage();\n return;\n }\n\n const options = this.effectiveOptions();\n const { width, height } = this.setupDimensions(containerElement, options);\n this.renderDonutChart(containerElement, width, height, visibleData);\n } catch (error) {\n console.error('Error creating donut chart:', error);\n this.handleChartError();\n }\n }\n\n /**\n * Updates the chart with new data\n */\n protected updateChart(): void {\n this.createChart(); // Recreate the chart with updated data\n }\n\n /**\n * Clears the chart container\n */\n private clearChart(container: HTMLElement): void {\n this.d3.select(container).selectAll('svg').remove();\n this._tooltipVisible.set(false);\n }\n\n /**\n * Shows a message when no data is available\n */\n private showNoDataMessage(): void {\n if (!this.chartContainerEl()?.nativeElement) return;\n\n // Clear existing contents\n const container = this.chartContainerEl().nativeElement;\n this.d3.select(container).selectAll('*').remove();\n\n const noDataMessage = this.d3\n .select(container)\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-message ax-bg-lightest ax-text-on-lightest')\n .style('left', '50%')\n .style('top', '50%');\n\n noDataMessage\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-icon')\n .html('<i class=\"fa-light fa-chart-pie fa-2x\"></i>');\n\n noDataMessage.append('div').attr('class', 'ax-donut-chart-no-data-text').text('No data available');\n\n noDataMessage\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-help')\n .text('Please provide data to display the chart');\n }\n\n /**\n * Shows a message when all segments are hidden\n */\n private showAllSegmentsHiddenMessage(): void {\n if (!this.chartContainerEl()?.nativeElement) return;\n\n // Clear existing contents\n const container = this.chartContainerEl().nativeElement;\n this.d3.select(container).selectAll('svg').remove();\n\n const noDataMessage = this.d3\n .select(container)\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-message ax-bg-lightest ax-text-on-lightest')\n .style('left', '50%')\n .style('top', '50%');\n\n noDataMessage\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-icon')\n .html('<i class=\"fa-light fa-eye-slash fa-2x\"></i>');\n\n noDataMessage.append('div').attr('class', 'ax-donut-chart-no-data-text').text('All segments are hidden');\n\n noDataMessage\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-help')\n .text('Please toggle visibility of at least one segment');\n }\n\n /**\n * Setups chart dimensions based on container and options\n */\n private setupDimensions(container: HTMLElement, options: AXDonutChartOption): { width: number; height: number } {\n // Get container dimensions or use defaults\n const containerWidth = container.clientWidth || 400;\n const containerHeight = container.clientHeight || 400;\n\n // Ensure minimum dimensions for the chart\n const minDim = 200;\n const width = Math.max(options?.width || containerWidth, minDim);\n const height = Math.max(options?.height || containerHeight, minDim);\n\n return { width, height };\n }\n\n /**\n * Renders the donut chart with visible data\n */\n private renderDonutChart(\n container: HTMLElement,\n width: number,\n height: number,\n visibleData: AXDonutChartData[],\n ): void {\n const total = visibleData.reduce((sum, item) => sum + item.value, 0);\n\n // Create SVG container with filters\n const svg = this.createSvgWithFilters(container, width, height);\n\n // Create main chart group\n this.svg = svg.append('g').attr('transform', `translate(${width / 2}, ${height / 2})`);\n\n // Create donut segments\n this.createDonutSegments(width, height, visibleData, total);\n\n // Add total in center\n this.addCenterDisplay(total);\n }\n\n /**\n * Create SVG element with filter definitions for shadows\n */\n private createSvgWithFilters(container: HTMLElement, width: number, height: number): any {\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\n // Add drop shadow filter\n const defs = svg.append('defs');\n const filter = defs.append('filter').attr('id', 'ax-donut-chart-segment-shadow').attr('height', '130%');\n\n filter.append('feGaussianBlur').attr('in', 'SourceAlpha').attr('stdDeviation', 2).attr('result', 'blur');\n filter.append('feOffset').attr('in', 'blur').attr('dx', 1).attr('dy', 1).attr('result', 'offsetBlur');\n\n const feComponentTransfer = filter\n .append('feComponentTransfer')\n .attr('in', 'offsetBlur')\n .attr('result', 'offsetBlur');\n\n feComponentTransfer.append('feFuncA').attr('type', 'linear').attr('slope', 0.3);\n\n const feMerge = filter.append('feMerge');\n feMerge.append('feMergeNode').attr('in', 'offsetBlur');\n feMerge.append('feMergeNode').attr('in', 'SourceGraphic');\n\n return svg;\n }\n\n /**\n * Create and render the donut segments with animations\n */\n private createDonutSegments(chartWidth: number, chartHeight: number, data: AXDonutChartData[], total: number): void {\n // Create pie layout\n const pie = this.d3\n .pie<AXDonutChartData>()\n .value((d) => d.value)\n .sort(null)\n .padAngle(0.02);\n\n // Calculate the radius of the donut chart\n const radius = (Math.min(chartWidth, chartHeight) / 2) * 0.85;\n\n // Calculate inner radius based on donutWidth percentage\n const donutWidthPercent = this.effectiveOptions().donutWidth / 100;\n const innerRadius = radius * (1 - donutWidthPercent);\n\n // Create arc generator with the configured radius and corner radius\n const arc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(radius * 0.95)\n .cornerRadius(this.effectiveOptions().cornerRadius);\n\n // Create hover arc for animation\n const hoverArc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(radius + 10)\n .cornerRadius(this.effectiveOptions().cornerRadius);\n\n // Create label arc generator for placing labels (middle of the donut ring)\n const labelArc = this.d3\n .arc()\n .innerRadius(innerRadius + (radius * 0.95 - innerRadius) / 2)\n .outerRadius(innerRadius + (radius * 0.95 - innerRadius) / 2);\n\n // Get animation options\n const animationDuration = this.effectiveOptions().animationDuration;\n const animationEasing = this.getEasingFunction(this.effectiveOptions().animationEasing);\n\n // Generate pie data\n this.pieData = pie(data);\n\n // Add segments with animation\n const segments = this.svg\n .selectAll('path')\n .data(this.pieData)\n .enter()\n .append('path')\n .attr('class', 'ax-donut-chart-segment')\n .attr('fill', (d: any, i: number) => this.getColor(i))\n .style('opacity', 0)\n .style('cursor', 'pointer') // Add cursor pointer to segments\n .on('mouseenter', (event: MouseEvent, d: any) => {\n if (!this.effectiveOptions().showTooltip) return;\n this.handleSliceHover(event, d.data);\n })\n .on('mouseleave', (event: MouseEvent, d: any) => {\n this.handleSegmentLeave(event, d, arc);\n })\n .on('mousemove', (event: MouseEvent) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('click', (event: MouseEvent, d: any) => {\n this.onSegmentClick(d.data);\n });\n\n // Animate segments\n segments\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .delay((d: any, i: number) => i * 50)\n .style('opacity', 1)\n .attrTween('d', (d: any) => {\n const interpolate = this.d3.interpolate({ startAngle: d.startAngle, endAngle: d.startAngle }, d);\n return (t: number) => arc(interpolate(t)) as string;\n });\n\n // Add data labels if enabled\n if (this.effectiveOptions().showDataLabels) {\n // Calculate optimal font size based on segment size and chart dimensions\n const calculateFontSize = (d: any) => {\n // Calculate angle size in radians for the segment\n const angleSize = d.endAngle - d.startAngle;\n // Calculate the segment's percentage of the whole\n const segmentPercentage = (d.data.value / total) * 100;\n\n // Base minimum font size on segment size\n const minFontSize =\n segmentPercentage < 5\n ? 0 // Hide very small segments\n : segmentPercentage < 10\n ? 8 // Smaller font for small segments\n : segmentPercentage < 15\n ? 9 // Medium font for medium segments\n : 10; // Regular font for large segments\n\n // Adjust font size based on chart size\n return Math.min(Math.max(minFontSize, (angleSize * radius) / 10), 12);\n };\n\n // Format percentage value with appropriate precision\n const formatPercentage = (value: number) => {\n if (value < 1) return '<1%';\n if (value < 10) return `${value.toFixed(1)}%`;\n return `${Math.round(value)}%`;\n };\n\n const labels = this.svg\n .selectAll('.ax-donut-chart-data-label')\n .data(this.pieData)\n .enter()\n .append('text')\n .attr('class', 'ax-donut-chart-data-label')\n .style('opacity', 0)\n .style('fill', 'rgb(var(--ax-comp-donut-chart-data-labels-color))')\n .attr('transform', (d) => {\n // Calculate the centroid position for the label\n const centroid = labelArc.centroid(d);\n return `translate(${centroid[0]}, ${centroid[1]})`;\n })\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', (d) => `${calculateFontSize(d)}px`)\n .style('font-weight', (d) => ((d.data.value / total) * 100 >= 15 ? '600' : '500'))\n .text((d) => {\n // Calculate percentage for labels\n const percentage = (d.data.value / total) * 100;\n // Only show if segment is large enough to display text\n if (percentage < 1) return '';\n const label = d.data.label || '';\n const percentageText = formatPercentage(percentage);\n return label ? `${label} (${percentageText})` : percentageText;\n });\n\n // Animate labels\n labels\n .transition()\n .duration(animationDuration)\n .delay((d: any, i: number) => i * 50 + 200)\n .style('opacity', 1);\n }\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 * Handle hover effects on a segment\n */\n private handleSliceHover(event: MouseEvent, datum: AXDonutChartData): void {\n if (this.effectiveOptions().showTooltip !== false) {\n const index = this.data().findIndex((item) => item.id === datum.id);\n const color = datum.color || AXDonutChartColors.getColor(index);\n\n // Calculate percentage of total\n const total = this.data().reduce((sum, item) => sum + item.value, 0);\n const percentage = total > 0 ? ((datum.value / total) * 100).toFixed(1) : '0';\n\n this._tooltipData.set({\n title: datum.tooltipLabel || datum.label,\n value: datum.value.toString(),\n percentage: `${percentage}%`,\n color: color,\n });\n\n this.updateTooltipPosition(event);\n this._tooltipVisible.set(true);\n }\n }\n\n /**\n * Handles mouse leave from segments\n */\n private handleSegmentLeave(event: MouseEvent, d: any, normalArc: any): void {\n // Hide tooltip\n this._tooltipVisible.set(false);\n this.cdr.detectChanges();\n\n // Emit null to indicate no segment is hovered\n this.segmentHover.emit(null);\n\n // Remove hover effect\n this.d3\n .select(event.currentTarget as HTMLElement)\n .transition()\n .duration(200)\n .attr('d', (d) => normalArc(d));\n }\n\n /**\n * Updates tooltip position\n * Ensures the tooltip is visible by adjusting position when near edges\n */\n private updateTooltipPosition(event: MouseEvent): void {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.chartContainerEl().nativeElement.querySelector('.chart-tooltip');\n\n if (!tooltipEl) {\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n this._tooltipPosition.set({ x, y });\n return;\n }\n\n const tooltipRect = tooltipEl.getBoundingClientRect();\n const cursorX = event.clientX - container.left;\n const cursorY = event.clientY - container.top;\n const gap = 20; // Gap between cursor and tooltip\n\n // Position tooltip to the right by default\n let x = cursorX + gap / 3;\n\n // If tooltip would go off the right edge, position it to the left\n if (x + tooltipRect.width > container.width) {\n x = cursorX - tooltipRect.width - gap;\n }\n\n // Keep tooltip within container bounds\n x = Math.max(gap, Math.min(x, container.width - tooltipRect.width - gap));\n const y = Math.max(gap, Math.min(cursorY, container.height - tooltipRect.height - gap));\n\n this._tooltipPosition.set({ x, y });\n }\n\n /**\n * Toggles the visibility of a segment\n */\n private toggleSegmentVisibility(id: string): void {\n if (this.hiddenSegments.has(id)) {\n this.hiddenSegments.delete(id);\n } else {\n this.hiddenSegments.add(id);\n }\n\n // Hide tooltip when toggling segments\n this._tooltipVisible.set(false);\n\n this.updateChart();\n }\n\n /**\n * Adds center display with total value\n */\n private addCenterDisplay(total: number): void {\n if (!this.svg) return;\n\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 total display\n const totalDisplay = this.svg\n .append('g')\n .attr('class', 'ax-donut-chart-total-display')\n .attr('text-anchor', 'middle');\n\n // Add total value\n totalDisplay\n .append('text')\n .attr('class', 'ax-donut-chart-total-value')\n .style('font-size', `${baseFontSize}rem`)\n .style('font-weight', '600')\n .style('fill', 'rgb(var(--ax-comp-donut-chart-value-color))')\n .text(total.toLocaleString());\n\n // Add label\n totalDisplay\n .append('text')\n .attr('class', 'ax-donut-chart-total-label')\n .attr('dy', '1.4em')\n .style('font-size', `${subTextFontSize}rem`)\n .style('fill', 'rgb(var(--ax-comp-donut-chart-value-color))')\n .style('opacity', '0.8')\n .text('Total');\n }\n\n /**\n * Handles chart rendering errors\n */\n private handleChartError(): void {\n const container = this.chartContainerEl()?.nativeElement;\n if (container) {\n this.showNoDataMessage();\n }\n }\n\n /**\n * Cleans up chart resources\n */\n private cleanupChart(): void {\n if (this.svg) {\n this.d3.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();\n this.svg = null;\n this.pieData = [];\n }\n this.hiddenSegments.clear();\n this._tooltipVisible.set(false);\n }\n\n /**\n * Gets an accessibility label describing the donut chart for screen readers\n */\n protected getAccessibilityLabel(): string {\n const data = this.chartDataArray();\n\n if (!data || data.length === 0) {\n return 'Empty donut chart. No data available.';\n }\n\n // Calculate total\n const total = data.reduce((sum, item) => sum + item.value, 0);\n\n // Generate a description of the chart with percentages\n const segmentDescriptions = data\n .map((segment) => {\n const percentage = ((segment.value / total) * 100).toFixed(1);\n return `${segment.label}: ${segment.value} (${percentage}%)`;\n })\n .join('; ');\n\n return `Donut chart with ${data.length} segments. Total value: ${total}. ${segmentDescriptions}`;\n }\n}\n","<div class=\"ax-donut-chart\" #chartContainer role=\"img\" [attr.aria-label]=\"getAccessibilityLabel()\" tabindex=\"0\">\n <!-- Tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"true\"\n ></ax-chart-tooltip>\n</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-donut-chart.mjs","sources":["../../../../packages/charts/donut-chart/src/lib/donut-chart.config.ts","../../../../packages/charts/donut-chart/src/lib/donut-chart.component.ts","../../../../packages/charts/donut-chart/src/lib/donut-chart.component.html","../../../../packages/charts/donut-chart/src/acorex-charts-donut-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXDonutChartOption } from './donut-chart.type';\n\nexport const AXDonutChartDefaultConfig: AXDonutChartOption = {\n showTooltip: true,\n showDataLabels: true,\n donutWidth: 35,\n cornerRadius: 4,\n animationDuration: 800,\n animationEasing: 'cubic-out',\n};\n\nexport const AX_DONUT_CHART_CONFIG = new InjectionToken<AXDonutChartOption>('AX_DONUT_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.donutChart', AXDonutChartDefaultConfig);\n return AXDonutChartDefaultConfig;\n },\n});\n\nexport type PartialDonutChartConfig = Partial<AXDonutChartOption>;\n\nexport function donutChartConfig(config: PartialDonutChartConfig = {}): AXDonutChartOption {\n const result = {\n ...AXDonutChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { AX_CHART_COLOR_PALETTE, getChartColor } from '@acorex/charts';\nimport { 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 output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { AX_DONUT_CHART_CONFIG } from './donut-chart.config';\nimport { AXDonutChartData, AXDonutChartOption, AXDonutChartValue } from './donut-chart.type';\n\n/**\n * Donut Chart Component\n * Displays data in a circular donut chart with interactive segments\n */\n@Component({\n selector: 'ax-donut-chart',\n templateUrl: './donut-chart.component.html',\n styleUrls: ['./donut-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXChartTooltipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXDonutChartComponent implements OnDestroy {\n // Dependency Injection\n private cdr = inject(ChangeDetectorRef);\n\n // Inputs\n /** Chart data input */\n data = input<AXDonutChartValue>([]);\n\n /** Chart options input */\n options = input<AXDonutChartOption>({});\n\n // Outputs\n /** Emitted when a segment is clicked */\n segmentClick = output<AXDonutChartData>();\n\n /** Emitted when a segment has mouse hover\n * Can be used by external elements to highlight this segment\n */\n segmentHover = output<AXDonutChartData | null>();\n\n // Chart container reference\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // D3 reference - loaded asynchronously\n protected d3!: typeof import('d3');\n\n // Chart SVG reference\n private svg!: any;\n private pieData: any[] = [];\n\n // State management\n private hiddenSegments = new Set<string>();\n private _initialized = signal(false);\n private _rendered = signal(false);\n\n // Tooltip state\n private _tooltipVisible = signal(false);\n private _tooltipPosition = signal({ x: 0, y: 0 });\n private _tooltipData = signal<AXChartTooltipData>({\n title: '',\n value: 0,\n percentage: '0%',\n color: '',\n });\n\n // Public computed properties 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_DONUT_CHART_CONFIG);\n\n // Inject the chart colors\n private chartColors = inject(AX_CHART_COLOR_PALETTE);\n\n // Computed configuration options\n protected effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n // Data accessor for handling different incoming data formats\n protected chartDataArray = computed((): AXDonutChartData[] => {\n return this.data() || [];\n });\n\n // Color accessor method\n protected getColor(index: number): string {\n return getChartColor(index, this.chartColors);\n }\n\n // Segment visibility check\n protected isSegmentHidden(id: string): boolean {\n return this.hiddenSegments.has(id);\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 this.data();\n this.effectiveOptions();\n\n // Only update if already rendered\n if (this._rendered()) {\n this.updateChart();\n }\n });\n }\n\n /**\n * Highlights a specific segment by ID\n * @param id The segment ID to highlight, or null to clear highlight\n */\n highlightSegment(id: string | null): void {\n if (!this.svg) return;\n\n // Reset all segments first\n this.svg\n .selectAll('path')\n .classed('ax-donut-chart-highlighted', false)\n .classed('ax-donut-chart-dimmed', false)\n .attr('transform', 'scale(1)');\n\n if (id !== null) {\n // Highlight the target segment\n this.svg\n .selectAll('path')\n .filter((d: any) => d?.data?.id === id)\n .classed('ax-donut-chart-highlighted', true)\n .attr('transform', 'scale(1.02)');\n\n // Dim other segments\n this.svg\n .selectAll('path')\n .filter((d: any) => d?.data?.id !== id)\n .classed('ax-donut-chart-dimmed', true);\n }\n\n this.cdr.detectChanges();\n }\n\n /**\n * Toggles visibility of a segment by ID\n * @param id Segment ID to toggle\n * @returns New visibility state (true = visible, false = hidden)\n */\n toggleSegment(id: string): boolean {\n this.toggleSegmentVisibility(id);\n return !this.isSegmentHidden(id);\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 protected onSegmentClick(item: AXDonutChartData): void {\n // this.toggleSegmentVisibility(item.id);\n this.segmentClick.emit(item);\n }\n\n /**\n * Creates the donut chart\n */\n protected createChart(): void {\n if (!this.d3 || !this.chartContainerEl()?.nativeElement) return;\n\n try {\n const containerElement = this.chartContainerEl().nativeElement;\n\n this.clearChart(containerElement);\n\n const data = this.chartDataArray();\n\n if (!data || data.length === 0) {\n this.showNoDataMessage();\n return;\n }\n\n // Filter out hidden segments\n const visibleData = data.filter((item) => !this.hiddenSegments.has(item.id));\n\n // If all segments are hidden, show message\n if (visibleData.length === 0) {\n this.showAllSegmentsHiddenMessage();\n return;\n }\n\n const options = this.effectiveOptions();\n const { width, height } = this.setupDimensions(containerElement, options);\n this.renderDonutChart(containerElement, width, height, visibleData);\n } catch (error) {\n console.error('Error creating donut chart:', error);\n this.handleChartError();\n }\n }\n\n /**\n * Updates the chart with new data\n */\n protected updateChart(): void {\n this.createChart(); // Recreate the chart with updated data\n }\n\n /**\n * Clears the chart container\n */\n private clearChart(container: HTMLElement): void {\n this.d3.select(container).selectAll('svg').remove();\n this._tooltipVisible.set(false);\n }\n\n /**\n * Shows a message when no data is available\n */\n private showNoDataMessage(): void {\n if (!this.chartContainerEl()?.nativeElement) return;\n\n // Clear existing contents\n const container = this.chartContainerEl().nativeElement;\n this.d3.select(container).selectAll('*').remove();\n\n const noDataMessage = this.d3\n .select(container)\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-message ax-bg-lightest ax-text-on-lightest')\n .style('left', '50%')\n .style('top', '50%');\n\n noDataMessage\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-icon')\n .html('<i class=\"fa-light fa-chart-pie fa-2x\"></i>');\n\n noDataMessage.append('div').attr('class', 'ax-donut-chart-no-data-text').text('No data available');\n\n noDataMessage\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-help')\n .text('Please provide data to display the chart');\n }\n\n /**\n * Shows a message when all segments are hidden\n */\n private showAllSegmentsHiddenMessage(): void {\n if (!this.chartContainerEl()?.nativeElement) return;\n\n // Clear existing contents\n const container = this.chartContainerEl().nativeElement;\n this.d3.select(container).selectAll('svg').remove();\n\n const noDataMessage = this.d3\n .select(container)\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-message ax-bg-lightest ax-text-on-lightest')\n .style('left', '50%')\n .style('top', '50%');\n\n noDataMessage\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-icon')\n .html('<i class=\"fa-light fa-eye-slash fa-2x\"></i>');\n\n noDataMessage.append('div').attr('class', 'ax-donut-chart-no-data-text').text('All segments are hidden');\n\n noDataMessage\n .append('div')\n .attr('class', 'ax-donut-chart-no-data-help')\n .text('Please toggle visibility of at least one segment');\n }\n\n /**\n * Setups chart dimensions based on container and options\n */\n private setupDimensions(container: HTMLElement, options: AXDonutChartOption): { width: number; height: number } {\n // Get container dimensions or use defaults\n const containerWidth = container.clientWidth || 400;\n const containerHeight = container.clientHeight || 400;\n\n // Ensure minimum dimensions for the chart\n const minDim = 200;\n const width = Math.max(options?.width || containerWidth, minDim);\n const height = Math.max(options?.height || containerHeight, minDim);\n\n return { width, height };\n }\n\n /**\n * Renders the donut chart with visible data\n */\n private renderDonutChart(\n container: HTMLElement,\n width: number,\n height: number,\n visibleData: AXDonutChartData[],\n ): void {\n const total = visibleData.reduce((sum, item) => sum + item.value, 0);\n\n // Create SVG container with filters\n const svg = this.createSvgWithFilters(container, width, height);\n\n // Create main chart group\n this.svg = svg.append('g').attr('transform', `translate(${width / 2}, ${height / 2})`);\n\n // Create donut segments\n this.createDonutSegments(width, height, visibleData, total);\n\n // Add total in center\n this.addCenterDisplay(total);\n }\n\n /**\n * Create SVG element with filter definitions for shadows\n */\n private createSvgWithFilters(container: HTMLElement, width: number, height: number): any {\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\n // Add drop shadow filter\n const defs = svg.append('defs');\n const filter = defs.append('filter').attr('id', 'ax-donut-chart-segment-shadow').attr('height', '130%');\n\n filter.append('feGaussianBlur').attr('in', 'SourceAlpha').attr('stdDeviation', 2).attr('result', 'blur');\n filter.append('feOffset').attr('in', 'blur').attr('dx', 1).attr('dy', 1).attr('result', 'offsetBlur');\n\n const feComponentTransfer = filter\n .append('feComponentTransfer')\n .attr('in', 'offsetBlur')\n .attr('result', 'offsetBlur');\n\n feComponentTransfer.append('feFuncA').attr('type', 'linear').attr('slope', 0.3);\n\n const feMerge = filter.append('feMerge');\n feMerge.append('feMergeNode').attr('in', 'offsetBlur');\n feMerge.append('feMergeNode').attr('in', 'SourceGraphic');\n\n return svg;\n }\n\n /**\n * Create and render the donut segments with animations\n */\n private createDonutSegments(chartWidth: number, chartHeight: number, data: AXDonutChartData[], total: number): void {\n // Create pie layout\n const pie = this.d3\n .pie<AXDonutChartData>()\n .value((d) => d.value)\n .sort(null)\n .padAngle(0.02);\n\n // Calculate the radius of the donut chart\n const radius = (Math.min(chartWidth, chartHeight) / 2) * 0.85;\n\n // Calculate inner radius based on donutWidth percentage\n const donutWidthPercent = this.effectiveOptions().donutWidth / 100;\n const innerRadius = radius * (1 - donutWidthPercent);\n\n // Create arc generator with the configured radius and corner radius\n const arc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(radius * 0.95)\n .cornerRadius(this.effectiveOptions().cornerRadius);\n\n // Create hover arc for animation\n const hoverArc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(radius + 10)\n .cornerRadius(this.effectiveOptions().cornerRadius);\n\n // Create label arc generator for placing labels (middle of the donut ring)\n const labelArc = this.d3\n .arc()\n .innerRadius(innerRadius + (radius * 0.95 - innerRadius) / 2)\n .outerRadius(innerRadius + (radius * 0.95 - innerRadius) / 2);\n\n // Get animation options\n const animationDuration = this.effectiveOptions().animationDuration;\n const animationEasing = this.getEasingFunction(this.effectiveOptions().animationEasing);\n\n // Generate pie data\n this.pieData = pie(data);\n\n // Add segments with animation\n const segments = this.svg\n .selectAll('path')\n .data(this.pieData)\n .enter()\n .append('path')\n .attr('class', 'ax-donut-chart-segment')\n .attr('fill', (d: any, i: number) => this.getColor(i))\n .style('opacity', 0)\n .style('cursor', 'pointer') // Add cursor pointer to segments\n .on('mouseenter', (event: MouseEvent, d: any) => {\n if (!this.effectiveOptions().showTooltip) return;\n this.handleSliceHover(event, d.data);\n })\n .on('mouseleave', (event: MouseEvent, d: any) => {\n this.handleSegmentLeave(event, d, arc);\n })\n .on('mousemove', (event: MouseEvent) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('click', (event: MouseEvent, d: any) => {\n this.onSegmentClick(d.data);\n });\n\n // Animate segments\n segments\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .delay((d: any, i: number) => i * 50)\n .style('opacity', 1)\n .attrTween('d', (d: any) => {\n const interpolate = this.d3.interpolate({ startAngle: d.startAngle, endAngle: d.startAngle }, d);\n return (t: number) => arc(interpolate(t)) as string;\n });\n\n // Add data labels if enabled\n if (this.effectiveOptions().showDataLabels) {\n // Calculate optimal font size based on segment size and chart dimensions\n const calculateFontSize = (d: any) => {\n // Calculate angle size in radians for the segment\n const angleSize = d.endAngle - d.startAngle;\n // Calculate the segment's percentage of the whole\n const segmentPercentage = (d.data.value / total) * 100;\n\n // Base minimum font size on segment size\n const minFontSize =\n segmentPercentage < 5\n ? 0 // Hide very small segments\n : segmentPercentage < 10\n ? 7 // Smaller font for small segments\n : segmentPercentage < 15\n ? 8 // Medium font for medium segments\n : 9; // Regular font for large segments\n\n // Adjust font size based on chart size\n return Math.min(Math.max(minFontSize, (angleSize * radius) / 10), 12);\n };\n\n // Format percentage value with appropriate precision\n const formatPercentage = (value: number) => {\n if (value < 1) return '<1%';\n if (value < 10) return `${value.toFixed(1)}%`;\n return `${Math.round(value)}%`;\n };\n\n const labels = this.svg\n .selectAll('.ax-donut-chart-data-label')\n .data(this.pieData)\n .enter()\n .append('text')\n .attr('class', 'ax-donut-chart-data-label')\n .style('opacity', 0)\n .style('fill', 'rgb(var(--ax-comp-donut-chart-data-labels-color))')\n .attr('transform', (d) => {\n // Calculate the centroid position for the label\n const centroid = labelArc.centroid(d);\n return `translate(${centroid[0]}, ${centroid[1]})`;\n })\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', (d) => `${calculateFontSize(d)}px`)\n .style('font-weight', (d) => ((d.data.value / total) * 100 >= 15 ? '600' : '500'))\n .text((d) => {\n // Calculate percentage for labels\n const percentage = (d.data.value / total) * 100;\n // Only show if segment is large enough to display text\n if (percentage < 1) return '';\n const label = d.data.label || '';\n const percentageText = formatPercentage(percentage);\n return label ? `${label} (${percentageText})` : percentageText;\n });\n\n // Animate labels\n labels\n .transition()\n .duration(animationDuration)\n .delay((d: any, i: number) => i * 50 + 200)\n .style('opacity', 1);\n }\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 * Handle hover effects on a segment\n */\n private handleSliceHover(event: MouseEvent, datum: AXDonutChartData): void {\n if (this.effectiveOptions().showTooltip !== false) {\n const index = this.data().findIndex((item) => item.id === datum.id);\n const color = datum.color || getChartColor(index, this.chartColors);\n\n // Calculate percentage of total\n const total = this.data().reduce((sum, item) => sum + item.value, 0);\n const percentage = total > 0 ? ((datum.value / total) * 100).toFixed(1) : '0';\n\n this._tooltipData.set({\n title: datum.tooltipLabel || datum.label,\n value: datum.value.toString(),\n percentage: `${percentage}%`,\n color: color,\n });\n\n this.updateTooltipPosition(event);\n this._tooltipVisible.set(true);\n }\n }\n\n /**\n * Handles mouse leave from segments\n */\n private handleSegmentLeave(event: MouseEvent, d: any, normalArc: any): void {\n // Hide tooltip\n this._tooltipVisible.set(false);\n this.cdr.detectChanges();\n\n // Emit null to indicate no segment is hovered\n this.segmentHover.emit(null);\n\n // Remove hover effect\n this.d3\n .select(event.currentTarget as HTMLElement)\n .transition()\n .duration(200)\n .attr('d', (d) => normalArc(d));\n }\n\n /**\n * Updates tooltip position\n * Ensures the tooltip is visible by adjusting position when near edges\n */\n private updateTooltipPosition(event: MouseEvent): void {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.chartContainerEl().nativeElement.querySelector('.chart-tooltip');\n\n if (!tooltipEl) {\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n this._tooltipPosition.set({ x, y });\n return;\n }\n\n const tooltipRect = tooltipEl.getBoundingClientRect();\n const cursorX = event.clientX - container.left;\n const cursorY = event.clientY - container.top;\n const gap = 20; // Gap between cursor and tooltip\n\n // Position tooltip to the right by default\n let x = cursorX + gap / 3;\n\n // If tooltip would go off the right edge, position it to the left\n if (x + tooltipRect.width > container.width) {\n x = cursorX - tooltipRect.width - gap;\n }\n\n // Keep tooltip within container bounds\n x = Math.max(gap, Math.min(x, container.width - tooltipRect.width - gap));\n const y = Math.max(gap, Math.min(cursorY, container.height - tooltipRect.height - gap));\n\n this._tooltipPosition.set({ x, y });\n }\n\n /**\n * Toggles the visibility of a segment\n */\n private toggleSegmentVisibility(id: string): void {\n if (this.hiddenSegments.has(id)) {\n this.hiddenSegments.delete(id);\n } else {\n this.hiddenSegments.add(id);\n }\n\n // Hide tooltip when toggling segments\n this._tooltipVisible.set(false);\n\n this.updateChart();\n }\n\n /**\n * Adds center display with total value\n */\n private addCenterDisplay(total: number): void {\n if (!this.svg) return;\n\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 total display\n const totalDisplay = this.svg\n .append('g')\n .attr('class', 'ax-donut-chart-total-display')\n .attr('text-anchor', 'middle');\n\n // Add total value\n totalDisplay\n .append('text')\n .attr('class', 'ax-donut-chart-total-value')\n .style('font-size', `${baseFontSize}rem`)\n .style('font-weight', '600')\n .style('fill', 'rgb(var(--ax-comp-donut-chart-value-color))')\n .text(total.toLocaleString());\n\n // Add label\n totalDisplay\n .append('text')\n .attr('class', 'ax-donut-chart-total-label')\n .attr('dy', '1.4em')\n .style('font-size', `${subTextFontSize}rem`)\n .style('fill', 'rgb(var(--ax-comp-donut-chart-value-color))')\n .style('opacity', '0.8')\n .text('Total');\n }\n\n /**\n * Handles chart rendering errors\n */\n private handleChartError(): void {\n const container = this.chartContainerEl()?.nativeElement;\n if (container) {\n this.showNoDataMessage();\n }\n }\n\n /**\n * Cleans up chart resources\n */\n private cleanupChart(): void {\n if (this.svg) {\n this.d3.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();\n this.svg = null;\n this.pieData = [];\n }\n this.hiddenSegments.clear();\n this._tooltipVisible.set(false);\n }\n\n /**\n * Gets an accessibility label describing the donut chart for screen readers\n */\n protected getAccessibilityLabel(): string {\n const data = this.chartDataArray();\n\n if (!data || data.length === 0) {\n return 'Empty donut chart. No data available.';\n }\n\n // Calculate total\n const total = data.reduce((sum, item) => sum + item.value, 0);\n\n // Generate a description of the chart with percentages\n const segmentDescriptions = data\n .map((segment) => {\n const percentage = ((segment.value / total) * 100).toFixed(1);\n return `${segment.label}: ${segment.value} (${percentage}%)`;\n })\n .join('; ');\n\n return `Donut chart with ${data.length} segments. Total value: ${total}. ${segmentDescriptions}`;\n }\n}\n","<div class=\"ax-donut-chart\" #chartContainer role=\"img\" [attr.aria-label]=\"getAccessibilityLabel()\" tabindex=\"0\">\n <!-- Tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"true\"\n ></ax-chart-tooltip>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { NXComponent } from '@acorex/cdk/common';
2
+ import { AX_CHART_COLOR_PALETTE, getChartColor } from '@acorex/charts';
2
3
  import { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';
3
4
  import { CommonModule } from '@angular/common';
4
5
  import * as i0 from '@angular/core';
@@ -46,24 +47,6 @@ function lineChartConfig(config = {}) {
46
47
  return result;
47
48
  }
48
49
 
49
- const AXLineChartColors = {
50
- defaultColors: [
51
- '#4361ee',
52
- '#3a0ca3',
53
- '#7209b7',
54
- '#f72585',
55
- '#4cc9f0',
56
- '#4895ef',
57
- '#560bad',
58
- '#f15bb5',
59
- '#00bbf9',
60
- '#00f5d4',
61
- ],
62
- getColor: (index, customPalette) => {
63
- const palette = customPalette || AXLineChartColors.defaultColors;
64
- return palette[index % palette.length];
65
- },
66
- };
67
50
  /**
68
51
  * Line Chart Component for rendering data as lines with interactive hover effects and animations
69
52
  */
@@ -97,6 +80,8 @@ class AXLineChartComponent extends NXComponent {
97
80
  tooltipData = this._tooltipData.asReadonly();
98
81
  // Inject configuration
99
82
  configToken = inject(AX_LINE_CHART_CONFIG);
83
+ // Inject the chart colors
84
+ chartColors = inject(AX_CHART_COLOR_PALETTE);
100
85
  effectiveOptions = computed(() => {
101
86
  return {
102
87
  ...this.configToken,
@@ -455,7 +440,7 @@ class AXLineChartComponent extends NXComponent {
455
440
  .attr('class', `ax-line-chart-series ax-line-chart-series-${seriesIndex}`)
456
441
  .attr('data-series', series.label || `series-${seriesIndex}`)
457
442
  .attr('pointer-events', 'none'); // Disable pointer events during animation
458
- const lineColor = series.lineColor || AXLineChartColors.getColor(seriesIndex);
443
+ const lineColor = series.lineColor || getChartColor(seriesIndex, this.chartColors);
459
444
  const fillColor = series.fillColor || lineColor;
460
445
  const line = seriesGroup
461
446
  .append('path')
@@ -535,7 +520,7 @@ class AXLineChartComponent extends NXComponent {
535
520
  data.forEach((series, seriesIndex) => {
536
521
  if (!series.data || series.data.length === 0)
537
522
  return;
538
- const lineColor = series.lineColor || AXLineChartColors.getColor(seriesIndex);
523
+ const lineColor = series.lineColor || getChartColor(seriesIndex, this.chartColors);
539
524
  const maxPoints = 100;
540
525
  const pointData = series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;
541
526
  pointData.forEach((point) => {
@@ -558,7 +543,7 @@ class AXLineChartComponent extends NXComponent {
558
543
  data.forEach((series, seriesIndex) => {
559
544
  if (!series.data || series.data.length === 0)
560
545
  return;
561
- const lineColor = series.lineColor || AXLineChartColors.getColor(seriesIndex);
546
+ const lineColor = series.lineColor || getChartColor(seriesIndex, this.chartColors);
562
547
  const pointsGroup = allPointsGroup
563
548
  .append('g')
564
549
  .attr('class', `ax-line-chart-points ax-line-chart-points-${seriesIndex}`)
@@ -655,6 +640,9 @@ class AXLineChartComponent extends NXComponent {
655
640
  }
656
641
  }
657
642
  enablePointerEventsAfterAnimation() {
643
+ // Guard against null chart or svg
644
+ if (!this.chart || !this.svg)
645
+ return;
658
646
  // Enable pointer events for all chart elements after animation completes
659
647
  this.chart.selectAll('.ax-line-chart-all-series').attr('pointer-events', 'all');
660
648
  this.chart.selectAll('.ax-line-chart-series').attr('pointer-events', 'all');
@@ -698,7 +686,7 @@ class AXLineChartComponent extends NXComponent {
698
686
  }
699
687
  handlePointHover(event, dataPoint, series, seriesIndex) {
700
688
  if (this.effectiveOptions().showTooltip !== false) {
701
- const color = series.lineColor || AXLineChartColors.getColor(seriesIndex);
689
+ const color = series.lineColor || getChartColor(seriesIndex, this.chartColors);
702
690
  this._tooltipData.set({
703
691
  title: dataPoint.tooltipLabel || series.tooltipLabel || series.label || `Series ${seriesIndex + 1}`,
704
692
  value: dataPoint.y.toString(),
@@ -834,7 +822,7 @@ class AXLineChartComponent extends NXComponent {
834
822
  seriesName: '',
835
823
  color: '',
836
824
  items: overlappingPoints.map(({ point, series, seriesIndex }) => {
837
- const color = series.lineColor || AXLineChartColors.getColor(seriesIndex);
825
+ const color = series.lineColor || getChartColor(seriesIndex, this.chartColors);
838
826
  return {
839
827
  label: series.label || `Series ${seriesIndex + 1}`,
840
828
  value: point.y.toString(),
@@ -888,5 +876,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
888
876
  * Generated bundle index. Do not edit.
889
877
  */
890
878
 
891
- export { AXLineChartColors, AXLineChartComponent, AXLineChartDefaultConfig, AX_LINE_CHART_CONFIG, lineChartConfig };
879
+ export { AXLineChartComponent, AXLineChartDefaultConfig, AX_LINE_CHART_CONFIG, lineChartConfig };
892
880
  //# sourceMappingURL=acorex-charts-line-chart.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-charts-line-chart.mjs","sources":["../../../../packages/charts/line-chart/src/lib/line-chart.config.ts","../../../../packages/charts/line-chart/src/lib/line-chart.component.ts","../../../../packages/charts/line-chart/src/lib/line-chart.component.html","../../../../packages/charts/line-chart/src/acorex-charts-line-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXLineChartOption } from './line-chart.type';\n\nexport const AXLineChartDefaultConfig: AXLineChartOption = {\n margins: {\n top: 20,\n right: 25,\n bottom: 40,\n left: 50,\n },\n showXAxis: true,\n showYAxis: true,\n showGrid: true,\n showVerticalGrid: false,\n yAxisStartsAtZero: true,\n axisPadding: 5,\n showTooltip: true,\n lineWidth: 2,\n showPoints: true,\n pointRadius: 4,\n smoothLine: false,\n fillArea: false,\n fillOpacity: 20,\n showCrosshair: false,\n animationDuration: 1000,\n animationEasing: 'cubic-out',\n};\n\nexport const AX_LINE_CHART_CONFIG = new InjectionToken<AXLineChartOption>('AX_LINE_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.lineChart', AXLineChartDefaultConfig);\n return AXLineChartDefaultConfig;\n },\n});\n\nexport type PartialLineChartConfig = Partial<AXLineChartOption>;\n\nexport function lineChartConfig(config: PartialLineChartConfig = {}): AXLineChartOption {\n const result = {\n ...AXLineChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { NXComponent } from '@acorex/cdk/common';\nimport { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { AX_LINE_CHART_CONFIG } from './line-chart.config';\nimport { AXLineChartData, AXLineChartOption, AXLineChartPointClickEvent, AXLineChartValue } from './line-chart.type';\n\nexport const AXLineChartColors = {\n defaultColors: [\n '#4361ee',\n '#3a0ca3',\n '#7209b7',\n '#f72585',\n '#4cc9f0',\n '#4895ef',\n '#560bad',\n '#f15bb5',\n '#00bbf9',\n '#00f5d4',\n ],\n\n getColor: (index: number, customPalette?: string[]): string => {\n const palette = customPalette || AXLineChartColors.defaultColors;\n return palette[index % palette.length];\n },\n};\n\n/**\n * Line Chart Component for rendering data as lines with interactive hover effects and animations\n */\n@Component({\n selector: 'ax-line-chart',\n templateUrl: './line-chart.component.html',\n styleUrls: ['./line-chart.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXChartTooltipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXLineChartComponent extends NXComponent implements OnInit, AfterViewInit, OnDestroy {\n data = input<AXLineChartValue>([]);\n options = input<AXLineChartOption>({});\n pointClick = output<AXLineChartPointClickEvent>();\n\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n protected d3!: typeof import('d3');\n\n private svg!: any;\n private chart!: any;\n private xScale!: any;\n private yScale!: any;\n private xAxis!: any;\n private yAxis!: any;\n\n private width!: number;\n private height!: number;\n private margin = { top: 20, right: 25, bottom: 40, left: 50 };\n\n private _tooltipVisible = signal(false);\n private _tooltipPosition = signal({ x: 0, y: 0 });\n private _tooltipData = signal<AXChartTooltipData>({\n title: '',\n value: '0',\n percentage: '0%',\n color: '',\n });\n\n private _initialized = signal(false);\n private _rendered = signal(false);\n\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_LINE_CHART_CONFIG);\n\n protected effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n ngOnInit(): void {\n this.loadD3();\n }\n\n #effect = effect(() => {\n this.data();\n this.effectiveOptions();\n\n if (this._rendered()) {\n this.updateChart();\n }\n });\n\n ngAfterViewInit(): void {\n this._initialized.set(true);\n if (this.d3 && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupChart();\n }\n\n protected async loadD3(): Promise<void> {\n try {\n this.d3 = await import('d3');\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 protected createChart(): void {\n if (!this.d3 || !this.chartContainerEl()?.nativeElement) return;\n\n const containerElement = this.chartContainerEl().nativeElement;\n const chartData = this.data();\n let normalizedData: AXLineChartData[] = [];\n\n if (Array.isArray(chartData)) {\n normalizedData = chartData as AXLineChartData[];\n } else if (chartData && 'data' in chartData) {\n normalizedData = [chartData as AXLineChartData];\n }\n\n this.d3.select(containerElement).selectAll('svg').remove();\n\n if (normalizedData.length === 0 || normalizedData.some((series) => !series.data || series.data.length === 0)) {\n this.showNoDataMessage(containerElement);\n return;\n }\n\n const chartOptions = this.effectiveOptions();\n this.setupDimensions(containerElement, chartOptions);\n this.setupScales(normalizedData);\n this.createAxes(chartOptions);\n this.renderLines(normalizedData);\n }\n\n protected updateChart(): void {\n this.createChart();\n }\n\n protected cleanupChart(): void {\n if (this.svg) {\n this.d3?.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();\n this.svg = null;\n this.chart = null;\n }\n this._tooltipVisible.set(false);\n }\n\n private setupDimensions(containerElement: HTMLElement, options: AXLineChartOption): void {\n this.calculateMargins(options);\n\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n const minDim = Math.min(200, containerWidth, containerHeight);\n\n if (options.width && options.height) {\n this.width = options.width - this.margin.left - this.margin.right;\n this.height = options.height - this.margin.top - this.margin.bottom;\n } else {\n this.width = Math.max(containerWidth, minDim) - this.margin.left - this.margin.right;\n this.height = Math.max(containerHeight, minDim) - this.margin.top - this.margin.bottom;\n }\n\n this.width = Math.max(this.width, 100);\n this.height = Math.max(this.height, 100);\n\n const totalWidth = this.width + this.margin.left + this.margin.right;\n const totalHeight = this.height + this.margin.top + this.margin.bottom;\n\n const svg = this.d3\n .select(containerElement)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${totalWidth} ${totalHeight}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .attr(\n 'style',\n `\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n overflow: visible;\n `,\n );\n\n this.svg = svg;\n this.chart = this.svg.append('g').attr('transform', `translate(${this.margin.left},${this.margin.top})`);\n }\n\n private calculateMargins(options: AXLineChartOption): void {\n this.margin = {\n top: options.margins?.top ?? 20,\n right: options.margins?.right ?? 25,\n bottom: options.margins?.bottom ?? 40,\n left: options.margins?.left ?? 50,\n };\n\n if (options.xAxisLabel) {\n const xLabelLength = options.xAxisLabel.length;\n const extraBottomMargin = Math.min(20, Math.max(10, xLabelLength * 0.8));\n this.margin.bottom = Math.max(this.margin.bottom, 40 + extraBottomMargin);\n }\n\n if (options.yAxisLabel) {\n const yLabelLength = options.yAxisLabel.length;\n const extraLeftMargin = Math.min(20, Math.max(10, yLabelLength * 0.8));\n this.margin.left = Math.max(this.margin.left, 50 + extraLeftMargin);\n }\n\n if (options.showXAxis !== false) {\n this.margin.bottom = Math.max(this.margin.bottom, 45);\n }\n\n if (options.showYAxis !== false) {\n this.margin.left = Math.max(this.margin.left, 55);\n }\n }\n\n private setupScales(data: AXLineChartData[]): void {\n const chartOptions = this.effectiveOptions();\n const padding = chartOptions.axisPadding ?? 0;\n const paddingMultiplier = padding / 100;\n const allDataPoints = data.flatMap((series) => series.data);\n const allNumericX = allDataPoints.every((d) => typeof d.x === 'number');\n const allDates = !allNumericX && allDataPoints.every((d) => !isNaN(new Date(d.x).getTime()));\n\n if (allNumericX) {\n const xMin = this.d3.min(allDataPoints, (d) => d.x as number) || 0;\n const xMax = this.d3.max(allDataPoints, (d) => d.x as number) || 0;\n\n if (xMin === xMax) {\n this.xScale = this.d3\n .scaleLinear()\n .domain([xMin - 1, xMax + 1])\n .range([0, this.width]);\n } else {\n this.xScale = this.d3.scaleLinear().domain([xMin, xMax]).range([0, this.width]);\n }\n } else if (allDates) {\n const xMin = this.d3.min(allDataPoints, (d) => new Date(d.x as string)) || new Date();\n const xMax = this.d3.max(allDataPoints, (d) => new Date(d.x as string)) || new Date();\n\n if (xMin.getTime() === xMax.getTime()) {\n const oneDayMs = 86400000;\n this.xScale = this.d3\n .scaleTime()\n .domain([new Date(xMin.getTime() - oneDayMs), new Date(xMax.getTime() + oneDayMs)])\n .range([0, this.width]);\n } else {\n this.xScale = this.d3.scaleTime().domain([xMin, xMax]).range([0, this.width]);\n }\n } else {\n this.xScale = this.d3\n .scaleBand()\n .domain(allDataPoints.map((d) => String(d.x)))\n .range([0, this.width])\n .paddingInner(0.2)\n .paddingOuter(0);\n }\n\n const yAxisStartsAtZero = chartOptions.yAxisStartsAtZero !== false;\n const yMin = yAxisStartsAtZero ? 0 : this.d3.min(allDataPoints, (d) => d.y) || 0;\n const yMax = this.d3.max(allDataPoints, (d) => d.y) || 0;\n const yRange = yMax - yMin;\n\n this.yScale = this.d3\n .scaleLinear()\n .domain([yMin, yMax + yRange * paddingMultiplier])\n .nice()\n .range([this.height, 0]);\n }\n\n private createAxes(options: AXLineChartOption): void {\n const showXAxis = options.showXAxis !== false;\n const showYAxis = options.showYAxis !== false;\n const showGrid = options.showGrid !== false;\n const isBandScale = this.xScale.bandwidth !== undefined;\n const axesGroup = this.chart.append('g').attr('class', 'ax-line-chart-axes');\n\n if (showXAxis) {\n this.xAxis = axesGroup\n .append('g')\n .attr('class', 'ax-line-chart-axis-x')\n .attr('transform', `translate(0,${this.height})`)\n .call(this.d3.axisBottom(this.xScale).tickSize(5).tickPadding(8));\n\n // Style the x-axis path and lines\n this.xAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n\n this.xAxis\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n\n this.xAxis.selectAll('text').attr(\n 'style',\n `\n font-size: 11px;\n font-weight: 400;\n fill: rgba(var(--ax-comp-line-chart-labels-color), 0.7);\n `,\n );\n\n if (options.xAxisLabel) {\n const labelY = this.height + this.margin.bottom * 0.65;\n\n axesGroup\n .append('text')\n .attr('class', 'ax-line-chart-axis-label ax-x-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('x', this.width / 2)\n .attr('y', labelY)\n .attr('transform', 'translate(0, 5)')\n .attr(\n 'font-family',\n 'var(--ax-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)',\n )\n .attr(\n 'style',\n `\n font-size: 13px;\n font-weight: 500;\n fill: rgb(var(--ax-comp-line-chart-text-color));\n pointer-events: none;\n `,\n )\n .text(options.xAxisLabel);\n }\n }\n\n if (showYAxis) {\n this.yAxis = axesGroup\n .append('g')\n .attr('class', 'ax-line-chart-axis-y')\n .call(this.d3.axisLeft(this.yScale).tickSize(5).tickPadding(8));\n\n // Style the y-axis path and lines\n this.yAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n\n this.yAxis\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n\n this.yAxis.selectAll('text').attr(\n 'style',\n `\n font-size: 11px;\n font-weight: 400;\n fill: rgba(var(--ax-comp-line-chart-labels-color), 0.7);\n `,\n );\n\n if (options.yAxisLabel) {\n const labelX = -this.height / 2;\n const labelY = -this.margin.left * 0.65;\n\n axesGroup\n .append('text')\n .attr('class', 'ax-line-chart-axis-label ax-y-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('transform', 'rotate(-90) translate(-5, 0)')\n .attr('x', labelX)\n .attr('y', labelY)\n .attr(\n 'font-family',\n 'var(--ax-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)',\n )\n .attr(\n 'style',\n `\n font-size: 13px;\n font-weight: 500;\n fill: rgb(var(--ax-comp-line-chart-text-color));\n pointer-events: none;\n `,\n )\n .text(options.yAxisLabel);\n }\n }\n\n if (showGrid) {\n const gridGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-grid-container')\n .attr('pointer-events', 'none');\n\n const yGrid = gridGroup\n .append('g')\n .attr('class', 'ax-line-chart-grid')\n .call(\n this.d3\n .axisLeft(this.yScale)\n .tickSize(-this.width)\n .tickFormat(() => '')\n .tickValues(this.yScale.ticks()),\n );\n\n // Style the grid path and lines\n yGrid.selectAll('path').attr('stroke-width', '0');\n\n yGrid\n .selectAll('.tick')\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n\n if (options.showVerticalGrid) {\n const xGrid = gridGroup\n .append('g')\n .attr('class', 'ax-line-chart-grid-vertical')\n .attr('transform', `translate(0,${this.height})`)\n .call(\n this.d3\n .axisBottom(this.xScale)\n .tickSize(-this.height)\n .tickFormat(() => '')\n .tickValues(isBandScale ? undefined : this.xScale.ticks()),\n );\n\n // Style the vertical grid path and lines\n xGrid.selectAll('path').attr('stroke-width', '0');\n\n xGrid\n .selectAll('.tick')\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.15)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n }\n }\n }\n\n private renderLines(data: AXLineChartData[]): void {\n const isBandScale = this.xScale.bandwidth !== undefined;\n\n const getX = (d: { x: number | string; y: number }) => {\n if (isBandScale) {\n return this.xScale(String(d.x)) + this.xScale.bandwidth() / 2;\n } else {\n return this.xScale(typeof d.x === 'number' ? d.x : new Date(d.x));\n }\n };\n\n const lineGenerator = this.d3\n .line<{ x: number | string; y: number }>()\n .x(getX)\n .y((d) => this.yScale(d.y));\n\n if (this.effectiveOptions().smoothLine !== false) {\n lineGenerator.curve(this.d3.curveMonotoneX);\n }\n\n const areaGenerator = this.d3\n .area<{ x: number | string; y: number }>()\n .x(getX)\n .y0(this.height)\n .y1((d) => this.yScale(d.y));\n\n if (this.effectiveOptions().smoothLine !== false) {\n areaGenerator.curve(this.d3.curveMonotoneX);\n }\n\n // Add class to chart container to disable pointer events during animation\n this.svg.attr('class', 'ax-line-chart-animating');\n\n const allSeriesGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-all-series')\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n const allPointsGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-all-points')\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n if (this.effectiveOptions().showCrosshair === true) {\n const crosshairGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-crosshair')\n .attr('pointer-events', 'none');\n }\n\n // Get animation options\n const animationDuration = this.effectiveOptions().animationDuration;\n const animationEasing = this.getEasingFunction(this.effectiveOptions().animationEasing);\n\n data.forEach((series, seriesIndex) => {\n if (!series.data || series.data.length === 0) return;\n\n const seriesGroup = allSeriesGroup\n .append('g')\n .attr('class', `ax-line-chart-series ax-line-chart-series-${seriesIndex}`)\n .attr('data-series', series.label || `series-${seriesIndex}`)\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n const lineColor = series.lineColor || AXLineChartColors.getColor(seriesIndex);\n const fillColor = series.fillColor || lineColor;\n\n const line = seriesGroup\n .append('path')\n .datum(series.data)\n .attr('class', 'ax-line-chart-line')\n .attr('stroke', lineColor)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator as any)\n .attr('fill', 'none')\n .attr('style', 'transition: stroke-width 0.3s ease;')\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n // Setup hover listener\n line\n .on('mouseenter', () => {\n line\n .transition()\n .duration(150)\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5);\n })\n .on('mouseleave', () => {\n line\n .transition()\n .duration(150)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2);\n });\n\n const totalLength = line.node().getTotalLength();\n line\n .attr('stroke-dasharray', totalLength + ' ' + totalLength)\n .attr('stroke-dashoffset', totalLength)\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('stroke-dashoffset', 0)\n .on('end', function () {\n // Enable pointer events after animation completes\n line.attr('pointer-events', 'all');\n });\n\n if (this.effectiveOptions().fillArea) {\n const area = seriesGroup\n .append('path')\n .datum(series.data)\n .attr('class', 'ax-line-chart-area')\n .attr('fill', fillColor)\n .attr('opacity', 0)\n .attr('d', areaGenerator)\n .attr('style', 'transition: opacity 0.3s ease;')\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n // Setup hover listener\n area\n .on('mouseenter', () => {\n area\n .transition()\n .duration(150)\n .attr('opacity', ((this.effectiveOptions().fillOpacity ?? 20) / 100) * 1.5);\n })\n .on('mouseleave', () => {\n area\n .transition()\n .duration(150)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100);\n });\n\n area\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100)\n .on('end', function () {\n // Enable pointer events after animation completes\n area.attr('pointer-events', 'all');\n });\n }\n });\n\n if (this.effectiveOptions().showPoints !== false) {\n const pointMap = new Map<string, Array<{ point: any; series: AXLineChartData; seriesIndex: number }>>();\n\n data.forEach((series, seriesIndex) => {\n if (!series.data || series.data.length === 0) return;\n\n const lineColor = series.lineColor || AXLineChartColors.getColor(seriesIndex);\n const maxPoints = 100;\n const pointData =\n series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;\n\n pointData.forEach((point) => {\n const x = getX(point);\n const y = this.yScale(point.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n\n if (!pointMap.has(key)) {\n pointMap.set(key, []);\n }\n\n pointMap.get(key)?.push({\n point,\n series,\n seriesIndex,\n });\n });\n });\n\n // Create a counter to track animation completion\n let animationCounter = 0;\n const totalSeriesCount = data.length;\n\n data.forEach((series, seriesIndex) => {\n if (!series.data || series.data.length === 0) return;\n\n const lineColor = series.lineColor || AXLineChartColors.getColor(seriesIndex);\n const pointsGroup = allPointsGroup\n .append('g')\n .attr('class', `ax-line-chart-points ax-line-chart-points-${seriesIndex}`)\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n pointsGroup\n .on('mouseenter', () => this.handlePointGroupEnter(seriesIndex, lineColor))\n .on('mouseleave', () => this.handlePointGroupLeave());\n\n const maxPoints = 100;\n const pointData =\n series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;\n\n pointsGroup\n .selectAll('circle')\n .data(pointData)\n .enter()\n .append('circle')\n .attr('class', 'ax-line-chart-point')\n .attr('cx', getX)\n .attr('cy', (d) => this.yScale(d.y))\n .attr('r', 0)\n .attr('fill', lineColor)\n .attr('stroke', '#fff')\n .attr('stroke-width', 1)\n .attr('data-x', (d) => d.x)\n .attr('data-y', (d) => d.y)\n .style('cursor', 'pointer')\n .attr('pointer-events', 'none') // Disable pointer events during animation\n .on('mouseenter', (event: MouseEvent, d: any) => {\n const x = getX(d);\n const y = this.yScale(d.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n const overlappingPoints = pointMap.get(key) || [];\n\n if (overlappingPoints.length > 1) {\n this.handleOverlappingPointsHover(event, overlappingPoints);\n } else {\n this.handlePointHover(event, d, series, seriesIndex);\n }\n\n this.d3\n .select(event.target as SVGCircleElement)\n .transition()\n .duration(150)\n .attr('r', (this.effectiveOptions().pointRadius ?? 4) * 1.5)\n .attr('stroke-width', 2)\n .attr('stroke', `rgb(var(--ax-comp-line-chart-bg-color))`);\n })\n .on('mousemove', (event: MouseEvent) => this.updateTooltipPosition(event))\n .on('mouseleave', (event: MouseEvent) => {\n this._tooltipVisible.set(false);\n this.d3\n .select(event.target as SVGCircleElement)\n .transition()\n .duration(150)\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .attr('stroke-width', 1)\n .attr('stroke', '#fff');\n })\n .on('click', (event: MouseEvent, d: any) => {\n const x = getX(d);\n const y = this.yScale(d.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n const overlappingPoints = pointMap.get(key) || [];\n\n if (overlappingPoints.length > 1) {\n overlappingPoints.forEach(({ point, series }) => {\n this.handlePointClick(event, point, series);\n });\n } else {\n this.handlePointClick(event, d, series);\n }\n })\n .transition()\n .delay((d: any, i: number) => i * Math.min(50, animationDuration * 0.05) + animationDuration * 0.5)\n .duration(animationDuration * 0.3)\n .ease(animationEasing)\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .on('end', (d, i, nodes) => {\n // When the last point finishes animating\n if (i === nodes.length - 1) {\n animationCounter++;\n\n // If this is the last series, enable all pointer events\n if (animationCounter >= totalSeriesCount) {\n // Enable pointer events for all elements after all animations have completed\n this.enablePointerEventsAfterAnimation();\n }\n }\n });\n });\n } else {\n // If not showing points, wait for line animations to complete\n setTimeout(() => {\n // Enable pointer events for all elements after animation duration\n this.enablePointerEventsAfterAnimation();\n }, animationDuration + 100);\n }\n }\n\n private enablePointerEventsAfterAnimation(): void {\n // Enable pointer events for all chart elements after animation completes\n this.chart.selectAll('.ax-line-chart-all-series').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-series').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-line').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-area').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-all-points').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-points').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-point').attr('pointer-events', 'all');\n\n // Remove the animating class from the SVG\n this.svg.classed('ax-line-chart-animating', false);\n }\n\n private handlePointGroupEnter(seriesIndex: number, color: string): void {\n this.chart\n .select(`.ax-line-chart-series-${seriesIndex} .ax-line-chart-line`)\n .transition()\n .duration(150)\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5);\n }\n\n private handlePointGroupLeave(): void {\n this.chart\n .selectAll('.ax-line-chart-line')\n .transition()\n .duration(150)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2);\n\n if (this.effectiveOptions().showCrosshair === true) {\n this.chart.select('.ax-line-chart-crosshair').selectAll('*').remove();\n }\n }\n\n private getReducedDataPoints(\n data: Array<{ x: number | string; y: number }>,\n maxPoints: number,\n ): Array<{ x: number | string; y: number }> {\n if (data.length <= maxPoints) return data;\n\n const result: Array<{ x: number | string; y: number }> = [];\n const step = Math.ceil(data.length / maxPoints);\n\n for (let i = 0; i < data.length; i += step) {\n result.push(data[i]);\n }\n\n if (result[result.length - 1] !== data[data.length - 1]) {\n result.push(data[data.length - 1]);\n }\n\n return result;\n }\n\n private handlePointHover(\n event: MouseEvent,\n dataPoint: AXLineChartData['data'][number],\n series: AXLineChartData,\n seriesIndex: number,\n ): void {\n if (this.effectiveOptions().showTooltip !== false) {\n const color = series.lineColor || AXLineChartColors.getColor(seriesIndex);\n\n this._tooltipData.set({\n title: dataPoint.tooltipLabel || series.tooltipLabel || series.label || `Series ${seriesIndex + 1}`,\n value: dataPoint.y.toString(),\n seriesName: `x: ${dataPoint.x}`,\n color: color,\n });\n\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n\n if (this.effectiveOptions().showCrosshair === true) {\n this.showCrosshairLines(dataPoint);\n }\n }\n }\n\n private showCrosshairLines(dataPoint: { x: number | string; y: number }): void {\n const isBandScale = this.xScale.bandwidth !== undefined;\n\n let x: number;\n if (isBandScale) {\n x = this.xScale(String(dataPoint.x)) + this.xScale.bandwidth() / 2;\n } else {\n x = this.xScale(typeof dataPoint.x === 'number' ? dataPoint.x : new Date(dataPoint.x));\n }\n const y = this.yScale(dataPoint.y);\n\n let crosshairGroup = this.chart.select('.ax-line-chart-crosshair');\n if (crosshairGroup.empty()) {\n crosshairGroup = this.chart.append('g').attr('class', 'ax-line-chart-crosshair').attr('pointer-events', 'none');\n }\n\n crosshairGroup.selectAll('*').remove();\n\n crosshairGroup\n .append('line')\n .attr('class', 'ax-line-chart-crosshair-vertical')\n .attr('x1', x)\n .attr('y1', 0)\n .attr('x2', x)\n .attr('y2', this.height)\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .attr('pointer-events', 'none');\n\n crosshairGroup\n .append('line')\n .attr('class', 'ax-line-chart-crosshair-horizontal')\n .attr('x1', 0)\n .attr('y1', y)\n .attr('x2', this.width)\n .attr('y2', y)\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .attr('pointer-events', 'none');\n }\n\n private updateTooltipPosition(event: MouseEvent): void {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.chartContainerEl().nativeElement.querySelector('.chart-tooltip');\n\n if (!tooltipEl) {\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n this._tooltipPosition.set({ x, y });\n return;\n }\n\n const tooltipRect = tooltipEl.getBoundingClientRect();\n let x = event.clientX - container.left;\n const y = event.clientY - container.top;\n\n if (x + tooltipRect.width + 20 > container.width) {\n x = x - tooltipRect.width - 15;\n }\n\n // if (y + tooltipRect.height / 2 > container.height) {\n // y = container.height - tooltipRect.height / 2;\n // } else if (y - tooltipRect.height / 2 < 0) {\n // y = tooltipRect.height / 2;\n // }\n\n this._tooltipPosition.set({ x, y });\n }\n\n private handlePointClick(\n event: MouseEvent,\n dataPoint: AXLineChartData['data'][number],\n series: AXLineChartData,\n ): void {\n this.pointClick.emit({\n series: series,\n point: dataPoint,\n event: {\n nativeEvent: event,\n sender: this,\n },\n });\n }\n\n private showNoDataMessage(containerElement: HTMLElement): void {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-line-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-line-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-chart-line fa-2x\"></i>');\n\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('No data available');\n\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Please provide data to display the chart');\n }\n\n private handleOverlappingPointsHover(\n event: MouseEvent,\n overlappingPoints: Array<{ point: any; series: AXLineChartData; seriesIndex: number }>,\n ): void {\n if (this.effectiveOptions().showTooltip === false) return;\n\n const tooltipData: AXChartTooltipData = {\n title: 'Multiple Series',\n value: overlappingPoints[0].point.y.toString(),\n seriesName: '',\n color: '',\n items: overlappingPoints.map(({ point, series, seriesIndex }) => {\n const color = series.lineColor || AXLineChartColors.getColor(seriesIndex);\n return {\n label: series.label || `Series ${seriesIndex + 1}`,\n value: point.y.toString(),\n color: color,\n };\n }),\n };\n\n this._tooltipData.set(tooltipData);\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n\n if (this.effectiveOptions().showCrosshair === true && overlappingPoints.length > 0) {\n this.showCrosshairLines(overlappingPoints[0].point);\n }\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","<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n","/**\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-line-chart.mjs","sources":["../../../../packages/charts/line-chart/src/lib/line-chart.config.ts","../../../../packages/charts/line-chart/src/lib/line-chart.component.ts","../../../../packages/charts/line-chart/src/lib/line-chart.component.html","../../../../packages/charts/line-chart/src/acorex-charts-line-chart.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXLineChartOption } from './line-chart.type';\n\nexport const AXLineChartDefaultConfig: AXLineChartOption = {\n margins: {\n top: 20,\n right: 25,\n bottom: 40,\n left: 50,\n },\n showXAxis: true,\n showYAxis: true,\n showGrid: true,\n showVerticalGrid: false,\n yAxisStartsAtZero: true,\n axisPadding: 5,\n showTooltip: true,\n lineWidth: 2,\n showPoints: true,\n pointRadius: 4,\n smoothLine: false,\n fillArea: false,\n fillOpacity: 20,\n showCrosshair: false,\n animationDuration: 1000,\n animationEasing: 'cubic-out',\n};\n\nexport const AX_LINE_CHART_CONFIG = new InjectionToken<AXLineChartOption>('AX_LINE_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.lineChart', AXLineChartDefaultConfig);\n return AXLineChartDefaultConfig;\n },\n});\n\nexport type PartialLineChartConfig = Partial<AXLineChartOption>;\n\nexport function lineChartConfig(config: PartialLineChartConfig = {}): AXLineChartOption {\n const result = {\n ...AXLineChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { NXComponent } from '@acorex/cdk/common';\nimport { AX_CHART_COLOR_PALETTE, getChartColor } from '@acorex/charts';\nimport { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AX_LINE_CHART_CONFIG } from './line-chart.config';\nimport { AXLineChartData, AXLineChartOption, AXLineChartPointClickEvent, AXLineChartValue } from './line-chart.type';\n\n/**\n * Line Chart Component for rendering data as lines with interactive hover effects and animations\n */\n@Component({\n selector: 'ax-line-chart',\n templateUrl: './line-chart.component.html',\n styleUrls: ['./line-chart.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXChartTooltipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXLineChartComponent extends NXComponent implements OnInit, AfterViewInit, OnDestroy {\n data = input<AXLineChartValue>([]);\n options = input<AXLineChartOption>({});\n pointClick = output<AXLineChartPointClickEvent>();\n\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n protected d3!: typeof import('d3');\n\n private svg!: any;\n private chart!: any;\n private xScale!: any;\n private yScale!: any;\n private xAxis!: any;\n private yAxis!: any;\n\n private width!: number;\n private height!: number;\n private margin = { top: 20, right: 25, bottom: 40, left: 50 };\n\n private _tooltipVisible = signal(false);\n private _tooltipPosition = signal({ x: 0, y: 0 });\n private _tooltipData = signal<AXChartTooltipData>({\n title: '',\n value: '0',\n percentage: '0%',\n color: '',\n });\n\n private _initialized = signal(false);\n private _rendered = signal(false);\n\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_LINE_CHART_CONFIG);\n\n // Inject the chart colors\n private chartColors = inject(AX_CHART_COLOR_PALETTE);\n\n protected effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n ngOnInit(): void {\n this.loadD3();\n }\n\n #effect = effect(() => {\n this.data();\n this.effectiveOptions();\n\n if (this._rendered()) {\n this.updateChart();\n }\n });\n\n ngAfterViewInit(): void {\n this._initialized.set(true);\n if (this.d3 && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupChart();\n }\n\n protected async loadD3(): Promise<void> {\n try {\n this.d3 = await import('d3');\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 protected createChart(): void {\n if (!this.d3 || !this.chartContainerEl()?.nativeElement) return;\n\n const containerElement = this.chartContainerEl().nativeElement;\n const chartData = this.data();\n let normalizedData: AXLineChartData[] = [];\n\n if (Array.isArray(chartData)) {\n normalizedData = chartData as AXLineChartData[];\n } else if (chartData && 'data' in chartData) {\n normalizedData = [chartData as AXLineChartData];\n }\n\n this.d3.select(containerElement).selectAll('svg').remove();\n\n if (normalizedData.length === 0 || normalizedData.some((series) => !series.data || series.data.length === 0)) {\n this.showNoDataMessage(containerElement);\n return;\n }\n\n const chartOptions = this.effectiveOptions();\n this.setupDimensions(containerElement, chartOptions);\n this.setupScales(normalizedData);\n this.createAxes(chartOptions);\n this.renderLines(normalizedData);\n }\n\n protected updateChart(): void {\n this.createChart();\n }\n\n protected cleanupChart(): void {\n if (this.svg) {\n this.d3?.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();\n this.svg = null;\n this.chart = null;\n }\n this._tooltipVisible.set(false);\n }\n\n private setupDimensions(containerElement: HTMLElement, options: AXLineChartOption): void {\n this.calculateMargins(options);\n\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n const minDim = Math.min(200, containerWidth, containerHeight);\n\n if (options.width && options.height) {\n this.width = options.width - this.margin.left - this.margin.right;\n this.height = options.height - this.margin.top - this.margin.bottom;\n } else {\n this.width = Math.max(containerWidth, minDim) - this.margin.left - this.margin.right;\n this.height = Math.max(containerHeight, minDim) - this.margin.top - this.margin.bottom;\n }\n\n this.width = Math.max(this.width, 100);\n this.height = Math.max(this.height, 100);\n\n const totalWidth = this.width + this.margin.left + this.margin.right;\n const totalHeight = this.height + this.margin.top + this.margin.bottom;\n\n const svg = this.d3\n .select(containerElement)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${totalWidth} ${totalHeight}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .attr(\n 'style',\n `\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n overflow: visible;\n `,\n );\n\n this.svg = svg;\n this.chart = this.svg.append('g').attr('transform', `translate(${this.margin.left},${this.margin.top})`);\n }\n\n private calculateMargins(options: AXLineChartOption): void {\n this.margin = {\n top: options.margins?.top ?? 20,\n right: options.margins?.right ?? 25,\n bottom: options.margins?.bottom ?? 40,\n left: options.margins?.left ?? 50,\n };\n\n if (options.xAxisLabel) {\n const xLabelLength = options.xAxisLabel.length;\n const extraBottomMargin = Math.min(20, Math.max(10, xLabelLength * 0.8));\n this.margin.bottom = Math.max(this.margin.bottom, 40 + extraBottomMargin);\n }\n\n if (options.yAxisLabel) {\n const yLabelLength = options.yAxisLabel.length;\n const extraLeftMargin = Math.min(20, Math.max(10, yLabelLength * 0.8));\n this.margin.left = Math.max(this.margin.left, 50 + extraLeftMargin);\n }\n\n if (options.showXAxis !== false) {\n this.margin.bottom = Math.max(this.margin.bottom, 45);\n }\n\n if (options.showYAxis !== false) {\n this.margin.left = Math.max(this.margin.left, 55);\n }\n }\n\n private setupScales(data: AXLineChartData[]): void {\n const chartOptions = this.effectiveOptions();\n const padding = chartOptions.axisPadding ?? 0;\n const paddingMultiplier = padding / 100;\n const allDataPoints = data.flatMap((series) => series.data);\n const allNumericX = allDataPoints.every((d) => typeof d.x === 'number');\n const allDates = !allNumericX && allDataPoints.every((d) => !isNaN(new Date(d.x).getTime()));\n\n if (allNumericX) {\n const xMin = this.d3.min(allDataPoints, (d) => d.x as number) || 0;\n const xMax = this.d3.max(allDataPoints, (d) => d.x as number) || 0;\n\n if (xMin === xMax) {\n this.xScale = this.d3\n .scaleLinear()\n .domain([xMin - 1, xMax + 1])\n .range([0, this.width]);\n } else {\n this.xScale = this.d3.scaleLinear().domain([xMin, xMax]).range([0, this.width]);\n }\n } else if (allDates) {\n const xMin = this.d3.min(allDataPoints, (d) => new Date(d.x as string)) || new Date();\n const xMax = this.d3.max(allDataPoints, (d) => new Date(d.x as string)) || new Date();\n\n if (xMin.getTime() === xMax.getTime()) {\n const oneDayMs = 86400000;\n this.xScale = this.d3\n .scaleTime()\n .domain([new Date(xMin.getTime() - oneDayMs), new Date(xMax.getTime() + oneDayMs)])\n .range([0, this.width]);\n } else {\n this.xScale = this.d3.scaleTime().domain([xMin, xMax]).range([0, this.width]);\n }\n } else {\n this.xScale = this.d3\n .scaleBand()\n .domain(allDataPoints.map((d) => String(d.x)))\n .range([0, this.width])\n .paddingInner(0.2)\n .paddingOuter(0);\n }\n\n const yAxisStartsAtZero = chartOptions.yAxisStartsAtZero !== false;\n const yMin = yAxisStartsAtZero ? 0 : this.d3.min(allDataPoints, (d) => d.y) || 0;\n const yMax = this.d3.max(allDataPoints, (d) => d.y) || 0;\n const yRange = yMax - yMin;\n\n this.yScale = this.d3\n .scaleLinear()\n .domain([yMin, yMax + yRange * paddingMultiplier])\n .nice()\n .range([this.height, 0]);\n }\n\n private createAxes(options: AXLineChartOption): void {\n const showXAxis = options.showXAxis !== false;\n const showYAxis = options.showYAxis !== false;\n const showGrid = options.showGrid !== false;\n const isBandScale = this.xScale.bandwidth !== undefined;\n const axesGroup = this.chart.append('g').attr('class', 'ax-line-chart-axes');\n\n if (showXAxis) {\n this.xAxis = axesGroup\n .append('g')\n .attr('class', 'ax-line-chart-axis-x')\n .attr('transform', `translate(0,${this.height})`)\n .call(this.d3.axisBottom(this.xScale).tickSize(5).tickPadding(8));\n\n // Style the x-axis path and lines\n this.xAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n\n this.xAxis\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n\n this.xAxis.selectAll('text').attr(\n 'style',\n `\n font-size: 11px;\n font-weight: 400;\n fill: rgba(var(--ax-comp-line-chart-labels-color), 0.7);\n `,\n );\n\n if (options.xAxisLabel) {\n const labelY = this.height + this.margin.bottom * 0.65;\n\n axesGroup\n .append('text')\n .attr('class', 'ax-line-chart-axis-label ax-x-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('x', this.width / 2)\n .attr('y', labelY)\n .attr('transform', 'translate(0, 5)')\n .attr(\n 'font-family',\n 'var(--ax-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)',\n )\n .attr(\n 'style',\n `\n font-size: 13px;\n font-weight: 500;\n fill: rgb(var(--ax-comp-line-chart-text-color));\n pointer-events: none;\n `,\n )\n .text(options.xAxisLabel);\n }\n }\n\n if (showYAxis) {\n this.yAxis = axesGroup\n .append('g')\n .attr('class', 'ax-line-chart-axis-y')\n .call(this.d3.axisLeft(this.yScale).tickSize(5).tickPadding(8));\n\n // Style the y-axis path and lines\n this.yAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n\n this.yAxis\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n\n this.yAxis.selectAll('text').attr(\n 'style',\n `\n font-size: 11px;\n font-weight: 400;\n fill: rgba(var(--ax-comp-line-chart-labels-color), 0.7);\n `,\n );\n\n if (options.yAxisLabel) {\n const labelX = -this.height / 2;\n const labelY = -this.margin.left * 0.65;\n\n axesGroup\n .append('text')\n .attr('class', 'ax-line-chart-axis-label ax-y-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('transform', 'rotate(-90) translate(-5, 0)')\n .attr('x', labelX)\n .attr('y', labelY)\n .attr(\n 'font-family',\n 'var(--ax-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)',\n )\n .attr(\n 'style',\n `\n font-size: 13px;\n font-weight: 500;\n fill: rgb(var(--ax-comp-line-chart-text-color));\n pointer-events: none;\n `,\n )\n .text(options.yAxisLabel);\n }\n }\n\n if (showGrid) {\n const gridGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-grid-container')\n .attr('pointer-events', 'none');\n\n const yGrid = gridGroup\n .append('g')\n .attr('class', 'ax-line-chart-grid')\n .call(\n this.d3\n .axisLeft(this.yScale)\n .tickSize(-this.width)\n .tickFormat(() => '')\n .tickValues(this.yScale.ticks()),\n );\n\n // Style the grid path and lines\n yGrid.selectAll('path').attr('stroke-width', '0');\n\n yGrid\n .selectAll('.tick')\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n\n if (options.showVerticalGrid) {\n const xGrid = gridGroup\n .append('g')\n .attr('class', 'ax-line-chart-grid-vertical')\n .attr('transform', `translate(0,${this.height})`)\n .call(\n this.d3\n .axisBottom(this.xScale)\n .tickSize(-this.height)\n .tickFormat(() => '')\n .tickValues(isBandScale ? undefined : this.xScale.ticks()),\n );\n\n // Style the vertical grid path and lines\n xGrid.selectAll('path').attr('stroke-width', '0');\n\n xGrid\n .selectAll('.tick')\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.15)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n }\n }\n }\n\n private renderLines(data: AXLineChartData[]): void {\n const isBandScale = this.xScale.bandwidth !== undefined;\n\n const getX = (d: { x: number | string; y: number }) => {\n if (isBandScale) {\n return this.xScale(String(d.x)) + this.xScale.bandwidth() / 2;\n } else {\n return this.xScale(typeof d.x === 'number' ? d.x : new Date(d.x));\n }\n };\n\n const lineGenerator = this.d3\n .line<{ x: number | string; y: number }>()\n .x(getX)\n .y((d) => this.yScale(d.y));\n\n if (this.effectiveOptions().smoothLine !== false) {\n lineGenerator.curve(this.d3.curveMonotoneX);\n }\n\n const areaGenerator = this.d3\n .area<{ x: number | string; y: number }>()\n .x(getX)\n .y0(this.height)\n .y1((d) => this.yScale(d.y));\n\n if (this.effectiveOptions().smoothLine !== false) {\n areaGenerator.curve(this.d3.curveMonotoneX);\n }\n\n // Add class to chart container to disable pointer events during animation\n this.svg.attr('class', 'ax-line-chart-animating');\n\n const allSeriesGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-all-series')\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n const allPointsGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-all-points')\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n if (this.effectiveOptions().showCrosshair === true) {\n const crosshairGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-crosshair')\n .attr('pointer-events', 'none');\n }\n\n // Get animation options\n const animationDuration = this.effectiveOptions().animationDuration;\n const animationEasing = this.getEasingFunction(this.effectiveOptions().animationEasing);\n\n data.forEach((series, seriesIndex) => {\n if (!series.data || series.data.length === 0) return;\n\n const seriesGroup = allSeriesGroup\n .append('g')\n .attr('class', `ax-line-chart-series ax-line-chart-series-${seriesIndex}`)\n .attr('data-series', series.label || `series-${seriesIndex}`)\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n const lineColor = series.lineColor || getChartColor(seriesIndex, this.chartColors);\n const fillColor = series.fillColor || lineColor;\n\n const line = seriesGroup\n .append('path')\n .datum(series.data)\n .attr('class', 'ax-line-chart-line')\n .attr('stroke', lineColor)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator as any)\n .attr('fill', 'none')\n .attr('style', 'transition: stroke-width 0.3s ease;')\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n // Setup hover listener\n line\n .on('mouseenter', () => {\n line\n .transition()\n .duration(150)\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5);\n })\n .on('mouseleave', () => {\n line\n .transition()\n .duration(150)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2);\n });\n\n const totalLength = line.node().getTotalLength();\n line\n .attr('stroke-dasharray', totalLength + ' ' + totalLength)\n .attr('stroke-dashoffset', totalLength)\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('stroke-dashoffset', 0)\n .on('end', function () {\n // Enable pointer events after animation completes\n line.attr('pointer-events', 'all');\n });\n\n if (this.effectiveOptions().fillArea) {\n const area = seriesGroup\n .append('path')\n .datum(series.data)\n .attr('class', 'ax-line-chart-area')\n .attr('fill', fillColor)\n .attr('opacity', 0)\n .attr('d', areaGenerator)\n .attr('style', 'transition: opacity 0.3s ease;')\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n // Setup hover listener\n area\n .on('mouseenter', () => {\n area\n .transition()\n .duration(150)\n .attr('opacity', ((this.effectiveOptions().fillOpacity ?? 20) / 100) * 1.5);\n })\n .on('mouseleave', () => {\n area\n .transition()\n .duration(150)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100);\n });\n\n area\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100)\n .on('end', function () {\n // Enable pointer events after animation completes\n area.attr('pointer-events', 'all');\n });\n }\n });\n\n if (this.effectiveOptions().showPoints !== false) {\n const pointMap = new Map<string, Array<{ point: any; series: AXLineChartData; seriesIndex: number }>>();\n\n data.forEach((series, seriesIndex) => {\n if (!series.data || series.data.length === 0) return;\n\n const lineColor = series.lineColor || getChartColor(seriesIndex, this.chartColors);\n const maxPoints = 100;\n const pointData =\n series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;\n\n pointData.forEach((point) => {\n const x = getX(point);\n const y = this.yScale(point.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n\n if (!pointMap.has(key)) {\n pointMap.set(key, []);\n }\n\n pointMap.get(key)?.push({\n point,\n series,\n seriesIndex,\n });\n });\n });\n\n // Create a counter to track animation completion\n let animationCounter = 0;\n const totalSeriesCount = data.length;\n\n data.forEach((series, seriesIndex) => {\n if (!series.data || series.data.length === 0) return;\n\n const lineColor = series.lineColor || getChartColor(seriesIndex, this.chartColors);\n const pointsGroup = allPointsGroup\n .append('g')\n .attr('class', `ax-line-chart-points ax-line-chart-points-${seriesIndex}`)\n .attr('pointer-events', 'none'); // Disable pointer events during animation\n\n pointsGroup\n .on('mouseenter', () => this.handlePointGroupEnter(seriesIndex, lineColor))\n .on('mouseleave', () => this.handlePointGroupLeave());\n\n const maxPoints = 100;\n const pointData =\n series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;\n\n pointsGroup\n .selectAll('circle')\n .data(pointData)\n .enter()\n .append('circle')\n .attr('class', 'ax-line-chart-point')\n .attr('cx', getX)\n .attr('cy', (d) => this.yScale(d.y))\n .attr('r', 0)\n .attr('fill', lineColor)\n .attr('stroke', '#fff')\n .attr('stroke-width', 1)\n .attr('data-x', (d) => d.x)\n .attr('data-y', (d) => d.y)\n .style('cursor', 'pointer')\n .attr('pointer-events', 'none') // Disable pointer events during animation\n .on('mouseenter', (event: MouseEvent, d: any) => {\n const x = getX(d);\n const y = this.yScale(d.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n const overlappingPoints = pointMap.get(key) || [];\n\n if (overlappingPoints.length > 1) {\n this.handleOverlappingPointsHover(event, overlappingPoints);\n } else {\n this.handlePointHover(event, d, series, seriesIndex);\n }\n\n this.d3\n .select(event.target as SVGCircleElement)\n .transition()\n .duration(150)\n .attr('r', (this.effectiveOptions().pointRadius ?? 4) * 1.5)\n .attr('stroke-width', 2)\n .attr('stroke', `rgb(var(--ax-comp-line-chart-bg-color))`);\n })\n .on('mousemove', (event: MouseEvent) => this.updateTooltipPosition(event))\n .on('mouseleave', (event: MouseEvent) => {\n this._tooltipVisible.set(false);\n this.d3\n .select(event.target as SVGCircleElement)\n .transition()\n .duration(150)\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .attr('stroke-width', 1)\n .attr('stroke', '#fff');\n })\n .on('click', (event: MouseEvent, d: any) => {\n const x = getX(d);\n const y = this.yScale(d.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n const overlappingPoints = pointMap.get(key) || [];\n\n if (overlappingPoints.length > 1) {\n overlappingPoints.forEach(({ point, series }) => {\n this.handlePointClick(event, point, series);\n });\n } else {\n this.handlePointClick(event, d, series);\n }\n })\n .transition()\n .delay((d: any, i: number) => i * Math.min(50, animationDuration * 0.05) + animationDuration * 0.5)\n .duration(animationDuration * 0.3)\n .ease(animationEasing)\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .on('end', (d, i, nodes) => {\n // When the last point finishes animating\n if (i === nodes.length - 1) {\n animationCounter++;\n\n // If this is the last series, enable all pointer events\n if (animationCounter >= totalSeriesCount) {\n // Enable pointer events for all elements after all animations have completed\n this.enablePointerEventsAfterAnimation();\n }\n }\n });\n });\n } else {\n // If not showing points, wait for line animations to complete\n setTimeout(() => {\n // Enable pointer events for all elements after animation duration\n this.enablePointerEventsAfterAnimation();\n }, animationDuration + 100);\n }\n }\n\n private enablePointerEventsAfterAnimation(): void {\n // Guard against null chart or svg\n if (!this.chart || !this.svg) return;\n // Enable pointer events for all chart elements after animation completes\n this.chart.selectAll('.ax-line-chart-all-series').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-series').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-line').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-area').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-all-points').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-points').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-point').attr('pointer-events', 'all');\n\n // Remove the animating class from the SVG\n this.svg.classed('ax-line-chart-animating', false);\n }\n\n private handlePointGroupEnter(seriesIndex: number, color: string): void {\n this.chart\n .select(`.ax-line-chart-series-${seriesIndex} .ax-line-chart-line`)\n .transition()\n .duration(150)\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5);\n }\n\n private handlePointGroupLeave(): void {\n this.chart\n .selectAll('.ax-line-chart-line')\n .transition()\n .duration(150)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2);\n\n if (this.effectiveOptions().showCrosshair === true) {\n this.chart.select('.ax-line-chart-crosshair').selectAll('*').remove();\n }\n }\n\n private getReducedDataPoints(\n data: Array<{ x: number | string; y: number }>,\n maxPoints: number,\n ): Array<{ x: number | string; y: number }> {\n if (data.length <= maxPoints) return data;\n\n const result: Array<{ x: number | string; y: number }> = [];\n const step = Math.ceil(data.length / maxPoints);\n\n for (let i = 0; i < data.length; i += step) {\n result.push(data[i]);\n }\n\n if (result[result.length - 1] !== data[data.length - 1]) {\n result.push(data[data.length - 1]);\n }\n\n return result;\n }\n\n private handlePointHover(\n event: MouseEvent,\n dataPoint: AXLineChartData['data'][number],\n series: AXLineChartData,\n seriesIndex: number,\n ): void {\n if (this.effectiveOptions().showTooltip !== false) {\n const color = series.lineColor || getChartColor(seriesIndex, this.chartColors);\n\n this._tooltipData.set({\n title: dataPoint.tooltipLabel || series.tooltipLabel || series.label || `Series ${seriesIndex + 1}`,\n value: dataPoint.y.toString(),\n seriesName: `x: ${dataPoint.x}`,\n color: color,\n });\n\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n\n if (this.effectiveOptions().showCrosshair === true) {\n this.showCrosshairLines(dataPoint);\n }\n }\n }\n\n private showCrosshairLines(dataPoint: { x: number | string; y: number }): void {\n const isBandScale = this.xScale.bandwidth !== undefined;\n\n let x: number;\n if (isBandScale) {\n x = this.xScale(String(dataPoint.x)) + this.xScale.bandwidth() / 2;\n } else {\n x = this.xScale(typeof dataPoint.x === 'number' ? dataPoint.x : new Date(dataPoint.x));\n }\n const y = this.yScale(dataPoint.y);\n\n let crosshairGroup = this.chart.select('.ax-line-chart-crosshair');\n if (crosshairGroup.empty()) {\n crosshairGroup = this.chart.append('g').attr('class', 'ax-line-chart-crosshair').attr('pointer-events', 'none');\n }\n\n crosshairGroup.selectAll('*').remove();\n\n crosshairGroup\n .append('line')\n .attr('class', 'ax-line-chart-crosshair-vertical')\n .attr('x1', x)\n .attr('y1', 0)\n .attr('x2', x)\n .attr('y2', this.height)\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .attr('pointer-events', 'none');\n\n crosshairGroup\n .append('line')\n .attr('class', 'ax-line-chart-crosshair-horizontal')\n .attr('x1', 0)\n .attr('y1', y)\n .attr('x2', this.width)\n .attr('y2', y)\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .attr('pointer-events', 'none');\n }\n\n private updateTooltipPosition(event: MouseEvent): void {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.chartContainerEl().nativeElement.querySelector('.chart-tooltip');\n\n if (!tooltipEl) {\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n this._tooltipPosition.set({ x, y });\n return;\n }\n\n const tooltipRect = tooltipEl.getBoundingClientRect();\n let x = event.clientX - container.left;\n const y = event.clientY - container.top;\n\n if (x + tooltipRect.width + 20 > container.width) {\n x = x - tooltipRect.width - 15;\n }\n\n // if (y + tooltipRect.height / 2 > container.height) {\n // y = container.height - tooltipRect.height / 2;\n // } else if (y - tooltipRect.height / 2 < 0) {\n // y = tooltipRect.height / 2;\n // }\n\n this._tooltipPosition.set({ x, y });\n }\n\n private handlePointClick(\n event: MouseEvent,\n dataPoint: AXLineChartData['data'][number],\n series: AXLineChartData,\n ): void {\n this.pointClick.emit({\n series: series,\n point: dataPoint,\n event: {\n nativeEvent: event,\n sender: this,\n },\n });\n }\n\n private showNoDataMessage(containerElement: HTMLElement): void {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-line-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-line-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-chart-line fa-2x\"></i>');\n\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('No data available');\n\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Please provide data to display the chart');\n }\n\n private handleOverlappingPointsHover(\n event: MouseEvent,\n overlappingPoints: Array<{ point: any; series: AXLineChartData; seriesIndex: number }>,\n ): void {\n if (this.effectiveOptions().showTooltip === false) return;\n\n const tooltipData: AXChartTooltipData = {\n title: 'Multiple Series',\n value: overlappingPoints[0].point.y.toString(),\n seriesName: '',\n color: '',\n items: overlappingPoints.map(({ point, series, seriesIndex }) => {\n const color = series.lineColor || getChartColor(seriesIndex, this.chartColors);\n return {\n label: series.label || `Series ${seriesIndex + 1}`,\n value: point.y.toString(),\n color: color,\n };\n }),\n };\n\n this._tooltipData.set(tooltipData);\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n\n if (this.effectiveOptions().showCrosshair === true && overlappingPoints.length > 0) {\n this.showCrosshairLines(overlappingPoints[0].point);\n }\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","<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,41 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ // Default color palette for charts
4
+ const AX_CHART_COLOR_PALETTE = new InjectionToken('AX_CHART_COLOR_PALETTE', {
5
+ providedIn: 'root',
6
+ factory: () => [
7
+ '#FF6B6B', // Vibrant Red
8
+ '#4ECDC4', // Electric Teal
9
+ '#45B7D1', // Bright Blue
10
+ '#96CEB4', // Fresh Green
11
+ '#FFEEAD', // Bright Yellow
12
+ '#D4A5A5', // Rose Pink
13
+ '#9B59B6', // Rich Purple
14
+ '#3498DB', // Deep Blue
15
+ '#E67E22', // Bright Orange
16
+ '#2ECC71', // Emerald Green
17
+ '#E74C3C', // Cherry Red
18
+ '#1ABC9C', // Turquoise
19
+ '#F1C40F', // Golden Yellow
20
+ '#8E44AD', // Deep Purple
21
+ '#16A085', // Dark Teal
22
+ ],
23
+ });
24
+ /**
25
+ * Helper function to get a color from the palette by index
26
+ * @param index The index of the color to get
27
+ * @param palette The color palette to use
28
+ * @returns The color at the specified index
29
+ */
30
+ function getChartColor(index, palette) {
31
+ return palette[index % palette.length];
32
+ }
33
+
1
34
  const AX_CHARTS = 'ACOREX_CHARTS';
2
35
 
3
36
  /**
4
37
  * Generated bundle index. Do not edit.
5
38
  */
6
39
 
7
- export { AX_CHARTS };
40
+ export { AX_CHARTS, AX_CHART_COLOR_PALETTE, getChartColor };
8
41
  //# sourceMappingURL=acorex-charts.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-charts.mjs","sources":["../../../../packages/charts/src/index.ts","../../../../packages/charts/src/acorex-charts.ts"],"sourcesContent":["export const AX_CHARTS = 'ACOREX_CHARTS';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAO,MAAM,SAAS,GAAG;;ACAzB;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-charts.mjs","sources":["../../../../packages/charts/src/lib/chart-colors.ts","../../../../packages/charts/src/index.ts","../../../../packages/charts/src/acorex-charts.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n// Default color palette for charts\nexport const AX_CHART_COLOR_PALETTE = new InjectionToken<string[]>('AX_CHART_COLOR_PALETTE', {\n providedIn: 'root',\n factory: () => [\n '#FF6B6B', // Vibrant Red\n '#4ECDC4', // Electric Teal\n '#45B7D1', // Bright Blue\n '#96CEB4', // Fresh Green\n '#FFEEAD', // Bright Yellow\n '#D4A5A5', // Rose Pink\n '#9B59B6', // Rich Purple\n '#3498DB', // Deep Blue\n '#E67E22', // Bright Orange\n '#2ECC71', // Emerald Green\n '#E74C3C', // Cherry Red\n '#1ABC9C', // Turquoise\n '#F1C40F', // Golden Yellow\n '#8E44AD', // Deep Purple\n '#16A085', // Dark Teal\n ],\n});\n\n/**\n * Helper function to get a color from the palette by index\n * @param index The index of the color to get\n * @param palette The color palette to use\n * @returns The color at the specified index\n */\nexport function getChartColor(index: number, palette: string[]): string {\n return palette[index % palette.length];\n}\n","export const AX_CHARTS = 'ACOREX_CHARTS';\nexport * from './lib/chart-colors';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAEA;MACa,sBAAsB,GAAG,IAAI,cAAc,CAAW,wBAAwB,EAAE;AAC3F,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAM;AACb,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACT,QAAA,SAAS;AACV,KAAA;AACF,CAAA;AAED;;;;;AAKG;AACa,SAAA,aAAa,CAAC,KAAa,EAAE,OAAiB,EAAA;IAC5D,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AACxC;;AChCO,MAAM,SAAS,GAAG;;ACAzB;;AAEG;;;;"}
package/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare const AX_CHARTS = "ACOREX_CHARTS";
2
+ export * from './lib/chart-colors';
@@ -0,0 +1,9 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export declare const AX_CHART_COLOR_PALETTE: InjectionToken<string[]>;
3
+ /**
4
+ * Helper function to get a color from the palette by index
5
+ * @param index The index of the color to get
6
+ * @param palette The color palette to use
7
+ * @returns The color at the specified index
8
+ */
9
+ export declare function getChartColor(index: number, palette: string[]): string;
@@ -3,10 +3,6 @@ import { AXChartTooltipData } from '@acorex/charts/chart-tooltip';
3
3
  import { AfterViewInit, OnDestroy, OnInit } from '@angular/core';
4
4
  import { AXLineChartOption, AXLineChartPointClickEvent, AXLineChartValue } from './line-chart.type';
5
5
  import * as i0 from "@angular/core";
6
- export declare const AXLineChartColors: {
7
- defaultColors: string[];
8
- getColor: (index: number, customPalette?: string[]) => string;
9
- };
10
6
  /**
11
7
  * Line Chart Component for rendering data as lines with interactive hover effects and animations
12
8
  */
@@ -38,6 +34,7 @@ export declare class AXLineChartComponent extends NXComponent implements OnInit,
38
34
  }>;
39
35
  protected tooltipData: import("@angular/core").Signal<AXChartTooltipData>;
40
36
  private configToken;
37
+ private chartColors;
41
38
  protected effectiveOptions: import("@angular/core").Signal<{
42
39
  width?: number;
43
40
  height?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/charts",
3
- "version": "19.14.2",
3
+ "version": "19.14.4",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0",