@tanstack/charts
Version:
A chart grammar for TypeScript and JavaScript. Marks consume your data directly, channels describe visual encodings, and the engine compiles them into a renderer-neutral keyed scene. TanStack's compact scales cover common numeric and categorical mappings.
1 lines • 20.4 kB
Source Map (JSON)
{"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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"}