chartgpu-angular 18.0.0 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,15 @@
1
1
  import { NgStyle } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { input, output, viewChild, signal, afterNextRender, effect, untracked, Component, ChangeDetectionStrategy, Directive, computed, Injectable, makeEnvironmentProviders } from '@angular/core';
3
+ import { input, output, viewChild, signal, afterNextRender, effect, untracked, ChangeDetectionStrategy, Component, Directive, computed, Injectable, makeEnvironmentProviders } from '@angular/core';
4
4
  import { ChartGPU, connectCharts, createPipelineCache } from 'chartgpu';
5
5
 
6
6
  class ChartGpuAngularComponent {
7
7
  destroyRef;
8
- options = input.required();
9
- gpuContext = input(null);
10
- theme = input(undefined);
11
- className = input();
12
- style = input();
8
+ options = input.required(...(ngDevMode ? [{ debugName: "options" }] : []));
9
+ gpuContext = input(null, ...(ngDevMode ? [{ debugName: "gpuContext" }] : []));
10
+ theme = input(undefined, ...(ngDevMode ? [{ debugName: "theme" }] : []));
11
+ className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : []));
12
+ style = input(...(ngDevMode ? [undefined, { debugName: "style" }] : []));
13
13
  ready = output();
14
14
  chartReady = output();
15
15
  chartDispose = output();
@@ -24,10 +24,10 @@ class ChartGpuAngularComponent {
24
24
  zoomRangeChange = output();
25
25
  deviceLost = output();
26
26
  chartError = output();
27
- host = viewChild('host');
28
- canvasHost = viewChild('canvasHost');
29
- chartInstance = signal(null);
30
- initializationError = signal(null);
27
+ host = viewChild('host', ...(ngDevMode ? [{ debugName: "host" }] : []));
28
+ canvasHost = viewChild('canvasHost', ...(ngDevMode ? [{ debugName: "canvasHost" }] : []));
29
+ chartInstance = signal(null, ...(ngDevMode ? [{ debugName: "chartInstance" }] : []));
30
+ initializationError = signal(null, ...(ngDevMode ? [{ debugName: "initializationError" }] : []));
31
31
  chartContainer;
32
32
  createdWithOptions;
33
33
  resizeTimeout;
@@ -253,8 +253,8 @@ class ChartGpuAngularComponent {
253
253
  this.chartContainer = undefined;
254
254
  this.createdWithOptions = undefined;
255
255
  }
256
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartGpuAngularComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
257
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChartGpuAngularComponent, isStandalone: true, selector: "lib-chartgpu-angular", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, gpuContext: { classPropertyName: "gpuContext", publicName: "gpuContext", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ready: "ready", chartReady: "chartReady", chartDispose: "chartDispose", resize: "resize", click: "click", chartClick: "chartClick", mouseOver: "mouseOver", mouseOut: "mouseOut", crosshairMove: "crosshairMove", dataAppend: "dataAppend", zoomChange: "zoomChange", zoomRangeChange: "zoomRangeChange", deviceLost: "deviceLost", chartError: "chartError" }, host: { classAttribute: "chartgpu-angular" }, viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true, isSignal: true }, { propertyName: "canvasHost", first: true, predicate: ["canvasHost"], descendants: true, isSignal: true }], ngImport: i0, template: `
256
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: ChartGpuAngularComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
257
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.34", type: ChartGpuAngularComponent, isStandalone: true, selector: "lib-chartgpu-angular", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, gpuContext: { classPropertyName: "gpuContext", publicName: "gpuContext", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ready: "ready", chartReady: "chartReady", chartDispose: "chartDispose", resize: "resize", click: "click", chartClick: "chartClick", mouseOver: "mouseOver", mouseOut: "mouseOut", crosshairMove: "crosshairMove", dataAppend: "dataAppend", zoomChange: "zoomChange", zoomRangeChange: "zoomRangeChange", deviceLost: "deviceLost", chartError: "chartError" }, host: { classAttribute: "chartgpu-angular" }, viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true, isSignal: true }, { propertyName: "canvasHost", first: true, predicate: ["canvasHost"], descendants: true, isSignal: true }], ngImport: i0, template: `
258
258
  <div
259
259
  #host
260
260
  class="chartgpu-host"
@@ -269,7 +269,7 @@ class ChartGpuAngularComponent {
269
269
  </div>
270
270
  `, isInline: true, styles: [":host{display:block;width:100%;height:100%}.chartgpu-host{position:relative;width:100%;height:100%}.chartgpu-canvas-host{position:absolute;inset:0}.chartgpu-error{position:absolute;inset:0;display:grid;place-items:center;padding:1rem;text-align:center}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
271
271
  }
272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartGpuAngularComponent, decorators: [{
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: ChartGpuAngularComponent, decorators: [{
273
273
  type: Component,
274
274
  args: [{ selector: 'lib-chartgpu-angular', standalone: true, imports: [NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'chartgpu-angular' }, template: `
275
275
  <div
@@ -285,13 +285,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
285
285
  }
286
286
  </div>
