angular-three-soba 1.9.3 → 1.11.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 (123) hide show
  1. package/abstractions/index.d.ts +1 -0
  2. package/abstractions/lib/edges/edges.d.ts +18 -0
  3. package/cameras/index.d.ts +1 -0
  4. package/cameras/lib/camera/camera-content.d.ts +1 -1
  5. package/cameras/lib/cube-camera/cube-camera.d.ts +27 -0
  6. package/esm2020/abstractions/index.mjs +2 -1
  7. package/esm2020/abstractions/lib/billboard/billboard.mjs +3 -3
  8. package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +3 -3
  9. package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +3 -3
  10. package/esm2020/abstractions/lib/edges/edges.mjs +95 -0
  11. package/esm2020/abstractions/lib/gizmo-helper/gizmo-helper.mjs +6 -6
  12. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +3 -3
  13. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +6 -6
  14. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +3 -3
  15. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +3 -3
  16. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +6 -6
  17. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +3 -3
  18. package/esm2020/abstractions/lib/line/line-input.mjs +3 -3
  19. package/esm2020/abstractions/lib/line/line.mjs +3 -3
  20. package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +3 -3
  21. package/esm2020/abstractions/lib/text/text.mjs +3 -3
  22. package/esm2020/abstractions/lib/text-3d/text-3d.mjs +3 -3
  23. package/esm2020/cameras/index.mjs +2 -1
  24. package/esm2020/cameras/lib/camera/camera-content.mjs +4 -4
  25. package/esm2020/cameras/lib/camera/camera.mjs +3 -3
  26. package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +130 -0
  27. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +3 -3
  28. package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +3 -3
  29. package/esm2020/controls/lib/orbit-controls/orbit-controls.mjs +3 -3
  30. package/esm2020/loaders/lib/loader/loader.mjs +3 -3
  31. package/esm2020/materials/index.mjs +3 -1
  32. package/esm2020/materials/lib/mesh-distort-material/mesh-distort-material.mjs +3 -3
  33. package/esm2020/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +3 -3
  34. package/esm2020/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +157 -0
  35. package/esm2020/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +240 -0
  36. package/esm2020/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +3 -3
  37. package/esm2020/misc/lib/bake-shadows/bake-shadows.mjs +3 -3
  38. package/esm2020/misc/lib/fbo/fbo.mjs +5 -4
  39. package/esm2020/performance/lib/adaptive/adaptive-dpr.mjs +3 -3
  40. package/esm2020/performance/lib/adaptive/adaptive-events.mjs +3 -3
  41. package/esm2020/performance/lib/detailed/detailed.mjs +3 -3
  42. package/esm2020/performance/lib/stats/stats.mjs +3 -3
  43. package/esm2020/shaders/index.mjs +6 -1
  44. package/esm2020/shaders/lib/caustics-material/caustics-material.mjs +128 -0
  45. package/esm2020/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +33 -0
  46. package/esm2020/shaders/lib/discard-material/discard-material.mjs +3 -0
  47. package/esm2020/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +169 -0
  48. package/esm2020/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
  49. package/esm2020/staging/index.mjs +2 -1
  50. package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +6 -6
  51. package/esm2020/staging/lib/accumulative-shadows/progressive-light-map.mjs +2 -3
  52. package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +6 -6
  53. package/esm2020/staging/lib/bounds/bounds.mjs +3 -3
  54. package/esm2020/staging/lib/camera-shake/camera-shake.mjs +3 -3
  55. package/esm2020/staging/lib/caustics/caustics.mjs +364 -0
  56. package/esm2020/staging/lib/center/center.mjs +3 -3
  57. package/esm2020/staging/lib/cloud/cloud.mjs +3 -3
  58. package/esm2020/staging/lib/contact-shadows/contact-shadows.mjs +3 -3
  59. package/esm2020/staging/lib/environment/environment-cube.mjs +3 -3
  60. package/esm2020/staging/lib/environment/environment-ground.mjs +3 -3
  61. package/esm2020/staging/lib/environment/environment-inputs.mjs +3 -3
  62. package/esm2020/staging/lib/environment/environment-map.mjs +3 -3
  63. package/esm2020/staging/lib/environment/environment-portal.mjs +3 -3
  64. package/esm2020/staging/lib/environment/environment.mjs +6 -6
  65. package/esm2020/staging/lib/float/float.mjs +3 -3
  66. package/esm2020/staging/lib/sky/sky.mjs +3 -3
  67. package/esm2020/staging/lib/sparkles/sparkles.mjs +3 -3
  68. package/esm2020/staging/lib/spot-light/shadow-mesh-input.mjs +3 -3
  69. package/esm2020/staging/lib/spot-light/spot-light-input.mjs +3 -3
  70. package/esm2020/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +3 -3
  71. package/esm2020/staging/lib/spot-light/spot-light-shadow-shader.mjs +3 -3
  72. package/esm2020/staging/lib/spot-light/spot-light-shadow.mjs +3 -3
  73. package/esm2020/staging/lib/spot-light/spot-light.mjs +3 -3
  74. package/esm2020/staging/lib/spot-light/volumetric-mesh.mjs +3 -3
  75. package/esm2020/staging/lib/stage/stage.mjs +6 -6
  76. package/esm2020/staging/lib/stars/stars.mjs +3 -3
  77. package/fesm2015/angular-three-soba-abstractions.mjs +145 -56
  78. package/fesm2015/angular-three-soba-abstractions.mjs.map +1 -1
  79. package/fesm2015/angular-three-soba-cameras.mjs +139 -16
  80. package/fesm2015/angular-three-soba-cameras.mjs.map +1 -1
  81. package/fesm2015/angular-three-soba-controls.mjs +3 -3
  82. package/fesm2015/angular-three-soba-loaders.mjs +3 -3
  83. package/fesm2015/angular-three-soba-materials.mjs +398 -11
  84. package/fesm2015/angular-three-soba-materials.mjs.map +1 -1
  85. package/fesm2015/angular-three-soba-misc.mjs +7 -6
  86. package/fesm2015/angular-three-soba-misc.mjs.map +1 -1
  87. package/fesm2015/angular-three-soba-performance.mjs +12 -12
  88. package/fesm2015/angular-three-soba-shaders.mjs +619 -31
  89. package/fesm2015/angular-three-soba-shaders.mjs.map +1 -1
  90. package/fesm2015/angular-three-soba-staging.mjs +450 -96
  91. package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
  92. package/fesm2020/angular-three-soba-abstractions.mjs +145 -56
  93. package/fesm2020/angular-three-soba-abstractions.mjs.map +1 -1
  94. package/fesm2020/angular-three-soba-cameras.mjs +139 -16
  95. package/fesm2020/angular-three-soba-cameras.mjs.map +1 -1
  96. package/fesm2020/angular-three-soba-controls.mjs +3 -3
  97. package/fesm2020/angular-three-soba-loaders.mjs +3 -3
  98. package/fesm2020/angular-three-soba-materials.mjs +396 -11
  99. package/fesm2020/angular-three-soba-materials.mjs.map +1 -1
  100. package/fesm2020/angular-three-soba-misc.mjs +7 -6
  101. package/fesm2020/angular-three-soba-misc.mjs.map +1 -1
  102. package/fesm2020/angular-three-soba-performance.mjs +12 -12
  103. package/fesm2020/angular-three-soba-shaders.mjs +625 -34
  104. package/fesm2020/angular-three-soba-shaders.mjs.map +1 -1
  105. package/fesm2020/angular-three-soba-staging.mjs +449 -96
  106. package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
  107. package/materials/index.d.ts +2 -0
  108. package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +28 -0
  109. package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +47 -0
  110. package/misc/lib/fbo/fbo.d.ts +8 -6
  111. package/package.json +4 -3
  112. package/plugin/package.json +1 -1
  113. package/shaders/index.d.ts +5 -0
  114. package/shaders/lib/caustics-material/caustics-material.d.ts +4 -0
  115. package/shaders/lib/caustics-projection-material/caustics-projection-material.d.ts +4 -0
  116. package/shaders/lib/discard-material/discard-material.d.ts +3 -0
  117. package/shaders/lib/mesh-refraction-material/mesh-refraction-material.d.ts +4 -0
  118. package/shaders/lib/mesh-transmission-material/mesh-transmission-material.d.ts +25 -0
  119. package/staging/index.d.ts +1 -0
  120. package/staging/lib/caustics/caustics.d.ts +48 -0
  121. package/staging/lib/environment/environment-cube.d.ts +1 -1
  122. package/staging/lib/environment/environment-ground.d.ts +1 -1
  123. package/staging/lib/environment/utils.d.ts +1 -1
