angular-three-soba 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/cameras/README.md +3 -0
  2. package/cameras/index.d.ts +3 -0
  3. package/cameras/lib/camera/camera-content.d.ts +13 -0
  4. package/cameras/lib/camera/camera.d.ts +19 -0
  5. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +17 -0
  6. package/cameras/lib/perspective-camera/perspective-camera.d.ts +9 -0
  7. package/esm2020/cameras/angular-three-soba-cameras.mjs +5 -0
  8. package/esm2020/cameras/index.mjs +4 -0
  9. package/esm2020/cameras/lib/camera/camera-content.mjs +20 -0
  10. package/esm2020/cameras/lib/camera/camera.mjs +74 -0
  11. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +92 -0
  12. package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +46 -0
  13. package/esm2020/controls/lib/orbit-controls/orbit-controls.mjs +3 -3
  14. package/esm2020/loaders/lib/loader/loader.mjs +3 -3
  15. package/esm2020/misc/index.mjs +2 -1
  16. package/esm2020/misc/lib/bake-shadows/bake-shadows.mjs +3 -3
  17. package/esm2020/misc/lib/fbo/fbo.mjs +38 -0
  18. package/esm2020/performance/lib/adaptive/adaptive-dpr.mjs +3 -3
  19. package/esm2020/performance/lib/adaptive/adaptive-events.mjs +3 -3
  20. package/esm2020/performance/lib/detailed/detailed.mjs +3 -3
  21. package/esm2020/performance/lib/stats/stats.mjs +3 -3
  22. package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +20 -18
  23. package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +12 -9
  24. package/esm2020/staging/lib/bounds/bounds.mjs +3 -3
  25. package/esm2020/staging/lib/center/center.mjs +3 -3
  26. package/esm2020/staging/lib/contact-shadows/contact-shadows.mjs +3 -3
  27. package/esm2020/staging/lib/environment/environment-cube.mjs +3 -3
  28. package/esm2020/staging/lib/environment/environment-ground.mjs +3 -3
  29. package/esm2020/staging/lib/environment/environment-inputs.mjs +3 -3
  30. package/esm2020/staging/lib/environment/environment-map.mjs +3 -3
  31. package/esm2020/staging/lib/environment/environment-portal.mjs +3 -3
  32. package/esm2020/staging/lib/environment/environment.mjs +6 -6
  33. package/esm2020/staging/lib/float/float.mjs +3 -3
  34. package/esm2020/staging/lib/sky/sky.mjs +3 -3
  35. package/esm2020/staging/lib/sparkles/sparkles.mjs +3 -3
  36. package/esm2020/staging/lib/stage/stage.mjs +6 -6
  37. package/esm2020/staging/lib/stars/stars.mjs +3 -3
  38. package/fesm2015/angular-three-soba-cameras.mjs +224 -0
  39. package/fesm2015/angular-three-soba-cameras.mjs.map +1 -0
  40. package/fesm2015/angular-three-soba-controls.mjs +3 -3
  41. package/fesm2015/angular-three-soba-loaders.mjs +3 -3
  42. package/fesm2015/angular-three-soba-misc.mjs +37 -5
  43. package/fesm2015/angular-three-soba-misc.mjs.map +1 -1
  44. package/fesm2015/angular-three-soba-performance.mjs +12 -12
  45. package/fesm2015/angular-three-soba-staging.mjs +77 -72
  46. package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
  47. package/fesm2020/angular-three-soba-cameras.mjs +224 -0
  48. package/fesm2020/angular-three-soba-cameras.mjs.map +1 -0
  49. package/fesm2020/angular-three-soba-controls.mjs +3 -3
  50. package/fesm2020/angular-three-soba-loaders.mjs +3 -3
  51. package/fesm2020/angular-three-soba-misc.mjs +41 -5
  52. package/fesm2020/angular-three-soba-misc.mjs.map +1 -1
  53. package/fesm2020/angular-three-soba-performance.mjs +12 -12
  54. package/fesm2020/angular-three-soba-staging.mjs +77 -72
  55. package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
  56. package/misc/index.d.ts +1 -0
  57. package/misc/lib/fbo/fbo.d.ts +13 -0
  58. package/package.json +10 -2
  59. package/plugin/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ # angular-three-soba/cameras
