@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.
- package/README.md +72 -0
- package/bar-chart/README.md +3 -0
- package/bar-chart/index.d.ts +3 -0
- package/bar-chart/lib/bar-chart.component.d.ts +123 -0
- package/bar-chart/lib/bar-chart.config.d.ts +6 -0
- package/bar-chart/lib/bar-chart.type.d.ts +44 -0
- package/chart-tooltip/README.md +3 -0
- package/chart-tooltip/index.d.ts +2 -0
- package/chart-tooltip/lib/chart-tooltip.component.d.ts +43 -0
- package/chart-tooltip/lib/chart-tooltip.type.d.ts +7 -0
- package/donut-chart/README.md +3 -0
- package/donut-chart/index.d.ts +3 -0
- package/donut-chart/lib/donut-chart.component.d.ts +143 -0
- package/donut-chart/lib/donut-chart.config.d.ts +6 -0
- package/donut-chart/lib/donut-chart.type.d.ts +25 -0
- package/fesm2022/acorex-charts-bar-chart.mjs +563 -0
- package/fesm2022/acorex-charts-bar-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts-chart-tooltip.mjs +75 -0
- package/fesm2022/acorex-charts-chart-tooltip.mjs.map +1 -0
- package/fesm2022/acorex-charts-donut-chart.mjs +616 -0
- package/fesm2022/acorex-charts-donut-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts-gauge-chart.mjs +548 -0
- package/fesm2022/acorex-charts-gauge-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts-hierarchy-chart.mjs +652 -0
- package/fesm2022/acorex-charts-hierarchy-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts-line-chart.mjs +738 -0
- package/fesm2022/acorex-charts-line-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts.mjs +8 -0
- package/fesm2022/acorex-charts.mjs.map +1 -0
- package/gauge-chart/README.md +3 -0
- package/gauge-chart/index.d.ts +3 -0
- package/gauge-chart/lib/gauge-chart.component.d.ts +110 -0
- package/gauge-chart/lib/gauge-chart.config.d.ts +6 -0
- package/gauge-chart/lib/gauge-chart.type.d.ts +37 -0
- package/hierarchy-chart/README.md +61 -0
- package/hierarchy-chart/index.d.ts +3 -0
- package/hierarchy-chart/lib/hierarchy-chart.component.d.ts +99 -0
- package/hierarchy-chart/lib/hierarchy-chart.config.d.ts +6 -0
- package/hierarchy-chart/lib/hierarchy-chart.type.d.ts +227 -0
- package/index.d.ts +1 -0
- package/line-chart/README.md +3 -0
- package/line-chart/index.d.ts +3 -0
- package/line-chart/lib/line-chart.component.d.ts +96 -0
- package/line-chart/lib/line-chart.config.d.ts +6 -0
- package/line-chart/lib/line-chart.type.d.ts +61 -0
- 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 @@
|
|
|
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,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,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;
|