angular-three-soba 4.2.0 → 4.2.2

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.
Files changed (30) hide show
  1. package/fesm2022/angular-three-soba-abstractions.mjs +98 -98
  2. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  3. package/fesm2022/angular-three-soba-cameras.mjs +26 -26
  4. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  5. package/fesm2022/angular-three-soba-controls.mjs +32 -32
  6. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  7. package/fesm2022/angular-three-soba-gizmos.mjs +119 -119
  8. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
  9. package/fesm2022/angular-three-soba-loaders.mjs +6 -6
  10. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  11. package/fesm2022/angular-three-soba-materials.mjs +75 -75
  12. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  13. package/fesm2022/angular-three-soba-misc.mjs +85 -76
  14. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  15. package/fesm2022/angular-three-soba-performances.mjs +164 -60
  16. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-staging.mjs +257 -257
  18. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-stats.mjs +5 -5
  20. package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
  21. package/package.json +141 -140
  22. package/performances/README.md +47 -0
  23. package/types/angular-three-soba-abstractions.d.ts +57 -57
  24. package/types/angular-three-soba-cameras.d.ts +3 -3
  25. package/types/angular-three-soba-controls.d.ts +4 -4
  26. package/types/angular-three-soba-gizmos.d.ts +4 -4
  27. package/types/angular-three-soba-materials.d.ts +4 -4
  28. package/types/angular-three-soba-misc.d.ts +16 -5
  29. package/types/angular-three-soba-performances.d.ts +55 -9
  30. package/types/angular-three-soba-staging.d.ts +13 -13
@@ -1,11 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, booleanAttribute, effect, untracked, inject, DestroyRef, Directive, viewChild, signal, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, Component, computed } from '@angular/core';
2
+ import { input, booleanAttribute, effect, untracked, inject, DestroyRef, Directive, viewChild, signal, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, Component, computed, TemplateRef, ElementRef, contentChildren } from '@angular/core';
3
3
  import { injectStore, omit, pick, extend, is, getInstanceState, beforeRender, resolveRef, checkUpdate, vector3, NgtArgs } from 'angular-three';
4
4
  import { mergeInputs } from 'ngxtension/inject-inputs';
5
5
  import * as THREE from 'three';
6
- import { Group, LOD, InstancedBufferAttribute, InstancedMesh, BufferGeometry, BufferAttribute, Points } from 'three';
6
+ import { Group, LOD, InstancedBufferAttribute, InstancedMesh, Vector3, BufferGeometry, BufferAttribute, Points } from 'three';
7
7
  import { SAH, acceleratedRaycast, computeBoundsTree, disposeBoundsTree } from 'three-mesh-bvh';
8
8
  import { setUpdateRange } from 'angular-three-soba/misc';
9
+ import { NgTemplateOutlet } from '@angular/common';
9
10
  import { Line2, LineMaterial, LineSegmentsGeometry } from 'three-stdlib';
10
11
 
11
12
  /**
@@ -29,7 +30,7 @@ class NgtsAdaptiveDpr {
29
30
  * This can provide a retro aesthetic or indicate to users that performance mode is active.
30
31
  * @default false
31
32
  */
