{"version":3,"file":"acorex-charts-heatmap-chart.mjs","sources":["../../../../packages/charts/heatmap-chart/src/lib/heatmap-chart.config.ts","../../../../packages/charts/heatmap-chart/src/lib/heatmap-chart.component.ts","../../../../packages/charts/heatmap-chart/src/lib/heatmap-chart.component.html","../../../../packages/charts/heatmap-chart/src/acorex-charts-heatmap-chart.ts"],"sourcesContent":["import { AX_CHART_DEFAULT_MESSAGES } from '@acorex/charts';\nimport { InjectionToken } from '@angular/core';\nimport { AXHeatmapChartOption } from './heatmap-chart.type';\n\nexport const AXHeatmapChartDefaultConfig: AXHeatmapChartOption = {\n  margin: { top: 30, right: 30, bottom: 60, left: 60 },\n  color: 'rgb(var(--ax-sys-color-primary-500))',\n  cellPadding: 0.05,\n  borderRadius: 2,\n  showXAxis: true,\n  showYAxis: true,\n  rotateXAxisLabels: 'auto',\n  showTooltip: true,\n  animationDuration: 800,\n  animationEasing: 'cubic-out',\n  messages: {\n    ...AX_CHART_DEFAULT_MESSAGES,\n    noDataIcon: 'fa-light fa-grid-2',\n  },\n};\n\nexport const AX_HEATMAP_CHART_CONFIG = new InjectionToken<AXHeatmapChartOption>('AX_HEATMAP_CHART_CONFIG', {\n  providedIn: 'root',\n  factory: () => AXHeatmapChartDefaultConfig,\n});\n","import {\n  AXChartComponent,\n  computeTooltipPosition,\n  getEasingFunction,\n  mergeChartMessages,\n  mergeChartOptions,\n  resolveCssColorInContext,\n} from '@acorex/charts';\nimport { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\nimport { AXPlatform } from '@acorex/core/platform';\nimport {\n  afterNextRender,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  OnDestroy,\n  output,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { map, Subscription } from 'rxjs';\nimport { AX_HEATMAP_CHART_CONFIG } from './heatmap-chart.config';\nimport { AXHeatmapChartOption, AXHeatmapData } from './heatmap-chart.type';\n\n@Component({\n  selector: 'ax-heatmap-chart',\n  templateUrl: './heatmap-chart.component.html',\n  styleUrls: ['./heatmap-chart.component.css'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [AXChartTooltipComponent],\n})\nexport class AXHeatmapChartComponent extends AXChartComponent implements OnDestroy {\n  private static readonly VIEW_BOX_SIZE = 400;\n\n  // X-axis layout (aligned with bar-chart heuristics)\n  private readonly CHAR_WIDTH_RATIO = 0.65;\n  private readonly ROTATION_TOLERANCE_SMALL_DATASET = 1.4;\n  private readonly SMALL_DATASET_THRESHOLD = 6;\n  private readonly MANY_ITEMS_THRESHOLD = 20;\n  private readonly VERY_MANY_ITEMS_THRESHOLD = 50;\n  private readonly MAX_LABEL_LENGTH = 20;\n  private readonly TICK_AREA_PADDING = 6;\n  private readonly X_AXIS_TITLE_GAP = 10;\n  private readonly X_AXIS_TITLE_FONT_SIZE = 14;\n  private readonly MIN_FONT_SIZE_X_AXIS = 8;\n  private readonly MAX_FONT_SIZE_X_AXIS = 14;\n\n  // Inject config at the top level\n  private readonly defaultConfig = inject(AX_HEATMAP_CHART_CONFIG);\n\n  // Inputs\n  data = input<AXHeatmapData[]>([]);\n  options = input<AXHeatmapChartOption>({});\n\n  // Outputs\n  /** Emitted when a heatmap cell is clicked */\n  cellClick = output<AXHeatmapData>();\n\n  // View Child\n  private readonly containerRef = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n  // Internal State\n  private svg: any;\n  protected d3: any;\n  private _d3Ready = signal(false);\n  private platformService = inject(AXPlatform);\n  protected isRtl = signal(this.platformService.isRtl());\n  private directionSub?: Subscription;\n\n  // Tooltip State\n  protected tooltipVisible = signal(false);\n  protected tooltipPosition = signal({ x: 0, y: 0 });\n  protected tooltipData = signal<AXChartTooltipData>({ title: '', value: '' });\n  private _tooltipRafId: number | null = null;\n  private _pendingTooltipCoords: { x: number; y: number } | null = null;\n  private readonly TOOLTIP_GAP = 10;\n\n  // Computed options (referencing the already injected defaultConfig)\n  protected effectiveOptions = computed(() => mergeChartOptions(this.defaultConfig, this.options()));\n\n  protected effectiveMessages = computed(() =>\n    mergeChartMessages(this.defaultConfig.messages, this.options()?.messages),\n  );\n\n  constructor() {\n    super();\n\n    afterNextRender(() => {\n      this.init();\n      this.directionSub = this.platformService.directionChange.pipe(map((i) => i.data === 'rtl')).subscribe((isRtl) => {\n        this.isRtl.set(isRtl);\n        if (this._d3Ready()) {\n          this.renderChart();\n        }\n      });\n    });\n\n    // Reactive render when data, options, or D3 readiness change\n    effect(() => {\n      this.data();\n      this.effectiveOptions();\n      if (this._d3Ready()) {\n        this.renderChart();\n      }\n    });\n  }\n\n  private async init() {\n    try {\n      this.d3 = await import('d3');\n      this._d3Ready.set(true);\n    } catch (err) {\n      console.error('Heatmap: Initialization failed', err);\n    }\n  }\n\n  private renderChart() {\n    if (!this.d3) return;\n\n    const container = this.containerRef().nativeElement;\n    const data = this.data() || [];\n\n    if (data.length === 0) {\n      this.svg?.remove();\n      this.svg = null;\n      this.tooltipVisible.set(false);\n      return;\n    }\n\n    container.querySelectorAll('.ax-chart-empty').forEach((el) => el.remove());\n\n    const options = this.effectiveOptions();\n    const width = AXHeatmapChartComponent.VIEW_BOX_SIZE;\n    const height = AXHeatmapChartComponent.VIEW_BOX_SIZE;\n    const isRtl = this.isRtl();\n    const baseMargin = options.margin || { top: 20, right: 20, bottom: 40, left: 40 };\n    // When rendering RTL, the Y axis is on the right; swap side margins so tick labels\n    // have the same breathing room they get on the left in LTR.\n    let margin = isRtl\n      ? { top: baseMargin.top, right: baseMargin.left, bottom: baseMargin.bottom, left: baseMargin.right }\n      : { ...baseMargin };\n\n    const xKeys = Array.from(new Set(data.map((d) => d.x.toString())));\n    const yKeys = Array.from(new Set(data.map((d) => d.y.toString())));\n\n    let innerWidth = width - margin.left - margin.right;\n    const cellPad = options.cellPadding ?? 0;\n    const xScaleProbe = this.d3\n      .scaleBand()\n      .domain(xKeys)\n      .range(isRtl ? [innerWidth, 0] : [0, innerWidth])\n      .padding(cellPad);\n\n    const xTickFontSize = this.getHeatmapXTickFontSize(innerWidth, xKeys.length);\n    const { tickXKeys, formatXTick } = this.getHeatmapXTickPlan(xKeys);\n    const longestXLabel = xKeys.reduce((acc, k) => {\n      const t = formatXTick(k);\n      return t.length > acc.length ? t : acc;\n    }, '');\n    const estimatedLabelWidth = longestXLabel.length * xTickFontSize * this.CHAR_WIDTH_RATIO;\n    const step = xScaleProbe.step();\n    const rotateX = this.shouldRotateHeatmapXLabels(options.rotateXAxisLabels, estimatedLabelWidth, step, xKeys.length);\n\n    const tickAreaHeight = rotateX\n      ? estimatedLabelWidth * Math.SQRT1_2 + xTickFontSize * Math.SQRT1_2 + this.TICK_AREA_PADDING\n      : xTickFontSize + this.TICK_AREA_PADDING + 2;\n\n    const xAxisTitleReserve = options.xAxisLabel?.trim() ? this.X_AXIS_TITLE_GAP + 16 : 0;\n    margin = { ...margin, bottom: Math.max(margin.bottom, tickAreaHeight + xAxisTitleReserve) };\n\n    innerWidth = width - margin.left - margin.right;\n    const innerHeight = Math.max(1, height - margin.top - margin.bottom);\n\n    // Create/Select SVG root\n    if (!this.svg) {\n      this.svg = this.d3\n        .select(container)\n        .append('svg')\n        .attr('width', '100%')\n        .attr('height', '100%')\n        .attr('preserveAspectRatio', 'xMidYMid meet')\n        .style('display', 'block');\n      this.svg.append('g').attr('class', 'chart-group');\n    }\n\n    this.svg.attr('viewBox', `0 0 ${width} ${height}`);\n    const g = this.svg.select('.chart-group').attr('transform', `translate(${margin.left},${margin.top})`);\n\n    // --- Scales ---\n    const xScale = this.d3\n      .scaleBand()\n      .domain(xKeys)\n      .range(isRtl ? [innerWidth, 0] : [0, innerWidth])\n      .padding(cellPad);\n    const yScale = this.d3.scaleBand().domain(yKeys).range([innerHeight, 0]).padding(cellPad);\n\n    const valueExtent = this.d3.extent(data, (d: any) => d.value) as [number, number];\n    const minValue = Number.isFinite(valueExtent[0]) ? valueExtent[0] : 0;\n    const maxValue = Number.isFinite(valueExtent[1]) ? valueExtent[1] : minValue + 1;\n    const palette = options.colors?.filter(Boolean) ?? [];\n    const baseColor = options.color ?? 'rgb(99, 102, 241)';\n    const rangeMin = options.valueRange?.min ?? minValue;\n    const rangeMax = options.valueRange?.max ?? maxValue;\n\n    const resolvedColorCache = new Map<string, string>();\n    const resolvePaletteColor = (c: string): string => {\n      const hit = resolvedColorCache.get(c);\n      if (hit !== undefined) return hit;\n      const out = resolveCssColorInContext(container, c);\n      resolvedColorCache.set(c, out);\n      return out;\n    };\n    const resolvedBase = resolvePaletteColor(baseColor);\n\n    const getCellColor = (d: AXHeatmapData): string => {\n      // If a palette is provided, choose a stable \"random\" color per cell.\n      if (palette.length > 0) {\n        const key = `${d.x}-${d.y}`;\n        const idx = this.hashStringToUint32(key) % palette.length;\n        return resolvePaletteColor(palette[idx] ?? baseColor);\n      }\n\n      const span = rangeMax - rangeMin;\n      const t = span === 0 ? 1 : (d.value - rangeMin) / span;\n      const clamped = Math.max(0, Math.min(1, t));\n      return this.applyIntensityToResolvedRgb(resolvedBase, clamped);\n    };\n\n    // --- Axes ---\n    const xAxisBuilder = this.d3\n      .axisBottom(xScale)\n      .tickSize(0)\n      .tickFormat((d: string | number) => formatXTick(String(d)));\n    if (tickXKeys.length < xKeys.length) {\n      xAxisBuilder.tickValues(tickXKeys);\n    }\n\n    this.drawAxis(g, 'x-axis', xAxisBuilder, 0, innerHeight, options.showXAxis, isRtl);\n    g.select('.x-axis').attr('direction', 'ltr');\n    this.styleHeatmapXAxisTicks(g, xTickFontSize, rotateX);\n\n    if (isRtl) {\n      this.drawAxis(g, 'y-axis', this.d3.axisRight(yScale).tickSize(0), innerWidth, 0, options.showYAxis, isRtl);\n    } else {\n      this.drawAxis(g, 'y-axis', this.d3.axisLeft(yScale).tickSize(0), 0, 0, options.showYAxis, isRtl);\n    }\n    this.drawAxisLabels(g, innerWidth, innerHeight, options, isRtl, tickAreaHeight);\n\n    // --- Cells with Data Join ---\n    const easing = getEasingFunction(this.d3, options.animationEasing);\n\n    g.selectAll('.cell')\n      .data(data, (d: any) => `${d.x}-${d.y}`)\n      .join(\n        (enter: any) => enter.append('rect').attr('class', 'cell').attr('opacity', 0).attr('fill', resolvedBase),\n        (update: any) => update,\n        (exit: any) => exit.transition().duration(200).attr('opacity', 0).remove(),\n      )\n      .on('mouseenter', (event: any, d: AXHeatmapData) => this.showTooltip(event, d, getCellColor(d)))\n      .on('mousemove', (event: any) => this.updateTooltipPos(event))\n      .on('click', (_event: any, d: AXHeatmapData) => this.cellClick.emit(d))\n      .on('mouseleave', () => this.hideTooltip())\n      .transition()\n      .duration(options.animationDuration)\n      .ease(easing)\n      .attr('x', (d: any) => xScale(d.x.toString()))\n      .attr('y', (d: any) => yScale(d.y.toString()))\n      .attr('width', xScale.bandwidth())\n      .attr('height', yScale.bandwidth())\n      .attr('rx', options.borderRadius)\n      .attr('ry', options.borderRadius)\n      .attr('opacity', 1)\n      .style('fill', (d: AXHeatmapData) => getCellColor(d));\n  }\n\n  private hashStringToUint32(input: string): number {\n    // Simple, fast, deterministic hash (djb2 variant)\n    let hash = 5381;\n    for (let i = 0; i < input.length; i++) {\n      hash = (hash * 33) ^ input.charCodeAt(i);\n    }\n    return hash >>> 0;\n  }\n\n  /** `resolvedRgb` must be a computed `rgb()` / `rgba()` string (e.g. from {@link resolveCssColorInContext}). */\n  private applyIntensityToResolvedRgb(resolvedRgb: string, t: number): string {\n    const clamped = Math.max(0, Math.min(1, t));\n    const parsed = this.d3.color(resolvedRgb);\n    if (!parsed) return resolvedRgb;\n    const rgb = this.d3.rgb(parsed);\n    const minOpacity = 0.12;\n    const opacity = minOpacity + clamped * (1 - minOpacity);\n    return `rgba(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)},${opacity})`;\n  }\n\n  private drawAxis(g: any, className: string, axisFn: any, x: number, y: number, visible = true, isRtl = false) {\n    let axisG = g.select(`.${className}`);\n    if (axisG.empty()) axisG = g.append('g').attr('class', className);\n\n    axisG\n      .attr('transform', `translate(${x},${y})`)\n      .style('display', visible ? 'block' : 'none')\n      .call(axisFn)\n      .call((g: any) => g.select('.domain').remove());\n\n    // Ensure tick labels don't overlap the plot in RTL.\n    // `text-anchor` is logical (depends on `direction`), so we set both explicitly.\n    axisG.attr('direction', isRtl ? 'rtl' : 'ltr');\n    axisG\n      .selectAll('.tick text')\n      .style('fill', 'rgba(var(--ax-comp-heatmap-chart-labels-color), 0.7)')\n      .style('font-weight', '400');\n    if (className === 'y-axis') {\n      axisG.selectAll('.tick text').attr('text-anchor', 'end');\n    }\n\n    axisG.selectAll('line, path').style('stroke', 'rgba(var(--ax-comp-heatmap-chart-axis-color), 0.2)');\n  }\n\n  private showTooltip(event: MouseEvent, item: AXHeatmapData, color: string) {\n    if (!this.effectiveOptions().showTooltip) return;\n    this.tooltipData.set({\n      title: `${item.x} / ${item.y}`,\n      value: item.label || item.value.toLocaleString(),\n      color: color,\n    });\n    this.tooltipVisible.set(true);\n    this.updateTooltipPos(event);\n  }\n\n  private updateTooltipPos(event: MouseEvent) {\n    this._pendingTooltipCoords = { x: event.clientX, y: event.clientY };\n    if (this._tooltipRafId != null) return;\n    this.scheduleTooltipPosition(0);\n  }\n\n  private scheduleTooltipPosition(attempt: number) {\n    this._tooltipRafId = requestAnimationFrame(() => {\n      const coords = this._pendingTooltipCoords;\n      if (!coords) {\n        this._tooltipRafId = null;\n        return;\n      }\n\n      const containerEl = this.containerRef()?.nativeElement;\n      if (!containerEl) {\n        this._tooltipRafId = null;\n        return;\n      }\n\n      const tooltipEl = containerEl.querySelector('.chart-tooltip') as HTMLElement | null;\n      if (!tooltipEl && this.tooltipVisible() && attempt < 3) {\n        this.scheduleTooltipPosition(attempt + 1);\n        return;\n      }\n\n      this._tooltipRafId = null;\n      const tooltipRect = tooltipEl ? tooltipEl.getBoundingClientRect() : null;\n      const pos = computeTooltipPosition(containerEl, tooltipRect, coords.x, coords.y, this.TOOLTIP_GAP);\n      this.tooltipPosition.set(pos);\n    });\n  }\n\n  private cancelTooltipPosition(): void {\n    if (this._tooltipRafId != null) {\n      cancelAnimationFrame(this._tooltipRafId);\n      this._tooltipRafId = null;\n    }\n    this._pendingTooltipCoords = null;\n  }\n\n  private hideTooltip() {\n    this.tooltipVisible.set(false);\n  }\n\n  ngOnDestroy(): void {\n    this.directionSub?.unsubscribe();\n    this.cancelTooltipPosition();\n    this.svg?.remove();\n    this.svg = null;\n  }\n\n  private drawAxisLabels(\n    g: any,\n    innerWidth: number,\n    innerHeight: number,\n    options: AXHeatmapChartOption,\n    isRtl: boolean,\n    xTickAreaHeight: number,\n  ) {\n    const xText = options.xAxisLabel?.trim();\n    const yText = options.yAxisLabel?.trim();\n\n    const labels = g.selectAll('.axis-labels').data([0]).join('g').attr('class', 'axis-labels');\n\n    labels\n      .selectAll('.ax-heatmap-chart-axis-label-x')\n      .data(xText ? [xText] : [])\n      .join(\n        (enter: any) => enter.append('text').attr('class', 'ax-heatmap-chart-axis-label ax-heatmap-chart-axis-label-x'),\n        (update: any) => update,\n        (exit: any) => exit.remove(),\n      )\n      .attr('x', innerWidth / 2)\n      .attr('y', innerHeight + xTickAreaHeight + (xText ? this.X_AXIS_TITLE_GAP : 0))\n      .attr('text-anchor', 'middle')\n      .attr('direction', 'ltr')\n      .style('font-size', `${this.X_AXIS_TITLE_FONT_SIZE}px`)\n      .style('font-weight', '500')\n      .style('fill', 'rgb(var(--ax-comp-heatmap-chart-axis-label-color))')\n      .text((d: string) => d);\n\n    const yX = isRtl ? innerWidth + 46 : -46;\n    labels\n      .selectAll('.ax-heatmap-chart-axis-label-y')\n      .data(yText ? [yText] : [])\n      .join(\n        (enter: any) => enter.append('text').attr('class', 'ax-heatmap-chart-axis-label ax-heatmap-chart-axis-label-y'),\n        (update: any) => update,\n        (exit: any) => exit.remove(),\n      )\n      .attr('transform', `translate(${yX}, ${innerHeight / 2}) rotate(-90)`)\n      .attr('text-anchor', 'middle')\n      .style('font-size', `${this.X_AXIS_TITLE_FONT_SIZE}px`)\n      .style('font-weight', '500')\n      .style('fill', 'rgb(var(--ax-comp-heatmap-chart-axis-label-color))')\n      .text((d: string) => d);\n  }\n\n  private getHeatmapXTickFontSize(innerWidth: number, itemCount: number): number {\n    const baseSize = Math.round(innerWidth / 50);\n    let adjustedSize = baseSize;\n    if (itemCount > this.VERY_MANY_ITEMS_THRESHOLD) {\n      adjustedSize = Math.round(baseSize * 0.7);\n    } else if (itemCount > this.MANY_ITEMS_THRESHOLD) {\n      adjustedSize = Math.round(baseSize * 0.85);\n    }\n    return Math.max(this.MIN_FONT_SIZE_X_AXIS, Math.min(this.MAX_FONT_SIZE_X_AXIS, adjustedSize));\n  }\n\n  private getHeatmapXTickPlan(xKeys: string[]): { tickXKeys: string[]; formatXTick: (d: string) => string } {\n    const n = xKeys.length;\n    const maxLabelLength = n > this.MANY_ITEMS_THRESHOLD ? 10 : this.MAX_LABEL_LENGTH;\n    let tickXKeys = xKeys;\n    if (n > this.VERY_MANY_ITEMS_THRESHOLD) {\n      tickXKeys = xKeys.filter((_, i) => i % 5 === 0);\n    } else if (n > this.MANY_ITEMS_THRESHOLD) {\n      tickXKeys = xKeys.filter((_, i) => i % 2 === 0);\n    }\n    const formatXTick = (d: string) => this.truncateHeatmapLabel(d, maxLabelLength);\n    return { tickXKeys, formatXTick };\n  }\n\n  private truncateHeatmapLabel(label: string, maxLength: number): string {\n    if (label.length <= maxLength) return label;\n    if (maxLength <= 1) return '…';\n    return `${label.substring(0, maxLength - 1)}…`;\n  }\n\n  private shouldRotateHeatmapXLabels(\n    rotateOption: boolean | 'auto' | undefined,\n    estimatedLabelWidth: number,\n    step: number,\n    domainCount: number,\n  ): boolean {\n    if (rotateOption === true) return true;\n    if (rotateOption === false) return false;\n    if (domainCount === 0) return false;\n    if (domainCount <= this.SMALL_DATASET_THRESHOLD) {\n      return estimatedLabelWidth > step * this.ROTATION_TOLERANCE_SMALL_DATASET;\n    }\n    return estimatedLabelWidth > step;\n  }\n\n  private styleHeatmapXAxisTicks(g: any, fontSize: number, rotated: boolean): void {\n    const texts = g\n      .select('.x-axis')\n      .selectAll('.tick text')\n      .style('font-size', `${fontSize}px`)\n      .style('font-weight', '400')\n      .style('fill', 'rgba(var(--ax-comp-heatmap-chart-labels-color), 0.7)')\n      .attr('direction', 'ltr');\n\n    if (rotated) {\n      texts.attr('transform', 'rotate(-45)').style('text-anchor', 'end').attr('dx', '-0.8em').attr('dy', '0.15em');\n    } else {\n      texts.attr('transform', null).style('text-anchor', 'middle').attr('dx', null).attr('dy', '0.71em');\n    }\n  }\n\n  // RTL is tracked via AXPlatform.directionChange\n}\n","<div class=\"ax-heatmap-chart-container\" role=\"img\" #chartContainer>\n  <ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\">\n  </ax-chart-tooltip>\n  @if (data()?.length === 0) {\n    <div class=\"ax-chart-empty\">\n      <div class=\"ax-chart-empty__card\">\n        <div class=\"ax-chart-empty__icon\">\n          <i [class]=\"effectiveMessages().noDataIcon + ' fa-2x'\" aria-hidden=\"true\"></i>\n        </div>\n        <div class=\"ax-chart-empty__title\">{{ effectiveMessages().noData }}</div>\n        <div class=\"ax-chart-empty__help\">{{ effectiveMessages().noDataHelp }}</div>\n      </div>\n    </div>\n  }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}