@acorex/charts 21.0.1-next.6 → 21.0.1-next.60

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 (33) hide show
  1. package/fesm2022/acorex-charts-bar-chart.mjs +37 -23
  2. package/fesm2022/acorex-charts-bar-chart.mjs.map +1 -1
  3. package/fesm2022/acorex-charts-chart-legend.mjs +4 -4
  4. package/fesm2022/acorex-charts-chart-legend.mjs.map +1 -1
  5. package/fesm2022/acorex-charts-chart-tooltip.mjs +13 -4
  6. package/fesm2022/acorex-charts-chart-tooltip.mjs.map +1 -1
  7. package/fesm2022/acorex-charts-donut-chart.mjs +83 -99
  8. package/fesm2022/acorex-charts-donut-chart.mjs.map +1 -1
  9. package/fesm2022/acorex-charts-funnel-chart.mjs +275 -0
  10. package/fesm2022/acorex-charts-funnel-chart.mjs.map +1 -0
  11. package/fesm2022/acorex-charts-gauge-chart.mjs +157 -86
  12. package/fesm2022/acorex-charts-gauge-chart.mjs.map +1 -1
  13. package/fesm2022/acorex-charts-heatmap-chart.mjs +281 -0
  14. package/fesm2022/acorex-charts-heatmap-chart.mjs.map +1 -0
  15. package/fesm2022/acorex-charts-hierarchy-chart.mjs +3 -3
  16. package/fesm2022/acorex-charts-hierarchy-chart.mjs.map +1 -1
  17. package/fesm2022/acorex-charts-line-chart.mjs +37 -23
  18. package/fesm2022/acorex-charts-line-chart.mjs.map +1 -1
  19. package/fesm2022/acorex-charts.mjs +3 -3
  20. package/fesm2022/acorex-charts.mjs.map +1 -1
  21. package/funnel-chart/README.md +3 -0
  22. package/heatmap-chart/README.md +3 -0
  23. package/package.json +19 -13
  24. package/{bar-chart/index.d.ts → types/acorex-charts-bar-chart.d.ts} +7 -6
  25. package/{chart-tooltip/index.d.ts → types/acorex-charts-chart-tooltip.d.ts} +1 -0
  26. package/{donut-chart/index.d.ts → types/acorex-charts-donut-chart.d.ts} +12 -11
  27. package/types/acorex-charts-funnel-chart.d.ts +108 -0
  28. package/{gauge-chart/index.d.ts → types/acorex-charts-gauge-chart.d.ts} +16 -5
  29. package/types/acorex-charts-heatmap-chart.d.ts +111 -0
  30. package/{hierarchy-chart/index.d.ts → types/acorex-charts-hierarchy-chart.d.ts} +4 -3
  31. package/{line-chart/index.d.ts → types/acorex-charts-line-chart.d.ts} +5 -1
  32. /package/{chart-legend/index.d.ts → types/acorex-charts-chart-legend.d.ts} +0 -0
  33. /package/{index.d.ts → types/acorex-charts.d.ts} +0 -0
@@ -61,6 +61,8 @@ class AXGaugeChartComponent extends AXChartComponent {
61
61
  title: '',
62
62
  value: '',
63
63
  }, ...(ngDevMode ? [{ debugName: "_tooltipData" }] : []));
64
+ _tooltipRafId = null;
65
+ _pendingTooltipCoords = null;
64
66
  // Expose tooltip signals as read-only for the template
65
67
  tooltipVisible = this._tooltipVisible.asReadonly();
66
68
  tooltipPosition = this._tooltipPosition.asReadonly();