2
+
3
+ Secondary entry point of `angular-three-soba`. It can be used by importing from `angular-three-soba/cameras`.
@@ -0,0 +1,3 @@
1
+ export * from './lib/camera/camera-content';
2
+ export * from './lib/orthographic-camera/orthographic-camera';
3
+ export * from './lib/perspective-camera/perspective-camera';
@@ -0,0 +1,13 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import * as THREE from 'three';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NgtsCameraContent {
5
+ readonly template: TemplateRef<any>;
6
+ ngtsCameraContent: boolean | '';
7
+ static ngTemplateContextGuard(_: NgtsCameraContent, ctx: unknown): ctx is {
8
+ target: THREE.WebGLRenderTarget;
9
+ group?: THREE.Group;
10
+ };
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCameraContent, never>;
12
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgtsCameraContent, "ng-template[ngtsCameraContent]", never, { "ngtsCameraContent": "ngtsCameraContent"; }, {}, never, never, true, never>;
13
+ }
@@ -0,0 +1,19 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { NgtCamera, NgtRxStore, NgtStore } from 'angular-three';
3
+ import * as i0 from "@angular/core";
4
+ export declare abstract class NgtsCamera<TCamera extends NgtCamera> extends NgtRxStore implements OnInit {
5
+ set makeDefault(makeDefault: boolean);
6
+ set manual(manual: boolean);
7
+ set frames(frames: number);
8
+ set resolution(resolution: number);
9
+ set envMap(envMap: THREE.Texture);
10
+ cameraRef: import("angular-three").NgtInjectedRef<TCamera>;
11
+ protected readonly store: NgtStore;
12
+ readonly fboRef: import("angular-three").NgtInjectedRef<import("three").WebGLRenderTarget>;
13
+ initialize(): void;
14
+ ngOnInit(): void;
15
+ private setDefaultCamera;
16
+ private updateProjectionMatrix;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCamera<any>, never>;
18
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgtsCamera<any>, never, never, { "makeDefault": "makeDefault"; "manual": "manual"; "frames": "frames"; "resolution": "resolution"; "envMap": "envMap"; "cameraRef": "cameraRef"; }, {}, never, never, false, never>;
19
+ }
@@ -0,0 +1,17 @@
1
+ import { NgtsCamera } from '../camera/camera';
2
+ import { NgtsCameraContent } from '../camera/camera-content';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NgtsOrthographicCamera extends NgtsCamera<THREE.OrthographicCamera> {
5
+ cameraContent?: NgtsCameraContent;
6
+ set left(left: number);
7
+ set right(right: number);
8
+ set top(top: number);
9
+ set bottom(bottom: number);
10
+ initialize(): void;
11
+ readonly left$: import("rxjs").Observable<any>;
12
+ readonly right$: import("rxjs").Observable<any>;
13
+ readonly top$: import("rxjs").Observable<any>;
14
+ readonly bottom$: import("rxjs").Observable<any>;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtsOrthographicCamera, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtsOrthographicCamera, "ngts-orthographic-camera", never, { "left": "left"; "right": "right"; "top": "top"; "bottom": "bottom"; }, {}, ["cameraContent"], never, true, never>;
17
+ }
@@ -0,0 +1,9 @@
1
+ import { PerspectiveCamera } from 'three';
2
+ import { NgtsCamera } from '../camera/camera';
3
+ import { NgtsCameraContent } from '../camera/camera-content';
4
+ import * as i0 from "@angular/core";
5
+ export declare class NgtsPerspectiveCamera extends NgtsCamera<PerspectiveCamera> {
6
+ cameraContent?: NgtsCameraContent;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtsPerspectiveCamera, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtsPerspectiveCamera, "ngts-perspective-camera", never, {}, {}, ["cameraContent"], never, true, never>;
9
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLWNhbWVyYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9hbmd1bGFyLXRocmVlLXNvYmEtY2FtZXJhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './lib/camera/camera-content';
2
+ export * from './lib/orthographic-camera/orthographic-camera';
3
+ export * from './lib/perspective-camera/perspective-camera';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyw2Q0FBNkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NhbWVyYS9jYW1lcmEtY29udGVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vcnRob2dyYXBoaWMtY2FtZXJhL29ydGhvZ3JhcGhpYy1jYW1lcmEnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGVyc3BlY3RpdmUtY2FtZXJhL3BlcnNwZWN0aXZlLWNhbWVyYSc7XG4iXX0=
@@ -0,0 +1,20 @@
1
+ import { Directive, inject, Input, TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class NgtsCameraContent {
4
+ constructor() {
5
+ this.template = inject(TemplateRef);
6
+ this.ngtsCameraContent = '';
7
+ }
8
+ static ngTemplateContextGuard(_, ctx) {
9
+ return true;
10
+ }
11
+ }
12
+ NgtsCameraContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCameraContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
13
+ NgtsCameraContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsCameraContent, isStandalone: true, selector: "ng-template[ngtsCameraContent]", inputs: { ngtsCameraContent: "ngtsCameraContent" }, ngImport: i0 });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCameraContent, decorators: [{
15
+ type: Directive,
16
+ args: [{ selector: 'ng-template[ngtsCameraContent]', standalone: true }]
17
+ }], propDecorators: { ngtsCameraContent: [{
18
+ type: Input
19
+ }] } });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLWNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9saWIvY2FtZXJhL2NhbWVyYS1jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSXRFLE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFFYSxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLHNCQUFpQixHQUFpQixFQUFFLENBQUM7S0FRakQ7SUFORyxNQUFNLENBQUMsc0JBQXNCLENBQ3pCLENBQW9CLEVBQ3BCLEdBQVk7UUFFWixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs4R0FUUSxpQkFBaUI7a0dBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7OEJBRzlELGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0c0NhbWVyYUNvbnRlbnRdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNDYW1lcmFDb250ZW50IHtcbiAgICByZWFkb25seSB0ZW1wbGF0ZSA9IGluamVjdChUZW1wbGF0ZVJlZik7XG4gICAgQElucHV0KCkgbmd0c0NhbWVyYUNvbnRlbnQ6IGJvb2xlYW4gfCAnJyA9ICcnO1xuXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXG4gICAgICAgIF86IE5ndHNDYW1lcmFDb250ZW50LFxuICAgICAgICBjdHg6IHVua25vd25cbiAgICApOiBjdHggaXMgeyB0YXJnZXQ6IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OyBncm91cD86IFRIUkVFLkdyb3VwIH0ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,74 @@
1
+ import { Directive, inject, Input } from '@angular/core';
2
+ import { injectNgtRef, NgtRxStore, NgtStore } from 'angular-three';
3
+ import { injectNgtsFBO } from 'angular-three-soba/misc';
4
+ import { combineLatest, map } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ export class NgtsCamera extends NgtRxStore {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.cameraRef = injectNgtRef();
10
+ this.store = inject(NgtStore);
11
+ this.fboRef = injectNgtsFBO(() => this.select('resolution').pipe(map((resolution) => ({ width: resolution }))));
12
+ }
13
+ set makeDefault(makeDefault) {
14
+ this.set({ makeDefault });
15
+ }
16
+ set manual(manual) {
17
+ this.set({ manual });
18
+ }
19
+ set frames(frames) {
20
+ this.set({ frames });
21
+ }
22
+ set resolution(resolution) {
23
+ this.set({ resolution });
24
+ }
25
+ set envMap(envMap) {
26
+ this.set({ envMap });
27
+ }
28
+ initialize() {
29
+ super.initialize();
30
+ this.set({ resolution: 256, frames: Infinity, makeDefault: false, manual: false });
31
+ }
32
+ ngOnInit() {
33
+ this.hold(this.cameraRef.$, (camera) => {
34
+ camera.updateProjectionMatrix();
35
+ this.setDefaultCamera();
36
+ this.updateProjectionMatrix();
37
+ });
38
+ }
39
+ setDefaultCamera() {
40
+ this.effect(combineLatest([this.cameraRef.$, this.select('makeDefault')]), ([camera, makeDefault]) => {
41
+ if (makeDefault) {
42
+ const { camera: oldCamera } = this.store.get();
43
+ this.store.set({ camera });
44
+ return () => {
45
+ this.store.set({ camera: oldCamera });
46
+ };
47
+ }
48
+ });
49
+ }
50
+ updateProjectionMatrix() {
51
+ this.effect(combineLatest([this.cameraRef.$, this.select('manual')]), ([camera, manual]) => {
52
+ if (!manual && camera)
53
+ camera.updateProjectionMatrix();
54
+ });
55
+ }
56
+ }
57
+ NgtsCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCamera, deps: null, target: i0.ɵɵFactoryTarget.Directive });
58
+ NgtsCamera.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsCamera, inputs: { makeDefault: "makeDefault", manual: "manual", frames: "frames", resolution: "resolution", envMap: "envMap", cameraRef: "cameraRef" }, usesInheritance: true, ngImport: i0 });
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCamera, decorators: [{
60
+ type: Directive
61
+ }], propDecorators: { makeDefault: [{
62
+ type: Input
63
+ }], manual: [{
64
+ type: Input
65
+ }], frames: [{
66
+ type: Input
67
+ }], resolution: [{
68
+ type: Input
69
+ }], envMap: [{
70
+ type: Input
71
+ }], cameraRef: [{
72
+ type: Input
73
+ }] } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvY2FtZXJhcy9zcmMvbGliL2NhbWVyYS9jYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQWEsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRzFDLE1BQU0sT0FBZ0IsVUFBc0MsU0FBUSxVQUFVO0lBRDlFOztRQXNCYSxjQUFTLEdBQUcsWUFBWSxFQUFXLENBQUM7UUFFMUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxXQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBZ0N2SDtJQXZERyxJQUFhLFdBQVcsQ0FBQyxXQUFvQjtRQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBZTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxVQUFVLENBQUMsVUFBa0I7UUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLE1BQXFCO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFPUSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDakcsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sR0FBRyxFQUFFO29CQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ3ZGLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTTtnQkFBRSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O3VHQXZEaUIsVUFBVTsyRkFBVixVQUFVOzJGQUFWLFVBQVU7a0JBRC9CLFNBQVM7OEJBRU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0UmVmLCBOZ3RDYW1lcmEsIE5ndFJ4U3RvcmUsIE5ndFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RzRkJPIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL21pc2MnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5ndHNDYW1lcmE8VENhbWVyYSBleHRlbmRzIE5ndENhbWVyYT4gZXh0ZW5kcyBOZ3RSeFN0b3JlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBzZXQgbWFrZURlZmF1bHQobWFrZURlZmF1bHQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtYWtlRGVmYXVsdCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWFudWFsKG1hbnVhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IG1hbnVhbCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZnJhbWVzKGZyYW1lczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZnJhbWVzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByZXNvbHV0aW9uKHJlc29sdXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJlc29sdXRpb24gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGVudk1hcChlbnZNYXA6IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZNYXAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgY2FtZXJhUmVmID0gaW5qZWN0Tmd0UmVmPFRDYW1lcmE+KCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuICAgIHJlYWRvbmx5IGZib1JlZiA9IGluamVjdE5ndHNGQk8oKCkgPT4gdGhpcy5zZWxlY3QoJ3Jlc29sdXRpb24nKS5waXBlKG1hcCgocmVzb2x1dGlvbikgPT4gKHsgd2lkdGg6IHJlc29sdXRpb24gfSkpKSk7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCkge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVzb2x1dGlvbjogMjU2LCBmcmFtZXM6IEluZmluaXR5LCBtYWtlRGVmYXVsdDogZmFsc2UsIG1hbnVhbDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaG9sZCh0aGlzLmNhbWVyYVJlZi4kLCAoY2FtZXJhKSA9PiB7XG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0Q2FtZXJhKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0Q2FtZXJhKCkge1xuICAgICAgICB0aGlzLmVmZmVjdChjb21iaW5lTGF0ZXN0KFt0aGlzLmNhbWVyYVJlZi4kLCB0aGlzLnNlbGVjdCgnbWFrZURlZmF1bHQnKV0pLCAoW2NhbWVyYSwgbWFrZURlZmF1bHRdKSA9PiB7XG4gICAgICAgICAgICBpZiAobWFrZURlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNhbWVyYTogb2xkQ2FtZXJhIH0gPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KHsgY2FtZXJhIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KHsgY2FtZXJhOiBvbGRDYW1lcmEgfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkge1xuICAgICAgICB0aGlzLmVmZmVjdChjb21iaW5lTGF0ZXN0KFt0aGlzLmNhbWVyYVJlZi4kLCB0aGlzLnNlbGVjdCgnbWFudWFsJyldKSwgKFtjYW1lcmEsIG1hbnVhbF0pID0+IHtcbiAgICAgICAgICAgIGlmICghbWFudWFsICYmIGNhbWVyYSkgY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,92 @@
1
+ import { NgIf, NgTemplateOutlet } from '@angular/common';
2
+ import { Component, ContentChild, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
3
+ import { extend, NgtPush } from 'angular-three';
4
+ import { combineLatest, map } from 'rxjs';
5
+ import { Group, OrthographicCamera } from 'three';
6
+ import { NgtsCamera } from '../camera/camera';
7
+ import { NgtsCameraContent } from '../camera/camera-content';
8
+ import * as i0 from "@angular/core";
9
+ extend({ OrthographicCamera, Group });
10
+ export class NgtsOrthographicCamera extends NgtsCamera {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.left$ = combineLatest([this.select('left'), this.store.select('size')]).pipe(map(([left, size]) => left ?? size.width / -2));
14
+ this.right$ = combineLatest([this.select('right'), this.store.select('size')]).pipe(map(([right, size]) => right ?? size.width / 2));
15
+ this.top$ = combineLatest([this.select('top'), this.store.select('size')]).pipe(map(([top, size]) => top ?? size.height / 2));
16
+ this.bottom$ = combineLatest([this.select('bottom'), this.store.select('size')]).pipe(map(([bottom, size]) => bottom ?? size.height / -2));
17
+ }
18
+ set left(left) {
19
+ this.set({ left });
20
+ }
21
+ set right(right) {
22
+ this.set({ right });
23
+ }
24
+ set top(top) {
25
+ this.set({ top });
26
+ }
27
+ set bottom(bottom) {
28
+ this.set({ bottom });
29
+ }
30
+ initialize() {
31
+ super.initialize();
32
+ this.set({ left: 0, right: 0, top: 0, bottom: 0 });
33
+ }
34
+ }
35
+ NgtsOrthographicCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsOrthographicCamera, deps: null, target: i0.ɵɵFactoryTarget.Component });
36
+ NgtsOrthographicCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsOrthographicCamera, isStandalone: true, selector: "ngts-orthographic-camera", inputs: { left: "left", right: "right", top: "top", bottom: "bottom" }, queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
37
+ <ngt-orthographic-camera
38
+ ngtCompound
39
+ [ref]="cameraRef"
40
+ [left]="left$ | ngtPush"
41
+ [right]="right$ | ngtPush"
42
+ [top]="top$ | ngtPush"
43
+ [bottom]="bottom$ | ngtPush"
44
+ >
45
+ <ng-container
46
+ *ngIf="cameraContent && !cameraContent.ngtsCameraContent"
47
+ [ngTemplateOutlet]="cameraContent.template"
48
+ />
49
+ </ngt-orthographic-camera>
50
+ <ngt-group #group *ngIf="cameraContent && cameraContent.ngtsCameraContent">
51
+ <ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
52
+ </ngt-group>
53
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: NgtPush, name: "ngtPush" }] });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsOrthographicCamera, decorators: [{
55
+ type: Component,
56
+ args: [{
57
+ selector: 'ngts-orthographic-camera',
58
+ standalone: true,
59
+ template: `
60
+ <ngt-orthographic-camera
61
+ ngtCompound
62
+ [ref]="cameraRef"
63
+ [left]="left$ | ngtPush"
64
+ [right]="right$ | ngtPush"
65
+ [top]="top$ | ngtPush"
66
+ [bottom]="bottom$ | ngtPush"
67
+ >
68
+ <ng-container
69
+ *ngIf="cameraContent && !cameraContent.ngtsCameraContent"
70
+ [ngTemplateOutlet]="cameraContent.template"
71
+ />
72
+ </ngt-orthographic-camera>
73
+ <ngt-group #group *ngIf="cameraContent && cameraContent.ngtsCameraContent">
74
+ <ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
75
+ </ngt-group>
76
+ `,
77
+ imports: [NgIf, NgTemplateOutlet, NgtPush],
78
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
79
+ }]
80
+ }], propDecorators: { cameraContent: [{
81
+ type: ContentChild,
82
+ args: [NgtsCameraContent]
83
+ }], left: [{
84
+ type: Input
85
+ }], right: [{
86
+ type: Input
87
+ }], top: [{
88
+ type: Input
89
+ }], bottom: [{
90
+ type: Input
91
+ }] } });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3J0aG9ncmFwaGljLWNhbWVyYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL2NhbWVyYXMvc3JjL2xpYi9vcnRob2dyYXBoaWMtY2FtZXJhL29ydGhvZ3JhcGhpYy1jYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFFN0QsTUFBTSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQTBCdEMsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFVBQW9DO0lBeEJoRjs7UUFnRGEsVUFBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakYsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ2pELENBQUM7UUFFTyxXQUFNLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNuRixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQ2xELENBQUM7UUFFTyxTQUFJLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQy9DLENBQUM7UUFFTyxZQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRixHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDdEQsQ0FBQztLQUNMO0lBcENHLElBQWEsSUFBSSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQWEsR0FBRyxDQUFDLEdBQVc7UUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLE1BQWM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVRLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7O21IQXRCUSxzQkFBc0I7dUdBQXRCLHNCQUFzQix1TUFDakIsaUJBQWlCLHVFQXRCckI7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJULDREQUNTLElBQUksNkZBQUUsZ0JBQWdCLCtJQUFFLE9BQU87MkZBR2hDLHNCQUFzQjtrQkF4QmxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQztvQkFDMUMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzhCQUVvQyxhQUFhO3NCQUE3QyxZQUFZO3VCQUFDLGlCQUFpQjtnQkFFbEIsSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLO2dCQUlPLEdBQUc7c0JBQWYsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgTmd0UHVzaCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHcm91cCwgT3J0aG9ncmFwaGljQ2FtZXJhIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0NhbWVyYSB9IGZyb20gJy4uL2NhbWVyYS9jYW1lcmEnO1xuaW1wb3J0IHsgTmd0c0NhbWVyYUNvbnRlbnQgfSBmcm9tICcuLi9jYW1lcmEvY2FtZXJhLWNvbnRlbnQnO1xuXG5leHRlbmQoeyBPcnRob2dyYXBoaWNDYW1lcmEsIEdyb3VwIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtb3J0aG9ncmFwaGljLWNhbWVyYScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LW9ydGhvZ3JhcGhpYy1jYW1lcmFcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBbcmVmXT1cImNhbWVyYVJlZlwiXG4gICAgICAgICAgICBbbGVmdF09XCJsZWZ0JCB8IG5ndFB1c2hcIlxuICAgICAgICAgICAgW3JpZ2h0XT1cInJpZ2h0JCB8IG5ndFB1c2hcIlxuICAgICAgICAgICAgW3RvcF09XCJ0b3AkIHwgbmd0UHVzaFwiXG4gICAgICAgICAgICBbYm90dG9tXT1cImJvdHRvbSQgfCBuZ3RQdXNoXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FtZXJhQ29udGVudCAmJiAhY2FtZXJhQ29udGVudC5uZ3RzQ2FtZXJhQ29udGVudFwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FtZXJhQ29udGVudC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L25ndC1vcnRob2dyYXBoaWMtY2FtZXJhPlxuICAgICAgICA8bmd0LWdyb3VwICNncm91cCAqbmdJZj1cImNhbWVyYUNvbnRlbnQgJiYgY2FtZXJhQ29udGVudC5uZ3RzQ2FtZXJhQ29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbWVyYUNvbnRlbnQudGVtcGxhdGU7IGNvbnRleHQ6IHsgZmJvOiBmYm9SZWYubmF0aXZlRWxlbWVudCwgZ3JvdXAgfVwiIC8+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5ndFB1c2hdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c09ydGhvZ3JhcGhpY0NhbWVyYSBleHRlbmRzIE5ndHNDYW1lcmE8VEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhPiB7XG4gICAgQENvbnRlbnRDaGlsZChOZ3RzQ2FtZXJhQ29udGVudCkgY2FtZXJhQ29udGVudD86IE5ndHNDYW1lcmFDb250ZW50O1xuXG4gICAgQElucHV0KCkgc2V0IGxlZnQobGVmdDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGVmdCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmlnaHQocmlnaHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJpZ2h0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB0b3AodG9wOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0b3AgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGJvdHRvbShib3R0b206IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGJvdHRvbSB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgbGVmdDogMCwgcmlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwIH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5IGxlZnQkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ2xlZnQnKSwgdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKV0pLnBpcGUoXG4gICAgICAgIG1hcCgoW2xlZnQsIHNpemVdKSA9PiBsZWZ0ID8/IHNpemUud2lkdGggLyAtMilcbiAgICApO1xuXG4gICAgcmVhZG9ubHkgcmlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ3JpZ2h0JyksIHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyldKS5waXBlKFxuICAgICAgICBtYXAoKFtyaWdodCwgc2l6ZV0pID0+IHJpZ2h0ID8/IHNpemUud2lkdGggLyAyKVxuICAgICk7XG5cbiAgICByZWFkb25seSB0b3AkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ3RvcCcpLCB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpXSkucGlwZShcbiAgICAgICAgbWFwKChbdG9wLCBzaXplXSkgPT4gdG9wID8/IHNpemUuaGVpZ2h0IC8gMilcbiAgICApO1xuXG4gICAgcmVhZG9ubHkgYm90dG9tJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VsZWN0KCdib3R0b20nKSwgdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKV0pLnBpcGUoXG4gICAgICAgIG1hcCgoW2JvdHRvbSwgc2l6ZV0pID0+IGJvdHRvbSA/PyBzaXplLmhlaWdodCAvIC0yKVxuICAgICk7XG59XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { NgIf, NgTemplateOutlet } from '@angular/common';
2
+ import { Component, ContentChild, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3
+ import { extend } from 'angular-three';
4
+ import { Group, PerspectiveCamera } from 'three';
5
+ import { NgtsCamera } from '../camera/camera';
6
+ import { NgtsCameraContent } from '../camera/camera-content';
7
+ import * as i0 from "@angular/core";
8
+ extend({ PerspectiveCamera, Group });
9
+ export class NgtsPerspectiveCamera extends NgtsCamera {
10
+ }
11
+ NgtsPerspectiveCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsPerspectiveCamera, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
+ NgtsPerspectiveCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsPerspectiveCamera, isStandalone: true, selector: "ngts-perspective-camera", queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
13
+ <ngt-perspective-camera [ref]="cameraRef" ngtCompound>
14
+ <ng-container
15
+ *ngIf="cameraContent && !cameraContent.ngtsCameraContent"
16
+ [ngTemplateOutlet]="cameraContent.template"
17
+ />
18
+ </ngt-perspective-camera>
19
+ <ngt-group #group *ngIf="cameraContent && cameraContent.ngtsCameraContent">
20
+ <ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
21
+ </ngt-group>
22
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsPerspectiveCamera, decorators: [{
24
+ type: Component,
25
+ args: [{
26
+ selector: 'ngts-perspective-camera',
27
+ standalone: true,
28
+ template: `
29
+ <ngt-perspective-camera [ref]="cameraRef" ngtCompound>
30
+ <ng-container
31
+ *ngIf="cameraContent && !cameraContent.ngtsCameraContent"
32
+ [ngTemplateOutlet]="cameraContent.template"
33
+ />
34
+ </ngt-perspective-camera>
35
+ <ngt-group #group *ngIf="cameraContent && cameraContent.ngtsCameraContent">
36
+ <ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
37
+ </ngt-group>
38
+ `,
39
+ imports: [NgIf, NgTemplateOutlet],
40
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
41
+ }]
42
+ }], propDecorators: { cameraContent: [{
43
+ type: ContentChild,
44
+ args: [NgtsCameraContent]
45
+ }] } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc3BlY3RpdmUtY2FtZXJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvY2FtZXJhcy9zcmMvbGliL3BlcnNwZWN0aXZlLWNhbWVyYS9wZXJzcGVjdGl2ZS1jYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRTdELE1BQU0sQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFtQnJDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxVQUE2Qjs7a0hBQTNELHFCQUFxQjtzR0FBckIscUJBQXFCLDhIQUNoQixpQkFBaUIsdUVBZnJCOzs7Ozs7Ozs7O0tBVVQsNERBQ1MsSUFBSSw2RkFBRSxnQkFBZ0I7MkZBR3ZCLHFCQUFxQjtrQkFqQmpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7OztLQVVUO29CQUNELE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzhCQUVvQyxhQUFhO3NCQUE3QyxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgR3JvdXAsIFBlcnNwZWN0aXZlQ2FtZXJhIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0NhbWVyYSB9IGZyb20gJy4uL2NhbWVyYS9jYW1lcmEnO1xuaW1wb3J0IHsgTmd0c0NhbWVyYUNvbnRlbnQgfSBmcm9tICcuLi9jYW1lcmEvY2FtZXJhLWNvbnRlbnQnO1xuXG5leHRlbmQoeyBQZXJzcGVjdGl2ZUNhbWVyYSwgR3JvdXAgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1wZXJzcGVjdGl2ZS1jYW1lcmEnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1wZXJzcGVjdGl2ZS1jYW1lcmEgW3JlZl09XCJjYW1lcmFSZWZcIiBuZ3RDb21wb3VuZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNhbWVyYUNvbnRlbnQgJiYgIWNhbWVyYUNvbnRlbnQubmd0c0NhbWVyYUNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhbWVyYUNvbnRlbnQudGVtcGxhdGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9uZ3QtcGVyc3BlY3RpdmUtY2FtZXJhPlxuICAgICAgICA8bmd0LWdyb3VwICNncm91cCAqbmdJZj1cImNhbWVyYUNvbnRlbnQgJiYgY2FtZXJhQ29udGVudC5uZ3RzQ2FtZXJhQ29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbWVyYUNvbnRlbnQudGVtcGxhdGU7IGNvbnRleHQ6IHsgZmJvOiBmYm9SZWYubmF0aXZlRWxlbWVudCwgZ3JvdXAgfVwiIC8+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05nSWYsIE5nVGVtcGxhdGVPdXRsZXRdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1BlcnNwZWN0aXZlQ2FtZXJhIGV4dGVuZHMgTmd0c0NhbWVyYTxQZXJzcGVjdGl2ZUNhbWVyYT4ge1xuICAgIEBDb250ZW50Q2hpbGQoTmd0c0NhbWVyYUNvbnRlbnQpIGNhbWVyYUNvbnRlbnQ/OiBOZ3RzQ2FtZXJhQ29udGVudDtcbn1cbiJdfQ==
@@ -107,11 +107,11 @@ export class NgtsOrbitControls extends NgtRxStore {
107
107
  });
