angular-three 2.0.0-beta.312 → 2.0.0-beta.314

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,10 +1,9 @@
1
1
  import '@nativescript/canvas-three';
2
2
  import { DOCUMENT } from '@angular/common';
3
- import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, Component, createEnvironmentInjector, DestroyRef, EnvironmentInjector, inject, Injector, input, NgZone, NO_ERRORS_SCHEMA, output, signal, untracked, viewChild, ViewContainerRef, } from '@angular/core';
3
+ import { booleanAttribute, ChangeDetectionStrategy, Component, createEnvironmentInjector, DestroyRef, EnvironmentInjector, inject, Injector, input, NgZone, NO_ERRORS_SCHEMA, output, untracked, viewChild, ViewContainerRef, } from '@angular/core';
4
4
  import { registerElement } from '@nativescript/angular';
5
5
  import { Canvas } from '@nativescript/canvas';
6
6
  import { injectCanvasRootInitializer, injectStore, makeDpr, NgtRoutedScene, provideNgtRenderer, provideStore, } from 'angular-three';
7
- import { injectAutoEffect } from 'ngxtension/auto-effect';
8
7
  import { WebGLRenderer } from 'three';
9
8
  import * as i0 from "@angular/core";
10
9
  registerElement('Canvas', () => Canvas);
@@ -45,53 +44,49 @@ export class NgtCanvasNative {
45
44
  this.destroyRef = inject(DestroyRef);
46
45
  this.zone = inject(NgZone);
47
46
  this.canvasViewContainerRef = viewChild.required('canvas', { read: ViewContainerRef });
48
- this.canvasElement = signal(null);
49
- const autoEffect = injectAutoEffect();
50
- afterNextRender(() => {
51
- autoEffect(() => {
52
- const canvas = this.canvasElement();
53
- if (!canvas)
54
- return;
55
- const dpr = makeDpr(untracked(this.dpr), window);
56
- const canvasWidth = canvas.clientWidth * dpr;
57
- const canvasHeight = canvas.clientHeight * dpr;
58
- Object.assign(canvas, { width: canvasWidth, height: canvasHeight });
59
- const context = canvas.getContext('webgl2');
60
- const gl = new WebGLRenderer({
61
- context: context,
62
- powerPreference: 'high-performance',
63
- antialias: true,
64
- alpha: true,
65
- ...untracked(this.gl),
66
- });
67
- this.zone.runOutsideAngular(() => {
68
- this.configurator = this.initRoot(canvas);
69
- this.configurator.configure({
70
- gl,
71
- size: { width: canvasWidth, height: canvasHeight, top: 0, left: 0 },
72
- shadows: untracked(this.shadows),
73
- legacy: untracked(this.legacy),
74
- linear: untracked(this.linear),
75
- flat: untracked(this.flat),
76
- orthographic: untracked(this.orthographic),
77
- frameloop: untracked(this.frameloop),
78
- performance: untracked(this.performance),
79
- dpr: untracked(this.dpr),
80
- raycaster: untracked(this.raycaster),
81
- scene: untracked(this.scene),
82
- camera: untracked(this.camera),
83
- lookAt: untracked(this.lookAt),
84
- });
85
- untracked(this.noZoneRender.bind(this));
86
- });
87
- });
88
- });
89
47
  this.destroyRef.onDestroy(() => {
90
48
  this.glRef?.destroy();
91
49
  this.glEnvironmentInjector?.destroy();
92
50
  this.configurator?.destroy();
93
51
  });
94
52
  }
