{"version":3,"file":"acorex-charts-chart-tooltip.mjs","sources":["../../../../packages/charts/chart-tooltip/src/lib/chart-tooltip.component.ts","../../../../packages/charts/chart-tooltip/src/lib/chart-tooltip.component.html","../../../../packages/charts/chart-tooltip/src/acorex-charts-chart-tooltip.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, NgZone, ViewEncapsulation, effect, inject, input, viewChild } from '@angular/core';\nimport { AXChartTooltipData } from './chart-tooltip.type';\n\n@Component({\n  selector: 'ax-chart-tooltip',\n  templateUrl: './chart-tooltip.component.html',\n  styleUrls: ['./chart-tooltip.component.css'],\n  imports: [CommonModule],\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'ax-chart-tooltip-host',\n  },\n})\nexport class AXChartTooltipComponent {\n  private ngZone = inject(NgZone);\n\n  data = input<AXChartTooltipData | null>(null);\n  position = input<{ x: number; y: number }>({ x: 0, y: 0 });\n  visible = input<boolean>(false);\n\n  /**\n   * Whether to show the tooltip's percentage badge\n   */\n  showPercentage = input<boolean>(true);\n\n  /**\n   * Optional custom styling for the tooltip\n   */\n  style = input<{ [key: string]: string }>({});\n\n  /**\n   * Reference to tooltip container for measuring dimensions\n   */\n  tooltipContainer = viewChild<ElementRef<HTMLDivElement>>('tooltipContainer');\n\n  // Tooltip dimensions\n  protected tooltipWidth = 0;\n  protected tooltipHeight = 0;\n\n  constructor() {\n    effect(() => {\n      if (this.visible() && this.data()) {\n        this.updateTooltipDimensions();\n      }\n    });\n  }\n\n  // Helpers to support color as string | string[]\n  protected isColorArray(): boolean {\n    const color = this.data()?.color as unknown;\n    return Array.isArray(color);\n  }\n\n  protected colorList(): string[] {\n    const color = this.data()?.color as unknown;\n    return Array.isArray(color) ? (color as string[]) : [];\n  }\n\n  protected singleColor(): string | null {\n    const color = this.data()?.color as unknown;\n    return typeof color === 'string' ? (color as string) : null;\n  }\n\n  protected isTitleArray(): boolean {\n    const t = this.data()?.title as unknown;\n    return Array.isArray(t);\n  }\n\n  protected titleList(): string[] {\n    const t = this.data()?.title as unknown;\n    return Array.isArray(t) ? (t as string[]) : [];\n  }\n\n  protected colorAt(index: number): string | null {\n    const c = this.data()?.color as unknown;\n    if (Array.isArray(c)) {\n      return (c as string[])[index] ?? null;\n    }\n    return typeof c === 'string' ? (c as string) : null;\n  }\n\n  protected formattedValue(): string {\n    const v = this.data()?.value;\n    if (v == null) return '';\n    if (typeof v === 'number') return v.toLocaleString();\n    const num = Number(v);\n    return isNaN(num) ? v : num.toLocaleString();\n  }\n\n  /**\n   * Updates tooltip dimensions after it's rendered\n   */\n  protected updateTooltipDimensions(): void {\n    if (!this.visible()) {\n      return;\n    }\n\n    this.ngZone.runOutsideAngular(() => {\n      requestAnimationFrame(() => {\n        const tooltipEl = this.tooltipContainer()?.nativeElement;\n        if (!tooltipEl) {\n          return;\n        }\n\n        this.tooltipWidth = tooltipEl.offsetWidth;\n        this.tooltipHeight = tooltipEl.offsetHeight;\n      });\n    });\n  }\n\n  /**\n   * Get adjusted tooltip position\n   * Exposes properties for parent components to query tooltip dimensions\n   */\n  getDimensions(): { width: number; height: number } {\n    return {\n      width: this.tooltipWidth,\n      height: this.tooltipHeight,\n    };\n  }\n}\n","@if (visible() && data()) {\n  <div\n    #tooltipContainer\n    class=\"chart-tooltip chart-tooltip-visible\"\n    [style.left.px]=\"position().x\"\n    [style.top.px]=\"position().y\"\n    [ngStyle]=\"style()\"\n    aria-hidden=\"false\"\n  >\n    <div class=\"chart-tooltip-content\">\n      <div class=\"chart-tooltip-body\">\n        @if (!isTitleArray()) {\n          <div class=\"chart-tooltip-title-row\">\n            @if (singleColor()) {\n              <div class=\"chart-tooltip-color\" [style.background-color]=\"singleColor()!\"></div>\n            }\n            <div class=\"chart-tooltip-title\">\n              {{ data()!.title }}\n            </div>\n          </div>\n        } @else {\n          <div class=\"chart-tooltip-title-list\">\n            @for (t of titleList(); let i = $index; track $index) {\n              <div class=\"chart-tooltip-title-row\">\n                @if (colorAt(i)) {\n                  <div class=\"chart-tooltip-color\" [style.background-color]=\"colorAt(i)!\"></div>\n                }\n                <div class=\"chart-tooltip-title\">\n                  {{ t }}\n                </div>\n              </div>\n            }\n          </div>\n        }\n\n        <div class=\"chart-tooltip-value-row\">\n          <div class=\"chart-tooltip-value\">{{ formattedValue() }}</div>\n          @if (showPercentage() && data()!.percentage) {\n            <div class=\"chart-tooltip-percentage\">\n              {{ data()!.percentage }}\n            </div>\n          }\n        </div>\n      </div>\n    </div>\n  </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}