108
108
  }
109
109
  }
110
- NgtsOrbitControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsOrbitControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
111
- NgtsOrbitControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NgtsOrbitControls, isStandalone: true, selector: "ngts-orbit-controls", inputs: { controlsRef: "controlsRef", camera: "camera", domElement: "domElement", makeDefault: "makeDefault", regress: "regress", target: "target", enableDamping: "enableDamping" }, outputs: { change: "change", start: "start", end: "end" }, usesInheritance: true, ngImport: i0, template: `
110
+ NgtsOrbitControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsOrbitControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
111
+ NgtsOrbitControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsOrbitControls, isStandalone: true, selector: "ngts-orbit-controls", inputs: { controlsRef: "controlsRef", camera: "camera", domElement: "domElement", makeDefault: "makeDefault", regress: "regress", target: "target", enableDamping: "enableDamping" }, outputs: { change: "change", start: "start", end: "end" }, usesInheritance: true, ngImport: i0, template: `
112
112
  <ngt-primitive *args="get('args')" ngtCompound [enableDamping]="enableDamping$ | ngtPush" />
113
113
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }, { kind: "pipe", type: NgtPush, name: "ngtPush" }] });
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsOrbitControls, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsOrbitControls, decorators: [{
115
115
  type: Component,
116
116
  args: [{
117
117
  selector: 'ngts-orbit-controls',
@@ -69,8 +69,8 @@ export class NgtsLoader extends NgtRxStore {
69
69
  });
70
70
  }
71
71
  }
72
- NgtsLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsLoader, deps: null, target: i0.ɵɵFactoryTarget.Component });
73
- NgtsLoader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NgtsLoader, isStandalone: true, selector: "ngts-loader", inputs: { containerClass: "containerClass", innerClass: "innerClass", barClass: "barClass", dataClass: "dataClass", dataInterpolation: "dataInterpolation", initialState: "initialState" }, viewQueries: [{ propertyName: "progressSpanRef", first: true, predicate: ["progressSpanRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
72
+ NgtsLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLoader, deps: null, target: i0.ɵɵFactoryTarget.Component });
73
+ NgtsLoader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsLoader, isStandalone: true, selector: "ngts-loader", inputs: { containerClass: "containerClass", innerClass: "innerClass", barClass: "barClass", dataClass: "dataClass", dataInterpolation: "dataInterpolation", initialState: "initialState" }, viewQueries: [{ propertyName: "progressSpanRef", first: true, predicate: ["progressSpanRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
74
74
  <ng-container *ngIf="vm$ | ngtPush as vm">
75
75
  <div
76
76
  *ngIf="vm.shown"
@@ -91,7 +91,7 @@ NgtsLoader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "1
91
91
  </div>
92
92
  </ng-container>
93
93
  `, isInline: true, styles: [".ngts-loader-container{--ngts-loader-container-opacity: 0;position:absolute;top:0;left:0;width:100%;height:100%;background:#171717;display:flex;align-items:center;justify-content:center;transition:opacity .3s ease;z-index:1000;opacity:var(--ngts-loader-container-opacity)}.ngts-loader-inner{width:100px;height:3px;background:#272727;text-align:center}.ngts-loader-bar{--ngts-loader-bar-scale: 0;height:3px;width:100px;background:white;transition:transform .2s;transform-origin:left center;transform:scaleX(var(--ngts-loader-bar-scale))}.ngts-loader-data{display:inline-block;position:relative;font-feature-settings:\"tnum\";font-variant-numeric:tabular-nums;margin-top:.8em;color:#f0f0f0;font-size:.6em;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Helvetica Neue,Helvetica,Arial,Roboto,Ubuntu,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: NgtPush, name: "ngtPush" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsLoader, decorators: [{
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLoader, decorators: [{
95
95
  type: Component,
96
96
  args: [{ selector: 'ngts-loader', standalone: true, template: `
97
97
  <ng-container *ngIf="vm$ | ngtPush as vm">
@@ -1,2 +1,3 @@
1
1
  export * from './lib/bake-shadows/bake-shadows';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9taXNjL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYmFrZS1zaGFkb3dzL2Jha2Utc2hhZG93cyc7XG4iXX0=
2
+ export * from './lib/fbo/fbo';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9taXNjL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYmFrZS1zaGFkb3dzL2Jha2Utc2hhZG93cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mYm8vZmJvJztcbiJdfQ==
@@ -16,9 +16,9 @@ export class NgtsBakeShadows extends NgtRxStore {
16
16
  });
17
17
  }
18
18
  }
19
- NgtsBakeShadows.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsBakeShadows, deps: null, target: i0.ɵɵFactoryTarget.Directive });
20
- NgtsBakeShadows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: NgtsBakeShadows, isStandalone: true, selector: "ngts-bake-shadows", usesInheritance: true, ngImport: i0 });
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsBakeShadows, decorators: [{
19
+ NgtsBakeShadows.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsBakeShadows, deps: null, target: i0.ɵɵFactoryTarget.Directive });
20
+ NgtsBakeShadows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsBakeShadows, isStandalone: true, selector: "ngts-bake-shadows", usesInheritance: true, ngImport: i0 });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsBakeShadows, decorators: [{
22
22
  type: Directive,
23
23
  args: [{ selector: 'ngts-bake-shadows', standalone: true }]
24
24
  }] });
