{"version":3,"file":"acorex-charts-line-chart.mjs","sources":["../../../../packages/charts/line-chart/src/lib/line-chart.config.ts","../../../../packages/charts/line-chart/src/lib/line-chart.component.ts","../../../../packages/charts/line-chart/src/lib/line-chart.component.html","../../../../packages/charts/line-chart/src/acorex-charts-line-chart.ts"],"sourcesContent":["import { AX_CHART_DEFAULT_MESSAGES } from '@acorex/charts';\nimport { InjectionToken } from '@angular/core';\nimport { AXLineChartOption } from './line-chart.type';\n\nexport const AXLineChartDefaultConfig: AXLineChartOption = {\n  margins: {\n    top: 12,\n    right: 12,\n    bottom: 8,\n    left: 8,\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  messages: {\n    ...AX_CHART_DEFAULT_MESSAGES,\n    noDataIcon: 'fa-light fa-chart-line',\n  },\n};\n\nexport const AX_LINE_CHART_CONFIG = new InjectionToken<AXLineChartOption>('AX_LINE_CHART_CONFIG', {\n  providedIn: 'root',\n  factory: () => AXLineChartDefaultConfig,\n});\n\nexport type PartialLineChartConfig = Partial<AXLineChartOption>;\n\nexport function lineChartConfig(config: PartialLineChartConfig = {}): AXLineChartOption {\n  return {\n    ...AXLineChartDefaultConfig,\n    ...config,\n    margins: {\n      ...AXLineChartDefaultConfig.margins,\n      ...config.margins,\n    },\n    messages: {\n      ...AXLineChartDefaultConfig.messages,\n      ...config.messages,\n    },\n  };\n}\n","import {\n  AX_CHART_COLOR_PALETTE,\n  AXChartComponent,\n  AXChartComponentBase,\n  computeTooltipPosition,\n  formatLargeNumber,\n  getChartColor,\n  getEasingFunction,\n  mergeChartMessages,\n  mergeChartOptions,\n  renderChartEmptyMessage,\n} from '@acorex/charts';\nimport { AXChartLegendCompatible, AXChartLegendItem } from '@acorex/charts/chart-legend';\nimport { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\n\nimport {\n  AfterViewInit,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  OnDestroy,\n  OnInit,\n  output,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport type * as d3 from 'd3';\nimport { AX_LINE_CHART_CONFIG } from './line-chart.config';\nimport { AXLineChartData, AXLineChartOption, AXLineChartPointClickEvent, AXLineChartValue } from './line-chart.type';\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.css'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [AXChartTooltipComponent],\n})\nexport class AXLineChartComponent\n  extends AXChartComponent\n  implements OnInit, AfterViewInit, OnDestroy, AXChartLegendCompatible, AXChartComponentBase\n{\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!: d3.Selection<SVGSVGElement, unknown, null, undefined>;\n  private chart!: d3.Selection<SVGGElement, unknown, null, undefined>;\n  private xScale!: d3.ScaleLinear<number, number> | d3.ScalePoint<string>;\n  private xScaleKind: 'linear' | 'point' = 'linear';\n  private yScale!: d3.ScaleLinear<number, number>;\n  private xAxis!: d3.Selection<SVGGElement, unknown, null, undefined>;\n  private yAxis!: d3.Selection<SVGGElement, unknown, null, undefined>;\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  private _tooltipRafId: number | null = null;\n  private _pendingTooltipCoords: { x: number; y: number } | null = null;\n\n  private _initialized = signal(false);\n  private _rendered = signal(false);\n  private hiddenSeries = new Set<string>();\n  private readonly _legendStateVersion = signal(0);\n  readonly legendStateVersion = this._legendStateVersion.asReadonly();\n  private _fullNormalizedData: (AXLineChartData & { originalIndex: number })[] = [];\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  // Inject the chart colors\n  private chartColors = inject(AX_CHART_COLOR_PALETTE);\n\n  protected effectiveOptions = computed(() => mergeChartOptions(this.configToken, this.options()));\n\n  // Messages with defaults\n  protected effectiveMessages = computed(() => mergeChartMessages(this.configToken.messages, this.options()?.messages));\n\n  // Layout & Dimensions\n  private readonly MIN_DIMENSION = 1;\n  private readonly DEFAULT_MARGIN_TOP = 12;\n  private readonly DEFAULT_MARGIN_RIGHT = 12;\n  private readonly DEFAULT_MARGIN_BOTTOM = 8;\n  private readonly DEFAULT_MARGIN_LEFT = 8;\n  private readonly MIN_MARGIN_BOTTOM = 28;\n  private readonly MIN_MARGIN_LEFT = 36;\n  private readonly X_AXIS_TITLE_GAP = 10;\n  private readonly TICK_AREA_PADDING = 4;\n  private readonly AXIS_TICK_PADDING = 6;\n  private readonly ROTATION_TOLERANCE = 0.92;\n  private readonly FORCE_ROTATE_LABEL_LENGTH = 14;\n  private readonly Y_AXIS_TITLE_PADDING = 10;\n\n  // Styling & Visual\n  private readonly DEFAULT_LINE_WIDTH = 2;\n  private readonly DEFAULT_POINT_RADIUS = 4;\n  private readonly DEFAULT_FILL_OPACITY = 20;\n  private readonly LINE_HIGHLIGHT_MULTIPLIER = 1.5;\n  private readonly POINT_HIGHLIGHT_MULTIPLIER = 1.5;\n  private readonly POINT_STROKE_WIDTH = 1;\n  private readonly POINT_HOVER_STROKE_WIDTH = 2;\n  private readonly GRID_DASH_ARRAY = '2,2';\n  private readonly CROSSHAIR_DASH_ARRAY = '3,3';\n  private readonly CROSSHAIR_OPACITY = 0.7;\n\n  // Animation\n  private readonly HOVER_TRANSITION_DURATION = 150;\n  private readonly ANIMATION_END_BUFFER = 100;\n  private readonly POINT_ANIMATION_DELAY_MS = 50;\n  private readonly POINT_ANIMATION_DELAY_RATIO = 0.5;\n  private readonly POINT_ANIMATION_DURATION_RATIO = 0.3;\n\n  // Text & Labels\n  private readonly CHAR_WIDTH_RATIO = 0.6;\n  private readonly FONT_WIDTH_MULTIPLIER = 0.6;\n  private readonly MAX_LABEL_LENGTH = 20;\n  private readonly MIN_FONT_SIZE_X = 10;\n  private readonly MAX_FONT_SIZE_X = 16;\n  private readonly MIN_FONT_SIZE_Y = 11;\n  private readonly MAX_FONT_SIZE_Y = 16;\n  private readonly FONT_PADDING = 6;\n\n  private readonly xAxisLabelLayout = {\n    fontSize: 12,\n    willRotate: false,\n    tickAreaHeight: 24,\n    displayedTickCount: 1,\n  };\n\n  /**\n   * Resolves X-axis tick font size, rotation, and reserved tick area height.\n   */\n  private resolveXAxisLabelLayout(\n    chartWidth: number,\n    categoricalLabels: string[] | null,\n  ): { fontSize: number; willRotate: boolean; tickAreaHeight: number; displayedTickCount: number } {\n    if (!categoricalLabels || categoricalLabels.length === 0) {\n      const displayedTickCount = Math.min(12, Math.max(5, Math.floor(chartWidth / 80)));\n      const fontSize = this.getXAxisTickFontSize(chartWidth, displayedTickCount);\n      const tickAreaHeight = fontSize + this.TICK_AREA_PADDING + this.AXIS_TICK_PADDING;\n\n      return { fontSize, willRotate: false, tickAreaHeight, displayedTickCount };\n    }\n\n    const itemCount = categoricalLabels.length;\n    const longestLabel = categoricalLabels.reduce((a, b) => (a.length > b.length ? a : b), '');\n    const effectiveLength = this.getEffectiveXLabelLength(longestLabel, itemCount);\n    const step = itemCount > 1 ? chartWidth / (itemCount - 1) : chartWidth;\n\n    let fontSize = this.getXAxisTickFontSize(chartWidth, itemCount);\n    let effectiveWidth = effectiveLength * fontSize * this.CHAR_WIDTH_RATIO;\n\n    while (effectiveWidth > step * this.ROTATION_TOLERANCE && fontSize > this.MIN_FONT_SIZE_X) {\n      fontSize--;\n      effectiveWidth = effectiveLength * fontSize * this.CHAR_WIDTH_RATIO;\n    }\n\n    const willRotate =\n      longestLabel.length >= this.FORCE_ROTATE_LABEL_LENGTH || effectiveWidth > step * this.ROTATION_TOLERANCE;\n\n    if (willRotate && effectiveWidth > step) {\n      while (effectiveWidth > step * 1.35 && fontSize > this.MIN_FONT_SIZE_X) {\n        fontSize--;\n        effectiveWidth = effectiveLength * fontSize * this.CHAR_WIDTH_RATIO;\n      }\n    }\n\n    const tickAreaHeight = this.estimateXAxisTickAreaHeight(fontSize, effectiveWidth, willRotate);\n    let displayedTickCount = itemCount;\n    if (itemCount > this.VERY_MANY_ITEMS_THRESHOLD) {\n      displayedTickCount = Math.ceil(itemCount / 5);\n    } else if (itemCount > this.MANY_ITEMS_THRESHOLD) {\n      displayedTickCount = Math.ceil(itemCount / 2);\n    }\n\n    return { fontSize, willRotate, tickAreaHeight, displayedTickCount };\n  }\n\n  /**\n   * Returns truncated label length used for layout calculations.\n   */\n  private getEffectiveXLabelLength(label: string, itemCount: number): number {\n    const maxLength = itemCount > this.MANY_ITEMS_THRESHOLD ? 10 : this.MAX_LABEL_LENGTH;\n    return Math.min(label.length, maxLength);\n  }\n\n  /**\n   * Estimates vertical space required below the X-axis for tick labels.\n   */\n  private estimateXAxisTickAreaHeight(fontSize: number, effectiveLabelWidth: number, willRotate: boolean): number {\n    if (willRotate) {\n      return (\n        effectiveLabelWidth * Math.SQRT1_2 + fontSize * Math.SQRT1_2 + this.TICK_AREA_PADDING + this.AXIS_TICK_PADDING\n      );\n    }\n\n    return fontSize + this.TICK_AREA_PADDING + this.AXIS_TICK_PADDING;\n  }\n\n  /**\n   * Measures rendered X-axis tick label area using the axis group bounding box.\n   */\n  private measureXAxisTickAreaHeight(\n    axisGroup: SVGGElement | null | undefined,\n    fontSize: number,\n    fallbackHeight: number,\n  ): number {\n    if (!axisGroup) {\n      return fallbackHeight;\n    }\n\n    try {\n      const bbox = axisGroup.getBBox();\n      const measured = Math.max(0, bbox.y + bbox.height) + this.TICK_AREA_PADDING;\n      return Math.max(measured, fallbackHeight);\n    } catch {\n      return fallbackHeight;\n    }\n  }\n\n  /**\n   * Measures rendered Y-axis tick label width using SVG bounding boxes.\n   */\n  private measureMaxYAxisTickLabelWidth(tickNodes: SVGTextElement[], fontSize: number): number {\n    try {\n      if (tickNodes.length > 0) {\n        return Math.max(...tickNodes.map((node) => node.getBBox().width)) + this.FONT_PADDING;\n      }\n    } catch {\n      // Fall through to estimation\n    }\n\n    return this.calculateMaxYAxisTickLabelWidth(fontSize);\n  }\n\n  /**\n   * Calculates required bottom margin for X-axis ticks, optional rotation, and title.\n   */\n  private calculateRequiredBottomMargin(\n    options: AXLineChartOption,\n    chartWidth: number,\n    categoricalLabels: string[] | null,\n  ): number {\n    const baseBottom = options.margins?.bottom ?? this.DEFAULT_MARGIN_BOTTOM;\n\n    if (options.showXAxis === false) {\n      return Math.max(baseBottom, 8);\n    }\n\n    const layout = this.resolveXAxisLabelLayout(chartWidth, categoricalLabels);\n    this.xAxisLabelLayout.fontSize = layout.fontSize;\n    this.xAxisLabelLayout.willRotate = layout.willRotate;\n    this.xAxisLabelLayout.tickAreaHeight = layout.tickAreaHeight;\n    this.xAxisLabelLayout.displayedTickCount = layout.displayedTickCount;\n\n    const titleBlock = options.xAxisLabel ? this.X_AXIS_TITLE_GAP + this.getAxisTitleFontSize(layout.fontSize) + 2 : 0;\n    const rotatedBuffer = layout.willRotate ? 12 : 4;\n\n    return Math.max(baseBottom, this.MIN_MARGIN_BOTTOM, layout.tickAreaHeight + titleBlock + rotatedBuffer);\n  }\n\n  /**\n   * Calculates required left margin for Y-axis ticks and title.\n   */\n  private calculateRequiredLeftMargin(options: AXLineChartOption, chartHeight: number): number {\n    const baseLeft = options.margins?.left ?? this.DEFAULT_MARGIN_LEFT;\n\n    if (options.showYAxis === false) {\n      return baseLeft;\n    }\n\n    const fontSize = this.getYAxisTickFontSize(chartHeight);\n    const tickLabelWidth = this.calculateMaxYAxisTickLabelWidth(fontSize);\n    const titleBlock = options.yAxisLabel ? this.Y_AXIS_TITLE_PADDING + this.getAxisTitleFontSize(fontSize) + 4 : 0;\n\n    return Math.max(baseLeft, this.MIN_MARGIN_LEFT, tickLabelWidth + this.AXIS_TICK_PADDING + titleBlock + 4);\n  }\n\n  private createXAxisTitle(\n    axesGroup: d3.Selection<SVGGElement, unknown, null, undefined>,\n    title: string,\n    tickAreaHeight: number,\n    tickFontSize: number,\n  ): void {\n    const titleFontSize = this.getAxisTitleFontSize(tickFontSize);\n    const titleY = Math.min(\n      this.height + tickAreaHeight + this.X_AXIS_TITLE_GAP,\n      this.height + this.margin.bottom - titleFontSize - 2,\n    );\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', 'hanging')\n      .attr('x', this.width / 2)\n      .attr('y', titleY)\n      .attr('direction', 'ltr')\n      .attr(\n        'style',\n        `\n        font-size: ${titleFontSize}px;\n        font-weight: 500;\n        fill: rgb(var(--ax-comp-line-chart-text-color));\n        pointer-events: none;\n      `,\n      )\n      .text(title);\n  }\n\n  private createYAxisTitle(\n    axesGroup: d3.Selection<SVGGElement, unknown, null, undefined>,\n    title: string,\n    tickFontSize: number,\n    maxTickLabelWidth: number,\n  ): void {\n    const titleFontSize = this.getAxisTitleFontSize(tickFontSize);\n    const labelY = -maxTickLabelWidth - this.Y_AXIS_TITLE_PADDING;\n    const labelX = -this.height / 2;\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      .attr('direction', 'ltr')\n      .attr(\n        'style',\n        `\n        font-size: ${titleFontSize}px;\n        font-weight: 500;\n        fill: rgb(var(--ax-comp-line-chart-text-color));\n        pointer-events: none;\n      `,\n      )\n      .text(title);\n  }\n\n  // Data & Performance\n  private readonly MAX_POINTS_TO_RENDER = 100;\n  private readonly POINT_COORDINATE_PRECISION = 10;\n  private readonly MANY_ITEMS_THRESHOLD = 20;\n  private readonly VERY_MANY_ITEMS_THRESHOLD = 50;\n\n  // Tooltip\n  private readonly TOOLTIP_GAP = 10;\n\n  /**\n   * Normalizes input data to consistent array format with originalIndex\n   */\n  private normalizeData(rawData: AXLineChartValue): (AXLineChartData & { originalIndex: number })[] {\n    if (Array.isArray(rawData)) {\n      return rawData.map((s, i) => ({ ...s, originalIndex: i }));\n    }\n    if (rawData && 'data' in rawData) {\n      return [{ ...rawData, originalIndex: 0 }];\n    }\n    return [];\n  }\n\n  /**\n   * Gets unique identifier for a series\n   */\n  private getSeriesIdentifier(series: AXLineChartData & { originalIndex: number }): string {\n    return series.id || series.label || `series-${series.originalIndex}`;\n  }\n\n  /**\n   * Calculates adaptive X-axis tick font size based on chart width and label count.\n   */\n  private getXAxisTickFontSize(chartWidth: number, itemCount = 1): number {\n    let size = chartWidth / 42;\n\n    if (itemCount > this.VERY_MANY_ITEMS_THRESHOLD) {\n      size *= 0.65;\n    } else if (itemCount > this.MANY_ITEMS_THRESHOLD) {\n      size *= 0.8;\n    }\n\n    return Math.max(this.MIN_FONT_SIZE_X, Math.min(this.MAX_FONT_SIZE_X, Math.round(size)));\n  }\n\n  /**\n   * Calculates adaptive Y-axis tick font size based on chart height.\n   */\n  private getYAxisTickFontSize(chartHeight: number): number {\n    const size = chartHeight / 28;\n    return Math.max(this.MIN_FONT_SIZE_Y, Math.min(this.MAX_FONT_SIZE_Y, Math.round(size)));\n  }\n\n  /**\n   * Calculates axis title font size relative to tick labels.\n   */\n  private getAxisTitleFontSize(tickFontSize: number): number {\n    return Math.min(15, Math.max(12, tickFontSize));\n  }\n\n  /**\n   * Estimates inner chart dimensions before margins are finalized.\n   */\n  private estimateChartDimensions(\n    containerWidth: number,\n    containerHeight: number,\n    options: AXLineChartOption,\n  ): { width: number; height: number } {\n    const outerWidth = options.width ?? Math.max(containerWidth, 1);\n    const outerHeight = options.height ?? Math.max(containerHeight, 1);\n\n    return {\n      width: Math.max(outerWidth - this.margin.left - this.margin.right, this.MIN_DIMENSION),\n      height: Math.max(outerHeight - this.margin.top - this.margin.bottom, this.MIN_DIMENSION),\n    };\n  }\n\n  /**\n   * Creates a unique key for point coordinates (for overlap detection)\n   */\n  private createPointKey(x: number, y: number): string {\n    const precision = this.POINT_COORDINATE_PRECISION;\n    return `${Math.round(x * precision) / precision},${Math.round(y * precision) / precision}`;\n  }\n\n  /**\n   * Removes series elements from the chart\n   */\n  private removeSeriesElements(seriesIdentifier: string): void {\n    this.chart.selectAll(`.ax-line-chart-series[data-series-identifier=\"${seriesIdentifier}\"]`).remove();\n    this.chart.selectAll(`.ax-line-chart-points[data-series-identifier=\"${seriesIdentifier}\"]`).remove();\n  }\n\n  /**\n   * Truncates long labels with ellipsis\n   */\n  private truncateLabel(label: string, maxLength: number = this.MAX_LABEL_LENGTH): string {\n    if (label.length <= maxLength) return label;\n    return label.substring(0, maxLength - 1) + '…';\n  }\n\n  /**\n   * Calculates maximum width needed for Y-axis tick labels\n   */\n  private calculateMaxYAxisTickLabelWidth(fontSize: number): number {\n    const allSeriesData = this._fullNormalizedData.filter((s) => !this.hiddenSeries.has(this.getSeriesIdentifier(s)));\n\n    let maxValue = 0;\n    let minValue = 0;\n\n    for (const series of allSeriesData) {\n      if (series.data && series.data.length > 0) {\n        for (const point of series.data) {\n          if (typeof point.y === 'number') {\n            maxValue = Math.max(maxValue, point.y);\n            minValue = Math.min(minValue, point.y);\n          }\n        }\n      }\n    }\n\n    // Check both max and min (for negative values)\n    const maxAbsValue = Math.max(Math.abs(maxValue), Math.abs(minValue));\n    const tickLabelText = Number.isFinite(maxAbsValue) ? formatLargeNumber(maxAbsValue) : '00000';\n\n    return tickLabelText.length * fontSize * this.FONT_WIDTH_MULTIPLIER + this.FONT_PADDING;\n  }\n\n  ngOnInit(): void {\n    this.loadD3();\n  }\n\n  #effect = effect(() => {\n    this._fullNormalizedData = this.normalizeData(this.data());\n    this.effectiveOptions();\n\n    if (this._rendered()) {\n      this.updateChart();\n      this.bumpLegendState();\n    }\n  });\n\n  private bumpLegendState(): void {\n    this._legendStateVersion.update((version) => version + 1);\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.cancelTooltipPosition();\n    this.cleanupChart();\n  }\n\n  // AXChartLegendCompatible Implementation\n  getLegendItems(): AXChartLegendItem[] {\n    const totalSum = this._fullNormalizedData.reduce((sum, series) => {\n      return sum + series.data.reduce((sSum, p) => sSum + p.y, 0);\n    }, 0);\n\n    return this._fullNormalizedData.map((series) => {\n      const seriesIdentifier = this.getSeriesIdentifier(series);\n      const seriesSum = series.data.reduce((sum, p) => sum + p.y, 0);\n      const percentage = totalSum > 0 ? (seriesSum / totalSum) * 100 : 0;\n      return {\n        id: seriesIdentifier,\n        name: series.label || `Series ${series.originalIndex + 1}`,\n        value: seriesSum,\n        color: series.lineColor || getChartColor(series.originalIndex, this.chartColors),\n        hidden: this.hiddenSeries.has(seriesIdentifier),\n        percentage: parseFloat(percentage.toFixed(2)),\n      };\n    });\n  }\n\n  highlightSegment(id: string | null): void {\n    if (!this.svg) return;\n\n    const allSeriesGroups = this.svg.selectAll('g.ax-line-chart-series');\n    const allPointsGroups = this.svg.selectAll('g.ax-line-chart-points');\n\n    if (id === null) {\n      allSeriesGroups.classed('ax-chart-dimmed', false).style('opacity', 1);\n      allPointsGroups.classed('ax-chart-dimmed', false).style('opacity', 1);\n\n      allSeriesGroups\n        .selectAll('.ax-line-chart-line')\n        .attr('stroke-width', this.effectiveOptions().lineWidth ?? this.DEFAULT_LINE_WIDTH)\n        .classed('ax-chart-highlighted-path', false);\n      allPointsGroups\n        .selectAll('circle.ax-line-chart-point')\n        .attr('r', this.effectiveOptions().pointRadius ?? this.DEFAULT_POINT_RADIUS)\n        .classed('ax-chart-highlighted-point', false);\n      return;\n    }\n\n    allSeriesGroups.classed('ax-chart-dimmed', true).style('opacity', 0.3);\n    allPointsGroups.classed('ax-chart-dimmed', true).style('opacity', 0.3);\n\n    const targetSeriesGroup = this.svg.selectAll(`g.ax-line-chart-series[data-series-identifier=\"${id}\"]`);\n    const targetPointsGroup = this.svg.selectAll(`g.ax-line-chart-points[data-series-identifier=\"${id}\"]`);\n\n    targetSeriesGroup.classed('ax-chart-dimmed', false).style('opacity', 1);\n    targetPointsGroup.classed('ax-chart-dimmed', false).style('opacity', 1);\n\n    targetSeriesGroup\n      .selectAll('.ax-line-chart-line')\n      .attr(\n        'stroke-width',\n        (this.effectiveOptions().lineWidth ?? this.DEFAULT_LINE_WIDTH) * this.LINE_HIGHLIGHT_MULTIPLIER,\n      )\n      .classed('ax-chart-highlighted-path', true);\n\n    targetPointsGroup\n      .selectAll('circle.ax-line-chart-point')\n      .attr('r', (this.effectiveOptions().pointRadius ?? this.DEFAULT_POINT_RADIUS) * this.POINT_HIGHLIGHT_MULTIPLIER)\n      .classed('ax-chart-highlighted-point', true);\n  }\n\n  toggleSegment(id: string): boolean {\n    if (this.hiddenSeries.has(id)) {\n      this.hiddenSeries.delete(id);\n    } else {\n      this.hiddenSeries.add(id);\n    }\n    this.updateChart();\n    this.bumpLegendState();\n    return !this.hiddenSeries.has(id);\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  public createChart(): void {\n    if (!this.d3 || !this.chartContainerEl()?.nativeElement) return;\n\n    const containerElement = this.chartContainerEl().nativeElement;\n    const allSeriesData = this._fullNormalizedData;\n\n    // Clear previous SVG and any empty-state messages (preserve tooltip component)\n    this.d3\n      .select(containerElement)\n      .selectAll('svg, .ax-chart-empty, .ax-line-chart-no-data-message, .ax-line-chart-all-hidden-message')\n      .remove();\n\n    if (allSeriesData.length === 0 || allSeriesData.every((series) => !series.data || series.data.length === 0)) {\n      this.showNoDataMessage(containerElement);\n      return;\n    }\n\n    const visibleDataForRendering = allSeriesData.filter(\n      (series) => !this.hiddenSeries.has(this.getSeriesIdentifier(series)),\n    );\n\n    if (visibleDataForRendering.length === 0) {\n      // All data is present, but all series are hidden by the legend\n      this.showAllSeriesHiddenMessage(containerElement);\n      // Still setup basic SVG and chart group for consistency if needed, or return\n      // For now, we will show the message and return, as scales/axes can't be drawn.\n      return;\n    }\n\n    const chartOptions = this.effectiveOptions();\n    this.setupDimensions(containerElement, chartOptions);\n\n    // Use allSeriesData for domain calculation to keep scales consistent\n    const dataForScaleSetup = allSeriesData.filter((s) => s.data && s.data.length > 0);\n    if (dataForScaleSetup.length === 0) {\n      this.showNoDataMessage(containerElement);\n      return;\n    }\n    this.setupScales(dataForScaleSetup);\n    this.createAxes(chartOptions);\n    this.renderLines(allSeriesData); // RenderLines will handle hiding based on hiddenSeries\n  }\n\n  public updateChart(): void {\n    this.createChart();\n  }\n\n  public cleanupChart(): void {\n    this.cancelTooltipPosition();\n    if (this.svg) {\n      this.d3\n        ?.select(this.chartContainerEl()?.nativeElement)\n        .selectAll('svg, .ax-chart-empty, .ax-line-chart-no-data-message, .ax-line-chart-all-hidden-message')\n        .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    const containerWidth = Math.max(containerElement.clientWidth, 1);\n    const containerHeight = Math.max(containerElement.clientHeight, 1);\n    this.calculateMargins(options, 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 = containerWidth - this.margin.left - this.margin.right;\n      this.height = containerHeight - this.margin.top - this.margin.bottom;\n    }\n\n    this.width = Math.max(this.width, this.MIN_DIMENSION);\n    this.height = Math.max(this.height, this.MIN_DIMENSION);\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, containerWidth: number, containerHeight: number): void {\n    this.margin = {\n      top: options.margins?.top ?? this.DEFAULT_MARGIN_TOP,\n      right: options.margins?.right ?? this.DEFAULT_MARGIN_RIGHT,\n      bottom: options.margins?.bottom ?? this.DEFAULT_MARGIN_BOTTOM,\n      left: options.margins?.left ?? this.DEFAULT_MARGIN_LEFT,\n    };\n\n    const estimatedDimensions = this.estimateChartDimensions(containerWidth, containerHeight, options);\n    const allDataPoints = this._fullNormalizedData.flatMap((series) => series.data);\n    const allNumericX = allDataPoints.length === 0 || allDataPoints.every((d) => typeof d.x === 'number');\n\n    let categoricalLabels: string[] | null = null;\n    if (!allNumericX) {\n      const visibleSeries = this._fullNormalizedData.filter((s) => !this.hiddenSeries.has(this.getSeriesIdentifier(s)));\n      categoricalLabels = [...new Set(visibleSeries.flatMap((series) => series.data.map((d) => String(d.x))))];\n    }\n\n    this.margin.bottom = this.calculateRequiredBottomMargin(options, estimatedDimensions.width, categoricalLabels);\n    this.margin.left = this.calculateRequiredLeftMargin(options, estimatedDimensions.height);\n\n    // Second pass: margins affect inner chart size, which affects label layout\n    const refinedDimensions = this.estimateChartDimensions(containerWidth, containerHeight, options);\n    this.margin.bottom = this.calculateRequiredBottomMargin(options, refinedDimensions.width, categoricalLabels);\n    this.margin.left = this.calculateRequiredLeftMargin(options, refinedDimensions.height);\n  }\n\n  private setupScales(data: (AXLineChartData & { originalIndex: number })[]): void {\n    // Expects already filtered data for scales\n    const chartOptions = this.effectiveOptions();\n    const padding = chartOptions.axisPadding ?? 0;\n    const paddingMultiplier = padding / 100;\n\n    // Ensure data is not empty for scale domain calculation\n    const allDataPoints = data.length > 0 ? data.flatMap((series) => series.data) : [{ x: 0, y: 0 }];\n    if (allDataPoints.length === 0) {\n      // Should ideally not happen if createChart filters correctly\n      allDataPoints.push({ x: 0, y: 0 }); // Default fallback to prevent crash with empty domain\n    }\n\n    const allNumericX = allDataPoints.every((d) => typeof d.x === 'number');\n\n    if (allNumericX) {\n      this.xScaleKind = 'linear';\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 {\n      this.xScaleKind = 'point';\n      const xDomain: string[] = [];\n      const seenX = new Set<string>();\n      for (const point of allDataPoints) {\n        const key = String(point.x);\n        if (!seenX.has(key)) {\n          seenX.add(key);\n          xDomain.push(key);\n        }\n      }\n\n      this.xScale = this.d3.scalePoint<string>().domain(xDomain).range([0, this.width]).padding(0);\n    }\n\n    const yAxisStartsAtZero = chartOptions.yAxisStartsAtZero !== false;\n    const dataYMin = this.d3.min(allDataPoints, (d) => d.y) ?? 0;\n    const dataYMax = this.d3.max(allDataPoints, (d) => d.y) ?? 0;\n\n    let yMin: number;\n    let yMax: number;\n\n    if (yAxisStartsAtZero) {\n      yMin = Math.min(0, dataYMin);\n      yMax = Math.max(0, dataYMax);\n    } else {\n      yMin = dataYMin;\n      yMax = dataYMax;\n    }\n\n    const yRange = yMax - yMin || 1;\n\n    this.yScale = this.d3\n      .scaleLinear()\n      .domain([yMin, yMax + yRange * paddingMultiplier])\n      .nice()\n      .range([this.height, 0]);\n\n    if (yAxisStartsAtZero && dataYMin >= 0) {\n      this.yScale.domain([0, this.yScale.domain()[1]]);\n    }\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 isPointScale = this.xScaleKind === 'point';\n    const pointScale = isPointScale ? (this.xScale as d3.ScalePoint<string>) : null;\n    const isRtl = document.documentElement.dir === 'rtl' || document.body.dir === 'rtl';\n    const axesGroup = this.chart.append('g').attr('class', 'ax-line-chart-axes');\n\n    if (showXAxis) {\n      let xAxisGenerator;\n      let itemCount = 0;\n\n      if (isPointScale && pointScale) {\n        itemCount = pointScale.domain().length;\n        const pointLayout = this.resolveXAxisLabelLayout(this.width, pointScale.domain());\n        this.xAxisLabelLayout.fontSize = pointLayout.fontSize;\n        this.xAxisLabelLayout.willRotate = pointLayout.willRotate;\n        this.xAxisLabelLayout.tickAreaHeight = pointLayout.tickAreaHeight;\n        this.xAxisLabelLayout.displayedTickCount = pointLayout.displayedTickCount;\n\n        // Smart tick reduction for many items (like bar chart)\n        let tickValues: string[] = pointScale.domain();\n        if (itemCount > this.VERY_MANY_ITEMS_THRESHOLD) {\n          // Show every 5th tick for 50+ items\n          tickValues = tickValues.filter((_d, i) => i % 5 === 0);\n        } else if (itemCount > this.MANY_ITEMS_THRESHOLD) {\n          // Show every 2nd tick for 20-50 items\n          tickValues = tickValues.filter((_d, i) => i % 2 === 0);\n        }\n\n        xAxisGenerator = this.d3\n          .axisBottom(pointScale)\n          .tickValues(tickValues)\n          .tickSize(5)\n          .tickPadding(8)\n          .tickFormat((d: d3.AxisDomain) => {\n            const label = String(d);\n            // Truncate long labels intelligently\n            const maxLength = itemCount > this.MANY_ITEMS_THRESHOLD ? 10 : this.MAX_LABEL_LENGTH;\n            return this.truncateLabel(label, maxLength);\n          });\n      } else {\n        // Linear scale (numeric data)\n        // Let D3 determine optimal tick count, but ensure we show reasonable number\n        // Calculate optimal tick count based on width\n        const optimalTickCount = Math.min(12, Math.max(5, Math.floor(this.width / 80)));\n\n        xAxisGenerator = this.d3\n          .axisBottom(this.xScale)\n          .ticks(optimalTickCount)\n          .tickSize(5)\n          .tickPadding(8)\n          .tickFormat((d: d3.AxisDomain) => {\n            // Format numbers nicely\n            const num = Number(d);\n            if (Number.isInteger(num)) {\n              return String(num);\n            }\n            return num.toFixed(1);\n          });\n\n        itemCount = optimalTickCount;\n      }\n\n      this.xAxis = axesGroup\n        .append('g')\n        .attr('class', 'ax-line-chart-axis-x')\n        .attr('transform', `translate(0,${this.height})`)\n        .call(xAxisGenerator);\n\n      // Style the x-axis path and lines\n      this.xAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n\n      this.xAxis\n        .selectAll('line')\n        .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n        .attr('stroke-dasharray', '2,2')\n        .attr('stroke-opacity', '0.5');\n\n      const dynamicXAxisTickFontSize = isPointScale\n        ? this.xAxisLabelLayout.fontSize\n        : this.getXAxisTickFontSize(this.width, itemCount);\n      const xAxisTicks = this.xAxis\n        .selectAll('text')\n        .style('font-size', `${dynamicXAxisTickFontSize}px`)\n        .style('font-weight', '400')\n        .style('fill', 'rgba(var(--ax-comp-line-chart-labels-color), 0.7)')\n        .attr('direction', 'ltr');\n\n      if (isPointScale && pointScale && pointScale.domain().length > 0) {\n        if (this.xAxisLabelLayout.willRotate) {\n          xAxisTicks\n            .attr('transform', 'rotate(-45)')\n            .style('text-anchor', 'end')\n            .attr('dx', '-0.8em')\n            .attr('dy', '0.15em');\n        }\n      }\n\n      const xTickAreaHeight = this.measureXAxisTickAreaHeight(\n        this.xAxis.node(),\n        dynamicXAxisTickFontSize,\n        this.xAxisLabelLayout.tickAreaHeight,\n      );\n\n      if (options.xAxisLabel) {\n        this.createXAxisTitle(axesGroup, options.xAxisLabel, xTickAreaHeight, dynamicXAxisTickFontSize);\n      }\n    }\n\n    if (showYAxis) {\n      // Create Y axis with smart number formatting\n      const yAxisGenerator = this.d3\n        .axisLeft(this.yScale)\n        .tickSize(5)\n        .tickPadding(8)\n        .tickFormat((value: number | { valueOf(): number }) => {\n          const numValue = typeof value === 'number' ? value : value.valueOf();\n          return formatLargeNumber(numValue);\n        });\n\n      // Reduce tick count for better readability with large numbers\n      const maxValue = this.yScale.domain()[1];\n      if (maxValue > 1e6) {\n        yAxisGenerator.ticks(6); // Fewer ticks for millions+\n      } else if (maxValue > 1e3) {\n        yAxisGenerator.ticks(8);\n      }\n\n      this.yAxis = axesGroup.append('g').attr('class', 'ax-line-chart-axis-y').call(yAxisGenerator);\n\n      // Style the y-axis path and lines\n      this.yAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n\n      this.yAxis\n        .selectAll('line')\n        .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n        .attr('stroke-dasharray', '2,2')\n        .attr('stroke-opacity', '0.5');\n\n      const dynamicYAxisTickFontSize = this.getYAxisTickFontSize(this.height);\n      const yTickTexts = this.yAxis.selectAll('text').attr(\n        'style',\n        `\n          font-size: ${dynamicYAxisTickFontSize}px;\n          font-weight: 400;\n          fill: rgba(var(--ax-comp-line-chart-labels-color), 0.7);\n        `,\n      );\n\n      if (isRtl) {\n        yTickTexts.attr('text-anchor', 'start');\n      } else {\n        yTickTexts.attr('text-anchor', 'end').attr('direction', 'ltr');\n      }\n\n      const yTickNodes = (yTickTexts.nodes() || []) as SVGTextElement[];\n      const maxTickLabelWidth = this.measureMaxYAxisTickLabelWidth(yTickNodes, dynamicYAxisTickFontSize);\n\n      if (options.yAxisLabel) {\n        this.createYAxisTitle(axesGroup, options.yAxisLabel, dynamicYAxisTickFontSize, maxTickLabelWidth);\n      }\n    }\n\n    if (showGrid) {\n      const gridGroup = this.chart\n        .append('g')\n        .attr('class', 'ax-line-chart-grid-container')\n        .attr('pointer-events', 'none');\n\n      const yGrid = 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\n      // Style the grid path and lines\n      yGrid.selectAll('path').attr('stroke-width', '0');\n\n      yGrid\n        .selectAll('.tick')\n        .selectAll('line')\n        .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n        .attr('stroke-dasharray', '2,2')\n        .attr('stroke-opacity', '0.5');\n\n      if (options.showVerticalGrid) {\n        const xGrid = 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(isPointScale ? undefined : (this.xScale as d3.ScaleLinear<number, number>).ticks()),\n          );\n\n        // Style the vertical grid path and lines\n        xGrid.selectAll('path').attr('stroke-width', '0');\n\n        xGrid\n          .selectAll('.tick')\n          .selectAll('line')\n          .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.15)')\n          .attr('stroke-dasharray', '2,2')\n          .attr('stroke-opacity', '0.5');\n      }\n    }\n  }\n\n  private getXPosition(point: { x: number | string }): number {\n    if (this.xScaleKind === 'point') {\n      return (this.xScale as d3.ScalePoint<string>)(String(point.x)) ?? 0;\n    }\n\n    return (this.xScale as d3.ScaleLinear<number, number>)(point.x as number);\n  }\n\n  private renderLines(allSeriesData: (AXLineChartData & { originalIndex: number })[]): void {\n    const getX = (d: { x: number | string; y: number }) => this.getXPosition(d);\n\n    const lineGenerator = this.d3\n      .line<{ x: number | string; y: number }>()\n      .x(getX)\n      .y((d) => this.yScale(d.y)) as d3.Line<{ x: number | string; y: number }>;\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    this.svg.attr('class', 'ax-line-chart-animating');\n\n    const allSeriesGroup = this.chart\n      .append('g')\n      .attr('class', 'ax-line-chart-all-series')\n      .attr('pointer-events', 'none');\n\n    const allPointsGroup = this.chart\n      .append('g')\n      .attr('class', 'ax-line-chart-all-points')\n      .attr('pointer-events', 'none');\n\n    if (this.effectiveOptions().showCrosshair === true) {\n      this.chart.append('g').attr('class', 'ax-line-chart-crosshair').attr('pointer-events', 'none');\n    }\n\n    const animationDuration = this.effectiveOptions().animationDuration;\n    const animationEasing = getEasingFunction(this.d3, this.effectiveOptions().animationEasing);\n\n    allSeriesData.forEach((series) => {\n      const seriesIdentifier = this.getSeriesIdentifier(series);\n\n      if (this.hiddenSeries.has(seriesIdentifier)) {\n        this.removeSeriesElements(seriesIdentifier);\n        return;\n      }\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-${series.originalIndex}`)\n        .attr('data-series-identifier', seriesIdentifier)\n        .attr('pointer-events', 'none');\n\n      const lineColor = series.lineColor || getChartColor(series.originalIndex, this.chartColors);\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 ?? this.DEFAULT_LINE_WIDTH)\n        .attr('stroke-linejoin', 'round')\n        .attr('stroke-linecap', 'round')\n        .attr('d', lineGenerator)\n        .attr('fill', 'none')\n        .attr('style', 'transition: stroke-width 0.3s ease;')\n        .attr('pointer-events', 'none');\n\n      line\n        .on('mouseenter', () => {\n          line\n            .transition()\n            .duration(this.HOVER_TRANSITION_DURATION)\n            .attr(\n              'stroke-width',\n              (this.effectiveOptions().lineWidth ?? this.DEFAULT_LINE_WIDTH) * this.LINE_HIGHLIGHT_MULTIPLIER,\n            );\n        })\n        .on('mouseleave', () => {\n          line\n            .transition()\n            .duration(this.HOVER_TRANSITION_DURATION)\n            .attr('stroke-width', this.effectiveOptions().lineWidth ?? this.DEFAULT_LINE_WIDTH);\n        });\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        .on('end', function () {\n          line.attr('pointer-events', 'all');\n        });\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          .attr('style', 'transition: opacity 0.3s ease;')\n          .attr('pointer-events', 'none');\n\n        area\n          .on('mouseenter', () => {\n            area\n              .transition()\n              .duration(this.HOVER_TRANSITION_DURATION)\n              .attr('opacity', ((this.effectiveOptions().fillOpacity ?? 20) / 100) * 1.5);\n          })\n          .on('mouseleave', () => {\n            area\n              .transition()\n              .duration(this.HOVER_TRANSITION_DURATION)\n              .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100);\n          });\n\n        area\n          .transition()\n          .duration(animationDuration)\n          .ease(animationEasing)\n          .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100)\n          .on('end', function () {\n            area.attr('pointer-events', 'all');\n          });\n      }\n    });\n\n    if (this.effectiveOptions().showPoints !== false) {\n      const pointMap = new Map<\n        string,\n        Array<{\n          point: { x: number | string; y: number };\n          series: AXLineChartData & { originalIndex: number };\n          originalIndex: number;\n        }>\n      >();\n\n      allSeriesData.forEach((series) => {\n        const seriesIdentifier = this.getSeriesIdentifier(series);\n        if (this.hiddenSeries.has(seriesIdentifier) || !series.data || series.data.length === 0) {\n          return;\n        }\n\n        const pointData = this.getReducedDataPoints(series.data, this.MAX_POINTS_TO_RENDER);\n\n        pointData.forEach((point) => {\n          const x = getX(point);\n          const y = this.yScale(point.y);\n          const key = this.createPointKey(x, y);\n\n          if (!pointMap.has(key)) {\n            pointMap.set(key, []);\n          }\n          pointMap.get(key)?.push({ point, series, originalIndex: series.originalIndex });\n        });\n      });\n\n      let animationCounter = 0;\n      const totalVisibleSeriesCount = allSeriesData.filter(\n        (s) => !this.hiddenSeries.has(this.getSeriesIdentifier(s)) && s.data && s.data.length > 0,\n      ).length;\n\n      allSeriesData.forEach((series) => {\n        const seriesIdentifier = this.getSeriesIdentifier(series);\n        if (this.hiddenSeries.has(seriesIdentifier) || !series.data || series.data.length === 0) {\n          return;\n        }\n\n        const lineColor = series.lineColor || getChartColor(series.originalIndex, this.chartColors);\n        const pointsGroup = allPointsGroup\n          .append('g')\n          .attr('class', `ax-line-chart-points ax-line-chart-points-${series.originalIndex}`)\n          .attr('data-series-identifier', seriesIdentifier)\n          .attr('pointer-events', 'none');\n\n        pointsGroup\n          .on('mouseenter', () => this.handlePointGroupEnter(series.originalIndex))\n          .on('mouseleave', () => this.handlePointGroupLeave());\n\n        const pointData = this.getReducedDataPoints(series.data, this.MAX_POINTS_TO_RENDER);\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          .attr('pointer-events', 'none')\n          .on('mouseenter', (event: MouseEvent, d: { x: number | string; y: number }) => {\n            const x = getX(d);\n            const y = this.yScale(d.y);\n            const key = this.createPointKey(x, y);\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, series.originalIndex);\n            }\n\n            const pointRadius = this.effectiveOptions().pointRadius ?? this.DEFAULT_POINT_RADIUS;\n            this.d3\n              .select(event.target as SVGCircleElement)\n              .interrupt()\n              .attr('r', pointRadius * this.POINT_HIGHLIGHT_MULTIPLIER)\n              .attr('stroke-width', this.POINT_HOVER_STROKE_WIDTH)\n              .attr('stroke', `rgb(var(--ax-comp-line-chart-bg-color))`);\n          })\n          .on('mousemove', (event: MouseEvent) => this.updateTooltipPosition(event))\n          .on('mouseleave', (event: MouseEvent) => {\n            this._tooltipVisible.set(false);\n            const pointRadius = this.effectiveOptions().pointRadius ?? this.DEFAULT_POINT_RADIUS;\n            this.d3\n              .select(event.target as SVGCircleElement)\n              .interrupt()\n              .attr('r', pointRadius)\n              .attr('stroke-width', this.POINT_STROKE_WIDTH)\n              .attr('stroke', '#fff');\n          })\n          .on('click', (event: MouseEvent, d: { x: number | string; y: number }) => {\n            const x = getX(d);\n            const y = this.yScale(d.y);\n            const key = this.createPointKey(x, y);\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(\n            (_d: { x: number | string; y: number }, i: number) =>\n              i * Math.min(this.POINT_ANIMATION_DELAY_MS, (animationDuration || 0) * 0.05) +\n              (animationDuration || 0) * this.POINT_ANIMATION_DELAY_RATIO,\n          )\n          .duration((animationDuration || 0) * this.POINT_ANIMATION_DURATION_RATIO)\n          .ease(animationEasing)\n          .attr('r', this.effectiveOptions().pointRadius ?? this.DEFAULT_POINT_RADIUS)\n          .on('end', (d, i, nodes) => {\n            if (i === nodes.length - 1) {\n              animationCounter++;\n              if (animationCounter >= totalVisibleSeriesCount) {\n                this.enablePointerEventsAfterAnimation();\n              }\n            }\n          });\n      });\n    } else {\n      setTimeout(() => this.enablePointerEventsAfterAnimation(), (animationDuration || 0) + this.ANIMATION_END_BUFFER);\n    }\n  }\n\n  private enablePointerEventsAfterAnimation(): void {\n    if (!this.chart || !this.svg) return;\n    this.chart.selectAll('.ax-line-chart-all-series').attr('pointer-events', 'all');\n    this.chart.selectAll('.ax-line-chart-series').attr('pointer-events', 'all');\n    this.chart.selectAll('.ax-line-chart-line').attr('pointer-events', 'all');\n    this.chart.selectAll('.ax-line-chart-area').attr('pointer-events', 'all');\n    this.chart.selectAll('.ax-line-chart-all-points').attr('pointer-events', 'all');\n    this.chart.selectAll('.ax-line-chart-points').attr('pointer-events', 'all');\n    this.chart.selectAll('.ax-line-chart-point').attr('pointer-events', 'all');\n    this.svg.classed('ax-line-chart-animating', false);\n  }\n\n  private handlePointGroupEnter(originalIndex: number): void {\n    this.chart\n      .select(`.ax-line-chart-series-${originalIndex} .ax-line-chart-line`)\n      .transition()\n      .duration(this.HOVER_TRANSITION_DURATION)\n      .attr(\n        'stroke-width',\n        (this.effectiveOptions().lineWidth ?? this.DEFAULT_LINE_WIDTH) * this.LINE_HIGHLIGHT_MULTIPLIER,\n      );\n  }\n\n  private handlePointGroupLeave(): void {\n    this.chart\n      .selectAll('.ax-line-chart-line')\n      .transition()\n      .duration(this.HOVER_TRANSITION_DURATION)\n      .attr('stroke-width', this.effectiveOptions().lineWidth ?? this.DEFAULT_LINE_WIDTH);\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    const result: Array<{ x: number | string; y: number }> = [];\n    const step = Math.ceil(data.length / maxPoints);\n    for (let i = 0; i < data.length; i += step) {\n      result.push(data[i]);\n    }\n    if (result[result.length - 1] !== data[data.length - 1]) {\n      result.push(data[data.length - 1]);\n    }\n    return result;\n  }\n\n  private handlePointHover(\n    event: MouseEvent,\n    dataPoint: AXLineChartData['data'][number],\n    series: AXLineChartData & { originalIndex: number },\n    originalIndex: number,\n  ): void {\n    if (this.effectiveOptions().showTooltip !== false) {\n      const color = series.lineColor || getChartColor(originalIndex, this.chartColors);\n\n      this._tooltipData.set({\n        title: dataPoint.tooltipLabel || series.tooltipLabel || series.label || `Series ${originalIndex + 1}`,\n        value: formatLargeNumber(dataPoint.y),\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 x = this.getXPosition(dataPoint);\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').attr('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', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n      .attr('stroke-width', 1)\n      .attr('stroke-dasharray', '3,3')\n      .attr('opacity', 0.7)\n      .attr('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', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n      .attr('stroke-width', 1)\n      .attr('stroke-dasharray', '3,3')\n      .attr('opacity', 0.7)\n      .attr('pointer-events', 'none');\n  }\n\n  private updateTooltipPosition(event: MouseEvent): void {\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): void {\n    this._tooltipRafId = requestAnimationFrame(() => {\n      const coords = this._pendingTooltipCoords;\n      if (!coords) {\n        this._tooltipRafId = null;\n        return;\n      }\n\n      const containerEl = this.chartContainerEl()?.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 handlePointClick(\n    event: MouseEvent,\n    dataPoint: AXLineChartData['data'][number],\n    series: AXLineChartData & { originalIndex: number },\n  ): void {\n    this.pointClick.emit({\n      series: series, // series still refers to the full series data with originalIndex\n      point: dataPoint,\n      event: {\n        nativeEvent: event,\n        sender: this,\n      },\n    });\n  }\n\n  private showNoDataMessage(containerElement: HTMLElement): void {\n    const messages = this.effectiveMessages();\n    renderChartEmptyMessage(this.d3, containerElement, {\n      icon: messages.noDataIcon,\n      title: messages.noData,\n      help: messages.noDataHelp,\n    });\n  }\n\n  private showAllSeriesHiddenMessage(containerElement: HTMLElement): void {\n    const messages = this.effectiveMessages();\n    renderChartEmptyMessage(this.d3, containerElement, {\n      icon: messages.allHiddenIcon,\n      title: messages.allHidden,\n      help: messages.allHiddenHelp,\n    });\n  }\n\n  private handleOverlappingPointsHover(\n    event: MouseEvent,\n    overlappingPoints: Array<{\n      point: { x: number | string; y: number };\n      series: AXLineChartData & { originalIndex: number };\n      originalIndex: number;\n    }>,\n  ): void {\n    if (this.effectiveOptions().showTooltip === false) return;\n\n    const tooltipData: AXChartTooltipData = {\n      title: overlappingPoints.map(({ series }) => series.label),\n      value: formatLargeNumber(overlappingPoints[0].point.y),\n      color: overlappingPoints.map(\n        ({ series }) => series.lineColor || getChartColor(series.originalIndex, this.chartColors),\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","<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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"}