@@ -9,12 +9,12 @@ export class NgtsCameraContent {
9
9
  return true;
10
10
  }
11
11
  }
12
- NgtsCameraContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsCameraContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
13
- NgtsCameraContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.5", type: NgtsCameraContent, isStandalone: true, selector: "ng-template[ngtsCameraContent]", inputs: { ngtsCameraContent: "ngtsCameraContent" }, ngImport: i0 });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsCameraContent, decorators: [{
12
+ NgtsCameraContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsCameraContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
13
+ NgtsCameraContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: NgtsCameraContent, isStandalone: true, selector: "ng-template[ngtsCameraContent]", inputs: { ngtsCameraContent: "ngtsCameraContent" }, ngImport: i0 });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsCameraContent, decorators: [{
15
15
  type: Directive,
16
16
  args: [{ selector: 'ng-template[ngtsCameraContent]', standalone: true }]
17
17
  }], propDecorators: { ngtsCameraContent: [{
18
18
  type: Input
19
19
  }] } });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLWNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9saWIvY2FtZXJhL2NhbWVyYS1jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSXRFLE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFFYSxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLHNCQUFpQixHQUFpQixFQUFFLENBQUM7S0FRakQ7SUFORyxNQUFNLENBQUMsc0JBQXNCLENBQ3pCLENBQW9CLEVBQ3BCLEdBQVk7UUFFWixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs4R0FUUSxpQkFBaUI7a0dBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7OEJBRzlELGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0c0NhbWVyYUNvbnRlbnRdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNDYW1lcmFDb250ZW50IHtcbiAgICByZWFkb25seSB0ZW1wbGF0ZSA9IGluamVjdChUZW1wbGF0ZVJlZik7XG4gICAgQElucHV0KCkgbmd0c0NhbWVyYUNvbnRlbnQ6IGJvb2xlYW4gfCAnJyA9ICcnO1xuXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXG4gICAgICAgIF86IE5ndHNDYW1lcmFDb250ZW50LFxuICAgICAgICBjdHg6IHVua25vd25cbiAgICApOiBjdHggaXMgeyB0YXJnZXQ6IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OyBncm91cD86IFRIUkVFLkdyb3VwIH0ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLWNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9saWIvY2FtZXJhL2NhbWVyYS1jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSXRFLE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFFYSxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLHNCQUFpQixHQUFpQixFQUFFLENBQUM7S0FRakQ7SUFORyxNQUFNLENBQUMsc0JBQXNCLENBQ3pCLENBQW9CLEVBQ3BCLEdBQVk7UUFFWixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs4R0FUUSxpQkFBaUI7a0dBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGdDQUFnQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7OEJBRzlELGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0c0NhbWVyYUNvbnRlbnRdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNDYW1lcmFDb250ZW50IHtcbiAgICByZWFkb25seSB0ZW1wbGF0ZSA9IGluamVjdChUZW1wbGF0ZVJlZik7XG4gICAgQElucHV0KCkgbmd0c0NhbWVyYUNvbnRlbnQ6IGJvb2xlYW4gfCAnJyA9ICcnO1xuXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXG4gICAgICAgIF86IE5ndHNDYW1lcmFDb250ZW50LFxuICAgICAgICBjdHg6IHVua25vd25cbiAgICApOiBjdHggaXMgeyBmYm86IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OyBncm91cD86IFRIUkVFLkdyb3VwIH0ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4iXX0=