53
+ onReady(event) {
54
+ const canvas = event.object;
55
+ const dpr = makeDpr(untracked(this.dpr), window);
56
+ const canvasWidth = canvas.clientWidth * dpr;
57
+ const canvasHeight = canvas.clientHeight * dpr;
58
+ Object.assign(canvas, { width: canvasWidth, height: canvasHeight });
59
+ const context = canvas.getContext('webgl2');
60
+ const gl = new WebGLRenderer({
61
+ canvas,
62
+ context: context,
63
+ powerPreference: 'high-performance',
64
+ antialias: true,
65
+ alpha: true,
66
+ ...untracked(this.gl),
67
+ });
68
+ gl.setSize(canvasWidth, canvasHeight);
69
+ this.zone.runOutsideAngular(() => {
70
+ this.configurator = this.initRoot(canvas);
71
+ this.configurator.configure({
72
+ gl,
73
+ size: { width: canvasWidth, height: canvasHeight, top: 0, left: 0 },
74
+ shadows: untracked(this.shadows),
75
+ legacy: untracked(this.legacy),
76
+ linear: untracked(this.linear),
77
+ flat: untracked(this.flat),
78
+ orthographic: untracked(this.orthographic),
79
+ frameloop: untracked(this.frameloop),
80
+ performance: untracked(this.performance),
81
+ dpr: untracked(this.dpr),
82
+ raycaster: untracked(this.raycaster),
83
+ scene: untracked(this.scene),
84
+ camera: untracked(this.camera),
85
+ lookAt: untracked(this.lookAt),
86
+ });
87
+ untracked(this.noZoneRender.bind(this));
88
+ });
89
+ }
95
90
  noZoneRender() {
96
91
  // NOTE: destroy previous instances if existed
97
92
  this.glEnvironmentInjector?.destroy();
@@ -110,7 +105,7 @@ export class NgtCanvasNative {
110
105
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtCanvasNative, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
111
106
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtCanvasNative, isStandalone: true, selector: "NgtCanvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null }, gl: { classPropertyName: "gl", publicName: "gl", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shadows: { classPropertyName: "shadows", publicName: "shadows", isSignal: true, isRequired: false, transformFunction: null }, legacy: { classPropertyName: "legacy", publicName: "legacy", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null }, orthographic: { classPropertyName: "orthographic", publicName: "orthographic", isSignal: true, isRequired: false, transformFunction: null }, frameloop: { classPropertyName: "frameloop", publicName: "frameloop", isSignal: true, isRequired: false, transformFunction: null }, performance: { classPropertyName: "performance", publicName: "performance", isSignal: true, isRequired: false, transformFunction: null }, dpr: { classPropertyName: "dpr", publicName: "dpr", isSignal: true, isRequired: false, transformFunction: null }, raycaster: { classPropertyName: "raycaster", publicName: "raycaster", isSignal: true, isRequired: false, transformFunction: null }, scene: { classPropertyName: "scene", publicName: "scene", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, lookAt: { classPropertyName: "lookAt", publicName: "lookAt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { created: "created" }, providers: [{ provide: DOCUMENT, useValue: document }, provideStore()], viewQueries: [{ propertyName: "canvasViewContainerRef", first: true, predicate: ["canvas"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
112
107
  <GridLayout>
113
- <Canvas #canvas style="width: 100%; height: auto" (ready)="canvasElement.set($any($event).object)"></Canvas>
108
+ <Canvas #canvas style="width: 100%; height: auto" (ready)="onReady($event)"></Canvas>
114
109
  </GridLayout>
115
110
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
116
111
  }
@@ -121,7 +116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
121
116
  standalone: true,
122
117
  template: `
123
118
  <GridLayout>
124
- <Canvas #canvas style="width: 100%; height: auto" (ready)="canvasElement.set($any($event).object)"></Canvas>
119
+ <Canvas #canvas style="width: 100%; height: auto" (ready)="onReady($event)"></Canvas>
125
120
  </GridLayout>
126
121
  `,
127
122
  providers: [{ provide: DOCUMENT, useValue: document }, provideStore()],
@@ -129,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
129
124
  changeDetection: ChangeDetectionStrategy.OnPush,
130
125
  }]
131
126
  }], ctorParameters: () => [] });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL25hdGl2ZXNjcmlwdC9zcmMvbGliL2NhbnZhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sZUFBZSxFQUNmLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUVULHlCQUF5QixFQUN6QixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLE1BQU0sRUFFTixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFDTiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLE9BQU8sRUFNUCxjQUFjLEVBR2Qsa0JBQWtCLEVBQ2xCLFlBQVksR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQTZCLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFakUsZUFBZSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQWN4QyxNQUFNLE9BQU8sZUFBZTtJQTJDM0I7UUExQ0EsZUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQWtDO1lBQzVELFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNwQixJQUFJLEtBQUssS0FBSyxRQUFRO29CQUFFLE9BQU8sY0FBYyxD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SUFBSSxDQUFDLG1CQUFtQixDQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0YsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUMvQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QyxDQUFDOzhHQXBIVyxlQUFlO2tHQUFmLGVBQWUsdTdEQUpoQixDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsdUhBdUNBLGdCQUFnQiw2Q0E1QzVFOzs7O0VBSVQ7OzJGQUtXLGVBQWU7a0JBWjNCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDO29CQUN0RSxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDM0IsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdAbmF0aXZlc2NyaXB0L2NhbnZhcy10aHJlZSc7XG5cbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q29tcG9uZW50UmVmLFxuXHRjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yLFxuXHREZXN0cm95UmVmLFxuXHRFbnZpcm9ubWVudEluamVjdG9yLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHRpbnB1dCxcblx0Tmdab25lLFxuXHROT19FUlJPUlNfU0NIRU1BLFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcblx0VHlwZSxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG5cdFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVnaXN0ZXJFbGVtZW50IH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC9hbmd1bGFyJztcbmltcG9ydCB7IENhbnZhcyB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvY2FudmFzJztcbmltcG9ydCB7XG5cdGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcixcblx0aW5qZWN0U3RvcmUsXG5cdG1ha2VEcHIsXG5cdE5ndENhbnZhc0NvbmZpZ3VyYXRvcixcblx0Tmd0Q2FudmFzT3B0aW9ucyxcblx0Tmd0RHByLFxuXHROZ3RHTE9wdGlvbnMsXG5cdE5ndFBlcmZvcm1hbmNlLFxuXHROZ3RSb3V0ZWRTY2VuZSxcblx0Tmd0U2l6ZSxcblx0Tmd0U3RhdGUsXG5cdHByb3ZpZGVOZ3RSZW5kZXJlcixcblx0cHJvdmlkZVN0b3JlLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IFJheWNhc3RlciwgU2NlbmUsIFZlY3RvcjMsIFdlYkdMUmVuZGVyZXIgfSBmcm9tICd0aHJlZSc7XG5cbnJlZ2lzdGVyRWxlbWVudCgnQ2FudmFzJywgKCkgPT4gQ2FudmFzKTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnTmd0Q2FudmFzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8R3JpZExheW91dD5cblx0XHRcdDxDYW52YXMgI2NhbnZhcyBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG9cIiAocmVhZHkpPVwiY2FudmFzRWxlbWVudC5zZXQoJGFueSgkZXZlbnQpLm9iamVjdClcIj48L0NhbnZhcz5cblx0XHQ8L0dyaWRMYXlvdXQ+XG5cdGAsXG5cdHByb3ZpZGVyczogW3sgcHJvdmlkZTogRE9DVU1FTlQsIHVzZVZhbHVlOiBkb2N1bWVudCB9LCBwcm92aWRlU3RvcmUoKV0sXG5cdHNjaGVtYXM6IFtOT19FUlJPUlNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndENhbnZhc05hdGl2ZSB7XG5cdHNjZW5lR3JhcGggPSBpbnB1dC5yZXF1aXJlZDxUeXBlPGFueT4sIFR5cGU8YW55PiB8ICdyb3V0ZWQnPih7XG5cdFx0dHJhbnNmb3JtOiAodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSA9PT0gJ3JvdXRlZCcpIHJldHVybiBOZ3RSb3V0ZWRTY2VuZTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHR9KTtcblx0Z2wgPSBpbnB1dDxOZ3RHTE9wdGlvbnM+KCk7XG5cdHNpemUgPSBpbnB1dDxOZ3RTaXplPigpO1xuXHRzaGFkb3dzID0gaW5wdXQoZmFsc2UsIHtcblx0XHR0cmFuc2Zvcm06ICh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlID09PSAnJykgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlIGFzIE5vbk51bGxhYmxlPE5ndENhbnZhc09wdGlvbnNbJ3NoYWRvd3MnXT47XG5cdFx0fSxcblx0fSk7XG5cdGxlZ2FjeSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0bGluZWFyID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXHRmbGF0ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXHRvcnRob2dyYXBoaWMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cdGZyYW1lbG9vcCA9IGlucHV0PE5vbk51bGxhYmxlPE5ndENhbnZhc09wdGlvbnNbJ2ZyYW1lbG9vcCddPj4oJ2Fsd2F5cycpO1xuXHRwZXJmb3JtYW5jZSA9IGlucHV0PFBhcnRpYWw8T21pdDxOZ3RQZXJmb3JtYW5jZSwgJ3JlZ3Jlc3MnPj4+KCk7XG5cdGRwciA9IGlucHV0PE5ndERwcj4oWzEsIDJdKTtcblx0cmF5Y2FzdGVyID0gaW5wdXQ8UGFydGlhbDxSYXljYXN0ZXI+PigpO1xuXHRzY2VuZSA9IGlucHV0PFNjZW5lIHwgUGFydGlhbDxTY2VuZT4+KCk7XG5cdGNhbWVyYSA9IGlucHV0PE5vbk51bGxhYmxlPE5ndENhbnZhc09wdGlvbnNbJ2NhbWVyYSddPj4oKTtcblx0bG9va0F0ID0gaW5wdXQ8VmVjdG9yMyB8IFBhcmFtZXRlcnM8VmVjdG9yM1snc2V0J10+PigpO1xuXHRjcmVhdGVkID0gb3V0cHV0PE5ndFN0YXRlPigpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGluaXRSb290ID0gaW5qZWN0Q2FudmFzUm9vdEluaXRpYWxpemVyKCk7XG5cdHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXHRwcml2YXRlIGVudmlyb25tZW50SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cdHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblx0cHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cblx0cHJpdmF0ZSBjYW52YXNWaWV3Q29udGFpbmVyUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkKCdjYW52YXMnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSk7XG5cblx0cHJpdmF0ZSBjb25maWd1cmF0b3I/OiBOZ3RDYW52YXNDb25maWd1cmF0b3I7XG5cdHByaXZhdGUgZ2xFbnZpcm9ubWVudEluamVjdG9yPzogRW52aXJvbm1lbnRJbmplY3Rvcjtcblx0cHJpdmF0ZSBnbFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xuXG5cdGNhbnZhc0VsZW1lbnQgPSBzaWduYWw8Q2FudmFzIHwgbnVsbD4obnVsbCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgY2FudmFzID0gdGhpcy5jYW52YXNFbGVtZW50KCk7XG5cdFx0XHRcdGlmICghY2FudmFzKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgZHByID0gbWFrZURwcih1bnRyYWNrZWQodGhpcy5kcHIpLCB3aW5kb3cpO1xuXHRcdFx0XHRjb25zdCBjYW52YXNXaWR0aCA9IGNhbnZhcy5jbGllbnRXaWR0aCAqIGRwcjtcblx0XHRcdFx0Y29uc3QgY2FudmFzSGVpZ2h0ID0gY2FudmFzLmNsaWVudEhlaWdodCAqIGRwcjtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihjYW52YXMsIHsgd2lkdGg6IGNhbnZhc1dpZHRoLCBoZWlnaHQ6IGNhbnZhc0hlaWdodCB9KTtcblxuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsMicpO1xuXHRcdFx0XHRjb25zdCBnbCA9IG5ldyBXZWJHTFJlbmRlcmVyKHtcblx0XHRcdFx0XHRjb250ZXh0OiBjb250ZXh0IGFzIHVua25vd24gYXMgV2ViR0xSZW5kZXJpbmdDb250ZXh0LFxuXHRcdFx0XHRcdHBvd2VyUHJlZmVyZW5jZTogJ2hpZ2gtcGVyZm9ybWFuY2UnLFxuXHRcdFx0XHRcdGFudGlhbGlhczogdHJ1ZSxcblx0XHRcdFx0XHRhbHBoYTogdHJ1ZSxcblx0XHRcdFx0XHQuLi51bnRyYWNrZWQodGhpcy5nbCksXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5jb25maWd1cmF0b3IgPSB0aGlzLmluaXRSb290KGNhbnZhcyBhcyB1bmtub3duIGFzIEhUTUxDYW52YXNFbGVtZW50KTtcblx0XHRcdFx0XHR0aGlzLmNvbmZpZ3VyYXRvci5jb25maWd1cmUoe1xuXHRcdFx0XHRcdFx0Z2wsXG5cdFx0XHRcdFx0XHRzaXplOiB7IHdpZHRoOiBjYW52YXNXaWR0aCwgaGVpZ2h0OiBjYW52YXNIZWlnaHQsIHRvcDogMCwgbGVmdDogMCB9LFxuXHRcdFx0XHRcdFx0c2hhZG93czogdW50cmFja2VkKHRoaXMuc2hhZG93cyksXG5cdFx0XHRcdFx0XHRsZWdhY3k6IHVudHJhY2tlZCh0aGlzLmxlZ2FjeSksXG5cdFx0XHRcdFx0XHRsaW5lYXI6IHVudHJhY2tlZCh0aGlzLmxpbmVhciksXG5cdFx0XHRcdFx0XHRmbGF0OiB1bnRyYWNrZWQodGhpcy5mbGF0KSxcblx0XHRcdFx0XHRcdG9ydGhvZ3JhcGhpYzogdW50cmFja2VkKHRoaXMub3J0aG9ncmFwaGljKSxcblx0XHRcdFx0XHRcdGZyYW1lbG9vcDogdW50cmFja2VkKHRoaXMuZnJhbWVsb29wKSxcblx0XHRcdFx0XHRcdHBlcmZvcm1hbmNlOiB1bnRyYWNrZWQodGhpcy5wZXJmb3JtYW5jZSksXG5cdFx0XHRcdFx0XHRkcHI6IHVudHJhY2tlZCh0aGlzLmRwciksXG5cdFx0XHRcdFx0XHRyYXljYXN0ZXI6IHVudHJhY2tlZCh0aGlzLnJheWNhc3RlciksXG5cdFx0XHRcdFx0XHRzY2VuZTogdW50cmFja2VkKHRoaXMuc2NlbmUpLFxuXHRcdFx0XHRcdFx0Y2FtZXJhOiB1bnRyYWNrZWQodGhpcy5jYW1lcmEpLFxuXHRcdFx0XHRcdFx0bG9va0F0OiB1bnRyYWNrZWQodGhpcy5sb29rQXQpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLm5vWm9uZVJlbmRlci5iaW5kKHRoaXMpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdFx0dGhpcy5nbFJlZj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3I/LmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuY29uZmlndXJhdG9yPy5kZXN0cm95KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIG5vWm9uZVJlbmRlcigpIHtcblx0XHQvLyBOT1RFOiBkZXN0cm95IHByZXZpb3VzIGluc3RhbmNlcyBpZiBleGlzdGVkXG5cdFx0dGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3I/LmRlc3Ryb3koKTtcblx0XHR0aGlzLmdsUmVmPy5kZXN0cm95KCk7XG5cblx0XHQvLyBOT1RFOiBGbGFnIHRoZSBjYW52YXMgYWN0aXZlLCByZW5kZXJpbmcgd2lsbCBub3cgYmVnaW5cblx0XHR0aGlzLnN0b3JlLnVwZGF0ZSgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IHRydWUgfSB9KSk7XG5cblx0XHQvLyBlbWl0IGNyZWF0ZWQgZXZlbnQgaWYgb2JzZXJ2ZWRcblx0XHR0aGlzLmNyZWF0ZWQuZW1pdCh0aGlzLnN0b3JlLnNuYXBzaG90KTtcblxuXHRcdHRoaXMuZ2xFbnZpcm9ubWVudEluamVjdG9yID0gY3JlYXRlRW52aXJvbm1lbnRJbmplY3Rvcihcblx0XHRcdFt7IHByb3ZpZGU6IERPQ1VNRU5ULCB1c2VWYWx1ZTogZG9jdW1lbnQgfSwgcHJvdmlkZU5ndFJlbmRlcmVyKHRoaXMuc3RvcmUpXSxcblx0XHRcdHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcixcblx0XHQpO1xuXHRcdHRoaXMuZ2xSZWYgPSB1bnRyYWNrZWQodGhpcy5jYW52YXNWaWV3Q29udGFpbmVyUmVmKS5jcmVhdGVDb21wb25lbnQodW50cmFja2VkKHRoaXMuc2NlbmVHcmFwaCksIHtcblx0XHRcdGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZ2xFbnZpcm9ubWVudEluamVjdG9yLFxuXHRcdFx0aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsXG5cdFx0fSk7XG5cblx0XHR0aGlzLmdsUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblx0fVxufVxuIl19
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL25hdGl2ZXNjcmlwdC9zcmMvbGliL2NhbnZhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixTQUFTLEVBRVQseUJBQXlCLEVBQ3pCLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixNQUFNLEVBRU4sU0FBUyxFQUNULFNBQVMsRUFDVCxnQkFBZ0IsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQ04sMkJBQTJCLEVBQzNCLFdBQVcsRUFDWCxPQUFPLEVBTVAsY0FBYyxFQUdkLGtCQUFrQixFQUNsQixZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE2QixhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRWpFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFjeEMsTUFBTSxPQUFPLGVBQWU7SUF5QzNCO1FBeENBLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFrQztZQUM1RCxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxLQUFLLEtBQUssUUFBUTtvQkFBRSxPQUFPLGNBQWMsQ0FBQztnQkFDOUMsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO1NBQ0QsQ0FBQyxDQUFDO1FBQ0gsT0FBRSxHQUFH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Q3ZCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUMsQ0FBQzs4R0E5R1csZUFBZTtrR0FBZixlQUFlLHU3REFKaEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLHVIQXVDQSxnQkFBZ0IsNkNBNUM1RTs7OztFQUlUOzsyRkFLVyxlQUFlO2tCQVozQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxXQUFXO29CQUNyQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQztvQkFDdEUsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnQG5hdGl2ZXNjcmlwdC9jYW52YXMtdGhyZWUnO1xuXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRib29sZWFuQXR0cmlidXRlLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRDb21wb25lbnRSZWYsXG5cdGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IsXG5cdERlc3Ryb3lSZWYsXG5cdEVudmlyb25tZW50SW5qZWN0b3IsXG5cdGluamVjdCxcblx0SW5qZWN0b3IsXG5cdGlucHV0LFxuXHROZ1pvbmUsXG5cdE5PX0VSUk9SU19TQ0hFTUEsXG5cdG91dHB1dCxcblx0VHlwZSxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG5cdFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVnaXN0ZXJFbGVtZW50IH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC9hbmd1bGFyJztcbmltcG9ydCB7IENhbnZhcyB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvY2FudmFzJztcbmltcG9ydCB7XG5cdGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcixcblx0aW5qZWN0U3RvcmUsXG5cdG1ha2VEcHIsXG5cdE5ndENhbnZhc0NvbmZpZ3VyYXRvcixcblx0Tmd0Q2FudmFzT3B0aW9ucyxcblx0Tmd0RHByLFxuXHROZ3RHTE9wdGlvbnMsXG5cdE5ndFBlcmZvcm1hbmNlLFxuXHROZ3RSb3V0ZWRTY2VuZSxcblx0Tmd0U2l6ZSxcblx0Tmd0U3RhdGUsXG5cdHByb3ZpZGVOZ3RSZW5kZXJlcixcblx0cHJvdmlkZVN0b3JlLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IFJheWNhc3RlciwgU2NlbmUsIFZlY3RvcjMsIFdlYkdMUmVuZGVyZXIgfSBmcm9tICd0aHJlZSc7XG5cbnJlZ2lzdGVyRWxlbWVudCgnQ2FudmFzJywgKCkgPT4gQ2FudmFzKTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnTmd0Q2FudmFzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8R3JpZExheW91dD5cblx0XHRcdDxDYW52YXMgI2NhbnZhcyBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG9cIiAocmVhZHkpPVwib25SZWFkeSgkZXZlbnQpXCI+PC9DYW52YXM+XG5cdFx0PC9HcmlkTGF5b3V0PlxuXHRgLFxuXHRwcm92aWRlcnM6IFt7IHByb3ZpZGU6IERPQ1VNRU5ULCB1c2VWYWx1ZTogZG9jdW1lbnQgfSwgcHJvdmlkZVN0b3JlKCldLFxuXHRzY2hlbWFzOiBbTk9fRVJST1JTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RDYW52YXNOYXRpdmUge1xuXHRzY2VuZUdyYXBoID0gaW5wdXQucmVxdWlyZWQ8VHlwZTxhbnk+LCBUeXBlPGFueT4gfCAncm91dGVkJz4oe1xuXHRcdHRyYW5zZm9ybTogKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUgPT09ICdyb3V0ZWQnKSByZXR1cm4gTmd0Um91dGVkU2NlbmU7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0fSk7XG5cdGdsID0gaW5wdXQ8Tmd0R0xPcHRpb25zPigpO1xuXHRzaXplID0gaW5wdXQ8Tmd0U2l6ZT4oKTtcblx0c2hhZG93cyA9IGlucHV0KGZhbHNlLCB7XG5cdFx0dHJhbnNmb3JtOiAodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSA9PT0gJycpIHJldHVybiBib29sZWFuQXR0cmlidXRlKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZSBhcyBOb25OdWxsYWJsZTxOZ3RDYW52YXNPcHRpb25zWydzaGFkb3dzJ10+O1xuXHRcdH0sXG5cdH0pO1xuXHRsZWdhY3kgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cdGxpbmVhciA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0ZmxhdCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0b3J0aG9ncmFwaGljID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXHRmcmFtZWxvb3AgPSBpbnB1dDxOb25OdWxsYWJsZTxOZ3RDYW52YXNPcHRpb25zWydmcmFtZWxvb3AnXT4+KCdhbHdheXMnKTtcblx0cGVyZm9ybWFuY2UgPSBpbnB1dDxQYXJ0aWFsPE9taXQ8Tmd0UGVyZm9ybWFuY2UsICdyZWdyZXNzJz4+PigpO1xuXHRkcHIgPSBpbnB1dDxOZ3REcHI+KFsxLCAyXSk7XG5cdHJheWNhc3RlciA9IGlucHV0PFBhcnRpYWw8UmF5Y2FzdGVyPj4oKTtcblx0c2NlbmUgPSBpbnB1dDxTY2VuZSB8IFBhcnRpYWw8U2NlbmU+PigpO1xuXHRjYW1lcmEgPSBpbnB1dDxOb25OdWxsYWJsZTxOZ3RDYW52YXNPcHRpb25zWydjYW1lcmEnXT4+KCk7XG5cdGxvb2tBdCA9IGlucHV0PFZlY3RvcjMgfCBQYXJhbWV0ZXJzPFZlY3RvcjNbJ3NldCddPj4oKTtcblx0Y3JlYXRlZCA9IG91dHB1dDxOZ3RTdGF0ZT4oKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBpbml0Um9vdCA9IGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcigpO1xuXHRwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0cHJpdmF0ZSBlbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuXHRwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cdHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG5cdHByaXZhdGUgY2FudmFzVmlld0NvbnRhaW5lclJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZCgnY2FudmFzJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pO1xuXG5cdHByaXZhdGUgY29uZmlndXJhdG9yPzogTmd0Q2FudmFzQ29uZmlndXJhdG9yO1xuXHRwcml2YXRlIGdsRW52aXJvbm1lbnRJbmplY3Rvcj86IEVudmlyb25tZW50SW5qZWN0b3I7XG5cdHByaXZhdGUgZ2xSZWY/OiBDb21wb25lbnRSZWY8YW55PjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcblx0XHRcdHRoaXMuZ2xSZWY/LmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuZ2xFbnZpcm9ubWVudEluamVjdG9yPy5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRvcj8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25SZWFkeShldmVudDogYW55KSB7XG5cdFx0Y29uc3QgY2FudmFzID0gZXZlbnQub2JqZWN0O1xuXHRcdGNvbnN0IGRwciA9IG1ha2VEcHIodW50cmFja2VkKHRoaXMuZHByKSwgd2luZG93KTtcblx0XHRjb25zdCBjYW52YXNXaWR0aCA9IGNhbnZhcy5jbGllbnRXaWR0aCAqIGRwcjtcblx0XHRjb25zdCBjYW52YXNIZWlnaHQgPSBjYW52YXMuY2xpZW50SGVpZ2h0ICogZHByO1xuXHRcdE9iamVjdC5hc3NpZ24oY2FudmFzLCB7IHdpZHRoOiBjYW52YXNXaWR0aCwgaGVpZ2h0OiBjYW52YXNIZWlnaHQgfSk7XG5cblx0XHRjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsMicpO1xuXHRcdGNvbnN0IGdsID0gbmV3IFdlYkdMUmVuZGVyZXIoe1xuXHRcdFx0Y2FudmFzLFxuXHRcdFx0Y29udGV4dDogY29udGV4dCBhcyB1bmtub3duIGFzIFdlYkdMUmVuZGVyaW5nQ29udGV4dCxcblx0XHRcdHBvd2VyUHJlZmVyZW5jZTogJ2hpZ2gtcGVyZm9ybWFuY2UnLFxuXHRcdFx0YW50aWFsaWFzOiB0cnVlLFxuXHRcdFx0YWxwaGE6IHRydWUsXG5cdFx0XHQuLi51bnRyYWNrZWQodGhpcy5nbCksXG5cdFx0fSk7XG5cdFx0Z2wuc2V0U2l6ZShjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTtcblxuXHRcdHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRvciA9IHRoaXMuaW5pdFJvb3QoY2FudmFzKTtcblx0XHRcdHRoaXMuY29uZmlndXJhdG9yLmNvbmZpZ3VyZSh7XG5cdFx0XHRcdGdsLFxuXHRcdFx0XHRzaXplOiB7IHdpZHRoOiBjYW52YXNXaWR0aCwgaGVpZ2h0OiBjYW52YXNIZWlnaHQsIHRvcDogMCwgbGVmdDogMCB9LFxuXHRcdFx0XHRzaGFkb3dzOiB1bnRyYWNrZWQodGhpcy5zaGFkb3dzKSxcblx0XHRcdFx0bGVnYWN5OiB1bnRyYWNrZWQodGhpcy5sZWdhY3kpLFxuXHRcdFx0XHRsaW5lYXI6IHVudHJhY2tlZCh0aGlzLmxpbmVhciksXG5cdFx0XHRcdGZsYXQ6IHVudHJhY2tlZCh0aGlzLmZsYXQpLFxuXHRcdFx0XHRvcnRob2dyYXBoaWM6IHVudHJhY2tlZCh0aGlzLm9ydGhvZ3JhcGhpYyksXG5cdFx0XHRcdGZyYW1lbG9vcDogdW50cmFja2VkKHRoaXMuZnJhbWVsb29wKSxcblx0XHRcdFx0cGVyZm9ybWFuY2U6IHVudHJhY2tlZCh0aGlzLnBlcmZvcm1hbmNlKSxcblx0XHRcdFx0ZHByOiB1bnRyYWNrZWQodGhpcy5kcHIpLFxuXHRcdFx0XHRyYXljYXN0ZXI6IHVudHJhY2tlZCh0aGlzLnJheWNhc3RlciksXG5cdFx0XHRcdHNjZW5lOiB1bnRyYWNrZWQodGhpcy5zY2VuZSksXG5cdFx0XHRcdGNhbWVyYTogdW50cmFja2VkKHRoaXMuY2FtZXJhKSxcblx0XHRcdFx0bG9va0F0OiB1bnRyYWNrZWQodGhpcy5sb29rQXQpLFxuXHRcdFx0fSk7XG5cdFx0XHR1bnRyYWNrZWQodGhpcy5ub1pvbmVSZW5kZXIuYmluZCh0aGlzKSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIG5vWm9uZVJlbmRlcigpIHtcblx0XHQvLyBOT1RFOiBkZXN0cm95IHByZXZpb3VzIGluc3RhbmNlcyBpZiBleGlzdGVkXG5cdFx0dGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3I/LmRlc3Ryb3koKTtcblx0XHR0aGlzLmdsUmVmPy5kZXN0cm95KCk7XG5cblx0XHQvLyBOT1RFOiBGbGFnIHRoZSBjYW52YXMgYWN0aXZlLCByZW5kZXJpbmcgd2lsbCBub3cgYmVnaW5cblx0XHR0aGlzLnN0b3JlLnVwZGF0ZSgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IHRydWUgfSB9KSk7XG5cblx0XHQvLyBlbWl0IGNyZWF0ZWQgZXZlbnQgaWYgb2JzZXJ2ZWRcblx0XHR0aGlzLmNyZWF0ZWQuZW1pdCh0aGlzLnN0b3JlLnNuYXBzaG90KTtcblxuXHRcdHRoaXMuZ2xFbnZpcm9ubWVudEluamVjdG9yID0gY3JlYXRlRW52aXJvbm1lbnRJbmplY3Rvcihcblx0XHRcdFt7IHByb3ZpZGU6IERPQ1VNRU5ULCB1c2VWYWx1ZTogZG9jdW1lbnQgfSwgcHJvdmlkZU5ndFJlbmRlcmVyKHRoaXMuc3RvcmUpXSxcblx0XHRcdHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcixcblx0XHQpO1xuXHRcdHRoaXMuZ2xSZWYgPSB1bnRyYWNrZWQodGhpcy5jYW52YXNWaWV3Q29udGFpbmVyUmVmKS5jcmVhdGVDb21wb25lbnQodW50cmFja2VkKHRoaXMuc2NlbmVHcmFwaCksIHtcblx0XHRcdGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZ2xFbnZpcm9ubWVudEluamVjdG9yLFxuXHRcdFx0aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsXG5cdFx0fSk7XG5cblx0XHR0aGlzLmdsUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblx0fVxufVxuIl19
@@ -1,11 +1,10 @@
1
1
  import '@nativescript/canvas-three';
