@acorex/charts 19.13.2

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.
Files changed (46) hide show
  1. package/README.md +72 -0
  2. package/bar-chart/README.md +3 -0
  3. package/bar-chart/index.d.ts +3 -0
  4. package/bar-chart/lib/bar-chart.component.d.ts +123 -0
  5. package/bar-chart/lib/bar-chart.config.d.ts +6 -0
  6. package/bar-chart/lib/bar-chart.type.d.ts +44 -0
  7. package/chart-tooltip/README.md +3 -0
  8. package/chart-tooltip/index.d.ts +2 -0
  9. package/chart-tooltip/lib/chart-tooltip.component.d.ts +43 -0
  10. package/chart-tooltip/lib/chart-tooltip.type.d.ts +7 -0
  11. package/donut-chart/README.md +3 -0
  12. package/donut-chart/index.d.ts +3 -0
  13. package/donut-chart/lib/donut-chart.component.d.ts +143 -0
  14. package/donut-chart/lib/donut-chart.config.d.ts +6 -0
  15. package/donut-chart/lib/donut-chart.type.d.ts +25 -0
  16. package/fesm2022/acorex-charts-bar-chart.mjs +563 -0
  17. package/fesm2022/acorex-charts-bar-chart.mjs.map +1 -0
  18. package/fesm2022/acorex-charts-chart-tooltip.mjs +75 -0
  19. package/fesm2022/acorex-charts-chart-tooltip.mjs.map +1 -0
  20. package/fesm2022/acorex-charts-donut-chart.mjs +616 -0
  21. package/fesm2022/acorex-charts-donut-chart.mjs.map +1 -0
  22. package/fesm2022/acorex-charts-gauge-chart.mjs +548 -0
  23. package/fesm2022/acorex-charts-gauge-chart.mjs.map +1 -0
  24. package/fesm2022/acorex-charts-hierarchy-chart.mjs +652 -0
  25. package/fesm2022/acorex-charts-hierarchy-chart.mjs.map +1 -0
  26. package/fesm2022/acorex-charts-line-chart.mjs +738 -0
  27. package/fesm2022/acorex-charts-line-chart.mjs.map +1 -0
  28. package/fesm2022/acorex-charts.mjs +8 -0
  29. package/fesm2022/acorex-charts.mjs.map +1 -0
  30. package/gauge-chart/README.md +3 -0
  31. package/gauge-chart/index.d.ts +3 -0
  32. package/gauge-chart/lib/gauge-chart.component.d.ts +110 -0
  33. package/gauge-chart/lib/gauge-chart.config.d.ts +6 -0
  34. package/gauge-chart/lib/gauge-chart.type.d.ts +37 -0
  35. package/hierarchy-chart/README.md +61 -0
  36. package/hierarchy-chart/index.d.ts +3 -0
  37. package/hierarchy-chart/lib/hierarchy-chart.component.d.ts +99 -0
  38. package/hierarchy-chart/lib/hierarchy-chart.config.d.ts +6 -0
  39. package/hierarchy-chart/lib/hierarchy-chart.type.d.ts +227 -0
  40. package/index.d.ts +1 -0
  41. package/line-chart/README.md +3 -0
  42. package/line-chart/index.d.ts +3 -0
  43. package/line-chart/lib/line-chart.component.d.ts +96 -0
  44. package/line-chart/lib/line-chart.config.d.ts +6 -0
  45. package/line-chart/lib/line-chart.type.d.ts +61 -0
  46. package/package.json +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-charts-line-chart.mjs","sources":["../../../../libs/charts/line-chart/src/lib/line-chart.config.ts","../../../../libs/charts/line-chart/src/lib/line-chart.component.ts","../../../../libs/charts/line-chart/src/lib/line-chart.component.html","../../../../libs/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 { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\nimport { NXComponent } from '@acorex/components/common';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\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 AXPLineChartColors = {\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 || AXPLineChartColors.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 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\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 this.xAxis.selectAll('text').style('font-size', '11px').style('font-weight', '400').style('fill', '#666');\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 .style('font-size', '13px')\n .style('font-weight', '500')\n .style('fill', '#555')\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 this.yAxis.selectAll('text').style('font-size', '11px').style('font-weight', '400').style('fill', '#666');\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)')\n .attr('x', labelX)\n .attr('y', labelY)\n .style('font-size', '13px')\n .style('font-weight', '500')\n .style('fill', '#555')\n .text(options.yAxisLabel);\n }\n }\n\n if (showGrid) {\n const gridGroup = this.chart.append('g').attr('class', 'ax-line-chart-grid-container');\n\n 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 .selectAll('.tick')\n .style('color', 'rgb(153 153 153 / 30%)');\n\n if (options.showVerticalGrid) {\n 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 .selectAll('.tick')\n .style('color', 'rgb(153 153 153 / 20%)');\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 const allSeriesGroup = this.chart.append('g').attr('class', 'ax-line-chart-all-series');\n const allPointsGroup = this.chart.append('g').attr('class', 'ax-line-chart-all-points');\n\n if (this.effectiveOptions().showCrosshair === true) {\n const crosshairGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-crosshair')\n .style('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\n const lineColor = series.lineColor || AXPLineChartColors.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('d', lineGenerator as any)\n .attr('fill', 'none');\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\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\n area\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100);\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 || AXPLineChartColors.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 data.forEach((series, seriesIndex) => {\n if (!series.data || series.data.length === 0) return;\n\n const lineColor = series.lineColor || AXPLineChartColors.getColor(seriesIndex);\n const pointsGroup = allPointsGroup\n .append('g')\n .attr('class', `ax-line-chart-points ax-line-chart-points-${seriesIndex}`);\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 .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 })\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 })\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 });\n }\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: { x: number | string; y: number },\n series: AXLineChartData,\n seriesIndex: number,\n ): void {\n if (this.effectiveOptions().showTooltip !== false) {\n const color = series.lineColor || AXPLineChartColors.getColor(seriesIndex);\n\n this._tooltipData.set({\n title: 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').style('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', '#999')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .style('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', '#999')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .style('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 let y = event.clientY - container.top;\n\n if (x + tooltipRect.width + 10 > container.width) {\n x = x - tooltipRect.width - 10;\n } else {\n x = x + 10;\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: { x: number | string; y: 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 const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'axp-line-chart-no-data-message')\n .style('width', '100%')\n .style('height', '100%')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('align-items', 'center')\n .style('justify-content', 'center')\n .style('text-align', 'center');\n\n messageContainer\n .append('div')\n .attr('class', 'axp-line-chart-no-data-icon')\n .style('margin-bottom', '10px')\n .style('color', 'var(--ax-text-muted, #999)')\n .html('<i class=\"fa-light fa-chart-line fa-2x\"></i>');\n\n messageContainer\n .append('div')\n .attr('class', 'axp-line-chart-no-data-text')\n .style('font-size', '16px')\n .style('font-weight', '600')\n .style('color', 'var(--ax-text-color, #333)')\n .text('No data available');\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: '',\n seriesName: '',\n color: '',\n items: overlappingPoints.map(({ point, series, seriesIndex }) => {\n const color = series.lineColor || AXPLineChartColors.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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"}
@@ -0,0 +1,8 @@
1
+ const AX_CHARTS = 'ACOREX_CHARTS';
2
+
3
+ /**
4
+ * Generated bundle index. Do not edit.
5
+ */
6
+
7
+ export { AX_CHARTS };
8
+ //# sourceMappingURL=acorex-charts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-charts.mjs","sources":["../../../../libs/charts/src/index.ts","../../../../libs/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;;;;"}
@@ -0,0 +1,3 @@
1
+ # @acorex/chart/gauge-chart
2
+
3
+ Secondary entry point of `@acorex/chart`. It can be used by importing from `@acorex/chart/gauge-chart`.
@@ -0,0 +1,3 @@
1
+ export * from './lib/gauge-chart.component';
2
+ export * from './lib/gauge-chart.config';
3
+ export * from './lib/gauge-chart.type';
@@ -0,0 +1,110 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { AXPGaugeChartOption } from './gauge-chart.type';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Gauge Chart Component
6
+ * Renders a semi-circular gauge chart with animated needle and thresholds
7
+ */
8
+ export declare class AXGaugeChartComponent implements OnDestroy {
9
+ /** Chart value input */
10
+ value: import("@angular/core").InputSignal<number>;
11
+ /** Chart options input */
12
+ options: import("@angular/core").InputSignal<AXPGaugeChartOption>;
13
+ private readonly chartContainerEl;
14
+ private svgElement;
15
+ protected d3: typeof import('d3');
16
+ private _initialized;
17
+ private _rendered;
18
+ private _prevValue;
19
+ private _prevOptionsString;
20
+ private configToken;
21
+ protected effectiveOptions: import("@angular/core").Signal<{
22
+ minValue?: number;
23
+ maxValue?: number;
24
+ width?: number;
25
+ height?: number;
26
+ gaugeWidth?: number;
27
+ cornerRadius?: number;
28
+ backgroundColor?: string;
29
+ baseColor?: string;
30
+ showValue?: boolean;
31
+ valueColor?: string;
32
+ valueFontSize?: number;
33
+ labelFontSize?: number;
34
+ thresholds?: {
35
+ value: number;
36
+ color: string;
37
+ }[];
38
+ label?: string;
39
+ animationDuration?: number;
40
+ animationEasing?: "linear" | "ease" | "ease-in" | "ease-out" | "ease-in-out" | "cubic" | "cubic-in" | "cubic-out" | "cubic-in-out";
41
+ }>;
42
+ constructor();
43
+ ngOnDestroy(): void;
44
+ /**
45
+ * Loads D3.js dynamically
46
+ */
47
+ protected loadD3(): Promise<void>;
48
+ /**
49
+ * Creates the gauge chart with all elements
50
+ */
51
+ protected createChart(): void;
52
+ /**
53
+ * Updates the chart when options change
54
+ */
55
+ protected updateChart(): void;
56
+ /**
57
+ * Updates only the value display and dial position without recreating the chart
58
+ */
59
+ protected updateValueAndDial(value: number): void;
60
+ /**
61
+ * Cleans up chart resources
62
+ */
63
+ protected cleanupChart(): void;
64
+ /**
65
+ * Creates gradient definitions for thresholds
66
+ */
67
+ private createGradients;
68
+ /**
69
+ * Draws the background arc
70
+ */
71
+ private drawBackgroundArc;
72
+ /**
73
+ * Draws the threshold arcs with colors
74
+ */
75
+ private drawThresholds;
76
+ /**
77
+ * Draws tick marks and labels around the gauge
78
+ */
79
+ private drawTicks;
80
+ /**
81
+ * Draws the value and label text in the center
82
+ */
83
+ private drawValueDisplay;
84
+ /**
85
+ * Draws the dial/needle pointing to the current value with animation
86
+ */
87
+ private drawDial;
88
+ /**
89
+ * Gets the appropriate D3 easing function based on the option string
90
+ */
91
+ private getEasingFunction;
92
+ /**
93
+ * Creates a path string for the needle
94
+ */
95
+ private createNeedlePath;
96
+ /**
97
+ * Scales a value to an angle (in radians)
98
+ */
99
+ private scaleValueToAngle;
100
+ /**
101
+ * Scales a value to an angle for color arcs (in radians)
102
+ */
103
+ private scaleValueToColorAngle;
104
+ /**
105
+ * Converts radians to degrees
106
+ */
107
+ private radiansToDegrees;
108
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXGaugeChartComponent, never>;
109
+ static ɵcmp: i0.ɵɵComponentDeclaration<AXGaugeChartComponent, "ax-gauge-chart", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
110
+ }
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AXPGaugeChartOption } from './gauge-chart.type';
3
+ export declare const AXGaugeChartDefaultConfig: AXPGaugeChartOption;
4
+ export declare const AX_GAUGE_CHART_CONFIG: InjectionToken<AXPGaugeChartOption>;
5
+ export type PartialGaugeChartConfig = Partial<AXPGaugeChartOption>;
6
+ export declare function gaugeChartConfig(config?: PartialGaugeChartConfig): AXPGaugeChartOption;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Gauge chart data item interface
3
+ */
4
+ export interface AXPGaugeChartData {
5
+ id: string;
6
+ value: number;
7
+ color?: string;
8
+ }
9
+ /**
10
+ * Gauge chart options interface
11
+ */
12
+ export interface AXPGaugeChartOption {
13
+ minValue?: number;
14
+ maxValue?: number;
15
+ width?: number;
16
+ height?: number;
17
+ gaugeWidth?: number;
18
+ cornerRadius?: number;
19
+ backgroundColor?: string;
20
+ baseColor?: string;
21
+ showValue?: boolean;
22
+ valueColor?: string;
23
+ valueFontSize?: number;
24
+ labelFontSize?: number;
25
+ thresholds?: {
26
+ value: number;
27
+ color: string;
28
+ }[];
29
+ label?: string;
30
+ animationDuration?: number;
31
+ animationEasing?: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'cubic' | 'cubic-in' | 'cubic-out' | 'cubic-in-out';
32
+ }
33
+ /**
34
+ * Gauge chart data type
35
+ * Represents a single gauge value
36
+ */
37
+ export type AXPGaugeChartValue = number;
@@ -0,0 +1,61 @@
1
+ # Acorex Hierarchy Tree Chart
2
+
3
+ A responsive, interactive tree chart component for visualizing hierarchical data structures.
4
+
5
+ ## Features
6
+
7
+ - Vertical or horizontal orientation
8
+ - Collapsible nodes
9
+ - Customizable styling
10
+ - Interactive tooltips
11
+ - Zoom and pan support
12
+ - Multiple link styles (curved, straight, elbow)
13
+
14
+ ## Usage
15
+
16
+ ```typescript
17
+ // Component template
18
+ <ax-hierarchy-chart
19
+ [data]="treeData()"
20
+ [options]="chartOptions()"
21
+ (nodeClick)="handleNodeClick($event)"
22
+ (nodeCollapse)="handleNodeCollapse($event)"
23
+ ></ax-hierarchy-chart>
24
+
25
+ // Component class
26
+ import { AXHierarchyTreeData, AXHierarchyTreeOption } from '@acorex/chart/hierarchy-chart';
27
+
28
+ treeData = signal<AXHierarchyTreeData>({
29
+ rootNodes: [
30
+ {
31
+ id: 'root',
32
+ label: 'Root',
33
+ children: [
34
+ {
35
+ id: 'child1',
36
+ label: 'Child 1',
37
+ children: [
38
+ { id: 'child1-1', label: 'Child 1.1' },
39
+ { id: 'child1-2', label: 'Child 1.2' }
40
+ ]
41
+ },
42
+ {
43
+ id: 'child2',
44
+ label: 'Child 2',
45
+ children: [
46
+ { id: 'child2-1', label: 'Child 2.1' }
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ ]
52
+ });
53
+
54
+ chartOptions = signal<AXHierarchyTreeOption>({
55
+ orientation: 'vertical',
56
+ linkStyle: 'curved',
57
+ showTooltip: true,
58
+ expandOnClick: true,
59
+ enableZoom: true
60
+ });
61
+ ```
@@ -0,0 +1,3 @@
1
+ export * from './lib/hierarchy-chart.component';
2
+ export * from './lib/hierarchy-chart.config';
3
+ export * from './lib/hierarchy-chart.type';
@@ -0,0 +1,99 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { AXHierarchyChartClickEvent, AXHierarchyChartNode, AXHierarchyChartNodeContext, AXHierarchyChartOption, AXHierarchyChartToggleEvent } from './hierarchy-chart.type';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * A highly customizable hierarchical visualization component that can be used for:
6
+ * - Organization charts
7
+ * - Tree diagrams
8
+ * - Dependency visualizations
9
+ * - Process flows
10
+ *
11
+ * Supports both default node styling and custom node templates.
12
+ */
13
+ export declare class AXHierarchyChartComponent {
14
+ private chartContainer;
15
+ customNodeTemplate: import("@angular/core").Signal<TemplateRef<AXHierarchyChartNodeContext>>;
16
+ private ngZone;
17
+ private viewContainerRef;
18
+ private configToken;
19
+ private d3;
20
+ private _expandedNodes;
21
+ private _initialized;
22
+ private _rendered;
23
+ private _dimensions;
24
+ private _nodeElements;
25
+ private _chartData;
26
+ data: import("@angular/core").InputSignal<AXHierarchyChartNode | AXHierarchyChartNode[]>;
27
+ options: import("@angular/core").InputSignal<AXHierarchyChartOption>;
28
+ nodeTemplate: import("@angular/core").InputSignal<TemplateRef<AXHierarchyChartNodeContext>>;
29
+ itemClick: import("@angular/core").OutputEmitterRef<AXHierarchyChartClickEvent>;
30
+ nodeToggle: import("@angular/core").OutputEmitterRef<AXHierarchyChartToggleEvent>;
31
+ protected processedData: import("@angular/core").Signal<AXHierarchyChartNode>;
32
+ protected hasCustomTemplate: import("@angular/core").Signal<boolean>;
33
+ protected effectiveOptions: import("@angular/core").Signal<{
34
+ width?: number;
35
+ height?: number;
36
+ margin?: import("./hierarchy-chart.type").AXHierarchyChartMargin;
37
+ nodeRadius?: number;
38
+ nodeColor?: string;
39
+ nodeStrokeColor?: string;
40
+ nodeStrokeWidth?: number;
41
+ linkColor?: string;
42
+ linkWidth?: number;
43
+ linkStyle?: "straight" | "curved" | "rounded" | "step";
44
+ showTooltip?: boolean;
45
+ direction?: "vertical" | "horizontal";
46
+ nodeWidth?: number;
47
+ nodeHeight?: number;
48
+ nodeSpacingX?: number;
49
+ nodeSpacingY?: number;
50
+ collapsible?: boolean;
51
+ expandAll?: boolean;
52
+ className?: string;
53
+ animationDuration?: number;
54
+ animationEasing?: "linear" | "ease" | "ease-in" | "ease-out" | "ease-in-out" | "cubic" | "cubic-in" | "cubic-out" | "cubic-in-out";
55
+ }>;
56
+ constructor();
57
+ /**
58
+ * Initialize the expanded state for all nodes
59
+ */
60
+ private initializeExpandedState;
61
+ /**
62
+ * Dynamically load D3.js to reduce initial bundle size
63
+ */
64
+ protected loadD3(): Promise<void>;
65
+ /**
66
+ * Update dimensions based on container size
67
+ */
68
+ private updateDimensions;
69
+ /**
70
+ * Create and render the hierarchy chart
71
+ */
72
+ private createChart;
73
+ /**
74
+ * Toggle node expansion state
75
+ */
76
+ toggleNode(nodeId: string): void;
77
+ /**
78
+ * Update just the toggle indicator without redrawing the chart
79
+ */
80
+ private updateToggleIndicator;
81
+ /**
82
+ * Find a node by ID
83
+ */
84
+ private findNodeById;
85
+ /**
86
+ * Handle node click events
87
+ */
88
+ private handleNodeClick;
89
+ /**
90
+ * Clear existing chart
91
+ */
92
+ private clearChart;
93
+ /**
94
+ * Get D3 easing function from string name
95
+ */
96
+ private getEasingFunction;
97
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXHierarchyChartComponent, never>;
98
+ static ɵcmp: i0.ɵɵComponentDeclaration<AXHierarchyChartComponent, "ax-hierarchy-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "nodeToggle": "nodeToggle"; }, ["customNodeTemplate"], never, true, never>;
99
+ }
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AXHierarchyChartOption } from './hierarchy-chart.type';
3
+ export declare const AXHierarchyChartDefaultConfig: AXHierarchyChartOption;
4
+ export declare const AX_HIERARCHY_CHART_CONFIG: InjectionToken<AXHierarchyChartOption>;
5
+ export type PartialHierarchyChartConfig = Partial<AXHierarchyChartOption>;
6
+ export declare function hierarchyChartConfig(config?: PartialHierarchyChartConfig): AXHierarchyChartOption;