32
- this.pixelated = input(false, { ...(ngDevMode ? { debugName: "pixelated" } : {}), transform: booleanAttribute });
33
+ this.pixelated = input(false, { ...(ngDevMode ? { debugName: "pixelated" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
33
34
  const store = injectStore();
34
35
  effect(() => {
35
36
  const [current, pixelated, domElement, setDpr, initialDpr] = [
@@ -57,10 +58,10 @@ class NgtsAdaptiveDpr {
57
58
  domElement.style.imageRendering = 'auto';
58
59
  });
59
60
  }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsAdaptiveDpr, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
61
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: NgtsAdaptiveDpr, isStandalone: true, selector: "ngts-adaptive-dpr", inputs: { pixelated: { classPropertyName: "pixelated", publicName: "pixelated", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsAdaptiveDpr, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
62
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NgtsAdaptiveDpr, isStandalone: true, selector: "ngts-adaptive-dpr", inputs: { pixelated: { classPropertyName: "pixelated", publicName: "pixelated", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
62
63
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
64
65
  type: Directive,
65
66
  args: [{ selector: 'ngts-adaptive-dpr' }]
66
67
  }], ctorParameters: () => [], propDecorators: { pixelated: [{ type: i0.Input, args: [{ isSignal: true, alias: "pixelated", required: false }] }] } });
@@ -92,10 +93,10 @@ class NgtsAdaptiveEvents {
92
93
  store.snapshot.setEvents({ enabled: currentEnabled });
93
94
  });
94
95
  }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsAdaptiveEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
96
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: NgtsAdaptiveEvents, isStandalone: true, selector: "ngts-adaptive-events", ngImport: i0 }); }
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsAdaptiveEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
97
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: NgtsAdaptiveEvents, isStandalone: true, selector: "ngts-adaptive-events", ngImport: i0 }); }
97
98
  }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
99
100
  type: Directive,
100
101
  args: [{ selector: 'ngts-adaptive-events' }]
101
102
  }], ctorParameters: () => [] });
@@ -133,7 +134,7 @@ class NgtsBVH {
133
134
  /**
134
135
  * Configuration options for BVH construction and raycasting behavior.
135
136
  */
136
- this.options = input(defaultOptions$2, { ...(ngDevMode ? { debugName: "options" } : {}), transform: mergeInputs(defaultOptions$2) });
137
+ this.options = input(defaultOptions$2, { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), transform: mergeInputs(defaultOptions$2) });
137
138
  /** @internal */
138
139
  this.parameters = omit(this.options, [
139
140
  'enabled',
@@ -158,7 +159,7 @@ class NgtsBVH {
158
159
  this.maxDepth = pick(this.options, 'maxDepth');
159
160
  this.maxLeafTris = pick(this.options, 'maxLeafTris');
160
161
  this.indirect = pick(this.options, 'indirect');
161
- this.reset = signal(Math.random(), ...(ngDevMode ? [{ debugName: "reset" }] : []));
162
+ this.reset = signal(Math.random(), ...(ngDevMode ? [{ debugName: "reset" }] : /* istanbul ignore next */ []));
162
163
  this.retryMap = new Map();
163
164
  this.MAX_RETRIES = 3;
164
165
  extend({ Group });
@@ -225,14 +226,14 @@ class NgtsBVH {
225
226
  this.retryMap.clear();
226
227
  });
227
228
  }
228
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsBVH, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
229
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: NgtsBVH, isStandalone: true, selector: "ngts-bvh", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }], ngImport: i0, template: `
229
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsBVH, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
230
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsBVH, isStandalone: true, selector: "ngts-bvh", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }], ngImport: i0, template: `
230
231
  <ngt-group #group [parameters]="parameters()">
231
232
  <ng-content />
232
233
  </ngt-group>