@@ -0,0 +1,38 @@
1
+ import { inject } from '@angular/core';
2
+ import { injectNgtDestroy, injectNgtRef, NgtStore, safeDetectChanges } from 'angular-three';
3
+ import { isObservable, of, takeUntil } from 'rxjs';
4
+ import * as THREE from 'three';
5
+ export function injectNgtsFBO(paramsFactory) {
6
+ const store = inject(NgtStore);
7
+ const targetRef = injectNgtRef();
8
+ const { destroy$, cdr } = injectNgtDestroy(() => {
9
+ targetRef.nativeElement?.dispose();
10
+ });
11
+ const params = paramsFactory({});
12
+ const params$ = isObservable(params) ? params : of(params);
13
+ params$.pipe(takeUntil(destroy$)).subscribe(({ width, height, settings }) => {
14
+ const { gl, size, viewport } = store.get();
15
+ const _width = typeof width === 'number' ? width : size.width * viewport.dpr;
16
+ const _height = typeof height === 'number' ? height : size.height * viewport.dpr;
17
+ const _settings = (typeof width === 'number' ? settings : width) || {};
18
+ const { samples, ...targetSettings } = _settings;
19
+ if (!targetRef.nativeElement) {
20
+ const target = new THREE.WebGLRenderTarget(_width, _height, {
21
+ minFilter: THREE.LinearFilter,
22
+ magFilter: THREE.LinearFilter,
23
+ encoding: gl.outputEncoding,
24
+ type: THREE.HalfFloatType,
25
+ ...targetSettings,
26
+ });
27
+ if (samples)
28
+ target.samples = samples;
29
+ targetRef.nativeElement = target;
30
+ }
31
+ targetRef.nativeElement.setSize(_width, _height);
32
+ if (samples)
33
+ targetRef.nativeElement.samples = samples;
34
+ safeDetectChanges(cdr);
35
+ });
36
+ return targetRef;
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmJvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvbWlzYy9zcmMvbGliL2Ziby9mYm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFhL0IsTUFBTSxVQUFVLGFBQWEsQ0FDekIsYUFBNEc7SUFFNUcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sU0FBUyxHQUFHLFlBQVksRUFBMkIsQ0FBQztJQUMxRCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtRQUM1QyxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0QsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUN4RSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUM3RSxNQUFNLE9BQU8sR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ2pGLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLEtBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEYsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUVqRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtZQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO2dCQUN4RCxTQUFTLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQzdCLFNBQVMsRUFBRSxLQUFLLENBQUMsWUFBWTtnQkFDN0IsUUFBUSxFQUFFLEVBQUUsQ0FBQyxjQUFjO2dCQUMzQixJQUFJLEVBQUUsS0FBSyxDQUFDLGFBQWE7Z0JBQ3pCLEdBQUcsY0FBYzthQUNwQixDQUFDLENBQUM7WUFDSCxJQUFJLE9BQU87Z0JBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDdEMsU0FBUyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7U0FDcEM7UUFFRCxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxPQUFPO1lBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZELGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0RGVzdHJveSwgaW5qZWN0Tmd0UmVmLCBOZ3RTdG9yZSwgc2FmZURldGVjdENoYW5nZXMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5pbnRlcmZhY2UgRkJPU2V0dGluZ3M8VCBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gZXh0ZW5kcyBUSFJFRS5XZWJHTFJlbmRlclRhcmdldE9wdGlvbnMge1xuICAgIG11bHRpc2FtcGxlPzogVDtcbiAgICBzYW1wbGVzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNGQk9QYXJhbXM8VCBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4ge1xuICAgIHdpZHRoPzogbnVtYmVyIHwgRkJPU2V0dGluZ3M8VD47XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIHNldHRpbmdzPzogRkJPU2V0dGluZ3M8VD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RzRkJPPFQgZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+KFxuICAgIHBhcmFtc0ZhY3Rvcnk6IChkZWZhdWx0UGFyYW1zOiBQYXJ0aWFsPE5ndHNGQk9QYXJhbXM8VD4+KSA9PiBOZ3RzRkJPUGFyYW1zPFQ+IHwgT2JzZXJ2YWJsZTxOZ3RzRkJPUGFyYW1zPFQ+PlxuKSB7XG4gICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuICAgIGNvbnN0IHRhcmdldFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5XZWJHTFJlbmRlclRhcmdldD4oKTtcbiAgICBjb25zdCB7IGRlc3Ryb3kkLCBjZHIgfSA9IGluamVjdE5ndERlc3Ryb3koKCkgPT4ge1xuICAgICAgICB0YXJnZXRSZWYubmF0aXZlRWxlbWVudD8uZGlzcG9zZSgpO1xuICAgIH0pO1xuICAgIGNvbnN0IHBhcmFtcyA9IHBhcmFtc0ZhY3Rvcnkoe30pO1xuICAgIGNvbnN0IHBhcmFtcyQgPSBpc09ic2VydmFibGUocGFyYW1zKSA/IHBhcmFtcyA6IG9mKHBhcmFtcyk7XG5cbiAgICBwYXJhbXMkLnBpcGUodGFrZVVudGlsKGRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh7IHdpZHRoLCBoZWlnaHQsIHNldHRpbmdzIH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBnbCwgc2l6ZSwgdmlld3BvcnQgfSA9IHN0b3JlLmdldCgpO1xuICAgICAgICBjb25zdCBfd2lkdGggPSB0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInID8gd2lkdGggOiBzaXplLndpZHRoICogdmlld3BvcnQuZHByO1xuICAgICAgICBjb25zdCBfaGVpZ2h0ID0gdHlwZW9mIGhlaWdodCA9PT0gJ251bWJlcicgPyBoZWlnaHQgOiBzaXplLmhlaWdodCAqIHZpZXdwb3J0LmRwcjtcbiAgICAgICAgY29uc3QgX3NldHRpbmdzID0gKHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicgPyBzZXR0aW5ncyA6ICh3aWR0aCBhcyBGQk9TZXR0aW5ncykpIHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IHsgc2FtcGxlcywgLi4udGFyZ2V0U2V0dGluZ3MgfSA9IF9zZXR0aW5ncztcblxuICAgICAgICBpZiAoIXRhcmdldFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQoX3dpZHRoLCBfaGVpZ2h0LCB7XG4gICAgICAgICAgICAgICAgbWluRmlsdGVyOiBUSFJFRS5MaW5lYXJGaWx0ZXIsXG4gICAgICAgICAgICAgICAgbWFnRmlsdGVyOiBUSFJFRS5MaW5lYXJGaWx0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IGdsLm91dHB1dEVuY29kaW5nLFxuICAgICAgICAgICAgICAgIHR5cGU6IFRIUkVFLkhhbGZGbG9hdFR5cGUsXG4gICAgICAgICAgICAgICAgLi4udGFyZ2V0U2V0dGluZ3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzYW1wbGVzKSB0YXJnZXQuc2FtcGxlcyA9IHNhbXBsZXM7XG4gICAgICAgICAgICB0YXJnZXRSZWYubmF0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFJlZi5uYXRpdmVFbGVtZW50LnNldFNpemUoX3dpZHRoLCBfaGVpZ2h0KTtcbiAgICAgICAgaWYgKHNhbXBsZXMpIHRhcmdldFJlZi5uYXRpdmVFbGVtZW50LnNhbXBsZXMgPSBzYW1wbGVzO1xuICAgICAgICBzYWZlRGV0ZWN0Q2hhbmdlcyhjZHIpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhcmdldFJlZjtcbn1cbiJdfQ==
@@ -31,9 +31,9 @@ export class NgtsAdaptiveDpr extends NgtRxStore {
31
31
  });