@@ -54,9 +54,9 @@ export class NgtsCamera extends NgtRxStore {
54
54
  });
55
55
  }
56
56
  }
57
- NgtsCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsCamera, deps: null, target: i0.ɵɵFactoryTarget.Directive });
58
- NgtsCamera.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.5", 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.5", ngImport: i0, type: NgtsCamera, decorators: [{
57
+ NgtsCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsCamera, deps: null, target: i0.ɵɵFactoryTarget.Directive });
58
+ NgtsCamera.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", 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.2.0", ngImport: i0, type: NgtsCamera, decorators: [{
60
60
  type: Directive
61
61
  }], propDecorators: { makeDefault: [{
62
62
  type: Input
@@ -0,0 +1,130 @@
1
+ import { NgIf, NgTemplateOutlet } from '@angular/common';
2
+ import { Component, ContentChild, CUSTOM_ELEMENTS_SCHEMA, ElementRef, inject, Input, ViewChild } from '@angular/core';
3
+ import { extend, injectBeforeRender, injectNgtRef, NgtArgs, NgtRxStore, NgtStore } from 'angular-three';
4
+ import { combineLatest, map } from 'rxjs';
5
+ import * as THREE from 'three';
6
+ import { CubeCamera, Group } from 'three';
7
+ import { NgtsCameraContent } from '../camera/camera-content';
8
+ import * as i0 from "@angular/core";
9
+ extend({ Group, CubeCamera });
10
+ export class NgtsCubeCamera extends NgtRxStore {
11
+ /** Number of frames to render, Infinity */
12
+ set frames(frames) {
13
+ this.set({ frames });
14
+ }
15
+ /** Resolution of the FBO, 256 */
16
+ set resolution(resolution) {
17
+ this.set({ resolution });
18
+ }
19
+ /** Camera near, 0.1 */
20
+ set near(near) {
21
+ this.set({ near });
22
+ }
23
+ /** Camera far, 1000 */
24
+ set far(far) {
25
+ this.set({ far });
26
+ }
27
+ /** Custom environment map that is temporarily set as the scenes background */
28
+ set envMap(envMap) {
29
+ this.set({ envMap });
30
+ }
31
+ /** Custom fog that is temporarily set as the scenes fog */
32
+ set fog(fog) {
33
+ this.set({ fog });
34
+ }
35
+ initialize() {
36
+ super.initialize();
37
+ this.set({
38
+ frames: Infinity,
39
+ resolution: 256,
40
+ near: 0.1,
41
+ far: 1000,
42
+ });
43
+ }
44
+ constructor() {
45
+ super();
46
+ this.cameraRef = injectNgtRef();
47
+ this.store = inject(NgtStore);
48
+ this.connect('fbo', this.select('resolution').pipe(map((resolution) => {
49
+ const fbo = new THREE.WebGLCubeRenderTarget(resolution);
50
+ fbo.texture.encoding = this.store.get('gl').outputEncoding;
51
+ fbo.texture.type = THREE.HalfFloatType;
52
+ return fbo;
53
+ })));
54
+ this.connect('cameraArgs', combineLatest([this.select('near'), this.select('far'), this.select('fbo')]));
55
+ let count = 0;
56
+ let originalFog;
57
+ let originalBackground;
58
+ injectBeforeRender(({ scene, gl }) => {
59
+ const { frames, envMap, fog } = this.get();
60
+ if (envMap &&
61
+ this.cameraRef.nativeElement &&
62
+ this.groupRef.nativeElement &&
63
+ (frames === Infinity || count < frames)) {
64
+ this.groupRef.nativeElement.visible = false;
65
+ originalFog = scene.fog;
66
+ originalBackground = scene.background;
67
+ scene.background = envMap || originalBackground;
68
+ scene.fog = fog || originalFog;
69
+ this.cameraRef.nativeElement.update(gl, scene);
70
+ scene.fog = originalFog;
71
+ scene.background = originalBackground;
72
+ this.groupRef.nativeElement.visible = true;
73
+ count++;
74
+ }
75
+ });
76
+ }
77
+ }
78
+ NgtsCubeCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsCubeCamera, deps: [], target: i0.ɵɵFactoryTarget.Component });
79
+ NgtsCubeCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtsCubeCamera, isStandalone: true, selector: "ngts-cube-camera", inputs: { frames: "frames", resolution: "resolution", near: "near", far: "far", envMap: "envMap", fog: "fog" }, queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true }], viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
80
+ <ngt-group ngtCompound>
81
+ <ngt-cube-camera [ref]="cameraRef" *args="get('cameraArgs')" />
82
+ <ngt-group #group>
83
+ <ng-container
84
+ *ngIf="cameraContent && cameraContent.ngtsCameraContent && get('fbo')"
85
+ [ngTemplateOutlet]="cameraContent.template"
86
+ [ngTemplateOutletContext]="{ fbo: get('fbo').texture, group }"
87
+ />
88
+ </ngt-group>
89
+ </ngt-group>
90
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsCubeCamera, decorators: [{
92
+ type: Component,
93
+ args: [{
94
+ selector: 'ngts-cube-camera',
95
+ standalone: true,
96
+ template: `
97
+ <ngt-group ngtCompound>
98
+ <ngt-cube-camera [ref]="cameraRef" *args="get('cameraArgs')" />
99
+ <ngt-group #group>
100
+ <ng-container
101
+ *ngIf="cameraContent && cameraContent.ngtsCameraContent && get('fbo')"
102
+ [ngTemplateOutlet]="cameraContent.template"
103
+ [ngTemplateOutletContext]="{ fbo: get('fbo').texture, group }"
104
+ />
105
+ </ngt-group>
106
+ </ngt-group>
107
+ `,
108
+ imports: [NgIf, NgTemplateOutlet, NgtArgs],
109
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
110
+ }]
111
+ }], ctorParameters: function () { return []; }, propDecorators: { groupRef: [{
112
+ type: ViewChild,
113
+ args: ['group', { static: true }]
114
+ }], cameraContent: [{
115
+ type: ContentChild,
116
+ args: [NgtsCameraContent]
117
+ }], frames: [{
118
+ type: Input
119
+ }], resolution: [{
120
+ type: Input
121
+ }], near: [{
122
+ type: Input
123
+ }], far: [{
124
+ type: Input
125
+ }], envMap: [{
126
+ type: Input
127
+ }], fog: [{
128
+ type: Input
129
+ }] } });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViZS1jYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9jYW1lcmFzL3NyYy9saWIvY3ViZS1jYW1lcmEvY3ViZS1jYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFFN0QsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFvQjlCLE1BQU0sT0FBTyxjQUFlLFNBQVEsVUFBVTtJQU0xQywyQ0FBMkM7SUFDM0MsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBQ0QsaUNBQWlDO0lBQ2pDLElBQWEsVUFBVSxDQUFDLFVBQWtCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFD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QUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxLQUFLLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDM0MsS0FBSyxFQUFFLENBQUM7YUFDWDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7MkdBakZRLGNBQWM7K0ZBQWQsY0FBYyx1T0FFVCxpQkFBaUIsd0xBakJyQjs7Ozs7Ozs7Ozs7S0FXVCw0REFDUyxJQUFJLDZGQUFFLGdCQUFnQixvSkFBRSxPQUFPOzJGQUdoQyxjQUFjO2tCQWxCMUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7OztLQVdUO29CQUNELE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUM7b0JBQzFDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFFeUMsUUFBUTtzQkFBN0MsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNILGFBQWE7c0JBQTdDLFlBQVk7dUJBQUMsaUJBQWlCO2dCQUtsQixNQUFNO3NCQUFsQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIE5ndEFyZ3MsIE5ndFJ4U3RvcmUsIE5ndFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEN1YmVDYW1lcmEsIEdyb3VwIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0NhbWVyYUNvbnRlbnQgfSBmcm9tICcuLi9jYW1lcmEvY2FtZXJhLWNvbnRlbnQnO1xuXG5leHRlbmQoeyBHcm91cCwgQ3ViZUNhbWVyYSB9KTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWN1YmUtY2FtZXJhJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQ+XG4gICAgICAgICAgICA8bmd0LWN1YmUtY2FtZXJhIFtyZWZdPVwiY2FtZXJhUmVmXCIgKmFyZ3M9XCJnZXQoJ2NhbWVyYUFyZ3MnKVwiIC8+XG4gICAgICAgICAgICA8bmd0LWdyb3VwICNncm91cD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FtZXJhQ29udGVudCAmJiBjYW1lcmFDb250ZW50Lm5ndHNDYW1lcmFDb250ZW50ICYmIGdldCgnZmJvJylcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjYW1lcmFDb250ZW50LnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmJvOiBnZXQoJ2ZibycpLnRleHR1cmUsIGdyb3VwIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25ndC1ncm91cD5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3ViZUNhbWVyYSBleHRlbmRzIE5ndFJ4U3RvcmUge1xuICAgIEBWaWV3Q2hpbGQoJ2dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgZ3JvdXBSZWYhOiBFbGVtZW50UmVmPFRIUkVFLkdyb3VwPjtcbiAgICBAQ29udGVudENoaWxkKE5ndHNDYW1lcmFDb250ZW50KSBjYW1lcmFDb250ZW50PzogTmd0c0NhbWVyYUNvbnRlbnQ7XG5cbiAgICByZWFkb25seSBjYW1lcmFSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuQ3ViZUNhbWVyYT4oKTtcblxuICAgIC8qKiBOdW1iZXIgb2YgZnJhbWVzIHRvIHJlbmRlciwgSW5maW5pdHkgKi9cbiAgICBASW5wdXQoKSBzZXQgZnJhbWVzKGZyYW1lczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZnJhbWVzIH0pO1xuICAgIH1cbiAgICAvKiogUmVzb2x1dGlvbiBvZiB0aGUgRkJPLCAyNTYgKi9cbiAgICBASW5wdXQoKSBzZXQgcmVzb2x1dGlvbihyZXNvbHV0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByZXNvbHV0aW9uIH0pO1xuICAgIH1cbiAgICAvKiogQ2FtZXJhIG5lYXIsIDAuMSAqL1xuICAgIEBJbnB1dCgpIHNldCBuZWFyKG5lYXI6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG5lYXIgfSk7XG4gICAgfVxuICAgIC8qKiBDYW1lcmEgZmFyLCAxMDAwICovXG4gICAgQElucHV0KCkgc2V0IGZhcihmYXI6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZhciB9KTtcbiAgICB9XG4gICAgLyoqIEN1c3RvbSBlbnZpcm9ubWVudCBtYXAgdGhhdCBpcyB0ZW1wb3JhcmlseSBzZXQgYXMgdGhlIHNjZW5lcyBiYWNrZ3JvdW5kICovXG4gICAgQElucHV0KCkgc2V0IGVudk1hcChlbnZNYXA6IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZNYXAgfSk7XG4gICAgfVxuICAgIC8qKiBDdXN0b20gZm9nIHRoYXQgaXMgdGVtcG9yYXJpbHkgc2V0IGFzIHRoZSBzY2VuZXMgZm9nICovXG4gICAgQElucHV0KCkgc2V0IGZvZyhmb2c6IFRIUkVFLkZvZyB8IFRIUkVFLkZvZ0V4cDIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmb2cgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGZyYW1lczogSW5maW5pdHksXG4gICAgICAgICAgICByZXNvbHV0aW9uOiAyNTYsXG4gICAgICAgICAgICBuZWFyOiAwLjEsXG4gICAgICAgICAgICBmYXI6IDEwMDAsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnZmJvJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdyZXNvbHV0aW9uJykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc29sdXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmJvID0gbmV3IFRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldChyZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgZmJvLnRleHR1cmUuZW5jb2RpbmcgPSB0aGlzLnN0b3JlLmdldCgnZ2wnKS5vdXRwdXRFbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgZmJvLnRleHR1cmUudHlwZSA9IFRIUkVFLkhhbGZGbG9hdFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYm87XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb25uZWN0KCdjYW1lcmFBcmdzJywgY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ25lYXInKSwgdGhpcy5zZWxlY3QoJ2ZhcicpLCB0aGlzLnNlbGVjdCgnZmJvJyldKSk7XG5cbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbGV0IG9yaWdpbmFsRm9nOiBUSFJFRS5TY2VuZVsnZm9nJ107XG4gICAgICAgIGxldCBvcmlnaW5hbEJhY2tncm91bmQ6IFRIUkVFLlNjZW5lWydiYWNrZ3JvdW5kJ107XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoeyBzY2VuZSwgZ2wgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBmcmFtZXMsIGVudk1hcCwgZm9nIH0gPSB0aGlzLmdldCgpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVudk1hcCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhUmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAoZnJhbWVzID09PSBJbmZpbml0eSB8fCBjb3VudCA8IGZyYW1lcylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSZWYubmF0aXZlRWxlbWVudC52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxGb2cgPSBzY2VuZS5mb2c7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxCYWNrZ3JvdW5kID0gc2NlbmUuYmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICBzY2VuZS5iYWNrZ3JvdW5kID0gZW52TWFwIHx8IG9yaWdpbmFsQmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICBzY2VuZS5mb2cgPSBmb2cgfHwgb3JpZ2luYWxGb2c7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFSZWYubmF0aXZlRWxlbWVudC51cGRhdGUoZ2wsIHNjZW5lKTtcbiAgICAgICAgICAgICAgICBzY2VuZS5mb2cgPSBvcmlnaW5hbEZvZztcbiAgICAgICAgICAgICAgICBzY2VuZS5iYWNrZ3JvdW5kID0gb3JpZ2luYWxCYWNrZ3JvdW5kO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSZWYubmF0aXZlRWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -32,8 +32,8 @@ export class NgtsOrthographicCamera extends NgtsCamera {
32
32
  this.set({ left: 0, right: 0, top: 0, bottom: 0 });
33
33
  }
