{"version":3,"file":"acorex-charts.mjs","sources":["../../../../packages/charts/src/lib/chart-colors.ts","../../../../packages/charts/src/lib/chart-component-base.ts","../../../../packages/charts/src/lib/chart-empty-state.ts","../../../../packages/charts/src/lib/chart-messages.ts","../../../../packages/charts/src/lib/chart-utils.ts","../../../../packages/charts/src/index.ts","../../../../packages/charts/src/acorex-charts.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n// Default color palette for charts\nexport const AX_CHART_COLOR_PALETTE = new InjectionToken<string[]>(\n  'AX_CHART_COLOR_PALETTE',\n  {\n    providedIn: 'root',\n    factory: () => [\n      '#FF6B6B', // Vibrant Red\n      '#4ECDC4', // Electric Teal\n      '#45B7D1', // Bright Blue\n      '#96CEB4', // Fresh Green\n      '#FFEEAD', // Bright Yellow\n      '#D4A5A5', // Rose Pink\n      '#9B59B6', // Rich Purple\n      '#3498DB', // Deep Blue\n      '#E67E22', // Bright Orange\n      '#2ECC71', // Emerald Green\n      '#E74C3C', // Cherry Red\n      '#1ABC9C', // Turquoise\n      '#F1C40F', // Golden Yellow\n      '#8E44AD', // Deep Purple\n      '#16A085', // Dark Teal\n\n      // --- Extended Colors (new) ---\n      '#27AE60', // Forest Green\n      '#2980B9', // Strong Blue\n      '#F39C12', // Vivid Orange\n      '#C0392B', // Dark Red\n      '#7D3C98', // Plum Purple\n      '#2C3E50', // Midnight Blue\n      '#D35400', // Burnt Orange\n      '#BDC3C7', // Soft Silver\n      '#34495E', // Slate Gray\n      '#1F618D', // Royal Blue\n      '#58D68D', // Mint Green\n      '#5DADE2', // Sky Blue\n      '#F1948A', // Soft Coral\n      '#A569BD', // Lavender Purple\n      '#F8C471', // Warm Gold\n    ],\n  }\n);\n\n\n/**\n * Helper function to get a color from the palette by index\n * @param index The index of the color to get\n * @param palette The color palette to use\n * @returns The color at the specified index\n */\nexport function getChartColor(index: number, palette: string[]): string {\n  return palette[index % palette.length];\n}\n","import { afterNextRender, Directive, ElementRef, inject, signal } from '@angular/core';\n\n/**\n * Base component class for all chart components\n * Copied from @acorex/cdk/common NXComponent to remove external dependency\n */\n@Directive()\nexport abstract class AXChartComponent {\n  #elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n  #isRendered = signal(false);\n\n  protected isRendered = this.#isRendered.asReadonly();\n\n  #afterNextRender = afterNextRender(() => {\n    if (!this.isRendered()) {\n      this.nativeElement['__axContext__'] = this;\n      this.#isRendered.set(true);\n    }\n  });\n\n  /**\n   * Gets the native HTML element of the component\n   */\n  public get nativeElement(): HTMLElement {\n    return this.#elementRef.nativeElement;\n  }\n\n  /**\n   * Gets the host HTML element of the component (alias for nativeElement)\n   * @returns T - The native DOM element associated with this component\n   */\n  public getHostElement<T = HTMLElement>(): T {\n    return this.#elementRef.nativeElement as T;\n  }\n}\n","export interface AXChartEmptyMessageContent {\n  icon: string;\n  title: string;\n  help?: string;\n}\n\n/**\n * Renders a centered empty-state message inside a chart container.\n * Clears prior SVG / empty-state nodes; leaves Angular tooltip hosts alone.\n */\nexport function renderChartEmptyMessage(\n  d3: { select: (node: HTMLElement) => D3EmptySelection },\n  container: HTMLElement,\n  message: AXChartEmptyMessageContent,\n): void {\n  const root = d3.select(container);\n  root.selectAll('svg, .ax-chart-empty').remove();\n\n  const card = root.append('div').attr('class', 'ax-chart-empty').append('div').attr('class', 'ax-chart-empty__card');\n\n  card\n    .append('div')\n    .attr('class', 'ax-chart-empty__icon')\n    .html(`<i class=\"${message.icon} fa-2x\" aria-hidden=\"true\"></i>`);\n\n  card.append('div').attr('class', 'ax-chart-empty__title').text(message.title);\n\n  if (message.help) {\n    card.append('div').attr('class', 'ax-chart-empty__help').text(message.help);\n  }\n}\n\n/** Minimal D3 selection surface used by empty-state rendering. */\ninterface D3EmptySelection {\n  selectAll: (selector: string) => { remove: () => unknown };\n  append: (tag: string) => D3EmptyAppend;\n}\n\ninterface D3EmptyAppend {\n  attr: (name: string, value: string) => D3EmptyAppend;\n  append: (tag: string) => D3EmptyAppend;\n  html: (value: string) => D3EmptyAppend;\n  text: (value: string) => D3EmptyAppend;\n}\n","/**\n * Shared empty-state copy for all charts.\n * Per-chart configs may override icons; default title/help stay consistent.\n */\nexport interface AXChartMessages {\n  noData?: string;\n  noDataHelp?: string;\n  allHidden?: string;\n  allHiddenHelp?: string;\n  noDataIcon?: string;\n  allHiddenIcon?: string;\n}\n\nexport const AX_CHART_DEFAULT_MESSAGES: Required<AXChartMessages> = {\n  noData: 'No data available',\n  noDataHelp: 'Please provide data to display the chart',\n  allHidden: 'All series are hidden',\n  allHiddenHelp: 'Click on legend items to show them',\n  noDataIcon: 'fa-light fa-chart-simple',\n  allHiddenIcon: 'fa-light fa-eye-slash',\n};\n\nexport function mergeChartMessages(\n  defaults: AXChartMessages = {},\n  overrides?: AXChartMessages,\n): Required<AXChartMessages> {\n  return {\n    ...AX_CHART_DEFAULT_MESSAGES,\n    ...defaults,\n    ...overrides,\n  };\n}\n\n/** Shallow merge options while preserving nested margin/messages defaults. */\nexport function mergeChartOptions<T extends object>(defaults: T, options?: Partial<T> | null): T {\n  const opts = (options ?? {}) as Partial<T>;\n  const result = { ...defaults, ...opts } as T & {\n    messages?: AXChartMessages;\n    margins?: object;\n    margin?: object;\n  };\n\n  const defaultRecord = defaults as {\n    messages?: AXChartMessages;\n    margins?: object;\n    margin?: object;\n  };\n  const optionRecord = opts as {\n    messages?: AXChartMessages;\n    margins?: object;\n    margin?: object;\n  };\n\n  if (defaultRecord.messages || optionRecord.messages) {\n    result.messages = mergeChartMessages(defaultRecord.messages, optionRecord.messages);\n  }\n  if (defaultRecord.margins || optionRecord.margins) {\n    result.margins = { ...defaultRecord.margins, ...optionRecord.margins };\n  }\n  if (defaultRecord.margin || optionRecord.margin) {\n    result.margin = { ...defaultRecord.margin, ...optionRecord.margin };\n  }\n\n  return result;\n}\n","export type TooltipPosition = { x: number; y: number };\n\n/**\n * Resolves any CSS `<color>` the browser understands — including\n * `rgb(var(--token))`, `hsl(var(--token))`, `color-mix()`, etc. — to a computed\n * `rgb()` / `rgba()` string, using the cascade from `scopeElement` (e.g. the chart\n * container) so design tokens on ancestors apply.\n */\nexport function resolveCssColorInContext(scopeElement: HTMLElement, cssColor: string): string {\n  if (typeof window === 'undefined' || typeof document === 'undefined' || !getComputedStyle) {\n    return cssColor;\n  }\n  const input = cssColor?.trim();\n  if (!input) {\n    return cssColor;\n  }\n\n  const probe = document.createElement('span');\n  probe.style.cssText =\n    'position:absolute;left:-9999px;top:-9999px;visibility:hidden;pointer-events:none;';\n  probe.style.color = input;\n  scopeElement.appendChild(probe);\n  void probe.offsetHeight;\n  const resolved = getComputedStyle(probe).color;\n  probe.remove();\n\n  return resolved || cssColor;\n}\n\n/**\n * Compute edge-aware tooltip position relative to the chart container,\n * using pointer viewport coordinates (clientX/clientY) and keeping the\n * tooltip inside the container bounds.\n */\nexport function computeTooltipPosition(\n  containerEl: HTMLElement,\n  tooltipRect: DOMRect | null,\n  clientX: number,\n  clientY: number,\n  gap: number,\n): TooltipPosition {\n  const containerRect = containerEl.getBoundingClientRect();\n  const pointerX = clientX - containerRect.left - containerEl.clientLeft;\n  const pointerY = clientY - containerRect.top - containerEl.clientTop;\n  const containerWidth = containerEl.clientWidth;\n  const containerHeight = containerEl.clientHeight;\n\n  if (!tooltipRect) {\n    return {\n      x: Math.min(Math.max(gap, pointerX + gap), containerWidth - gap),\n      y: Math.min(Math.max(gap, pointerY + gap), containerHeight - gap),\n    };\n  }\n\n  const tooltipWidth = tooltipRect.width;\n  const tooltipHeight = tooltipRect.height;\n  const spaceRight = containerWidth - pointerX;\n  const spaceLeft = pointerX;\n  const spaceBelow = containerHeight - pointerY;\n  const spaceAbove = pointerY;\n\n  let x: number;\n  if (spaceRight >= tooltipWidth + gap) {\n    x = pointerX + gap;\n  } else if (spaceLeft >= tooltipWidth + gap) {\n    x = pointerX - tooltipWidth - gap;\n  } else {\n    x = Math.max(\n      gap,\n      Math.min((containerWidth - tooltipWidth) / 2, containerWidth - tooltipWidth - gap),\n    );\n  }\n\n  let y: number;\n  if (spaceBelow >= tooltipHeight + gap) {\n    y = pointerY + gap;\n  } else if (spaceAbove >= tooltipHeight + gap) {\n    y = pointerY - tooltipHeight - gap;\n  } else {\n    y = Math.max(\n      gap,\n      Math.min((containerHeight - tooltipHeight) / 2, containerHeight - tooltipHeight - gap),\n    );\n  }\n\n  x = Math.max(gap, Math.min(x, containerWidth - tooltipWidth - gap));\n  y = Math.max(gap, Math.min(y, containerHeight - tooltipHeight - gap));\n\n  return { x, y };\n}\n\n/**\n * Map easing option to d3 easing function name that callers can lookup on d3.\n * Keeps mapping consistent across charts.\n */\nexport type D3EasingName =\n  | 'easeLinear'\n  | 'easePolyInOut'\n  | 'easePolyIn'\n  | 'easePolyOut'\n  | 'easeCubic'\n  | 'easeCubicIn'\n  | 'easeCubicOut'\n  | 'easeCubicInOut';\n\nexport function mapEasingName(option?: string): D3EasingName {\n  switch (option) {\n    case 'linear':\n      return 'easeLinear';\n    case 'ease':\n      return 'easePolyInOut';\n    case 'ease-in':\n      return 'easePolyIn';\n    case 'ease-out':\n      return 'easePolyOut';\n    case 'ease-in-out':\n      return 'easePolyInOut';\n    case 'cubic':\n      return 'easeCubic';\n    case 'cubic-in':\n      return 'easeCubicIn';\n    case 'cubic-out':\n      return 'easeCubicOut';\n    case 'cubic-in-out':\n      return 'easeCubicInOut';\n    default:\n      return 'easeCubicOut';\n  }\n}\n\n/**\n * Formats large numbers with abbreviations (K, M, B, T)\n */\nexport function formatLargeNumber(value: number): string {\n  if (value === 0) return '0';\n\n  const absValue = Math.abs(value);\n  const sign = value < 0 ? '-' : '';\n\n  if (absValue >= 1e12) {\n    return `${sign}${(absValue / 1e12).toFixed(1)}T`;\n  }\n  if (absValue >= 1e9) {\n    return `${sign}${(absValue / 1e9).toFixed(1)}B`;\n  }\n  if (absValue >= 1e6) {\n    return `${sign}${(absValue / 1e6).toFixed(1)}M`;\n  }\n  if (absValue >= 1e3) {\n    return `${sign}${(absValue / 1e3).toFixed(1)}K`;\n  }\n\n  return value.toLocaleString();\n}\n\n/**\n * Returns a D3 easing function for the provided option.\n */\nexport function getEasingFunction(d3: typeof import('d3'), option?: string): (t: number) => number {\n  const name = mapEasingName(option);\n  const easing = (d3 as any)[name];\n  return typeof easing === 'function' ? easing : (d3 as any).easeCubicOut;\n}\n\n/** Unique DOM id prefix per chart instance (SVG filters/gradients). */\nexport function createChartInstanceId(prefix = 'ax-chart'): string {\n  return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\n/**\n * Normalizes barWidth: values > 1 are treated as 0–100 percentages (config default 80),\n * values ≤ 1 as fractions.\n */\nexport function resolveBarWidthFraction(barWidth: number | undefined, fallbackPercent = 80): number {\n  const raw = barWidth ?? fallbackPercent;\n  const fraction = raw > 1 ? raw / 100 : raw;\n  return Math.min(1, Math.max(0.05, fraction));\n}\n","export const AX_CHARTS = 'ACOREX_CHARTS';\nexport * from './lib/chart-base.interface';\nexport * from './lib/chart-colors';\nexport * from './lib/chart-component-base';\nexport * from './lib/chart-empty-state';\nexport * from './lib/chart-messages';\nexport * from './lib/chart-types';\nexport * from './lib/chart-utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}