angular-three-soba 4.1.1 → 4.2.1
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/fesm2022/angular-three-soba-misc.mjs +15 -6
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performances.mjs +107 -3
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
- package/package.json +2 -2
- package/performances/README.md +47 -0
- package/types/angular-three-soba-abstractions.d.ts +33 -45
- package/types/angular-three-soba-gizmos.d.ts +1 -1
- package/types/angular-three-soba-materials.d.ts +2 -2
- package/types/angular-three-soba-misc.d.ts +6 -0
- package/types/angular-three-soba-performances.d.ts +49 -3
- package/types/angular-three-soba-staging.d.ts +4 -8
|
@@ -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
|
/**
|
|
@@ -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" } : {}), transform: mergeInputs(defaultLodLevelOptions) });
|
|
637
|
+
this.template = inject(TemplateRef);
|
|
638
|
+
}
|
|
639
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgtsLODLevel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
640
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", 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.1.6", 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" }] : []));
|
|
671
|
+
this.store = injectStore();
|
|
672
|
+
this.container = inject(ElementRef);
|
|
673
|
+
this.levels = contentChildren(NgtsLODLevel, ...(ngDevMode ? [{ debugName: "levels" }] : []));
|
|
674
|
+
this.level = signal(undefined, ...(ngDevMode ? [{ debugName: "level" }] : []));
|
|
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.1.6", ngImport: i0, type: NgtsLODImpl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
711
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.6", 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.1.6", 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();
|
|
@@ -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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-soba-performances.mjs","sources":["../../../../libs/soba/performances/src/lib/adaptive-dpr.ts","../../../../libs/soba/performances/src/lib/adaptive-events.ts","../../../../libs/soba/performances/src/lib/bvh.ts","../../../../libs/soba/performances/src/lib/detailed.ts","../../../../libs/soba/performances/src/lib/instances/position-mesh.ts","../../../../libs/soba/performances/src/lib/instances/instances.ts","../../../../libs/soba/performances/src/lib/points/position-point.ts","../../../../libs/soba/performances/src/lib/points/points.ts","../../../../libs/soba/performances/src/lib/segments/segment-object.ts","../../../../libs/soba/performances/src/lib/segments/segments.ts","../../../../libs/soba/performances/src/angular-three-soba-performances.ts"],"sourcesContent":["import { booleanAttribute, DestroyRef, Directive, effect, inject, input, untracked } from '@angular/core';\nimport { injectStore } from 'angular-three';\n\n/**\n * A directive that dynamically adjusts the device pixel ratio (DPR) based on performance metrics.\n *\n * This directive monitors the current performance state and automatically scales the DPR\n * to maintain smooth frame rates. When performance degrades, DPR is reduced; when performance\n * recovers, DPR is restored to the initial value.\n *\n * @example\n * ```html\n * <ngts-adaptive-dpr />\n * <!-- With pixelated rendering during low performance -->\n * <ngts-adaptive-dpr [pixelated]=\"true\" />\n * ```\n */\n@Directive({ selector: 'ngts-adaptive-dpr' })\nexport class NgtsAdaptiveDpr {\n\t/**\n\t * When true, applies pixelated image rendering style during reduced DPR states.\n\t * This can provide a retro aesthetic or indicate to users that performance mode is active.\n\t * @default false\n\t */\n\tpixelated = input(false, { transform: booleanAttribute });\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\n\t\teffect(() => {\n\t\t\tconst [current, pixelated, domElement, setDpr, initialDpr] = [\n\t\t\t\tstore.performance.current(),\n\t\t\t\tuntracked(this.pixelated),\n\t\t\t\tstore.snapshot.gl.domElement,\n\t\t\t\tstore.snapshot.setDpr,\n\t\t\t\tstore.snapshot.viewport.initialDpr,\n\t\t\t];\n\n\t\t\tsetDpr(current * initialDpr);\n\t\t\tif (pixelated && domElement) domElement.style.imageRendering = current === 1 ? 'auto' : 'pixelated';\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst [domElement, active, setDpr, initialDpr, pixelated] = [\n\t\t\t\tstore.snapshot.gl.domElement,\n\t\t\t\tstore.snapshot.internal.active,\n\t\t\t\tstore.snapshot.setDpr,\n\t\t\t\tstore.snapshot.viewport.initialDpr,\n\t\t\t\tuntracked(this.pixelated),\n\t\t\t];\n\n\t\t\tif (active) setDpr(initialDpr);\n\t\t\tif (pixelated && domElement) domElement.style.imageRendering = 'auto';\n\t\t});\n\t}\n}\n","import { DestroyRef, Directive, effect, inject } from '@angular/core';\nimport { injectStore } from 'angular-three';\n\n/**\n * A directive that dynamically toggles event handling based on performance metrics.\n *\n * When performance drops (current < 1), this directive disables event handling to reduce\n * computational overhead. Events are re-enabled when performance recovers or when the\n * directive is destroyed.\n *\n * This is useful for maintaining smooth rendering during heavy computation by temporarily\n * sacrificing interactivity.\n *\n * @example\n * ```html\n * <ngts-adaptive-events />\n * ```\n */\n@Directive({ selector: 'ngts-adaptive-events' })\nexport class NgtsAdaptiveEvents {\n\tconstructor() {\n\t\tconst store = injectStore();\n\t\tconst currentEnabled = store.snapshot.events.enabled;\n\n\t\teffect((onCleanup) => {\n\t\t\tconst current = store.performance.current();\n\t\t\tonCleanup(() => store.snapshot.setEvents({ enabled: current === 1 }));\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tstore.snapshot.setEvents({ enabled: currentEnabled });\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, is, NgtThreeElements, omit, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { acceleratedRaycast, computeBoundsTree, disposeBoundsTree, SAH, SplitStrategy } from 'three-mesh-bvh';\n\n/**\n * Configuration options for the NgtsBVH component.\n *\n * These options control how the Bounding Volume Hierarchy (BVH) is constructed\n * and how raycasting is performed against the geometry.\n */\nexport type NgtsBVHOptions = Partial<NgtThreeElements['ngt-group']> & {\n\t/**\n\t * Whether BVH acceleration is enabled.\n\t * @default true\n\t */\n\tenabled: boolean;\n\t/**\n\t * Use .raycastFirst to retrieve hits which is generally faster.\n\t * When true, only the first intersection is returned.\n\t * @default false\n\t */\n\tfirstHitOnly: boolean;\n\t/**\n\t * The split strategy used for BVH construction.\n\t * SAH (Surface Area Heuristic) is slowest to construct but provides\n\t * fastest runtime performance with least memory usage.\n\t * @default SAH\n\t */\n\tstrategy: SplitStrategy;\n\t/**\n\t * Whether to print warnings encountered during tree construction.\n\t * @default false\n\t */\n\tverbose: boolean;\n\t/**\n\t * If true, the bounding box for the geometry is set once the BVH has been constructed.\n\t * @default true\n\t */\n\tsetBoundingBox: boolean;\n\t/**\n\t * The maximum depth to allow the tree to build to.\n\t * @default 40\n\t */\n\tmaxDepth: number;\n\t/**\n\t * The number of triangles to aim for in a leaf node.\n\t * @default 10\n\t */\n\tmaxLeafTris: number;\n\t/**\n\t * If false then an index buffer is created if it does not exist and is rearranged\n\t * to hold the BVH structure. If true then a separate buffer is created to store the\n\t * structure and the index buffer (or lack thereof) is retained. This can be used\n\t * when the existing index layout is important or groups are being used so a\n\t * single BVH hierarchy can be created to improve performance.\n\t *\n\t * Note: This setting is experimental.\n\t * @default false\n\t */\n\tindirect?: boolean;\n};\n\nconst defaultOptions: NgtsBVHOptions = {\n\tenabled: true,\n\tfirstHitOnly: false,\n\tstrategy: SAH,\n\tverbose: false,\n\tsetBoundingBox: true,\n\tmaxDepth: 40,\n\tmaxLeafTris: 10,\n\tindirect: false,\n};\n\n/**\n * A component that applies Bounding Volume Hierarchy (BVH) acceleration to child meshes\n * for significantly faster raycasting performance.\n *\n * Wrap your mesh components with this component to automatically compute and apply\n * BVH structures. This is especially useful for complex geometries where standard\n * raycasting would be slow.\n *\n * @example\n * ```html\n * <ngts-bvh [options]=\"{ firstHitOnly: true }\">\n * <ngt-mesh>\n * <ngt-buffer-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngts-bvh>\n * ```\n */\n@Component({\n\tselector: 'ngts-bvh',\n\ttemplate: `\n\t\t<ngt-group #group [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsBVH {\n\t/**\n\t * Configuration options for BVH construction and raycasting behavior.\n\t */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\t/** @internal */\n\tprotected parameters = omit(this.options, [\n\t\t'enabled',\n\t\t'firstHitOnly',\n\t\t'strategy',\n\t\t'verbose',\n\t\t'setBoundingBox',\n\t\t'maxDepth',\n\t\t'maxLeafTris',\n\t\t'indirect',\n\t]);\n\n\t/**\n\t * Reference to the underlying THREE.Group element.\n\t */\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\n\tprivate store = injectStore();\n\n\tprivate enabled = pick(this.options, 'enabled');\n\tprivate firstHitOnly = pick(this.options, 'firstHitOnly');\n\tprivate strategy = pick(this.options, 'strategy');\n\tprivate verbose = pick(this.options, 'verbose');\n\tprivate setBoundingBox = pick(this.options, 'setBoundingBox');\n\tprivate maxDepth = pick(this.options, 'maxDepth');\n\tprivate maxLeafTris = pick(this.options, 'maxLeafTris');\n\tprivate indirect = pick(this.options, 'indirect');\n\n\tprivate reset = signal(Math.random());\n\tprivate retryMap = new Map();\n\tprivate MAX_RETRIES = 3;\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst enabled = this.enabled();\n\t\t\tif (!enabled) return;\n\n\t\t\tconst group = this.groupRef().nativeElement;\n\n\t\t\t// track reset\n\t\t\tthis.reset();\n\n\t\t\t// Hijacking the raycast method to do it for individual meshes is not an option as it would\n\t\t\t// This can only safely work if the component is used once, but there is no alternative.\n\t\t\t// cost too much memory ...\n\t\t\tconst [firstHitOnly, strategy, verbose, setBoundingBox, maxDepth, maxLeafTris, indirect, raycaster] = [\n\t\t\t\tuntracked(this.firstHitOnly),\n\t\t\t\tuntracked(this.strategy),\n\t\t\t\tuntracked(this.verbose),\n\t\t\t\tuntracked(this.setBoundingBox),\n\t\t\t\tuntracked(this.maxDepth),\n\t\t\t\tuntracked(this.maxLeafTris),\n\t\t\t\tuntracked(this.indirect),\n\t\t\t\tthis.store.snapshot.raycaster,\n\t\t\t];\n\n\t\t\tconst options = { strategy, verbose, setBoundingBox, maxDepth, maxLeafTris, indirect };\n\t\t\traycaster.firstHitOnly = firstHitOnly;\n\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\tgroup.visible = false;\n\t\t\tgroup.traverse((child) => {\n\t\t\t\tif (\n\t\t\t\t\tis.three<THREE.Mesh>(child, 'isMesh') &&\n\t\t\t\t\t!child.geometry.boundsTree &&\n\t\t\t\t\tchild.raycast === THREE.Mesh.prototype.raycast\n\t\t\t\t) {\n\t\t\t\t\tconst geometry = child.geometry;\n\t\t\t\t\tconst retryCount = this.retryMap.get(child) ?? 0;\n\t\t\t\t\t// retry 3 times\n\t\t\t\t\tif (!Object.keys(geometry.attributes).length && retryCount <= this.MAX_RETRIES) {\n\t\t\t\t\t\tthis.retryMap.set(child, retryCount + 1);\n\t\t\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\t\t\tthis.reset.set(Math.random());\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!group.visible) group.visible = true;\n\n\t\t\t\t\tchild.raycast = acceleratedRaycast;\n\t\t\t\t\tchild.geometry.computeBoundsTree = computeBoundsTree;\n\t\t\t\t\tchild.geometry.disposeBoundsTree = disposeBoundsTree;\n\t\t\t\t\tchild.geometry.computeBoundsTree(options);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\ttimeoutId && clearTimeout(timeoutId);\n\n\t\t\t\tdelete raycaster.firstHitOnly;\n\t\t\t\tgroup.traverse((child) => {\n\t\t\t\t\tif (is.three<THREE.Mesh>(child, 'isMesh') && child.geometry.boundsTree) {\n\t\t\t\t\t\tchild.geometry.disposeBoundsTree();\n\t\t\t\t\t\tchild.raycast = THREE.Mesh.prototype.raycast;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!group.visible) group.visible = true;\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.retryMap.clear();\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend, getInstanceState, NgtThreeElements, omit, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { LOD } from 'three';\n\n/**\n * Configuration options for the NgtsDetailed LOD component.\n */\nexport interface NgtsDetailedOptions extends Partial<NgtThreeElements['ngt-lOD']> {\n\t/**\n\t * The hysteresis value for LOD level transitions.\n\t * This value prevents rapid switching between LOD levels when the camera\n\t * is near a distance threshold. A higher value means more resistance to switching.\n\t * @default 0\n\t */\n\thysteresis: number;\n}\n\nconst defaultOptions: NgtsDetailedOptions = {\n\thysteresis: 0,\n};\n\n/**\n * A component that implements Level of Detail (LOD) rendering for performance optimization.\n *\n * This component automatically switches between different detail levels of child objects\n * based on the camera distance. Child objects are associated with distance thresholds\n * where closer distances use higher-detail meshes.\n *\n * @example\n * ```html\n * <ngts-detailed [distances]=\"[0, 50, 100]\">\n * <ngt-mesh><!-- High detail --></ngt-mesh>\n * <ngt-mesh><!-- Medium detail --></ngt-mesh>\n * <ngt-mesh><!-- Low detail --></ngt-mesh>\n * </ngts-detailed>\n * ```\n */\n@Component({\n\tselector: 'ngts-detailed',\n\ttemplate: `\n\t\t<ngt-lOD #lod [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-lOD>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsDetailed {\n\t/**\n\t * Array of distance thresholds for each LOD level.\n\t * The first distance corresponds to the first child (highest detail),\n\t * and subsequent distances correspond to lower detail children.\n\t */\n\tdistances = input.required<number[]>();\n\t/**\n\t * Configuration options for the LOD behavior.\n\t */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\t/** @internal */\n\tprotected parameters = omit(this.options, ['hysteresis']);\n\n\t/**\n\t * Reference to the underlying THREE.LOD element.\n\t */\n\tlodRef = viewChild.required<ElementRef<THREE.LOD>>('lod');\n\tprivate hysteresis = pick(this.options, 'hysteresis');\n\n\tconstructor() {\n\t\textend({ LOD });\n\n\t\teffect(() => {\n\t\t\tconst lod = this.lodRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(lod);\n\t\t\tif (!instanceState) return;\n\t\t\tconst [, distances, hysteresis] = [instanceState.objects(), this.distances(), this.hysteresis()];\n\t\t\tlod.levels.length = 0;\n\t\t\tlod.children.forEach((object, index) => {\n\t\t\t\tlod.levels.push({ object, distance: distances[index], hysteresis });\n\t\t\t});\n\t\t});\n\n\t\tbeforeRender(({ camera }) => {\n\t\t\tthis.lodRef().nativeElement.update(camera);\n\t\t});\n\t}\n}\n","import { ElementRef } from '@angular/core';\nimport { NgtThreeElement, resolveRef } from 'angular-three';\nimport * as THREE from 'three';\n\n/**\n * Type definition for the PositionMesh element in Angular Three templates.\n */\nexport type NgtPositionMesh = NgtThreeElement<typeof PositionMesh>;\n\nconst _instanceLocalMatrix = new THREE.Matrix4();\nconst _instanceWorldMatrix = new THREE.Matrix4();\nconst _instanceIntersects: THREE.Intersection[] = [];\nconst _mesh = new THREE.Mesh<THREE.BufferGeometry, THREE.MeshBasicMaterial>();\n\n/**\n * A virtual mesh class that represents a single instance within an InstancedMesh.\n *\n * PositionMesh extends THREE.Group and provides the ability to position, rotate,\n * scale, and color individual instances while maintaining proper raycasting support.\n * Each PositionMesh is linked to a parent InstancedMesh and contributes its transform\n * to the instance matrix buffer.\n *\n * This class enables individual instances to receive pointer events and have bounds\n * for frustum culling, which is not natively supported by THREE.InstancedMesh.\n */\nexport class PositionMesh extends THREE.Group {\n\t/**\n\t * The color of this instance.\n\t * @default new THREE.Color('white')\n\t */\n\tcolor: THREE.Color;\n\t/**\n\t * Reference to the parent InstancedMesh that this instance belongs to.\n\t */\n\tinstance: ElementRef<THREE.InstancedMesh> | THREE.InstancedMesh | null | undefined;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.color = new THREE.Color('white');\n\t\tthis.instance = undefined;\n\t}\n\n\t/**\n\t * Gets the geometry from the parent InstancedMesh.\n\t * This allows the virtual instance to have bounds for frustum culling.\n\t */\n\tget geometry() {\n\t\treturn resolveRef(this.instance)?.geometry;\n\t}\n\n\t/**\n\t * Custom raycast implementation that enables this virtual instance to receive pointer events.\n\t *\n\t * @param raycaster - The raycaster to test against\n\t * @param intersects - Array to populate with intersection results\n\t */\n\toverride raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) {\n\t\tconst parent = resolveRef(this.instance);\n\t\tif (!parent) return;\n\t\tif (!parent.geometry || !parent.material) return;\n\t\t_mesh.geometry = parent.geometry;\n\t\tconst matrixWorld = parent.matrixWorld;\n\t\tconst instanceId = parent.userData['instances'].indexOf(this);\n\t\t// If the instance wasn't found or exceeds the parents draw range, bail out\n\t\tif (instanceId === -1 || instanceId > parent.count) return;\n\t\t// calculate the world matrix for each instance\n\t\tparent.getMatrixAt(instanceId, _instanceLocalMatrix);\n\t\t_instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix);\n\t\t// the mesh represents this single instance\n\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\t\t// raycast side according to instance material\n\t\tif (parent.material instanceof THREE.Material) _mesh.material.side = parent.material.side;\n\t\telse _mesh.material.side = parent.material[0].side;\n\t\t_mesh.raycast(raycaster, _instanceIntersects);\n\t\t// process the result of raycast\n\t\tfor (let i = 0, l = _instanceIntersects.length; i < l; i++) {\n\t\t\tconst intersect = _instanceIntersects[i];\n\t\t\tintersect.instanceId = instanceId;\n\t\t\tintersect.object = this;\n\t\t\tintersects.push(intersect);\n\t\t}\n\t\t_instanceIntersects.length = 0;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t * @rawOptions instance|color\n\t\t */\n\t\t'ngt-position-mesh': NgtPositionMesh;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, checkUpdate, extend, NgtThreeElements, omit, pick, resolveRef } from 'angular-three';\nimport { setUpdateRange } from 'angular-three-soba/misc';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { InstancedBufferAttribute, InstancedMesh } from 'three';\nimport { NgtPositionMesh, PositionMesh } from './position-mesh';\n\nconst parentMatrix = new THREE.Matrix4();\nconst instanceMatrix = new THREE.Matrix4();\nconst tempMatrix = new THREE.Matrix4();\nconst translation = new THREE.Vector3();\nconst rotation = new THREE.Quaternion();\nconst scale = new THREE.Vector3();\n\n/**\n * A component representing a single instance within an NgtsInstances container.\n *\n * Each NgtsInstance is a virtual mesh that contributes to the parent InstancedMesh.\n * Instances can be individually positioned, rotated, scaled, and colored while\n * sharing the same geometry and material for optimal rendering performance.\n *\n * @example\n * ```html\n * <ngts-instances>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * @for (item of items; track item.id) {\n * <ngts-instance [options]=\"{ position: item.position, color: item.color }\" />\n * }\n * </ngts-instances>\n * ```\n */\n@Component({\n\tselector: 'ngts-instance',\n\ttemplate: `\n\t\t<ngt-position-mesh #positionMesh [instance]=\"instances.instancedMeshRef()\" [parameters]=\"options()\">\n\t\t\t<ng-content />\n\t\t</ngt-position-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsInstance {\n\t/**\n\t * Options passed to the underlying PositionMesh, including position, rotation, scale, and color.\n\t */\n\toptions = input({} as Partial<NgtPositionMesh>);\n\n\t/** @internal */\n\tprotected instances = inject(NgtsInstances);\n\n\t/**\n\t * Reference to the underlying PositionMesh element.\n\t */\n\tpositionMeshRef = viewChild.required<ElementRef<PositionMesh>>('positionMesh');\n\n\tconstructor() {\n\t\textend({ PositionMesh });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.instances.subscribe(this.positionMeshRef().nativeElement);\n\t\t\tonCleanup(() => cleanup());\n\t\t});\n\t}\n}\n\n/**\n * Configuration options for the NgtsInstances component.\n */\nexport interface NgtsInstancesOptions extends Partial<NgtThreeElements['ngt-instanced-mesh']> {\n\t/**\n\t * Limits the number of visible instances. When set, only the first `range` instances\n\t * are rendered. Useful for dynamic instance counts without recreating the buffer.\n\t */\n\trange?: number;\n\t/**\n\t * The maximum number of instances that can be rendered.\n\t * This determines the size of the instance buffers.\n\t * @default 1000\n\t */\n\tlimit: number;\n\t/**\n\t * The number of frames to update instance transforms.\n\t * Set to Infinity for continuous updates, or a specific number to stop\n\t * updating after that many frames (useful for static instances).\n\t * @default Infinity\n\t */\n\tframes: number;\n}\n\nconst defaultOptions: NgtsInstancesOptions = {\n\tlimit: 1000,\n\tframes: Infinity,\n};\n\n/**\n * A component that efficiently renders many instances of the same geometry and material.\n *\n * This component uses THREE.InstancedMesh under the hood to batch render multiple\n * objects with a single draw call, providing significant performance improvements\n * when rendering many similar objects.\n *\n * Place geometry and material as direct children, and NgtsInstance components\n * for each instance you want to render.\n *\n * @example\n * ```html\n * <ngts-instances [options]=\"{ limit: 100 }\">\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * @for (i of [0, 1, 2, 3, 4]; track i) {\n * <ngts-instance [options]=\"{ position: [i * 2, 0, 0] }\" />\n * }\n * </ngts-instances>\n * ```\n */\n@Component({\n\tselector: 'ngts-instances',\n\ttemplate: `\n\t\t<ngt-instanced-mesh\n\t\t\t#instancedMesh\n\t\t\t[userData]=\"{ instances }\"\n\t\t\t[matrixAutoUpdate]=\"false\"\n\t\t\t[raycast]=\"null\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t>\n\t\t\t<ngt-instanced-buffer-attribute\n\t\t\t\tattach=\"instanceMatrix\"\n\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t[count]=\"buffers().matrices.length / 16\"\n\t\t\t\t[array]=\"buffers().matrices\"\n\t\t\t\t[itemSize]=\"16\"\n\t\t\t/>\n\t\t\t<ngt-instanced-buffer-attribute\n\t\t\t\tattach=\"instanceColor\"\n\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t[count]=\"buffers().colors.length / 3\"\n\t\t\t\t[array]=\"buffers().colors\"\n\t\t\t\t[itemSize]=\"3\"\n\t\t\t/>\n\t\t\t<ng-content />\n\t\t</ngt-instanced-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsInstances {\n\t/** @internal */\n\tprotected readonly DynamicDrawUsage = THREE.DynamicDrawUsage;\n\n\t/**\n\t * Configuration options for the instanced rendering.\n\t */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\t/** @internal */\n\tprotected parameters = omit(this.options, ['limit', 'frames', 'range']);\n\n\t/**\n\t * Reference to the underlying THREE.InstancedMesh element.\n\t */\n\tinstancedMeshRef = viewChild.required<ElementRef<THREE.InstancedMesh>>('instancedMesh');\n\n\tprivate limit = pick(this.options, 'limit');\n\n\t/** @internal */\n\tprotected buffers = computed(() => {\n\t\tconst limit = this.limit();\n\t\tconst matrices = new Float32Array(limit * 16);\n\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\ttempMatrix.identity().toArray(matrices, i * 16);\n\t\t}\n\n\t\tconst colors = new Float32Array([...Array.from({ length: limit * 3 }, () => 1)]);\n\t\treturn { matrices, colors };\n\t});\n\n\t/**\n\t * Array of registered instance references. Used internally to track all instances.\n\t */\n\tinstances: Array<ElementRef<PositionMesh> | PositionMesh> = [];\n\n\tconstructor() {\n\t\textend({ InstancedMesh, InstancedBufferAttribute });\n\n\t\teffect(() => {\n\t\t\tconst instancedMesh = this.instancedMeshRef()?.nativeElement;\n\t\t\tif (!instancedMesh) return;\n\t\t\tcheckUpdate(instancedMesh.instanceMatrix);\n\t\t});\n\n\t\tlet iterations = 0;\n\t\tlet count = 0;\n\n\t\tbeforeRender(() => {\n\t\t\tconst instancedMesh = this.instancedMeshRef()?.nativeElement;\n\t\t\tif (!instancedMesh) return;\n\t\t\tconst { frames, limit, range } = this.options();\n\t\t\tconst { matrices, colors } = this.buffers();\n\t\t\tif (frames === Infinity || iterations < frames) {\n\t\t\t\tinstancedMesh.updateMatrix();\n\t\t\t\tinstancedMesh.updateMatrixWorld();\n\t\t\t\tparentMatrix.copy(instancedMesh.matrixWorld).invert();\n\n\t\t\t\tcount = Math.min(limit, range !== undefined ? range : limit, this.instances.length);\n\t\t\t\tinstancedMesh.count = count;\n\t\t\t\tsetUpdateRange(instancedMesh.instanceMatrix, { start: 0, count: count * 16 });\n\t\t\t\tif (instancedMesh.instanceColor) {\n\t\t\t\t\tsetUpdateRange(instancedMesh.instanceColor, { start: 0, count: count * 3 });\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 0; i < this.instances.length; i++) {\n\t\t\t\t\tconst instance = resolveRef(this.instances[i]);\n\t\t\t\t\tif (instance) {\n\t\t\t\t\t\t// Multiply the inverse of the InstancedMesh world matrix or else\n\t\t\t\t\t\t// Instances will be double-transformed if <Instances> isn't at identity\n\t\t\t\t\t\tinstance.matrixWorld.decompose(translation, rotation, scale);\n\t\t\t\t\t\tinstanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);\n\t\t\t\t\t\tinstanceMatrix.toArray(matrices, i * 16);\n\t\t\t\t\t\tcheckUpdate(instancedMesh.instanceMatrix);\n\t\t\t\t\t\tinstance.color.toArray(colors, i * 3);\n\t\t\t\t\t\tcheckUpdate(instancedMesh.instanceColor);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titerations++;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Registers an instance with this container.\n\t *\n\t * @param ref - The PositionMesh reference or element to register\n\t * @returns A cleanup function to unregister the instance\n\t */\n\tsubscribe(ref: ElementRef<PositionMesh> | PositionMesh) {\n\t\tthis.instances.push(ref);\n\t\treturn () => {\n\t\t\tthis.instances = this.instances.filter((i) => i !== ref);\n\t\t};\n\t}\n}\n","import { ElementRef } from '@angular/core';\nimport { NgtThreeElement, resolveRef } from 'angular-three';\nimport * as THREE from 'three';\n\n/**\n * Type definition for the PositionPoint element in Angular Three templates.\n */\nexport type NgtPositionPoint = NgtThreeElement<typeof PositionPoint>;\n\nconst _inverseMatrix = new THREE.Matrix4();\nconst _ray = new THREE.Ray();\nconst _sphere = new THREE.Sphere();\nconst _position = new THREE.Vector3();\n\n/**\n * A virtual point class that represents a single point within a Points object.\n *\n * PositionPoint extends THREE.Group and provides the ability to position, color,\n * and size individual points while maintaining proper raycasting support.\n * Each PositionPoint is linked to a parent Points object and contributes its\n * position to the position buffer.\n *\n * This class enables individual points to receive pointer events, which is not\n * natively supported by THREE.Points.\n */\nexport class PositionPoint extends THREE.Group {\n\t/**\n\t * The size of this point.\n\t * @default 0\n\t */\n\tsize: number;\n\t/**\n\t * The color of this point.\n\t * @default new THREE.Color('white')\n\t */\n\tcolor: THREE.Color;\n\t/**\n\t * Reference to the parent Points object that this point belongs to.\n\t */\n\tinstance: ElementRef<THREE.Points> | THREE.Points | null | undefined;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.size = 0;\n\t\tthis.color = new THREE.Color('white');\n\t\tthis.instance = undefined;\n\t}\n\n\t/**\n\t * Gets the geometry from the parent Points object.\n\t * This allows the virtual point to have bounds for frustum culling.\n\t */\n\tget geometry() {\n\t\treturn resolveRef(this.instance)?.geometry;\n\t}\n\n\t/**\n\t * Custom raycast implementation that enables this virtual point to receive pointer events.\n\t *\n\t * @param raycaster - The raycaster to test against\n\t * @param intersects - Array to populate with intersection results\n\t */\n\toverride raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) {\n\t\tconst parent = resolveRef(this.instance);\n\t\tif (!parent || !parent.geometry) return;\n\t\tconst instanceId = parent.userData['instances'].indexOf(this);\n\t\t// If the instance wasn't found or exceeds the parents draw range, bail out\n\t\tif (instanceId === -1 || instanceId > parent.geometry.drawRange.count) return;\n\n\t\tconst threshold = raycaster.params.Points?.threshold ?? 1;\n\t\t_sphere.set(this.getWorldPosition(_position), threshold);\n\t\tif (raycaster.ray.intersectsSphere(_sphere) === false) return;\n\n\t\t_inverseMatrix.copy(parent.matrixWorld).invert();\n\t\t_ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);\n\n\t\tconst localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\t\tconst rayPointDistanceSq = _ray.distanceSqToPoint(this.position);\n\n\t\tif (rayPointDistanceSq < localThresholdSq) {\n\t\t\tconst intersectPoint = new THREE.Vector3();\n\t\t\t_ray.closestPointToPoint(this.position, intersectPoint);\n\t\t\tintersectPoint.applyMatrix4(this.matrixWorld);\n\t\t\tconst distance = raycaster.ray.origin.distanceTo(intersectPoint);\n\t\t\tif (distance < raycaster.near || distance > raycaster.far) return;\n\t\t\tintersects.push({\n\t\t\t\tdistance,\n\t\t\t\tdistanceToRay: Math.sqrt(rayPointDistanceSq),\n\t\t\t\tpoint: intersectPoint,\n\t\t\t\tindex: instanceId,\n\t\t\t\tface: null,\n\t\t\t\tobject: this,\n\t\t\t});\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t * @rawOptions instance|color|size\n\t\t */\n\t\t'ngt-position-point': NgtPositionPoint;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, checkUpdate, extend, NgtThreeElements, omit, pick, resolveRef } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { BufferAttribute, BufferGeometry, Points } from 'three';\nimport { NgtPositionPoint, PositionPoint } from './position-point';\n\n/**\n * A component representing a single point within an NgtsPointsInstances container.\n *\n * Each NgtsPoint is a virtual point that contributes to the parent Points object.\n * Points can be individually positioned, colored, and sized while sharing the same\n * material for optimal rendering performance.\n *\n * @example\n * ```html\n * <ngts-points-instances>\n * <ngt-points-material [size]=\"0.1\" />\n * @for (item of items; track item.id) {\n * <ngts-point [options]=\"{ position: item.position, color: item.color, size: item.size }\" />\n * }\n * </ngts-points-instances>\n * ```\n */\n@Component({\n\tselector: 'ngts-point',\n\ttemplate: `\n\t\t<ngt-position-point #positionPoint [parameters]=\"options()\" [instance]=\"points.pointsRef()\">\n\t\t\t<ng-content />\n\t\t</ngt-position-point>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsPoint {\n\t/**\n\t * Options passed to the underlying PositionPoint, including position, color, and size.\n\t */\n\toptions = input({} as Partial<NgtPositionPoint>);\n\n\t/**\n\t * Reference to the underlying PositionPoint element.\n\t */\n\tpositionPointRef = viewChild.required<ElementRef<PositionPoint>>('positionPoint');\n\n\t/** @internal */\n\tprotected points = inject(NgtsPointsInstances);\n\n\tconstructor() {\n\t\textend({ PositionPoint });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanUp = this.points.subscribe(this.positionPointRef().nativeElement);\n\t\t\tonCleanup(() => cleanUp());\n\t\t});\n\t}\n}\n\n/**\n * A component for rendering points from pre-computed buffer data.\n *\n * This component is optimized for cases where you have large arrays of point data\n * that you want to render directly without the overhead of individual point components.\n * Ideal for particle systems, data visualizations, or any scenario with many static\n * or programmatically-updated points.\n *\n * @example\n * ```html\n * <ngts-points-buffer [positions]=\"positionsArray\" [colors]=\"colorsArray\" [sizes]=\"sizesArray\">\n * <ngt-points-material [vertexColors]=\"true\" />\n * </ngts-points-buffer>\n * ```\n */\n@Component({\n\tselector: 'ngts-points-buffer',\n\ttemplate: `\n\t\t<ngt-points #points [parameters]=\"options()\">\n\t\t\t<ngt-buffer-geometry>\n\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\tattach=\"attributes.position\"\n\t\t\t\t\t[count]=\"positions().length / stride()\"\n\t\t\t\t\t[array]=\"positions()\"\n\t\t\t\t\t[itemSize]=\"stride()\"\n\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t/>\n\t\t\t\t@if (colors(); as colors) {\n\t\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\t\tattach=\"attributes.color\"\n\t\t\t\t\t\t[count]=\"colors.length / stride()\"\n\t\t\t\t\t\t[array]=\"colors\"\n\t\t\t\t\t\t[itemSize]=\"3\"\n\t\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\t@if (sizes(); as sizes) {\n\t\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\t\tattach=\"attributes.size\"\n\t\t\t\t\t\t[count]=\"sizes.length / stride()\"\n\t\t\t\t\t\t[array]=\"sizes\"\n\t\t\t\t\t\t[itemSize]=\"1\"\n\t\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</ngt-buffer-geometry>\n\t\t\t<ng-content />\n\t\t</ngt-points>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsPointsBuffer {\n\t/**\n\t * Float32Array containing point positions. Length should be divisible by stride.\n\t * For 3D points (stride=3): [x1, y1, z1, x2, y2, z2, ...]\n\t */\n\tpositions = input.required<Float32Array>();\n\t/**\n\t * Optional Float32Array containing RGB color values for each point.\n\t * Length should be (positions.length / stride) * 3.\n\t */\n\tcolors = input<Float32Array>();\n\t/**\n\t * Optional Float32Array containing size values for each point.\n\t * Length should be positions.length / stride.\n\t */\n\tsizes = input<Float32Array>();\n\t/**\n\t * The number of components per position (2 for 2D, 3 for 3D).\n\t * @default 3\n\t */\n\tstride = input<2 | 3>(3);\n\t/**\n\t * Additional options passed to the Points object.\n\t */\n\toptions = input({} as Partial<NgtPositionPoint>);\n\n\t/**\n\t * Reference to the underlying THREE.Points element.\n\t */\n\tpointsRef = viewChild.required<ElementRef<THREE.Points>>('points');\n\n\tconstructor() {\n\t\textend({ Points, BufferAttribute, BufferGeometry });\n\n\t\tbeforeRender(() => {\n\t\t\tconst points = this.pointsRef()?.nativeElement;\n\t\t\tif (!points) return;\n\n\t\t\tconst attributes = points.geometry.attributes;\n\t\t\tcheckUpdate(attributes['position']);\n\t\t\tif (this.colors()) checkUpdate(attributes['color']);\n\t\t\tif (this.sizes()) checkUpdate(attributes['size']);\n\t\t});\n\t}\n\n\t/** @internal */\n\tprotected readonly DynamicDrawUsage = THREE.DynamicDrawUsage;\n}\n\nconst parentMatrix = new THREE.Matrix4();\nconst position = new THREE.Vector3();\n\n/**\n * Configuration options for the NgtsPointsInstances component.\n */\nexport interface NgtsPointsInstancesOptions extends Partial<NgtThreeElements['ngt-points']> {\n\t/**\n\t * Limits the number of visible points. When set, only the first `range` points\n\t * are rendered. Useful for dynamic point counts without recreating buffers.\n\t */\n\trange?: number;\n\t/**\n\t * The maximum number of points that can be rendered.\n\t * This determines the size of the position, color, and size buffers.\n\t * @default 1000\n\t */\n\tlimit: number;\n}\n\nconst defaultInstancesOptions: NgtsPointsInstancesOptions = { limit: 1000 };\n\n/**\n * A component that efficiently renders many individual points with per-point control.\n *\n * Unlike NgtsPointsBuffer which uses pre-computed arrays, NgtsPointsInstances\n * allows you to add individual NgtsPoint children that can be dynamically\n * positioned, colored, and sized. Each point supports raycasting for interactivity.\n *\n * @example\n * ```html\n * <ngts-points-instances [options]=\"{ limit: 100 }\">\n * <ngt-points-material [size]=\"0.1\" [vertexColors]=\"true\" />\n * @for (i of [0, 1, 2, 3, 4]; track i) {\n * <ngts-point [options]=\"{ position: [i * 2, 0, 0], color: 'red' }\" />\n * }\n * </ngts-points-instances>\n * ```\n */\n@Component({\n\tselector: 'ngts-points-instances',\n\ttemplate: `\n\t\t<ngt-points\n\t\t\t#points\n\t\t\t[userData]=\"{ instances: positionPoints }\"\n\t\t\t[matrixAutoUpdate]=\"false\"\n\t\t\t[raycast]=\"null\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t>\n\t\t\t<ngt-buffer-geometry>\n\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\tattach=\"attributes.position\"\n\t\t\t\t\t[count]=\"buffers().positions.length / 3\"\n\t\t\t\t\t[array]=\"buffers().positions\"\n\t\t\t\t\t[itemSize]=\"3\"\n\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t/>\n\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\tattach=\"attributes.color\"\n\t\t\t\t\t[count]=\"buffers().colors.length / 3\"\n\t\t\t\t\t[array]=\"buffers().colors\"\n\t\t\t\t\t[itemSize]=\"3\"\n\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t/>\n\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\tattach=\"attributes.size\"\n\t\t\t\t\t[count]=\"buffers().sizes.length\"\n\t\t\t\t\t[array]=\"buffers().sizes\"\n\t\t\t\t\t[itemSize]=\"1\"\n\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t/>\n\t\t\t</ngt-buffer-geometry>\n\t\t\t<ng-content />\n\t\t</ngt-points>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsPointsInstances {\n\t/**\n\t * Configuration options for the points rendering.\n\t */\n\toptions = input(defaultInstancesOptions, { transform: mergeInputs(defaultInstancesOptions) });\n\t/**\n\t * Computed parameters passed to the underlying Points object.\n\t */\n\tparameters = omit(this.options, ['limit', 'range']);\n\n\t/**\n\t * Reference to the underlying THREE.Points element.\n\t */\n\tpointsRef = viewChild.required<ElementRef<THREE.Points>>('points');\n\n\tprivate limit = pick(this.options, 'limit');\n\n\t/**\n\t * Computed buffer arrays for positions, colors, and sizes.\n\t */\n\tbuffers = computed(() => {\n\t\tconst limit = this.limit();\n\n\t\treturn {\n\t\t\tpositions: new Float32Array(limit * 3),\n\t\t\tcolors: Float32Array.from({ length: limit * 3 }, () => 1),\n\t\t\tsizes: Float32Array.from({ length: limit }, () => 1),\n\t\t};\n\t});\n\n\t/**\n\t * Array of registered point references. Used internally to track all points.\n\t */\n\tpositionPoints: Array<ElementRef<PositionPoint> | PositionPoint> = [];\n\n\tconstructor() {\n\t\textend({ Points, BufferAttribute, BufferGeometry });\n\n\t\teffect(() => {\n\t\t\tconst points = this.pointsRef()?.nativeElement;\n\t\t\tif (!points) return;\n\t\t\tcheckUpdate(points.geometry.attributes['position']);\n\t\t});\n\n\t\tbeforeRender(() => {\n\t\t\tconst points = this.pointsRef()?.nativeElement;\n\t\t\tif (!points) return;\n\n\t\t\tconst { limit, range } = this.options();\n\t\t\tconst { positions, sizes, colors } = this.buffers();\n\n\t\t\tpoints.updateMatrix();\n\t\t\tpoints.updateMatrixWorld();\n\t\t\tparentMatrix.copy(points.matrixWorld).invert();\n\n\t\t\tpoints.geometry.drawRange.count = Math.min(\n\t\t\t\tlimit,\n\t\t\t\trange !== undefined ? range : limit,\n\t\t\t\tthis.positionPoints.length,\n\t\t\t);\n\n\t\t\tfor (let i = 0; i < this.positionPoints.length; i++) {\n\t\t\t\tconst positionPoint = resolveRef(this.positionPoints[i]);\n\t\t\t\tif (positionPoint) {\n\t\t\t\t\tpositionPoint.getWorldPosition(position).applyMatrix4(parentMatrix);\n\t\t\t\t\tposition.toArray(positions, i * 3);\n\t\t\t\t\tcheckUpdate(points.geometry.attributes['position']);\n\n\t\t\t\t\tpositionPoint.matrixWorldNeedsUpdate = true;\n\t\t\t\t\tpositionPoint.color.toArray(colors, i * 3);\n\t\t\t\t\tcheckUpdate(points.geometry.attributes['color']);\n\n\t\t\t\t\tsizes.set([positionPoint.size], i);\n\t\t\t\t\tcheckUpdate(points.geometry.attributes['size']);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Registers a point with this container.\n\t *\n\t * @param ref - The PositionPoint reference or element to register\n\t * @returns A cleanup function to unregister the point\n\t */\n\tsubscribe(ref: ElementRef<PositionPoint> | PositionPoint) {\n\t\tthis.positionPoints.push(ref);\n\t\treturn () => {\n\t\t\tthis.positionPoints = this.positionPoints.filter((p) => p !== ref);\n\t\t};\n\t}\n\n\t/** @internal */\n\tprotected readonly DynamicDrawUsage = THREE.DynamicDrawUsage;\n}\n","import { NgtThreeElement } from 'angular-three';\nimport * as THREE from 'three';\n\n/**\n * Type definition for the SegmentObject element in Angular Three templates.\n */\nexport type NgtSegmentObject = NgtThreeElement<typeof SegmentObject>;\n\n/**\n * A data object representing a single line segment.\n *\n * SegmentObject holds the start point, end point, and color of a line segment.\n * It is used internally by NgtsSegment to store segment data that is then\n * batched and rendered by the parent NgtsSegments component.\n */\nexport class SegmentObject {\n\t/**\n\t * The color of the segment.\n\t * @default new THREE.Color('white')\n\t */\n\tcolor: THREE.Color;\n\t/**\n\t * The starting point of the segment.\n\t * @default new THREE.Vector3(0, 0, 0)\n\t */\n\tstart: THREE.Vector3;\n\t/**\n\t * The ending point of the segment.\n\t * @default new THREE.Vector3(0, 0, 0)\n\t */\n\tend: THREE.Vector3;\n\n\tconstructor() {\n\t\tthis.color = new THREE.Color('white');\n\t\tthis.start = new THREE.Vector3(0, 0, 0);\n\t\tthis.end = new THREE.Vector3(0, 0, 0);\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @rawOptions start|color|end\n\t\t */\n\t\t'ngt-segment-object': NgtSegmentObject;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend, NgtArgs, NgtVector3, omit, pick, resolveRef, vector3 } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Line2, LineMaterial, LineMaterialParameters, LineSegmentsGeometry } from 'three-stdlib';\nimport { SegmentObject } from './segment-object';\n\n/**\n * A component representing a single line segment within an NgtsSegments container.\n *\n * Each NgtsSegment defines a line from a start point to an end point with an optional color.\n * Segments are rendered efficiently using a single draw call via the parent NgtsSegments.\n *\n * @example\n * ```html\n * <ngts-segments>\n * <ngts-segment [start]=\"[0, 0, 0]\" [end]=\"[1, 1, 1]\" [color]=\"'red'\" />\n * <ngts-segment [start]=\"[1, 1, 1]\" [end]=\"[2, 0, 0]\" [color]=\"'blue'\" />\n * </ngts-segments>\n * ```\n */\n@Component({\n\tselector: 'ngts-segment',\n\ttemplate: `\n\t\t<ngt-segment-object #segment [color]=\"color()\" [start]=\"normalizedStart()\" [end]=\"normalizedEnd()\" />\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsSegment {\n\t/**\n\t * The starting point of the line segment.\n\t * Accepts a Vector3-like value: [x, y, z], {x, y, z}, or THREE.Vector3.\n\t */\n\tstart = input.required<NgtVector3>();\n\t/**\n\t * The ending point of the line segment.\n\t * Accepts a Vector3-like value: [x, y, z], {x, y, z}, or THREE.Vector3.\n\t */\n\tend = input.required<NgtVector3>();\n\t/**\n\t * The color of the line segment.\n\t * If not specified, inherits from the parent or defaults to white.\n\t */\n\tcolor = input<THREE.ColorRepresentation>();\n\n\t/** @internal */\n\tprotected normalizedStart = vector3(this.start);\n\t/** @internal */\n\tprotected normalizedEnd = vector3(this.end);\n\n\t/**\n\t * Reference to the underlying SegmentObject element.\n\t */\n\tsegmentRef = viewChild.required<ElementRef<SegmentObject>>('segment');\n\n\tprivate segments = inject(NgtsSegments);\n\n\tconstructor() {\n\t\textend({ SegmentObject });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanUp = this.segments.subscribe(this.segmentRef());\n\t\t\tonCleanup(() => cleanUp());\n\t\t});\n\t}\n}\n\n/**\n * Configuration options for the NgtsSegments component.\n * Extends LineMaterialParameters to allow customization of line appearance.\n */\nexport interface NgtsSegmentsOptions extends LineMaterialParameters {\n\t/**\n\t * The maximum number of segments that can be rendered.\n\t * This determines the size of the position and color buffers.\n\t * @default 1000\n\t */\n\tlimit: number;\n\t/**\n\t * The width of the line segments in world units.\n\t * @default 1.0\n\t */\n\tlineWidth: number;\n}\n\nconst defaultSegmentsOptions: NgtsSegmentsOptions = {\n\tlimit: 1000,\n\tlineWidth: 1.0,\n};\n\n/**\n * A component that efficiently renders multiple line segments.\n *\n * This component uses Line2 from three-stdlib to render line segments with\n * configurable width and color. All segments are batched into a single draw call\n * for optimal performance.\n *\n * Add NgtsSegment children to define individual line segments.\n *\n * @example\n * ```html\n * <ngts-segments [options]=\"{ lineWidth: 2, limit: 100 }\">\n * <ngts-segment [start]=\"[0, 0, 0]\" [end]=\"[1, 1, 1]\" [color]=\"'red'\" />\n * <ngts-segment [start]=\"[1, 1, 1]\" [end]=\"[2, 0, 0]\" [color]=\"'blue'\" />\n * </ngts-segments>\n * ```\n */\n@Component({\n\tselector: 'ngts-segments',\n\ttemplate: `\n\t\t<ngt-primitive #line *args=\"[line]\">\n\t\t\t<ngt-primitive *args=\"[geometry]\" attach=\"geometry\" />\n\t\t\t<ngt-primitive *args=\"[material]\" attach=\"material\" [parameters]=\"materialParameters()\" />\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsSegments {\n\t/**\n\t * Configuration options for the segments rendering.\n\t */\n\toptions = input(defaultSegmentsOptions, { transform: mergeInputs(defaultSegmentsOptions) });\n\tprivate parameters = omit(this.options, ['limit', 'lineWidth']);\n\n\tprivate lineWidth = pick(this.options, 'lineWidth');\n\tprivate limit = pick(this.options, 'limit');\n\n\t/**\n\t * Reference to the underlying Line2 element.\n\t */\n\tlineRef = viewChild<ElementRef<Line2>>('line');\n\n\t/**\n\t * Array of registered segment references. Used internally to track all segments.\n\t */\n\tsegments: Array<ElementRef<SegmentObject> | SegmentObject> = [];\n\n\t/** @internal */\n\tprotected line = new Line2();\n\t/** @internal */\n\tprotected material = new LineMaterial();\n\t/** @internal */\n\tprotected geometry = new LineSegmentsGeometry();\n\tprivate resolution = new THREE.Vector2(512, 512);\n\n\t/** @internal */\n\tprotected materialParameters = computed(() => ({\n\t\tvertexColors: true,\n\t\tresolution: this.resolution,\n\t\tlinewidth: this.lineWidth(),\n\t\t...this.parameters(),\n\t}));\n\n\t/** @internal */\n\tprivate positions = computed(() => {\n\t\tconst limit = this.limit();\n\t\treturn Array.from({ length: limit * 6 }, () => 0);\n\t});\n\n\t/** @internal */\n\tprivate colors = computed(() => {\n\t\tconst limit = this.limit();\n\t\treturn Array.from({ length: limit * 6 }, () => 0);\n\t});\n\n\tconstructor() {\n\t\tbeforeRender(() => {\n\t\t\tconst [limit, positions, colors] = [this.limit(), this.positions(), this.colors()];\n\n\t\t\tfor (let i = 0; i < limit; i++) {\n\t\t\t\tconst segment = resolveRef(this.segments[i]);\n\t\t\t\tif (segment) {\n\t\t\t\t\tpositions[i * 6 + 0] = segment.start.x;\n\t\t\t\t\tpositions[i * 6 + 1] = segment.start.y;\n\t\t\t\t\tpositions[i * 6 + 2] = segment.start.z;\n\n\t\t\t\t\tpositions[i * 6 + 3] = segment.end.x;\n\t\t\t\t\tpositions[i * 6 + 4] = segment.end.y;\n\t\t\t\t\tpositions[i * 6 + 5] = segment.end.z;\n\n\t\t\t\t\tcolors[i * 6 + 0] = segment.color.r;\n\t\t\t\t\tcolors[i * 6 + 1] = segment.color.g;\n\t\t\t\t\tcolors[i * 6 + 2] = segment.color.b;\n\n\t\t\t\t\tcolors[i * 6 + 3] = segment.color.r;\n\t\t\t\t\tcolors[i * 6 + 4] = segment.color.g;\n\t\t\t\t\tcolors[i * 6 + 5] = segment.color.b;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.geometry.setColors(colors);\n\t\t\tthis.geometry.setPositions(positions);\n\t\t\tthis.line.computeLineDistances();\n\t\t});\n\t}\n\n\t/**\n\t * Registers a segment with this container.\n\t *\n\t * @param ref - The SegmentObject reference or element to register\n\t * @returns A cleanup function to unregister the segment\n\t */\n\tsubscribe(ref: ElementRef<SegmentObject> | SegmentObject) {\n\t\tthis.segments.push(ref);\n\t\treturn () => {\n\t\t\tthis.segments = this.segments.filter((i) => i !== ref);\n\t\t};\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultOptions","parentMatrix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-three-soba-performances.mjs","sources":["../../../../libs/soba/performances/src/lib/adaptive-dpr.ts","../../../../libs/soba/performances/src/lib/adaptive-events.ts","../../../../libs/soba/performances/src/lib/bvh.ts","../../../../libs/soba/performances/src/lib/detailed.ts","../../../../libs/soba/performances/src/lib/instances/position-mesh.ts","../../../../libs/soba/performances/src/lib/instances/instances.ts","../../../../libs/soba/performances/src/lib/lod.ts","../../../../libs/soba/performances/src/lib/points/position-point.ts","../../../../libs/soba/performances/src/lib/points/points.ts","../../../../libs/soba/performances/src/lib/segments/segment-object.ts","../../../../libs/soba/performances/src/lib/segments/segments.ts","../../../../libs/soba/performances/src/angular-three-soba-performances.ts"],"sourcesContent":["import { booleanAttribute, DestroyRef, Directive, effect, inject, input, untracked } from '@angular/core';\nimport { injectStore } from 'angular-three';\n\n/**\n * A directive that dynamically adjusts the device pixel ratio (DPR) based on performance metrics.\n *\n * This directive monitors the current performance state and automatically scales the DPR\n * to maintain smooth frame rates. When performance degrades, DPR is reduced; when performance\n * recovers, DPR is restored to the initial value.\n *\n * @example\n * ```html\n * <ngts-adaptive-dpr />\n * <!-- With pixelated rendering during low performance -->\n * <ngts-adaptive-dpr [pixelated]=\"true\" />\n * ```\n */\n@Directive({ selector: 'ngts-adaptive-dpr' })\nexport class NgtsAdaptiveDpr {\n\t/**\n\t * When true, applies pixelated image rendering style during reduced DPR states.\n\t * This can provide a retro aesthetic or indicate to users that performance mode is active.\n\t * @default false\n\t */\n\tpixelated = input(false, { transform: booleanAttribute });\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\n\t\teffect(() => {\n\t\t\tconst [current, pixelated, domElement, setDpr, initialDpr] = [\n\t\t\t\tstore.performance.current(),\n\t\t\t\tuntracked(this.pixelated),\n\t\t\t\tstore.snapshot.gl.domElement,\n\t\t\t\tstore.snapshot.setDpr,\n\t\t\t\tstore.snapshot.viewport.initialDpr,\n\t\t\t];\n\n\t\t\tsetDpr(current * initialDpr);\n\t\t\tif (pixelated && domElement) domElement.style.imageRendering = current === 1 ? 'auto' : 'pixelated';\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst [domElement, active, setDpr, initialDpr, pixelated] = [\n\t\t\t\tstore.snapshot.gl.domElement,\n\t\t\t\tstore.snapshot.internal.active,\n\t\t\t\tstore.snapshot.setDpr,\n\t\t\t\tstore.snapshot.viewport.initialDpr,\n\t\t\t\tuntracked(this.pixelated),\n\t\t\t];\n\n\t\t\tif (active) setDpr(initialDpr);\n\t\t\tif (pixelated && domElement) domElement.style.imageRendering = 'auto';\n\t\t});\n\t}\n}\n","import { DestroyRef, Directive, effect, inject } from '@angular/core';\nimport { injectStore } from 'angular-three';\n\n/**\n * A directive that dynamically toggles event handling based on performance metrics.\n *\n * When performance drops (current < 1), this directive disables event handling to reduce\n * computational overhead. Events are re-enabled when performance recovers or when the\n * directive is destroyed.\n *\n * This is useful for maintaining smooth rendering during heavy computation by temporarily\n * sacrificing interactivity.\n *\n * @example\n * ```html\n * <ngts-adaptive-events />\n * ```\n */\n@Directive({ selector: 'ngts-adaptive-events' })\nexport class NgtsAdaptiveEvents {\n\tconstructor() {\n\t\tconst store = injectStore();\n\t\tconst currentEnabled = store.snapshot.events.enabled;\n\n\t\teffect((onCleanup) => {\n\t\t\tconst current = store.performance.current();\n\t\t\tonCleanup(() => store.snapshot.setEvents({ enabled: current === 1 }));\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tstore.snapshot.setEvents({ enabled: currentEnabled });\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, is, NgtThreeElements, omit, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { acceleratedRaycast, computeBoundsTree, disposeBoundsTree, SAH, SplitStrategy } from 'three-mesh-bvh';\n\n/**\n * Configuration options for the NgtsBVH component.\n *\n * These options control how the Bounding Volume Hierarchy (BVH) is constructed\n * and how raycasting is performed against the geometry.\n */\nexport type NgtsBVHOptions = Partial<NgtThreeElements['ngt-group']> & {\n\t/**\n\t * Whether BVH acceleration is enabled.\n\t * @default true\n\t */\n\tenabled: boolean;\n\t/**\n\t * Use .raycastFirst to retrieve hits which is generally faster.\n\t * When true, only the first intersection is returned.\n\t * @default false\n\t */\n\tfirstHitOnly: boolean;\n\t/**\n\t * The split strategy used for BVH construction.\n\t * SAH (Surface Area Heuristic) is slowest to construct but provides\n\t * fastest runtime performance with least memory usage.\n\t * @default SAH\n\t */\n\tstrategy: SplitStrategy;\n\t/**\n\t * Whether to print warnings encountered during tree construction.\n\t * @default false\n\t */\n\tverbose: boolean;\n\t/**\n\t * If true, the bounding box for the geometry is set once the BVH has been constructed.\n\t * @default true\n\t */\n\tsetBoundingBox: boolean;\n\t/**\n\t * The maximum depth to allow the tree to build to.\n\t * @default 40\n\t */\n\tmaxDepth: number;\n\t/**\n\t * The number of triangles to aim for in a leaf node.\n\t * @default 10\n\t */\n\tmaxLeafTris: number;\n\t/**\n\t * If false then an index buffer is created if it does not exist and is rearranged\n\t * to hold the BVH structure. If true then a separate buffer is created to store the\n\t * structure and the index buffer (or lack thereof) is retained. This can be used\n\t * when the existing index layout is important or groups are being used so a\n\t * single BVH hierarchy can be created to improve performance.\n\t *\n\t * Note: This setting is experimental.\n\t * @default false\n\t */\n\tindirect?: boolean;\n};\n\nconst defaultOptions: NgtsBVHOptions = {\n\tenabled: true,\n\tfirstHitOnly: false,\n\tstrategy: SAH,\n\tverbose: false,\n\tsetBoundingBox: true,\n\tmaxDepth: 40,\n\tmaxLeafTris: 10,\n\tindirect: false,\n};\n\n/**\n * A component that applies Bounding Volume Hierarchy (BVH) acceleration to child meshes\n * for significantly faster raycasting performance.\n *\n * Wrap your mesh components with this component to automatically compute and apply\n * BVH structures. This is especially useful for complex geometries where standard\n * raycasting would be slow.\n *\n * @example\n * ```html\n * <ngts-bvh [options]=\"{ firstHitOnly: true }\">\n * <ngt-mesh>\n * <ngt-buffer-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngts-bvh>\n * ```\n */\n@Component({\n\tselector: 'ngts-bvh',\n\ttemplate: `\n\t\t<ngt-group #group [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsBVH {\n\t/**\n\t * Configuration options for BVH construction and raycasting behavior.\n\t */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\t/** @internal */\n\tprotected parameters = omit(this.options, [\n\t\t'enabled',\n\t\t'firstHitOnly',\n\t\t'strategy',\n\t\t'verbose',\n\t\t'setBoundingBox',\n\t\t'maxDepth',\n\t\t'maxLeafTris',\n\t\t'indirect',\n\t]);\n\n\t/**\n\t * Reference to the underlying THREE.Group element.\n\t */\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\n\tprivate store = injectStore();\n\n\tprivate enabled = pick(this.options, 'enabled');\n\tprivate firstHitOnly = pick(this.options, 'firstHitOnly');\n\tprivate strategy = pick(this.options, 'strategy');\n\tprivate verbose = pick(this.options, 'verbose');\n\tprivate setBoundingBox = pick(this.options, 'setBoundingBox');\n\tprivate maxDepth = pick(this.options, 'maxDepth');\n\tprivate maxLeafTris = pick(this.options, 'maxLeafTris');\n\tprivate indirect = pick(this.options, 'indirect');\n\n\tprivate reset = signal(Math.random());\n\tprivate retryMap = new Map();\n\tprivate MAX_RETRIES = 3;\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst enabled = this.enabled();\n\t\t\tif (!enabled) return;\n\n\t\t\tconst group = this.groupRef().nativeElement;\n\n\t\t\t// track reset\n\t\t\tthis.reset();\n\n\t\t\t// Hijacking the raycast method to do it for individual meshes is not an option as it would\n\t\t\t// This can only safely work if the component is used once, but there is no alternative.\n\t\t\t// cost too much memory ...\n\t\t\tconst [firstHitOnly, strategy, verbose, setBoundingBox, maxDepth, maxLeafTris, indirect, raycaster] = [\n\t\t\t\tuntracked(this.firstHitOnly),\n\t\t\t\tuntracked(this.strategy),\n\t\t\t\tuntracked(this.verbose),\n\t\t\t\tuntracked(this.setBoundingBox),\n\t\t\t\tuntracked(this.maxDepth),\n\t\t\t\tuntracked(this.maxLeafTris),\n\t\t\t\tuntracked(this.indirect),\n\t\t\t\tthis.store.snapshot.raycaster,\n\t\t\t];\n\n\t\t\tconst options = { strategy, verbose, setBoundingBox, maxDepth, maxLeafTris, indirect };\n\t\t\traycaster.firstHitOnly = firstHitOnly;\n\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\tgroup.visible = false;\n\t\t\tgroup.traverse((child) => {\n\t\t\t\tif (\n\t\t\t\t\tis.three<THREE.Mesh>(child, 'isMesh') &&\n\t\t\t\t\t!child.geometry.boundsTree &&\n\t\t\t\t\tchild.raycast === THREE.Mesh.prototype.raycast\n\t\t\t\t) {\n\t\t\t\t\tconst geometry = child.geometry;\n\t\t\t\t\tconst retryCount = this.retryMap.get(child) ?? 0;\n\t\t\t\t\t// retry 3 times\n\t\t\t\t\tif (!Object.keys(geometry.attributes).length && retryCount <= this.MAX_RETRIES) {\n\t\t\t\t\t\tthis.retryMap.set(child, retryCount + 1);\n\t\t\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\t\t\tthis.reset.set(Math.random());\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!group.visible) group.visible = true;\n\n\t\t\t\t\tchild.raycast = acceleratedRaycast;\n\t\t\t\t\tchild.geometry.computeBoundsTree = computeBoundsTree;\n\t\t\t\t\tchild.geometry.disposeBoundsTree = disposeBoundsTree;\n\t\t\t\t\tchild.geometry.computeBoundsTree(options);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\ttimeoutId && clearTimeout(timeoutId);\n\n\t\t\t\tdelete raycaster.firstHitOnly;\n\t\t\t\tgroup.traverse((child) => {\n\t\t\t\t\tif (is.three<THREE.Mesh>(child, 'isMesh') && child.geometry.boundsTree) {\n\t\t\t\t\t\tchild.geometry.disposeBoundsTree();\n\t\t\t\t\t\tchild.raycast = THREE.Mesh.prototype.raycast;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!group.visible) group.visible = true;\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.retryMap.clear();\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend, getInstanceState, NgtThreeElements, omit, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { LOD } from 'three';\n\n/**\n * Configuration options for the NgtsDetailed LOD component.\n */\nexport interface NgtsDetailedOptions extends Partial<NgtThreeElements['ngt-lOD']> {\n\t/**\n\t * The hysteresis value for LOD level transitions.\n\t * This value prevents rapid switching between LOD levels when the camera\n\t * is near a distance threshold. A higher value means more resistance to switching.\n\t * @default 0\n\t */\n\thysteresis: number;\n}\n\nconst defaultOptions: NgtsDetailedOptions = {\n\thysteresis: 0,\n};\n\n/**\n * A component that implements Level of Detail (LOD) rendering for performance optimization.\n *\n * This component automatically switches between different detail levels of child objects\n * based on the camera distance. Child objects are associated with distance thresholds\n * where closer distances use higher-detail meshes.\n *\n * @example\n * ```html\n * <ngts-detailed [distances]=\"[0, 50, 100]\">\n * <ngt-mesh><!-- High detail --></ngt-mesh>\n * <ngt-mesh><!-- Medium detail --></ngt-mesh>\n * <ngt-mesh><!-- Low detail --></ngt-mesh>\n * </ngts-detailed>\n * ```\n */\n@Component({\n\tselector: 'ngts-detailed',\n\ttemplate: `\n\t\t<ngt-lOD #lod [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-lOD>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsDetailed {\n\t/**\n\t * Array of distance thresholds for each LOD level.\n\t * The first distance corresponds to the first child (highest detail),\n\t * and subsequent distances correspond to lower detail children.\n\t */\n\tdistances = input.required<number[]>();\n\t/**\n\t * Configuration options for the LOD behavior.\n\t */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\t/** @internal */\n\tprotected parameters = omit(this.options, ['hysteresis']);\n\n\t/**\n\t * Reference to the underlying THREE.LOD element.\n\t */\n\tlodRef = viewChild.required<ElementRef<THREE.LOD>>('lod');\n\tprivate hysteresis = pick(this.options, 'hysteresis');\n\n\tconstructor() {\n\t\textend({ LOD });\n\n\t\teffect(() => {\n\t\t\tconst lod = this.lodRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(lod);\n\t\t\tif (!instanceState) return;\n\t\t\tconst [, distances, hysteresis] = [instanceState.objects(), this.distances(), this.hysteresis()];\n\t\t\tlod.levels.length = 0;\n\t\t\tlod.children.forEach((object, index) => {\n\t\t\t\tlod.levels.push({ object, distance: distances[index], hysteresis });\n\t\t\t});\n\t\t});\n\n\t\tbeforeRender(({ camera }) => {\n\t\t\tthis.lodRef().nativeElement.update(camera);\n\t\t});\n\t}\n}\n","import { ElementRef } from '@angular/core';\nimport { NgtThreeElement, resolveRef } from 'angular-three';\nimport * as THREE from 'three';\n\n/**\n * Type definition for the PositionMesh element in Angular Three templates.\n */\nexport type NgtPositionMesh = NgtThreeElement<typeof PositionMesh>;\n\nconst _instanceLocalMatrix = new THREE.Matrix4();\nconst _instanceWorldMatrix = new THREE.Matrix4();\nconst _instanceIntersects: THREE.Intersection[] = [];\nconst _mesh = new THREE.Mesh<THREE.BufferGeometry, THREE.MeshBasicMaterial>();\n\n/**\n * A virtual mesh class that represents a single instance within an InstancedMesh.\n *\n * PositionMesh extends THREE.Group and provides the ability to position, rotate,\n * scale, and color individual instances while maintaining proper raycasting support.\n * Each PositionMesh is linked to a parent InstancedMesh and contributes its transform\n * to the instance matrix buffer.\n *\n * This class enables individual instances to receive pointer events and have bounds\n * for frustum culling, which is not natively supported by THREE.InstancedMesh.\n */\nexport class PositionMesh extends THREE.Group {\n\t/**\n\t * The color of this instance.\n\t * @default new THREE.Color('white')\n\t */\n\tcolor: THREE.Color;\n\t/**\n\t * Reference to the parent InstancedMesh that this instance belongs to.\n\t */\n\tinstance: ElementRef<THREE.InstancedMesh> | THREE.InstancedMesh | null | undefined;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.color = new THREE.Color('white');\n\t\tthis.instance = undefined;\n\t}\n\n\t/**\n\t * Gets the geometry from the parent InstancedMesh.\n\t * This allows the virtual instance to have bounds for frustum culling.\n\t */\n\tget geometry() {\n\t\treturn resolveRef(this.instance)?.geometry;\n\t}\n\n\t/**\n\t * Custom raycast implementation that enables this virtual instance to receive pointer events.\n\t *\n\t * @param raycaster - The raycaster to test against\n\t * @param intersects - Array to populate with intersection results\n\t */\n\toverride raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) {\n\t\tconst parent = resolveRef(this.instance);\n\t\tif (!parent) return;\n\t\tif (!parent.geometry || !parent.material) return;\n\t\t_mesh.geometry = parent.geometry;\n\t\tconst matrixWorld = parent.matrixWorld;\n\t\tconst instanceId = parent.userData['instances'].indexOf(this);\n\t\t// If the instance wasn't found or exceeds the parents draw range, bail out\n\t\tif (instanceId === -1 || instanceId > parent.count) return;\n\t\t// calculate the world matrix for each instance\n\t\tparent.getMatrixAt(instanceId, _instanceLocalMatrix);\n\t\t_instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix);\n\t\t// the mesh represents this single instance\n\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\t\t// raycast side according to instance material\n\t\tif (parent.material instanceof THREE.Material) _mesh.material.side = parent.material.side;\n\t\telse _mesh.material.side = parent.material[0].side;\n\t\t_mesh.raycast(raycaster, _instanceIntersects);\n\t\t// process the result of raycast\n\t\tfor (let i = 0, l = _instanceIntersects.length; i < l; i++) {\n\t\t\tconst intersect = _instanceIntersects[i];\n\t\t\tintersect.instanceId = instanceId;\n\t\t\tintersect.object = this;\n\t\t\tintersects.push(intersect);\n\t\t}\n\t\t_instanceIntersects.length = 0;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t * @rawOptions instance|color\n\t\t */\n\t\t'ngt-position-mesh': NgtPositionMesh;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, checkUpdate, extend, NgtThreeElements, omit, pick, resolveRef } from 'angular-three';\nimport { setUpdateRange } from 'angular-three-soba/misc';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { InstancedBufferAttribute, InstancedMesh } from 'three';\nimport { NgtPositionMesh, PositionMesh } from './position-mesh';\n\nconst parentMatrix = new THREE.Matrix4();\nconst instanceMatrix = new THREE.Matrix4();\nconst tempMatrix = new THREE.Matrix4();\nconst translation = new THREE.Vector3();\nconst rotation = new THREE.Quaternion();\nconst scale = new THREE.Vector3();\n\n/**\n * A component representing a single instance within an NgtsInstances container.\n *\n * Each NgtsInstance is a virtual mesh that contributes to the parent InstancedMesh.\n * Instances can be individually positioned, rotated, scaled, and colored while\n * sharing the same geometry and material for optimal rendering performance.\n *\n * @example\n * ```html\n * <ngts-instances>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * @for (item of items; track item.id) {\n * <ngts-instance [options]=\"{ position: item.position, color: item.color }\" />\n * }\n * </ngts-instances>\n * ```\n */\n@Component({\n\tselector: 'ngts-instance',\n\ttemplate: `\n\t\t<ngt-position-mesh #positionMesh [instance]=\"instances.instancedMeshRef()\" [parameters]=\"options()\">\n\t\t\t<ng-content />\n\t\t</ngt-position-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsInstance {\n\t/**\n\t * Options passed to the underlying PositionMesh, including position, rotation, scale, and color.\n\t */\n\toptions = input({} as Partial<NgtPositionMesh>);\n\n\t/** @internal */\n\tprotected instances = inject(NgtsInstances);\n\n\t/**\n\t * Reference to the underlying PositionMesh element.\n\t */\n\tpositionMeshRef = viewChild.required<ElementRef<PositionMesh>>('positionMesh');\n\n\tconstructor() {\n\t\textend({ PositionMesh });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.instances.subscribe(this.positionMeshRef().nativeElement);\n\t\t\tonCleanup(() => cleanup());\n\t\t});\n\t}\n}\n\n/**\n * Configuration options for the NgtsInstances component.\n */\nexport interface NgtsInstancesOptions extends Partial<NgtThreeElements['ngt-instanced-mesh']> {\n\t/**\n\t * Limits the number of visible instances. When set, only the first `range` instances\n\t * are rendered. Useful for dynamic instance counts without recreating the buffer.\n\t */\n\trange?: number;\n\t/**\n\t * The maximum number of instances that can be rendered.\n\t * This determines the size of the instance buffers.\n\t * @default 1000\n\t */\n\tlimit: number;\n\t/**\n\t * The number of frames to update instance transforms.\n\t * Set to Infinity for continuous updates, or a specific number to stop\n\t * updating after that many frames (useful for static instances).\n\t * @default Infinity\n\t */\n\tframes: number;\n}\n\nconst defaultOptions: NgtsInstancesOptions = {\n\tlimit: 1000,\n\tframes: Infinity,\n};\n\n/**\n * A component that efficiently renders many instances of the same geometry and material.\n *\n * This component uses THREE.InstancedMesh under the hood to batch render multiple\n * objects with a single draw call, providing significant performance improvements\n * when rendering many similar objects.\n *\n * Place geometry and material as direct children, and NgtsInstance components\n * for each instance you want to render.\n *\n * @example\n * ```html\n * <ngts-instances [options]=\"{ limit: 100 }\">\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * @for (i of [0, 1, 2, 3, 4]; track i) {\n * <ngts-instance [options]=\"{ position: [i * 2, 0, 0] }\" />\n * }\n * </ngts-instances>\n * ```\n */\n@Component({\n\tselector: 'ngts-instances',\n\ttemplate: `\n\t\t<ngt-instanced-mesh\n\t\t\t#instancedMesh\n\t\t\t[userData]=\"{ instances }\"\n\t\t\t[matrixAutoUpdate]=\"false\"\n\t\t\t[raycast]=\"null\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t>\n\t\t\t<ngt-instanced-buffer-attribute\n\t\t\t\tattach=\"instanceMatrix\"\n\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t[count]=\"buffers().matrices.length / 16\"\n\t\t\t\t[array]=\"buffers().matrices\"\n\t\t\t\t[itemSize]=\"16\"\n\t\t\t/>\n\t\t\t<ngt-instanced-buffer-attribute\n\t\t\t\tattach=\"instanceColor\"\n\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t[count]=\"buffers().colors.length / 3\"\n\t\t\t\t[array]=\"buffers().colors\"\n\t\t\t\t[itemSize]=\"3\"\n\t\t\t/>\n\t\t\t<ng-content />\n\t\t</ngt-instanced-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsInstances {\n\t/** @internal */\n\tprotected readonly DynamicDrawUsage = THREE.DynamicDrawUsage;\n\n\t/**\n\t * Configuration options for the instanced rendering.\n\t */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\t/** @internal */\n\tprotected parameters = omit(this.options, ['limit', 'frames', 'range']);\n\n\t/**\n\t * Reference to the underlying THREE.InstancedMesh element.\n\t */\n\tinstancedMeshRef = viewChild.required<ElementRef<THREE.InstancedMesh>>('instancedMesh');\n\n\tprivate limit = pick(this.options, 'limit');\n\n\t/** @internal */\n\tprotected buffers = computed(() => {\n\t\tconst limit = this.limit();\n\t\tconst matrices = new Float32Array(limit * 16);\n\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\ttempMatrix.identity().toArray(matrices, i * 16);\n\t\t}\n\n\t\tconst colors = new Float32Array([...Array.from({ length: limit * 3 }, () => 1)]);\n\t\treturn { matrices, colors };\n\t});\n\n\t/**\n\t * Array of registered instance references. Used internally to track all instances.\n\t */\n\tinstances: Array<ElementRef<PositionMesh> | PositionMesh> = [];\n\n\tconstructor() {\n\t\textend({ InstancedMesh, InstancedBufferAttribute });\n\n\t\teffect(() => {\n\t\t\tconst instancedMesh = this.instancedMeshRef()?.nativeElement;\n\t\t\tif (!instancedMesh) return;\n\t\t\tcheckUpdate(instancedMesh.instanceMatrix);\n\t\t});\n\n\t\tlet iterations = 0;\n\t\tlet count = 0;\n\n\t\tbeforeRender(() => {\n\t\t\tconst instancedMesh = this.instancedMeshRef()?.nativeElement;\n\t\t\tif (!instancedMesh) return;\n\t\t\tconst { frames, limit, range } = this.options();\n\t\t\tconst { matrices, colors } = this.buffers();\n\t\t\tif (frames === Infinity || iterations < frames) {\n\t\t\t\tinstancedMesh.updateMatrix();\n\t\t\t\tinstancedMesh.updateMatrixWorld();\n\t\t\t\tparentMatrix.copy(instancedMesh.matrixWorld).invert();\n\n\t\t\t\tcount = Math.min(limit, range !== undefined ? range : limit, this.instances.length);\n\t\t\t\tinstancedMesh.count = count;\n\t\t\t\tsetUpdateRange(instancedMesh.instanceMatrix, { start: 0, count: count * 16 });\n\t\t\t\tif (instancedMesh.instanceColor) {\n\t\t\t\t\tsetUpdateRange(instancedMesh.instanceColor, { start: 0, count: count * 3 });\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 0; i < this.instances.length; i++) {\n\t\t\t\t\tconst instance = resolveRef(this.instances[i]);\n\t\t\t\t\tif (instance) {\n\t\t\t\t\t\t// Multiply the inverse of the InstancedMesh world matrix or else\n\t\t\t\t\t\t// Instances will be double-transformed if <Instances> isn't at identity\n\t\t\t\t\t\tinstance.matrixWorld.decompose(translation, rotation, scale);\n\t\t\t\t\t\tinstanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);\n\t\t\t\t\t\tinstanceMatrix.toArray(matrices, i * 16);\n\t\t\t\t\t\tcheckUpdate(instancedMesh.instanceMatrix);\n\t\t\t\t\t\tinstance.color.toArray(colors, i * 3);\n\t\t\t\t\t\tcheckUpdate(instancedMesh.instanceColor);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titerations++;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Registers an instance with this container.\n\t *\n\t * @param ref - The PositionMesh reference or element to register\n\t * @returns A cleanup function to unregister the instance\n\t */\n\tsubscribe(ref: ElementRef<PositionMesh> | PositionMesh) {\n\t\tthis.instances.push(ref);\n\t\treturn () => {\n\t\t\tthis.instances = this.instances.filter((i) => i !== ref);\n\t\t};\n\t}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, contentChildren, Directive, ElementRef, inject, input, signal, TemplateRef } from '@angular/core';\nimport { beforeRender, injectStore } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { Object3D, Vector3 } from 'three';\n\nexport type NgtsLODLevelOptions = {\n\tdistance: number;\n\thysteresis: number;\n};\n\nconst defaultLodLevelOptions: NgtsLODLevelOptions = {\n\tdistance: 0,\n\thysteresis: 0,\n};\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\n\n/**\n * Helper directive to capture a template to attach to\n * an NgtsLOD component.\n */\n@Directive({\n\tselector: 'ng-template[lodLevel]',\n})\nexport class NgtsLODLevel {\n\tlodLevel = input(defaultLodLevelOptions, { transform: mergeInputs(defaultLodLevelOptions) });\n\ttemplate = inject(TemplateRef);\n}\n\n/**\n * Angular-native port of THREE.LOD\n *\n * Allows to display an object with several levels of details.\n *\n * The main difference with THREE.LOD is that we use angular-three\n * to add/remove the right object from the scene graph, rather than\n * setting the visible flag on one of the object, but keeping them\n * all in the graph.\n *\n * Usage:\n *\n * ```html\n * <ngt-group lod [maxDistance]=\"10000\">\n * <ngt-mesh *lodLevel />\n * <ngt-mesh *lodLevel=\"{distance: 100, hysteresis: 0.1}\" />\n * <ngt-mesh *lodLevel=\"{distance: 1000}\" />\n * </ngt-group>\n * ```\n */\n@Component({\n\tselector: '[lod]',\n\ttemplate: `\n\t\t<ng-container [ngTemplateOutlet]=\"level()?.template\" />\n\t`,\n\timports: [NgTemplateOutlet],\n})\nexport class NgtsLODImpl {\n\tmaxDistance = input<number>();\n\n\tprivate store = injectStore();\n\tprivate container = inject(ElementRef);\n\n\treadonly levels = contentChildren(NgtsLODLevel);\n\treadonly level = signal<NgtsLODLevel | undefined>(undefined);\n\n\tconstructor() {\n\t\tbeforeRender(() => {\n\t\t\tconst levels = this.levels();\n\t\t\tconst currentLevel = this.level();\n\t\t\tconst maxDistance = this.maxDistance();\n\n\t\t\tlet level: NgtsLODLevel | undefined = levels[0];\n\n\t\t\tif (level && (levels.length > 1 || maxDistance)) {\n\t\t\t\tconst container = this.container.nativeElement as Object3D;\n\t\t\t\tconst { matrixWorld, zoom } = this.store.snapshot.camera;\n\n\t\t\t\t_v1.setFromMatrixPosition(matrixWorld);\n\t\t\t\t_v2.setFromMatrixPosition(container.matrixWorld);\n\n\t\t\t\tconst distance = _v1.distanceTo(_v2) / zoom;\n\n\t\t\t\tif (maxDistance && distance > maxDistance) {\n\t\t\t\t\tlevel = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = 1, l = levels.length; i < l; i++) {\n\t\t\t\t\t\tconst _level = levels[i];\n\t\t\t\t\t\tlet { distance: levelDistance, hysteresis } = _level.lodLevel();\n\n\t\t\t\t\t\tif (hysteresis && currentLevel === _level) {\n\t\t\t\t\t\t\tlevelDistance -= levelDistance * hysteresis;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (distance >= levelDistance) {\n\t\t\t\t\t\t\tlevel = _level;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (level !== currentLevel) {\n\t\t\t\tthis.level.set(level);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport const NgtsLOD = [NgtsLODImpl, NgtsLODLevel] as const;\n","import { ElementRef } from '@angular/core';\nimport { NgtThreeElement, resolveRef } from 'angular-three';\nimport * as THREE from 'three';\n\n/**\n * Type definition for the PositionPoint element in Angular Three templates.\n */\nexport type NgtPositionPoint = NgtThreeElement<typeof PositionPoint>;\n\nconst _inverseMatrix = new THREE.Matrix4();\nconst _ray = new THREE.Ray();\nconst _sphere = new THREE.Sphere();\nconst _position = new THREE.Vector3();\n\n/**\n * A virtual point class that represents a single point within a Points object.\n *\n * PositionPoint extends THREE.Group and provides the ability to position, color,\n * and size individual points while maintaining proper raycasting support.\n * Each PositionPoint is linked to a parent Points object and contributes its\n * position to the position buffer.\n *\n * This class enables individual points to receive pointer events, which is not\n * natively supported by THREE.Points.\n */\nexport class PositionPoint extends THREE.Group {\n\t/**\n\t * The size of this point.\n\t * @default 0\n\t */\n\tsize: number;\n\t/**\n\t * The color of this point.\n\t * @default new THREE.Color('white')\n\t */\n\tcolor: THREE.Color;\n\t/**\n\t * Reference to the parent Points object that this point belongs to.\n\t */\n\tinstance: ElementRef<THREE.Points> | THREE.Points | null | undefined;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.size = 0;\n\t\tthis.color = new THREE.Color('white');\n\t\tthis.instance = undefined;\n\t}\n\n\t/**\n\t * Gets the geometry from the parent Points object.\n\t * This allows the virtual point to have bounds for frustum culling.\n\t */\n\tget geometry() {\n\t\treturn resolveRef(this.instance)?.geometry;\n\t}\n\n\t/**\n\t * Custom raycast implementation that enables this virtual point to receive pointer events.\n\t *\n\t * @param raycaster - The raycaster to test against\n\t * @param intersects - Array to populate with intersection results\n\t */\n\toverride raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) {\n\t\tconst parent = resolveRef(this.instance);\n\t\tif (!parent || !parent.geometry) return;\n\t\tconst instanceId = parent.userData['instances'].indexOf(this);\n\t\t// If the instance wasn't found or exceeds the parents draw range, bail out\n\t\tif (instanceId === -1 || instanceId > parent.geometry.drawRange.count) return;\n\n\t\tconst threshold = raycaster.params.Points?.threshold ?? 1;\n\t\t_sphere.set(this.getWorldPosition(_position), threshold);\n\t\tif (raycaster.ray.intersectsSphere(_sphere) === false) return;\n\n\t\t_inverseMatrix.copy(parent.matrixWorld).invert();\n\t\t_ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);\n\n\t\tconst localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\t\tconst rayPointDistanceSq = _ray.distanceSqToPoint(this.position);\n\n\t\tif (rayPointDistanceSq < localThresholdSq) {\n\t\t\tconst intersectPoint = new THREE.Vector3();\n\t\t\t_ray.closestPointToPoint(this.position, intersectPoint);\n\t\t\tintersectPoint.applyMatrix4(this.matrixWorld);\n\t\t\tconst distance = raycaster.ray.origin.distanceTo(intersectPoint);\n\t\t\tif (distance < raycaster.near || distance > raycaster.far) return;\n\t\t\tintersects.push({\n\t\t\t\tdistance,\n\t\t\t\tdistanceToRay: Math.sqrt(rayPointDistanceSq),\n\t\t\t\tpoint: intersectPoint,\n\t\t\t\tindex: instanceId,\n\t\t\t\tface: null,\n\t\t\t\tobject: this,\n\t\t\t});\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t * @rawOptions instance|color|size\n\t\t */\n\t\t'ngt-position-point': NgtPositionPoint;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, checkUpdate, extend, NgtThreeElements, omit, pick, resolveRef } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { BufferAttribute, BufferGeometry, Points } from 'three';\nimport { NgtPositionPoint, PositionPoint } from './position-point';\n\n/**\n * A component representing a single point within an NgtsPointsInstances container.\n *\n * Each NgtsPoint is a virtual point that contributes to the parent Points object.\n * Points can be individually positioned, colored, and sized while sharing the same\n * material for optimal rendering performance.\n *\n * @example\n * ```html\n * <ngts-points-instances>\n * <ngt-points-material [size]=\"0.1\" />\n * @for (item of items; track item.id) {\n * <ngts-point [options]=\"{ position: item.position, color: item.color, size: item.size }\" />\n * }\n * </ngts-points-instances>\n * ```\n */\n@Component({\n\tselector: 'ngts-point',\n\ttemplate: `\n\t\t<ngt-position-point #positionPoint [parameters]=\"options()\" [instance]=\"points.pointsRef()\">\n\t\t\t<ng-content />\n\t\t</ngt-position-point>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsPoint {\n\t/**\n\t * Options passed to the underlying PositionPoint, including position, color, and size.\n\t */\n\toptions = input({} as Partial<NgtPositionPoint>);\n\n\t/**\n\t * Reference to the underlying PositionPoint element.\n\t */\n\tpositionPointRef = viewChild.required<ElementRef<PositionPoint>>('positionPoint');\n\n\t/** @internal */\n\tprotected points = inject(NgtsPointsInstances);\n\n\tconstructor() {\n\t\textend({ PositionPoint });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanUp = this.points.subscribe(this.positionPointRef().nativeElement);\n\t\t\tonCleanup(() => cleanUp());\n\t\t});\n\t}\n}\n\n/**\n * A component for rendering points from pre-computed buffer data.\n *\n * This component is optimized for cases where you have large arrays of point data\n * that you want to render directly without the overhead of individual point components.\n * Ideal for particle systems, data visualizations, or any scenario with many static\n * or programmatically-updated points.\n *\n * @example\n * ```html\n * <ngts-points-buffer [positions]=\"positionsArray\" [colors]=\"colorsArray\" [sizes]=\"sizesArray\">\n * <ngt-points-material [vertexColors]=\"true\" />\n * </ngts-points-buffer>\n * ```\n */\n@Component({\n\tselector: 'ngts-points-buffer',\n\ttemplate: `\n\t\t<ngt-points #points [parameters]=\"options()\">\n\t\t\t<ngt-buffer-geometry>\n\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\tattach=\"attributes.position\"\n\t\t\t\t\t[count]=\"positions().length / stride()\"\n\t\t\t\t\t[array]=\"positions()\"\n\t\t\t\t\t[itemSize]=\"stride()\"\n\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t/>\n\t\t\t\t@if (colors(); as colors) {\n\t\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\t\tattach=\"attributes.color\"\n\t\t\t\t\t\t[count]=\"colors.length / stride()\"\n\t\t\t\t\t\t[array]=\"colors\"\n\t\t\t\t\t\t[itemSize]=\"3\"\n\t\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\t@if (sizes(); as sizes) {\n\t\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\t\tattach=\"attributes.size\"\n\t\t\t\t\t\t[count]=\"sizes.length / stride()\"\n\t\t\t\t\t\t[array]=\"sizes\"\n\t\t\t\t\t\t[itemSize]=\"1\"\n\t\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</ngt-buffer-geometry>\n\t\t\t<ng-content />\n\t\t</ngt-points>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsPointsBuffer {\n\t/**\n\t * Float32Array containing point positions. Length should be divisible by stride.\n\t * For 3D points (stride=3): [x1, y1, z1, x2, y2, z2, ...]\n\t */\n\tpositions = input.required<Float32Array>();\n\t/**\n\t * Optional Float32Array containing RGB color values for each point.\n\t * Length should be (positions.length / stride) * 3.\n\t */\n\tcolors = input<Float32Array>();\n\t/**\n\t * Optional Float32Array containing size values for each point.\n\t * Length should be positions.length / stride.\n\t */\n\tsizes = input<Float32Array>();\n\t/**\n\t * The number of components per position (2 for 2D, 3 for 3D).\n\t * @default 3\n\t */\n\tstride = input<2 | 3>(3);\n\t/**\n\t * Additional options passed to the Points object.\n\t */\n\toptions = input({} as Partial<NgtPositionPoint>);\n\n\t/**\n\t * Reference to the underlying THREE.Points element.\n\t */\n\tpointsRef = viewChild.required<ElementRef<THREE.Points>>('points');\n\n\tconstructor() {\n\t\textend({ Points, BufferAttribute, BufferGeometry });\n\n\t\tbeforeRender(() => {\n\t\t\tconst points = this.pointsRef()?.nativeElement;\n\t\t\tif (!points) return;\n\n\t\t\tconst attributes = points.geometry.attributes;\n\t\t\tcheckUpdate(attributes['position']);\n\t\t\tif (this.colors()) checkUpdate(attributes['color']);\n\t\t\tif (this.sizes()) checkUpdate(attributes['size']);\n\t\t});\n\t}\n\n\t/** @internal */\n\tprotected readonly DynamicDrawUsage = THREE.DynamicDrawUsage;\n}\n\nconst parentMatrix = new THREE.Matrix4();\nconst position = new THREE.Vector3();\n\n/**\n * Configuration options for the NgtsPointsInstances component.\n */\nexport interface NgtsPointsInstancesOptions extends Partial<NgtThreeElements['ngt-points']> {\n\t/**\n\t * Limits the number of visible points. When set, only the first `range` points\n\t * are rendered. Useful for dynamic point counts without recreating buffers.\n\t */\n\trange?: number;\n\t/**\n\t * The maximum number of points that can be rendered.\n\t * This determines the size of the position, color, and size buffers.\n\t * @default 1000\n\t */\n\tlimit: number;\n}\n\nconst defaultInstancesOptions: NgtsPointsInstancesOptions = { limit: 1000 };\n\n/**\n * A component that efficiently renders many individual points with per-point control.\n *\n * Unlike NgtsPointsBuffer which uses pre-computed arrays, NgtsPointsInstances\n * allows you to add individual NgtsPoint children that can be dynamically\n * positioned, colored, and sized. Each point supports raycasting for interactivity.\n *\n * @example\n * ```html\n * <ngts-points-instances [options]=\"{ limit: 100 }\">\n * <ngt-points-material [size]=\"0.1\" [vertexColors]=\"true\" />\n * @for (i of [0, 1, 2, 3, 4]; track i) {\n * <ngts-point [options]=\"{ position: [i * 2, 0, 0], color: 'red' }\" />\n * }\n * </ngts-points-instances>\n * ```\n */\n@Component({\n\tselector: 'ngts-points-instances',\n\ttemplate: `\n\t\t<ngt-points\n\t\t\t#points\n\t\t\t[userData]=\"{ instances: positionPoints }\"\n\t\t\t[matrixAutoUpdate]=\"false\"\n\t\t\t[raycast]=\"null\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t>\n\t\t\t<ngt-buffer-geometry>\n\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\tattach=\"attributes.position\"\n\t\t\t\t\t[count]=\"buffers().positions.length / 3\"\n\t\t\t\t\t[array]=\"buffers().positions\"\n\t\t\t\t\t[itemSize]=\"3\"\n\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t/>\n\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\tattach=\"attributes.color\"\n\t\t\t\t\t[count]=\"buffers().colors.length / 3\"\n\t\t\t\t\t[array]=\"buffers().colors\"\n\t\t\t\t\t[itemSize]=\"3\"\n\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t/>\n\t\t\t\t<ngt-buffer-attribute\n\t\t\t\t\tattach=\"attributes.size\"\n\t\t\t\t\t[count]=\"buffers().sizes.length\"\n\t\t\t\t\t[array]=\"buffers().sizes\"\n\t\t\t\t\t[itemSize]=\"1\"\n\t\t\t\t\t[usage]=\"DynamicDrawUsage\"\n\t\t\t\t/>\n\t\t\t</ngt-buffer-geometry>\n\t\t\t<ng-content />\n\t\t</ngt-points>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsPointsInstances {\n\t/**\n\t * Configuration options for the points rendering.\n\t */\n\toptions = input(defaultInstancesOptions, { transform: mergeInputs(defaultInstancesOptions) });\n\t/**\n\t * Computed parameters passed to the underlying Points object.\n\t */\n\tparameters = omit(this.options, ['limit', 'range']);\n\n\t/**\n\t * Reference to the underlying THREE.Points element.\n\t */\n\tpointsRef = viewChild.required<ElementRef<THREE.Points>>('points');\n\n\tprivate limit = pick(this.options, 'limit');\n\n\t/**\n\t * Computed buffer arrays for positions, colors, and sizes.\n\t */\n\tbuffers = computed(() => {\n\t\tconst limit = this.limit();\n\n\t\treturn {\n\t\t\tpositions: new Float32Array(limit * 3),\n\t\t\tcolors: Float32Array.from({ length: limit * 3 }, () => 1),\n\t\t\tsizes: Float32Array.from({ length: limit }, () => 1),\n\t\t};\n\t});\n\n\t/**\n\t * Array of registered point references. Used internally to track all points.\n\t */\n\tpositionPoints: Array<ElementRef<PositionPoint> | PositionPoint> = [];\n\n\tconstructor() {\n\t\textend({ Points, BufferAttribute, BufferGeometry });\n\n\t\teffect(() => {\n\t\t\tconst points = this.pointsRef()?.nativeElement;\n\t\t\tif (!points) return;\n\t\t\tcheckUpdate(points.geometry.attributes['position']);\n\t\t});\n\n\t\tbeforeRender(() => {\n\t\t\tconst points = this.pointsRef()?.nativeElement;\n\t\t\tif (!points) return;\n\n\t\t\tconst { limit, range } = this.options();\n\t\t\tconst { positions, sizes, colors } = this.buffers();\n\n\t\t\tpoints.updateMatrix();\n\t\t\tpoints.updateMatrixWorld();\n\t\t\tparentMatrix.copy(points.matrixWorld).invert();\n\n\t\t\tpoints.geometry.drawRange.count = Math.min(\n\t\t\t\tlimit,\n\t\t\t\trange !== undefined ? range : limit,\n\t\t\t\tthis.positionPoints.length,\n\t\t\t);\n\n\t\t\tfor (let i = 0; i < this.positionPoints.length; i++) {\n\t\t\t\tconst positionPoint = resolveRef(this.positionPoints[i]);\n\t\t\t\tif (positionPoint) {\n\t\t\t\t\tpositionPoint.getWorldPosition(position).applyMatrix4(parentMatrix);\n\t\t\t\t\tposition.toArray(positions, i * 3);\n\t\t\t\t\tcheckUpdate(points.geometry.attributes['position']);\n\n\t\t\t\t\tpositionPoint.matrixWorldNeedsUpdate = true;\n\t\t\t\t\tpositionPoint.color.toArray(colors, i * 3);\n\t\t\t\t\tcheckUpdate(points.geometry.attributes['color']);\n\n\t\t\t\t\tsizes.set([positionPoint.size], i);\n\t\t\t\t\tcheckUpdate(points.geometry.attributes['size']);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Registers a point with this container.\n\t *\n\t * @param ref - The PositionPoint reference or element to register\n\t * @returns A cleanup function to unregister the point\n\t */\n\tsubscribe(ref: ElementRef<PositionPoint> | PositionPoint) {\n\t\tthis.positionPoints.push(ref);\n\t\treturn () => {\n\t\t\tthis.positionPoints = this.positionPoints.filter((p) => p !== ref);\n\t\t};\n\t}\n\n\t/** @internal */\n\tprotected readonly DynamicDrawUsage = THREE.DynamicDrawUsage;\n}\n","import { NgtThreeElement } from 'angular-three';\nimport * as THREE from 'three';\n\n/**\n * Type definition for the SegmentObject element in Angular Three templates.\n */\nexport type NgtSegmentObject = NgtThreeElement<typeof SegmentObject>;\n\n/**\n * A data object representing a single line segment.\n *\n * SegmentObject holds the start point, end point, and color of a line segment.\n * It is used internally by NgtsSegment to store segment data that is then\n * batched and rendered by the parent NgtsSegments component.\n */\nexport class SegmentObject {\n\t/**\n\t * The color of the segment.\n\t * @default new THREE.Color('white')\n\t */\n\tcolor: THREE.Color;\n\t/**\n\t * The starting point of the segment.\n\t * @default new THREE.Vector3(0, 0, 0)\n\t */\n\tstart: THREE.Vector3;\n\t/**\n\t * The ending point of the segment.\n\t * @default new THREE.Vector3(0, 0, 0)\n\t */\n\tend: THREE.Vector3;\n\n\tconstructor() {\n\t\tthis.color = new THREE.Color('white');\n\t\tthis.start = new THREE.Vector3(0, 0, 0);\n\t\tthis.end = new THREE.Vector3(0, 0, 0);\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @rawOptions start|color|end\n\t\t */\n\t\t'ngt-segment-object': NgtSegmentObject;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend, NgtArgs, NgtVector3, omit, pick, resolveRef, vector3 } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Line2, LineMaterial, LineMaterialParameters, LineSegmentsGeometry } from 'three-stdlib';\nimport { SegmentObject } from './segment-object';\n\n/**\n * A component representing a single line segment within an NgtsSegments container.\n *\n * Each NgtsSegment defines a line from a start point to an end point with an optional color.\n * Segments are rendered efficiently using a single draw call via the parent NgtsSegments.\n *\n * @example\n * ```html\n * <ngts-segments>\n * <ngts-segment [start]=\"[0, 0, 0]\" [end]=\"[1, 1, 1]\" [color]=\"'red'\" />\n * <ngts-segment [start]=\"[1, 1, 1]\" [end]=\"[2, 0, 0]\" [color]=\"'blue'\" />\n * </ngts-segments>\n * ```\n */\n@Component({\n\tselector: 'ngts-segment',\n\ttemplate: `\n\t\t<ngt-segment-object #segment [color]=\"color()\" [start]=\"normalizedStart()\" [end]=\"normalizedEnd()\" />\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsSegment {\n\t/**\n\t * The starting point of the line segment.\n\t * Accepts a Vector3-like value: [x, y, z], {x, y, z}, or THREE.Vector3.\n\t */\n\tstart = input.required<NgtVector3>();\n\t/**\n\t * The ending point of the line segment.\n\t * Accepts a Vector3-like value: [x, y, z], {x, y, z}, or THREE.Vector3.\n\t */\n\tend = input.required<NgtVector3>();\n\t/**\n\t * The color of the line segment.\n\t * If not specified, inherits from the parent or defaults to white.\n\t */\n\tcolor = input<THREE.ColorRepresentation>();\n\n\t/** @internal */\n\tprotected normalizedStart = vector3(this.start);\n\t/** @internal */\n\tprotected normalizedEnd = vector3(this.end);\n\n\t/**\n\t * Reference to the underlying SegmentObject element.\n\t */\n\tsegmentRef = viewChild.required<ElementRef<SegmentObject>>('segment');\n\n\tprivate segments = inject(NgtsSegments);\n\n\tconstructor() {\n\t\textend({ SegmentObject });\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanUp = this.segments.subscribe(this.segmentRef());\n\t\t\tonCleanup(() => cleanUp());\n\t\t});\n\t}\n}\n\n/**\n * Configuration options for the NgtsSegments component.\n * Extends LineMaterialParameters to allow customization of line appearance.\n */\nexport interface NgtsSegmentsOptions extends LineMaterialParameters {\n\t/**\n\t * The maximum number of segments that can be rendered.\n\t * This determines the size of the position and color buffers.\n\t * @default 1000\n\t */\n\tlimit: number;\n\t/**\n\t * The width of the line segments in world units.\n\t * @default 1.0\n\t */\n\tlineWidth: number;\n}\n\nconst defaultSegmentsOptions: NgtsSegmentsOptions = {\n\tlimit: 1000,\n\tlineWidth: 1.0,\n};\n\n/**\n * A component that efficiently renders multiple line segments.\n *\n * This component uses Line2 from three-stdlib to render line segments with\n * configurable width and color. All segments are batched into a single draw call\n * for optimal performance.\n *\n * Add NgtsSegment children to define individual line segments.\n *\n * @example\n * ```html\n * <ngts-segments [options]=\"{ lineWidth: 2, limit: 100 }\">\n * <ngts-segment [start]=\"[0, 0, 0]\" [end]=\"[1, 1, 1]\" [color]=\"'red'\" />\n * <ngts-segment [start]=\"[1, 1, 1]\" [end]=\"[2, 0, 0]\" [color]=\"'blue'\" />\n * </ngts-segments>\n * ```\n */\n@Component({\n\tselector: 'ngts-segments',\n\ttemplate: `\n\t\t<ngt-primitive #line *args=\"[line]\">\n\t\t\t<ngt-primitive *args=\"[geometry]\" attach=\"geometry\" />\n\t\t\t<ngt-primitive *args=\"[material]\" attach=\"material\" [parameters]=\"materialParameters()\" />\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsSegments {\n\t/**\n\t * Configuration options for the segments rendering.\n\t */\n\toptions = input(defaultSegmentsOptions, { transform: mergeInputs(defaultSegmentsOptions) });\n\tprivate parameters = omit(this.options, ['limit', 'lineWidth']);\n\n\tprivate lineWidth = pick(this.options, 'lineWidth');\n\tprivate limit = pick(this.options, 'limit');\n\n\t/**\n\t * Reference to the underlying Line2 element.\n\t */\n\tlineRef = viewChild<ElementRef<Line2>>('line');\n\n\t/**\n\t * Array of registered segment references. Used internally to track all segments.\n\t */\n\tsegments: Array<ElementRef<SegmentObject> | SegmentObject> = [];\n\n\t/** @internal */\n\tprotected line = new Line2();\n\t/** @internal */\n\tprotected material = new LineMaterial();\n\t/** @internal */\n\tprotected geometry = new LineSegmentsGeometry();\n\tprivate resolution = new THREE.Vector2(512, 512);\n\n\t/** @internal */\n\tprotected materialParameters = computed(() => ({\n\t\tvertexColors: true,\n\t\tresolution: this.resolution,\n\t\tlinewidth: this.lineWidth(),\n\t\t...this.parameters(),\n\t}));\n\n\t/** @internal */\n\tprivate positions = computed(() => {\n\t\tconst limit = this.limit();\n\t\treturn Array.from({ length: limit * 6 }, () => 0);\n\t});\n\n\t/** @internal */\n\tprivate colors = computed(() => {\n\t\tconst limit = this.limit();\n\t\treturn Array.from({ length: limit * 6 }, () => 0);\n\t});\n\n\tconstructor() {\n\t\tbeforeRender(() => {\n\t\t\tconst [limit, positions, colors] = [this.limit(), this.positions(), this.colors()];\n\n\t\t\tfor (let i = 0; i < limit; i++) {\n\t\t\t\tconst segment = resolveRef(this.segments[i]);\n\t\t\t\tif (segment) {\n\t\t\t\t\tpositions[i * 6 + 0] = segment.start.x;\n\t\t\t\t\tpositions[i * 6 + 1] = segment.start.y;\n\t\t\t\t\tpositions[i * 6 + 2] = segment.start.z;\n\n\t\t\t\t\tpositions[i * 6 + 3] = segment.end.x;\n\t\t\t\t\tpositions[i * 6 + 4] = segment.end.y;\n\t\t\t\t\tpositions[i * 6 + 5] = segment.end.z;\n\n\t\t\t\t\tcolors[i * 6 + 0] = segment.color.r;\n\t\t\t\t\tcolors[i * 6 + 1] = segment.color.g;\n\t\t\t\t\tcolors[i * 6 + 2] = segment.color.b;\n\n\t\t\t\t\tcolors[i * 6 + 3] = segment.color.r;\n\t\t\t\t\tcolors[i * 6 + 4] = segment.color.g;\n\t\t\t\t\tcolors[i * 6 + 5] = segment.color.b;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.geometry.setColors(colors);\n\t\t\tthis.geometry.setPositions(positions);\n\t\t\tthis.line.computeLineDistances();\n\t\t});\n\t}\n\n\t/**\n\t * Registers a segment with this container.\n\t *\n\t * @param ref - The SegmentObject reference or element to register\n\t * @returns A cleanup function to unregister the segment\n\t */\n\tsubscribe(ref: ElementRef<SegmentObject> | SegmentObject) {\n\t\tthis.segments.push(ref);\n\t\treturn () => {\n\t\t\tthis.segments = this.segments.filter((i) => i !== ref);\n\t\t};\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultOptions","parentMatrix"],"mappings":";;;;;;;;;;;AAGA;;;;;;;;;;;;;AAaG;MAEU,eAAe,CAAA;AAQ3B,IAAA,WAAA,GAAA;AAPA;;;;AAIG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAGxD,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE;QAE3B,MAAM,CAAC,MAAK;YACX,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG;AAC5D,gBAAA,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE;AAC3B,gBAAA,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AACzB,gBAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;gBAC5B,KAAK,CAAC,QAAQ,CAAC,MAAM;AACrB,gBAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU;aAClC;AAED,YAAA,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC;YAC5B,IAAI,SAAS,IAAI,UAAU;AAAE,gBAAA,UAAU,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,KAAK,CAAC,GAAG,MAAM,GAAG,WAAW;AACpG,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;YACjC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG;AAC3D,gBAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC5B,gBAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;gBAC9B,KAAK,CAAC,QAAQ,CAAC,MAAM;AACrB,gBAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU;AAClC,gBAAA,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;aACzB;AAED,YAAA,IAAI,MAAM;gBAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,IAAI,SAAS,IAAI,UAAU;AAAE,gBAAA,UAAU,CAAC,KAAK,CAAC,cAAc,GAAG,MAAM;AACtE,QAAA,CAAC,CAAC;IACH;8GApCY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;mBAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE;;;ACd5C;;;;;;;;;;;;;;AAcG;MAEU,kBAAkB,CAAA;AAC9B,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE;QAC3B,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO;AAEpD,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACpB,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE;AAC3C,YAAA,SAAS,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;AACtE,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;YACjC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AACtD,QAAA,CAAC,CAAC;IACH;8GAbY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,SAAS;mBAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE;;;AC2D/C,MAAMA,gBAAc,GAAmB;AACtC,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,QAAQ,EAAE,KAAK;CACf;AAED;;;;;;;;;;;;;;;;;AAiBG;MAWU,OAAO,CAAA;AAqCnB,IAAA,WAAA,GAAA;AApCA;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAACA,gBAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAACA,gBAAc,CAAC,EAAA,CAAG;;AAEjE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACzC,SAAS;YACT,cAAc;YACd,UAAU;YACV,SAAS;YACT,gBAAgB;YAChB,UAAU;YACV,aAAa;YACb,UAAU;AACV,SAAA,CAAC;AAEF;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;QAEvD,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;QAErB,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;QACjD,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QACzC,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACrD,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QACzC,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAC/C,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QAEzC,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,iDAAC;AAC7B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAE;QACpB,IAAA,CAAA,WAAW,GAAG,CAAC;AAGtB,QAAA,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;AAEjB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO;gBAAE;YAEd,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;;YAG3C,IAAI,CAAC,KAAK,EAAE;;;;AAKZ,YAAA,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG;AACrG,gBAAA,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5B,gBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxB,gBAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACvB,gBAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;AAC9B,gBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxB,gBAAA,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3B,gBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS;aAC7B;AAED,YAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;AACtF,YAAA,SAAS,CAAC,YAAY,GAAG,YAAY;AAErC,YAAA,IAAI,SAAoD;AACxD,YAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACrB,YAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAI;AACxB,gBAAA,IACC,EAAE,CAAC,KAAK,CAAa,KAAK,EAAE,QAAQ,CAAC;AACrC,oBAAA,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU;oBAC1B,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAC7C;AACD,oBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC/B,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEhD,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,IAAI,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;wBAC/E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,CAAC;AACxC,wBAAA,SAAS,GAAG,UAAU,CAAC,MAAK;4BAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAC9B,wBAAA,CAAC,CAAC;wBACF;oBACD;oBAEA,IAAI,CAAC,KAAK,CAAC,OAAO;AAAE,wBAAA,KAAK,CAAC,OAAO,GAAG,IAAI;AAExC,oBAAA,KAAK,CAAC,OAAO,GAAG,kBAAkB;AAClC,oBAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,GAAG,iBAAiB;AACpD,oBAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,GAAG,iBAAiB;AACpD,oBAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAC1C;AACD,YAAA,CAAC,CAAC;YAEF,SAAS,CAAC,MAAK;AACd,gBAAA,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC;gBAEpC,OAAO,SAAS,CAAC,YAAY;AAC7B,gBAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAI;AACxB,oBAAA,IAAI,EAAE,CAAC,KAAK,CAAa,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;AACvE,wBAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE;wBAClC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;oBAC7C;AACD,gBAAA,CAAC,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,OAAO;AAAE,oBAAA,KAAK,CAAC,OAAO,GAAG,IAAI;AACzC,YAAA,CAAC,CAAC;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACtB,QAAA,CAAC,CAAC;IACH;8GAhHY,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EART;;;;AAIT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,OAAO,EAAA,UAAA,EAAA,CAAA;kBAVnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE;;;;AAIT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;8LAqBuD,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC7G/D,MAAMA,gBAAc,GAAwB;AAC3C,IAAA,UAAU,EAAE,CAAC;CACb;AAED;;;;;;;;;;;;;;;AAeG;MAWU,YAAY,CAAA;AAoBxB,IAAA,WAAA,GAAA;AAnBA;;;;AAIG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAY;AACtC;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAACA,gBAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAACA,gBAAc,CAAC,EAAA,CAAG;;QAEjE,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;AAEzD;;AAEG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAwB,KAAK,CAAC;QACjD,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAGpD,QAAA,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QAEf,MAAM,CAAC,MAAK;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa;AACvC,YAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC;AAC3C,YAAA,IAAI,CAAC,aAAa;gBAAE;YACpB,MAAM,GAAG,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAChG,YAAA,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACrB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACtC,gBAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;AACpE,YAAA,CAAC,CAAC;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,KAAI;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AAC3C,QAAA,CAAC,CAAC;IACH;8GArCY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARd;;;;AAIT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,YAAY,EAAA,UAAA,EAAA,CAAA;kBAVxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE;;;;AAIT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;6RAkBmD,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACjEzD,MAAM,oBAAoB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAChD,MAAM,oBAAoB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAChD,MAAM,mBAAmB,GAAyB,EAAE;AACpD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAiD;AAE7E;;;;;;;;;;AAUG;AACG,MAAO,YAAa,SAAQ,KAAK,CAAC,KAAK,CAAA;AAW5C,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;IAC1B;AAEA;;;AAGG;AACH,IAAA,IAAI,QAAQ,GAAA;QACX,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC3C;AAEA;;;;;AAKG;IACM,OAAO,CAAC,SAA0B,EAAE,UAAgC,EAAA;QAC5E,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE;AAC1C,QAAA,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW;AACtC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;;QAE7D,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK;YAAE;;AAEpD,QAAA,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,oBAAoB,CAAC;AACpD,QAAA,oBAAoB,CAAC,gBAAgB,CAAC,WAAW,EAAE,oBAAoB,CAAC;;AAExE,QAAA,KAAK,CAAC,WAAW,GAAG,oBAAoB;;AAExC,QAAA,IAAI,MAAM,CAAC,QAAQ,YAAY,KAAK,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;;AACpF,YAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;AAClD,QAAA,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC;;AAE7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3D,YAAA,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC;AACxC,YAAA,SAAS,CAAC,UAAU,GAAG,UAAU;AACjC,YAAA,SAAS,CAAC,MAAM,GAAG,IAAI;AACvB,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3B;AACA,QAAA,mBAAmB,CAAC,MAAM,GAAG,CAAC;IAC/B;AACA;;ACjED,MAAMC,cAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACxC,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC1C,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACtC,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACvC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;AACvC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAEjC;;;;;;;;;;;;;;;;;AAiBG;MAWU,YAAY,CAAA;AAcxB,IAAA,WAAA,GAAA;AAbA;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAA8B,mDAAC;;AAGrC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC;AAE3C;;AAEG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,CAA2B,cAAc,CAAC;AAG7E,QAAA,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;AAExB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;AAC9E,YAAA,SAAS,CAAC,MAAM,OAAO,EAAE,CAAC;AAC3B,QAAA,CAAC,CAAC;IACH;8GArBY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARd;;;;AAIT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,YAAY,EAAA,UAAA,EAAA,CAAA;kBAVxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE;;;;AAIT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;qMAa+D,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAoC9E,MAAM,cAAc,GAAyB;AAC5C,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,MAAM,EAAE,QAAQ;CAChB;AAED;;;;;;;;;;;;;;;;;;;;AAoBG;MA+BU,aAAa,CAAA;AAoCzB,IAAA,WAAA,GAAA;;AAlCmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;AAE5D;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,cAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,EAAA,CAAG;;AAEjE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAEvE;;AAEG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAkC,eAAe,CAAC;QAE/E,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;;AAGjC,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;AAE7C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC;YAChD;YAEA,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAChF,YAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC5B,QAAA,CAAC,mDAAC;AAEF;;AAEG;QACH,IAAA,CAAA,SAAS,GAAmD,EAAE;AAG7D,QAAA,MAAM,CAAC,EAAE,aAAa,EAAE,wBAAwB,EAAE,CAAC;QAEnD,MAAM,CAAC,MAAK;YACX,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa;AAC5D,YAAA,IAAI,CAAC,aAAa;gBAAE;AACpB,YAAA,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC;AAC1C,QAAA,CAAC,CAAC;QAEF,IAAI,UAAU,GAAG,CAAC;QAClB,IAAI,KAAK,GAAG,CAAC;QAEb,YAAY,CAAC,MAAK;YACjB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa;AAC5D,YAAA,IAAI,CAAC,aAAa;gBAAE;AACpB,YAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAC/C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAC3C,IAAI,MAAM,KAAK,QAAQ,IAAI,UAAU,GAAG,MAAM,EAAE;gBAC/C,aAAa,CAAC,YAAY,EAAE;gBAC5B,aAAa,CAAC,iBAAiB,EAAE;gBACjCA,cAAY,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;gBAErD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACnF,gBAAA,aAAa,CAAC,KAAK,GAAG,KAAK;AAC3B,gBAAA,cAAc,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC;AAC7E,gBAAA,IAAI,aAAa,CAAC,aAAa,EAAE;AAChC,oBAAA,cAAc,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC5E;AAEA,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,QAAQ,EAAE;;;wBAGb,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;AAC5D,wBAAA,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,WAAW,CAACA,cAAY,CAAC;wBAC9E,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC;AACxC,wBAAA,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC;wBACzC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;AACrC,wBAAA,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC;oBACzC;gBACD;AACA,gBAAA,UAAU,EAAE;YACb;AACD,QAAA,CAAC,CAAC;IACH;AAEA;;;;;AAKG;AACH,IAAA,SAAS,CAAC,GAA4C,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,QAAA,OAAO,MAAK;AACX,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AACzD,QAAA,CAAC;IACF;8GA9FY,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5Bf;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,aAAa,EAAA,UAAA,EAAA,CAAA;kBA9BzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;sMAeuE,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AChKvF,MAAM,sBAAsB,GAAwB;AACnD,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,UAAU,EAAE,CAAC;CACb;AAED,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE;AACzB,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE;AAEzB;;;AAGG;MAIU,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;AAIC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,sBAAsB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC,EAAA,CAAG;AAC5F,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;AAC9B,IAAA;8GAHY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,iBAAA;;AAMD;;;;;;;;;;;;;;;;;;;AAmBG;MAQU,WAAW,CAAA;AASvB,IAAA,WAAA,GAAA;QARA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;QAErB,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;AACrB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;AAE7B,QAAA,IAAA,CAAA,MAAM,GAAG,eAAe,CAAC,YAAY,kDAAC;AACtC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAA2B,SAAS,iDAAC;QAG3D,YAAY,CAAC,MAAK;AACjB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AAEtC,YAAA,IAAI,KAAK,GAA6B,MAAM,CAAC,CAAC,CAAC;AAE/C,YAAA,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,EAAE;AAChD,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,aAAyB;AAC1D,gBAAA,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;AAExD,gBAAA,GAAG,CAAC,qBAAqB,CAAC,WAAW,CAAC;AACtC,gBAAA,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,WAAW,CAAC;gBAEhD,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI;AAE3C,gBAAA,IAAI,WAAW,IAAI,QAAQ,GAAG,WAAW,EAAE;oBAC1C,KAAK,GAAG,SAAS;gBAClB;qBAAO;AACN,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9C,wBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AACxB,wBAAA,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/D,wBAAA,IAAI,UAAU,IAAI,YAAY,KAAK,MAAM,EAAE;AAC1C,4BAAA,aAAa,IAAI,aAAa,GAAG,UAAU;wBAC5C;AAEA,wBAAA,IAAI,QAAQ,IAAI,aAAa,EAAE;4BAC9B,KAAK,GAAG,MAAM;wBACf;6BAAO;4BACN;wBACD;oBACD;gBACD;YACD;AAEA,YAAA,IAAI,KAAK,KAAK,YAAY,EAAE;AAC3B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YACtB;AACD,QAAA,CAAC,CAAC;IACH;8GAlDY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAMW,YAAY,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXpC;;AAET,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEd,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE;;AAET,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,iBAAA;8NAOkC,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;MA+ClC,OAAO,GAAG,CAAC,WAAW,EAAE,YAAY;;ACtGjD,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC1C,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;AAC5B,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AAClC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAErC;;;;;;;;;;AAUG;AACG,MAAO,aAAc,SAAQ,KAAK,CAAC,KAAK,CAAA;AAgB7C,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;IAC1B;AAEA;;;AAGG;AACH,IAAA,IAAI,QAAQ,GAAA;QACX,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC3C;AAEA;;;;;AAKG;IACM,OAAO,CAAC,SAA0B,EAAE,UAAgC,EAAA;QAC5E,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE;AACjC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;;AAE7D,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK;YAAE;QAEvE,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC;AACzD,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;QACxD,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,KAAK;YAAE;QAEvD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC;QAErD,MAAM,cAAc,GAAG,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AACrF,QAAA,MAAM,gBAAgB,GAAG,cAAc,GAAG,cAAc;QACxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEhE,QAAA,IAAI,kBAAkB,GAAG,gBAAgB,EAAE;AAC1C,YAAA,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;YAC1C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;AACvD,YAAA,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7C,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC;YAChE,IAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG;gBAAE;YAC3D,UAAU,CAAC,IAAI,CAAC;gBACf,QAAQ;AACR,gBAAA,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5C,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,MAAM,EAAE,IAAI;AACZ,aAAA,CAAC;QACH;IACD;AACA;;AC/ED;;;;;;;;;;;;;;;;AAgBG;MAWU,SAAS,CAAA;AAcrB,IAAA,WAAA,GAAA;AAbA;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAA+B,mDAAC;AAEhD;;AAEG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAA4B,eAAe,CAAC;;AAGvE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAG7C,QAAA,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;AAEzB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC;AAC5E,YAAA,SAAS,CAAC,MAAM,OAAO,EAAE,CAAC;AAC3B,QAAA,CAAC,CAAC;IACH;8GArBY,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARX;;;;AAIT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,SAAS,EAAA,UAAA,EAAA,CAAA;kBAVrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE;;;;AAIT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;sMAUiE,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAejF;;;;;;;;;;;;;;AAcG;MAsCU,gBAAgB,CAAA;AA+B5B,IAAA,WAAA,GAAA;AA9BA;;;AAGG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAgB;AAC1C;;;AAGG;QACH,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgB;AAC9B;;;AAGG;QACH,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgB;AAC7B;;;AAGG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAQ,CAAC,kDAAC;AACxB;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAA+B,mDAAC;AAEhD;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA2B,QAAQ,CAAC;;AAiB/C,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;QAd3D,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;QAEnD,YAAY,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa;AAC9C,YAAA,IAAI,CAAC,MAAM;gBAAE;AAEb,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU;AAC7C,YAAA,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,gBAAA,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAClD,QAAA,CAAC,CAAC;IACH;8GA3CY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBArC5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;kjBA8ByD,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAoBlE,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACxC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAmBpC,MAAM,uBAAuB,GAA+B,EAAE,KAAK,EAAE,IAAI,EAAE;AAE3E;;;;;;;;;;;;;;;;AAgBG;MAwCU,mBAAmB,CAAA;AAmC/B,IAAA,WAAA,GAAA;AAlCA;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,uBAAuB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,uBAAuB,CAAC,EAAA,CAAG;AAC7F;;AAEG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAEnD;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA2B,QAAQ,CAAC;QAE1D,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AAE3C;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAE1B,OAAO;AACN,gBAAA,SAAS,EAAE,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;AACtC,gBAAA,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACzD,gBAAA,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;aACpD;AACF,QAAA,CAAC,mDAAC;AAEF;;AAEG;QACH,IAAA,CAAA,cAAc,GAAqD,EAAE;;AA4DlD,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;QAzD3D,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;QAEnD,MAAM,CAAC,MAAK;YACX,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa;AAC9C,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACpD,QAAA,CAAC,CAAC;QAEF,YAAY,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa;AAC9C,YAAA,IAAI,CAAC,MAAM;gBAAE;YAEb,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AACvC,YAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAEnD,MAAM,CAAC,YAAY,EAAE;YACrB,MAAM,CAAC,iBAAiB,EAAE;YAC1B,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;AAE9C,YAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CACzC,KAAK,EACL,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,EACnC,IAAI,CAAC,cAAc,CAAC,MAAM,CAC1B;AAED,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpD,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxD,IAAI,aAAa,EAAE;oBAClB,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC;oBACnE,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;oBAClC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAEnD,oBAAA,aAAa,CAAC,sBAAsB,GAAG,IAAI;oBAC3C,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;oBAC1C,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAEhD,KAAK,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAClC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAChD;YACD;AACD,QAAA,CAAC,CAAC;IACH;AAEA;;;;;AAKG;AACH,IAAA,SAAS,CAAC,GAA8C,EAAA;AACvD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7B,QAAA,OAAO,MAAK;AACX,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AACnE,QAAA,CAAC;IACF;8GA1FY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArCrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAvC/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;+LAcyD,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC5PlE;;;;;;AAMG;MACU,aAAa,CAAA;AAiBzB,IAAA,WAAA,GAAA;QACC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC;AACA;;ACpBD;;;;;;;;;;;;;AAaG;MASU,WAAW,CAAA;AA6BvB,IAAA,WAAA,GAAA;AA5BA;;;AAGG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAc;AACpC;;;AAGG;AACH,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,8CAAc;AAClC;;;AAGG;QACH,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;;AAGhC,QAAA,IAAA,CAAA,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;AAErC,QAAA,IAAA,CAAA,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAE3C;;AAEG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAC,QAAQ,CAA4B,SAAS,CAAC;AAE7D,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;AAGtC,QAAA,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;AAEzB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAC1D,YAAA,SAAS,CAAC,MAAM,OAAO,EAAE,CAAC;AAC3B,QAAA,CAAC,CAAC;IACH;8GApCY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EANb;;AAET,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,WAAW,EAAA,UAAA,EAAA,CAAA;kBARvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE;;AAET,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;0WA0B2D,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAgCrE,MAAM,sBAAsB,GAAwB;AACnD,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,SAAS,EAAE,GAAG;CACd;AAED;;;;;;;;;;;;;;;;AAgBG;MAcU,YAAY,CAAA;AAgDxB,IAAA,WAAA,GAAA;AA/CA;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,sBAAsB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC,EAAA,CAAG;AACnF,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEvD,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC3C,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AAE3C;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAoB,MAAM,mDAAC;AAE9C;;AAEG;QACH,IAAA,CAAA,QAAQ,GAAqD,EAAE;;AAGrD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,KAAK,EAAE;;AAElB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAE;;AAE7B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,oBAAoB,EAAE;QACvC,IAAA,CAAA,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;AAGtC,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,OAAO;AAC9C,YAAA,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;YAC3B,GAAG,IAAI,CAAC,UAAU,EAAE;AACpB,SAAA,CAAC,8DAAC;;AAGK,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAClD,QAAA,CAAC,qDAAC;;AAGM,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAClD,QAAA,CAAC,kDAAC;QAGD,YAAY,CAAC,MAAK;YACjB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAElF,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,OAAO,EAAE;AACZ,oBAAA,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACtC,oBAAA,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACtC,oBAAA,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAEtC,oBAAA,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC,oBAAA,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC,oBAAA,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAEpC,oBAAA,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACnC,oBAAA,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACnC,oBAAA,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAEnC,oBAAA,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACnC,oBAAA,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACnC,oBAAA,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC;YACD;AAEA,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACjC,QAAA,CAAC,CAAC;IACH;AAEA;;;;;AAKG;AACH,IAAA,SAAS,CAAC,GAA8C,EAAA;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,QAAA,OAAO,MAAK;AACX,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AACvD,QAAA,CAAC;IACF;8GA1FY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXd;;;;;;AAMT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,OAAO,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEL,YAAY,EAAA,UAAA,EAAA,CAAA;kBAbxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE;;;;;;AAMT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,OAAO,CAAC;AAClB,iBAAA;6LAcuC,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AChJ9C;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "angular-three-soba",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"maath": ">=0.10.0 <0.11.0",
|
|
91
91
|
"meshline": "^3.1.0",
|
|
92
92
|
"stats-gl": ">=2.0.0",
|
|
93
|
-
"three": ">=0.157.0 <0.
|
|
93
|
+
"three": ">=0.157.0 <0.183.0",
|
|
94
94
|
"three-custom-shader-material": ">=5.5.0 <6.5.0",
|
|
95
95
|
"three-mesh-bvh": ">=0.5.0 <0.10.0",
|
|
96
96
|
"three-stdlib": "^2.0.0",
|