233
234
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
234
235
  }
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsBVH, decorators: [{
236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsBVH, decorators: [{
236
237
  type: Component,
237
238
  args: [{
238
239
  selector: 'ngts-bvh',
@@ -272,11 +273,11 @@ class NgtsDetailed {
272
273
  * The first distance corresponds to the first child (highest detail),
273
274
  * and subsequent distances correspond to lower detail children.
274
275
  */
275
- this.distances = input.required(...(ngDevMode ? [{ debugName: "distances" }] : []));
276
+ this.distances = input.required(...(ngDevMode ? [{ debugName: "distances" }] : /* istanbul ignore next */ []));
276
277
  /**
277
278
  * Configuration options for the LOD behavior.
278
279
  */
279
- this.options = input(defaultOptions$1, { ...(ngDevMode ? { debugName: "options" } : {}), transform: mergeInputs(defaultOptions$1) });
280
+ this.options = input(defaultOptions$1, { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), transform: mergeInputs(defaultOptions$1) });
280
281
  /** @internal */
281
282
  this.parameters = omit(this.options, ['hysteresis']);
282
283
  /**
@@ -300,14 +301,14 @@ class NgtsDetailed {
300
301
  this.lodRef().nativeElement.update(camera);
301
302
  });
302
303
  }
303
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsDetailed, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
304
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: NgtsDetailed, isStandalone: true, selector: "ngts-detailed", inputs: { distances: { classPropertyName: "distances", publicName: "distances", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lodRef", first: true, predicate: ["lod"], descendants: true, isSignal: true }], ngImport: i0, template: `
304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsDetailed, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
305
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsDetailed, isStandalone: true, selector: "ngts-detailed", inputs: { distances: { classPropertyName: "distances", publicName: "distances", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lodRef", first: true, predicate: ["lod"], descendants: true, isSignal: true }], ngImport: i0, template: `
305
306
  <ngt-lOD #lod [parameters]="parameters()">
306
307
  <ng-content />
307
308
  </ngt-lOD>
308
309
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
309
310
  }
310
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsDetailed, decorators: [{
311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsDetailed, decorators: [{
311
312
  type: Component,
312
313
  args: [{
313
314
  selector: 'ngts-detailed',
@@ -418,7 +419,7 @@ class NgtsInstance {
418
419
  /**
419
420
  * Options passed to the underlying PositionMesh, including position, rotation, scale, and color.
420
421
  */
421
- this.options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : []));
422
+ this.options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
422
423
  /** @internal */
423
424
  this.instances = inject(NgtsInstances);
424
425
  /**
@@ -431,14 +432,14 @@ class NgtsInstance {
431
432
  onCleanup(() => cleanup());
432
433
  });
433
434
  }
434
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsInstance, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
435
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: NgtsInstance, isStandalone: true, selector: "ngts-instance", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "positionMeshRef", first: true, predicate: ["positionMesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsInstance, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsInstance, isStandalone: true, selector: "ngts-instance", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "positionMeshRef", first: true, predicate: ["positionMesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
436
437
  <ngt-position-mesh #positionMesh [instance]="instances.instancedMeshRef()" [parameters]="options()">
437
438
  <ng-content />
438
439
  </ngt-position-mesh>
439
440
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
440
441
  }
441
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsInstance, decorators: [{
442
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsInstance, decorators: [{
442
443
  type: Component,
443
444
  args: [{
444
445
  selector: 'ngts-instance',
@@ -483,7 +484,7 @@ class NgtsInstances {
483
484
  /**
484
485
  * Configuration options for the instanced rendering.
485
486
  */
486
- this.options = input(defaultOptions, { ...(ngDevMode ? { debugName: "options" } : {}), transform: mergeInputs(defaultOptions) });
487
+ this.options = input(defaultOptions, { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), transform: mergeInputs(defaultOptions) });
487
488
  /** @internal */
488
489
  this.parameters = omit(this.options, ['limit', 'frames', 'range']);
489
490
  /**
@@ -500,7 +501,7 @@ class NgtsInstances {
500
501
  }
501
502
  const colors = new Float32Array([...Array.from({ length: limit * 3 }, () => 1)]);
502
503
  return { matrices, colors };
503
- }, ...(ngDevMode ? [{ debugName: "buffers" }] : []));
504
+ }, ...(ngDevMode ? [{ debugName: "buffers" }] : /* istanbul ignore next */ []));
504
505
  /**
505
506
  * Array of registered instance references. Used internally to track all instances.
506
507
  */
@@ -559,8 +560,8 @@ class NgtsInstances {
559
560
  this.instances = this.instances.filter((i) => i !== ref);
560
561
  };
561
562
  }