2
2
  import { DOCUMENT } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { input, booleanAttribute, output, inject, Injector, EnvironmentInjector, DestroyRef, NgZone, viewChild, ViewContainerRef, signal, afterNextRender, untracked, createEnvironmentInjector, Component, NO_ERRORS_SCHEMA, ChangeDetectionStrategy } from '@angular/core';
4
+ import { input, booleanAttribute, output, inject, Injector, EnvironmentInjector, DestroyRef, NgZone, viewChild, ViewContainerRef, untracked, createEnvironmentInjector, Component, NO_ERRORS_SCHEMA, ChangeDetectionStrategy } from '@angular/core';
5
5
  import { registerElement } from '@nativescript/angular';
6
6
  import { Canvas } from '@nativescript/canvas';
7
7
  import { NgtRoutedScene, injectStore, injectCanvasRootInitializer, makeDpr, provideNgtRenderer, provideStore } from 'angular-three';
8
- import { injectAutoEffect } from 'ngxtension/auto-effect';
9
8
  import { WebGLRenderer } from 'three';
10
9
 
11
10
  registerElement('Canvas', () => Canvas);
@@ -46,53 +45,49 @@ class NgtCanvasNative {
46
45
  this.destroyRef = inject(DestroyRef);
47
46
  this.zone = inject(NgZone);
48
47
  this.canvasViewContainerRef = viewChild.required('canvas', { read: ViewContainerRef });
49
- this.canvasElement = signal(null);
50
- const autoEffect = injectAutoEffect();
51
- afterNextRender(() => {
52
- autoEffect(() => {
53
- const canvas = this.canvasElement();
54
- if (!canvas)
55
- return;
56
- const dpr = makeDpr(untracked(this.dpr), window);
57
- const canvasWidth = canvas.clientWidth * dpr;
58
- const canvasHeight = canvas.clientHeight * dpr;
59
- Object.assign(canvas, { width: canvasWidth, height: canvasHeight });
60
- const context = canvas.getContext('webgl2');
61
- const gl = new WebGLRenderer({
62
- context: context,
63
- powerPreference: 'high-performance',
64
- antialias: true,
65
- alpha: true,
66
- ...untracked(this.gl),
67
- });
68
- this.zone.runOutsideAngular(() => {
69
- this.configurator = this.initRoot(canvas);
70
- this.configurator.configure({
71
- gl,
72
- size: { width: canvasWidth, height: canvasHeight, top: 0, left: 0 },
73
- shadows: untracked(this.shadows),
74
- legacy: untracked(this.legacy),
75
- linear: untracked(this.linear),
76
- flat: untracked(this.flat),
77
- orthographic: untracked(this.orthographic),
78
- frameloop: untracked(this.frameloop),
79
- performance: untracked(this.performance),
80
- dpr: untracked(this.dpr),
81
- raycaster: untracked(this.raycaster),
82
- scene: untracked(this.scene),
83
- camera: untracked(this.camera),
84
- lookAt: untracked(this.lookAt),
85
- });
86
- untracked(this.noZoneRender.bind(this));
87
- });
88
- });
89
- });
90
48
  this.destroyRef.onDestroy(() => {
91
49
  this.glRef?.destroy();
92
50
  this.glEnvironmentInjector?.destroy();
93
51
  this.configurator?.destroy();
94
52
  });
95
53
  }
