{"version":3,"file":"tanstack-angular-charts.mjs","sources":["../../src/ChartTooltipBody.ts","../../src/Chart.ts","../../src/tanstack-angular-charts.ts"],"sourcesContent":["import { Directive, Input, TemplateRef, inject } from '@angular/core'\nimport type { ChartDefinition, ChartValue } from '@tanstack/charts'\nimport type { ChartTooltipBodyTemplateContext } from './types'\n\n@Directive({\n  selector: 'ng-template[tanstackChartTooltipBody]',\n  standalone: true,\n})\nexport class ChartTooltipBodyDirective<\n  TDatum = unknown,\n  TXValue extends ChartValue = ChartValue,\n  TYValue extends ChartValue = ChartValue,\n> {\n  @Input({ required: true, alias: 'tanstackChartTooltipBody' })\n  declare definition: ChartDefinition<TDatum, TXValue, TYValue>\n\n  readonly templateRef =\n    inject<\n      TemplateRef<ChartTooltipBodyTemplateContext<TDatum, TXValue, TYValue>>\n    >(TemplateRef)\n\n  static ngTemplateContextGuard<\n    TDatum,\n    TXValue extends ChartValue,\n    TYValue extends ChartValue,\n  >(\n    _directive: ChartTooltipBodyDirective<TDatum, TXValue, TYValue>,\n    context: unknown,\n  ): context is ChartTooltipBodyTemplateContext<TDatum, TXValue, TYValue> {\n    return true\n  }\n}\n","import {\n  APP_ID,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  ElementRef,\n  Injectable,\n  Input,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  ViewEncapsulation,\n  afterNextRender,\n  inject,\n} from '@angular/core'\nimport type {\n  EmbeddedViewRef,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n} from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\nimport type { SafeHtml } from '@angular/platform-browser'\nimport { resolveChartAdapterLayout } from '@tanstack/charts/adapter'\nimport { createChartRendererAdapter } from '@tanstack/charts/adapter/renderer'\nimport { renderChartSvg } from '@tanstack/charts/svg'\nimport { createSvgChartRenderer } from '@tanstack/charts/svg/renderer'\nimport type {\n  ChartAdapter,\n  ChartRenderer,\n  ChartRendererHostOptions,\n  ChartRendererRenderContext,\n  ChartSvgRenderer,\n  ChartTooltipBodyTarget,\n  ChartTooltipContent,\n  ChartValue,\n} from '@tanstack/charts'\nimport { ChartTooltipBodyDirective } from './ChartTooltipBody'\nimport type { ChartOptions, ChartTooltipBodyTemplateContext } from './types'\n\n@Injectable({ providedIn: 'root' })\nclass ChartIdGenerator {\n  private readonly appId = inject(APP_ID)\n  private nextId = 0\n\n  next() {\n    return `ts-chart-${this.appId}-${++this.nextId}`.replaceAll(\n      /[^a-zA-Z0-9_-]/g,\n      '',\n    )\n  }\n}\n\n@Component({\n  selector: 'tanstack-chart',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <div [class]=\"hostClass\" [style]=\"hostStyle\">\n      <div\n        #surface\n        class=\"ts-chart-surface\"\n        style=\"width: 100%; height: 100%\"\n        [innerHTML]=\"initialMarkup\"\n      ></div>\n    </div>\n    <ng-container #tooltipOutlet></ng-container>\n    <ng-content select=\"ng-template[tanstackChartTooltipBody]\" />\n    <ng-template #defaultTooltipBody>\n      @if (defaultTooltipText !== undefined) {\n        {{ defaultTooltipText }}\n      } @else if (defaultTooltipContent; as content) {\n        @if (content.title) {\n          <div\n            class=\"ts-chart-tooltip__title\"\n            style=\"display:flex;align-items:center;gap:0.4rem;font-weight:650\"\n            [style.margin-bottom]=\"content.rows.length ? '0.3rem' : '0'\"\n          >\n            @if (content.color) {\n              <span\n                class=\"ts-chart-tooltip__swatch\"\n                aria-hidden=\"true\"\n                style=\"display:block;width:0.55rem;height:0.55rem;border-radius:0.15rem;box-shadow:inset 0 0 0 1px rgb(0 0 0/.12)\"\n                [style.background]=\"content.color\"\n              ></span>\n            }\n            {{ content.title }}\n          </div>\n        }\n        @if (content.rows.length) {\n          <div class=\"ts-chart-tooltip__rows\" aria-hidden=\"true\">\n            @for (row of content.rows; track $index) {\n              <div\n                class=\"ts-chart-tooltip__row\"\n                style=\"display:grid;grid-template-columns:0.55rem minmax(0,1fr) auto;align-items:center;column-gap:0.4rem\"\n              >\n                @if (row.color) {\n                  <span\n                    class=\"ts-chart-tooltip__swatch\"\n                    aria-hidden=\"true\"\n                    style=\"display:block;width:0.55rem;height:0.55rem;border-radius:0.15rem;box-shadow:inset 0 0 0 1px rgb(0 0 0/.12)\"\n                    [style.background]=\"row.color\"\n                  ></span>\n                } @else {\n                  <span></span>\n                }\n                <span>{{ row.label }}</span>\n                <span\n                  style=\"text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap\"\n                  >{{ row.value }}</span\n                >\n              </div>\n            }\n          </div>\n        }\n      }\n    </ng-template>\n  `,\n})\nexport class Chart<\n  TDatum = unknown,\n  TXValue extends ChartValue = ChartValue,\n  TYValue extends ChartValue = ChartValue,\n>\n  implements OnChanges, OnDestroy\n{\n  @Input({ required: true })\n  declare options: ChartOptions<TDatum, TXValue, TYValue>\n\n  @ViewChild('surface', { static: true })\n  declare private surface: ElementRef<HTMLElement>\n\n  @ViewChild('tooltipOutlet', { read: ViewContainerRef, static: true })\n  declare private tooltipOutlet: ViewContainerRef\n\n  @ViewChild('defaultTooltipBody', { static: true })\n  declare private defaultTooltipBody: TemplateRef<unknown>\n\n  @ContentChild(ChartTooltipBodyDirective)\n  set tooltipBodyDirective(\n    directive: ChartTooltipBodyDirective<TDatum, TXValue, TYValue> | undefined,\n  ) {\n    if (directive === this.tooltipBody) return\n    this.destroyTooltipBodyView()\n    this.tooltipBody = directive\n    this.updateAdapter()\n    if (directive && this.tooltipBodyTarget) {\n      this.renderTooltipBody(this.tooltipBodyTarget)\n    }\n  }\n\n  initialMarkup: SafeHtml | string = ''\n  hostClass = 'ts-chart-host'\n  hostStyle = 'position:relative;width:100%;height:320px'\n  protected defaultTooltipContent?: ChartTooltipContent\n  protected defaultTooltipText?: string\n\n  private readonly sanitizer = inject(DomSanitizer)\n  private readonly generatedId = inject(ChartIdGenerator).next()\n  private adapter?: ChartAdapter<\n    ChartRendererHostOptions<TDatum, TXValue, TYValue>,\n    TDatum,\n    TXValue,\n    TYValue\n  >\n  private activeRenderSvg?: ChartSvgRenderer<TDatum, TXValue, TYValue>\n  private renderer?: ChartRenderer<TDatum, TXValue, TYValue>\n  private tooltipBody?: ChartTooltipBodyDirective<TDatum, TXValue, TYValue>\n  private tooltipBodyTarget?: ChartTooltipBodyTarget<TDatum, TXValue, TYValue>\n  private tooltipBodyView?: EmbeddedViewRef<\n    ChartTooltipBodyTemplateContext<TDatum, TXValue, TYValue>\n  >\n\n  constructor() {\n    afterNextRender(() => {\n      this.adapter?.mount(this.surface.nativeElement)\n    })\n  }\n\n  ngOnChanges(_changes: SimpleChanges) {\n    if (!this.options) return\n    const layout = resolveChartAdapterLayout(this.options)\n    this.hostClass = this.options.class\n      ? `ts-chart-host ${this.options.class}`\n      : 'ts-chart-host'\n    this.hostStyle = [\n      'position:relative',\n      `width:${this.options.width === undefined ? '100%' : `${this.options.width}px`}`,\n      this.options.height !== undefined\n        ? `height:${this.options.height}px`\n        : layout.aspectRatio === undefined\n          ? 'height:320px'\n          : `aspect-ratio:${layout.aspectRatio}`,\n      this.options.style,\n    ]\n      .filter(Boolean)\n      .join(';')\n\n    this.updateAdapter()\n  }\n\n  ngOnDestroy() {\n    this.adapter?.destroy()\n    this.destroyTooltipBodyView()\n  }\n\n  private updateAdapter() {\n    if (!this.options) return\n    const hostOptions = toHostOptions(\n      this.options,\n      this.options.idPrefix ?? this.generatedId,\n      this.resolveRenderer(this.options.renderSvg ?? renderChartSvg),\n      this.tooltipBody ? this.handleTooltipBodyChange : undefined,\n    )\n    if (!this.adapter) {\n      this.adapter = createChartRendererAdapter(hostOptions)\n      this.initialMarkup = this.sanitizer.bypassSecurityTrustHtml(\n        this.adapter.prerender(),\n      )\n    } else {\n      this.adapter.update(hostOptions)\n    }\n  }\n\n  private resolveRenderer(\n    renderSvg: ChartSvgRenderer<TDatum, TXValue, TYValue>,\n  ) {\n    if (!this.renderer || renderSvg !== this.activeRenderSvg) {\n      this.activeRenderSvg = renderSvg\n      this.renderer = createSvgChartRenderer(renderSvg)\n    }\n    return this.renderer\n  }\n\n  private readonly handleTooltipBodyChange = (\n    target: ChartTooltipBodyTarget<TDatum, TXValue, TYValue> | null,\n  ) => {\n    if (!target) {\n      this.tooltipBodyTarget = undefined\n      this.destroyTooltipBodyView()\n      return\n    }\n    this.tooltipBodyTarget = target\n    this.renderTooltipBody(target)\n  }\n\n  private renderTooltipBody(\n    target: ChartTooltipBodyTarget<TDatum, TXValue, TYValue>,\n  ) {\n    const directive = this.tooltipBody\n    if (!directive) return\n    this.defaultTooltipText =\n      typeof target.content === 'string' ? target.content : undefined\n    this.defaultTooltipContent =\n      typeof target.content === 'string' ? undefined : target.content\n\n    const context = this.tooltipBodyView?.context\n    if (context) {\n      context.points = target.points\n      context.content = target.content\n      context.defaultBody = this.defaultTooltipBody\n      context.pinned = target.pinned\n      context.dismiss = target.dismiss\n      this.moveTooltipBodyView(target.element)\n      this.tooltipBodyView?.detectChanges()\n      return\n    }\n\n    const nextContext = {\n      points: target.points,\n      content: target.content,\n      defaultBody: this.defaultTooltipBody,\n      pinned: target.pinned,\n      dismiss: target.dismiss,\n    } as ChartTooltipBodyTemplateContext<TDatum, TXValue, TYValue>\n    nextContext.$implicit = nextContext\n    this.tooltipBodyView = this.tooltipOutlet.createEmbeddedView(\n      directive.templateRef,\n      nextContext,\n    )\n    this.moveTooltipBodyView(target.element)\n    this.tooltipBodyView.detectChanges()\n  }\n\n  private moveTooltipBodyView(target: HTMLElement) {\n    for (const node of this.tooltipBodyView?.rootNodes ?? []) {\n      target.append(node)\n    }\n  }\n\n  private destroyTooltipBodyView() {\n    const view = this.tooltipBodyView\n    if (!view) return\n    const nodes = [...view.rootNodes] as Node[]\n    const index = this.tooltipOutlet.indexOf(view)\n    if (index === -1) view.destroy()\n    else this.tooltipOutlet.remove(index)\n    for (const node of nodes) node.parentNode?.removeChild(node)\n    this.tooltipBodyView = undefined\n  }\n}\n\nfunction toHostOptions<\n  TDatum,\n  TXValue extends ChartValue,\n  TYValue extends ChartValue,\n>(\n  options: ChartOptions<TDatum, TXValue, TYValue>,\n  idPrefix: string,\n  renderer: ChartRenderer<TDatum, TXValue, TYValue>,\n  onTooltipBodyChange:\n    | ((\n        target: ChartTooltipBodyTarget<TDatum, TXValue, TYValue> | null,\n      ) => void)\n    | undefined,\n): ChartRendererHostOptions<TDatum, TXValue, TYValue> {\n  const {\n    class: _class,\n    style: _style,\n    renderSvg: _renderSvg,\n    onRender,\n    ...hostOptions\n  } = options\n  return {\n    ...hostOptions,\n    idPrefix,\n    renderer,\n    onRender: adaptOnRender(onRender),\n    onTooltipBodyChange,\n  }\n}\n\nfunction adaptOnRender<\n  TDatum,\n  TXValue extends ChartValue,\n  TYValue extends ChartValue,\n>(onRender: ChartOptions<TDatum, TXValue, TYValue>['onRender']) {\n  if (!onRender) return undefined\n  return (\n    context: ChartRendererRenderContext<TDatum, TXValue, TYValue>,\n  ): void => {\n    const svg = context.surface.element\n    const SvgElement =\n      context.container.ownerDocument.defaultView?.SVGSVGElement\n    if (!SvgElement || !(svg instanceof SvgElement)) {\n      throw new TypeError('Expected the SVG chart surface.')\n    }\n    onRender({\n      container: context.container,\n      scene: context.scene,\n      svg,\n      interaction: context.interaction,\n    })\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}