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,288 +0,0 @@
1
- import { NgStyle } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, afterNextRender, effect, input, output, signal, untracked, viewChild, } from '@angular/core';
3
- import { ChartGPU, } from 'chartgpu';
4
- import * as i0 from "@angular/core";
5
- export class ChartGpuAngularComponent {
6
- destroyRef;
7
- options = input.required();
8
- gpuContext = input(null);
9
- theme = input(undefined);
10
- className = input();
11
- style = input();
12
- ready = output();
13
- chartReady = output();
14
- chartDispose = output();
15
- resize = output();
16
- click = output();
17
- chartClick = output();
18
- mouseOver = output();
19
- mouseOut = output();
20
- crosshairMove = output();
21
- dataAppend = output();
22
- zoomChange = output();
23
- zoomRangeChange = output();
24
- deviceLost = output();
25
- chartError = output();
26
- host = viewChild('host');
27
- canvasHost = viewChild('canvasHost');
28
- chartInstance = signal(null);
29
- initializationError = signal(null);
30
- chartContainer;
31
- createdWithOptions;
32
- resizeTimeout;
33
- resizeObserver;
34
- removeChartListeners;
35
- destroying = false;
36
- constructor(destroyRef) {
37
- this.destroyRef = destroyRef;
38
- this.destroyRef.onDestroy(() => {
39
- this.resizeObserver?.disconnect();
40
- if (this.resizeTimeout !== undefined) {
41
- clearTimeout(this.resizeTimeout);
42
- }
43
- this.disposeChart();
44
- });
45
- afterNextRender(() => {
46
- const container = this.host()?.nativeElement;
47
- if (container) {
48
- this.observeResize(container);
49
- }
50
- });
51
- effect(onCleanup => {
52
- const container = this.canvasHost()?.nativeElement;
53
- const options = this.options();
54
- const gpuContext = this.gpuContext();
55
- const theme = this.theme();
56
- this.initializationError.set(null);
57
- if (!container) {
58
- this.disposeChart();
59
- return;
60
- }
61
- if (typeof navigator === 'undefined' || !('gpu' in navigator)) {
62
- this.reportError(new Error('WebGPU not supported in this browser'));
63
- return;
64
- }
65
- if (untracked(() => this.chartInstance()) && this.chartContainer === container) {
66
- return;
67
- }
68
- let cancelled = false;
69
- let createdInstance;
70
- const initialOptions = this.getEffectiveOptions(options, theme);
71
- void (gpuContext
72
- ? ChartGPU.create(container, initialOptions, gpuContext)
73
- : ChartGPU.create(container, initialOptions)).then(instance => {
74
- createdInstance = instance;
75
- if (cancelled) {
76
- instance.dispose();
77
- return;
78
- }
79
- try {
80
- const latest = untracked(() => ({
81
- options: this.options(),
82
- theme: this.theme(),
83
- }));
84
- if (latest.options !== options || latest.theme !== theme) {
85
- instance.setOption(this.getEffectiveOptions(latest.options, latest.theme));
86
- }
87
- this.createdWithOptions = latest;
88
- this.chartContainer = container;
89
- this.chartInstance.set(instance);
90
- this.removeChartListeners = this.listenToChart(instance);
91
- this.ready.emit({ container });
92
- this.chartReady.emit(instance);
93
- const range = instance.getZoomRange();
94
- if (range) {
95
- this.emitZoomRange(range);
96
- }
97
- }
98
- catch (cause) {
99
- instance.dispose();
100
- throw cause;
101
- }
102
- }).catch((cause) => {
103
- if (cancelled) {
104
- return;
105
- }
106
- if (createdInstance && this.chartInstance() !== createdInstance && !createdInstance.disposed) {
107
- createdInstance.dispose();
108
- }
109
- this.reportError(cause);
110
- });
111
- onCleanup(() => {
112
- cancelled = true;
113
- if (this.chartContainer === container) {
114
- this.disposeChart();
115
- }
116
- });
117
- }, { allowSignalWrites: true });
118
- effect(() => {
119
- const options = this.options();
120
- const theme = this.theme();
121
- const instance = this.chartInstance();
122
- if (!instance || instance.disposed) {
123
- return;
124
- }
125
- if (this.createdWithOptions?.options === options && this.createdWithOptions.theme === theme) {
126
- this.createdWithOptions = undefined;
127
- return;
128
- }
129
- try {
130
- instance.setOption(this.getEffectiveOptions(options, theme));
131
- }
132
- catch (cause) {
133
- this.reportError(cause);
134
- }
135
- }, { allowSignalWrites: true });
136
- }
137
- emitClick(event) {
138
- this.click.emit({ x: event.offsetX, y: event.offsetY });
139
- }
140
- ngOnDestroy() {
141
- this.destroying = true;
142
- }
143
- getChart() {
144
- const instance = this.chartInstance();
145
- return instance && !instance.disposed ? instance : null;
146
- }
147
- getContainer() {
148
- return this.canvasHost()?.nativeElement ?? null;
149
- }
150
- appendData(seriesIndex, newPoints, options) {
151
- this.getChart()?.appendData(seriesIndex, newPoints, options);
152
- }
153
- renderFrame() {
154
- return this.getChart()?.renderFrame() ?? false;
155
- }
156
- needsRender() {
157
- return this.getChart()?.needsRender() ?? false;
158
- }
159
- getRenderMode() {
160
- return this.getChart()?.getRenderMode() ?? 'auto';
161
- }
162
- setRenderMode(mode) {
163
- this.getChart()?.setRenderMode(mode);
164
- }
165
- setOption(options) {
166
- this.getChart()?.setOption(options);
167
- }
168
- setZoomRange(start, end, source) {
169
- this.getChart()?.setZoomRange(start, end, source);
170
- }
171
- setInteractionX(x, source) {
172
- this.getChart()?.setInteractionX(x, source);
173
- }
174
- getInteractionX() {
175
- return this.getChart()?.getInteractionX() ?? null;
176
- }
177
- hitTest(event) {
178
- return this.getChart()?.hitTest(event) ?? null;
179
- }
180
- getEffectiveOptions(options, theme) {
181
- return theme !== undefined ? { ...options, theme } : options;
182
- }
183
- listenToChart(instance) {
184
- const click = (payload) => this.chartClick.emit(payload);
185
- const mouseOver = (payload) => this.mouseOver.emit(payload);
186
- const mouseOut = (payload) => this.mouseOut.emit(payload);
187
- const crosshairMove = (payload) => this.crosshairMove.emit(payload);
188
- const dataAppend = (payload) => this.dataAppend.emit(payload);
189
- const zoomChange = (payload) => this.emitZoomRange(payload);
190
- const deviceLost = (payload) => this.deviceLost.emit(payload);
191
- instance.on('click', click);
192
- instance.on('mouseover', mouseOver);
193
- instance.on('mouseout', mouseOut);
194
- instance.on('crosshairMove', crosshairMove);
195
- instance.on('dataAppend', dataAppend);
196
- instance.on('zoomRangeChange', zoomChange);
197
- instance.on('deviceLost', deviceLost);
198
- return () => {
199
- if (instance.disposed) {
200
- return;
201
- }
202
- instance.off('click', click);
203
- instance.off('mouseover', mouseOver);
204
- instance.off('mouseout', mouseOut);
205
- instance.off('crosshairMove', crosshairMove);
206
- instance.off('dataAppend', dataAppend);
207
- instance.off('zoomRangeChange', zoomChange);
208
- instance.off('deviceLost', deviceLost);
209
- };
210
- }
211
- emitZoomRange(range) {
212
- this.zoomChange.emit({ range: { start: range.start, end: range.end } });
213
- this.zoomRangeChange.emit({ start: range.start, end: range.end });
214
- }
215
- observeResize(container) {
216
- if (typeof ResizeObserver === 'undefined') {
217
- return;
218
- }
219
- this.resizeObserver = new ResizeObserver(entries => {
220
- const entry = entries[0];
221
- if (!entry) {
222
- return;
223
- }
224
- const { width, height } = entry.contentRect;
225
- this.resize.emit({ width, height, container });
226
- if (this.resizeTimeout !== undefined) {
227
- clearTimeout(this.resizeTimeout);
228
- }
229
- this.resizeTimeout = setTimeout(() => {
230
- this.chartInstance()?.resize();
231
- this.resizeTimeout = undefined;
232
- }, 100);
233
- });
234
- this.resizeObserver.observe(container);
235
- }
236
- reportError(cause) {
237
- const error = cause instanceof Error ? cause : new Error(String(cause));
238
- this.initializationError.set(error);
239
- this.chartError.emit(error);
240
- }
241
- disposeChart() {
242
- const instance = this.chartInstance();
243
- this.removeChartListeners?.();
244
- this.removeChartListeners = undefined;
245
- if (instance && !instance.disposed) {
246
- instance.dispose();
247
- if (!this.destroying) {
248
- this.chartDispose.emit();
249
- }
250
- }
251
- this.chartInstance.set(null);
252
- this.chartContainer = undefined;
253
- this.createdWithOptions = undefined;
254
- }
255
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartGpuAngularComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
256
- 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: `
257
- <div
258
- #host
259
- class="chartgpu-host"
260
- [class]="className() ?? ''"
261
- [ngStyle]="style()"
262
- (click)="emitClick($event)"
263
- >
264
- <div #canvasHost class="chartgpu-canvas-host"></div>
265
- @if (initializationError(); as error) {
266
- <div class="chartgpu-error" role="alert">{{ error.message }}</div>
267
- }
268
- </div>
269
- `, 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 });
270
- }
271
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartGpuAngularComponent, decorators: [{
272
- type: Component,
273
- args: [{ selector: 'lib-chartgpu-angular', standalone: true, imports: [NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'chartgpu-angular' }, template: `
274
- <div
275
- #host
276
- class="chartgpu-host"
277
- [class]="className() ?? ''"
278
- [ngStyle]="style()"
279
- (click)="emitClick($event)"
280
- >
281
- <div #canvasHost class="chartgpu-canvas-host"></div>
282
- @if (initializationError(); as error) {
283
- <div class="chartgpu-error" role="alert">{{ error.message }}</div>
284
- }
285
- </div>
286
- `, 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"] }]
287
- }], ctorParameters: () => [{ type: i0.DestroyRef }] });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRncHUtYW5ndWxhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFydGdwdS1hbmd1bGFyL3NyYy9saWIvY2hhcnRncHUtYW5ndWxhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUlULGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsUUFBUSxHQU9ULE1BQU0sVUFBVSxDQUFDOztBQWdFbEIsTUFBTSxPQUFPLHdCQUF3QjtJQXFDTjtJQXBDcEIsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQW1CLENBQUM7SUFDNUMsVUFBVSxHQUFHLEtBQUssQ0FBNEIsSUFBSSxDQUFDLENBQUM7SUFDcEQsS0FBSyxHQUFHLEtBQUssQ0FBdUMsU0FBUyxDQUFDLENBQUM7SUFDL0QsU0FBUyxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN4QyxLQUFLLEdBQUcsS0FBSyxFQUE2QixDQUFDO0lBRTNDLEtBQUssR0FBRyxNQUFNLEVBQXNCLENBQUM7SUFDckMsVUFBVSxHQUFHLE1BQU0sRUFBb0IsQ0FBQztJQUN4QyxZQUFZLEdBQUcsTUFBTSxFQUFRLENBQUM7SUFDOUIsTUFBTSxHQUFHLE1BQU0sRUFBdUIsQ0FBQztJQUN2QyxLQUFLLEdBQUcsTUFBTSxFQUFzQixDQUFDO0lBQ3JDLFVBQVUsR0FBRyxNQUFNLEVBQXdCLENBQUM7SUFDNUMsU0FBUyxHQUFHLE1BQU0sRUFBd0IsQ0FBQztJQUMzQyxRQUFRLEdBQUcsTUFBTSxFQUF3QixDQUFDO0lBQzFDLGFBQWEsR0FBRyxNQUFNLEVBQWdDLENBQUM7SUFD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Q0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztRQUN0QyxJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7SUFDdEMsQ0FBQzt3R0F4U1Usd0JBQXdCOzRGQUF4Qix3QkFBd0IsczBDQTFDekI7Ozs7Ozs7Ozs7Ozs7R0FhVCx3VUFoQlMsT0FBTzs7NEZBNkNOLHdCQUF3QjtrQkFoRHBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLE9BQU8sQ0FBQyxtQkFDRCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFlBQ3pCOzs7Ozs7Ozs7Ozs7O0dBYVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBlZmZlY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhcnRHUFUsXG4gIHR5cGUgQ2hhcnRHUFVDcm9zc2hhaXJNb3ZlUGF5bG9hZCxcbiAgdHlwZSBDaGFydEdQVURldmljZUxvc3RQYXlsb2FkLFxuICB0eXBlIENoYXJ0R1BVRXZlbnRQYXlsb2FkLFxuICB0eXBlIENoYXJ0R1BVSW5zdGFuY2UsXG4gIHR5cGUgQ2hhcnRHUFVab29tUmFuZ2VDaGFuZ2VQYXlsb2FkLFxuICB0eXBlIE9ITENEYXRhUG9pbnQsXG59IGZyb20gJ2NoYXJ0Z3B1JztcbmltcG9ydCB0eXBlIHtcbiAgQ2hhcnRncHVBcHBlbmREYXRhT3B0aW9ucyxcbiAgQ2hhcnRncHVDYXJ0ZXNpYW5TZXJpZXNEYXRhLFxuICBDaGFydGdwdUNoYXJ0SGFuZGxlLFxuICBDaGFydGdwdUNsaWNrRXZlbnQsXG4gIENoYXJ0Z3B1RGF0YUFwcGVuZEV2ZW50LFxuICBDaGFydGdwdUdQVUNvbnRleHQsXG4gIENoYXJ0Z3B1T3B0aW9ucyxcbiAgQ2hhcnRncHVSZWFkeUV2ZW50LFxuICBDaGFydGdwdVJlc2l6ZUV2ZW50LFxuICBDaGFydGdwdVN0eWxlLFxuICBDaGFydGdwdVpvb21DaGFuZ2VFdmVudCxcbiAgQ2hhcnRncHVab29tUmFuZ2VDaGFuZ2VFdmVudCxcbn0gZnJvbSAnLi9jaGFydGdwdS1hbmd1bGFyLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNoYXJ0Z3B1LWFuZ3VsYXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdTdHlsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnY2hhcnRncHUtYW5ndWxhcicgfSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICAjaG9zdFxuICAgICAgY2xhc3M9XCJjaGFydGdwdS1ob3N0XCJcbiAgICAgIFtjbGFzc109XCJjbGFzc05hbWUoKSA/PyAnJ1wiXG4gICAgICBbbmdTdHlsZV09XCJzdHlsZSgpXCJcbiAgICAgIChjbGljayk9XCJlbWl0Q2xpY2soJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdiAjY2FudmFzSG9zdCBjbGFzcz1cImNoYXJ0Z3B1LWNhbnZhcy1ob3N0XCI+PC9kaXY+XG4gICAgICBAaWYgKGluaXRpYWxpemF0aW9uRXJyb3IoKTsgYXMgZXJyb3IpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0Z3B1LWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3IubWVzc2FnZSB9fTwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICAuY2hhcnRncHUtaG9zdCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICAuY2hhcnRncHUtY2FudmFzLWhvc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgfVxuXG4gICAgLmNoYXJ0Z3B1LWVycm9yIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGluc2V0OiAwO1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbiAgYF0sXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0R3B1QW5ndWxhckNvbXBvbmVudCBpbXBsZW1lbnRzIENoYXJ0Z3B1Q2hhcnRIYW5kbGUsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IG9wdGlvbnMgPSBpbnB1dC5yZXF1aXJlZDxDaGFydGdwdU9wdGlvbnM+KCk7XG4gIHJlYWRvbmx5IGdwdUNvbnRleHQgPSBpbnB1dDxDaGFydGdwdUdQVUNvbnRleHQgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgdGhlbWUgPSBpbnB1dDxDaGFydGdwdU9wdGlvbnNbJ3RoZW1lJ10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGNsYXNzTmFtZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgc3R5bGUgPSBpbnB1dDxDaGFydGdwdVN0eWxlIHwgdW5kZWZpbmVkPigpO1xuXG4gIHJlYWRvbmx5IHJlYWR5ID0gb3V0cHV0PENoYXJ0Z3B1UmVhZHlFdmVudD4oKTtcbiAgcmVhZG9ubHkgY2hhcnRSZWFkeSA9IG91dHB1dDxDaGFydEdQVUluc3RhbmNlPigpO1xuICByZWFkb25seSBjaGFydERpc3Bvc2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgcmVzaXplID0gb3V0cHV0PENoYXJ0Z3B1UmVzaXplRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IGNsaWNrID0gb3V0cHV0PENoYXJ0Z3B1Q2xpY2tFdmVudD4oKTtcbiAgcmVhZG9ubHkgY2hhcnRDbGljayA9IG91dHB1dDxDaGFydEdQVUV2ZW50UGF5bG9hZD4oKTtcbiAgcmVhZG9ubHkgbW91c2VPdmVyID0gb3V0cHV0PENoYXJ0R1BVRXZlbnRQYXlsb2FkPigpO1xuICByZWFkb25seSBtb3VzZU91dCA9IG91dHB1dDxDaGFydEdQVUV2ZW50UGF5bG9hZD4oKTtcbiAgcmVhZG9ubHkgY3Jvc3NoYWlyTW92ZSA9IG91dHB1dDxDaGFydEdQVUNyb3NzaGFpck1vdmVQYXlsb2FkPigpO1xuICByZWFkb25seSBkYXRhQXBwZW5kID0gb3V0cHV0PENoYXJ0Z3B1RGF0YUFwcGVuZEV2ZW50PigpO1xuICByZWFkb25seSB6b29tQ2hhbmdlID0gb3V0cHV0PENoYXJ0Z3B1Wm9vbUNoYW5nZUV2ZW50PigpO1xuICByZWFkb25seSB6b29tUmFuZ2VDaGFuZ2UgPSBvdXRwdXQ8Q2hhcnRncHVab29tUmFuZ2VDaGFuZ2VFdmVudD4oKTtcbiAgcmVhZG9ubHkgZGV2aWNlTG9zdCA9IG91dHB1dDxDaGFydEdQVURldmljZUxvc3RQYXlsb2FkPigpO1xuICByZWFkb25seSBjaGFydEVycm9yID0gb3V0cHV0PEVycm9yPigpO1xuXG4gIHJlYWRvbmx5IGhvc3QgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdob3N0Jyk7XG4gIHJlYWRvbmx5IGNhbnZhc0hvc3QgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdjYW52YXNIb3N0Jyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydEluc3RhbmNlID0gc2lnbmFsPENoYXJ0R1BVSW5zdGFuY2UgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgaW5pdGlhbGl6YXRpb25FcnJvciA9IHNpZ25hbDxFcnJvciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIGNoYXJ0Q29udGFpbmVyPzogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgY3JlYXRlZFdpdGhPcHRpb25zPzoge1xuICAgIG9wdGlvbnM6IENoYXJ0Z3B1T3B0aW9ucztcbiAgICB0aGVtZTogQ2hhcnRncHVPcHRpb25zWyd0aGVtZSddIHwgdW5kZWZpbmVkO1xuICB9O1xuICBwcml2YXRlIHJlc2l6ZVRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIHJlbW92ZUNoYXJ0TGlzdGVuZXJzPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBkZXN0cm95aW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmOiBEZXN0cm95UmVmKSB7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICBpZiAodGhpcy5yZXNpemVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZW91dCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3Bvc2VDaGFydCgpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuaG9zdCgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICB0aGlzLm9ic2VydmVSZXNpemUoY29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdChvbkNsZWFudXAgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jYW52YXNIb3N0KCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG4gICAgICBjb25zdCBncHVDb250ZXh0ID0gdGhpcy5ncHVDb250ZXh0KCk7XG4gICAgICBjb25zdCB0aGVtZSA9IHRoaXMudGhlbWUoKTtcblxuICAgICAgdGhpcy5pbml0aWFsaXphdGlvbkVycm9yLnNldChudWxsKTtcbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuZGlzcG9zZUNoYXJ0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyB8fCAhKCdncHUnIGluIG5hdmlnYXRvcikpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRFcnJvcihuZXcgRXJyb3IoJ1dlYkdQVSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodW50cmFja2VkKCgpID0+IHRoaXMuY2hhcnRJbnN0YW5jZSgpKSAmJiB0aGlzLmNoYXJ0Q29udGFpbmVyID09PSBjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICBsZXQgY3JlYXRlZEluc3RhbmNlOiBDaGFydEdQVUluc3RhbmNlIHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaW5pdGlhbE9wdGlvbnMgPSB0aGlzLmdldEVmZmVjdGl2ZU9wdGlvbnMob3B0aW9ucywgdGhlbWUpO1xuXG4gICAgICB2b2lkIChncHVDb250ZXh0XG4gICAgICAgID8gQ2hhcnRHUFUuY3JlYXRlKGNvbnRhaW5lciwgaW5pdGlhbE9wdGlvbnMsIGdwdUNvbnRleHQpXG4gICAgICAgIDogQ2hhcnRHUFUuY3JlYXRlKGNvbnRhaW5lciwgaW5pdGlhbE9wdGlvbnMpXG4gICAgICApLnRoZW4oaW5zdGFuY2UgPT4ge1xuICAgICAgICBjcmVhdGVkSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgIGluc3RhbmNlLmRpc3Bvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGxhdGVzdCA9IHVudHJhY2tlZCgoKSA9PiAoe1xuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zKCksXG4gICAgICAgICAgICB0aGVtZTogdGhpcy50aGVtZSgpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAobGF0ZXN0Lm9wdGlvbnMgIT09IG9wdGlvbnMgfHwgbGF0ZXN0LnRoZW1lICE9PSB0aGVtZSkge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc2V0T3B0aW9uKHRoaXMuZ2V0RWZmZWN0aXZlT3B0aW9ucyhsYXRlc3Qub3B0aW9ucywgbGF0ZXN0LnRoZW1lKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jcmVhdGVkV2l0aE9wdGlvbnMgPSBsYXRlc3Q7XG4gICAgICAgICAgdGhpcy5jaGFydENvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgICAgICB0aGlzLmNoYXJ0SW5zdGFuY2Uuc2V0KGluc3RhbmNlKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUNoYXJ0TGlzdGVuZXJzID0gdGhpcy5saXN0ZW5Ub0NoYXJ0KGluc3RhbmNlKTtcbiAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQoeyBjb250YWluZXIgfSk7XG4gICAgICAgICAgdGhpcy5jaGFydFJlYWR5LmVtaXQoaW5zdGFuY2UpO1xuXG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBpbnN0YW5jZS5nZXRab29tUmFuZ2UoKTtcbiAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFpvb21SYW5nZShyYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChjYXVzZTogdW5rbm93bikge1xuICAgICAgICAgIGluc3RhbmNlLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aHJvdyBjYXVzZTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGNhdXNlOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNyZWF0ZWRJbnN0YW5jZSAmJiB0aGlzLmNoYXJ0SW5zdGFuY2UoKSAhPT0gY3JlYXRlZEluc3RhbmNlICYmICFjcmVhdGVkSW5zdGFuY2UuZGlzcG9zZWQpIHtcbiAgICAgICAgICBjcmVhdGVkSW5zdGFuY2UuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVwb3J0RXJyb3IoY2F1c2UpO1xuICAgICAgfSk7XG5cbiAgICAgIG9uQ2xlYW51cCgoKSA9PiB7XG4gICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29udGFpbmVyID09PSBjb250YWluZXIpIHtcbiAgICAgICAgICB0aGlzLmRpc3Bvc2VDaGFydCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKTtcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy50aGVtZSgpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNoYXJ0SW5zdGFuY2UoKTtcbiAgICAgIGlmICghaW5zdGFuY2UgfHwgaW5zdGFuY2UuZGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jcmVhdGVkV2l0aE9wdGlvbnM/Lm9wdGlvbnMgPT09IG9wdGlvbnMgJiYgdGhpcy5jcmVhdGVkV2l0aE9wdGlvbnMudGhlbWUgPT09IHRoZW1lKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZFdpdGhPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGluc3RhbmNlLnNldE9wdGlvbih0aGlzLmdldEVmZmVjdGl2ZU9wdGlvbnMob3B0aW9ucywgdGhlbWUpKTtcbiAgICAgIH0gY2F0Y2ggKGNhdXNlOiB1bmtub3duKSB7XG4gICAgICAgIHRoaXMucmVwb3J0RXJyb3IoY2F1c2UpO1xuICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbGljay5lbWl0KHsgeDogZXZlbnQub2Zmc2V0WCwgeTogZXZlbnQub2Zmc2V0WSB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWluZyA9IHRydWU7XG4gIH1cblxuICBnZXRDaGFydCgpOiBDaGFydEdQVUluc3RhbmNlIHwgbnVsbCB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNoYXJ0SW5zdGFuY2UoKTtcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgIWluc3RhbmNlLmRpc3Bvc2VkID8gaW5zdGFuY2UgOiBudWxsO1xuICB9XG5cbiAgZ2V0Q29udGFpbmVyKCk6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FudmFzSG9zdCgpPy5uYXRpdmVFbGVtZW50ID8/IG51bGw7XG4gIH1cblxuICBhcHBlbmREYXRhKFxuICAgIHNlcmllc0luZGV4OiBudW1iZXIsXG4gICAgbmV3UG9pbnRzOiBDaGFydGdwdUNhcnRlc2lhblNlcmllc0RhdGEgfCBPSExDRGF0YVBvaW50W10sXG4gICAgb3B0aW9ucz86IENoYXJ0Z3B1QXBwZW5kRGF0YU9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZ2V0Q2hhcnQoKT8uYXBwZW5kRGF0YShzZXJpZXNJbmRleCwgbmV3UG9pbnRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbmRlckZyYW1lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENoYXJ0KCk/LnJlbmRlckZyYW1lKCkgPz8gZmFsc2U7XG4gIH1cblxuICBuZWVkc1JlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGFydCgpPy5uZWVkc1JlbmRlcigpID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0UmVuZGVyTW9kZSgpOiAnYXV0bycgfCAnZXh0ZXJuYWwnIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGFydCgpPy5nZXRSZW5kZXJNb2RlKCkgPz8gJ2F1dG8nO1xuICB9XG5cbiAgc2V0UmVuZGVyTW9kZShtb2RlOiAnYXV0bycgfCAnZXh0ZXJuYWwnKTogdm9pZCB7XG4gICAgdGhpcy5nZXRDaGFydCgpPy5zZXRSZW5kZXJNb2RlKG1vZGUpO1xuICB9XG5cbiAgc2V0T3B0aW9uKG9wdGlvbnM6IENoYXJ0Z3B1T3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuZ2V0Q2hhcnQoKT8uc2V0T3B0aW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgc2V0Wm9vbVJhbmdlKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBzb3VyY2U/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5nZXRDaGFydCgpPy5zZXRab29tUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlKTtcbiAgfVxuXG4gIHNldEludGVyYWN0aW9uWCh4OiBudW1iZXIgfCBudWxsLCBzb3VyY2U/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5nZXRDaGFydCgpPy5zZXRJbnRlcmFjdGlvblgoeCwgc291cmNlKTtcbiAgfVxuXG4gIGdldEludGVyYWN0aW9uWCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGFydCgpPy5nZXRJbnRlcmFjdGlvblgoKSA/PyBudWxsO1xuICB9XG5cbiAgaGl0VGVzdChldmVudDogUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCkge1xuICAgIHJldHVybiB0aGlzLmdldENoYXJ0KCk/LmhpdFRlc3QoZXZlbnQpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZU9wdGlvbnMoXG4gICAgb3B0aW9uczogQ2hhcnRncHVPcHRpb25zLFxuICAgIHRoZW1lOiBDaGFydGdwdU9wdGlvbnNbJ3RoZW1lJ10gfCB1bmRlZmluZWQsXG4gICk6IENoYXJ0Z3B1T3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoZW1lICE9PSB1bmRlZmluZWQgPyB7IC4uLm9wdGlvbnMsIHRoZW1lIH0gOiBvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Ub0NoYXJ0KGluc3RhbmNlOiBDaGFydEdQVUluc3RhbmNlKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgY2xpY2sgPSAocGF5bG9hZDogQ2hhcnRHUFVFdmVudFBheWxvYWQpID0+IHRoaXMuY2hhcnRDbGljay5lbWl0KHBheWxvYWQpO1xuICAgIGNvbnN0IG1vdXNlT3ZlciA9IChwYXlsb2FkOiBDaGFydEdQVUV2ZW50UGF5bG9hZCkgPT4gdGhpcy5tb3VzZU92ZXIuZW1pdChwYXlsb2FkKTtcbiAgICBjb25zdCBtb3VzZU91dCA9IChwYXlsb2FkOiBDaGFydEdQVUV2ZW50UGF5bG9hZCkgPT4gdGhpcy5tb3VzZU91dC5lbWl0KHBheWxvYWQpO1xuICAgIGNvbnN0IGNyb3NzaGFpck1vdmUgPSAocGF5bG9hZDogQ2hhcnRHUFVDcm9zc2hhaXJNb3ZlUGF5bG9hZCkgPT4gdGhpcy5jcm9zc2hhaXJNb3ZlLmVtaXQocGF5bG9hZCk7XG4gICAgY29uc3QgZGF0YUFwcGVuZCA9IChwYXlsb2FkOiBDaGFydGdwdURhdGFBcHBlbmRFdmVudCkgPT4gdGhpcy5kYXRhQXBwZW5kLmVtaXQocGF5bG9hZCk7XG4gICAgY29uc3Qgem9vbUNoYW5nZSA9IChwYXlsb2FkOiBDaGFydEdQVVpvb21SYW5nZUNoYW5nZVBheWxvYWQpID0+IHRoaXMuZW1pdFpvb21SYW5nZShwYXlsb2FkKTtcbiAgICBjb25zdCBkZXZpY2VMb3N0ID0gKHBheWxvYWQ6IENoYXJ0R1BVRGV2aWNlTG9zdFBheWxvYWQpID0+IHRoaXMuZGV2aWNlTG9zdC5lbWl0KHBheWxvYWQpO1xuXG4gICAgaW5zdGFuY2Uub24oJ2NsaWNrJywgY2xpY2spO1xuICAgIGluc3RhbmNlLm9uKCdtb3VzZW92ZXInLCBtb3VzZU92ZXIpO1xuICAgIGluc3RhbmNlLm9uKCdtb3VzZW91dCcsIG1vdXNlT3V0KTtcbiAgICBpbnN0YW5jZS5vbignY3Jvc3NoYWlyTW92ZScsIGNyb3NzaGFpck1vdmUpO1xuICAgIGluc3RhbmNlLm9uKCdkYXRhQXBwZW5kJywgZGF0YUFwcGVuZCk7XG4gICAgaW5zdGFuY2Uub24oJ3pvb21SYW5nZUNoYW5nZScsIHpvb21DaGFuZ2UpO1xuICAgIGluc3RhbmNlLm9uKCdkZXZpY2VMb3N0JywgZGV2aWNlTG9zdCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlLmRpc3Bvc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGluc3RhbmNlLm9mZignY2xpY2snLCBjbGljayk7XG4gICAgICBpbnN0YW5jZS5vZmYoJ21vdXNlb3ZlcicsIG1vdXNlT3Zlcik7XG4gICAgICBpbnN0YW5jZS5vZmYoJ21vdXNlb3V0JywgbW91c2VPdXQpO1xuICAgICAgaW5zdGFuY2Uub2ZmKCdjcm9zc2hhaXJNb3ZlJywgY3Jvc3NoYWlyTW92ZSk7XG4gICAgICBpbnN0YW5jZS5vZmYoJ2RhdGFBcHBlbmQnLCBkYXRhQXBwZW5kKTtcbiAgICAgIGluc3RhbmNlLm9mZignem9vbVJhbmdlQ2hhbmdlJywgem9vbUNoYW5nZSk7XG4gICAgICBpbnN0YW5jZS5vZmYoJ2RldmljZUxvc3QnLCBkZXZpY2VMb3N0KTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Wm9vbVJhbmdlKHJhbmdlOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICB0aGlzLnpvb21DaGFuZ2UuZW1pdCh7IHJhbmdlOiB7IHN0YXJ0OiByYW5nZS5zdGFydCwgZW5kOiByYW5nZS5lbmQgfSB9KTtcbiAgICB0aGlzLnpvb21SYW5nZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHJhbmdlLnN0YXJ0LCBlbmQ6IHJhbmdlLmVuZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZVJlc2l6ZShjb250YWluZXI6IEhUTUxEaXZFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVudHJ5LmNvbnRlbnRSZWN0O1xuICAgICAgdGhpcy5yZXNpemUuZW1pdCh7IHdpZHRoLCBoZWlnaHQsIGNvbnRhaW5lciB9KTtcbiAgICAgIGlmICh0aGlzLnJlc2l6ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzaXplVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNoYXJ0SW5zdGFuY2UoKT8ucmVzaXplKCk7XG4gICAgICAgIHRoaXMucmVzaXplVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydEVycm9yKGNhdXNlOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3IgPSBjYXVzZSBpbnN0YW5jZW9mIEVycm9yID8gY2F1c2UgOiBuZXcgRXJyb3IoU3RyaW5nKGNhdXNlKSk7XG4gICAgdGhpcy5pbml0aWFsaXphdGlvbkVycm9yLnNldChlcnJvcik7XG4gICAgdGhpcy5jaGFydEVycm9yLmVtaXQoZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwb3NlQ2hhcnQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNoYXJ0SW5zdGFuY2UoKTtcbiAgICB0aGlzLnJlbW92ZUNoYXJ0TGlzdGVuZXJzPy4oKTtcbiAgICB0aGlzLnJlbW92ZUNoYXJ0TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuICAgIGlmIChpbnN0YW5jZSAmJiAhaW5zdGFuY2UuZGlzcG9zZWQpIHtcbiAgICAgIGluc3RhbmNlLmRpc3Bvc2UoKTtcbiAgICAgIGlmICghdGhpcy5kZXN0cm95aW5nKSB7XG4gICAgICAgIHRoaXMuY2hhcnREaXNwb3NlLmVtaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGFydEluc3RhbmNlLnNldChudWxsKTtcbiAgICB0aGlzLmNoYXJ0Q29udGFpbmVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3JlYXRlZFdpdGhPcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRncHUtYW5ndWxhci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXJ0Z3B1LWFuZ3VsYXIvc3JjL2xpYi9jaGFydGdwdS1hbmd1bGFyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENoYXJ0R1BVT3B0aW9ucyB9IGZyb20gJ2NoYXJ0Z3B1JztcbmltcG9ydCB0eXBlIHtcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBBbm5vdGF0aW9uQ29uZmlnLFxuICBBeGlzQ29uZmlnLFxuICBDaGFydEdQVUNyZWF0ZUNvbnRleHQsXG4gIENoYXJ0R1BVQ3Jvc3NoYWlyTW92ZVBheWxvYWQsXG4gIENoYXJ0R1BVRXZlbnRQYXlsb2FkLFxuICBDaGFydEdQVUhpdFRlc3RSZXN1bHQsXG4gIENoYXJ0R1BVSW5zdGFuY2UsXG4gIENoYXJ0R1BVRGV2aWNlTG9zdFBheWxvYWQsXG4gIENoYXJ0U3luY09wdGlvbnMsXG4gIERhdGFab29tQ29uZmlnLFxuICBEYXRhUG9pbnQsXG4gIE9ITENEYXRhUG9pbnQsXG4gIFBpcGVsaW5lQ2FjaGUsXG4gIFJlbmRlck1vZGUsXG4gIFNlcmllc0NvbmZpZyxcbiAgU2VyaWVzVHlwZSxcbiAgVGhlbWVDb25maWcsXG4gIFRvb2x0aXBDb25maWcsXG59IGZyb20gJ2NoYXJ0Z3B1JztcblxuZXhwb3J0IHR5cGUgQ2hhcnRncHVPcHRpb25zID0gQ2hhcnRHUFVPcHRpb25zO1xuZXhwb3J0IHR5cGUgQ2hhcnRncHVTZXJpZXNUeXBlID0gU2VyaWVzVHlwZTtcbmV4cG9ydCB0eXBlIENoYXJ0Z3B1U2VyaWVzRGF0YSA9IEV4dHJhY3Q8U2VyaWVzQ29uZmlnLCB7IHR5cGU6ICdsaW5lJyB9PlsnZGF0YSddO1xuZXhwb3J0IHR5cGUgQ2hhcnRncHVTZXJpZXNPcHRpb25zID0gU2VyaWVzQ29uZmlnO1xuZXhwb3J0IHR5cGUgQ2hhcnRncHVBeGlzT3B0aW9ucyA9IEF4aXNDb25maWc7XG5leHBvcnQgdHlwZSBDaGFydGdwdVpvb21PcHRpb25zID0gRGF0YVpvb21Db25maWc7XG5leHBvcnQgdHlwZSBDaGFydGdwdVRvb2x0aXBPcHRpb25zID0gVG9vbHRpcENvbmZpZztcbmV4cG9ydCB0eXBlIENoYXJ0Z3B1QW5pbWF0aW9uT3B0aW9ucyA9IEFuaW1hdGlvbkNvbmZpZyB8IGJvb2xlYW47XG5leHBvcnQgdHlwZSBDaGFydGdwdVRoZW1lT3B0aW9ucyA9IFRoZW1lQ29uZmlnIHwgJ2xpZ2h0JyB8ICdkYXJrJztcbmV4cG9ydCB0eXBlIENoYXJ0Z3B1QW5ub3RhdGlvbk9wdGlvbnMgPSBBbm5vdGF0aW9uQ29uZmlnO1xuZXhwb3J0IHR5cGUgQ2hhcnRncHVUaHJlZURPcHRpb25zID0gUGljazxDaGFydEdQVU9wdGlvbnMsICdjb29yZGluYXRlU3lzdGVtJyB8ICdjYW1lcmEnIHwgJ2ludGVyYWN0aW9uM2QnIHwgJ2F4ZXMzZCc+O1xuZXhwb3J0IHR5cGUgQ2hhcnRncHVTdHJlYW1pbmdPcHRpb25zID0gUGljazxDaGFydEdQVU9wdGlvbnMsICdhdXRvU2Nyb2xsJz47XG5leHBvcnQgdHlwZSBDaGFydGdwdUludGVyYWN0aW9uT3B0aW9ucyA9IFBpY2s8Q2hhcnRHUFVPcHRpb25zLCAnZGF0YVpvb20nIHwgJ3Rvb2x0aXAnPjtcbmV4cG9ydCB0eXBlIENoYXJ0Z3B1Q2hhcnRJbnN0YW5jZSA9IENoYXJ0R1BVSW5zdGFuY2U7XG5leHBvcnQgdHlwZSBDaGFydGdwdUdQVUNvbnRleHQgPSBDaGFydEdQVUNyZWF0ZUNvbnRleHQ7XG5leHBvcnQgdHlwZSBDaGFydGdwdVN0eWxlID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD47XG5leHBvcnQgdHlwZSBDaGFydGdwdVpvb21SYW5nZSA9IE5vbk51bGxhYmxlPFJldHVyblR5cGU8Q2hhcnRHUFVJbnN0YW5jZVsnZ2V0Wm9vbVJhbmdlJ10+PjtcbmV4cG9ydCB0eXBlIENoYXJ0Z3B1Q2xpY2tQYXJhbXMgPSBDaGFydEdQVUV2ZW50UGF5bG9hZDtcbmV4cG9ydCB0eXBlIENoYXJ0Z3B1TW91c2VPdmVyUGFyYW1zID0gQ2hhcnRHUFVFdmVudFBheWxvYWQ7XG5leHBvcnQgdHlwZSBDaGFydGdwdUNyb3NzaGFpck1vdmVQYXJhbXMgPSBDaGFydEdQVUNyb3NzaGFpck1vdmVQYXlsb2FkO1xuZXhwb3J0IHR5cGUgQ2hhcnRncHVIaXRUZXN0UmVzdWx0ID0gQ2hhcnRHUFVIaXRUZXN0UmVzdWx0O1xuZXhwb3J0IHR5cGUgQ2hhcnRncHVSZW5kZXJNb2RlID0gUmVuZGVyTW9kZTtcbmV4cG9ydCB0eXBlIENoYXJ0Z3B1U3luY09wdGlvbnMgPSBDaGFydFN5bmNPcHRpb25zO1xuXG5leHBvcnQgdHlwZSBDaGFydGdwdVhZQXJyYXlzRGF0YSA9IFJlYWRvbmx5PHtcbiAgeDogQXJyYXlMaWtlPG51bWJlcj47XG4gIHk6IEFycmF5TGlrZTxudW1iZXI+O1xuICBzaXplPzogQXJyYXlMaWtlPG51bWJlcj47XG59PjtcbmV4cG9ydCB0eXBlIENoYXJ0Z3B1SW50ZXJsZWF2ZWRYWURhdGEgPSBBcnJheUJ1ZmZlclZpZXc7XG5leHBvcnQgdHlwZSBDaGFydGdwdUNhcnRlc2lhblNlcmllc0RhdGEgPVxuICB8IFJlYWRvbmx5QXJyYXk8RGF0YVBvaW50IHwgbnVsbD5cbiAgfCBDaGFydGdwdVhZQXJyYXlzRGF0YVxuICB8IENoYXJ0Z3B1SW50ZXJsZWF2ZWRYWURhdGE7XG5leHBvcnQgdHlwZSBDaGFydGdwdUFwcGVuZERhdGFPcHRpb25zID0gUmVhZG9ubHk8eyBtYXhQb2ludHM/OiBudW1iZXIgfT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRncHVEYXRhQXBwZW5kRXZlbnQge1xuICBzZXJpZXNJbmRleDogbnVtYmVyO1xuICBjb3VudDogbnVtYmVyO1xuICB4RXh0ZW50OiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0Z3B1UmVhZHlFdmVudCB7XG4gIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRncHVSZXNpemVFdmVudCB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0Z3B1Q2xpY2tFdmVudCB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0Z3B1Wm9vbUNoYW5nZUV2ZW50IHtcbiAgcmFuZ2U6IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFydGdwdVpvb21SYW5nZUNoYW5nZUV2ZW50IHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRncHVHUFVDb250ZXh0U3RhdGUge1xuICBhZGFwdGVyOiBDaGFydEdQVUNyZWF0ZUNvbnRleHRbJ2FkYXB0ZXInXSB8IG51bGw7XG4gIGRldmljZTogQ2hhcnRHUFVDcmVhdGVDb250ZXh0WydkZXZpY2UnXSB8IG51bGw7XG4gIHBpcGVsaW5lQ2FjaGU6IFBpcGVsaW5lQ2FjaGUgfCBudWxsO1xuICBlcnJvcjogRXJyb3IgfCBudWxsO1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0Z3B1Q2hhcnRIYW5kbGUge1xuICBnZXRDaGFydCgpOiBDaGFydEdQVUluc3RhbmNlIHwgbnVsbDtcbiAgZ2V0Q29udGFpbmVyKCk6IEhUTUxEaXZFbGVtZW50IHwgbnVsbDtcbiAgYXBwZW5kRGF0YShcbiAgICBzZXJpZXNJbmRleDogbnVtYmVyLFxuICAgIG5ld1BvaW50czogQ2hhcnRncHVDYXJ0ZXNpYW5TZXJpZXNEYXRhIHwgT0hMQ0RhdGFQb2ludFtdLFxuICAgIG9wdGlvbnM/OiBDaGFydGdwdUFwcGVuZERhdGFPcHRpb25zLFxuICApOiB2b2lkO1xuICByZW5kZXJGcmFtZSgpOiBib29sZWFuO1xuICBuZWVkc1JlbmRlcigpOiBib29sZWFuO1xuICBnZXRSZW5kZXJNb2RlKCk6IFJlbmRlck1vZGU7XG4gIHNldFJlbmRlck1vZGUobW9kZTogUmVuZGVyTW9kZSk6IHZvaWQ7XG4gIHNldE9wdGlvbihvcHRpb25zOiBDaGFydGdwdU9wdGlvbnMpOiB2b2lkO1xuICBzZXRab29tUmFuZ2Uoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHNvdXJjZT86IHVua25vd24pOiB2b2lkO1xuICBzZXRJbnRlcmFjdGlvblgoeDogbnVtYmVyIHwgbnVsbCwgc291cmNlPzogdW5rbm93bik6IHZvaWQ7XG4gIGdldEludGVyYWN0aW9uWCgpOiBudW1iZXIgfCBudWxsO1xuICBoaXRUZXN0KGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50KTogQ2hhcnRHUFVIaXRUZXN0UmVzdWx0IHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUge1xuICBDaGFydEdQVUNyZWF0ZUNvbnRleHQsXG4gIENoYXJ0R1BVQ3Jvc3NoYWlyTW92ZVBheWxvYWQsXG4gIENoYXJ0R1BVRGV2aWNlTG9zdFBheWxvYWQsXG4gIENoYXJ0R1BVRXZlbnRQYXlsb2FkLFxuICBDaGFydEdQVUhpdFRlc3RSZXN1bHQsXG4gIENoYXJ0R1BVSW5zdGFuY2UsXG4gIENoYXJ0U3luY09wdGlvbnMsXG4gIERhdGFQb2ludCxcbiAgT0hMQ0RhdGFQb2ludCxcbiAgUGlwZWxpbmVDYWNoZSxcbiAgUmVuZGVyTW9kZSxcbn07XG4iXX0=
@@ -1,64 +0,0 @@
1
- import { Directive, effect, input, output } from '@angular/core';
2
- import { connectCharts } from 'chartgpu';
3
- import * as i0 from "@angular/core";
4
- export class ChartgpuConnectChartsDirective {
5
- charts = input([], {
6
- alias: 'libChartgpuConnectCharts',
7
- });
8
- syncOptions = input();
9
- connectionError = output();
10
- ids = new WeakMap();
11
- nextId = 1;
12
- signature;
13
- constructor() {
14
- effect(onCleanup => {
15
- const charts = this.charts();
16
- const options = this.syncOptions();
17
- const optionsSignature = options
18
- ? `crosshair=${options.syncCrosshair ?? ''},zoom=${options.syncZoom ?? ''}`
19
- : '';
20
- const signature = `${charts.map(chart => {
21
- if (!chart) {
22
- return 'null';
23
- }
24
- let id = this.ids.get(chart);
25
- if (id === undefined) {
26
- id = this.nextId++;
27
- this.ids.set(chart, id);
28
- }
29
- return `${id}:${chart.disposed ? 1 : 0}`;
30
- }).join('|')}|${optionsSignature}`;
31
- if (signature === this.signature) {
32
- return;
33
- }
34
- this.signature = signature;
35
- if (charts.length === 0 || charts.some(chart => !chart || chart.disposed)) {
36
- return;
37
- }
38
- const resolved = [];
39
- for (const chart of charts) {
40
- if (!chart || chart.disposed) {
41
- return;
42
- }
43
- resolved.push(chart);
44
- }
45
- try {
46
- const disconnect = connectCharts(resolved, options);
47
- onCleanup(disconnect);
48
- }
49
- catch (cause) {
50
- this.connectionError.emit(cause instanceof Error ? cause : new Error(String(cause)));
51
- }
52
- });
53
- }
54
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuConnectChartsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
55
- 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 });
56
- }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuConnectChartsDirective, decorators: [{
58
- type: Directive,
59
- args: [{
60
- selector: '[libChartgpuConnectCharts]',
61
- standalone: true,
62
- }]
63
- }], ctorParameters: () => [] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC1jaGFydHMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhcnRncHUtYW5ndWxhci9zcmMvbGliL2Nvbm5lY3QtY2hhcnRzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBT3pDLE1BQU0sT0FBTyw4QkFBOEI7SUFDaEMsTUFBTSxHQUFHLEtBQUssQ0FBcUQsRUFBRSxFQUFFO1FBQzlFLEtBQUssRUFBRSwwQkFBMEI7S0FDbEMsQ0FBQyxDQUFDO0lBQ00sV0FBVyxHQUFHLEtBQUssRUFBZ0MsQ0FBQztJQUNwRCxlQUFlLEdBQUcsTUFBTSxFQUFTLENBQUM7SUFFMUIsR0FBRyxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO0lBQzdDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxTQUFTLENBQXFCO0lBRXRDO1FBQ0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPO2dCQUM5QixDQUFDLENBQUMsYUFBYSxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsU0FBUyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRTtnQkFDM0UsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE1BQU0sU0FBUyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDO2dCQUVELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDckIsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO2dCQUNELE9BQU8sR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUVuQyxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFFM0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFFLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQXVCLEVBQUUsQ0FBQztZQUN4QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDN0IsT0FBTztnQkFDVCxDQUFDO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUVELElBQUksQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNwRCxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXZEVSw4QkFBOEI7NEZBQTlCLDhCQUE4Qjs7NEZBQTlCLDhCQUE4QjtrQkFKMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29ubmVjdENoYXJ0cyB9IGZyb20gJ2NoYXJ0Z3B1JztcbmltcG9ydCB0eXBlIHsgQ2hhcnRHUFVJbnN0YW5jZSwgQ2hhcnRTeW5jT3B0aW9ucyB9IGZyb20gJ2NoYXJ0Z3B1JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2xpYkNoYXJ0Z3B1Q29ubmVjdENoYXJ0c10nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydGdwdUNvbm5lY3RDaGFydHNEaXJlY3RpdmUge1xuICByZWFkb25seSBjaGFydHMgPSBpbnB1dDxSZWFkb25seUFycmF5PENoYXJ0R1BVSW5zdGFuY2UgfCBudWxsIHwgdW5kZWZpbmVkPj4oW10sIHtcbiAgICBhbGlhczogJ2xpYkNoYXJ0Z3B1Q29ubmVjdENoYXJ0cycsXG4gIH0pO1xuICByZWFkb25seSBzeW5jT3B0aW9ucyA9IGlucHV0PENoYXJ0U3luY09wdGlvbnMgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25FcnJvciA9IG91dHB1dDxFcnJvcj4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlkcyA9IG5ldyBXZWFrTWFwPG9iamVjdCwgbnVtYmVyPigpO1xuICBwcml2YXRlIG5leHRJZCA9IDE7XG4gIHByaXZhdGUgc2lnbmF0dXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KG9uQ2xlYW51cCA9PiB7XG4gICAgICBjb25zdCBjaGFydHMgPSB0aGlzLmNoYXJ0cygpO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuc3luY09wdGlvbnMoKTtcbiAgICAgIGNvbnN0IG9wdGlvbnNTaWduYXR1cmUgPSBvcHRpb25zXG4gICAgICAgID8gYGNyb3NzaGFpcj0ke29wdGlvbnMuc3luY0Nyb3NzaGFpciA/PyAnJ30sem9vbT0ke29wdGlvbnMuc3luY1pvb20gPz8gJyd9YFxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYCR7Y2hhcnRzLm1hcChjaGFydCA9PiB7XG4gICAgICAgIGlmICghY2hhcnQpIHtcbiAgICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlkID0gdGhpcy5pZHMuZ2V0KGNoYXJ0KTtcbiAgICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZCA9IHRoaXMubmV4dElkKys7XG4gICAgICAgICAgdGhpcy5pZHMuc2V0KGNoYXJ0LCBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2lkfToke2NoYXJ0LmRpc3Bvc2VkID8gMSA6IDB9YDtcbiAgICAgIH0pLmpvaW4oJ3wnKX18JHtvcHRpb25zU2lnbmF0dXJlfWA7XG5cbiAgICAgIGlmIChzaWduYXR1cmUgPT09IHRoaXMuc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuXG4gICAgICBpZiAoY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuc29tZShjaGFydCA9PiAhY2hhcnQgfHwgY2hhcnQuZGlzcG9zZWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzb2x2ZWQ6IENoYXJ0R1BVSW5zdGFuY2VbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjaGFydCBvZiBjaGFydHMpIHtcbiAgICAgICAgaWYgKCFjaGFydCB8fCBjaGFydC5kaXNwb3NlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlZC5wdXNoKGNoYXJ0KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGlzY29ubmVjdCA9IGNvbm5lY3RDaGFydHMocmVzb2x2ZWQsIG9wdGlvbnMpO1xuICAgICAgICBvbkNsZWFudXAoZGlzY29ubmVjdCk7XG4gICAgICB9IGNhdGNoIChjYXVzZTogdW5rbm93bikge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25FcnJvci5lbWl0KGNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVzZSA6IG5ldyBFcnJvcihTdHJpbmcoY2F1c2UpKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +0,0 @@
1
- import { makeEnvironmentProviders } from '@angular/core';
2
- import { ChartgpuGPUContextService } from './gpu-context.service';
3
- export function provideChartGpuContext() {
4
- return makeEnvironmentProviders([ChartgpuGPUContextService]);
5
- }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3B1LWNvbnRleHQucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGFydGdwdS1hbmd1bGFyL3NyYy9saWIvZ3B1LWNvbnRleHQucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFydGdwdUdQVUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9ncHUtY29udGV4dC5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVDaGFydEdwdUNvbnRleHQoKSB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW0NoYXJ0Z3B1R1BVQ29udGV4dFNlcnZpY2VdKTtcbn0iXX0=
@@ -1,78 +0,0 @@
1
- import { Injectable, computed, signal } from '@angular/core';
2
- import { createPipelineCache } from 'chartgpu';
3
- import * as i0 from "@angular/core";
4
- const INITIAL_STATE = {
5
- adapter: null,
6
- device: null,
7
- pipelineCache: null,
8
- error: null,
9
- isReady: false,
10
- };
11
- /**
12
- * Creates one shared WebGPU context and pipeline cache for charts in a dashboard.
13
- * The device is intentionally not destroyed with the service so charts can share it
14
- * for the lifetime of the application.
15
- */
16
- export class ChartgpuGPUContextService {
17
- state = signal(INITIAL_STATE);
18
- context = computed(() => {
19
- const state = this.state();
20
- if (!state.adapter || !state.device || !state.pipelineCache) {
21
- return null;
22
- }
23
- return {
24
- adapter: state.adapter,
25
- device: state.device,
26
- pipelineCache: state.pipelineCache,
27
- };
28
- });
29
- initialization;
30
- initialize() {
31
- if (!this.initialization) {
32
- this.initialization = this.createContext();
33
- }
34
- return this.initialization;
35
- }
36
- async createContext() {
37
- try {
38
- if (typeof navigator === 'undefined' || !('gpu' in navigator)) {
39
- throw new Error('WebGPU not supported in this browser');
40
- }
41
- const gpu = navigator.gpu;
42
- if (!gpu) {
43
- throw new Error('WebGPU not supported in this browser');
44
- }
45
- const adapter = await gpu.requestAdapter({ powerPreference: 'high-performance' });
46
- if (!adapter) {
47
- const error = new Error('WebGPU is not available. No compatible GPUAdapter was found.');
48
- const state = { ...INITIAL_STATE, error };
49
- this.state.set(state);
50
- return state;
51
- }
52
- const device = await adapter.requestDevice();
53
- const pipelineCache = createPipelineCache(device);
54
- const state = {
55
- adapter,
56
- device,
57
- pipelineCache,
58
- error: null,
59
- isReady: true,
60
- };
61
- this.state.set(state);
62
- return state;
63
- }
64
- catch (cause) {
65
- const error = cause instanceof Error ? cause : new Error(String(cause));
66
- const state = { ...INITIAL_STATE, error };
67
- this.state.set(state);
68
- return state;
69
- }
70
- }
71
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuGPUContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
72
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuGPUContextService, providedIn: 'root' });
73
- }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChartgpuGPUContextService, decorators: [{
75
- type: Injectable,
76
- args: [{ providedIn: 'root' }]
77
- }] });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3B1LWNvbnRleHQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXJ0Z3B1LWFuZ3VsYXIvc3JjL2xpYi9ncHUtY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBSS9DLE1BQU0sYUFBYSxHQUE0QjtJQUM3QyxPQUFPLEVBQUUsSUFBSTtJQUNiLE1BQU0sRUFBRSxJQUFJO0lBQ1osYUFBYSxFQUFFLElBQUk7SUFDbkIsS0FBSyxFQUFFLElBQUk7SUFDWCxPQUFPLEVBQUUsS0FBSztDQUNmLENBQUM7QUFFRjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLHlCQUF5QjtJQUMzQixLQUFLLEdBQUcsTUFBTSxDQUEwQixhQUFhLENBQUMsQ0FBQztJQUN2RCxPQUFPLEdBQUcsUUFBUSxDQUErQixHQUFHLEVBQUU7UUFDN0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7U0FDbkMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUssY0FBYyxDQUFvQztJQUUxRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYTtRQUN6QixJQUFJLENBQUM7WUFDSCxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsTUFBTSxHQUFHLEdBQUksU0FNWCxDQUFDLEdBQUcsQ0FBQztZQUNQLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7Z0JBQ3hGLE1BQU0sS0FBSyxHQUE0QixFQUFFLEdBQUcsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0MsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsTUFBTSxLQUFLLEdBQTRCO2dCQUNyQyxPQUFPO2dCQUNQLE1BQU07Z0JBQ04sYUFBYTtnQkFDYixLQUFLLEVBQUUsSUFBSTtnQkFDWCxPQUFPLEVBQUUsSUFBSTthQUNkLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sS0FBSyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDeEUsTUFBTSxLQUFLLEdBQTRCLEVBQUUsR0FBRyxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQzt3R0FsRVUseUJBQXlCOzRHQUF6Qix5QkFBeUIsY0FEWixNQUFNOzs0RkFDbkIseUJBQXlCO2tCQURyQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGNvbXB1dGVkLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVBpcGVsaW5lQ2FjaGUgfSBmcm9tICdjaGFydGdwdSc7XG5pbXBvcnQgdHlwZSB7IENoYXJ0R1BVQ3JlYXRlQ29udGV4dCB9IGZyb20gJ2NoYXJ0Z3B1JztcbmltcG9ydCB0eXBlIHsgQ2hhcnRncHVHUFVDb250ZXh0U3RhdGUgfSBmcm9tICcuL2NoYXJ0Z3B1LWFuZ3VsYXIudHlwZXMnO1xuXG5jb25zdCBJTklUSUFMX1NUQVRFOiBDaGFydGdwdUdQVUNvbnRleHRTdGF0ZSA9IHtcbiAgYWRhcHRlcjogbnVsbCxcbiAgZGV2aWNlOiBudWxsLFxuICBwaXBlbGluZUNhY2hlOiBudWxsLFxuICBlcnJvcjogbnVsbCxcbiAgaXNSZWFkeTogZmFsc2UsXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHNoYXJlZCBXZWJHUFUgY29udGV4dCBhbmQgcGlwZWxpbmUgY2FjaGUgZm9yIGNoYXJ0cyBpbiBhIGRhc2hib2FyZC5cbiAqIFRoZSBkZXZpY2UgaXMgaW50ZW50aW9uYWxseSBub3QgZGVzdHJveWVkIHdpdGggdGhlIHNlcnZpY2Ugc28gY2hhcnRzIGNhbiBzaGFyZSBpdFxuICogZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ2hhcnRncHVHUFVDb250ZXh0U2VydmljZSB7XG4gIHJlYWRvbmx5IHN0YXRlID0gc2lnbmFsPENoYXJ0Z3B1R1BVQ29udGV4dFN0YXRlPihJTklUSUFMX1NUQVRFKTtcbiAgcmVhZG9ubHkgY29udGV4dCA9IGNvbXB1dGVkPENoYXJ0R1BVQ3JlYXRlQ29udGV4dCB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcbiAgICBpZiAoIXN0YXRlLmFkYXB0ZXIgfHwgIXN0YXRlLmRldmljZSB8fCAhc3RhdGUucGlwZWxpbmVDYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkYXB0ZXI6IHN0YXRlLmFkYXB0ZXIsXG4gICAgICBkZXZpY2U6IHN0YXRlLmRldmljZSxcbiAgICAgIHBpcGVsaW5lQ2FjaGU6IHN0YXRlLnBpcGVsaW5lQ2FjaGUsXG4gICAgfTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXphdGlvbj86IFByb21pc2U8Q2hhcnRncHVHUFVDb250ZXh0U3RhdGU+O1xuXG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTxDaGFydGdwdUdQVUNvbnRleHRTdGF0ZT4ge1xuICAgIGlmICghdGhpcy5pbml0aWFsaXphdGlvbikge1xuICAgICAgdGhpcy5pbml0aWFsaXphdGlvbiA9IHRoaXMuY3JlYXRlQ29udGV4dCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlQ29udGV4dCgpOiBQcm9taXNlPENoYXJ0Z3B1R1BVQ29udGV4dFN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyB8fCAhKCdncHUnIGluIG5hdmlnYXRvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJHUFUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3B1ID0gKG5hdmlnYXRvciBhcyBOYXZpZ2F0b3IgJiB7XG4gICAgICAgIGdwdT86IHtcbiAgICAgICAgICByZXF1ZXN0QWRhcHRlcihvcHRpb25zOiB7XG4gICAgICAgICAgICBwb3dlclByZWZlcmVuY2U6ICdoaWdoLXBlcmZvcm1hbmNlJztcbiAgICAgICAgICB9KTogUHJvbWlzZTxDaGFydEdQVUNyZWF0ZUNvbnRleHRbJ2FkYXB0ZXInXSB8IG51bGw+O1xuICAgICAgICB9O1xuICAgICAgfSkuZ3B1O1xuICAgICAgaWYgKCFncHUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJHUFUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IGdwdS5yZXF1ZXN0QWRhcHRlcih7IHBvd2VyUHJlZmVyZW5jZTogJ2hpZ2gtcGVyZm9ybWFuY2UnIH0pO1xuICAgICAgaWYgKCFhZGFwdGVyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdXZWJHUFUgaXMgbm90IGF2YWlsYWJsZS4gTm8gY29tcGF0aWJsZSBHUFVBZGFwdGVyIHdhcyBmb3VuZC4nKTtcbiAgICAgICAgY29uc3Qgc3RhdGU6IENoYXJ0Z3B1R1BVQ29udGV4dFN0YXRlID0geyAuLi5JTklUSUFMX1NUQVRFLCBlcnJvciB9O1xuICAgICAgICB0aGlzLnN0YXRlLnNldChzdGF0ZSk7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7XG4gICAgICBjb25zdCBwaXBlbGluZUNhY2hlID0gY3JlYXRlUGlwZWxpbmVDYWNoZShkZXZpY2UpO1xuICAgICAgY29uc3Qgc3RhdGU6IENoYXJ0Z3B1R1BVQ29udGV4dFN0YXRlID0ge1xuICAgICAgICBhZGFwdGVyLFxuICAgICAgICBkZXZpY2UsXG4gICAgICAgIHBpcGVsaW5lQ2FjaGUsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBpc1JlYWR5OiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc3RhdGUuc2V0KHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9IGNhdGNoIChjYXVzZTogdW5rbm93bikge1xuICAgICAgY29uc3QgZXJyb3IgPSBjYXVzZSBpbnN0YW5jZW9mIEVycm9yID8gY2F1c2UgOiBuZXcgRXJyb3IoU3RyaW5nKGNhdXNlKSk7XG4gICAgICBjb25zdCBzdGF0ZTogQ2hhcnRncHVHUFVDb250ZXh0U3RhdGUgPSB7IC4uLklOSVRJQUxfU1RBVEUsIGVycm9yIH07XG4gICAgICB0aGlzLnN0YXRlLnNldChzdGF0ZSk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,6 +0,0 @@
1
- export * from './lib/chartgpu-angular.component';
2
- export * from './lib/chartgpu-angular.types';
3
- export * from './lib/connect-charts.directive';
4
- export * from './lib/gpu-context.provider';
5
- export * from './lib/gpu-context.service';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NoYXJ0Z3B1LWFuZ3VsYXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhcnRncHUtYW5ndWxhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhcnRncHUtYW5ndWxhci50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25uZWN0LWNoYXJ0cy5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3B1LWNvbnRleHQucHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3B1LWNvbnRleHQuc2VydmljZSc7XG4iXX0=