54
+ onReady(event) {
55
+ const canvas = event.object;
56
+ const dpr = makeDpr(untracked(this.dpr), window);
57
+ const canvasWidth = canvas.clientWidth * dpr;
58
+ const canvasHeight = canvas.clientHeight * dpr;
59
+ Object.assign(canvas, { width: canvasWidth, height: canvasHeight });
60
+ const context = canvas.getContext('webgl2');
61
+ const gl = new WebGLRenderer({
62
+ canvas,
63
+ context: context,
64
+ powerPreference: 'high-performance',
65
+ antialias: true,
66
+ alpha: true,
67
+ ...untracked(this.gl),
68
+ });
69
+ gl.setSize(canvasWidth, canvasHeight);
70
+ this.zone.runOutsideAngular(() => {
71
+ this.configurator = this.initRoot(canvas);
72
+ this.configurator.configure({
73
+ gl,
74
+ size: { width: canvasWidth, height: canvasHeight, top: 0, left: 0 },
75
+ shadows: untracked(this.shadows),
76
+ legacy: untracked(this.legacy),
77
+ linear: untracked(this.linear),
78
+ flat: untracked(this.flat),
79
+ orthographic: untracked(this.orthographic),
80
+ frameloop: untracked(this.frameloop),
81
+ performance: untracked(this.performance),
82
+ dpr: untracked(this.dpr),
83
+ raycaster: untracked(this.raycaster),
84
+ scene: untracked(this.scene),
85
+ camera: untracked(this.camera),
86
+ lookAt: untracked(this.lookAt),
87
+ });
88
+ untracked(this.noZoneRender.bind(this));
89
+ });
90
+ }
96
91
  noZoneRender() {
97
92
  // NOTE: destroy previous instances if existed
98
93
  this.glEnvironmentInjector?.destroy();
@@ -111,7 +106,7 @@ class NgtCanvasNative {
111
106
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtCanvasNative, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
112
107
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtCanvasNative, isStandalone: true, selector: "NgtCanvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null }, gl: { classPropertyName: "gl", publicName: "gl", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shadows: { classPropertyName: "shadows", publicName: "shadows", isSignal: true, isRequired: false, transformFunction: null }, legacy: { classPropertyName: "legacy", publicName: "legacy", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null }, orthographic: { classPropertyName: "orthographic", publicName: "orthographic", isSignal: true, isRequired: false, transformFunction: null }, frameloop: { classPropertyName: "frameloop", publicName: "frameloop", isSignal: true, isRequired: false, transformFunction: null }, performance: { classPropertyName: "performance", publicName: "performance", isSignal: true, isRequired: false, transformFunction: null }, dpr: { classPropertyName: "dpr", publicName: "dpr", isSignal: true, isRequired: false, transformFunction: null }, raycaster: { classPropertyName: "raycaster", publicName: "raycaster", isSignal: true, isRequired: false, transformFunction: null }, scene: { classPropertyName: "scene", publicName: "scene", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, lookAt: { classPropertyName: "lookAt", publicName: "lookAt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { created: "created" }, providers: [{ provide: DOCUMENT, useValue: document }, provideStore()], viewQueries: [{ propertyName: "canvasViewContainerRef", first: true, predicate: ["canvas"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
113
108
  <GridLayout>
114
- <Canvas #canvas style="width: 100%; height: auto" (ready)="canvasElement.set($any($event).object)"></Canvas>
109
+ <Canvas #canvas style="width: 100%; height: auto" (ready)="onReady($event)"></Canvas>
115
110
  </GridLayout>
116
111
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
117
112
  }
@@ -122,7 +117,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
122
117
  standalone: true,
123
118
  template: `
124
119
  <GridLayout>
125
- <Canvas #canvas style="width: 100%; height: auto" (ready)="canvasElement.set($any($event).object)"></Canvas>
120
+ <Canvas #canvas style="width: 100%; height: auto" (ready)="onReady($event)"></Canvas>
126
121
  </GridLayout>
127
122
  `,
128
123
  providers: [{ provide: DOCUMENT, useValue: document }, provideStore()],
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-nativescript.mjs","sources":["../../../../libs/core/nativescript/src/lib/canvas.ts","../../../../libs/core/nativescript/src/angular-three-nativescript.ts"],"sourcesContent":["import '@nativescript/canvas-three';\n\nimport { DOCUMENT } from '@angular/common';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tComponentRef,\n\tcreateEnvironmentInjector,\n\tDestroyRef,\n\tEnvironmentInjector,\n\tinject,\n\tInjector,\n\tinput,\n\tNgZone,\n\tNO_ERRORS_SCHEMA,\n\toutput,\n\tsignal,\n\tType,\n\tuntracked,\n\tviewChild,\n\tViewContainerRef,\n} from '@angular/core';\nimport { registerElement } from '@nativescript/angular';\nimport { Canvas } from '@nativescript/canvas';\nimport {\n\tinjectCanvasRootInitializer,\n\tinjectStore,\n\tmakeDpr,\n\tNgtCanvasConfigurator,\n\tNgtCanvasOptions,\n\tNgtDpr,\n\tNgtGLOptions,\n\tNgtPerformance,\n\tNgtRoutedScene,\n\tNgtSize,\n\tNgtState,\n\tprovideNgtRenderer,\n\tprovideStore,\n} from 'angular-three';\nimport { injectAutoEffect } from 'ngxtension/auto-effect';\nimport { Raycaster, Scene, Vector3, WebGLRenderer } from 'three';\n\nregisterElement('Canvas', () => Canvas);\n\n@Component({\n\tselector: 'NgtCanvas',\n\tstandalone: true,\n\ttemplate: `\n\t\t<GridLayout>\n\t\t\t<Canvas #canvas style=\"width: 100%; height: auto\" (ready)=\"canvasElement.set($any($event).object)\"></Canvas>\n\t\t</GridLayout>\n\t`,\n\tproviders: [{ provide: DOCUMENT, useValue: document }, provideStore()],\n\tschemas: [NO_ERRORS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtCanvasNative {\n\tsceneGraph = input.required<Type<any>, Type<any> | 'routed'>({\n\t\ttransform: (value) => {\n\t\t\tif (value === 'routed') return NgtRoutedScene;\n\t\t\treturn value;\n\t\t},\n\t});\n\tgl = input<NgtGLOptions>();\n\tsize = input<NgtSize>();\n\tshadows = input(false, {\n\t\ttransform: (value) => {\n\t\t\tif (value === '') return booleanAttribute(value);\n\t\t\treturn value as NonNullable<NgtCanvasOptions['shadows']>;\n\t\t},\n\t});\n\tlegacy = input(false, { transform: booleanAttribute });\n\tlinear = input(false, { transform: booleanAttribute });\n\tflat = input(false, { transform: booleanAttribute });\n\torthographic = input(false, { transform: booleanAttribute });\n\tframeloop = input<NonNullable<NgtCanvasOptions['frameloop']>>('always');\n\tperformance = input<Partial<Omit<NgtPerformance, 'regress'>>>();\n\tdpr = input<NgtDpr>([1, 2]);\n\traycaster = input<Partial<Raycaster>>();\n\tscene = input<Scene | Partial<Scene>>();\n\tcamera = input<NonNullable<NgtCanvasOptions['camera']>>();\n\tlookAt = input<Vector3 | Parameters<Vector3['set']>>();\n\tcreated = output<NgtState>();\n\n\tprivate store = injectStore();\n\tprivate initRoot = injectCanvasRootInitializer();\n\tprivate injector = inject(Injector);\n\tprivate environmentInjector = inject(EnvironmentInjector);\n\tprivate destroyRef = inject(DestroyRef);\n\tprivate zone = inject(NgZone);\n\n\tprivate canvasViewContainerRef = viewChild.required('canvas', { read: ViewContainerRef });\n\n\tprivate configurator?: NgtCanvasConfigurator;\n\tprivate glEnvironmentInjector?: EnvironmentInjector;\n\tprivate glRef?: ComponentRef<any>;\n\n\tcanvasElement = signal<Canvas | null>(null);\n\n\tconstructor() {\n\t\tconst autoEffect = injectAutoEffect();\n\n\t\tafterNextRender(() => {\n\t\t\tautoEffect(() => {\n\t\t\t\tconst canvas = this.canvasElement();\n\t\t\t\tif (!canvas) return;\n\n\t\t\t\tconst dpr = makeDpr(untracked(this.dpr), window);\n\t\t\t\tconst canvasWidth = canvas.clientWidth * dpr;\n\t\t\t\tconst canvasHeight = canvas.clientHeight * dpr;\n\t\t\t\tObject.assign(canvas, { width: canvasWidth, height: canvasHeight });\n\n\t\t\t\tconst context = canvas.getContext('webgl2');\n\t\t\t\tconst gl = new WebGLRenderer({\n\t\t\t\t\tcontext: context as unknown as WebGLRenderingContext,\n\t\t\t\t\tpowerPreference: 'high-performance',\n\t\t\t\t\tantialias: true,\n\t\t\t\t\talpha: true,\n\t\t\t\t\t...untracked(this.gl),\n\t\t\t\t});\n\n\t\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\t\tthis.configurator = this.initRoot(canvas as unknown as HTMLCanvasElement);\n\t\t\t\t\tthis.configurator.configure({\n\t\t\t\t\t\tgl,\n\t\t\t\t\t\tsize: { width: canvasWidth, height: canvasHeight, top: 0, left: 0 },\n\t\t\t\t\t\tshadows: untracked(this.shadows),\n\t\t\t\t\t\tlegacy: untracked(this.legacy),\n\t\t\t\t\t\tlinear: untracked(this.linear),\n\t\t\t\t\t\tflat: untracked(this.flat),\n\t\t\t\t\t\torthographic: untracked(this.orthographic),\n\t\t\t\t\t\tframeloop: untracked(this.frameloop),\n\t\t\t\t\t\tperformance: untracked(this.performance),\n\t\t\t\t\t\tdpr: untracked(this.dpr),\n\t\t\t\t\t\traycaster: untracked(this.raycaster),\n\t\t\t\t\t\tscene: untracked(this.scene),\n\t\t\t\t\t\tcamera: untracked(this.camera),\n\t\t\t\t\t\tlookAt: untracked(this.lookAt),\n\t\t\t\t\t});\n\t\t\t\t\tuntracked(this.noZoneRender.bind(this));\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tthis.destroyRef.onDestroy(() => {\n\t\t\tthis.glRef?.destroy();\n\t\t\tthis.glEnvironmentInjector?.destroy();\n\t\t\tthis.configurator?.destroy();\n\t\t});\n\t}\n\n\tprivate noZoneRender() {\n\t\t// NOTE: destroy previous instances if existed\n\t\tthis.glEnvironmentInjector?.destroy();\n\t\tthis.glRef?.destroy();\n\n\t\t// NOTE: Flag the canvas active, rendering will now begin\n\t\tthis.store.update((state) => ({ internal: { ...state.internal, active: true } }));\n\n\t\t// emit created event if observed\n\t\tthis.created.emit(this.store.snapshot);\n\n\t\tthis.glEnvironmentInjector = createEnvironmentInjector(\n\t\t\t[{ provide: DOCUMENT, useValue: document }, provideNgtRenderer(this.store)],\n\t\t\tthis.environmentInjector,\n\t\t);\n\t\tthis.glRef = untracked(this.canvasViewContainerRef).createComponent(untracked(this.sceneGraph), {\n\t\t\tenvironmentInjector: this.glEnvironmentInjector,\n\t\t\tinjector: this.injector,\n\t\t});\n\n\t\tthis.glRef.changeDetectorRef.detectChanges();\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-nativescript.mjs","sources":["../../../../libs/core/nativescript/src/lib/canvas.ts","../../../../libs/core/nativescript/src/angular-three-nativescript.ts"],"sourcesContent":["import '@nativescript/canvas-three';\n\nimport { DOCUMENT } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tComponentRef,\n\tcreateEnvironmentInjector,\n\tDestroyRef,\n\tEnvironmentInjector,\n\tinject,\n\tInjector,\n\tinput,\n\tNgZone,\n\tNO_ERRORS_SCHEMA,\n\toutput,\n\tType,\n\tuntracked,\n\tviewChild,\n\tViewContainerRef,\n} from '@angular/core';\nimport { registerElement } from '@nativescript/angular';\nimport { Canvas } from '@nativescript/canvas';\nimport {\n\tinjectCanvasRootInitializer,\n\tinjectStore,\n\tmakeDpr,\n\tNgtCanvasConfigurator,\n\tNgtCanvasOptions,\n\tNgtDpr,\n\tNgtGLOptions,\n\tNgtPerformance,\n\tNgtRoutedScene,\n\tNgtSize,\n\tNgtState,\n\tprovideNgtRenderer,\n\tprovideStore,\n} from 'angular-three';\nimport { Raycaster, Scene, Vector3, WebGLRenderer } from 'three';\n\nregisterElement('Canvas', () => Canvas);\n\n@Component({\n\tselector: 'NgtCanvas',\n\tstandalone: true,\n\ttemplate: `\n\t\t<GridLayout>\n\t\t\t<Canvas #canvas style=\"width: 100%; height: auto\" (ready)=\"onReady($event)\"></Canvas>\n\t\t</GridLayout>\n\t`,\n\tproviders: [{ provide: DOCUMENT, useValue: document }, provideStore()],\n\tschemas: [NO_ERRORS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtCanvasNative {\n\tsceneGraph = input.required<Type<any>, Type<any> | 'routed'>({\n\t\ttransform: (value) => {\n\t\t\tif (value === 'routed') return NgtRoutedScene;\n\t\t\treturn value;\n\t\t},\n\t});\n\tgl = input<NgtGLOptions>();\n\tsize = input<NgtSize>();\n\tshadows = input(false, {\n\t\ttransform: (value) => {\n\t\t\tif (value === '') return booleanAttribute(value);\n\t\t\treturn value as NonNullable<NgtCanvasOptions['shadows']>;\n\t\t},\n\t});\n\tlegacy = input(false, { transform: booleanAttribute });\n\tlinear = input(false, { transform: booleanAttribute });\n\tflat = input(false, { transform: booleanAttribute });\n\torthographic = input(false, { transform: booleanAttribute });\n\tframeloop = input<NonNullable<NgtCanvasOptions['frameloop']>>('always');\n\tperformance = input<Partial<Omit<NgtPerformance, 'regress'>>>();\n\tdpr = input<NgtDpr>([1, 2]);\n\traycaster = input<Partial<Raycaster>>();\n\tscene = input<Scene | Partial<Scene>>();\n\tcamera = input<NonNullable<NgtCanvasOptions['camera']>>();\n\tlookAt = input<Vector3 | Parameters<Vector3['set']>>();\n\tcreated = output<NgtState>();\n\n\tprivate store = injectStore();\n\tprivate initRoot = injectCanvasRootInitializer();\n\tprivate injector = inject(Injector);\n\tprivate environmentInjector = inject(EnvironmentInjector);\n\tprivate destroyRef = inject(DestroyRef);\n\tprivate zone = inject(NgZone);\n\n\tprivate canvasViewContainerRef = viewChild.required('canvas', { read: ViewContainerRef });\n\n\tprivate configurator?: NgtCanvasConfigurator;\n\tprivate glEnvironmentInjector?: EnvironmentInjector;\n\tprivate glRef?: ComponentRef<any>;\n\n\tconstructor() {\n\t\tthis.destroyRef.onDestroy(() => {\n\t\t\tthis.glRef?.destroy();\n\t\t\tthis.glEnvironmentInjector?.destroy();\n\t\t\tthis.configurator?.destroy();\n\t\t});\n\t}\n\n\tonReady(event: any) {\n\t\tconst canvas = event.object;\n\t\tconst dpr = makeDpr(untracked(this.dpr), window);\n\t\tconst canvasWidth = canvas.clientWidth * dpr;\n\t\tconst canvasHeight = canvas.clientHeight * dpr;\n\t\tObject.assign(canvas, { width: canvasWidth, height: canvasHeight });\n\n\t\tconst context = canvas.getContext('webgl2');\n\t\tconst gl = new WebGLRenderer({\n\t\t\tcanvas,\n\t\t\tcontext: context as unknown as WebGLRenderingContext,\n\t\t\tpowerPreference: 'high-performance',\n\t\t\tantialias: true,\n\t\t\talpha: true,\n\t\t\t...untracked(this.gl),\n\t\t});\n\t\tgl.setSize(canvasWidth, canvasHeight);\n\n\t\tthis.zone.runOutsideAngular(() => {\n\t\t\tthis.configurator = this.initRoot(canvas);\n\t\t\tthis.configurator.configure({\n\t\t\t\tgl,\n\t\t\t\tsize: { width: canvasWidth, height: canvasHeight, top: 0, left: 0 },\n\t\t\t\tshadows: untracked(this.shadows),\n\t\t\t\tlegacy: untracked(this.legacy),\n\t\t\t\tlinear: untracked(this.linear),\n\t\t\t\tflat: untracked(this.flat),\n\t\t\t\torthographic: untracked(this.orthographic),\n\t\t\t\tframeloop: untracked(this.frameloop),\n\t\t\t\tperformance: untracked(this.performance),\n\t\t\t\tdpr: untracked(this.dpr),\n\t\t\t\traycaster: untracked(this.raycaster),\n\t\t\t\tscene: untracked(this.scene),\n\t\t\t\tcamera: untracked(this.camera),\n\t\t\t\tlookAt: untracked(this.lookAt),\n\t\t\t});\n\t\t\tuntracked(this.noZoneRender.bind(this));\n\t\t});\n\t}\n\n\tprivate noZoneRender() {\n\t\t// NOTE: destroy previous instances if existed\n\t\tthis.glEnvironmentInjector?.destroy();\n\t\tthis.glRef?.destroy();\n\n\t\t// NOTE: Flag the canvas active, rendering will now begin\n\t\tthis.store.update((state) => ({ internal: { ...state.internal, active: true } }));\n\n\t\t// emit created event if observed\n\t\tthis.created.emit(this.store.snapshot);\n\n\t\tthis.glEnvironmentInjector = createEnvironmentInjector(\n\t\t\t[{ provide: DOCUMENT, useValue: document }, provideNgtRenderer(this.store)],\n\t\t\tthis.environmentInjector,\n\t\t);\n\t\tthis.glRef = untracked(this.canvasViewContainerRef).createComponent(untracked(this.sceneGraph), {\n\t\t\tenvironmentInjector: this.glEnvironmentInjector,\n\t\t\tinjector: this.injector,\n\t\t});\n\n\t\tthis.glRef.changeDetectorRef.detectChanges();\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1757,7 +1757,7 @@ class NgtRenderer {
1757
1757
  removeChild(parent, oldChild, isHostElement) {
1758
1758
  if (parent == null) {
1759
1759
  parent = (untracked(() => getLocalState(oldChild)?.parent?.()) ||
1760
- oldChild.__ngt_renderer__[1 /* NgtRendererClassId.parent */]);
1760
+ oldChild.__ngt_renderer__?.[1 /* NgtRendererClassId.parent */]);
1761
1761
  }
1762
1762
  const cRS = oldChild.__ngt_renderer__;
1763
1763
  // if parent is still falsy, we don't know what to do with the parent.
@@ -2670,37 +2670,34 @@ function load(loaderConstructorFactory, inputs, { extensions, onLoad, onProgress
2670
2670
  }
2671
2671
  function _injectLoader(loaderConstructorFactory, inputs, { extensions, onProgress, onLoad, injector, } = {}) {
2672
2672
  return assertInjector(_injectLoader, injector, () => {
2673
- const autoEffect = injectAutoEffect();
2674
2673
  const response = signal(null);
2675
- afterNextRender(() => {
2676
- const effector = load(loaderConstructorFactory, inputs, {
2677
- extensions,
2678
- onProgress,
2679
- onLoad: onLoad,
2680
- });
2681
- autoEffect(() => {
2682
- const originalUrls = inputs();
2683
- const cachedEffect = effector();
2684
- if (cachedEffect === null) {
2685
- response.set(null);
2686
- }
2687
- else {
2688
- Promise.all(cachedEffect).then((results) => {
2689
- response.update(() => {
2690
- if (Array.isArray(originalUrls))
2691
- return results;
2692
- if (typeof originalUrls === 'string')
2693
- return results[0];
2694
- const keys = Object.keys(originalUrls);
2695
- return keys.reduce((result, key) => {
2696
- result[key] = results[keys.indexOf(key)];
2697
- return result;
2698
- }, {});
2699
- });
2700
- });
2701
- }
2702
- }, { allowSignalWrites: true });
2674
+ const effector = load(loaderConstructorFactory, inputs, {
2675
+ extensions,
2676
+ onProgress,
2677
+ onLoad: onLoad,
2703
2678
  });
2679
+ effect(() => {
2680
+ const originalUrls = inputs();
2681
+ const cachedEffect = effector();
2682
+ if (cachedEffect === null && untracked(response) !== null) {
2683
+ response.set(null);
2684
+ }
2685
+ else if (cachedEffect !== null) {
2686
+ Promise.all(cachedEffect).then((results) => {
2687
+ response.update(() => {
2688
+ if (Array.isArray(originalUrls))
2689
+ return results;
2690
+ if (typeof originalUrls === 'string')
2691
+ return results[0];
2692
+ const keys = Object.keys(originalUrls);
2693
+ return keys.reduce((result, key) => {
2694
+ result[key] = results[keys.indexOf(key)];
2695
+ return result;
2696
+ }, {});
2697
+ });
2698
+ });
2699
+ }
2700
+ }, { allowSignalWrites: true });
2704
2701
  return response.asReadonly();
2705
2702
  });
2706
2703
  }
@@ -3036,22 +3033,25 @@ class NgtObjectEvents {
3036
3033
  const injector = inject(Injector);
3037
3034
  afterNextRender(() => {
3038
3035
  injectObjectEvents(this.ngtObjectEvents, {
3039
- click: (event) => this.click.emit(event),
3040
- dblclick: (event) => this.dblclick.emit(event),
3041
- contextmenu: (event) => this.contextmenu.emit(event),
3042
- pointerup: (event) => this.pointerup.emit(event),
3043
- pointerdown: (event) => this.pointerdown.emit(event),
3044
- pointerover: (event) => this.pointerover.emit(event),
3045
- pointerout: (event) => this.pointerout.emit(event),
3046
- pointerenter: (event) => this.pointerenter.emit(event),
3047
- pointerleave: (event) => this.pointerleave.emit(event),
3048
- pointermove: (event) => this.pointermove.emit(event),
3049
- pointermissed: (event) => this.pointermissed.emit(event),
3050
- pointercancel: (event) => this.pointercancel.emit(event),
3051
- wheel: (event) => this.wheel.emit(event),
3036
+ click: this.emitEvent('click'),
3037
+ dblclick: this.emitEvent('dblclick'),
3038
+ contextmenu: this.emitEvent('contextmenu'),
3039
+ pointerup: this.emitEvent('pointerup'),
3040
+ pointerdown: this.emitEvent('pointerdown'),
3041
+ pointerover: this.emitEvent('pointerover'),
3042
+ pointerout: this.emitEvent('pointerout'),
3043
+ pointerenter: this.emitEvent('pointerenter'),
3044
+ pointerleave: this.emitEvent('pointerleave'),
3045
+ pointermove: this.emitEvent('pointermove'),
3046
+ pointermissed: this.emitEvent('pointermissed'),
3047
+ pointercancel: this.emitEvent('pointercancel'),
3048
+ wheel: this.emitEvent('wheel'),
3052
3049
  }, { injector });
3053
3050
  });
3054
3051
  }
3052
+ emitEvent(eventName) {
3053
+ return this[eventName].emit.bind(this[eventName]);
3054
+ }
3055
3055
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtObjectEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3056
3056
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: NgtObjectEvents, isStandalone: true, selector: "[ngtObjectEvents]", inputs: { ngtObjectEvents: { classPropertyName: "ngtObjectEvents", publicName: "ngtObjectEvents", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click", dblclick: "dblclick", contextmenu: "contextmenu", pointerup: "pointerup", pointerdown: "pointerdown", pointerover: "pointerover", pointerout: "pointerout", pointerenter: "pointerenter", pointerleave: "pointerleave", pointermove: "pointermove", pointermissed: "pointermissed", pointercancel: "pointercancel", wheel: "wheel", ngtObjectEvents: "ngtObjectEventsChange" }, ngImport: i0 }); }
3057
3057
  }
@@ -3080,20 +3080,17 @@ const NgtObjectEventsHostDirective = {
3080
3080
  };
3081
3081
  function injectObjectEvents(target, events, { injector } = {}) {
3082
3082
  return assertInjector(injectObjectEvents, injector, () => {
3083
- const autoEffect = injectAutoEffect();
3084
3083
  const renderer = inject(Renderer2);
3085
3084
  const cleanUps = [];
3086
- afterNextRender(() => {
3087
- autoEffect(() => {
3088
- const targetRef = resolveRef(target());
3089
- if (!targetRef)
3090
- return;
3091
- Object.entries(events).forEach(([eventName, eventHandler]) => {
3092
- cleanUps.push(renderer.listen(targetRef, eventName, eventHandler));
3093
- });
3094
- return () => {
3095
- cleanUps.forEach((cleanUp) => cleanUp());
3096
- };
3085
+ effect((onCleanup) => {
3086
+ const targetRef = resolveRef(target());
3087
+ if (!targetRef)
3088
+ return;
3089
+ Object.entries(events).forEach(([eventName, eventHandler]) => {
3090
+ cleanUps.push(renderer.listen(targetRef, eventName, eventHandler));
3091
+ });
3092
+ onCleanup(() => {
3093
+ cleanUps.forEach((cleanUp) => cleanUp());
3097
3094
  });
3098
3095
  });
3099
3096
  inject(DestroyRef).onDestroy(() => {