287
287
  `, styles: [":host{display:block;width:100%;height:100%}.chartgpu-host{position:relative;width:100%;height:100%}.chartgpu-canvas-host{position:absolute;inset:0}.chartgpu-error{position:absolute;inset:0;display:grid;place-items:center;padding:1rem;text-align:center}\n"] }]
288
- }], ctorParameters: () => [{ type: i0.DestroyRef }] });
288
+ }], ctorParameters: () => [{ type: i0.DestroyRef }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], gpuContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "gpuContext", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], style: [{ type: i0.Input, args: [{ isSignal: true, alias: "style", required: false }] }], ready: [{ type: i0.Output, args: ["ready"] }], chartReady: [{ type: i0.Output, args: ["chartReady"] }], chartDispose: [{ type: i0.Output, args: ["chartDispose"] }], resize: [{ type: i0.Output, args: ["resize"] }], click: [{ type: i0.Output, args: ["click"] }], chartClick: [{ type: i0.Output, args: ["chartClick"] }], mouseOver: [{ type: i0.Output, args: ["mouseOver"] }], mouseOut: [{ type: i0.Output, args: ["mouseOut"] }], crosshairMove: [{ type: i0.Output, args: ["crosshairMove"] }], dataAppend: [{ type: i0.Output, args: ["dataAppend"] }], zoomChange: [{ type: i0.Output, args: ["zoomChange"] }], zoomRangeChange: [{ type: i0.Output, args: ["zoomRangeChange"] }], deviceLost: [{ type: i0.Output, args: ["deviceLost"] }], chartError: [{ type: i0.Output, args: ["chartError"] }], host: [{ type: i0.ViewChild, args: ['host', { isSignal: true }] }], canvasHost: [{ type: i0.ViewChild, args: ['canvasHost', { isSignal: true }] }] } });
289
289
 
290
290
  class ChartgpuConnectChartsDirective {
291
- charts = input([], {
292
- alias: 'libChartgpuConnectCharts',
293
- });
294
- syncOptions = input();
291
+ charts = input([], ...(ngDevMode ? [{ debugName: "charts", alias: 'libChartgpuConnectCharts' }] : [{
292
+ alias: 'libChartgpuConnectCharts',
293
+ }]));
294
+ syncOptions = input(...(ngDevMode ? [undefined, { debugName: "syncOptions" }] : []));
295
295
  connectionError = output();
296
296
  ids = new WeakMap();
297
297
  nextId = 1;
@@ -337,16 +337,16 @@ class ChartgpuConnectChartsDirective {
337
337
  }
338
338
  });
339
339
  }
340
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuConnectChartsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
341
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: ChartgpuConnectChartsDirective, isStandalone: true, selector: "[libChartgpuConnectCharts]", inputs: { charts: { classPropertyName: "charts", publicName: "libChartgpuConnectCharts", isSignal: true, isRequired: false, transformFunction: null }, syncOptions: { classPropertyName: "syncOptions", publicName: "syncOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { connectionError: "connectionError" }, ngImport: i0 });
340
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: ChartgpuConnectChartsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
341
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.34", type: ChartgpuConnectChartsDirective, isStandalone: true, selector: "[libChartgpuConnectCharts]", inputs: { charts: { classPropertyName: "charts", publicName: "libChartgpuConnectCharts", isSignal: true, isRequired: false, transformFunction: null }, syncOptions: { classPropertyName: "syncOptions", publicName: "syncOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { connectionError: "connectionError" }, ngImport: i0 });
342
342
  }
343
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuConnectChartsDirective, decorators: [{
343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: ChartgpuConnectChartsDirective, decorators: [{
344
344
  type: Directive,
345
345
  args: [{
346
346
  selector: '[libChartgpuConnectCharts]',
347
347
  standalone: true,
348
348
  }]
349
- }], ctorParameters: () => [] });
349
+ }], ctorParameters: () => [], propDecorators: { charts: [{ type: i0.Input, args: [{ isSignal: true, alias: "libChartgpuConnectCharts", required: false }] }], syncOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "syncOptions", required: false }] }], connectionError: [{ type: i0.Output, args: ["connectionError"] }] } });
350
350
 
351
351
  const INITIAL_STATE = {
352
352
  adapter: null,
@@ -361,7 +361,7 @@ const INITIAL_STATE = {
361
361
  * for the lifetime of the application.
362
362
  */
363
363
  class ChartgpuGPUContextService {
364
- state = signal(INITIAL_STATE);
364
+ state = signal(INITIAL_STATE, ...(ngDevMode ? [{ debugName: "state" }] : []));
365
365
  context = computed(() => {
366
366
  const state = this.state();
367
367
  if (!state.adapter || !state.device || !state.pipelineCache) {
@@ -372,7 +372,7 @@ class ChartgpuGPUContextService {
372
372
  device: state.device,
373
373
  pipelineCache: state.pipelineCache,
374
374
  };
375
- });
375
+ }, ...(ngDevMode ? [{ debugName: "context" }] : []));
376
376
  initialization;
377
377
  initialize() {
378
378
  if (!this.initialization) {
@@ -415,10 +415,10 @@ class ChartgpuGPUContextService {
415
415
  return state;
416
416
  }
417
417
  }
418
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuGPUContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
419
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuGPUContextService, providedIn: 'root' });
418
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: ChartgpuGPUContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
419
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: ChartgpuGPUContextService, providedIn: 'root' });
420
420
  }
421
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuGPUContextService, decorators: [{
421
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: ChartgpuGPUContextService, decorators: [{
422
422
  type: Injectable,
423
423
  args: [{ providedIn: 'root' }]
424
424
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"chartgpu-angular.mjs","sources":["../../../projects/chartgpu-angular/src/lib/chartgpu-angular.component.ts","../../../projects/chartgpu-angular/src/lib/connect-charts.directive.ts","../../../projects/chartgpu-angular/src/lib/gpu-context.service.ts","../../../projects/chartgpu-angular/src/lib/gpu-context.provider.ts","../../../projects/chartgpu-angular/src/chartgpu-angular.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n afterNextRender,\n effect,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n ChartGPU,\n type ChartGPUCrosshairMovePayload,\n type ChartGPUDeviceLostPayload,\n type ChartGPUEventPayload,\n type ChartGPUInstance,\n type ChartGPUZoomRangeChangePayload,\n type OHLCDataPoint,\n} from 'chartgpu';\nimport type {\n ChartgpuAppendDataOptions,\n ChartgpuCartesianSeriesData,\n ChartgpuChartHandle,\n ChartgpuClickEvent,\n ChartgpuDataAppendEvent,\n ChartgpuGPUContext,\n ChartgpuOptions,\n ChartgpuReadyEvent,\n ChartgpuResizeEvent,\n ChartgpuStyle,\n ChartgpuZoomChangeEvent,\n ChartgpuZoomRangeChangeEvent,\n} from './chartgpu-angular.types';\n\n@Component({\n selector: 'lib-chartgpu-angular',\n standalone: true,\n imports: [NgStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'chartgpu-angular' },\n template: `\n <div\n #host\n class=\"chartgpu-host\"\n [class]=\"className() ?? ''\"\n [ngStyle]=\"style()\"\n (click)=\"emitClick($event)\"\n >\n <div #canvasHost class=\"chartgpu-canvas-host\"></div>\n @if (initializationError(); as error) {\n <div class=\"chartgpu-error\" role=\"alert\">{{ error.message }}</div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .chartgpu-host {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .chartgpu-canvas-host {\n position: absolute;\n inset: 0;\n }\n\n .chartgpu-error {\n position: absolute;\n inset: 0;\n display: grid;\n place-items: center;\n padding: 1rem;\n text-align: center;\n }\n `],\n})\nexport class ChartGpuAngularComponent implements ChartgpuChartHandle, OnDestroy {\n readonly options = input.required<ChartgpuOptions>();\n readonly gpuContext = input<ChartgpuGPUContext | null>(null);\n readonly theme = input<ChartgpuOptions['theme'] | undefined>(undefined);\n readonly className = input<string | undefined>();\n readonly style = input<ChartgpuStyle | undefined>();\n\n readonly ready = output<ChartgpuReadyEvent>();\n readonly chartReady = output<ChartGPUInstance>();\n readonly chartDispose = output<void>();\n readonly resize = output<ChartgpuResizeEvent>();\n readonly click = output<ChartgpuClickEvent>();\n readonly chartClick = output<ChartGPUEventPayload>();\n readonly mouseOver = output<ChartGPUEventPayload>();\n readonly mouseOut = output<ChartGPUEventPayload>();\n readonly crosshairMove = output<ChartGPUCrosshairMovePayload>();\n readonly dataAppend = output<ChartgpuDataAppendEvent>();\n readonly zoomChange = output<ChartgpuZoomChangeEvent>();\n readonly zoomRangeChange = output<ChartgpuZoomRangeChangeEvent>();\n readonly deviceLost = output<ChartGPUDeviceLostPayload>();\n readonly chartError = output<Error>();\n\n readonly host = viewChild<ElementRef<HTMLDivElement>>('host');\n readonly canvasHost = viewChild<ElementRef<HTMLDivElement>>('canvasHost');\n\n private readonly chartInstance = signal<ChartGPUInstance | null>(null);\n readonly initializationError = signal<Error | null>(null);\n private chartContainer?: HTMLDivElement;\n private createdWithOptions?: {\n options: ChartgpuOptions;\n theme: ChartgpuOptions['theme'] | undefined;\n };\n private resizeTimeout?: ReturnType<typeof setTimeout>;\n private resizeObserver?: ResizeObserver;\n private removeChartListeners?: () => void;\n private destroying = false;\n\n constructor(private readonly destroyRef: DestroyRef) {\n this.destroyRef.onDestroy(() => {\n this.resizeObserver?.disconnect();\n if (this.resizeTimeout !== undefined) {\n clearTimeout(this.resizeTimeout);\n }\n this.disposeChart();\n });\n\n afterNextRender(() => {\n const container = this.host()?.nativeElement;\n if (container) {\n this.observeResize(container);\n }\n });\n\n effect(onCleanup => {\n const container = this.canvasHost()?.nativeElement;\n const options = this.options();\n const gpuContext = this.gpuContext();\n const theme = this.theme();\n\n this.initializationError.set(null);\n if (!container) {\n this.disposeChart();\n return;\n }\n if (typeof navigator === 'undefined' || !('gpu' in navigator)) {\n this.reportError(new Error('WebGPU not supported in this browser'));\n return;\n }\n\n if (untracked(() => this.chartInstance()) && this.chartContainer === container) {\n return;\n }\n\n let cancelled = false;\n let createdInstance: ChartGPUInstance | undefined;\n const initialOptions = this.getEffectiveOptions(options, theme);\n\n void (gpuContext\n ? ChartGPU.create(container, initialOptions, gpuContext)\n : ChartGPU.create(container, initialOptions)\n ).then(instance => {\n createdInstance = instance;\n if (cancelled) {\n instance.dispose();\n return;\n }\n\n try {\n const latest = untracked(() => ({\n options: this.options(),\n theme: this.theme(),\n }));\n if (latest.options !== options || latest.theme !== theme) {\n instance.setOption(this.getEffectiveOptions(latest.options, latest.theme));\n }\n\n this.createdWithOptions = latest;\n this.chartContainer = container;\n this.chartInstance.set(instance);\n this.removeChartListeners = this.listenToChart(instance);\n this.ready.emit({ container });\n this.chartReady.emit(instance);\n\n const range = instance.getZoomRange();\n if (range) {\n this.emitZoomRange(range);\n }\n } catch (cause: unknown) {\n instance.dispose();\n throw cause;\n }\n }).catch((cause: unknown) => {\n if (cancelled) {\n return;\n }\n if (createdInstance && this.chartInstance() !== createdInstance && !createdInstance.disposed) {\n createdInstance.dispose();\n }\n this.reportError(cause);\n });\n\n onCleanup(() => {\n cancelled = true;\n if (this.chartContainer === container) {\n this.disposeChart();\n }\n });\n }, { allowSignalWrites: true });\n\n effect(() => {\n const options = this.options();\n const theme = this.theme();\n const instance = this.chartInstance();\n if (!instance || instance.disposed) {\n return;\n }\n\n if (this.createdWithOptions?.options === options && this.createdWithOptions.theme === theme) {\n this.createdWithOptions = undefined;\n return;\n }\n\n try {\n instance.setOption(this.getEffectiveOptions(options, theme));\n } catch (cause: unknown) {\n this.reportError(cause);\n }\n }, { allowSignalWrites: true });\n }\n\n protected emitClick(event: MouseEvent): void {\n this.click.emit({ x: event.offsetX, y: event.offsetY });\n }\n\n ngOnDestroy(): void {\n this.destroying = true;\n }\n\n getChart(): ChartGPUInstance | null {\n const instance = this.chartInstance();\n return instance && !instance.disposed ? instance : null;\n }\n\n getContainer(): HTMLDivElement | null {\n return this.canvasHost()?.nativeElement ?? null;\n }\n\n appendData(\n seriesIndex: number,\n newPoints: ChartgpuCartesianSeriesData | OHLCDataPoint[],\n options?: ChartgpuAppendDataOptions,\n ): void {\n this.getChart()?.appendData(seriesIndex, newPoints, options);\n }\n\n renderFrame(): boolean {\n return this.getChart()?.renderFrame() ?? false;\n }\n\n needsRender(): boolean {\n return this.getChart()?.needsRender() ?? false;\n }\n\n getRenderMode(): 'auto' | 'external' {\n return this.getChart()?.getRenderMode() ?? 'auto';\n }\n\n setRenderMode(mode: 'auto' | 'external'): void {\n this.getChart()?.setRenderMode(mode);\n }\n\n setOption(options: ChartgpuOptions): void {\n this.getChart()?.setOption(options);\n }\n\n setZoomRange(start: number, end: number, source?: unknown): void {\n this.getChart()?.setZoomRange(start, end, source);\n }\n\n setInteractionX(x: number | null, source?: unknown): void {\n this.getChart()?.setInteractionX(x, source);\n }\n\n getInteractionX(): number | null {\n return this.getChart()?.getInteractionX() ?? null;\n }\n\n hitTest(event: PointerEvent | MouseEvent) {\n return this.getChart()?.hitTest(event) ?? null;\n }\n\n private getEffectiveOptions(\n options: ChartgpuOptions,\n theme: ChartgpuOptions['theme'] | undefined,\n ): ChartgpuOptions {\n return theme !== undefined ? { ...options, theme } : options;\n }\n\n private listenToChart(instance: ChartGPUInstance): () => void {\n const click = (payload: ChartGPUEventPayload) => this.chartClick.emit(payload);\n const mouseOver = (payload: ChartGPUEventPayload) => this.mouseOver.emit(payload);\n const mouseOut = (payload: ChartGPUEventPayload) => this.mouseOut.emit(payload);\n const crosshairMove = (payload: ChartGPUCrosshairMovePayload) => this.crosshairMove.emit(payload);\n const dataAppend = (payload: ChartgpuDataAppendEvent) => this.dataAppend.emit(payload);\n const zoomChange = (payload: ChartGPUZoomRangeChangePayload) => this.emitZoomRange(payload);\n const deviceLost = (payload: ChartGPUDeviceLostPayload) => this.deviceLost.emit(payload);\n\n instance.on('click', click);\n instance.on('mouseover', mouseOver);\n instance.on('mouseout', mouseOut);\n instance.on('crosshairMove', crosshairMove);\n instance.on('dataAppend', dataAppend);\n instance.on('zoomRangeChange', zoomChange);\n instance.on('deviceLost', deviceLost);\n\n return () => {\n if (instance.disposed) {\n return;\n }\n instance.off('click', click);\n instance.off('mouseover', mouseOver);\n instance.off('mouseout', mouseOut);\n instance.off('crosshairMove', crosshairMove);\n instance.off('dataAppend', dataAppend);\n instance.off('zoomRangeChange', zoomChange);\n instance.off('deviceLost', deviceLost);\n };\n }\n\n private emitZoomRange(range: { start: number; end: number }): void {\n this.zoomChange.emit({ range: { start: range.start, end: range.end } });\n this.zoomRangeChange.emit({ start: range.start, end: range.end });\n }\n\n private observeResize(container: HTMLDivElement): void {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (!entry) {\n return;\n }\n const { width, height } = entry.contentRect;\n this.resize.emit({ width, height, container });\n if (this.resizeTimeout !== undefined) {\n clearTimeout(this.resizeTimeout);\n }\n this.resizeTimeout = setTimeout(() => {\n this.chartInstance()?.resize();\n this.resizeTimeout = undefined;\n }, 100);\n });\n this.resizeObserver.observe(container);\n }\n\n private reportError(cause: unknown): void {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n this.initializationError.set(error);\n this.chartError.emit(error);\n }\n\n private disposeChart(): void {\n const instance = this.chartInstance();\n this.removeChartListeners?.();\n this.removeChartListeners = undefined;\n if (instance && !instance.disposed) {\n instance.dispose();\n if (!this.destroying) {\n this.chartDispose.emit();\n }\n }\n this.chartInstance.set(null);\n this.chartContainer = undefined;\n this.createdWithOptions = undefined;\n }\n}\n","import { Directive, effect, input, output } from '@angular/core';\nimport { connectCharts } from 'chartgpu';\nimport type { ChartGPUInstance, ChartSyncOptions } from 'chartgpu';\n\n@Directive({\n selector: '[libChartgpuConnectCharts]',\n standalone: true,\n})\nexport class ChartgpuConnectChartsDirective {\n readonly charts = input<ReadonlyArray<ChartGPUInstance | null | undefined>>([], {\n alias: 'libChartgpuConnectCharts',\n });\n readonly syncOptions = input<ChartSyncOptions | undefined>();\n readonly connectionError = output<Error>();\n\n private readonly ids = new WeakMap<object, number>();\n private nextId = 1;\n private signature: string | undefined;\n\n constructor() {\n effect(onCleanup => {\n const charts = this.charts();\n const options = this.syncOptions();\n const optionsSignature = options\n ? `crosshair=${options.syncCrosshair ?? ''},zoom=${options.syncZoom ?? ''}`\n : '';\n const signature = `${charts.map(chart => {\n if (!chart) {\n return 'null';\n }\n\n let id = this.ids.get(chart);\n if (id === undefined) {\n id = this.nextId++;\n this.ids.set(chart, id);\n }\n return `${id}:${chart.disposed ? 1 : 0}`;\n }).join('|')}|${optionsSignature}`;\n\n if (signature === this.signature) {\n return;\n }\n this.signature = signature;\n\n if (charts.length === 0 || charts.some(chart => !chart || chart.disposed)) {\n return;\n }\n\n const resolved: ChartGPUInstance[] = [];\n for (const chart of charts) {\n if (!chart || chart.disposed) {\n return;\n }\n resolved.push(chart);\n }\n\n try {\n const disconnect = connectCharts(resolved, options);\n onCleanup(disconnect);\n } catch (cause: unknown) {\n this.connectionError.emit(cause instanceof Error ? cause : new Error(String(cause)));\n }\n });\n }\n}\n","import { Injectable, computed, signal } from '@angular/core';\nimport { createPipelineCache } from 'chartgpu';\nimport type { ChartGPUCreateContext } from 'chartgpu';\nimport type { ChartgpuGPUContextState } from './chartgpu-angular.types';\n\nconst INITIAL_STATE: ChartgpuGPUContextState = {\n adapter: null,\n device: null,\n pipelineCache: null,\n error: null,\n isReady: false,\n};\n\n/**\n * Creates one shared WebGPU context and pipeline cache for charts in a dashboard.\n * The device is intentionally not destroyed with the service so charts can share it\n * for the lifetime of the application.\n */\n@Injectable({ providedIn: 'root' })\nexport class ChartgpuGPUContextService {\n readonly state = signal<ChartgpuGPUContextState>(INITIAL_STATE);\n readonly context = computed<ChartGPUCreateContext | null>(() => {\n const state = this.state();\n if (!state.adapter || !state.device || !state.pipelineCache) {\n return null;\n }\n\n return {\n adapter: state.adapter,\n device: state.device,\n pipelineCache: state.pipelineCache,\n };\n });\n\n private initialization?: Promise<ChartgpuGPUContextState>;\n\n initialize(): Promise<ChartgpuGPUContextState> {\n if (!this.initialization) {\n this.initialization = this.createContext();\n }\n return this.initialization;\n }\n\n private async createContext(): Promise<ChartgpuGPUContextState> {\n try {\n if (typeof navigator === 'undefined' || !('gpu' in navigator)) {\n throw new Error('WebGPU not supported in this browser');\n }\n\n const gpu = (navigator as Navigator & {\n gpu?: {\n requestAdapter(options: {\n powerPreference: 'high-performance';\n }): Promise<ChartGPUCreateContext['adapter'] | null>;\n };\n }).gpu;\n if (!gpu) {\n throw new Error('WebGPU not supported in this browser');\n }\n\n const adapter = await gpu.requestAdapter({ powerPreference: 'high-performance' });\n if (!adapter) {\n const error = new Error('WebGPU is not available. No compatible GPUAdapter was found.');\n const state: ChartgpuGPUContextState = { ...INITIAL_STATE, error };\n this.state.set(state);\n return state;\n }\n\n const device = await adapter.requestDevice();\n const pipelineCache = createPipelineCache(device);\n const state: ChartgpuGPUContextState = {\n adapter,\n device,\n pipelineCache,\n error: null,\n isReady: true,\n };\n this.state.set(state);\n return state;\n } catch (cause: unknown) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n const state: ChartgpuGPUContextState = { ...INITIAL_STATE, error };\n this.state.set(state);\n return state;\n }\n }\n}\n","import { makeEnvironmentProviders } from '@angular/core';\nimport { ChartgpuGPUContextService } from './gpu-context.service';\n\nexport function provideChartGpuContext() {\n return makeEnvironmentProviders([ChartgpuGPUContextService]);\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chartgpu-angular.mjs","sources":["../../../projects/chartgpu-angular/src/lib/chartgpu-angular.component.ts","../../../projects/chartgpu-angular/src/lib/connect-charts.directive.ts","../../../projects/chartgpu-angular/src/lib/gpu-context.service.ts","../../../projects/chartgpu-angular/src/lib/gpu-context.provider.ts","../../../projects/chartgpu-angular/src/chartgpu-angular.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n afterNextRender,\n effect,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n ChartGPU,\n type ChartGPUCrosshairMovePayload,\n type ChartGPUDeviceLostPayload,\n type ChartGPUEventPayload,\n type ChartGPUInstance,\n type ChartGPUZoomRangeChangePayload,\n type OHLCDataPoint,\n} from 'chartgpu';\nimport type {\n ChartgpuAppendDataOptions,\n ChartgpuCartesianSeriesData,\n ChartgpuChartHandle,\n ChartgpuClickEvent,\n ChartgpuDataAppendEvent,\n ChartgpuGPUContext,\n ChartgpuOptions,\n ChartgpuReadyEvent,\n ChartgpuResizeEvent,\n ChartgpuStyle,\n ChartgpuZoomChangeEvent,\n ChartgpuZoomRangeChangeEvent,\n} from './chartgpu-angular.types';\n\n@Component({\n selector: 'lib-chartgpu-angular',\n standalone: true,\n imports: [NgStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'chartgpu-angular' },\n template: `\n <div\n #host\n class=\"chartgpu-host\"\n [class]=\"className() ?? ''\"\n [ngStyle]=\"style()\"\n (click)=\"emitClick($event)\"\n >\n <div #canvasHost class=\"chartgpu-canvas-host\"></div>\n @if (initializationError(); as error) {\n <div class=\"chartgpu-error\" role=\"alert\">{{ error.message }}</div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .chartgpu-host {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .chartgpu-canvas-host {\n position: absolute;\n inset: 0;\n }\n\n .chartgpu-error {\n position: absolute;\n inset: 0;\n display: grid;\n place-items: center;\n padding: 1rem;\n text-align: center;\n }\n `],\n})\nexport class ChartGpuAngularComponent implements ChartgpuChartHandle, OnDestroy {\n readonly options = input.required<ChartgpuOptions>();\n readonly gpuContext = input<ChartgpuGPUContext | null>(null);\n readonly theme = input<ChartgpuOptions['theme'] | undefined>(undefined);\n readonly className = input<string | undefined>();\n readonly style = input<ChartgpuStyle | undefined>();\n\n readonly ready = output<ChartgpuReadyEvent>();\n readonly chartReady = output<ChartGPUInstance>();\n readonly chartDispose = output<void>();\n readonly resize = output<ChartgpuResizeEvent>();\n readonly click = output<ChartgpuClickEvent>();\n readonly chartClick = output<ChartGPUEventPayload>();\n readonly mouseOver = output<ChartGPUEventPayload>();\n readonly mouseOut = output<ChartGPUEventPayload>();\n readonly crosshairMove = output<ChartGPUCrosshairMovePayload>();\n readonly dataAppend = output<ChartgpuDataAppendEvent>();\n readonly zoomChange = output<ChartgpuZoomChangeEvent>();\n readonly zoomRangeChange = output<ChartgpuZoomRangeChangeEvent>();\n readonly deviceLost = output<ChartGPUDeviceLostPayload>();\n readonly chartError = output<Error>();\n\n readonly host = viewChild<ElementRef<HTMLDivElement>>('host');\n readonly canvasHost = viewChild<ElementRef<HTMLDivElement>>('canvasHost');\n\n private readonly chartInstance = signal<ChartGPUInstance | null>(null);\n readonly initializationError = signal<Error | null>(null);\n private chartContainer?: HTMLDivElement;\n private createdWithOptions?: {\n options: ChartgpuOptions;\n theme: ChartgpuOptions['theme'] | undefined;\n };\n private resizeTimeout?: ReturnType<typeof setTimeout>;\n private resizeObserver?: ResizeObserver;\n private removeChartListeners?: () => void;\n private destroying = false;\n\n constructor(private readonly destroyRef: DestroyRef) {\n this.destroyRef.onDestroy(() => {\n this.resizeObserver?.disconnect();\n if (this.resizeTimeout !== undefined) {\n clearTimeout(this.resizeTimeout);\n }\n this.disposeChart();\n });\n\n afterNextRender(() => {\n const container = this.host()?.nativeElement;\n if (container) {\n this.observeResize(container);\n }\n });\n\n effect(onCleanup => {\n const container = this.canvasHost()?.nativeElement;\n const options = this.options();\n const gpuContext = this.gpuContext();\n const theme = this.theme();\n\n this.initializationError.set(null);\n if (!container) {\n this.disposeChart();\n return;\n }\n if (typeof navigator === 'undefined' || !('gpu' in navigator)) {\n this.reportError(new Error('WebGPU not supported in this browser'));\n return;\n }\n\n if (untracked(() => this.chartInstance()) && this.chartContainer === container) {\n return;\n }\n\n let cancelled = false;\n let createdInstance: ChartGPUInstance | undefined;\n const initialOptions = this.getEffectiveOptions(options, theme);\n\n void (gpuContext\n ? ChartGPU.create(container, initialOptions, gpuContext)\n : ChartGPU.create(container, initialOptions)\n ).then(instance => {\n createdInstance = instance;\n if (cancelled) {\n instance.dispose();\n return;\n }\n\n try {\n const latest = untracked(() => ({\n options: this.options(),\n theme: this.theme(),\n }));\n if (latest.options !== options || latest.theme !== theme) {\n instance.setOption(this.getEffectiveOptions(latest.options, latest.theme));\n }\n\n this.createdWithOptions = latest;\n this.chartContainer = container;\n this.chartInstance.set(instance);\n this.removeChartListeners = this.listenToChart(instance);\n this.ready.emit({ container });\n this.chartReady.emit(instance);\n\n const range = instance.getZoomRange();\n if (range) {\n this.emitZoomRange(range);\n }\n } catch (cause: unknown) {\n instance.dispose();\n throw cause;\n }\n }).catch((cause: unknown) => {\n if (cancelled) {\n return;\n }\n if (createdInstance && this.chartInstance() !== createdInstance && !createdInstance.disposed) {\n createdInstance.dispose();\n }\n this.reportError(cause);\n });\n\n onCleanup(() => {\n cancelled = true;\n if (this.chartContainer === container) {\n this.disposeChart();\n }\n });\n }, { allowSignalWrites: true });\n\n effect(() => {\n const options = this.options();\n const theme = this.theme();\n const instance = this.chartInstance();\n if (!instance || instance.disposed) {\n return;\n }\n\n if (this.createdWithOptions?.options === options && this.createdWithOptions.theme === theme) {\n this.createdWithOptions = undefined;\n return;\n }\n\n try {\n instance.setOption(this.getEffectiveOptions(options, theme));\n } catch (cause: unknown) {\n this.reportError(cause);\n }\n }, { allowSignalWrites: true });\n }\n\n protected emitClick(event: MouseEvent): void {\n this.click.emit({ x: event.offsetX, y: event.offsetY });\n }\n\n ngOnDestroy(): void {\n this.destroying = true;\n }\n\n getChart(): ChartGPUInstance | null {\n const instance = this.chartInstance();\n return instance && !instance.disposed ? instance : null;\n }\n\n getContainer(): HTMLDivElement | null {\n return this.canvasHost()?.nativeElement ?? null;\n }\n\n appendData(\n seriesIndex: number,\n newPoints: ChartgpuCartesianSeriesData | OHLCDataPoint[],\n options?: ChartgpuAppendDataOptions,\n ): void {\n this.getChart()?.appendData(seriesIndex, newPoints, options);\n }\n\n renderFrame(): boolean {\n return this.getChart()?.renderFrame() ?? false;\n }\n\n needsRender(): boolean {\n return this.getChart()?.needsRender() ?? false;\n }\n\n getRenderMode(): 'auto' | 'external' {\n return this.getChart()?.getRenderMode() ?? 'auto';\n }\n\n setRenderMode(mode: 'auto' | 'external'): void {\n this.getChart()?.setRenderMode(mode);\n }\n\n setOption(options: ChartgpuOptions): void {\n this.getChart()?.setOption(options);\n }\n\n setZoomRange(start: number, end: number, source?: unknown): void {\n this.getChart()?.setZoomRange(start, end, source);\n }\n\n setInteractionX(x: number | null, source?: unknown): void {\n this.getChart()?.setInteractionX(x, source);\n }\n\n getInteractionX(): number | null {\n return this.getChart()?.getInteractionX() ?? null;\n }\n\n hitTest(event: PointerEvent | MouseEvent) {\n return this.getChart()?.hitTest(event) ?? null;\n }\n\n private getEffectiveOptions(\n options: ChartgpuOptions,\n theme: ChartgpuOptions['theme'] | undefined,\n ): ChartgpuOptions {\n return theme !== undefined ? { ...options, theme } : options;\n }\n\n private listenToChart(instance: ChartGPUInstance): () => void {\n const click = (payload: ChartGPUEventPayload) => this.chartClick.emit(payload);\n const mouseOver = (payload: ChartGPUEventPayload) => this.mouseOver.emit(payload);\n const mouseOut = (payload: ChartGPUEventPayload) => this.mouseOut.emit(payload);\n const crosshairMove = (payload: ChartGPUCrosshairMovePayload) => this.crosshairMove.emit(payload);\n const dataAppend = (payload: ChartgpuDataAppendEvent) => this.dataAppend.emit(payload);\n const zoomChange = (payload: ChartGPUZoomRangeChangePayload) => this.emitZoomRange(payload);\n const deviceLost = (payload: ChartGPUDeviceLostPayload) => this.deviceLost.emit(payload);\n\n instance.on('click', click);\n instance.on('mouseover', mouseOver);\n instance.on('mouseout', mouseOut);\n instance.on('crosshairMove', crosshairMove);\n instance.on('dataAppend', dataAppend);\n instance.on('zoomRangeChange', zoomChange);\n instance.on('deviceLost', deviceLost);\n\n return () => {\n if (instance.disposed) {\n return;\n }\n instance.off('click', click);\n instance.off('mouseover', mouseOver);\n instance.off('mouseout', mouseOut);\n instance.off('crosshairMove', crosshairMove);\n instance.off('dataAppend', dataAppend);\n instance.off('zoomRangeChange', zoomChange);\n instance.off('deviceLost', deviceLost);\n };\n }\n\n private emitZoomRange(range: { start: number; end: number }): void {\n this.zoomChange.emit({ range: { start: range.start, end: range.end } });\n this.zoomRangeChange.emit({ start: range.start, end: range.end });\n }\n\n private observeResize(container: HTMLDivElement): void {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (!entry) {\n return;\n }\n const { width, height } = entry.contentRect;\n this.resize.emit({ width, height, container });\n if (this.resizeTimeout !== undefined) {\n clearTimeout(this.resizeTimeout);\n }\n this.resizeTimeout = setTimeout(() => {\n this.chartInstance()?.resize();\n this.resizeTimeout = undefined;\n }, 100);\n });\n this.resizeObserver.observe(container);\n }\n\n private reportError(cause: unknown): void {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n this.initializationError.set(error);\n this.chartError.emit(error);\n }\n\n private disposeChart(): void {\n const instance = this.chartInstance();\n this.removeChartListeners?.();\n this.removeChartListeners = undefined;\n if (instance && !instance.disposed) {\n instance.dispose();\n if (!this.destroying) {\n this.chartDispose.emit();\n }\n }\n this.chartInstance.set(null);\n this.chartContainer = undefined;\n this.createdWithOptions = undefined;\n }\n}\n","import { Directive, effect, input, output } from '@angular/core';\nimport { connectCharts } from 'chartgpu';\nimport type { ChartGPUInstance, ChartSyncOptions } from 'chartgpu';\n\n@Directive({\n selector: '[libChartgpuConnectCharts]',\n standalone: true,\n})\nexport class ChartgpuConnectChartsDirective {\n readonly charts = input<ReadonlyArray<ChartGPUInstance | null | undefined>>([], {\n alias: 'libChartgpuConnectCharts',\n });\n readonly syncOptions = input<ChartSyncOptions | undefined>();\n readonly connectionError = output<Error>();\n\n private readonly ids = new WeakMap<object, number>();\n private nextId = 1;\n private signature: string | undefined;\n\n constructor() {\n effect(onCleanup => {\n const charts = this.charts();\n const options = this.syncOptions();\n const optionsSignature = options\n ? `crosshair=${options.syncCrosshair ?? ''},zoom=${options.syncZoom ?? ''}`\n : '';\n const signature = `${charts.map(chart => {\n if (!chart) {\n return 'null';\n }\n\n let id = this.ids.get(chart);\n if (id === undefined) {\n id = this.nextId++;\n this.ids.set(chart, id);\n }\n return `${id}:${chart.disposed ? 1 : 0}`;\n }).join('|')}|${optionsSignature}`;\n\n if (signature === this.signature) {\n return;\n }\n this.signature = signature;\n\n if (charts.length === 0 || charts.some(chart => !chart || chart.disposed)) {\n return;\n }\n\n const resolved: ChartGPUInstance[] = [];\n for (const chart of charts) {\n if (!chart || chart.disposed) {\n return;\n }\n resolved.push(chart);\n }\n\n try {\n const disconnect = connectCharts(resolved, options);\n onCleanup(disconnect);\n } catch (cause: unknown) {\n this.connectionError.emit(cause instanceof Error ? cause : new Error(String(cause)));\n }\n });\n }\n}\n","import { Injectable, computed, signal } from '@angular/core';\nimport { createPipelineCache } from 'chartgpu';\nimport type { ChartGPUCreateContext } from 'chartgpu';\nimport type { ChartgpuGPUContextState } from './chartgpu-angular.types';\n\nconst INITIAL_STATE: ChartgpuGPUContextState = {\n adapter: null,\n device: null,\n pipelineCache: null,\n error: null,\n isReady: false,\n};\n\n/**\n * Creates one shared WebGPU context and pipeline cache for charts in a dashboard.\n * The device is intentionally not destroyed with the service so charts can share it\n * for the lifetime of the application.\n */\n@Injectable({ providedIn: 'root' })\nexport class ChartgpuGPUContextService {\n readonly state = signal<ChartgpuGPUContextState>(INITIAL_STATE);\n readonly context = computed<ChartGPUCreateContext | null>(() => {\n const state = this.state();\n if (!state.adapter || !state.device || !state.pipelineCache) {\n return null;\n }\n\n return {\n adapter: state.adapter,\n device: state.device,\n pipelineCache: state.pipelineCache,\n };\n });\n\n private initialization?: Promise<ChartgpuGPUContextState>;\n\n initialize(): Promise<ChartgpuGPUContextState> {\n if (!this.initialization) {\n this.initialization = this.createContext();\n }\n return this.initialization;\n }\n\n private async createContext(): Promise<ChartgpuGPUContextState> {\n try {\n if (typeof navigator === 'undefined' || !('gpu' in navigator)) {\n throw new Error('WebGPU not supported in this browser');\n }\n\n const gpu = (navigator as Navigator & {\n gpu?: {\n requestAdapter(options: {\n powerPreference: 'high-performance';\n }): Promise<ChartGPUCreateContext['adapter'] | null>;\n };\n }).gpu;\n if (!gpu) {\n throw new Error('WebGPU not supported in this browser');\n }\n\n const adapter = await gpu.requestAdapter({ powerPreference: 'high-performance' });\n if (!adapter) {\n const error = new Error('WebGPU is not available. No compatible GPUAdapter was found.');\n const state: ChartgpuGPUContextState = { ...INITIAL_STATE, error };\n this.state.set(state);\n return state;\n }\n\n const device = await adapter.requestDevice();\n const pipelineCache = createPipelineCache(device);\n const state: ChartgpuGPUContextState = {\n adapter,\n device,\n pipelineCache,\n error: null,\n isReady: true,\n };\n this.state.set(state);\n return state;\n } catch (cause: unknown) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n const state: ChartgpuGPUContextState = { ...INITIAL_STATE, error };\n this.state.set(state);\n return state;\n }\n }\n}\n","import { makeEnvironmentProviders } from '@angular/core';\nimport { ChartgpuGPUContextService } from './gpu-context.service';\n\nexport function provideChartGpuContext() {\n return makeEnvironmentProviders([ChartgpuGPUContextService]);\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,222 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnDestroy, ElementRef, DestroyRef } from '@angular/core';
3
+ import * as chartgpu from 'chartgpu';
4
+ import { ChartGPUInstance, DataPoint, OHLCDataPoint, RenderMode, ChartGPUOptions, ChartGPUHitTestResult, AnimationConfig, AnnotationConfig, AxisConfig, ChartGPUEventPayload, ChartGPUCrosshairMovePayload, ChartGPUCreateContext, PipelineCache, SeriesConfig, SeriesType, ChartSyncOptions, ThemeConfig, TooltipConfig, DataZoomConfig } from 'chartgpu';
5
+ export { ChartGPUCreateContext, ChartGPUCrosshairMovePayload, ChartGPUDeviceLostPayload, ChartGPUEventPayload, ChartGPUHitTestResult, ChartGPUInstance, ChartSyncOptions, DataPoint, OHLCDataPoint, PipelineCache, RenderMode } from 'chartgpu';
6
+
7
+ type ChartgpuOptions = ChartGPUOptions;
8
+ type ChartgpuSeriesType = SeriesType;
9
+ type ChartgpuSeriesData = Extract<SeriesConfig, {
10
+ type: 'line';
11
+ }>['data'];
12
+ type ChartgpuSeriesOptions = SeriesConfig;
13
+ type ChartgpuAxisOptions = AxisConfig;
14
+ type ChartgpuZoomOptions = DataZoomConfig;
15
+ type ChartgpuTooltipOptions = TooltipConfig;
16
+ type ChartgpuAnimationOptions = AnimationConfig | boolean;
17
+ type ChartgpuThemeOptions = ThemeConfig | 'light' | 'dark';
18
+ type ChartgpuAnnotationOptions = AnnotationConfig;
19
+ type ChartgpuThreeDOptions = Pick<ChartGPUOptions, 'coordinateSystem' | 'camera' | 'interaction3d' | 'axes3d'>;
20
+ type ChartgpuStreamingOptions = Pick<ChartGPUOptions, 'autoScroll'>;
21
+ type ChartgpuInteractionOptions = Pick<ChartGPUOptions, 'dataZoom' | 'tooltip'>;
22
+ type ChartgpuChartInstance = ChartGPUInstance;
23
+ type ChartgpuGPUContext = ChartGPUCreateContext;
24
+ type ChartgpuStyle = Record<string, string | number | null | undefined>;
25
+ type ChartgpuZoomRange = NonNullable<ReturnType<ChartGPUInstance['getZoomRange']>>;
26
+ type ChartgpuClickParams = ChartGPUEventPayload;
27
+ type ChartgpuMouseOverParams = ChartGPUEventPayload;
28
+ type ChartgpuCrosshairMoveParams = ChartGPUCrosshairMovePayload;
29
+ type ChartgpuHitTestResult = ChartGPUHitTestResult;
30
+ type ChartgpuRenderMode = RenderMode;
31
+ type ChartgpuSyncOptions = ChartSyncOptions;
32
+ type ChartgpuXYArraysData = Readonly<{
33
+ x: ArrayLike<number>;
34
+ y: ArrayLike<number>;
35
+ size?: ArrayLike<number>;
36
+ }>;
37
+ type ChartgpuInterleavedXYData = ArrayBufferView;
38
+ type ChartgpuCartesianSeriesData = ReadonlyArray<DataPoint | null> | ChartgpuXYArraysData | ChartgpuInterleavedXYData;
39
+ type ChartgpuAppendDataOptions = Readonly<{
40
+ maxPoints?: number;
41
+ }>;
42
+ interface ChartgpuDataAppendEvent {
43
+ seriesIndex: number;
44
+ count: number;
45
+ xExtent: {
46
+ min: number;
47
+ max: number;
48
+ };
49
+ }
50
+ interface ChartgpuReadyEvent {
51
+ container: HTMLDivElement;
52
+ }
53
+ interface ChartgpuResizeEvent {
54
+ width: number;
55
+ height: number;
56
+ container: HTMLDivElement;
57
+ }
58
+ interface ChartgpuClickEvent {
59
+ x: number;
60
+ y: number;
61
+ }
62
+ interface ChartgpuZoomChangeEvent {
63
+ range: {
64
+ start: number;
65
+ end: number;
66
+ };
67
+ }
68
+ interface ChartgpuZoomRangeChangeEvent {
69
+ start: number;
70
+ end: number;
71
+ }
72
+ interface ChartgpuGPUContextState {
73
+ adapter: ChartGPUCreateContext['adapter'] | null;
74
+ device: ChartGPUCreateContext['device'] | null;
75
+ pipelineCache: PipelineCache | null;
76
+ error: Error | null;
77
+ isReady: boolean;
78
+ }
79
+ interface ChartgpuChartHandle {
80
+ getChart(): ChartGPUInstance | null;
81
+ getContainer(): HTMLDivElement | null;
82
+ appendData(seriesIndex: number, newPoints: ChartgpuCartesianSeriesData | OHLCDataPoint[], options?: ChartgpuAppendDataOptions): void;
83
+ renderFrame(): boolean;
84
+ needsRender(): boolean;
85
+ getRenderMode(): RenderMode;
86
+ setRenderMode(mode: RenderMode): void;
87
+ setOption(options: ChartgpuOptions): void;
88
+ setZoomRange(start: number, end: number, source?: unknown): void;
89
+ setInteractionX(x: number | null, source?: unknown): void;
90
+ getInteractionX(): number | null;
91
+ hitTest(event: PointerEvent | MouseEvent): ChartGPUHitTestResult | null;
92
+ }
93
+
94
+ declare class ChartGpuAngularComponent implements ChartgpuChartHandle, OnDestroy {
95
+ private readonly destroyRef;
96
+ readonly options: _angular_core.InputSignal<chartgpu.ChartGPUOptions>;
97
+ readonly gpuContext: _angular_core.InputSignal<Readonly<{
98
+ readonly device: GPUDevice;
99
+ readonly adapter: GPUAdapter;
100
+ readonly pipelineCache?: chartgpu.PipelineCache;
101
+ }>>;
102
+ readonly theme: _angular_core.InputSignal<chartgpu.ThemeConfig | "light" | "dark">;
103
+ readonly className: _angular_core.InputSignal<string>;
104
+ readonly style: _angular_core.InputSignal<ChartgpuStyle>;
105
+ readonly ready: _angular_core.OutputEmitterRef<ChartgpuReadyEvent>;
106
+ readonly chartReady: _angular_core.OutputEmitterRef<ChartGPUInstance>;
107
+ readonly chartDispose: _angular_core.OutputEmitterRef<void>;
108
+ readonly resize: _angular_core.OutputEmitterRef<ChartgpuResizeEvent>;
109
+ readonly click: _angular_core.OutputEmitterRef<ChartgpuClickEvent>;
110
+ readonly chartClick: _angular_core.OutputEmitterRef<Readonly<{
111
+ readonly seriesIndex: number | null;
112
+ readonly dataIndex: number | null;
113
+ readonly value: readonly [number, number] | null;
114
+ readonly seriesName: string | null;
115
+ readonly event: PointerEvent;
116
+ }>>;
117
+ readonly mouseOver: _angular_core.OutputEmitterRef<Readonly<{
118
+ readonly seriesIndex: number | null;
119
+ readonly dataIndex: number | null;
120
+ readonly value: readonly [number, number] | null;
121
+ readonly seriesName: string | null;
122
+ readonly event: PointerEvent;
123
+ }>>;
124
+ readonly mouseOut: _angular_core.OutputEmitterRef<Readonly<{
125
+ readonly seriesIndex: number | null;
126
+ readonly dataIndex: number | null;
127
+ readonly value: readonly [number, number] | null;
128
+ readonly seriesName: string | null;
129
+ readonly event: PointerEvent;
130
+ }>>;
131
+ readonly crosshairMove: _angular_core.OutputEmitterRef<Readonly<{
132
+ readonly x: number | null;
133
+ readonly source?: unknown;
134
+ }>>;
135
+ readonly dataAppend: _angular_core.OutputEmitterRef<ChartgpuDataAppendEvent>;
136
+ readonly zoomChange: _angular_core.OutputEmitterRef<ChartgpuZoomChangeEvent>;
137
+ readonly zoomRangeChange: _angular_core.OutputEmitterRef<ChartgpuZoomRangeChangeEvent>;
138
+ readonly deviceLost: _angular_core.OutputEmitterRef<Readonly<{
139
+ readonly reason: GPUDeviceLostReason;
140
+ readonly message: string;
141
+ }>>;
142
+ readonly chartError: _angular_core.OutputEmitterRef<Error>;
143
+ readonly host: _angular_core.Signal<ElementRef<HTMLDivElement>>;
144
+ readonly canvasHost: _angular_core.Signal<ElementRef<HTMLDivElement>>;
145
+ private readonly chartInstance;
146
+ readonly initializationError: _angular_core.WritableSignal<Error>;
147
+ private chartContainer?;
148
+ private createdWithOptions?;
149
+ private resizeTimeout?;
150
+ private resizeObserver?;
151
+ private removeChartListeners?;
152
+ private destroying;
153
+ constructor(destroyRef: DestroyRef);
154
+ protected emitClick(event: MouseEvent): void;
155
+ ngOnDestroy(): void;
156
+ getChart(): ChartGPUInstance | null;
157
+ getContainer(): HTMLDivElement | null;
158
+ appendData(seriesIndex: number, newPoints: ChartgpuCartesianSeriesData | OHLCDataPoint[], options?: ChartgpuAppendDataOptions): void;
159
+ renderFrame(): boolean;
160
+ needsRender(): boolean;
161
+ getRenderMode(): 'auto' | 'external';
162
+ setRenderMode(mode: 'auto' | 'external'): void;
163
+ setOption(options: ChartgpuOptions): void;
164
+ setZoomRange(start: number, end: number, source?: unknown): void;
165
+ setInteractionX(x: number | null, source?: unknown): void;
166
+ getInteractionX(): number | null;
167
+ hitTest(event: PointerEvent | MouseEvent): Readonly<{
168
+ readonly isInGrid: boolean;
169
+ readonly canvasX: number;
170
+ readonly canvasY: number;
171
+ readonly gridX: number;
172
+ readonly gridY: number;
173
+ readonly match: chartgpu.ChartGPUHitTestMatch | null;
174
+ }>;
175
+ private getEffectiveOptions;
176
+ private listenToChart;
177
+ private emitZoomRange;
178
+ private observeResize;
179
+ private reportError;
180
+ private disposeChart;
181
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartGpuAngularComponent, never>;
182
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartGpuAngularComponent, "lib-chartgpu-angular", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "gpuContext": { "alias": "gpuContext"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "style": { "alias": "style"; "required": false; "isSignal": true; }; }, { "ready": "ready"; "chartReady": "chartReady"; "chartDispose": "chartDispose"; "resize": "resize"; "click": "click"; "chartClick": "chartClick"; "mouseOver": "mouseOver"; "mouseOut": "mouseOut"; "crosshairMove": "crosshairMove"; "dataAppend": "dataAppend"; "zoomChange": "zoomChange"; "zoomRangeChange": "zoomRangeChange"; "deviceLost": "deviceLost"; "chartError": "chartError"; }, never, never, true, never>;
183
+ }
184
+
185
+ declare class ChartgpuConnectChartsDirective {
186
+ readonly charts: _angular_core.InputSignal<readonly ChartGPUInstance[]>;
187
+ readonly syncOptions: _angular_core.InputSignal<Readonly<{
188
+ readonly syncCrosshair?: boolean;
189
+ readonly syncZoom?: boolean;
190
+ }>>;
191
+ readonly connectionError: _angular_core.OutputEmitterRef<Error>;
192
+ private readonly ids;
193
+ private nextId;
194
+ private signature;
195
+ constructor();
196
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartgpuConnectChartsDirective, never>;
197
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ChartgpuConnectChartsDirective, "[libChartgpuConnectCharts]", never, { "charts": { "alias": "libChartgpuConnectCharts"; "required": false; "isSignal": true; }; "syncOptions": { "alias": "syncOptions"; "required": false; "isSignal": true; }; }, { "connectionError": "connectionError"; }, never, never, true, never>;
198
+ }
199
+
200
+ declare function provideChartGpuContext(): _angular_core.EnvironmentProviders;
201
+
1
202
  /**
2
- * Generated bundle index. Do not edit.
203
+ * Creates one shared WebGPU context and pipeline cache for charts in a dashboard.
204
+ * The device is intentionally not destroyed with the service so charts can share it
205
+ * for the lifetime of the application.
3
206
  */