34
34
  }
35
- NgtsOrthographicCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsOrthographicCamera, deps: null, target: i0.ɵɵFactoryTarget.Component });
36
- NgtsOrthographicCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", 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: `
35
+ NgtsOrthographicCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsOrthographicCamera, deps: null, target: i0.ɵɵFactoryTarget.Component });
36
+ NgtsOrthographicCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", 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
37
  <ngt-orthographic-camera
38
38
  ngtCompound
39
39
  [ref]="cameraRef"
@@ -51,7 +51,7 @@ NgtsOrthographicCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
51
51
  <ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
52
52
  </ngt-group>
53
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.5", ngImport: i0, type: NgtsOrthographicCamera, decorators: [{
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsOrthographicCamera, decorators: [{
55
55
  type: Component,
56
56
  args: [{
57
57
  selector: 'ngts-orthographic-camera',
@@ -8,8 +8,8 @@ import * as i0 from "@angular/core";
8
8
  extend({ PerspectiveCamera, Group });
9
9
  export class NgtsPerspectiveCamera extends NgtsCamera {
10
10
  }
11
- NgtsPerspectiveCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsPerspectiveCamera, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
- NgtsPerspectiveCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: NgtsPerspectiveCamera, isStandalone: true, selector: "ngts-perspective-camera", queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
11
+ NgtsPerspectiveCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsPerspectiveCamera, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
+ NgtsPerspectiveCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtsPerspectiveCamera, isStandalone: true, selector: "ngts-perspective-camera", queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
13
13
  <ngt-perspective-camera [ref]="cameraRef" ngtCompound>
14
14
  <ng-container
15
15
  *ngIf="cameraContent && !cameraContent.ngtsCameraContent"
@@ -20,7 +20,7 @@ NgtsPerspectiveCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
20
20
  <ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
21
21
  </ngt-group>
22
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.5", ngImport: i0, type: NgtsPerspectiveCamera, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsPerspectiveCamera, decorators: [{
24
24
  type: Component,
25
25
  args: [{
26
26
  selector: 'ngts-perspective-camera',
@@ -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.5", ngImport: i0, type: NgtsOrbitControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
111
- NgtsOrbitControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", 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.2.0", ngImport: i0, type: NgtsOrbitControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
111
+ NgtsOrbitControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", 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.5", ngImport: i0, type: NgtsOrbitControls, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", 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.5", ngImport: i0, type: NgtsLoader, deps: null, target: i0.ɵɵFactoryTarget.Component });
73
- NgtsLoader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", 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.2.0", ngImport: i0, type: NgtsLoader, deps: null, target: i0.ɵɵFactoryTarget.Component });
73
+ NgtsLoader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", 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.5", ngImport: i0, type: NgtsLoader, decorators: [{
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", 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,4 +1,6 @@
1
1
  export * from './lib/mesh-distort-material/mesh-distort-material';
2
2
  export * from './lib/mesh-reflector-material/mesh-reflector-material';
3
+ export * from './lib/mesh-refraction-material/mesh-refraction-material';
4
+ export * from './lib/mesh-transmission-material/mesh-transmission-material';
3
5
  export * from './lib/mesh-wobble-material/mesh-wobble-material';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG4iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9tYXRlcmlhbHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyxpREFBaUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbC9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG4iXX0=
@@ -29,8 +29,8 @@ export class NgtsMeshDistortMaterial extends NgtRxStore {
29
29
  });
30
30
  }
31
31
  }
32
- NgtsMeshDistortMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsMeshDistortMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
- NgtsMeshDistortMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: NgtsMeshDistortMaterial, isStandalone: true, selector: "ngts-mesh-distort-material", inputs: { materialRef: "materialRef", time: "time", distort: "distort", radius: "radius", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
32
+ NgtsMeshDistortMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsMeshDistortMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
+ NgtsMeshDistortMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtsMeshDistortMaterial, isStandalone: true, selector: "ngts-mesh-distort-material", inputs: { materialRef: "materialRef", time: "time", distort: "distort", radius: "radius", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
34
34
  <ngt-primitive
35
35
  *args="[material]"
36
36
  [ref]="materialRef"
@@ -41,7 +41,7 @@ NgtsMeshDistortMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
41
41
  attach="material"
42
42
  />
43
43
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsMeshDistortMaterial, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsMeshDistortMaterial, decorators: [{
45
45
  type: Component,
46
46
  args: [{
47
47
  selector: 'ngts-mesh-distort-material',
@@ -234,8 +234,8 @@ export class NgtsMeshReflectorMaterial extends NgtRxStore {
234
234
  }
235
235
  }
236
236
  }
237
- NgtsMeshReflectorMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
238
- NgtsMeshReflectorMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { materialRef: "materialRef", resolution: "resolution", mixBlur: "mixBlur", mixStrength: "mixStrength", blur: "blur", mirror: "mirror", minDepthThreshold: "minDepthThreshold", maxDepthThreshold: "maxDepthThreshold", depthScale: "depthScale", depthToBlurRatioBias: "depthToBlurRatioBias", distortionMap: "distortionMap", distortion: "distortion", mixContrast: "mixContrast", reflectorOffset: "reflectorOffset" }, usesInheritance: true, ngImport: i0, template: `
237
+ NgtsMeshReflectorMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
238
+ NgtsMeshReflectorMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { materialRef: "materialRef", resolution: "resolution", mixBlur: "mixBlur", mixStrength: "mixStrength", blur: "blur", mirror: "mirror", minDepthThreshold: "minDepthThreshold", maxDepthThreshold: "maxDepthThreshold", depthScale: "depthScale", depthToBlurRatioBias: "depthToBlurRatioBias", distortionMap: "distortionMap", distortion: "distortion", mixContrast: "mixContrast", reflectorOffset: "reflectorOffset" }, usesInheritance: true, ngImport: i0, template: `
239
239
  <ngt-mesh-reflector-material
240
240
  ngtCompound
241
241
  attach="material"
@@ -261,7 +261,7 @@ NgtsMeshReflectorMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
261
261
  <ng-content />
262
262
  </ngt-mesh-reflector-material>
263
263
  `, isInline: true, dependencies: [{ kind: "pipe", type: NgtPush, name: "ngtPush" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
264
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
265
265
  type: Component,
266
266
  args: [{
267
267
  selector: 'ngts-mesh-reflector-material',
@@ -0,0 +1,157 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
3
+ import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtPush, NgtRxStore, NgtStore } from 'angular-three';
4
+ import { MeshRefractionMaterial } from 'angular-three-soba/shaders';
5
+ import { combineLatest, map } from 'rxjs';
6
+ import { MeshBVH, SAH } from 'three-mesh-bvh';
7
+ import * as i0 from "@angular/core";
8
+ extend({ MeshRefractionMaterial });
9
+ const isCubeTexture = (def) => def && def.isCubeTexture;
10
+ export class NgtsMeshRefractionMaterial extends NgtRxStore {
11
+ /** Environment map */
12
+ set envMap(envMap) {
13
+ this.set({ envMap });
14
+ }
15
+ /** Number of ray-cast bounces, it can be expensive to have too many, 2 */
16
+ set bounces(bounces) {
17
+ this.set({ bounces });
18
+ }
19
+ /** Refraction index, 2.4 */
20
+ set ior(ior) {
21
+ this.set({ ior });
22
+ }
23
+ /** Fresnel (strip light), 0 */
24
+ set fresnel(fresnel) {
25
+ this.set({ fresnel });
26
+ }
27
+ /** RGB shift intensity, can be expensive, 0 */
28
+ set aberrationStrength(aberrationStrength) {
29
+ this.set({ aberrationStrength });
30
+ }
31
+ /** Color, white */
32
+ set color(color) {
33
+ this.set({ color });
34
+ }
35
+ /** If this is on it uses fewer ray casts for the RGB shift sacrificing physical accuracy, true */
36
+ set fastChroma(fastChroma) {
37
+ this.set({ fastChroma });
38
+ }
39
+ initialize() {
40
+ super.initialize();
41
+ this.set({
42
+ aberrationStrength: 0,
43
+ fastChroma: true,
44
+ });
45
+ }
46
+ constructor() {
47
+ super();
48
+ this.materialRef = injectNgtRef();
49
+ this.defines$ = this.select('defines');
50
+ this.store = inject(NgtStore);
51
+ this.connect('defines', combineLatest([this.select('aberrationStrength'), this.select('fastChroma'), this.select('envMap')]).pipe(map(([aberrationStrength, fastChroma, envMap]) => {
52
+ const temp = {};
53
+ // Sampler2D and SamplerCube need different defines
54
+ const isCubeMap = isCubeTexture(envMap);
55
+ const w = (isCubeMap ? envMap.image[0]?.width : envMap.image.width) ?? 1024;
56
+ const cubeSize = w / 4;
57
+ const _lodMax = Math.floor(Math.log2(cubeSize));
58
+ const _cubeSize = Math.pow(2, _lodMax);
59
+ const width = 3 * Math.max(_cubeSize, 16 * 7);
60
+ const height = 4 * _cubeSize;
61
+ if (isCubeMap)
62
+ temp['ENVMAP_TYPE_CUBEM'] = '';
63
+ temp['CUBEUV_TEXEL_WIDTH'] = `${1.0 / width}`;
64
+ temp['CUBEUV_TEXEL_HEIGHT'] = `${1.0 / height}`;
65
+ temp['CUBEUV_MAX_MIP'] = `${_lodMax}.0`;
66
+ // Add defines from chromatic aberration
67
+ if (aberrationStrength > 0)
68
+ temp['CHROMATIC_ABERRATIONS'] = '';
69
+ if (fastChroma)
70
+ temp['FAST_CHROMA'] = '';
71
+ return temp;
72
+ })));
73
+ this.connect('resolution', this.store.select('size').pipe(map((size) => [size.width, size.height])));
74
+ injectBeforeRender(({ camera }) => {
75
+ if (this.materialRef.nativeElement) {
76
+ this.materialRef.nativeElement.viewMatrixInverse = camera.matrixWorld;
77
+ this.materialRef.nativeElement.projectionMatrixInverse = camera.projectionMatrixInverse;
78
+ }
79
+ });
80
+ }
81
+ ngOnInit() {
82
+ this.setupGeometry();
83
+ }
84
+ setupGeometry() {
85
+ this.hold(this.materialRef.$, (material) => {
86
+ const geometry = getLocalState(material).parent?.geometry;
87
+ if (geometry) {
88
+ material.bvh.updateFrom(new MeshBVH(geometry.toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
89
+ }
90
+ });
91
+ }
92
+ }
93
+ NgtsMeshRefractionMaterial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsMeshRefractionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component });
94
+ NgtsMeshRefractionMaterial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtsMeshRefractionMaterial, isStandalone: true, selector: "ngts-mesh-refraction-material", inputs: { materialRef: "materialRef", envMap: "envMap", bounces: "bounces", ior: "ior", fresnel: "fresnel", aberrationStrength: "aberrationStrength", color: "color", fastChroma: "fastChroma" }, usesInheritance: true, ngImport: i0, template: `
95
+ <ngt-mesh-refraction-material
96
+ *ngIf="defines$ | ngtPush as defines"
97
+ [ref]="materialRef"
98
+ [defines]="defines"
99
+ [resolution]="get('resolution')"
100
+ [aberrationStrength]="get('aberrationStrength')"
101
+ [envMap]="get('envMap')"
102
+ [bounces]="get('bounces')"
103
+ [ior]="get('ior')"
104
+ [fresnel]="get('fresnel')"
105
+ [color]="get('color')"
106
+ [fastChroma]="get('fastChroma')"
107
+ ngtCompound
108
+ attach="material"
109
+ >
110
+ <ng-content />
111
+ </ngt-mesh-refraction-material>
112
+ `, isInline: true, dependencies: [{ kind: "pipe", type: NgtPush, name: "ngtPush" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtsMeshRefractionMaterial, decorators: [{
114
+ type: Component,
115
+ args: [{
116
+ selector: 'ngts-mesh-refraction-material',
117
+ standalone: true,
118
+ template: `
119
+ <ngt-mesh-refraction-material
120
+ *ngIf="defines$ | ngtPush as defines"
121
+ [ref]="materialRef"
122
+ [defines]="defines"
123
+ [resolution]="get('resolution')"
124
+ [aberrationStrength]="get('aberrationStrength')"
125
+ [envMap]="get('envMap')"
126
+ [bounces]="get('bounces')"
127
+ [ior]="get('ior')"
128
+ [fresnel]="get('fresnel')"
129
+ [color]="get('color')"
130
+ [fastChroma]="get('fastChroma')"
131
+ ngtCompound
132
+ attach="material"
133
+ >
134
+ <ng-content />
135
+ </ngt-mesh-refraction-material>
136
+ `,
137
+ imports: [NgtPush, NgIf],
138
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
139
+ }]
140
+ }], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
141
+ type: Input
142
+ }], envMap: [{
143
+ type: Input
144
+ }], bounces: [{
145
+ type: Input
146
+ }], ior: [{
147
+ type: Input
148
+ }], fresnel: [{
149
+ type: Input
150
+ }], aberrationStrength: [{
151
+ type: Input
152
+ }], color: [{
153
+ type: Input
154
+ }], fastChroma: [{
155
+ type: Input
156
+ }] } });
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvbWF0ZXJpYWxzL3NyYy9saWIvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU5QyxNQUFNLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7QUFFbkMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFzQyxFQUE0QixFQUFFLENBQ3ZGLEdBQUcsSUFBSyxHQUF5QixDQUFDLGFBQWEsQ0FBQztBQTJCcEQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLFVBQVU7SUFFdEQsc0JBQXNCO0lBQ3RCLElBQWEsTUFBTSxDQUFDLE1BQXlDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCwwRUFBMEU7SUFDMUUsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMs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QUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7WUFDMUQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1QsUUFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUM1QixJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQVMsQ0FBQyxDQUN4RixDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O3VIQTVGUSwwQkFBMEI7MkdBQTFCLDBCQUEwQixrVEF0QnpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FrQlQsdURBQ1MsT0FBTyxnREFBRSxJQUFJOzJGQUdkLDBCQUEwQjtrQkF6QnRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLCtCQUErQjtvQkFDekMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0JUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFFWSxXQUFXO3NCQUFuQixLQUFLO2dCQUVPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGluamVjdCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBnZXRMb2NhbFN0YXRlLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgTmd0UHVzaCwgTmd0UnhTdG9yZSwgTmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lc2hCVkgsIFNBSCB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJztcblxuZXh0ZW5kKHsgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbCB9KTtcblxuY29uc3QgaXNDdWJlVGV4dHVyZSA9IChkZWY6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSk6IGRlZiBpcyBUSFJFRS5DdWJlVGV4dHVyZSA9PlxuICAgIGRlZiAmJiAoZGVmIGFzIFRIUkVFLkN1YmVUZXh0dXJlKS5pc0N1YmVUZXh0dXJlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsXG4gICAgICAgICAgICAqbmdJZj1cImRlZmluZXMkIHwgbmd0UHVzaCBhcyBkZWZpbmVzXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW2RlZmluZXNdPVwiZGVmaW5lc1wiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJnZXQoJ3Jlc29sdXRpb24nKVwiXG4gICAgICAgICAgICBbYWJlcnJhdGlvblN0cmVuZ3RoXT1cImdldCgnYWJlcnJhdGlvblN0cmVuZ3RoJylcIlxuICAgICAgICAgICAgW2Vudk1hcF09XCJnZXQoJ2Vudk1hcCcpXCJcbiAgICAgICAgICAgIFtib3VuY2VzXT1cImdldCgnYm91bmNlcycpXCJcbiAgICAgICAgICAgIFtpb3JdPVwiZ2V0KCdpb3InKVwiXG4gICAgICAgICAgICBbZnJlc25lbF09XCJnZXQoJ2ZyZXNuZWwnKVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiZ2V0KCdjb2xvcicpXCJcbiAgICAgICAgICAgIFtmYXN0Q2hyb21hXT1cImdldCgnZmFzdENocm9tYScpXCJcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RQdXNoLCBOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIGV4dGVuZHMgTmd0UnhTdG9yZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgbWF0ZXJpYWxSZWYgPSBpbmplY3ROZ3RSZWY8dHlwZW9mIE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwucHJvdG90eXBlPigpO1xuICAgIC8qKiBFbnZpcm9ubWVudCBtYXAgKi9cbiAgICBASW5wdXQoKSBzZXQgZW52TWFwKGVudk1hcDogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZW52TWFwIH0pO1xuICAgIH1cbiAgICAvKiogTnVtYmVyIG9mIHJheS1jYXN0IGJvdW5jZXMsIGl0IGNhbiBiZSBleHBlbnNpdmUgdG8gaGF2ZSB0b28gbWFueSwgMiAqL1xuICAgIEBJbnB1dCgpIHNldCBib3VuY2VzKGJvdW5jZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGJvdW5jZXMgfSk7XG4gICAgfVxuICAgIC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cbiAgICBASW5wdXQoKSBzZXQgaW9yKGlvcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaW9yIH0pO1xuICAgIH1cbiAgICAvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG4gICAgQElucHV0KCkgc2V0IGZyZXNuZWwoZnJlc25lbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZnJlc25lbCB9KTtcbiAgICB9XG4gICAgLyoqIFJHQiBzaGlmdCBpbnRlbnNpdHksIGNhbiBiZSBleHBlbnNpdmUsIDAgKi9cbiAgICBASW5wdXQoKSBzZXQgYWJlcnJhdGlvblN0cmVuZ3RoKGFiZXJyYXRpb25TdHJlbmd0aDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWJlcnJhdGlvblN0cmVuZ3RoIH0pO1xuICAgIH1cbiAgICAvKiogQ29sb3IsIHdoaXRlICovXG4gICAgQElucHV0KCkgc2V0IGNvbG9yKGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY29sb3IgfSk7XG4gICAgfVxuICAgIC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG4gICAgQElucHV0KCkgc2V0IGZhc3RDaHJvbWEoZmFzdENocm9tYTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGZhc3RDaHJvbWEgfSk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgZGVmaW5lcyQgPSB0aGlzLnNlbGVjdCgnZGVmaW5lcycpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGFiZXJyYXRpb25TdHJlbmd0aDogMCxcbiAgICAgICAgICAgIGZhc3RDaHJvbWE6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnZGVmaW5lcycsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlbGVjdCgnYWJlcnJhdGlvblN0cmVuZ3RoJyksIHRoaXMuc2VsZWN0KCdmYXN0Q2hyb21hJyksIHRoaXMuc2VsZWN0KCdlbnZNYXAnKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbYWJlcnJhdGlvblN0cmVuZ3RoLCBmYXN0Q2hyb21hLCBlbnZNYXBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBTYW1wbGVyMkQgYW5kIFNhbXBsZXJDdWJlIG5lZWQgZGlmZmVyZW50IGRlZmluZXNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDdWJlTWFwID0gaXNDdWJlVGV4dHVyZShlbnZNYXApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3ID0gKGlzQ3ViZU1hcCA/IGVudk1hcC5pbWFnZVswXT8ud2lkdGggOiBlbnZNYXAuaW1hZ2Uud2lkdGgpID8/IDEwMjQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9sb2RNYXggPSBNYXRoLmZsb29yKE1hdGgubG9nMihjdWJlU2l6ZSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfY3ViZVNpemUgPSBNYXRoLnBvdygyLCBfbG9kTWF4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSA0ICogX2N1YmVTaXplO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdWJlTWFwKSB0ZW1wWydFTlZNQVBfVFlQRV9DVUJFTSddID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBbJ0NVQkVVVl9URVhFTF9XSURUSCddID0gYCR7MS4wIC8gd2lkdGh9YDtcbiAgICAgICAgICAgICAgICAgICAgdGVtcFsnQ1VCRVVWX1RFWEVMX0hFSUdIVCddID0gYCR7MS4wIC8gaGVpZ2h0fWA7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBbJ0NVQkVVVl9NQVhfTUlQJ10gPSBgJHtfbG9kTWF4fS4wYDtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAoYWJlcnJhdGlvblN0cmVuZ3RoID4gMCkgdGVtcFsnQ0hST01BVElDX0FCRVJSQVRJT05TJ10gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZhc3RDaHJvbWEpIHRlbXBbJ0ZBU1RfQ0hST01BJ10gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb25uZWN0KCdyZXNvbHV0aW9uJywgdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKS5waXBlKG1hcCgoc2l6ZSkgPT4gW3NpemUud2lkdGgsIHNpemUuaGVpZ2h0XSkpKTtcblxuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50IGFzIGFueSkhLnZpZXdNYXRyaXhJbnZlcnNlID0gY2FtZXJhLm1hdHJpeFdvcmxkO1xuICAgICAgICAgICAgICAgICh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQgYXMgYW55KSEucHJvamVjdGlvbk1hdHJpeEludmVyc2UgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldHVwR2VvbWV0cnkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwR2VvbWV0cnkoKSB7XG4gICAgICAgIHRoaXMuaG9sZCh0aGlzLm1hdGVyaWFsUmVmLiQsIChtYXRlcmlhbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBnZXRMb2NhbFN0YXRlKG1hdGVyaWFsKS5wYXJlbnQ/Lmdlb21ldHJ5O1xuICAgICAgICAgICAgaWYgKGdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgKG1hdGVyaWFsIGFzIGFueSkuYnZoLnVwZGF0ZUZyb20oXG4gICAgICAgICAgICAgICAgICAgIG5ldyBNZXNoQlZIKGdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpLCB7IGxhenlHZW5lcmF0aW9uOiBmYWxzZSwgc3RyYXRlZ3k6IFNBSCB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=