562
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
563
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: NgtsInstances, isStandalone: true, selector: "ngts-instances", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "instancedMeshRef", first: true, predicate: ["instancedMesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
563
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
564
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsInstances, isStandalone: true, selector: "ngts-instances", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "instancedMeshRef", first: true, predicate: ["instancedMesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
564
565
  <ngt-instanced-mesh
565
566
  #instancedMesh
566
567
  [userData]="{ instances }"
@@ -586,7 +587,7 @@ class NgtsInstances {
586
587
  </ngt-instanced-mesh>
587
588
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
588
589
  }
589
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsInstances, decorators: [{
590
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsInstances, decorators: [{
590
591
  type: Component,
591
592
  args: [{
592
593
  selector: 'ngts-instances',
@@ -620,6 +621,109 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
620
621
  }]
621
622
  }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], instancedMeshRef: [{ type: i0.ViewChild, args: ['instancedMesh', { isSignal: true }] }] } });
622
623
 
624
+ const defaultLodLevelOptions = {
625
+ distance: 0,
626
+ hysteresis: 0,
627
+ };
628
+ const _v1 = new Vector3();
629
+ const _v2 = new Vector3();
630
+ /**
631
+ * Helper directive to capture a template to attach to
632
+ * an NgtsLOD component.
633
+ */
634
+ class NgtsLODLevel {
635
+ constructor() {
636
+ this.lodLevel = input(defaultLodLevelOptions, { ...(ngDevMode ? { debugName: "lodLevel" } : /* istanbul ignore next */ {}), transform: mergeInputs(defaultLodLevelOptions) });
637
+ this.template = inject(TemplateRef);
638
+ }
639
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsLODLevel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
640
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: NgtsLODLevel, isStandalone: true, selector: "ng-template[lodLevel]", inputs: { lodLevel: { classPropertyName: "lodLevel", publicName: "lodLevel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
641
+ }
642
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsLODLevel, decorators: [{
643
+ type: Directive,
644
+ args: [{
645
+ selector: 'ng-template[lodLevel]',
646
+ }]
647
+ }], propDecorators: { lodLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "lodLevel", required: false }] }] } });
648
+ /**
649
+ * Angular-native port of THREE.LOD
650
+ *
651
+ * Allows to display an object with several levels of details.
652
+ *
653
+ * The main difference with THREE.LOD is that we use angular-three
654
+ * to add/remove the right object from the scene graph, rather than
655
+ * setting the visible flag on one of the object, but keeping them
656
+ * all in the graph.
657
+ *
658
+ * Usage:
659
+ *
660
+ * ```html
661
+ * <ngt-group lod [maxDistance]="10000">
662
+ * <ngt-mesh *lodLevel />
663
+ * <ngt-mesh *lodLevel="{distance: 100, hysteresis: 0.1}" />
664
+ * <ngt-mesh *lodLevel="{distance: 1000}" />
665
+ * </ngt-group>
666
+ * ```
667
+ */
668
+ class NgtsLODImpl {
669
+ constructor() {
670
+ this.maxDistance = input(...(ngDevMode ? [undefined, { debugName: "maxDistance" }] : /* istanbul ignore next */ []));
671
+ this.store = injectStore();
672
+ this.container = inject(ElementRef);
673
+ this.levels = contentChildren(NgtsLODLevel, ...(ngDevMode ? [{ debugName: "levels" }] : /* istanbul ignore next */ []));
674
+ this.level = signal(undefined, ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
675
+ beforeRender(() => {
676
+ const levels = this.levels();
677
+ const currentLevel = this.level();
678
+ const maxDistance = this.maxDistance();
679
+ let level = levels[0];
680
+ if (level && (levels.length > 1 || maxDistance)) {
681
+ const container = this.container.nativeElement;
682
+ const { matrixWorld, zoom } = this.store.snapshot.camera;
683
+ _v1.setFromMatrixPosition(matrixWorld);
684
+ _v2.setFromMatrixPosition(container.matrixWorld);
685
+ const distance = _v1.distanceTo(_v2) / zoom;
686
+ if (maxDistance && distance > maxDistance) {
687
+ level = undefined;
688
+ }
689
+ else {
690
+ for (let i = 1, l = levels.length; i < l; i++) {
691
+ const _level = levels[i];
692
+ let { distance: levelDistance, hysteresis } = _level.lodLevel();
693
+ if (hysteresis && currentLevel === _level) {
694
+ levelDistance -= levelDistance * hysteresis;
695
+ }
696
+ if (distance >= levelDistance) {
697
+ level = _level;
698
+ }
699
+ else {
700
+ break;
701
+ }
702
+ }
703
+ }
704
+ }
705
+ if (level !== currentLevel) {
706
+ this.level.set(level);
707
+ }
708
+ });
709
+ }
710
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsLODImpl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
711
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsLODImpl, isStandalone: true, selector: "[lod]", inputs: { maxDistance: { classPropertyName: "maxDistance", publicName: "maxDistance", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "levels", predicate: NgtsLODLevel, isSignal: true }], ngImport: i0, template: `
712
+ <ng-container [ngTemplateOutlet]="level()?.template" />
713
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
714
+ }
715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsLODImpl, decorators: [{
716
+ type: Component,
717
+ args: [{
718
+ selector: '[lod]',
719
+ template: `
720
+ <ng-container [ngTemplateOutlet]="level()?.template" />
721
+ `,
722
+ imports: [NgTemplateOutlet],
723
+ }]
724
+ }], ctorParameters: () => [], propDecorators: { maxDistance: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDistance", required: false }] }], levels: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => NgtsLODLevel), { isSignal: true }] }] } });
725
+ const NgtsLOD = [NgtsLODImpl, NgtsLODLevel];
726
+
623
727
  const _inverseMatrix = new THREE.Matrix4();
624
728
  const _ray = new THREE.Ray();
625
729
  const _sphere = new THREE.Sphere();
@@ -713,7 +817,7 @@ class NgtsPoint {
713
817
  /**
714
818
  * Options passed to the underlying PositionPoint, including position, color, and size.
715
819
  */
716
- this.options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : []));
820
+ this.options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
717
821
  /**
718
822
  * Reference to the underlying PositionPoint element.
719
823
  */
@@ -726,14 +830,14 @@ class NgtsPoint {
726
830
  onCleanup(() => cleanUp());
727
831
  });
728
832
  }
729
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsPoint, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
730
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: NgtsPoint, isStandalone: true, selector: "ngts-point", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "positionPointRef", first: true, predicate: ["positionPoint"], descendants: true, isSignal: true }], ngImport: i0, template: `
833
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsPoint, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
834
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsPoint, isStandalone: true, selector: "ngts-point", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "positionPointRef", first: true, predicate: ["positionPoint"], descendants: true, isSignal: true }], ngImport: i0, template: `
731
835
  <ngt-position-point #positionPoint [parameters]="options()" [instance]="points.pointsRef()">
732
836
  <ng-content />
733
837
  </ngt-position-point>
734
838
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
735
839
  }
736
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsPoint, decorators: [{
840
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsPoint, decorators: [{
737
841
  type: Component,
738
842
  args: [{
739
843
  selector: 'ngts-point',
@@ -767,26 +871,26 @@ class NgtsPointsBuffer {
767
871
  * Float32Array containing point positions. Length should be divisible by stride.
768
872
  * For 3D points (stride=3): [x1, y1, z1, x2, y2, z2, ...]
769
873
  */
770
- this.positions = input.required(...(ngDevMode ? [{ debugName: "positions" }] : []));
874
+ this.positions = input.required(...(ngDevMode ? [{ debugName: "positions" }] : /* istanbul ignore next */ []));
771
875
  /**
772
876
  * Optional Float32Array containing RGB color values for each point.
773
877
  * Length should be (positions.length / stride) * 3.
774
878
  */
775
- this.colors = input(...(ngDevMode ? [undefined, { debugName: "colors" }] : []));
879
+ this.colors = input(...(ngDevMode ? [undefined, { debugName: "colors" }] : /* istanbul ignore next */ []));
776
880
  /**
777
881
  * Optional Float32Array containing size values for each point.
778
882
  * Length should be positions.length / stride.
779
883
  */
780
- this.sizes = input(...(ngDevMode ? [undefined, { debugName: "sizes" }] : []));
884
+ this.sizes = input(...(ngDevMode ? [undefined, { debugName: "sizes" }] : /* istanbul ignore next */ []));
781
885
  /**
782
886
  * The number of components per position (2 for 2D, 3 for 3D).
783
887
  * @default 3
784
888
  */
785
- this.stride = input(3, ...(ngDevMode ? [{ debugName: "stride" }] : []));
889
+ this.stride = input(3, ...(ngDevMode ? [{ debugName: "stride" }] : /* istanbul ignore next */ []));
786
890
  /**
787
891
  * Additional options passed to the Points object.
788
892
  */
789
- this.options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : []));
893
+ this.options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
790
894
  /**
791
895
  * Reference to the underlying THREE.Points element.
792
896
  */
@@ -806,8 +910,8 @@ class NgtsPointsBuffer {
806
910
  checkUpdate(attributes['size']);
807
911
  });
808
912
  }
809
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsPointsBuffer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
810
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: NgtsPointsBuffer, isStandalone: true, selector: "ngts-points-buffer", inputs: { positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: true, transformFunction: null }, colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: false, transformFunction: null }, sizes: { classPropertyName: "sizes", publicName: "sizes", isSignal: true, isRequired: false, transformFunction: null }, stride: { classPropertyName: "stride", publicName: "stride", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "pointsRef", first: true, predicate: ["points"], descendants: true, isSignal: true }], ngImport: i0, template: `
913
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsPointsBuffer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
914
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NgtsPointsBuffer, isStandalone: true, selector: "ngts-points-buffer", inputs: { positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: true, transformFunction: null }, colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: false, transformFunction: null }, sizes: { classPropertyName: "sizes", publicName: "sizes", isSignal: true, isRequired: false, transformFunction: null }, stride: { classPropertyName: "stride", publicName: "stride", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "pointsRef", first: true, predicate: ["points"], descendants: true, isSignal: true }], ngImport: i0, template: `
811
915
  <ngt-points #points [parameters]="options()">
812
916
  <ngt-buffer-geometry>
813
917
  <ngt-buffer-attribute
@@ -840,7 +944,7 @@ class NgtsPointsBuffer {
840
944
  </ngt-points>
841
945
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
842
946
  }
843
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsPointsBuffer, decorators: [{
947
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsPointsBuffer, decorators: [{
844
948
  type: Component,
845
949
  args: [{
846
950
  selector: 'ngts-points-buffer',
@@ -905,7 +1009,7 @@ class NgtsPointsInstances {
905
1009
  /**
906
1010
  * Configuration options for the points rendering.
907
1011
  */
908
- this.options = input(defaultInstancesOptions, { ...(ngDevMode ? { debugName: "options" } : {}), transform: mergeInputs(defaultInstancesOptions) });
1012
+ this.options = input(defaultInstancesOptions, { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), transform: mergeInputs(defaultInstancesOptions) });
909
1013
  /**
910
1014
  * Computed parameters passed to the underlying Points object.
911
1015
  */
@@ -925,7 +1029,7 @@ class NgtsPointsInstances {
925
1029
  colors: Float32Array.from({ length: limit * 3 }, () => 1),
926
1030
  sizes: Float32Array.from({ length: limit }, () => 1),
927
1031
  };
928
- }, ...(ngDevMode ? [{ debugName: "buffers" }] : []));
1032
+ }, ...(ngDevMode ? [{ debugName: "buffers" }] : /* istanbul ignore next */ []));
929
1033
  /**
930
1034
  * Array of registered point references. Used internally to track all points.
931
1035
  */
@@ -976,8 +1080,8 @@ class NgtsPointsInstances {
976
1080
  this.positionPoints = this.positionPoints.filter((p) => p !== ref);
977
1081
  };
978
1082
  }
979
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsPointsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
980
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: NgtsPointsInstances, isStandalone: true, selector: "ngts-points-instances", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "pointsRef", first: true, predicate: ["points"], descendants: true, isSignal: true }], ngImport: i0, template: `
1083
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsPointsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1084
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsPointsInstances, isStandalone: true, selector: "ngts-points-instances", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "pointsRef", first: true, predicate: ["points"], descendants: true, isSignal: true }], ngImport: i0, template: `
981
1085
  <ngt-points
982
1086
  #points
983
1087
  [userData]="{ instances: positionPoints }"
@@ -1012,7 +1116,7 @@ class NgtsPointsInstances {
1012
1116
  </ngt-points>
1013
1117
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1014
1118
  }
1015
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsPointsInstances, decorators: [{
1119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsPointsInstances, decorators: [{
1016
1120
  type: Component,
1017
1121
  args: [{
1018
1122
  selector: 'ngts-points-instances',
@@ -1090,17 +1194,17 @@ class NgtsSegment {
1090
1194
  * The starting point of the line segment.
1091
1195
  * Accepts a Vector3-like value: [x, y, z], {x, y, z}, or THREE.Vector3.
1092
1196
  */
1093
- this.start = input.required(...(ngDevMode ? [{ debugName: "start" }] : []));
1197
+ this.start = input.required(...(ngDevMode ? [{ debugName: "start" }] : /* istanbul ignore next */ []));
1094
1198
  /**
1095
1199
  * The ending point of the line segment.
1096
1200
  * Accepts a Vector3-like value: [x, y, z], {x, y, z}, or THREE.Vector3.
1097
1201
  */
1098
- this.end = input.required(...(ngDevMode ? [{ debugName: "end" }] : []));
1202
+ this.end = input.required(...(ngDevMode ? [{ debugName: "end" }] : /* istanbul ignore next */ []));
1099
1203
  /**
1100
1204
  * The color of the line segment.
1101
1205
  * If not specified, inherits from the parent or defaults to white.
1102
1206
  */
1103
- this.color = input(...(ngDevMode ? [undefined, { debugName: "color" }] : []));
1207
+ this.color = input(...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
1104
1208
  /** @internal */
1105
1209
  this.normalizedStart = vector3(this.start);
1106
1210
  /** @internal */
@@ -1116,12 +1220,12 @@ class NgtsSegment {
1116
1220
  onCleanup(() => cleanUp());
1117
1221
  });
1118
1222
  }
1119
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsSegment, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1120
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: NgtsSegment, isStandalone: true, selector: "ngts-segment", inputs: { start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: true, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "segmentRef", first: true, predicate: ["segment"], descendants: true, isSignal: true }], ngImport: i0, template: `
1223
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsSegment, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1224
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsSegment, isStandalone: true, selector: "ngts-segment", inputs: { start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: true, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "segmentRef", first: true, predicate: ["segment"], descendants: true, isSignal: true }], ngImport: i0, template: `
1121
1225
  <ngt-segment-object #segment [color]="color()" [start]="normalizedStart()" [end]="normalizedEnd()" />
1122
1226
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1123
1227
  }
1124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsSegment, decorators: [{
1228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsSegment, decorators: [{
1125
1229
  type: Component,
1126
1230
  args: [{
1127
1231
  selector: 'ngts-segment',
@@ -1158,14 +1262,14 @@ class NgtsSegments {
1158
1262
  /**
1159
1263
  * Configuration options for the segments rendering.
1160
1264
  */
1161
- this.options = input(defaultSegmentsOptions, { ...(ngDevMode ? { debugName: "options" } : {}), transform: mergeInputs(defaultSegmentsOptions) });
1265
+ this.options = input(defaultSegmentsOptions, { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), transform: mergeInputs(defaultSegmentsOptions) });
1162
1266
  this.parameters = omit(this.options, ['limit', 'lineWidth']);
1163
1267
  this.lineWidth = pick(this.options, 'lineWidth');
1164
1268
  this.limit = pick(this.options, 'limit');
1165
1269
  /**
1166
1270
  * Reference to the underlying Line2 element.
1167
1271
  */
1168
- this.lineRef = viewChild('line', ...(ngDevMode ? [{ debugName: "lineRef" }] : []));
1272
+ this.lineRef = viewChild('line', ...(ngDevMode ? [{ debugName: "lineRef" }] : /* istanbul ignore next */ []));
1169
1273
  /**
1170
1274
  * Array of registered segment references. Used internally to track all segments.
1171
1275
  */
@@ -1183,17 +1287,17 @@ class NgtsSegments {
1183
1287
  resolution: this.resolution,
1184
1288
  linewidth: this.lineWidth(),
1185
1289
  ...this.parameters(),
1186
- }), ...(ngDevMode ? [{ debugName: "materialParameters" }] : []));
1290
+ }), ...(ngDevMode ? [{ debugName: "materialParameters" }] : /* istanbul ignore next */ []));
1187
1291
  /** @internal */
1188
1292
  this.positions = computed(() => {
1189
1293
  const limit = this.limit();
1190
1294
  return Array.from({ length: limit * 6 }, () => 0);
1191
- }, ...(ngDevMode ? [{ debugName: "positions" }] : []));
1295
+ }, ...(ngDevMode ? [{ debugName: "positions" }] : /* istanbul ignore next */ []));
1192
1296
  /** @internal */
1193
1297
  this.colors = computed(() => {
1194
1298
  const limit = this.limit();
1195
1299
  return Array.from({ length: limit * 6 }, () => 0);
1196
- }, ...(ngDevMode ? [{ debugName: "colors" }] : []));
1300
+ }, ...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
1197
1301
  beforeRender(() => {
1198
1302
  const [limit, positions, colors] = [this.limit(), this.positions(), this.colors()];
1199
1303
  for (let i = 0; i < limit; i++) {
@@ -1230,8 +1334,8 @@ class NgtsSegments {
1230
1334
  this.segments = this.segments.filter((i) => i !== ref);
1231
1335
  };
1232
1336
  }
1233
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsSegments, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1234
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", type: NgtsSegments, isStandalone: true, selector: "ngts-segments", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lineRef", first: true, predicate: ["line"], descendants: true, isSignal: true }], ngImport: i0, template: `
1337
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsSegments, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1338
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: NgtsSegments, isStandalone: true, selector: "ngts-segments", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lineRef", first: true, predicate: ["line"], descendants: true, isSignal: true }], ngImport: i0, template: `
1235
1339
  <ngt-primitive #line *args="[line]">