4
- /// <amd-module name="chartgpu-angular" />
5
- export * from './public-api';
207
+ declare class ChartgpuGPUContextService {
208
+ readonly state: _angular_core.WritableSignal<ChartgpuGPUContextState>;
209
+ readonly context: _angular_core.Signal<Readonly<{
210
+ readonly device: GPUDevice;
211
+ readonly adapter: GPUAdapter;
212
+ readonly pipelineCache?: chartgpu.PipelineCache;
213
+ }>>;
214
+ private initialization?;
215
+ initialize(): Promise<ChartgpuGPUContextState>;
216
+ private createContext;
217
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartgpuGPUContextService, never>;
218
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ChartgpuGPUContextService>;
219
+ }
220
+
221
+ export { ChartGpuAngularComponent, ChartgpuConnectChartsDirective, ChartgpuGPUContextService, provideChartGpuContext };
222
+ export type { ChartgpuAnimationOptions, ChartgpuAnnotationOptions, ChartgpuAppendDataOptions, ChartgpuAxisOptions, ChartgpuCartesianSeriesData, ChartgpuChartHandle, ChartgpuChartInstance, ChartgpuClickEvent, ChartgpuClickParams, ChartgpuCrosshairMoveParams, ChartgpuDataAppendEvent, ChartgpuGPUContext, ChartgpuGPUContextState, ChartgpuHitTestResult, ChartgpuInteractionOptions, ChartgpuInterleavedXYData, ChartgpuMouseOverParams, ChartgpuOptions, ChartgpuReadyEvent, ChartgpuRenderMode, ChartgpuResizeEvent, ChartgpuSeriesData, ChartgpuSeriesOptions, ChartgpuSeriesType, ChartgpuStreamingOptions, ChartgpuStyle, ChartgpuSyncOptions, ChartgpuThemeOptions, ChartgpuThreeDOptions, ChartgpuTooltipOptions, ChartgpuXYArraysData, ChartgpuZoomChangeEvent, ChartgpuZoomOptions, ChartgpuZoomRange, ChartgpuZoomRangeChangeEvent };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chartgpu-angular",
3
- "version": "18.0.0",
3
+ "version": "20.0.0",
4
4
  "description": "Unnofficial Angular bindings for ChartGPU — WebGPU-powered high-performance charts",
5
5
  "keywords": [
6
6
  "angular",
@@ -23,8 +23,8 @@
23
23
  "license": "MIT",
24
24
  "author": "Naren",
25
25
  "peerDependencies": {
26
- "@angular/common": "^18.0.0",
27
- "@angular/core": "^18.0.0",
26
+ "@angular/common": "^20.0.0",
27
+ "@angular/core": "^20.0.0",
28
28
  "chartgpu": "^0.4.0"
29
29
  },
30
30
  "module": "fesm2022/chartgpu-angular.mjs",
@@ -35,8 +35,6 @@
35
35
  },
36
36
  ".": {
37
37
  "types": "./index.d.ts",
38
- "esm2022": "./esm2022/chartgpu-angular.mjs",
39
- "esm": "./esm2022/chartgpu-angular.mjs",
40
38
  "default": "./fesm2022/chartgpu-angular.mjs"
41
39
  }
42
40
  },
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRncHUtYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NoYXJ0Z3B1LWFuZ3VsYXIvc3JjL2NoYXJ0Z3B1LWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==