angular-three 4.0.0-next.115 → 4.0.0-next.118

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.
package/README.md CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  A custom Renderer for Angular 19+ that uses Three.js to render 3D scenes.
4
4
 
5
- ## Official documentation
5
+ ## Documentation
6
+
7
+ All public APIs are documented with JSDoc comments. Your IDE will provide inline documentation, parameter hints, and examples as you code.
8
+
9
+ ### Official Documentation
6
10
 
7
11
  Please visit [angularthree-docs-next](https://angularthree-docs-next.netlify.app)
8
12
 
@@ -5,6 +5,12 @@ import { createEvents, injectStore, NGT_CANVAS_CONTENT_FLAG, canvasRootInitializ
5
5
  import { NgxResize, provideResizeOptions } from 'ngxtension/resize';
6
6
  import { ɵDomRendererFactory2 as _DomRendererFactory2 } from '@angular/platform-browser';
7
7
 
8
+ /**
9
+ * @fileoverview DOM event handling for Angular Three canvas.
10
+ *
11
+ * This module provides the default pointer event handling system for
12
+ * Angular Three, translating DOM pointer events to Three.js raycasting events.
13
+ */
8
14
  const DOM_EVENTS = {
9
15
  click: false,
10
16
  contextmenu: false,
@@ -17,6 +23,9 @@ const DOM_EVENTS = {
17
23
  pointercancel: true,
18
24
  lostpointercapture: true,
19
25
  };
26
+ /**
27
+ * List of supported pointer event names.
28
+ */
20
29
  const supportedEvents = [
21
30
  'click',
22
31
  'contextmenu',
@@ -32,6 +41,19 @@ const supportedEvents = [
32
41
  'pointercancel',
33
42
  'wheel',
34
43
  ];
44
+ /**
45
+ * Creates the default pointer event manager for an Angular Three canvas.
46
+ *
47
+ * This function sets up event listeners on the canvas element and translates
48
+ * DOM pointer events to Three.js raycasting events. It handles:
49
+ * - Pointer position calculation
50
+ * - Raycaster setup
51
+ * - Event connection/disconnection
52
+ * - Event propagation
53
+ *
54
+ * @param store - The Angular Three store
55
+ * @returns An event manager for the canvas
56
+ */
35
57
  function createPointerEvents(store) {
36
58
  const { handlePointer } = createEvents(store);
37
59
  return {
@@ -77,6 +99,28 @@ function createPointerEvents(store) {
77
99
  };
78
100
  }
79
101
 
102
+ /**
103
+ * Structural directive for defining the content to render inside the canvas.
104
+ *
105
+ * This directive marks the template content that will be rendered as Three.js
106
+ * scene content. It must be used inside an `ngt-canvas` component.
107
+ *
108
+ * The template context provides:
109
+ * - `$implicit`: The canvas element
110
+ * - `host`: The host element containing the canvas
111
+ *
112
+ * @example
113
+ * ```html
114
+ * <ngt-canvas>
115
+ * <ng-template canvasContent let-canvas let-host="host">
116
+ * <ngt-mesh>
117
+ * <ngt-box-geometry />
118
+ * <ngt-mesh-basic-material />
119
+ * </ngt-mesh>
120
+ * </ng-template>
121
+ * </ngt-canvas>
122
+ * ```
123
+ */
80
124
  class NgtCanvasContent {
81
125
  constructor() {
82
126
  this.canvas = inject(NgtCanvasImpl);
@@ -90,13 +134,37 @@ class NgtCanvasContent {
90
134
  static ngTemplateContextGuard(_, ctx) {
91
135
  return true;
92
136
  }
93
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NgtCanvasContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
94
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.7", type: NgtCanvasContent, isStandalone: true, selector: "ng-template[canvasContent]", ngImport: i0 }); }
137
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgtCanvasContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
138
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: NgtCanvasContent, isStandalone: true, selector: "ng-template[canvasContent]", ngImport: i0 }); }
95
139
  }
96
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NgtCanvasContent, decorators: [{
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgtCanvasContent, decorators: [{
97
141
  type: Directive,
98
142
  args: [{ selector: 'ng-template[canvasContent]' }]
99
143
  }], ctorParameters: () => [] });
144
+ /**
145
+ * The main canvas component for rendering Three.js scenes.
146
+ *
147
+ * This component creates a WebGL canvas and sets up the Three.js rendering context.
148
+ * It handles:
149
+ * - Canvas sizing and resize handling
150
+ * - WebGL renderer initialization
151
+ * - Camera and scene setup
152
+ * - Event handling
153
+ * - Render loop management
154
+ *
155
+ * @example
156
+ * ```html
157
+ * <ngt-canvas [shadows]="true" [dpr]="[1, 2]" (created)="onCreated($event)">
158
+ * <ng-template canvasContent>
159
+ * <ngt-mesh>
160
+ * <ngt-box-geometry />
161
+ * <ngt-mesh-standard-material />
162
+ * </ngt-mesh>
163
+ * <ngt-ambient-light />
164
+ * </ng-template>
165
+ * </ngt-canvas>
166
+ * ```
167
+ */
100
168
  class NgtCanvasImpl {
101
169
  constructor() {
102
170
  this.store = injectStore();
@@ -106,21 +174,15 @@ class NgtCanvasImpl {
106
174
  this.injector = inject(Injector);
107
175
  this.gl = input(...(ngDevMode ? [undefined, { debugName: "gl" }] : []));
108
176
  this.size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
109
- this.shadows = input(false, ...(ngDevMode ? [{ debugName: "shadows", transform: (value) => {
110
- if (value === '')
111
- return booleanAttribute(value);
112
- return value;
113
- } }] : [{
114
- transform: (value) => {
115
- if (value === '')
116
- return booleanAttribute(value);
117
- return value;
118
- },
119
- }]));
120
- this.legacy = input(false, ...(ngDevMode ? [{ debugName: "legacy", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
121
- this.linear = input(false, ...(ngDevMode ? [{ debugName: "linear", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
122
- this.flat = input(false, ...(ngDevMode ? [{ debugName: "flat", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
123
- this.orthographic = input(false, ...(ngDevMode ? [{ debugName: "orthographic", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
177
+ this.shadows = input(false, { ...(ngDevMode ? { debugName: "shadows" } : {}), transform: (value) => {
178
+ if (value === '')
179
+ return booleanAttribute(value);
180
+ return value;
181
+ } });
182
+ this.legacy = input(false, { ...(ngDevMode ? { debugName: "legacy" } : {}), transform: booleanAttribute });
183
+ this.linear = input(false, { ...(ngDevMode ? { debugName: "linear" } : {}), transform: booleanAttribute });
184
+ this.flat = input(false, { ...(ngDevMode ? { debugName: "flat" } : {}), transform: booleanAttribute });
185
+ this.orthographic = input(false, { ...(ngDevMode ? { debugName: "orthographic" } : {}), transform: booleanAttribute });
124
186
  this.frameloop = input('always', ...(ngDevMode ? [{ debugName: "frameloop" }] : []));
125
187
  this.performance = input(...(ngDevMode ? [undefined, { debugName: "performance" }] : []));
126
188
  this.dpr = input([1, 2], ...(ngDevMode ? [{ debugName: "dpr" }] : []));
@@ -138,7 +200,7 @@ class NgtCanvasImpl {
138
200
  this.canvasContentRef = contentChild.required(NgtCanvasContent, { read: TemplateRef });
139
201
  this.hbPointerEvents = computed(() => (this.eventSource() ? 'none' : 'auto'), ...(ngDevMode ? [{ debugName: "hbPointerEvents" }] : []));
140
202
  // NOTE: this signal is updated outside of Zone
141
- this.resizeResult = signal({}, ...(ngDevMode ? [{ debugName: "resizeResult", equal: Object.is }] : [{ equal: Object.is }]));
203
+ this.resizeResult = signal({}, { ...(ngDevMode ? { debugName: "resizeResult" } : {}), equal: Object.is });
142
204
  this.configurator = signal(null, ...(ngDevMode ? [{ debugName: "configurator" }] : []));
143
205
  // NOTE: this means that everything in NgtCanvas will be in afterNextRender.
144
206
  // this allows the content of NgtCanvas to use effect instead of afterNextRender
@@ -228,8 +290,8 @@ class NgtCanvasImpl {
228
290
  this.glRef = canvasVcr.createEmbeddedView(canvasContent, { $implicit: canvasElement, host: this.host.nativeElement }, { injector: this.injector });
229
291
  this.glRef.detectChanges();
230
292
  }
231
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NgtCanvasImpl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
232
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.7", type: NgtCanvasImpl, isStandalone: true, selector: "ngt-canvas", inputs: { 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 }, events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, eventSource: { classPropertyName: "eventSource", publicName: "eventSource", isSignal: true, isRequired: false, transformFunction: null }, eventPrefix: { classPropertyName: "eventPrefix", publicName: "eventPrefix", isSignal: true, isRequired: false, transformFunction: null }, lookAt: { classPropertyName: "lookAt", publicName: "lookAt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { created: "created", pointerMissed: "pointerMissed" }, host: { attributes: { "ngSkipHydration": "true" }, properties: { "style.pointerEvents": "hbPointerEvents()" }, styleAttribute: "display: block;position: relative;width: 100%;height: 100%;overflow: hidden;" }, providers: [
293
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgtCanvasImpl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
294
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.6", type: NgtCanvasImpl, isStandalone: true, selector: "ngt-canvas", inputs: { 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 }, events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, eventSource: { classPropertyName: "eventSource", publicName: "eventSource", isSignal: true, isRequired: false, transformFunction: null }, eventPrefix: { classPropertyName: "eventPrefix", publicName: "eventPrefix", isSignal: true, isRequired: false, transformFunction: null }, lookAt: { classPropertyName: "lookAt", publicName: "lookAt", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { created: "created", pointerMissed: "pointerMissed" }, host: { attributes: { "ngSkipHydration": "true" }, properties: { "style.pointerEvents": "hbPointerEvents()" }, styleAttribute: "display: block;position: relative;width: 100%;height: 100%;overflow: hidden;" }, providers: [
233
295
  provideResizeOptions({
234
296
  emitInZone: false,
235
297
  emitInitialResult: true,
@@ -243,7 +305,7 @@ class NgtCanvasImpl {
243
305
  </div>
244
306
  `, isInline: true, dependencies: [{ kind: "directive", type: NgxResize, selector: "[ngxResize]", inputs: ["ngxResizeOptions"], outputs: ["ngxResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
245
307
  }
246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NgtCanvasImpl, decorators: [{
308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgtCanvasImpl, decorators: [{
247
309
  type: Component,
248
310
  args: [{
249
311
  selector: 'ngt-canvas',
@@ -269,9 +331,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
269
331
  },
270
332
  changeDetection: ChangeDetectionStrategy.OnPush,
271
333
  }]
272
- }], ctorParameters: () => [] });
334
+ }], ctorParameters: () => [], propDecorators: { gl: [{ type: i0.Input, args: [{ isSignal: true, alias: "gl", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], shadows: [{ type: i0.Input, args: [{ isSignal: true, alias: "shadows", required: false }] }], legacy: [{ type: i0.Input, args: [{ isSignal: true, alias: "legacy", required: false }] }], linear: [{ type: i0.Input, args: [{ isSignal: true, alias: "linear", required: false }] }], flat: [{ type: i0.Input, args: [{ isSignal: true, alias: "flat", required: false }] }], orthographic: [{ type: i0.Input, args: [{ isSignal: true, alias: "orthographic", required: false }] }], frameloop: [{ type: i0.Input, args: [{ isSignal: true, alias: "frameloop", required: false }] }], performance: [{ type: i0.Input, args: [{ isSignal: true, alias: "performance", required: false }] }], dpr: [{ type: i0.Input, args: [{ isSignal: true, alias: "dpr", required: false }] }], raycaster: [{ type: i0.Input, args: [{ isSignal: true, alias: "raycaster", required: false }] }], scene: [{ type: i0.Input, args: [{ isSignal: true, alias: "scene", required: false }] }], camera: [{ type: i0.Input, args: [{ isSignal: true, alias: "camera", required: false }] }], events: [{ type: i0.Input, args: [{ isSignal: true, alias: "events", required: false }] }], eventSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "eventSource", required: false }] }], eventPrefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "eventPrefix", required: false }] }], lookAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "lookAt", required: false }] }], created: [{ type: i0.Output, args: ["created"] }], pointerMissed: [{ type: i0.Output, args: ["pointerMissed"] }], glCanvas: [{ type: i0.ViewChild, args: ['glCanvas', { isSignal: true }] }], glCanvasViewContainerRef: [{ type: i0.ViewChild, args: ['glCanvas', { ...{ read: ViewContainerRef }, isSignal: true }] }], canvasContentRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NgtCanvasContent), { ...{ read: TemplateRef }, isSignal: true }] }] } });
335
+ /**
336
+ * Array containing NgtCanvasImpl and NgtCanvasContent for convenient importing.
337
+ *
338
+ * @example
339
+ * ```typescript
340
+ * @Component({
341
+ * imports: [NgtCanvas],
342
+ * })
343
+ * export class AppComponent {}
344
+ * ```
345
+ */
273
346
  const NgtCanvas = [NgtCanvasImpl, NgtCanvasContent];
274
347
 
348
+ /**
349
+ * Provides the Angular Three renderer for use in a standalone application.
350
+ *
351
+ * This function should be called in your application's providers array to
352
+ * enable Angular Three's custom renderer for Three.js elements.
353
+ *
354
+ * @param options - Optional renderer configuration
355
+ * @returns Environment providers for the Angular Three renderer
356
+ *
357
+ * @example
358
+ * ```typescript
359
+ * // In app.config.ts
360
+ * import { ApplicationConfig } from '@angular/core';
361
+ * import { provideNgtRenderer } from 'angular-three/dom';
362
+ *
363
+ * export const appConfig: ApplicationConfig = {
364
+ * providers: [
365
+ * provideNgtRenderer(),
366
+ * // or with options:
367
+ * provideNgtRenderer({ verbose: true })
368
+ * ]
369
+ * };
370
+ * ```
371
+ */
275
372
  function provideNgtRenderer(options = {}) {
276
373
  return makeEnvironmentProviders([
277
374
  { provide: NGT_RENDERER_OPTIONS, useValue: options },
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-dom.mjs","sources":["../tmp-esm2022/dom/lib/events.js","../tmp-esm2022/dom/lib/canvas.js","../tmp-esm2022/dom/lib/renderer.js","../tmp-esm2022/dom/angular-three-dom.js"],"sourcesContent":["import { createEvents, } from 'angular-three';\nconst DOM_EVENTS = {\n click: false,\n contextmenu: false,\n dblclick: false,\n wheel: false, // passive wheel errors with OrbitControls\n pointerdown: true,\n pointerup: true,\n pointerleave: true,\n pointermove: true,\n pointercancel: true,\n lostpointercapture: true,\n};\nexport const supportedEvents = [\n 'click',\n 'contextmenu',\n 'dblclick',\n 'pointerup',\n 'pointerdown',\n 'pointerover',\n 'pointerout',\n 'pointerenter',\n 'pointerleave',\n 'pointermove',\n 'pointermissed',\n 'pointercancel',\n 'wheel',\n];\nexport function createPointerEvents(store) {\n const { handlePointer } = createEvents(store);\n return {\n priority: 1,\n enabled: true,\n compute: (event, root) => {\n const state = root.snapshot;\n // https://github.com/pmndrs/react-three-fiber/pull/782\n // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides\n state.pointer.set((event.offsetX / state.size.width) * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n },\n connected: undefined,\n handlers: Object.keys(DOM_EVENTS).reduce((handlers, supportedEventName) => {\n handlers[supportedEventName] = handlePointer(supportedEventName);\n return handlers;\n }, {}),\n update: () => {\n const { events, internal } = store.snapshot;\n if (internal.lastEvent?.nativeElement && events.handlers)\n events.handlers.pointermove(internal.lastEvent.nativeElement);\n },\n connect: (target) => {\n const state = store.snapshot;\n state.events.disconnect?.();\n state.setEvents({ connected: target });\n Object.entries(state.events.handlers ?? {}).forEach(([eventName, eventHandler]) => {\n const passive = DOM_EVENTS[eventName];\n target.addEventListener(eventName, eventHandler, { passive });\n });\n },\n disconnect: () => {\n const { events, setEvents } = store.snapshot;\n if (events.connected) {\n Object.entries(events.handlers ?? {}).forEach(([eventName, eventHandler]) => {\n if (events.connected instanceof HTMLElement) {\n events.connected.removeEventListener(eventName, eventHandler);\n }\n });\n setEvents({ connected: undefined });\n }\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RvbS9zcmMvbGliL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sWUFBWSxHQU9aLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sVUFBVSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxLQUFLO0lBQ1osV0FBVyxFQUFFLEtBQUs7SUFDbEIsUUFBUSxFQUFFLEtBQUs7SUFDZixLQUFLLEVBQUUsS0FBSyxFQUFFLDBDQUEwQztJQUN4RCxXQUFXLEVBQUUsSUFBSTtJQUNqQixTQUFTLEVBQUUsSUFBSTtJQUNmLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGtCQUFrQixFQUFFLElBQUk7Q0FDZixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzlCLE9BQU87SUFDUCxhQUFhO0lBQ2IsVUFBVTtJQUNWLFdBQVc7SUFDWCxhQUFhO0lBQ2IsYUFBYTtJQUNiLFlBQVk7SUFDWixjQUFjO0lBQ2QsY0FBYztJQUNkLGFBQWE7SUFDYixlQUFlO0lBQ2YsZUFBZTtJQUNmLE9BQU87Q0FDRSxDQUFDO0FBRVgsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQTRCO0lBQy9ELE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsT0FBTztRQUNOLFFBQVEsRUFBRSxDQUFDO1FBQ1gsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUUsQ0FBQyxLQUFrQixFQUFFLElBQTJCLEVBQUUsRUFBRTtZQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzVCLHVEQUF1RDtZQUN2RCw0RkFBNEY7WUFDNUYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1RyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsU0FBUyxFQUFFLFNBQVM7UUFDcEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBc0IsRUFBRSxrQkFBa0IsRUFBRSxFQUFFO1lBQ3ZGLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sUUFBUSxDQUFDO1FBQ2pCLENBQUMsRUFBRSxFQUFFLENBQWM7UUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNaLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUM1QyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxJQUFJLE1BQU0sQ0FBQyxRQUFRO2dCQUN2RCxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxNQUFtQixFQUFFLEVBQUU7WUFDaEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUM3QixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFFNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUNsRCxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBMEIsRUFBRSxFQUFFO2dCQUN0RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBb0MsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUNELENBQUM7UUFDSCxDQUFDO1FBQ0QsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDN0MsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQTBCLEVBQUUsRUFBRTtvQkFDcEcsSUFBSSxNQUFNLENBQUMsU0FBUyxZQUFZLFdBQVcsRUFBRSxDQUFDO3dCQUM3QyxNQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztvQkFDL0QsQ0FBQztnQkFDRixDQUFDLENBQUMsQ0FBQztnQkFFSCxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0YsQ0FBQztLQUNELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Y3JlYXRlRXZlbnRzLFxuXHROZ3RBbnlSZWNvcmQsXG5cdE5ndERvbUV2ZW50LFxuXHROZ3RFdmVudE1hbmFnZXIsXG5cdE5ndEV2ZW50cyxcblx0Tmd0U3RhdGUsXG5cdFNpZ25hbFN0YXRlLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcblxuY29uc3QgRE9NX0VWRU5UUyA9IHtcblx0Y2xpY2s6IGZhbHNlLFxuXHRjb250ZXh0bWVudTogZmFsc2UsXG5cdGRibGNsaWNrOiBmYWxzZSxcblx0d2hlZWw6IGZhbHNlLCAvLyBwYXNzaXZlIHdoZWVsIGVycm9ycyB3aXRoIE9yYml0Q29udHJvbHNcblx0cG9pbnRlcmRvd246IHRydWUsXG5cdHBvaW50ZXJ1cDogdHJ1ZSxcblx0cG9pbnRlcmxlYXZlOiB0cnVlLFxuXHRwb2ludGVybW92ZTogdHJ1ZSxcblx0cG9pbnRlcmNhbmNlbDogdHJ1ZSxcblx0bG9zdHBvaW50ZXJjYXB0dXJlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZEV2ZW50cyA9IFtcblx0J2NsaWNrJyxcblx0J2NvbnRleHRtZW51Jyxcblx0J2RibGNsaWNrJyxcblx0J3BvaW50ZXJ1cCcsXG5cdCdwb2ludGVyZG93bicsXG5cdCdwb2ludGVyb3ZlcicsXG5cdCdwb2ludGVyb3V0Jyxcblx0J3BvaW50ZXJlbnRlcicsXG5cdCdwb2ludGVybGVhdmUnLFxuXHQncG9pbnRlcm1vdmUnLFxuXHQncG9pbnRlcm1pc3NlZCcsXG5cdCdwb2ludGVyY2FuY2VsJyxcblx0J3doZWVsJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb2ludGVyRXZlbnRzKHN0b3JlOiBTaWduYWxTdGF0ZTxOZ3RTdGF0ZT4pOiBOZ3RFdmVudE1hbmFnZXI8SFRNTEVsZW1lbnQ+IHtcblx0Y29uc3QgeyBoYW5kbGVQb2ludGVyIH0gPSBjcmVhdGVFdmVudHMoc3RvcmUpO1xuXG5cdHJldHVybiB7XG5cdFx0cHJpb3JpdHk6IDEsXG5cdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRjb21wdXRlOiAoZXZlbnQ6IE5ndERvbUV2ZW50LCByb290OiBTaWduYWxTdGF0ZTxOZ3RTdGF0ZT4pID0+IHtcblx0XHRcdGNvbnN0IHN0YXRlID0gcm9vdC5zbmFwc2hvdDtcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvcHVsbC83ODJcblx0XHRcdC8vIEV2ZW50cyB0cmlnZ2VyIG91dHNpZGUgb2YgY2FudmFzIHdoZW4gbW92ZWQsIHVzZSBvZmZzZXRYL1kgYnkgZGVmYXVsdCBhbmQgYWxsb3cgb3ZlcnJpZGVzXG5cdFx0XHRzdGF0ZS5wb2ludGVyLnNldCgoZXZlbnQub2Zmc2V0WCAvIHN0YXRlLnNpemUud2lkdGgpICogMiAtIDEsIC0oZXZlbnQub2Zmc2V0WSAvIHN0YXRlLnNpemUuaGVpZ2h0KSAqIDIgKyAxKTtcblx0XHRcdHN0YXRlLnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHN0YXRlLnBvaW50ZXIsIHN0YXRlLmNhbWVyYSk7XG5cdFx0fSxcblx0XHRjb25uZWN0ZWQ6IHVuZGVmaW5lZCxcblx0XHRoYW5kbGVyczogT2JqZWN0LmtleXMoRE9NX0VWRU5UUykucmVkdWNlKChoYW5kbGVyczogTmd0QW55UmVjb3JkLCBzdXBwb3J0ZWRFdmVudE5hbWUpID0+IHtcblx0XHRcdGhhbmRsZXJzW3N1cHBvcnRlZEV2ZW50TmFtZV0gPSBoYW5kbGVQb2ludGVyKHN1cHBvcnRlZEV2ZW50TmFtZSk7XG5cdFx0XHRyZXR1cm4gaGFuZGxlcnM7XG5cdFx0fSwge30pIGFzIE5ndEV2ZW50cyxcblx0XHR1cGRhdGU6ICgpID0+IHtcblx0XHRcdGNvbnN0IHsgZXZlbnRzLCBpbnRlcm5hbCB9ID0gc3RvcmUuc25hcHNob3Q7XG5cdFx0XHRpZiAoaW50ZXJuYWwubGFzdEV2ZW50Py5uYXRpdmVFbGVtZW50ICYmIGV2ZW50cy5oYW5kbGVycylcblx0XHRcdFx0ZXZlbnRzLmhhbmRsZXJzLnBvaW50ZXJtb3ZlKGludGVybmFsLmxhc3RFdmVudC5uYXRpdmVFbGVtZW50KTtcblx0XHR9LFxuXHRcdGNvbm5lY3Q6ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG5cdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0c3RhdGUuZXZlbnRzLmRpc2Nvbm5lY3Q/LigpO1xuXG5cdFx0XHRzdGF0ZS5zZXRFdmVudHMoeyBjb25uZWN0ZWQ6IHRhcmdldCB9KTtcblxuXHRcdFx0T2JqZWN0LmVudHJpZXMoc3RhdGUuZXZlbnRzLmhhbmRsZXJzID8/IHt9KS5mb3JFYWNoKFxuXHRcdFx0XHQoW2V2ZW50TmFtZSwgZXZlbnRIYW5kbGVyXTogW3N0cmluZywgRXZlbnRMaXN0ZW5lcl0pID0+IHtcblx0XHRcdFx0XHRjb25zdCBwYXNzaXZlID0gRE9NX0VWRU5UU1tldmVudE5hbWUgYXMga2V5b2YgdHlwZW9mIERPTV9FVkVOVFNdO1xuXHRcdFx0XHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyLCB7IHBhc3NpdmUgfSk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0ZGlzY29ubmVjdDogKCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBldmVudHMsIHNldEV2ZW50cyB9ID0gc3RvcmUuc25hcHNob3Q7XG5cdFx0XHRpZiAoZXZlbnRzLmNvbm5lY3RlZCkge1xuXHRcdFx0XHRPYmplY3QuZW50cmllcyhldmVudHMuaGFuZGxlcnMgPz8ge30pLmZvckVhY2goKFtldmVudE5hbWUsIGV2ZW50SGFuZGxlcl06IFtzdHJpbmcsIEV2ZW50TGlzdGVuZXJdKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50cy5jb25uZWN0ZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0ZXZlbnRzLmNvbm5lY3RlZC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHNldEV2ZW50cyh7IGNvbm5lY3RlZDogdW5kZWZpbmVkIH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH07XG59XG4iXX0=","import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChild, DestroyRef, Directive, effect, ElementRef, inject, Injector, input, NgZone, output, signal, TemplateRef, untracked, viewChild, ViewContainerRef, } from '@angular/core';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\nimport { canvasRootInitializer, injectStore, is, NGT_CANVAS_CONTENT_FLAG, NGT_STORE, storeFactory, } from 'angular-three';\nimport { NgxResize, provideResizeOptions } from 'ngxtension/resize';\nimport { createPointerEvents } from './events';\nimport * as i0 from \"@angular/core\";\nexport class NgtCanvasContent {\n constructor() {\n this.canvas = inject(NgtCanvasImpl);\n const store = injectStore();\n const vcr = inject(ViewContainerRef);\n const commentNode = vcr.element.nativeElement;\n // NOTE: flag this canvasContent ng-template comment node as the start\n commentNode.data = NGT_CANVAS_CONTENT_FLAG;\n commentNode[NGT_CANVAS_CONTENT_FLAG] = store;\n }\n static ngTemplateContextGuard(_, ctx) {\n return true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NgtCanvasContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.7\", type: NgtCanvasContent, isStandalone: true, selector: \"ng-template[canvasContent]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NgtCanvasContent, decorators: [{\n type: Directive,\n args: [{ selector: 'ng-template[canvasContent]' }]\n }], ctorParameters: () => [] });\nexport class NgtCanvasImpl {\n constructor() {\n this.store = injectStore();\n this.initRoot = canvasRootInitializer();\n this.host = inject(ElementRef);\n this.zone = inject(NgZone);\n this.injector = inject(Injector);\n this.gl = input(...(ngDevMode ? [undefined, { debugName: \"gl\" }] : []));\n this.size = input(...(ngDevMode ? [undefined, { debugName: \"size\" }] : []));\n this.shadows = input(false, ...(ngDevMode ? [{ debugName: \"shadows\", transform: (value) => {\n if (value === '')\n return booleanAttribute(value);\n return value;\n } }] : [{\n transform: (value) => {\n if (value === '')\n return booleanAttribute(value);\n return value;\n },\n }]));\n this.legacy = input(false, ...(ngDevMode ? [{ debugName: \"legacy\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.linear = input(false, ...(ngDevMode ? [{ debugName: \"linear\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.flat = input(false, ...(ngDevMode ? [{ debugName: \"flat\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.orthographic = input(false, ...(ngDevMode ? [{ debugName: \"orthographic\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.frameloop = input('always', ...(ngDevMode ? [{ debugName: \"frameloop\" }] : []));\n this.performance = input(...(ngDevMode ? [undefined, { debugName: \"performance\" }] : []));\n this.dpr = input([1, 2], ...(ngDevMode ? [{ debugName: \"dpr\" }] : []));\n this.raycaster = input(...(ngDevMode ? [undefined, { debugName: \"raycaster\" }] : []));\n this.scene = input(...(ngDevMode ? [undefined, { debugName: \"scene\" }] : []));\n this.camera = input(...(ngDevMode ? [undefined, { debugName: \"camera\" }] : []));\n this.events = input(createPointerEvents, ...(ngDevMode ? [{ debugName: \"events\" }] : []));\n this.eventSource = input(...(ngDevMode ? [undefined, { debugName: \"eventSource\" }] : []));\n this.eventPrefix = input('offset', ...(ngDevMode ? [{ debugName: \"eventPrefix\" }] : []));\n this.lookAt = input(...(ngDevMode ? [undefined, { debugName: \"lookAt\" }] : []));\n this.created = output();\n this.pointerMissed = outputFromObservable(this.store.snapshot.pointerMissed$);\n this.glCanvas = viewChild.required('glCanvas');\n this.glCanvasViewContainerRef = viewChild.required('glCanvas', { read: ViewContainerRef });\n this.canvasContentRef = contentChild.required(NgtCanvasContent, { read: TemplateRef });\n this.hbPointerEvents = computed(() => (this.eventSource() ? 'none' : 'auto'), ...(ngDevMode ? [{ debugName: \"hbPointerEvents\" }] : []));\n // NOTE: this signal is updated outside of Zone\n this.resizeResult = signal({}, ...(ngDevMode ? [{ debugName: \"resizeResult\", equal: Object.is }] : [{ equal: Object.is }]));\n this.configurator = signal(null, ...(ngDevMode ? [{ debugName: \"configurator\" }] : []));\n // NOTE: this means that everything in NgtCanvas will be in afterNextRender.\n // this allows the content of NgtCanvas to use effect instead of afterNextRender\n afterNextRender(() => {\n const [canvasVcr, canvasElement, canvasContent] = [\n this.glCanvasViewContainerRef(),\n this.glCanvas().nativeElement,\n this.canvasContentRef(),\n ];\n this.zone.runOutsideAngular(() => {\n this.configurator.set(this.initRoot(canvasElement));\n });\n effect(() => {\n const resizeResult = this.resizeResult();\n if (!resizeResult.width ||\n resizeResult.width <= 0 ||\n !resizeResult.height ||\n resizeResult.height <= 0)\n return;\n const configurator = this.configurator();\n if (!configurator)\n return;\n const canvasOptions = {\n gl: this.gl(),\n shadows: this.shadows(),\n legacy: this.legacy(),\n linear: this.linear(),\n flat: this.flat(),\n orthographic: this.orthographic(),\n frameloop: this.frameloop(),\n performance: this.performance(),\n dpr: this.dpr(),\n raycaster: this.raycaster(),\n scene: this.scene(),\n camera: this.camera(),\n events: this.events(),\n eventSource: this.eventSource(),\n eventPrefix: this.eventPrefix(),\n lookAt: this.lookAt(),\n size: resizeResult,\n };\n this.zone.runOutsideAngular(() => {\n configurator.configure(canvasOptions);\n if (this.glRef) {\n this.store.snapshot.invalidate();\n this.glRef.detectChanges();\n }\n else {\n this.noZoneRender(canvasElement, canvasVcr, canvasContent);\n }\n });\n }, { injector: this.injector });\n });\n inject(DestroyRef).onDestroy(() => {\n this.glRef?.destroy();\n this.configurator()?.destroy();\n });\n }\n noZoneRender(canvasElement, canvasVcr, canvasContent) {\n // NOTE: destroy previous instances if existed\n this.glRef?.destroy();\n // NOTE: Flag the canvas active, rendering will now begin\n this.store.update((state) => ({ internal: { ...state.internal, active: true } }));\n const [state, eventSource, eventPrefix] = [\n this.store.snapshot,\n untracked(this.eventSource),\n untracked(this.eventPrefix),\n ];\n // connect to event source\n state.events.connect?.(eventSource ? (is.ref(eventSource) ? eventSource.nativeElement : eventSource) : this.host.nativeElement);\n // setup compute for eventPrefix\n if (eventPrefix) {\n state.setEvents({\n compute: (event, store) => {\n const { pointer, raycaster, camera, size } = store.snapshot;\n const x = event[(eventPrefix + 'X')];\n const y = event[(eventPrefix + 'Y')];\n pointer.set((x / size.width) * 2 - 1, -(y / size.height) * 2 + 1);\n raycaster.setFromCamera(pointer, camera);\n },\n });\n }\n this.created.emit(this.store.snapshot);\n if (!this.store.snapshot.events.connected) {\n this.store.snapshot.events.connect?.(canvasElement);\n }\n this.glRef = canvasVcr.createEmbeddedView(canvasContent, { $implicit: canvasElement, host: this.host.nativeElement }, { injector: this.injector });\n this.glRef.detectChanges();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NgtCanvasImpl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.1.7\", type: NgtCanvasImpl, isStandalone: true, selector: \"ngt-canvas\", inputs: { 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 }, events: { classPropertyName: \"events\", publicName: \"events\", isSignal: true, isRequired: false, transformFunction: null }, eventSource: { classPropertyName: \"eventSource\", publicName: \"eventSource\", isSignal: true, isRequired: false, transformFunction: null }, eventPrefix: { classPropertyName: \"eventPrefix\", publicName: \"eventPrefix\", isSignal: true, isRequired: false, transformFunction: null }, lookAt: { classPropertyName: \"lookAt\", publicName: \"lookAt\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { created: \"created\", pointerMissed: \"pointerMissed\" }, host: { attributes: { \"ngSkipHydration\": \"true\" }, properties: { \"style.pointerEvents\": \"hbPointerEvents()\" }, styleAttribute: \"display: block;position: relative;width: 100%;height: 100%;overflow: hidden;\" }, providers: [\n provideResizeOptions({\n emitInZone: false,\n emitInitialResult: true,\n debounce: { scroll: 50, resize: 0 },\n }),\n { provide: NGT_STORE, useFactory: storeFactory },\n ], queries: [{ propertyName: \"canvasContentRef\", first: true, predicate: NgtCanvasContent, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: \"glCanvas\", first: true, predicate: [\"glCanvas\"], descendants: true, isSignal: true }, { propertyName: \"glCanvasViewContainerRef\", first: true, predicate: [\"glCanvas\"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `\n\t\t<div (ngxResize)=\"resizeResult.set($event)\" style=\"height: 100%; width: 100%;\">\n\t\t\t<canvas #glCanvas style=\"display: block;\"></canvas>\n\t\t\t<ng-content />\n\t\t</div>\n\t`, isInline: true, dependencies: [{ kind: \"directive\", type: NgxResize, selector: \"[ngxResize]\", inputs: [\"ngxResizeOptions\"], outputs: [\"ngxResize\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NgtCanvasImpl, decorators: [{\n type: Component,\n args: [{\n selector: 'ngt-canvas',\n template: `\n\t\t<div (ngxResize)=\"resizeResult.set($event)\" style=\"height: 100%; width: 100%;\">\n\t\t\t<canvas #glCanvas style=\"display: block;\"></canvas>\n\t\t\t<ng-content />\n\t\t</div>\n\t`,\n imports: [NgxResize],\n providers: [\n provideResizeOptions({\n emitInZone: false,\n emitInitialResult: true,\n debounce: { scroll: 50, resize: 0 },\n }),\n { provide: NGT_STORE, useFactory: storeFactory },\n ],\n host: {\n style: 'display: block;position: relative;width: 100%;height: 100%;overflow: hidden;',\n '[style.pointerEvents]': 'hbPointerEvents()',\n ngSkipHydration: 'true',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], ctorParameters: () => [] });\nexport const NgtCanvas = [NgtCanvasImpl, NgtCanvasContent];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RvbS9zcmMvbGliL2NhbnZhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sZUFBZSxFQUNmLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBQ04sVUFBVSxFQUVWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQ04scUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxFQUFFLEVBQ0YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFjVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBK0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRy9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFHNUI7UUFGUSxXQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBR3RDLE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBRTlDLHNFQUFzRTtRQUN0RSxXQUFXLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDO1FBQzNDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxH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Q25CLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFO3FCQUNoRDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLDhFQUE4RTt3QkFDckYsdUJBQXVCLEVBQUUsbUJBQW1CO3dCQUM1QyxlQUFlLEVBQUUsTUFBTTtxQkFDdkI7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DOztBQXNLRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0RGVzdHJveVJlZixcblx0RGlyZWN0aXZlLFxuXHRlZmZlY3QsXG5cdEVsZW1lbnRSZWYsXG5cdEVtYmVkZGVkVmlld1JlZixcblx0aW5qZWN0LFxuXHRJbmplY3Rvcixcblx0aW5wdXQsXG5cdE5nWm9uZSxcblx0b3V0cHV0LFxuXHRzaWduYWwsXG5cdFRlbXBsYXRlUmVmLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcblx0Vmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvdXRwdXRGcm9tT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG5cdGNhbnZhc1Jvb3RJbml0aWFsaXplcixcblx0aW5qZWN0U3RvcmUsXG5cdGlzLFxuXHROR1RfQ0FOVkFTX0NPTlRFTlRfRkxBRyxcblx0TkdUX1NUT1JFLFxuXHROZ3RDYW1lcmEsXG5cdE5ndENhbWVyYVBhcmFtZXRlcnMsXG5cdE5ndENhbnZhc0NvbmZpZ3VyYXRvcixcblx0Tmd0RG9tRXZlbnQsXG5cdE5ndERwcixcblx0Tmd0RXZlbnRQcmVmaXgsXG5cdE5ndEZyYW1lbG9vcCxcblx0Tmd0R0xPcHRpb25zLFxuXHROZ3RQZXJmb3JtYW5jZSxcblx0Tmd0U2hhZG93cyxcblx0Tmd0U2l6ZSxcblx0Tmd0U3RhdGUsXG5cdE5ndFZlY3RvcjMsXG5cdHN0b3JlRmFjdG9yeSxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3hSZXNpemUsIHByb3ZpZGVSZXNpemVPcHRpb25zLCBSZXNpemVPcHRpb25zLCBSZXNpemVSZXN1bHQgfSBmcm9tICduZ3h0ZW5zaW9uL3Jlc2l6ZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBjcmVhdGVQb2ludGVyRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtjYW52YXNDb250ZW50XScgfSlcbmV4cG9ydCBjbGFzcyBOZ3RDYW52YXNDb250ZW50IHtcblx0cHJpdmF0ZSBjYW52YXMgPSBpbmplY3QoTmd0Q2FudmFzSW1wbCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3Qgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRcdGNvbnN0IHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblx0XHRjb25zdCBjb21tZW50Tm9kZSA9IHZjci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHQvLyBOT1RFOiBmbGFnIHRoaXMgY2FudmFzQ29udGVudCBuZy10ZW1wbGF0ZSBjb21tZW50IG5vZGUgYXMgdGhlIHN0YXJ0XG5cdFx0Y29tbWVudE5vZGUuZGF0YSA9IE5HVF9DQU5WQVNfQ09OVEVOVF9GTEFHO1xuXHRcdGNvbW1lbnROb2RlW05HVF9DQU5WQVNfQ09OVEVOVF9GTEFHXSA9IHN0b3JlO1xuXHR9XG5cblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXG5cdFx0XzogTmd0Q2FudmFzQ29udGVudCxcblx0XHRjdHg6IHVua25vd24sXG5cdCk6IGN0eCBpcyB7ICRpbXBsaWNpdDogSFRNTENhbnZhc0VsZW1lbnQ7IGhvc3Q6IEhUTUxFbGVtZW50IH0ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1jYW52YXMnLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxkaXYgKG5neFJlc2l6ZSk9XCJyZXNpemVSZXN1bHQuc2V0KCRldmVudClcIiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7XCI+XG5cdFx0XHQ8Y2FudmFzICNnbENhbnZhcyBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPjwvY2FudmFzPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L2Rpdj5cblx0YCxcblx0aW1wb3J0czogW05neFJlc2l6ZV0sXG5cdHByb3ZpZGVyczogW1xuXHRcdHByb3ZpZGVSZXNpemVPcHRpb25zKHtcblx0XHRcdGVtaXRJblpvbmU6IGZhbHNlLFxuXHRcdFx0ZW1pdEluaXRpYWxSZXN1bHQ6IHRydWUsXG5cdFx0XHRkZWJvdW5jZTogeyBzY3JvbGw6IDUwLCByZXNpemU6IDAgfSxcblx0XHR9IGFzIFJlc2l6ZU9wdGlvbnMpLFxuXHRcdHsgcHJvdmlkZTogTkdUX1NUT1JFLCB1c2VGYWN0b3J5OiBzdG9yZUZhY3RvcnkgfSxcblx0XSxcblx0aG9zdDoge1xuXHRcdHN0eWxlOiAnZGlzcGxheTogYmxvY2s7cG9zaXRpb246IHJlbGF0aXZlO3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtvdmVyZmxvdzogaGlkZGVuOycsXG5cdFx0J1tzdHlsZS5wb2ludGVyRXZlbnRzXSc6ICdoYlBvaW50ZXJFdmVudHMoKScsXG5cdFx0bmdTa2lwSHlkcmF0aW9uOiAndHJ1ZScsXG5cdH0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RDYW52YXNJbXBsIHtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdHByaXZhdGUgaW5pdFJvb3QgPSBjYW52YXNSb290SW5pdGlhbGl6ZXIoKTtcblxuXHRwcml2YXRlIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHpvbmUgPSBpbmplY3QoTmdab25lKTtcblx0cHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0Z2wgPSBpbnB1dDxOZ3RHTE9wdGlvbnM+KCk7XG5cdHNpemUgPSBpbnB1dDxOZ3RTaXplPigpO1xuXHRzaGFkb3dzID0gaW5wdXQoZmFsc2UsIHtcblx0XHR0cmFuc2Zvcm06ICh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlID09PSAnJykgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlIGFzIE5ndFNoYWRvd3M7XG5cdFx0fSxcblx0fSk7XG5cdGxlZ2FjeSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0bGluZWFyID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXHRmbGF0ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXHRvcnRob2dyYXBoaWMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cdGZyYW1lbG9vcCA9IGlucHV0PE5ndEZyYW1lbG9vcD4oJ2Fsd2F5cycpO1xuXHRwZXJmb3JtYW5jZSA9IGlucHV0PFBhcnRpYWw8T21pdDxOZ3RQZXJmb3JtYW5jZSwgJ3JlZ3Jlc3MnPj4+KCk7XG5cdGRwciA9IGlucHV0PE5ndERwcj4oWzEsIDJdKTtcblx0cmF5Y2FzdGVyID0gaW5wdXQ8UGFydGlhbDxUSFJFRS5SYXljYXN0ZXI+PigpO1xuXHRzY2VuZSA9IGlucHV0PFRIUkVFLlNjZW5lIHwgUGFydGlhbDxUSFJFRS5TY2VuZT4+KCk7XG5cdGNhbWVyYSA9IGlucHV0PE5ndENhbWVyYSB8IE5ndENhbWVyYVBhcmFtZXRlcnM+KCk7XG5cdGV2ZW50cyA9IGlucHV0KGNyZWF0ZVBvaW50ZXJFdmVudHMpO1xuXHRldmVudFNvdXJjZSA9IGlucHV0PEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCk7XG5cdGV2ZW50UHJlZml4ID0gaW5wdXQ8Tmd0RXZlbnRQcmVmaXg+KCdvZmZzZXQnKTtcblx0bG9va0F0ID0gaW5wdXQ8Tmd0VmVjdG9yMz4oKTtcblxuXHRjcmVhdGVkID0gb3V0cHV0PE5ndFN0YXRlPigpO1xuXHRwb2ludGVyTWlzc2VkID0gb3V0cHV0RnJvbU9ic2VydmFibGUodGhpcy5zdG9yZS5zbmFwc2hvdC5wb2ludGVyTWlzc2VkJCk7XG5cblx0cHJpdmF0ZSBnbENhbnZhcyA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50Pj4oJ2dsQ2FudmFzJyk7XG5cdHByaXZhdGUgZ2xDYW52YXNWaWV3Q29udGFpbmVyUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkKCdnbENhbnZhcycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KTtcblx0cHJpdmF0ZSBjYW52YXNDb250ZW50UmVmID0gY29udGVudENoaWxkLnJlcXVpcmVkKE5ndENhbnZhc0NvbnRlbnQsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSk7XG5cblx0cHJvdGVjdGVkIGhiUG9pbnRlckV2ZW50cyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmV2ZW50U291cmNlKCkgPyAnbm9uZScgOiAnYXV0bycpKTtcblxuXHQvLyBOT1RFOiB0aGlzIHNpZ25hbCBpcyB1cGRhdGVkIG91dHNpZGUgb2YgWm9uZVxuXHRwcm90ZWN0ZWQgcmVzaXplUmVzdWx0ID0gc2lnbmFsPFJlc2l6ZVJlc3VsdD4oe30gYXMgUmVzaXplUmVzdWx0LCB7IGVxdWFsOiBPYmplY3QuaXMgfSk7XG5cdHByaXZhdGUgY29uZmlndXJhdG9yID0gc2lnbmFsPE5ndENhbnZhc0NvbmZpZ3VyYXRvciB8IG51bGw+KG51bGwpO1xuXG5cdHByaXZhdGUgZ2xSZWY/OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj47XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Ly8gTk9URTogdGhpcyBtZWFucyB0aGF0IGV2ZXJ5dGhpbmcgaW4gTmd0Q2FudmFzIHdpbGwgYmUgaW4gYWZ0ZXJOZXh0UmVuZGVyLlxuXHRcdC8vIHRoaXMgYWxsb3dzIHRoZSBjb250ZW50IG9mIE5ndENhbnZhcyB0byB1c2UgZWZmZWN0IGluc3RlYWQgb2YgYWZ0ZXJOZXh0UmVuZGVyXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IFtjYW52YXNWY3IsIGNhbnZhc0VsZW1lbnQsIGNhbnZhc0NvbnRlbnRdID0gW1xuXHRcdFx0XHR0aGlzLmdsQ2FudmFzVmlld0NvbnRhaW5lclJlZigpLFxuXHRcdFx0XHR0aGlzLmdsQ2FudmFzKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5jYW52YXNDb250ZW50UmVmKCksXG5cdFx0XHRdO1xuXG5cdFx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbmZpZ3VyYXRvci5zZXQodGhpcy5pbml0Um9vdChjYW52YXNFbGVtZW50KSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWZmZWN0KFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzaXplUmVzdWx0ID0gdGhpcy5yZXNpemVSZXN1bHQoKTtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQhcmVzaXplUmVzdWx0LndpZHRoIHx8XG5cdFx0XHRcdFx0XHRyZXNpemVSZXN1bHQud2lkdGggPD0gMCB8fFxuXHRcdFx0XHRcdFx0IXJlc2l6ZVJlc3VsdC5oZWlnaHQgfHxcblx0XHRcdFx0XHRcdHJlc2l6ZVJlc3VsdC5oZWlnaHQgPD0gMFxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdGNvbnN0IGNvbmZpZ3VyYXRvciA9IHRoaXMuY29uZmlndXJhdG9yKCk7XG5cdFx0XHRcdFx0aWYgKCFjb25maWd1cmF0b3IpIHJldHVybjtcblxuXHRcdFx0XHRcdGNvbnN0IGNhbnZhc09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRnbDogdGhpcy5nbCgpLFxuXHRcdFx0XHRcdFx0c2hhZG93czogdGhpcy5zaGFkb3dzKCksXG5cdFx0XHRcdFx0XHRsZWdhY3k6IHRoaXMubGVnYWN5KCksXG5cdFx0XHRcdFx0XHRsaW5lYXI6IHRoaXMubGluZWFyKCksXG5cdFx0XHRcdFx0XHRmbGF0OiB0aGlzLmZsYXQoKSxcblx0XHRcdFx0XHRcdG9ydGhvZ3JhcGhpYzogdGhpcy5vcnRob2dyYXBoaWMoKSxcblx0XHRcdFx0XHRcdGZyYW1lbG9vcDogdGhpcy5mcmFtZWxvb3AoKSxcblx0XHRcdFx0XHRcdHBlcmZvcm1hbmNlOiB0aGlzLnBlcmZvcm1hbmNlKCksXG5cdFx0XHRcdFx0XHRkcHI6IHRoaXMuZHByKCksXG5cdFx0XHRcdFx0XHRyYXljYXN0ZXI6IHRoaXMucmF5Y2FzdGVyKCksXG5cdFx0XHRcdFx0XHRzY2VuZTogdGhpcy5zY2VuZSgpLFxuXHRcdFx0XHRcdFx0Y2FtZXJhOiB0aGlzLmNhbWVyYSgpLFxuXHRcdFx0XHRcdFx0ZXZlbnRzOiB0aGlzLmV2ZW50cygpLFxuXHRcdFx0XHRcdFx0ZXZlbnRTb3VyY2U6IHRoaXMuZXZlbnRTb3VyY2UoKSxcblx0XHRcdFx0XHRcdGV2ZW50UHJlZml4OiB0aGlzLmV2ZW50UHJlZml4KCksXG5cdFx0XHRcdFx0XHRsb29rQXQ6IHRoaXMubG9va0F0KCksXG5cdFx0XHRcdFx0XHRzaXplOiByZXNpemVSZXN1bHQsXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmF0b3IuY29uZmlndXJlKGNhbnZhc09wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nbFJlZikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0b3JlLnNuYXBzaG90LmludmFsaWRhdGUoKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5nbFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm5vWm9uZVJlbmRlcihjYW52YXNFbGVtZW50LCBjYW52YXNWY3IsIGNhbnZhc0NvbnRlbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IGluamVjdG9yOiB0aGlzLmluamVjdG9yIH0sXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLmdsUmVmPy5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRvcigpPy5kZXN0cm95KCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIG5vWm9uZVJlbmRlcihcblx0XHRjYW52YXNFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCxcblx0XHRjYW52YXNWY3I6IFZpZXdDb250YWluZXJSZWYsXG5cdFx0Y2FudmFzQ29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj4sXG5cdCkge1xuXHRcdC8vIE5PVEU6IGRlc3Ryb3kgcHJldmlvdXMgaW5zdGFuY2VzIGlmIGV4aXN0ZWRcblx0XHR0aGlzLmdsUmVmPy5kZXN0cm95KCk7XG5cblx0XHQvLyBOT1RFOiBGbGFnIHRoZSBjYW52YXMgYWN0aXZlLCByZW5kZXJpbmcgd2lsbCBub3cgYmVnaW5cblx0XHR0aGlzLnN0b3JlLnVwZGF0ZSgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IHRydWUgfSB9KSk7XG5cblx0XHRjb25zdCBbc3RhdGUsIGV2ZW50U291cmNlLCBldmVudFByZWZpeF0gPSBbXG5cdFx0XHR0aGlzLnN0b3JlLnNuYXBzaG90LFxuXHRcdFx0dW50cmFja2VkKHRoaXMuZXZlbnRTb3VyY2UpLFxuXHRcdFx0dW50cmFja2VkKHRoaXMuZXZlbnRQcmVmaXgpLFxuXHRcdF07XG5cblx0XHQvLyBjb25uZWN0IHRvIGV2ZW50IHNvdXJjZVxuXHRcdHN0YXRlLmV2ZW50cy5jb25uZWN0Py4oXG5cdFx0XHRldmVudFNvdXJjZSA/IChpcy5yZWYoZXZlbnRTb3VyY2UpID8gZXZlbnRTb3VyY2UubmF0aXZlRWxlbWVudCA6IGV2ZW50U291cmNlKSA6IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LFxuXHRcdCk7XG5cblx0XHQvLyBzZXR1cCBjb21wdXRlIGZvciBldmVudFByZWZpeFxuXHRcdGlmIChldmVudFByZWZpeCkge1xuXHRcdFx0c3RhdGUuc2V0RXZlbnRzKHtcblx0XHRcdFx0Y29tcHV0ZTogKGV2ZW50LCBzdG9yZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgcG9pbnRlciwgcmF5Y2FzdGVyLCBjYW1lcmEsIHNpemUgfSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdGNvbnN0IHggPSBldmVudFsoZXZlbnRQcmVmaXggKyAnWCcpIGFzIGtleW9mIE5ndERvbUV2ZW50XSBhcyBudW1iZXI7XG5cdFx0XHRcdFx0Y29uc3QgeSA9IGV2ZW50WyhldmVudFByZWZpeCArICdZJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcblx0XHRcdFx0XHRwb2ludGVyLnNldCgoeCAvIHNpemUud2lkdGgpICogMiAtIDEsIC0oeSAvIHNpemUuaGVpZ2h0KSAqIDIgKyAxKTtcblx0XHRcdFx0XHRyYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShwb2ludGVyLCBjYW1lcmEpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jcmVhdGVkLmVtaXQodGhpcy5zdG9yZS5zbmFwc2hvdCk7XG5cblx0XHRpZiAoIXRoaXMuc3RvcmUuc25hcHNob3QuZXZlbnRzLmNvbm5lY3RlZCkge1xuXHRcdFx0dGhpcy5zdG9yZS5zbmFwc2hvdC5ldmVudHMuY29ubmVjdD8uKGNhbnZhc0VsZW1lbnQpO1xuXHRcdH1cblxuXHRcdHRoaXMuZ2xSZWYgPSBjYW52YXNWY3IuY3JlYXRlRW1iZWRkZWRWaWV3KFxuXHRcdFx0Y2FudmFzQ29udGVudCxcblx0XHRcdHsgJGltcGxpY2l0OiBjYW52YXNFbGVtZW50LCBob3N0OiB0aGlzLmhvc3QubmF0aXZlRWxlbWVudCB9LFxuXHRcdFx0eyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuXHRcdCk7XG5cdFx0dGhpcy5nbFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IE5ndENhbnZhcyA9IFtOZ3RDYW52YXNJbXBsLCBOZ3RDYW52YXNDb250ZW50XSBhcyBjb25zdDtcbiJdfQ==","import { makeEnvironmentProviders, RendererFactory2 } from '@angular/core';\nimport { ɵDomRendererFactory2 as DomRendererFactory2 } from '@angular/platform-browser';\nimport { NGT_RENDERER_OPTIONS, NgtRendererFactory2 } from 'angular-three';\nexport function provideNgtRenderer(options = {}) {\n return makeEnvironmentProviders([\n { provide: NGT_RENDERER_OPTIONS, useValue: options },\n {\n provide: RendererFactory2,\n useFactory: (domRendererFactory) => new NgtRendererFactory2(domRendererFactory),\n deps: [DomRendererFactory2],\n },\n ]);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZG9tL3NyYy9saWIvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBbUMsTUFBTSxlQUFlLENBQUM7QUFFM0csTUFBTSxVQUFVLGtCQUFrQixDQUFDLFVBQXNDLEVBQUU7SUFDMUUsT0FBTyx3QkFBd0IsQ0FBQztRQUMvQixFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO1FBQ3BEO1lBQ0MsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixVQUFVLEVBQUUsQ0FBQyxrQkFBb0MsRUFBRSxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztTQUMzQjtLQUNELENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IMm1RG9tUmVuZGVyZXJGYWN0b3J5MiBhcyBEb21SZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOR1RfUkVOREVSRVJfT1BUSU9OUywgTmd0UmVuZGVyZXJGYWN0b3J5MiwgdHlwZSBOZ3RSZW5kZXJlckZhY3RvcnkyT3B0aW9ucyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU5ndFJlbmRlcmVyKG9wdGlvbnM6IE5ndFJlbmRlcmVyRmFjdG9yeTJPcHRpb25zID0ge30pIHtcblx0cmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG5cdFx0eyBwcm92aWRlOiBOR1RfUkVOREVSRVJfT1BUSU9OUywgdXNlVmFsdWU6IG9wdGlvbnMgfSxcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBSZW5kZXJlckZhY3RvcnkyLFxuXHRcdFx0dXNlRmFjdG9yeTogKGRvbVJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MikgPT4gbmV3IE5ndFJlbmRlcmVyRmFjdG9yeTIoZG9tUmVuZGVyZXJGYWN0b3J5KSxcblx0XHRcdGRlcHM6IFtEb21SZW5kZXJlckZhY3RvcnkyXSxcblx0XHR9LFxuXHRdKTtcbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1kb20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZG9tL3NyYy9hbmd1bGFyLXRocmVlLWRvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["DomRendererFactory2"],"mappings":";;;;;;;AACA,MAAM,UAAU,GAAG;AACnB,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,WAAW,EAAE,KAAK;AACtB,IAAI,QAAQ,EAAE,KAAK;AACnB,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,SAAS,EAAE,IAAI;AACnB,IAAI,YAAY,EAAE,IAAI;AACtB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,aAAa,EAAE,IAAI;AACvB,IAAI,kBAAkB,EAAE,IAAI;AAC5B,CAAC;AACM,MAAM,eAAe,GAAG;AAC/B,IAAI,OAAO;AACX,IAAI,aAAa;AACjB,IAAI,UAAU;AACd,IAAI,WAAW;AACf,IAAI,aAAa;AACjB,IAAI,aAAa;AACjB,IAAI,YAAY;AAChB,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,aAAa;AACjB,IAAI,eAAe;AACnB,IAAI,eAAe;AACnB,IAAI,OAAO;AACX,CAAC;AACM,SAAS,mBAAmB,CAAC,KAAK,EAAE;AAC3C,IAAI,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;AACjD,IAAI,OAAO;AACX,QAAQ,QAAQ,EAAE,CAAC;AACnB,QAAQ,OAAO,EAAE,IAAI;AACrB,QAAQ,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AAClC,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ;AACvC;AACA;AACA,YAAY,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvH,YAAY,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;AACtE,SAAS;AACT,QAAQ,SAAS,EAAE,SAAS;AAC5B,QAAQ,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,kBAAkB,KAAK;AACnF,YAAY,QAAQ,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC;AAC5E,YAAY,OAAO,QAAQ;AAC3B,SAAS,EAAE,EAAE,CAAC;AACd,QAAQ,MAAM,EAAE,MAAM;AACtB,YAAY,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ;AACvD,YAAY,IAAI,QAAQ,CAAC,SAAS,EAAE,aAAa,IAAI,MAAM,CAAC,QAAQ;AACpE,gBAAgB,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC;AAC7E,SAAS;AACT,QAAQ,OAAO,EAAE,CAAC,MAAM,KAAK;AAC7B,YAAY,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ;AACxC,YAAY,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI;AACvC,YAAY,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAClD,YAAY,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK;AAC/F,gBAAgB,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;AACrD,gBAAgB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC;AAC7E,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,UAAU,EAAE,MAAM;AAC1B,YAAY,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,QAAQ;AACxD,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE;AAClC,gBAAgB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK;AAC7F,oBAAoB,IAAI,MAAM,CAAC,SAAS,YAAY,WAAW,EAAE;AACjE,wBAAwB,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC;AACrF;AACA,iBAAiB,CAAC;AAClB,gBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACnD;AACA,SAAS;AACT,KAAK;AACL;;ACjEO,MAAM,gBAAgB,CAAC;AAC9B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC3C,QAAQ,MAAM,KAAK,GAAG,WAAW,EAAE;AACnC,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAQ,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa;AACrD;AACA,QAAQ,WAAW,CAAC,IAAI,GAAG,uBAAuB;AAClD,QAAQ,WAAW,CAAC,uBAAuB,CAAC,GAAG,KAAK;AACpD;AACA,IAAI,OAAO,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE;AAC1C,QAAQ,OAAO,IAAI;AACnB;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAClL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,4BAA4B,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAChM;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;AAC1H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,4BAA4B,EAAE;AAC7D,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;AAChC,MAAM,aAAa,CAAC;AAC3B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,KAAK,GAAG,WAAW,EAAE;AAClC,QAAQ,IAAI,CAAC,QAAQ,GAAG,qBAAqB,EAAE;AAC/C,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACtC,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAClC,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/E,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnF,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,KAAK,KAAK;AACnG,oBAAoB,IAAI,KAAK,KAAK,EAAE;AACpC,wBAAwB,OAAO,gBAAgB,CAAC,KAAK,CAAC;AACtD,oBAAoB,OAAO,KAAK;AAChC,iBAAiB,EAAE,CAAC,GAAG,CAAC;AACxB,gBAAgB,SAAS,EAAE,CAAC,KAAK,KAAK;AACtC,oBAAoB,IAAI,KAAK,KAAK,EAAE;AACpC,wBAAwB,OAAO,gBAAgB,CAAC,KAAK,CAAC;AACtD,oBAAoB,OAAO,KAAK;AAChC,iBAAiB;AACjB,aAAa,CAAC,CAAC,CAAC;AAChB,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAC/I,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAC/I,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAC3I,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAC3J,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,mBAAmB,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChG,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE;AAC/B,QAAQ,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;AACrF,QAAQ,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC;AACtD,QAAQ,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AAClG,QAAQ,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC9F,QAAQ,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/I;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACnI,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F;AACA;AACA,QAAQ,eAAe,CAAC,MAAM;AAC9B,YAAY,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,aAAa,CAAC,GAAG;AAC9D,gBAAgB,IAAI,CAAC,wBAAwB,EAAE;AAC/C,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;AAC7C,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,aAAa;AACb,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAC9C,gBAAgB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACnE,aAAa,CAAC;AACd,YAAY,MAAM,CAAC,MAAM;AACzB,gBAAgB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxD,gBAAgB,IAAI,CAAC,YAAY,CAAC,KAAK;AACvC,oBAAoB,YAAY,CAAC,KAAK,IAAI,CAAC;AAC3C,oBAAoB,CAAC,YAAY,CAAC,MAAM;AACxC,oBAAoB,YAAY,CAAC,MAAM,IAAI,CAAC;AAC5C,oBAAoB;AACpB,gBAAgB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxD,gBAAgB,IAAI,CAAC,YAAY;AACjC,oBAAoB;AACpB,gBAAgB,MAAM,aAAa,GAAG;AACtC,oBAAoB,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;AACjC,oBAAoB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AAC3C,oBAAoB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACzC,oBAAoB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACzC,oBAAoB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACrC,oBAAoB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACrD,oBAAoB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC/C,oBAAoB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AACnD,oBAAoB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACnC,oBAAoB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC/C,oBAAoB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACvC,oBAAoB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACzC,oBAAoB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACzC,oBAAoB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AACnD,oBAAoB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AACnD,oBAAoB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACzC,oBAAoB,IAAI,EAAE,YAAY;AACtC,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAClD,oBAAoB,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC;AACzD,oBAAoB,IAAI,IAAI,CAAC,KAAK,EAAE;AACpC,wBAAwB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;AACxD,wBAAwB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAClD;AACA,yBAAyB;AACzB,wBAAwB,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC;AAClF;AACA,iBAAiB,CAAC;AAClB,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3C,SAAS,CAAC;AACV,QAAQ,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM;AAC3C,YAAY,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACjC,YAAY,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE;AAC1C,SAAS,CAAC;AACV;AACA,IAAI,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE;AAC1D;AACA,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B;AACA,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACzF,QAAQ,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG;AAClD,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC/B,YAAY,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,YAAY,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AACvC,SAAS;AACT;AACA,QAAQ,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,WAAW,IAAI,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,aAAa,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AACvI;AACA,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,KAAK,CAAC,SAAS,CAAC;AAC5B,gBAAgB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK;AAC3C,oBAAoB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ;AAC/E,oBAAoB,MAAM,CAAC,GAAG,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE;AACxD,oBAAoB,MAAM,CAAC,GAAG,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE;AACxD,oBAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrF,oBAAoB,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;AAC5D,iBAAiB;AACjB,aAAa,CAAC;AACd;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC9C,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE;AACnD,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC;AAC/D;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,kBAAkB,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC1J,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAClC;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/K,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,EAAE,cAAc,EAAE,8EAA8E,EAAE,EAAE,SAAS,EAAE;AACjiF,YAAY,oBAAoB,CAAC;AACjC,gBAAgB,UAAU,EAAE,KAAK;AACjC,gBAAgB,iBAAiB,EAAE,IAAI;AACvC,gBAAgB,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;AACnD,aAAa,CAAC;AACd,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE;AAC5D,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AACzb;AACA;AACA;AACA;AACA,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AACjN;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACvH,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,YAAY;AAC1C,oBAAoB,QAAQ,EAAE;AAC9B;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF,oBAAoB,OAAO,EAAE,CAAC,SAAS,CAAC;AACxC,oBAAoB,SAAS,EAAE;AAC/B,wBAAwB,oBAAoB,CAAC;AAC7C,4BAA4B,UAAU,EAAE,KAAK;AAC7C,4BAA4B,iBAAiB,EAAE,IAAI;AACnD,4BAA4B,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;AAC/D,yBAAyB,CAAC;AAC1B,wBAAwB,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE;AACxE,qBAAqB;AACrB,oBAAoB,IAAI,EAAE;AAC1B,wBAAwB,KAAK,EAAE,8EAA8E;AAC7G,wBAAwB,uBAAuB,EAAE,mBAAmB;AACpE,wBAAwB,eAAe,EAAE,MAAM;AAC/C,qBAAqB;AACrB,oBAAoB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AACnE,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;AAC3B,MAAC,SAAS,GAAG,CAAC,aAAa,EAAE,gBAAgB;;ACpMlD,SAAS,kBAAkB,CAAC,OAAO,GAAG,EAAE,EAAE;AACjD,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC5D,QAAQ;AACR,YAAY,OAAO,EAAE,gBAAgB;AACrC,YAAY,UAAU,EAAE,CAAC,kBAAkB,KAAK,IAAI,mBAAmB,CAAC,kBAAkB,CAAC;AAC3F,YAAY,IAAI,EAAE,CAACA,oBAAmB,CAAC;AACvC,SAAS;AACT,KAAK,CAAC;AACN;;ACZA;AACA;AACA;;;;"}
1
+ {"version":3,"file":"angular-three-dom.mjs","sources":["../../../../libs/core/dom/src/lib/events.ts","../../../../libs/core/dom/src/lib/canvas.ts","../../../../libs/core/dom/src/lib/renderer.ts","../../../../libs/core/dom/src/angular-three-dom.ts"],"sourcesContent":["import {\n\tcreateEvents,\n\tNgtAnyRecord,\n\tNgtDomEvent,\n\tNgtEventManager,\n\tNgtEvents,\n\tNgtState,\n\tSignalState,\n} from 'angular-three';\n\n/**\n * @fileoverview DOM event handling for Angular Three canvas.\n *\n * This module provides the default pointer event handling system for\n * Angular Three, translating DOM pointer events to Three.js raycasting events.\n */\n\nconst DOM_EVENTS = {\n\tclick: false,\n\tcontextmenu: false,\n\tdblclick: false,\n\twheel: false, // passive wheel errors with OrbitControls\n\tpointerdown: true,\n\tpointerup: true,\n\tpointerleave: true,\n\tpointermove: true,\n\tpointercancel: true,\n\tlostpointercapture: true,\n} as const;\n\n/**\n * List of supported pointer event names.\n */\nexport const supportedEvents = [\n\t'click',\n\t'contextmenu',\n\t'dblclick',\n\t'pointerup',\n\t'pointerdown',\n\t'pointerover',\n\t'pointerout',\n\t'pointerenter',\n\t'pointerleave',\n\t'pointermove',\n\t'pointermissed',\n\t'pointercancel',\n\t'wheel',\n] as const;\n\n/**\n * Creates the default pointer event manager for an Angular Three canvas.\n *\n * This function sets up event listeners on the canvas element and translates\n * DOM pointer events to Three.js raycasting events. It handles:\n * - Pointer position calculation\n * - Raycaster setup\n * - Event connection/disconnection\n * - Event propagation\n *\n * @param store - The Angular Three store\n * @returns An event manager for the canvas\n */\nexport function createPointerEvents(store: SignalState<NgtState>): NgtEventManager<HTMLElement> {\n\tconst { handlePointer } = createEvents(store);\n\n\treturn {\n\t\tpriority: 1,\n\t\tenabled: true,\n\t\tcompute: (event: NgtDomEvent, root: SignalState<NgtState>) => {\n\t\t\tconst state = root.snapshot;\n\t\t\t// https://github.com/pmndrs/react-three-fiber/pull/782\n\t\t\t// Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides\n\t\t\tstate.pointer.set((event.offsetX / state.size.width) * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);\n\t\t\tstate.raycaster.setFromCamera(state.pointer, state.camera);\n\t\t},\n\t\tconnected: undefined,\n\t\thandlers: Object.keys(DOM_EVENTS).reduce((handlers: NgtAnyRecord, supportedEventName) => {\n\t\t\thandlers[supportedEventName] = handlePointer(supportedEventName);\n\t\t\treturn handlers;\n\t\t}, {}) as NgtEvents,\n\t\tupdate: () => {\n\t\t\tconst { events, internal } = store.snapshot;\n\t\t\tif (internal.lastEvent?.nativeElement && events.handlers)\n\t\t\t\tevents.handlers.pointermove(internal.lastEvent.nativeElement);\n\t\t},\n\t\tconnect: (target: HTMLElement) => {\n\t\t\tconst state = store.snapshot;\n\t\t\tstate.events.disconnect?.();\n\n\t\t\tstate.setEvents({ connected: target });\n\n\t\t\tObject.entries(state.events.handlers ?? {}).forEach(\n\t\t\t\t([eventName, eventHandler]: [string, EventListener]) => {\n\t\t\t\t\tconst passive = DOM_EVENTS[eventName as keyof typeof DOM_EVENTS];\n\t\t\t\t\ttarget.addEventListener(eventName, eventHandler, { passive });\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tdisconnect: () => {\n\t\t\tconst { events, setEvents } = store.snapshot;\n\t\t\tif (events.connected) {\n\t\t\t\tObject.entries(events.handlers ?? {}).forEach(([eventName, eventHandler]: [string, EventListener]) => {\n\t\t\t\t\tif (events.connected instanceof HTMLElement) {\n\t\t\t\t\t\tevents.connected.removeEventListener(eventName, eventHandler);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tsetEvents({ connected: undefined });\n\t\t\t}\n\t\t},\n\t};\n}\n","import {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tElementRef,\n\tEmbeddedViewRef,\n\tinject,\n\tInjector,\n\tinput,\n\tNgZone,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tuntracked,\n\tviewChild,\n\tViewContainerRef,\n} from '@angular/core';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\nimport {\n\tcanvasRootInitializer,\n\tinjectStore,\n\tis,\n\tNGT_CANVAS_CONTENT_FLAG,\n\tNGT_STORE,\n\tNgtCamera,\n\tNgtCameraParameters,\n\tNgtCanvasConfigurator,\n\tNgtDomEvent,\n\tNgtDpr,\n\tNgtEventPrefix,\n\tNgtFrameloop,\n\tNgtGLOptions,\n\tNgtPerformance,\n\tNgtShadows,\n\tNgtSize,\n\tNgtState,\n\tNgtVector3,\n\tstoreFactory,\n} from 'angular-three';\nimport { NgxResize, provideResizeOptions, ResizeOptions, ResizeResult } from 'ngxtension/resize';\nimport * as THREE from 'three';\nimport { createPointerEvents } from './events';\n\n/**\n * Structural directive for defining the content to render inside the canvas.\n *\n * This directive marks the template content that will be rendered as Three.js\n * scene content. It must be used inside an `ngt-canvas` component.\n *\n * The template context provides:\n * - `$implicit`: The canvas element\n * - `host`: The host element containing the canvas\n *\n * @example\n * ```html\n * <ngt-canvas>\n * <ng-template canvasContent let-canvas let-host=\"host\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-basic-material />\n * </ngt-mesh>\n * </ng-template>\n * </ngt-canvas>\n * ```\n */\n@Directive({ selector: 'ng-template[canvasContent]' })\nexport class NgtCanvasContent {\n\tprivate canvas = inject(NgtCanvasImpl);\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\t\tconst vcr = inject(ViewContainerRef);\n\t\tconst commentNode = vcr.element.nativeElement;\n\n\t\t// NOTE: flag this canvasContent ng-template comment node as the start\n\t\tcommentNode.data = NGT_CANVAS_CONTENT_FLAG;\n\t\tcommentNode[NGT_CANVAS_CONTENT_FLAG] = store;\n\t}\n\n\tstatic ngTemplateContextGuard(\n\t\t_: NgtCanvasContent,\n\t\tctx: unknown,\n\t): ctx is { $implicit: HTMLCanvasElement; host: HTMLElement } {\n\t\treturn true;\n\t}\n}\n\n/**\n * The main canvas component for rendering Three.js scenes.\n *\n * This component creates a WebGL canvas and sets up the Three.js rendering context.\n * It handles:\n * - Canvas sizing and resize handling\n * - WebGL renderer initialization\n * - Camera and scene setup\n * - Event handling\n * - Render loop management\n *\n * @example\n * ```html\n * <ngt-canvas [shadows]=\"true\" [dpr]=\"[1, 2]\" (created)=\"onCreated($event)\">\n * <ng-template canvasContent>\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * <ngt-ambient-light />\n * </ng-template>\n * </ngt-canvas>\n * ```\n */\n@Component({\n\tselector: 'ngt-canvas',\n\ttemplate: `\n\t\t<div (ngxResize)=\"resizeResult.set($event)\" style=\"height: 100%; width: 100%;\">\n\t\t\t<canvas #glCanvas style=\"display: block;\"></canvas>\n\t\t\t<ng-content />\n\t\t</div>\n\t`,\n\timports: [NgxResize],\n\tproviders: [\n\t\tprovideResizeOptions({\n\t\t\temitInZone: false,\n\t\t\temitInitialResult: true,\n\t\t\tdebounce: { scroll: 50, resize: 0 },\n\t\t} as ResizeOptions),\n\t\t{ provide: NGT_STORE, useFactory: storeFactory },\n\t],\n\thost: {\n\t\tstyle: 'display: block;position: relative;width: 100%;height: 100%;overflow: hidden;',\n\t\t'[style.pointerEvents]': 'hbPointerEvents()',\n\t\tngSkipHydration: 'true',\n\t},\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtCanvasImpl {\n\tprivate store = injectStore();\n\tprivate initRoot = canvasRootInitializer();\n\n\tprivate host = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate zone = inject(NgZone);\n\tprivate injector = inject(Injector);\n\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 NgtShadows;\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<NgtFrameloop>('always');\n\tperformance = input<Partial<Omit<NgtPerformance, 'regress'>>>();\n\tdpr = input<NgtDpr>([1, 2]);\n\traycaster = input<Partial<THREE.Raycaster>>();\n\tscene = input<THREE.Scene | Partial<THREE.Scene>>();\n\tcamera = input<NgtCamera | NgtCameraParameters>();\n\tevents = input(createPointerEvents);\n\teventSource = input<HTMLElement | ElementRef<HTMLElement>>();\n\teventPrefix = input<NgtEventPrefix>('offset');\n\tlookAt = input<NgtVector3>();\n\n\tcreated = output<NgtState>();\n\tpointerMissed = outputFromObservable(this.store.snapshot.pointerMissed$);\n\n\tprivate glCanvas = viewChild.required<ElementRef<HTMLCanvasElement>>('glCanvas');\n\tprivate glCanvasViewContainerRef = viewChild.required('glCanvas', { read: ViewContainerRef });\n\tprivate canvasContentRef = contentChild.required(NgtCanvasContent, { read: TemplateRef });\n\n\tprotected hbPointerEvents = computed(() => (this.eventSource() ? 'none' : 'auto'));\n\n\t// NOTE: this signal is updated outside of Zone\n\tprotected resizeResult = signal<ResizeResult>({} as ResizeResult, { equal: Object.is });\n\tprivate configurator = signal<NgtCanvasConfigurator | null>(null);\n\n\tprivate glRef?: EmbeddedViewRef<unknown>;\n\n\tconstructor() {\n\t\t// NOTE: this means that everything in NgtCanvas will be in afterNextRender.\n\t\t// this allows the content of NgtCanvas to use effect instead of afterNextRender\n\t\tafterNextRender(() => {\n\t\t\tconst [canvasVcr, canvasElement, canvasContent] = [\n\t\t\t\tthis.glCanvasViewContainerRef(),\n\t\t\t\tthis.glCanvas().nativeElement,\n\t\t\t\tthis.canvasContentRef(),\n\t\t\t];\n\n\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\tthis.configurator.set(this.initRoot(canvasElement));\n\t\t\t});\n\n\t\t\teffect(\n\t\t\t\t() => {\n\t\t\t\t\tconst resizeResult = this.resizeResult();\n\t\t\t\t\tif (\n\t\t\t\t\t\t!resizeResult.width ||\n\t\t\t\t\t\tresizeResult.width <= 0 ||\n\t\t\t\t\t\t!resizeResult.height ||\n\t\t\t\t\t\tresizeResult.height <= 0\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tconst configurator = this.configurator();\n\t\t\t\t\tif (!configurator) return;\n\n\t\t\t\t\tconst canvasOptions = {\n\t\t\t\t\t\tgl: this.gl(),\n\t\t\t\t\t\tshadows: this.shadows(),\n\t\t\t\t\t\tlegacy: this.legacy(),\n\t\t\t\t\t\tlinear: this.linear(),\n\t\t\t\t\t\tflat: this.flat(),\n\t\t\t\t\t\torthographic: this.orthographic(),\n\t\t\t\t\t\tframeloop: this.frameloop(),\n\t\t\t\t\t\tperformance: this.performance(),\n\t\t\t\t\t\tdpr: this.dpr(),\n\t\t\t\t\t\traycaster: this.raycaster(),\n\t\t\t\t\t\tscene: this.scene(),\n\t\t\t\t\t\tcamera: this.camera(),\n\t\t\t\t\t\tevents: this.events(),\n\t\t\t\t\t\teventSource: this.eventSource(),\n\t\t\t\t\t\teventPrefix: this.eventPrefix(),\n\t\t\t\t\t\tlookAt: this.lookAt(),\n\t\t\t\t\t\tsize: resizeResult,\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\t\t\tconfigurator.configure(canvasOptions);\n\n\t\t\t\t\t\tif (this.glRef) {\n\t\t\t\t\t\t\tthis.store.snapshot.invalidate();\n\t\t\t\t\t\t\tthis.glRef.detectChanges();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.noZoneRender(canvasElement, canvasVcr, canvasContent);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t{ injector: this.injector },\n\t\t\t);\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.glRef?.destroy();\n\t\t\tthis.configurator()?.destroy();\n\t\t});\n\t}\n\n\tprivate noZoneRender(\n\t\tcanvasElement: HTMLCanvasElement,\n\t\tcanvasVcr: ViewContainerRef,\n\t\tcanvasContent: TemplateRef<unknown>,\n\t) {\n\t\t// NOTE: destroy previous instances if existed\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\tconst [state, eventSource, eventPrefix] = [\n\t\t\tthis.store.snapshot,\n\t\t\tuntracked(this.eventSource),\n\t\t\tuntracked(this.eventPrefix),\n\t\t];\n\n\t\t// connect to event source\n\t\tstate.events.connect?.(\n\t\t\teventSource ? (is.ref(eventSource) ? eventSource.nativeElement : eventSource) : this.host.nativeElement,\n\t\t);\n\n\t\t// setup compute for eventPrefix\n\t\tif (eventPrefix) {\n\t\t\tstate.setEvents({\n\t\t\t\tcompute: (event, store) => {\n\t\t\t\t\tconst { pointer, raycaster, camera, size } = store.snapshot;\n\t\t\t\t\tconst x = event[(eventPrefix + 'X') as keyof NgtDomEvent] as number;\n\t\t\t\t\tconst y = event[(eventPrefix + 'Y') as keyof NgtDomEvent] as number;\n\t\t\t\t\tpointer.set((x / size.width) * 2 - 1, -(y / size.height) * 2 + 1);\n\t\t\t\t\traycaster.setFromCamera(pointer, camera);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthis.created.emit(this.store.snapshot);\n\n\t\tif (!this.store.snapshot.events.connected) {\n\t\t\tthis.store.snapshot.events.connect?.(canvasElement);\n\t\t}\n\n\t\tthis.glRef = canvasVcr.createEmbeddedView(\n\t\t\tcanvasContent,\n\t\t\t{ $implicit: canvasElement, host: this.host.nativeElement },\n\t\t\t{ injector: this.injector },\n\t\t);\n\t\tthis.glRef.detectChanges();\n\t}\n}\n\n/**\n * Array containing NgtCanvasImpl and NgtCanvasContent for convenient importing.\n *\n * @example\n * ```typescript\n * @Component({\n * imports: [NgtCanvas],\n * })\n * export class AppComponent {}\n * ```\n */\nexport const NgtCanvas = [NgtCanvasImpl, NgtCanvasContent] as const;\n","import { makeEnvironmentProviders, RendererFactory2 } from '@angular/core';\nimport { ɵDomRendererFactory2 as DomRendererFactory2 } from '@angular/platform-browser';\nimport { NGT_RENDERER_OPTIONS, NgtRendererFactory2, type NgtRendererFactory2Options } from 'angular-three';\n\n/**\n * Provides the Angular Three renderer for use in a standalone application.\n *\n * This function should be called in your application's providers array to\n * enable Angular Three's custom renderer for Three.js elements.\n *\n * @param options - Optional renderer configuration\n * @returns Environment providers for the Angular Three renderer\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * import { ApplicationConfig } from '@angular/core';\n * import { provideNgtRenderer } from 'angular-three/dom';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideNgtRenderer(),\n * // or with options:\n * provideNgtRenderer({ verbose: true })\n * ]\n * };\n * ```\n */\nexport function provideNgtRenderer(options: NgtRendererFactory2Options = {}) {\n\treturn makeEnvironmentProviders([\n\t\t{ provide: NGT_RENDERER_OPTIONS, useValue: options },\n\t\t{\n\t\t\tprovide: RendererFactory2,\n\t\t\tuseFactory: (domRendererFactory: RendererFactory2) => new NgtRendererFactory2(domRendererFactory),\n\t\t\tdeps: [DomRendererFactory2],\n\t\t},\n\t]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DomRendererFactory2"],"mappings":"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"}
@@ -4,6 +4,15 @@ import { TestBed } from '@angular/core/testing';
4
4
  import { ɵDomRendererFactory2 as _DomRendererFactory2 } from '@angular/platform-browser';
5
5
  import { injectStore, NGT_CANVAS_CONTENT_FLAG, NGT_RENDERER_NODE_FLAG, NgtRendererFactory2, storeFactory, NGT_STORE, canvasRootInitializer, getInstanceState } from 'angular-three';
6
6
 
7
+ /**
8
+ * Internal test component used by NgtTestBed.
9
+ *
10
+ * This component provides a container for rendering scene graph components
11
+ * during testing. It automatically sets up the necessary flags and context
12
+ * for the Angular Three renderer.
13
+ *
14
+ * @internal
15
+ */
7
16
  class NgtTestCanvas {
8
17
  constructor() {
9
18
  this.sceneGraph = input.required(...(ngDevMode ? [{ debugName: "sceneGraph" }] : []));
@@ -35,12 +44,12 @@ class NgtTestCanvas {
35
44
  destroy() {
36
45
  this.sceneRef?.destroy();
37
46
  }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NgtTestCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.7", type: NgtTestCanvas, isStandalone: true, selector: "ngt-test-canvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null }, sceneGraphInputs: { classPropertyName: "sceneGraphInputs", publicName: "sceneGraphInputs", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "anchorRef", first: true, predicate: ["anchor"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgtTestCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.6", type: NgtTestCanvas, isStandalone: true, selector: "ngt-test-canvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null }, sceneGraphInputs: { classPropertyName: "sceneGraphInputs", publicName: "sceneGraphInputs", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "anchorRef", first: true, predicate: ["anchor"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
40
49
  <ng-container #anchor />
41
50
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
42
51
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NgtTestCanvas, decorators: [{
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgtTestCanvas, decorators: [{
44
53
  type: Component,
45
54
  args: [{
46
55
  selector: 'ngt-test-canvas',
@@ -49,7 +58,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
49
58
  `,
50
59
  changeDetection: ChangeDetectionStrategy.OnPush,
51
60
  }]
52
- }], ctorParameters: () => [] });
61
+ }], ctorParameters: () => [], propDecorators: { sceneGraph: [{ type: i0.Input, args: [{ isSignal: true, alias: "sceneGraph", required: true }] }], sceneGraphInputs: [{ type: i0.Input, args: [{ isSignal: true, alias: "sceneGraphInputs", required: false }] }], anchorRef: [{ type: i0.ViewChild, args: ['anchor', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
53
62
 
54
63
  const functions = [
55
64
  'activeTexture',
@@ -839,6 +848,34 @@ function createMockCanvas({ width = 1280, height = 800, beforeReturn, }) {
839
848
  return canvas;
840
849
  }
841
850
 
851
+ /**
852
+ * Test utilities for Angular Three components.
853
+ *
854
+ * NgtTestBed provides a testing environment for Angular Three scene graphs,
855
+ * similar to Angular's TestBed but specifically designed for Three.js rendering.
856
+ *
857
+ * Features:
858
+ * - Scene graph component testing
859
+ * - Event firing simulation
860
+ * - Frame advancement
861
+ * - Scene hierarchy inspection
862
+ *
863
+ * @example
864
+ * ```typescript
865
+ * const { fixture, scene, fireEvent, advance, toGraph } = NgtTestBed.create(MySceneComponent);
866
+ *
867
+ * // Test the scene structure
868
+ * const graph = toGraph();
869
+ * expect(graph).toContainEqual({ type: 'Mesh', name: 'box', children: [] });
870
+ *
871
+ * // Simulate events
872
+ * const mesh = scene.getObjectByName('box');
873
+ * await fireEvent(mesh, 'click');
874
+ *
875
+ * // Advance animation frames
876
+ * await advance(10, 0.016);
877
+ * ```
878
+ */
842
879
  class NgtTestBed {
843
880
  static create(sceneGraph, { sceneGraphInputs = {}, mockCanvasOptions = {}, canvasConfiguration = {}, errorOnUnknownElements, providers, declarations, imports, teardown, deferBlockBehavior, } = {}) {
844
881
  const mockedCanvas = createMockCanvas(mockCanvasOptions);