32
32
  }
33
33
  }
34
- NgtsAdaptiveDpr.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsAdaptiveDpr, deps: null, target: i0.ɵɵFactoryTarget.Directive });
35
- NgtsAdaptiveDpr.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: NgtsAdaptiveDpr, isStandalone: true, selector: "ngts-adaptive-dpr", inputs: { pixelated: "pixelated" }, providers: [RxActionFactory], usesInheritance: true, ngImport: i0 });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
34
+ NgtsAdaptiveDpr.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsAdaptiveDpr, deps: null, target: i0.ɵɵFactoryTarget.Directive });
35
+ NgtsAdaptiveDpr.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsAdaptiveDpr, isStandalone: true, selector: "ngts-adaptive-dpr", inputs: { pixelated: "pixelated" }, providers: [RxActionFactory], usesInheritance: true, ngImport: i0 });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
37
37
  type: Directive,
38
38
  args: [{
39
39
  selector: 'ngts-adaptive-dpr',
@@ -23,9 +23,9 @@ export class NgtsAdaptiveEvents extends NgtRxStore {
23
23
  });
24
24
  }
25
25
  }
26
- NgtsAdaptiveEvents.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsAdaptiveEvents, deps: null, target: i0.ɵɵFactoryTarget.Directive });
27
- NgtsAdaptiveEvents.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: NgtsAdaptiveEvents, isStandalone: true, selector: "ngts-adaptive-events", providers: [RxActionFactory], usesInheritance: true, ngImport: i0 });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
26
+ NgtsAdaptiveEvents.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsAdaptiveEvents, deps: null, target: i0.ɵɵFactoryTarget.Directive });
27
+ NgtsAdaptiveEvents.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsAdaptiveEvents, isStandalone: true, selector: "ngts-adaptive-events", providers: [RxActionFactory], usesInheritance: true, ngImport: i0 });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
29
29
  type: Directive,