@@ -79,6 +81,10 @@ class AXGaugeChartComponent extends AXChartComponent {
79
81
  HALF_CIRCLE_RADIANS = Math.PI;
80
82
  QUARTER_CIRCLE_RADIANS = Math.PI / 2;
81
83
  DEGREES_PER_RADIAN = 180 / Math.PI;
84
+ CHART_EDGE_PADDING = 12;
85
+ TICK_LABEL_CHAR_WIDTH_RATIO = 0.62;
86
+ TICK_LABEL_SIDE_PADDING = 6;
87
+ LABEL_TICK_CLEARANCE = 4;
82
88
  constructor() {
83
89
  super();
84
90
  // Dynamically load D3 and initialize the chart when the component is ready
@@ -163,29 +169,36 @@ class AXGaugeChartComponent extends AXChartComponent {
163
169
  // Calculate margin as percentage of size (5-8% with reasonable bounds)
164
170
  const marginRatio = 0.08;
165
171
  const margin = Math.max(5, Math.min(size * marginRatio, 30));
166
- // Calculate space needed for ticks and labels (increased for larger font sizes)
167
- const tickLabelSpace = Math.max(12, Math.min(size * 0.12, 40));
172
+ const tickCount = this.getTickCount(size);
173
+ const tickFontPx = this.getTickFontSize(size);
174
+ const maxTickLabelWidth = this.estimateMaxTickLabelWidth(tickCount, minValue, maxValue, tickFontPx);
175
+ const tickLength = Math.max(4, Math.min((size / 2) * 0.12, 14));
176
+ // Keep labels closer to the gauge arc while preserving readability.
177
+ const labelGap = Math.max(6, Math.min((size / 2) * 0.06, 14));
178
+ const labelOffsetFromTickEnd = labelGap + tickFontPx * 0.35;
179
+ const tickLabelSpace = tickLength + labelOffsetFromTickEnd + tickFontPx;
168
180
  const totalVerticalSpace = size / 2 + tickLabelSpace;
169
- // Calculate horizontal padding for tick labels (they extend beyond gauge edges)
170
- // Estimate based on font size - tick labels are roughly 2-3 characters wide
171
- const estimatedTickFontSize = Math.max(14, Math.min(18, Math.floor(size / 35)));
172
- const horizontalPadding = Math.max(20, estimatedTickFontSize * 1.5);
181
+ // Labels at edge ticks use start/end anchors, so they can extend by near full width.
182
+ const horizontalPadding = Math.max(18, maxTickLabelWidth + 8);
173
183
  const totalWidth = size + horizontalPadding * 2;
184
+ const viewBoxWidth = totalWidth + this.CHART_EDGE_PADDING * 2;
185
+ const viewBoxHeight = totalVerticalSpace + this.CHART_EDGE_PADDING * 2;
174
186
  // Set up SVG with responsive viewBox that accounts for overflow
175
187
  const svg = this.d3
176
188
  .select(this.svgElement)
177
189
  .attr('width', '100%')
178
190
  .attr('height', '100%')
179
- .attr('viewBox', `0 0 ${totalWidth} ${totalVerticalSpace}`)
191
+ .attr('viewBox', `0 0 ${viewBoxWidth} ${viewBoxHeight}`)
180
192
  .attr('preserveAspectRatio', 'xMidYMid meet');
181
193
  // Create a group for the chart centered horizontally with padding, positioned to show only the top half
182
194
  const chartGroup = svg
183
195
  .append('g')
184
- .attr('transform', `translate(${size / 2 + horizontalPadding}, ${size / 2 - margin})`);
196
+ .attr('transform', `translate(${size / 2 + horizontalPadding + this.CHART_EDGE_PADDING}, ${size / 2 - margin + this.CHART_EDGE_PADDING})`);
185
197
  // Define gauge parameters
186
198
  const radius = size / 2 - margin;
187
- const desiredGaugeWidth = typeof gaugeWidth === 'number' && !Number.isNaN(gaugeWidth) ? gaugeWidth : size * 0.12;
188
- const clampedGaugeWidth = Math.max(size * 0.06, Math.min(desiredGaugeWidth, size * 0.2));
199
+ const desiredGaugeWidth = typeof gaugeWidth === 'number' && !Number.isNaN(gaugeWidth) ? gaugeWidth : 30;
200
+ // Respect explicit gaugeWidth in px with sane absolute bounds.
201
+ const clampedGaugeWidth = Math.max(6, Math.min(desiredGaugeWidth, radius * 0.7));
189
202
  const innerRadius = radius - clampedGaugeWidth;
190
203
  const outerRadius = radius;
191
204
  // Create gradient definitions
@@ -197,7 +210,7 @@ class AXGaugeChartComponent extends AXChartComponent {
197
210
  this.drawThresholds(chartGroup, innerRadius, outerRadius, minValue, maxValue, thresholds, cornerRadius);
198
211
  }
199
212
  // Draw tick marks
200
- this.drawTicks(chartGroup, outerRadius, minValue, maxValue, size);
213
+ this.drawTicks(chartGroup, outerRadius, minValue, maxValue, size, tickCount, tickFontPx);
201
214
  // Draw the dial/needle with animation
202
215
  this.drawDial(chartGroup, radius, this.value(), minValue, maxValue, animationDuration);
203
216
  // Draw the value display (after the dial so it's on top)
@@ -393,22 +406,24 @@ class AXGaugeChartComponent extends AXChartComponent {
393
406
  });
394
407
  this._tooltipVisible.set(true);
395
408
  }
396
- /**
397
- * Updates the tooltip position based on the mouse event
398
- * For gauge charts, we need simpler coordinate handling since D3 events are already in container coordinates
399
- */
400
409
  updateTooltipPosition(event) {
401
- const containerEl = this.chartContainerEl()?.nativeElement;
402
- if (!containerEl)
410
+ this._pendingTooltipCoords = { x: event.clientX, y: event.clientY };
411
+ if (this._tooltipRafId != null)
403
412
  return;
404
- const rect = containerEl.getBoundingClientRect();
405
- const tooltipEl = containerEl.querySelector('.chart-tooltip');
406
- const tooltipRect = tooltipEl?.getBoundingClientRect() ?? null;
407
- // Position the tooltip slightly above and to the right of the cursor for better visibility
408
- const tooltipX = event.clientX + 10;
409
- const tooltipY = event.clientY - 10;
410
- const pos = computeTooltipPosition(rect, tooltipRect, tooltipX, tooltipY, this.TOOLTIP_GAP);
411
- this._tooltipPosition.set(pos);
413
+ this._tooltipRafId = requestAnimationFrame(() => {
414
+ this._tooltipRafId = null;
415
+ const coords = this._pendingTooltipCoords;
416
+ if (!coords)
417
+ return;
418
+ const containerEl = this.chartContainerEl()?.nativeElement;
419
+ if (!containerEl)
420
+ return;
421
+ const rect = containerEl.getBoundingClientRect();
422
+ const tooltipEl = containerEl.querySelector('.chart-tooltip');
423
+ const tooltipRect = tooltipEl?.getBoundingClientRect() ?? null;
424
+ const pos = computeTooltipPosition(rect, tooltipRect, coords.x + 10, coords.y - 10, this.TOOLTIP_GAP);
425
+ this._tooltipPosition.set(pos);
426
+ });
412
427
  }
413
428
  /**
414
429
  * Hides the tooltip
@@ -420,6 +435,11 @@ class AXGaugeChartComponent extends AXChartComponent {
420
435
  * Cleans up chart resources
421
436
  */
422
437
  cleanupChart() {
438
+ if (this._tooltipRafId != null) {
439
+ cancelAnimationFrame(this._tooltipRafId);
440
+ this._tooltipRafId = null;
441
+ }
442
+ this._pendingTooltipCoords = null;
423
443
  if (this.svgElement) {
424
444
  this.svgElement.remove();
425
445
  this.svgElement = null;
@@ -476,79 +496,130 @@ class AXGaugeChartComponent extends AXChartComponent {
476
496
  /**
477
497
  * Draws tick marks and labels around the gauge
478
498
  */
479
- drawTicks(chartGroup, radius, minValue, maxValue, size) {
480
- // Dynamically choose tick count based on chart size (reduced for better spacing)
481
- let tickCount = 5;
482
- if (size < 200)
483
- tickCount = 3; // Very small: only show min, mid, max
484
- else if (size < 300)
485
- tickCount = 4;
486
- else if (size < 400)
487
- tickCount = 5;
488
- else if (size > 520)
489
- tickCount = 7;
490
- // Scale tick length and label offset proportionally to size
499
+ drawTicks(chartGroup, radius, minValue, maxValue, size, tickCount, tickFontPx) {
491
500
  const tickLength = Math.max(4, Math.min(radius * 0.12, 14));
492
- // Increased label offset to prevent overlap with tick lines and wide labels (like 100M)
493
- const labelOffset = Math.max(22, Math.min(radius * 0.28, 45));
494
- // Create a group for the ticks
501
+ const baseLabelOffset = this.getBaseLabelOffset(radius, tickLength, tickFontPx);
495
502
  const tickGroup = chartGroup.append('g').attr('class', 'ticks');
496
- // Generate tick values
497
503
  const tickValues = [];
498
504
  const step = (maxValue - minValue) / (tickCount - 1);
499
505
  for (let i = 0; i < tickCount; i++) {
500
506
  tickValues.push(minValue + i * step);
501
507
  }
502
- // Create ticks and labels
503
- tickValues.forEach((tick) => {
504
- // Calculate angle for this tick
508
+ const tickMetrics = tickValues.map((tick) => {
505
509
  const angle = this.scaleValueToAngle(tick, minValue, maxValue);
506
- const radians = angle - this.QUARTER_CIRCLE_RADIANS; // Adjust for starting at bottom (-90 degrees)
507
- // Calculate positions
508
- const x1 = Math.cos(radians) * (radius + 5);
509
- const y1 = Math.sin(radians) * (radius + 5);
510
- const x2 = Math.cos(radians) * (radius + tickLength);
511
- const y2 = Math.sin(radians) * (radius + tickLength);
512
- // Calculate label position
513
- const labelX = Math.cos(radians) * (radius + labelOffset);
514
- const labelY = Math.sin(radians) * (radius + labelOffset);
515
- // Draw tick line
510
+ const radians = angle - this.QUARTER_CIRCLE_RADIANS;
511
+ return {
512
+ radians,
513
+ cos: Math.cos(radians),
514
+ sin: Math.sin(radians),
515
+ label: this.formatTickValue(tick, minValue, maxValue),
516
+ };
517
+ });
518
+ tickMetrics.forEach((metric) => {
516
519
  tickGroup
517
520
  .append('line')
518
- .attr('x1', x1)
519
- .attr('y1', y1)
520
- .attr('x2', x2)
521
- .attr('y2', y2)
521
+ .attr('x1', metric.cos * (radius + 5))
522
+ .attr('y1', metric.sin * (radius + 5))
523
+ .attr('x2', metric.cos * (radius + tickLength))
524
+ .attr('y2', metric.sin * (radius + tickLength))
522
525
  .attr('stroke', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.5)')
523
526
  .attr('stroke-width', 2);
524
- // Add tick label with dynamic font size (minimum 14px)
525
- const tickFontPx = Math.max(14, Math.min(18, Math.floor(size / 35)));
526
- // Smart formatting: preserve decimals for small ranges, round for large values
527
- const valueRange = maxValue - minValue;
528
- let formattedValue;
529
- if (valueRange <= 10) {
530
- // Small range: show up to 2 decimal places, remove trailing zeros
531
- formattedValue = tick.toFixed(2).replace(/\.?0+$/, '');
532
- }
533
- else if (valueRange < 1000) {
534
- // Medium range: show 1 decimal if needed
535
- formattedValue = tick % 1 === 0 ? tick.toString() : tick.toFixed(1);
527
+ });
528
+ const textSelection = tickGroup
529
+ .selectAll('text.gauge-tick-label')
530
+ .data(tickMetrics)
531
+ .enter()
532
+ .append('text')
533
+ .attr('class', 'gauge-tick-label')
534
+ .attr('x', 0)
535
+ .attr('y', 0)
536
+ .attr('fill', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.7)')
537
+ .style('font-size', `${tickFontPx}px`)
538
+ .text((d) => d.label);
539
+ textSelection.each((d, index, nodes) => {
540
+ const node = nodes[index];
541
+ let bboxWidth = this.estimateLabelWidth(d.label, tickFontPx);
542
+ let bboxHeight = tickFontPx;
543
+ try {
544
+ const bbox = node.getBBox();
545
+ if (bbox.width > 0)
546
+ bboxWidth = bbox.width;
547
+ if (bbox.height > 0)
548
+ bboxHeight = bbox.height;
536
549
  }
537
- else {
538
- // Large range: use abbreviated format (K, M, B)
539
- formattedValue = formatLargeNumber(Math.round(tick));
550
+ catch {
551
+ // Keep fallback estimates.
540
552
  }
541
- tickGroup
542
- .append('text')
543
- .attr('x', labelX)
544
- .attr('y', labelY)
545
- .attr('text-anchor', 'middle')
546
- .attr('dominant-baseline', 'middle')
547
- .attr('fill', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.7)')
548
- .style('font-size', `${tickFontPx}px`)
549
- .text(formattedValue);
553
+ const anchor = this.getTickLabelAnchor(d.cos);
554
+ const nearEdgeExtent = this.getNearEdgeProjection(anchor, d.cos, d.sin, bboxWidth, bboxHeight);
555
+ const requiredOffset = tickLength + this.LABEL_TICK_CLEARANCE + nearEdgeExtent;
556
+ const effectiveLabelOffset = Math.max(baseLabelOffset, requiredOffset);
557
+ const nudge = tickFontPx * 0.1;
558
+ const x = d.cos * (radius + effectiveLabelOffset) + (anchor === 'start' ? nudge : anchor === 'end' ? -nudge : 0);
559
+ const y = d.sin * (radius + effectiveLabelOffset);
560
+ this.d3.select(node).attr('x', x).attr('y', y).attr('text-anchor', anchor).attr('dominant-baseline', 'middle');
550
561
  });
551
562
  }
563
+ getTickCount(size) {
564
+ if (size < 200)
565
+ return 3;
566
+ if (size < 300)
567
+ return 4;
568
+ if (size < 400)
569
+ return 5;
570
+ if (size > 520)
571
+ return 7;
572
+ return 5;
573
+ }
574
+ getTickFontSize(size) {
575
+ return Math.max(14, Math.min(18, Math.floor(size / 35)));
576
+ }
577
+ getBaseLabelOffset(radius, tickLength, tickFontPx) {
578
+ const labelGap = Math.max(6, Math.min(radius * 0.06, 14));
579
+ return tickLength + labelGap + tickFontPx * 0.2;
580
+ }
581
+ getTickLabelAnchor(cosValue) {
582
+ if (cosValue > 0.35)
583
+ return 'start';
584
+ if (cosValue < -0.35)
585
+ return 'end';
586
+ return 'middle';
587
+ }
588
+ getNearEdgeProjection(anchor, cosValue, sinValue, bboxWidth, bboxHeight) {
589
+ const absCos = Math.abs(cosValue);
590
+ const absSin = Math.abs(sinValue);
591
+ const halfHeightProjection = absSin * (bboxHeight / 2);
592
+ // For start/end anchored labels on edge ticks, the nearest side is close to the anchor point.
593
+ if (anchor === 'start' || anchor === 'end') {
594
+ return halfHeightProjection + absCos * this.TICK_LABEL_SIDE_PADDING;
595
+ }
596
+ // For centered labels, nearest side includes half text width projection.
597
+ return absCos * (bboxWidth / 2) + halfHeightProjection;
598
+ }
599
+ formatTickValue(tick, minValue, maxValue) {
600
+ const valueRange = maxValue - minValue;
601
+ if (valueRange <= 10) {
602
+ return tick.toFixed(2).replace(/\.?0+$/, '');
603
+ }
604
+ if (valueRange < 1000) {
605
+ return tick % 1 === 0 ? tick.toString() : tick.toFixed(1);
606
+ }
607
+ return formatLargeNumber(Math.round(tick));
608
+ }
609
+ estimateLabelWidth(label, tickFontPx) {
610
+ return label.length * tickFontPx * this.TICK_LABEL_CHAR_WIDTH_RATIO + this.TICK_LABEL_SIDE_PADDING;
611
+ }
612
+ estimateMaxTickLabelWidth(tickCount, minValue, maxValue, tickFontPx) {
613
+ if (tickCount <= 1)
614
+ return tickFontPx;
615
+ const step = (maxValue - minValue) / (tickCount - 1);
616
+ let maxChars = 0;
617
+ for (let i = 0; i < tickCount; i++) {
618
+ const label = this.formatTickValue(minValue + i * step, minValue, maxValue);
619
+ maxChars = Math.max(maxChars, label.length);
620
+ }
621
+ return maxChars * tickFontPx * this.TICK_LABEL_CHAR_WIDTH_RATIO + this.TICK_LABEL_SIDE_PADDING;
622
+ }
552
623
  /**
553
624
  * Draws the value and label text in the center
554
625
  */
@@ -662,12 +733,12 @@ class AXGaugeChartComponent extends AXChartComponent {
662
733
  radiansToDegrees(radians) {
663
734
  return radians * this.DEGREES_PER_RADIAN;
664
735
  }
665
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXGaugeChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
666
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.15", type: AXGaugeChartComponent, isStandalone: true, selector: "ax-gauge-chart", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-gauge-chart\" role=\"img\" #chartContainer></div>\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\"></ax-chart-tooltip>\n", styles: ["ax-gauge-chart{display:block;width:100%;height:100%;min-height:200px;--ax-comp-gauge-chart-bg-color: 0, 0, 0, 0;--ax-comp-gauge-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-gauge-chart-track-color: var(--ax-sys-color-dark-surface);--ax-comp-gauge-chart-needle-color: var(--ax-sys-color-primary-500)}ax-gauge-chart .ax-gauge-chart{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgba(var(--ax-comp-gauge-chart-bg-color));border-radius:.5rem}ax-gauge-chart .ax-gauge-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-gauge-chart .ax-gauge-chart svg g:has(text){font-family:inherit}ax-gauge-chart .ax-gauge-chart-no-data-message{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:1rem;width:100%;height:100%;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgb(var(--ax-comp-gauge-chart-bg-color))}ax-gauge-chart .ax-gauge-chart-no-data-icon{margin-bottom:.75rem;color:rgba(var(--ax-comp-gauge-chart-text-color),.6)}ax-gauge-chart .ax-gauge-chart-no-data-text{font-weight:600;color:rgb(var(--ax-comp-gauge-chart-text-color))}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
736
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXGaugeChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
737
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.3", type: AXGaugeChartComponent, isStandalone: true, selector: "ax-gauge-chart", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-gauge-chart\" role=\"img\" #chartContainer></div>\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\"></ax-chart-tooltip>\n", styles: ["ax-gauge-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);--ax-comp-gauge-chart-bg-color: 0, 0, 0, 0;--ax-comp-gauge-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-gauge-chart-track-color: var(--ax-sys-color-dark-surface);--ax-comp-gauge-chart-needle-color: var(--ax-sys-color-primary-500)}ax-gauge-chart .ax-gauge-chart{position:relative;width:100%;height:100%;box-sizing:border-box;padding:clamp(.5rem,1.2vw,.875rem);overflow:hidden;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgba(var(--ax-comp-gauge-chart-bg-color));border-radius:.5rem}ax-gauge-chart .ax-gauge-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden}ax-gauge-chart .ax-gauge-chart svg g:has(text){font-family:inherit}ax-gauge-chart .ax-gauge-chart-no-data-message{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:1rem;width:100%;height:100%;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgb(var(--ax-comp-gauge-chart-bg-color))}ax-gauge-chart .ax-gauge-chart-no-data-icon{margin-bottom:.75rem;color:rgba(var(--ax-comp-gauge-chart-text-color),.6)}ax-gauge-chart .ax-gauge-chart-no-data-text{font-weight:600;color:rgb(var(--ax-comp-gauge-chart-text-color))}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
667
738
  }
668
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXGaugeChartComponent, decorators: [{
739
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXGaugeChartComponent, decorators: [{
669
740
  type: Component,
670
- args: [{ selector: 'ax-gauge-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-gauge-chart\" role=\"img\" #chartContainer></div>\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\"></ax-chart-tooltip>\n", styles: ["ax-gauge-chart{display:block;width:100%;height:100%;min-height:200px;--ax-comp-gauge-chart-bg-color: 0, 0, 0, 0;--ax-comp-gauge-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-gauge-chart-track-color: var(--ax-sys-color-dark-surface);--ax-comp-gauge-chart-needle-color: var(--ax-sys-color-primary-500)}ax-gauge-chart .ax-gauge-chart{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgba(var(--ax-comp-gauge-chart-bg-color));border-radius:.5rem}ax-gauge-chart .ax-gauge-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-gauge-chart .ax-gauge-chart svg g:has(text){font-family:inherit}ax-gauge-chart .ax-gauge-chart-no-data-message{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:1rem;width:100%;height:100%;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgb(var(--ax-comp-gauge-chart-bg-color))}ax-gauge-chart .ax-gauge-chart-no-data-icon{margin-bottom:.75rem;color:rgba(var(--ax-comp-gauge-chart-text-color),.6)}ax-gauge-chart .ax-gauge-chart-no-data-text{font-weight:600;color:rgb(var(--ax-comp-gauge-chart-text-color))}\n"] }]
741
+ args: [{ selector: 'ax-gauge-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-gauge-chart\" role=\"img\" #chartContainer></div>\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\"></ax-chart-tooltip>\n", styles: ["ax-gauge-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);--ax-comp-gauge-chart-bg-color: 0, 0, 0, 0;--ax-comp-gauge-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-gauge-chart-track-color: var(--ax-sys-color-dark-surface);--ax-comp-gauge-chart-needle-color: var(--ax-sys-color-primary-500)}ax-gauge-chart .ax-gauge-chart{position:relative;width:100%;height:100%;box-sizing:border-box;padding:clamp(.5rem,1.2vw,.875rem);overflow:hidden;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgba(var(--ax-comp-gauge-chart-bg-color));border-radius:.5rem}ax-gauge-chart .ax-gauge-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden}ax-gauge-chart .ax-gauge-chart svg g:has(text){font-family:inherit}ax-gauge-chart .ax-gauge-chart-no-data-message{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:1rem;width:100%;height:100%;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgb(var(--ax-comp-gauge-chart-bg-color))}ax-gauge-chart .ax-gauge-chart-no-data-icon{margin-bottom:.75rem;color:rgba(var(--ax-comp-gauge-chart-text-color),.6)}ax-gauge-chart .ax-gauge-chart-no-data-text{font-weight:600;color:rgb(var(--ax-comp-gauge-chart-text-color))}\n"] }]
671
742
  }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], chartContainerEl: [{ type: i0.ViewChild, args: ['chartContainer', { isSignal: true }] }] } });
672
743
 
673
744
  /**