1236
1340
  <ngt-primitive *args="[geometry]" attach="geometry" />
1237
1341
  <ngt-primitive *args="[material]" attach="material" [parameters]="materialParameters()" />
@@ -1239,7 +1343,7 @@ class NgtsSegments {
1239
1343
  </ngt-primitive>
1240
1344
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1241
1345
  }
1242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsSegments, decorators: [{
1346
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NgtsSegments, decorators: [{
1243
1347
  type: Component,
1244
1348
  args: [{
1245
1349
  selector: 'ngts-segments',
@@ -1260,5 +1364,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
1260
1364
  * Generated bundle index. Do not edit.
1261
1365
  */
1262
1366
 
1263
- export { NgtsAdaptiveDpr, NgtsAdaptiveEvents, NgtsBVH, NgtsDetailed, NgtsInstance, NgtsInstances, NgtsPoint, NgtsPointsBuffer, NgtsPointsInstances, NgtsSegment, NgtsSegments };
1367
+ export { NgtsAdaptiveDpr, NgtsAdaptiveEvents, NgtsBVH, NgtsDetailed, NgtsInstance, NgtsInstances, NgtsLOD, NgtsLODImpl, NgtsLODLevel, NgtsPoint, NgtsPointsBuffer, NgtsPointsInstances, NgtsSegment, NgtsSegments };
1264
1368
  //# sourceMappingURL=angular-three-soba-performances.mjs.map