30
30
  args: [{
31
31
  selector: 'ngts-adaptive-events',
@@ -24,13 +24,13 @@ export class NgtsDetailed extends NgtRxStore {
24
24
  });
25
25
  }
26
26
  }
27
- NgtsDetailed.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsDetailed, deps: null, target: i0.ɵɵFactoryTarget.Component });
28
- NgtsDetailed.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NgtsDetailed, isStandalone: true, selector: "ngts-detailed[distances]", inputs: { lodRef: "lodRef", distances: "distances" }, usesInheritance: true, ngImport: i0, template: `
27
+ NgtsDetailed.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsDetailed, deps: null, target: i0.ɵɵFactoryTarget.Component });
28
+ NgtsDetailed.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsDetailed, isStandalone: true, selector: "ngts-detailed[distances]", inputs: { lodRef: "lodRef", distances: "distances" }, usesInheritance: true, ngImport: i0, template: `
29
29
  <ngt-lOD [ref]="lodRef" ngtCompound (beforeRender)="$any($event).object.update($any($event).state.camera)">
30
30
  <ng-content />
31
31
  </ngt-lOD>
32
32
  `, isInline: true });
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsDetailed, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsDetailed, decorators: [{
34
34
  type: Component,
35
35
  args: [{
36
36
  selector: 'ngts-detailed[distances]',
@@ -45,9 +45,9 @@ export class NgtsStats extends NgtRxStore {
45
45
  });
46
46
  }
47
47
  }
48
- NgtsStats.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsStats, deps: null, target: i0.ɵɵFactoryTarget.Directive });
49
- NgtsStats.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: NgtsStats, isStandalone: true, selector: "ngts-stats", inputs: { showPanel: "showPanel", parent: "parent", classes: "classes" }, usesInheritance: true, ngImport: i0 });
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsStats, decorators: [{
48
+ NgtsStats.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStats, deps: null, target: i0.ɵɵFactoryTarget.Directive });
49
+ NgtsStats.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsStats, isStandalone: true, selector: "ngts-stats", inputs: { showPanel: "showPanel", parent: "parent", classes: "classes" }, usesInheritance: true, ngImport: i0 });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStats, decorators: [{
51
51
  type: Directive,
52
52
  args: [{
53
53
  selector: 'ngts-stats',