angular-three-soba 1.0.2 → 1.2.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 (101) hide show
  1. package/esm2020/controls/lib/orbit-controls/orbit-controls.mjs +3 -3
  2. package/esm2020/loaders/index.mjs +4 -1
  3. package/esm2020/loaders/lib/loader/loader.mjs +133 -0
  4. package/esm2020/loaders/lib/progress/progress.mjs +39 -0
  5. package/esm2020/loaders/lib/texture-loader/texture-loader.mjs +19 -0
  6. package/esm2020/misc/angular-three-soba-misc.mjs +5 -0
  7. package/esm2020/misc/index.mjs +2 -0
  8. package/esm2020/misc/lib/bake-shadows/bake-shadows.mjs +25 -0
  9. package/esm2020/performance/angular-three-soba-performance.mjs +5 -0
  10. package/esm2020/performance/index.mjs +5 -0
  11. package/esm2020/performance/lib/adaptive/adaptive-dpr.mjs +46 -0
  12. package/esm2020/performance/lib/adaptive/adaptive-events.mjs +36 -0
  13. package/esm2020/performance/lib/detailed/detailed.mjs +50 -0
  14. package/esm2020/performance/lib/stats/stats.mjs +63 -0
  15. package/esm2020/shaders/angular-three-soba-shaders.mjs +5 -0
  16. package/esm2020/shaders/index.mjs +2 -0
  17. package/esm2020/shaders/lib/shader-material/shader-material.mjs +34 -0
  18. package/esm2020/staging/angular-three-soba-staging.mjs +5 -0
  19. package/esm2020/staging/index.mjs +13 -0
  20. package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +276 -0
  21. package/esm2020/staging/lib/accumulative-shadows/progressive-light-map.mjs +109 -0
  22. package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +196 -0
  23. package/esm2020/staging/lib/bounds/bounds.mjs +283 -0
  24. package/esm2020/staging/lib/center/center.mjs +142 -0
  25. package/esm2020/staging/lib/contact-shadows/contact-shadows.mjs +227 -0
  26. package/esm2020/staging/lib/environment/assets.mjs +13 -0
  27. package/esm2020/staging/lib/environment/environment-cube.mjs +40 -0
  28. package/esm2020/staging/lib/environment/environment-ground.mjs +66 -0
  29. package/esm2020/staging/lib/environment/environment-inputs.mjs +86 -0
  30. package/esm2020/staging/lib/environment/environment-map.mjs +38 -0
  31. package/esm2020/staging/lib/environment/environment-portal.mjs +110 -0
  32. package/esm2020/staging/lib/environment/environment.mjs +163 -0
  33. package/esm2020/staging/lib/environment/utils.mjs +70 -0
  34. package/esm2020/staging/lib/float/float.mjs +76 -0
  35. package/esm2020/staging/lib/sky/sky.mjs +111 -0
  36. package/esm2020/staging/lib/sparkles/sparkles.mjs +209 -0
  37. package/esm2020/staging/lib/stage/stage.mjs +369 -0
  38. package/esm2020/staging/lib/stars/stars.mjs +171 -0
  39. package/fesm2015/angular-three-soba-controls.mjs +3 -3
  40. package/fesm2015/angular-three-soba-loaders.mjs +187 -3
  41. package/fesm2015/angular-three-soba-loaders.mjs.map +1 -1
  42. package/fesm2015/angular-three-soba-misc.mjs +32 -0
  43. package/fesm2015/angular-three-soba-misc.mjs.map +1 -0
  44. package/fesm2015/angular-three-soba-performance.mjs +191 -0
  45. package/fesm2015/angular-three-soba-performance.mjs.map +1 -0
  46. package/fesm2015/angular-three-soba-shaders.mjs +38 -0
  47. package/fesm2015/angular-three-soba-shaders.mjs.map +1 -0
  48. package/fesm2015/angular-three-soba-staging.mjs +2647 -0
  49. package/fesm2015/angular-three-soba-staging.mjs.map +1 -0
  50. package/fesm2020/angular-three-soba-controls.mjs +3 -3
  51. package/fesm2020/angular-three-soba-loaders.mjs +186 -3
  52. package/fesm2020/angular-three-soba-loaders.mjs.map +1 -1
  53. package/fesm2020/angular-three-soba-misc.mjs +32 -0
  54. package/fesm2020/angular-three-soba-misc.mjs.map +1 -0
  55. package/fesm2020/angular-three-soba-performance.mjs +191 -0
  56. package/fesm2020/angular-three-soba-performance.mjs.map +1 -0
  57. package/fesm2020/angular-three-soba-shaders.mjs +41 -0
  58. package/fesm2020/angular-three-soba-shaders.mjs.map +1 -0
  59. package/fesm2020/angular-three-soba-staging.mjs +2654 -0
  60. package/fesm2020/angular-three-soba-staging.mjs.map +1 -0
  61. package/loaders/index.d.ts +3 -0
  62. package/loaders/lib/loader/loader.d.ts +26 -0
  63. package/loaders/lib/progress/progress.d.ts +16 -0
  64. package/loaders/lib/texture-loader/texture-loader.d.ts +5 -0
  65. package/misc/README.md +3 -0
  66. package/misc/index.d.ts +1 -0
  67. package/misc/lib/bake-shadows/bake-shadows.d.ts +9 -0
  68. package/package.json +37 -2
  69. package/performance/README.md +3 -0
  70. package/performance/index.d.ts +4 -0
  71. package/performance/lib/adaptive/adaptive-dpr.d.ts +11 -0
  72. package/performance/lib/adaptive/adaptive-events.d.ts +10 -0
  73. package/performance/lib/detailed/detailed.d.ts +12 -0
  74. package/performance/lib/stats/stats.d.ts +14 -0
  75. package/plugin/package.json +1 -1
  76. package/plugin/src/generators/init/init.js +13 -17
  77. package/plugin/src/generators/init/init.js.map +1 -1
  78. package/shaders/README.md +3 -0
  79. package/shaders/index.d.ts +1 -0
  80. package/shaders/lib/shader-material/shader-material.d.ts +6 -0
  81. package/staging/README.md +3 -0
  82. package/staging/index.d.ts +12 -0
  83. package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +64 -0
  84. package/staging/lib/accumulative-shadows/progressive-light-map.d.ts +34 -0
  85. package/staging/lib/accumulative-shadows/randomized-lights.d.ts +42 -0
  86. package/staging/lib/bounds/bounds.d.ts +48 -0
  87. package/staging/lib/center/center.d.ts +40 -0
  88. package/staging/lib/contact-shadows/contact-shadows.d.ts +29 -0
  89. package/staging/lib/environment/assets.d.ts +13 -0
  90. package/staging/lib/environment/environment-cube.d.ts +11 -0
  91. package/staging/lib/environment/environment-ground.d.ts +9 -0
  92. package/staging/lib/environment/environment-inputs.d.ts +28 -0
  93. package/staging/lib/environment/environment-map.d.ts +10 -0
  94. package/staging/lib/environment/environment-portal.d.ts +15 -0
  95. package/staging/lib/environment/environment.d.ts +12 -0
  96. package/staging/lib/environment/utils.d.ts +8 -0
  97. package/staging/lib/float/float.d.ts +16 -0
  98. package/staging/lib/sky/sky.d.ts +21 -0
  99. package/staging/lib/sparkles/sparkles.d.ts +29 -0
  100. package/staging/lib/stage/stage.d.ts +87 -0
  101. package/staging/lib/stars/stars.d.ts +20 -0
@@ -1,8 +1,12 @@
1
- import { injectNgtLoader } from 'angular-three';
2
- import { take } from 'rxjs';
1
+ import { injectNgtLoader, NgtRxStore, injectNgtDestroy, startWithUndefined, NgtPush, NgtStore } from 'angular-three';
2
+ import { take, combineLatest, map, withLatestFrom, switchMap, timer, of, tap } from 'rxjs';
3
3
  import { MeshoptDecoder } from 'three-stdlib';
4
4
  import { DRACOLoader } from 'three-stdlib/loaders/DRACOLoader';
5
5
  import { GLTFLoader } from 'three-stdlib/loaders/GLTFLoader';
6
+ import { NgIf, AsyncPipe } from '@angular/common';
7
+ import * as i0 from '@angular/core';
8
+ import { Component, ChangeDetectionStrategy, Input, ViewChild, inject } from '@angular/core';
9
+ import * as THREE from 'three';
6
10
 
7
11
  let dracoLoader = null;
8
12
  function _extensions(useDraco, useMeshOpt, extensions) {
@@ -30,9 +34,189 @@ injectGLTFLoader.preload = (path, useDraco = true, useMeshOpt = true, extensions
30
34
  };
31
35
  const injectNgtsGLTFLoader = injectGLTFLoader;
32
36
 
37
+ function injectNgtsProgress() {
38
+ const progress = new NgtRxStore();
39
+ progress.set({ errors: [], active: false, progress: 0, item: '', loaded: 0, total: 0 });
40
+ const { cdr } = injectNgtDestroy(() => progress.ngOnDestroy());
41
+ let saveLastTotalLoaded = 0;
42
+ THREE.DefaultLoadingManager.onStart = (item, loaded, total) => {
43
+ progress.set({
44
+ active: true,
45
+ item,
46
+ loaded,
47
+ total,
48
+ progress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100,
49
+ });
50
+ cdr.detectChanges();
51
+ };
52
+ THREE.DefaultLoadingManager.onLoad = () => {
53
+ progress.set({ active: false });
54
+ cdr.detectChanges();
55
+ };
56
+ THREE.DefaultLoadingManager.onError = (url) => {
57
+ progress.set({ errors: [...progress.get('errors'), url] });
58
+ cdr.detectChanges();
59
+ };
60
+ THREE.DefaultLoadingManager.onProgress = (item, loaded, total) => {
61
+ if (loaded === total)
62
+ saveLastTotalLoaded = total;
63
+ progress.set({
64
+ item,
65
+ loaded,
66
+ total,
67
+ progress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100 || 100,
68
+ });
69
+ cdr.detectChanges();
70
+ };
71
+ return progress;
72
+ }
73
+
74
+ const defaultDataInterpolation = (p) => `Loading ${p.toFixed(2)}%`;
75
+ class NgtsLoader extends NgtRxStore {
76
+ constructor() {
77
+ super(...arguments);
78
+ this.progress = injectNgtsProgress();
79
+ this.vm$ = combineLatest([
80
+ this.select('shown'),
81
+ this.select('containerClass').pipe(startWithUndefined()),
82
+ this.select('innerClass').pipe(startWithUndefined()),
83
+ this.select('barClass').pipe(startWithUndefined()),
84
+ this.select('dataClass').pipe(startWithUndefined()),
85
+ this.progress.select('progress'),
86
+ this.progress.select('active'),
87
+ ]).pipe(map(([shown, containerClass, innerClass, barClass, dataClass, progress, active]) => {
88
+ return { shown, containerClass, innerClass, barClass, dataClass, progress, active };
89
+ }));
90
+ }
91
+ set containerClass(containerClass) {
92
+ this.set({ containerClass });
93
+ }
94
+ set innerClass(innerClass) {
95
+ this.set({ innerClass });
96
+ }
97
+ set barClass(barClass) {
98
+ this.set({ barClass });
99
+ }
100
+ set dataClass(dataClass) {
101
+ this.set({ dataClass });
102
+ }
103
+ set dataInterpolation(dataInterpolation) {
104
+ this.set({ dataInterpolation });
105
+ }
106
+ set initialState(initialState) {
107
+ this.set({ initialState });
108
+ }
109
+ initialize() {
110
+ super.initialize();
111
+ this.set({ dataInterpolation: defaultDataInterpolation, initialState: (active) => active });
112
+ }
113
+ ngOnInit() {
114
+ this.set({ shown: this.get('initialState')(this.progress.get('active')) });
115
+ this.connect('shown', this.progress.select('active').pipe(withLatestFrom(this.select('shown')), switchMap(([active, shown]) => {
116
+ if (shown !== active)
117
+ return timer(300).pipe(map(() => active));
118
+ return of(shown);
119
+ })));
120
+ let progressRef = 0;
121
+ let rafId;
122
+ this.effect(combineLatest([this.select('dataInterpolation'), this.progress.select('progress')]), ([dataInterpolation, progress]) => {
123
+ const updateProgress = () => {
124
+ var _a;
125
+ if (!((_a = this.progressSpanRef) === null || _a === void 0 ? void 0 : _a.nativeElement))
126
+ return;
127
+ progressRef += (progress - progressRef) / 2;
128
+ if (progressRef > 0.95 * progress || progress === 100)
129
+ progressRef = progress;
130
+ this.progressSpanRef.nativeElement.innerText = dataInterpolation(progressRef);
131
+ if (progressRef < progress) {
132
+ rafId = requestAnimationFrame(updateProgress);
133
+ }
134
+ };
135
+ updateProgress();
136
+ return () => cancelAnimationFrame(rafId);
137
+ });
138
+ }
139
+ }
140
+ NgtsLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLoader, deps: null, target: i0.ɵɵFactoryTarget.Component });
141
+ 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: `
142
+ <ng-container *ngIf="vm$ | ngtPush as vm">
143
+ <div
144
+ *ngIf="vm.shown"
145
+ class="ngts-loader-container"
146
+ [class]="vm.containerClass"
147
+ [style.--ngts-loader-container-opacity]="vm.active ? 1 : 0"
148
+ >
149
+ <div>
150
+ <div class="ngts-loader-inner" [class]="vm.innerClass">
151
+ <div
152
+ class="ngts-loader-bar"
153
+ [class]="vm.barClass"
154
+ [style.--ngts-loader-bar-scale]="vm.progress / 100"
155
+ ></div>
156
+ <span #progressSpanRef class="ngts-loader-data" [class]="vm.dataClass"></span>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </ng-container>
161
+ `, 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 });
162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLoader, decorators: [{
163
+ type: Component,
164
+ args: [{ selector: 'ngts-loader', standalone: true, template: `
165
+ <ng-container *ngIf="vm$ | ngtPush as vm">
166
+ <div
167
+ *ngIf="vm.shown"
168
+ class="ngts-loader-container"
169
+ [class]="vm.containerClass"
170
+ [style.--ngts-loader-container-opacity]="vm.active ? 1 : 0"
171
+ >
172
+ <div>
173
+ <div class="ngts-loader-inner" [class]="vm.innerClass">
174
+ <div
175
+ class="ngts-loader-bar"
176
+ [class]="vm.barClass"
177
+ [style.--ngts-loader-bar-scale]="vm.progress / 100"
178
+ ></div>
179
+ <span #progressSpanRef class="ngts-loader-data" [class]="vm.dataClass"></span>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </ng-container>
184
+ `, imports: [NgIf, AsyncPipe, NgtPush], changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
185
+ }], propDecorators: { containerClass: [{
186
+ type: Input
187
+ }], innerClass: [{
188
+ type: Input
189
+ }], barClass: [{
190
+ type: Input
191
+ }], dataClass: [{
192
+ type: Input
193
+ }], dataInterpolation: [{
194
+ type: Input
195
+ }], initialState: [{
196
+ type: Input
197
+ }], progressSpanRef: [{
198
+ type: ViewChild,
199
+ args: ['progressSpanRef']
200
+ }] } });
201
+
202
+ const IsObject = (url) => url === Object(url) && !Array.isArray(url) && typeof url !== 'function';
203
+ function injectNgtsTextureLoader(input, onLoad) {
204
+ const store = inject(NgtStore);
205
+ return injectNgtLoader(() => THREE.TextureLoader, input).pipe(tap((textures) => {
206
+ const array = Array.isArray(textures)
207
+ ? textures
208
+ : textures instanceof THREE.Texture
209
+ ? [textures]
210
+ : Object.values(textures);
211
+ if (onLoad)
212
+ onLoad(array);
213
+ array.forEach(store.get('gl').initTexture);
214
+ }));
215
+ }
216
+
33
217
  /**
34
218
  * Generated bundle index. Do not edit.
35
219
  */
36
220
 
37
- export { injectNgtsGLTFLoader };
221
+ export { IsObject, NgtsLoader, injectNgtsGLTFLoader, injectNgtsProgress, injectNgtsTextureLoader };
38
222
  //# sourceMappingURL=angular-three-soba-loaders.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-soba-loaders.mjs","sources":["../../../../libs/angular-three-soba/loaders/src/lib/gltf-loader/gltf-loader.ts","../../../../libs/angular-three-soba/loaders/src/angular-three-soba-loaders.ts"],"sourcesContent":["import { injectNgtLoader, NgtLoaderResults, NgtObjectMap } from 'angular-three';\nimport { Observable, take } from 'rxjs';\n// @ts-ignore\nimport { MeshoptDecoder } from 'three-stdlib';\nimport { DRACOLoader } from 'three-stdlib/loaders/DRACOLoader';\nimport { GLTF, GLTFLoader } from 'three-stdlib/loaders/GLTFLoader';\n\nlet dracoLoader: DRACOLoader | null = null;\n\nfunction _extensions(useDraco: boolean | string, useMeshOpt: boolean, extensions?: (loader: GLTFLoader) => void) {\n return (loader: THREE.Loader) => {\n if (extensions) {\n extensions(loader as GLTFLoader);\n }\n\n if (useDraco) {\n if (!dracoLoader) {\n dracoLoader = new DRACOLoader();\n }\n\n dracoLoader.setDecoderPath(\n typeof useDraco === 'string' ? useDraco : 'https://www.gstatic.com/draco/versioned/decoders/1.4.3/'\n );\n (loader as GLTFLoader).setDRACOLoader(dracoLoader);\n }\n\n if (useMeshOpt) {\n (loader as GLTFLoader).setMeshoptDecoder(\n typeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder\n );\n }\n };\n}\n\nexport interface NgtsGLTFLoader {\n <TInput extends string | string[] | Record<string, string>>(\n path: TInput | Observable<TInput>,\n useDraco?: boolean | string,\n useMeshOpt?: boolean,\n extensions?: (loader: GLTFLoader) => void\n ): Observable<NgtLoaderResults<TInput, GLTF & NgtObjectMap>>;\n preload: <TInput extends string | string[] | Record<string, string>>(\n path: TInput | Observable<TInput>,\n useDraco?: boolean | string,\n useMeshOpt?: boolean,\n extensions?: (loader: GLTFLoader) => void\n ) => void;\n}\n\nfunction injectGLTFLoader<TInput extends string | string[] | Record<string, string>>(\n path: TInput | Observable<TInput>,\n useDraco: boolean | string = true,\n useMeshOpt = true,\n extensions?: (loader: GLTFLoader) => void\n): Observable<NgtLoaderResults<TInput, GLTF & NgtObjectMap>> {\n return injectNgtLoader(() => GLTFLoader, path, _extensions(useDraco, useMeshOpt, extensions)) as Observable<\n NgtLoaderResults<TInput, GLTF & NgtObjectMap>\n >;\n}\n\n(injectGLTFLoader as NgtsGLTFLoader).preload = (path, useDraco = true, useMeshOpt = true, extensions) => {\n injectGLTFLoader(path, useDraco, useMeshOpt, extensions).pipe(take(1)).subscribe();\n};\n\nexport const injectNgtsGLTFLoader = injectGLTFLoader as NgtsGLTFLoader;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAOA,IAAI,WAAW,GAAuB,IAAI,CAAC;AAE3C,SAAS,WAAW,CAAC,QAA0B,EAAE,UAAmB,EAAE,UAAyC,EAAA;IAC3G,OAAO,CAAC,MAAoB,KAAI;AAC5B,QAAA,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,MAAoB,CAAC,CAAC;AACpC,SAAA;AAED,QAAA,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,WAAW,EAAE;AACd,gBAAA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACnC,aAAA;AAED,YAAA,WAAW,CAAC,cAAc,CACtB,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,yDAAyD,CACtG,CAAC;AACD,YAAA,MAAqB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACtD,SAAA;AAED,QAAA,IAAI,UAAU,EAAE;AACX,YAAA,MAAqB,CAAC,iBAAiB,CACpC,OAAO,cAAc,KAAK,UAAU,GAAG,cAAc,EAAE,GAAG,cAAc,CAC3E,CAAC;AACL,SAAA;AACL,KAAC,CAAC;AACN,CAAC;AAiBD,SAAS,gBAAgB,CACrB,IAAiC,EACjC,QAAA,GAA6B,IAAI,EACjC,UAAU,GAAG,IAAI,EACjB,UAAyC,EAAA;AAEzC,IAAA,OAAO,eAAe,CAAC,MAAM,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAE3F,CAAC;AACN,CAAC;AAEA,gBAAmC,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,UAAU,KAAI;IACpG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACvF,CAAC,CAAC;AAEK,MAAM,oBAAoB,GAAG;;AChEpC;;AAEG;;;;"}
1
+ {"version":3,"file":"angular-three-soba-loaders.mjs","sources":["../../../../libs/angular-three-soba/loaders/src/lib/gltf-loader/gltf-loader.ts","../../../../libs/angular-three-soba/loaders/src/lib/progress/progress.ts","../../../../libs/angular-three-soba/loaders/src/lib/loader/loader.ts","../../../../libs/angular-three-soba/loaders/src/lib/texture-loader/texture-loader.ts","../../../../libs/angular-three-soba/loaders/src/angular-three-soba-loaders.ts"],"sourcesContent":["import { injectNgtLoader, NgtLoaderResults, NgtObjectMap } from 'angular-three';\nimport { Observable, take } from 'rxjs';\n// @ts-ignore\nimport { MeshoptDecoder } from 'three-stdlib';\nimport { DRACOLoader } from 'three-stdlib/loaders/DRACOLoader';\nimport { GLTF, GLTFLoader } from 'three-stdlib/loaders/GLTFLoader';\n\nlet dracoLoader: DRACOLoader | null = null;\n\nfunction _extensions(useDraco: boolean | string, useMeshOpt: boolean, extensions?: (loader: GLTFLoader) => void) {\n return (loader: THREE.Loader) => {\n if (extensions) {\n extensions(loader as GLTFLoader);\n }\n\n if (useDraco) {\n if (!dracoLoader) {\n dracoLoader = new DRACOLoader();\n }\n\n dracoLoader.setDecoderPath(\n typeof useDraco === 'string' ? useDraco : 'https://www.gstatic.com/draco/versioned/decoders/1.4.3/'\n );\n (loader as GLTFLoader).setDRACOLoader(dracoLoader);\n }\n\n if (useMeshOpt) {\n (loader as GLTFLoader).setMeshoptDecoder(\n typeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder\n );\n }\n };\n}\n\nexport interface NgtsGLTFLoader {\n <TInput extends string | string[] | Record<string, string>>(\n path: TInput | Observable<TInput>,\n useDraco?: boolean | string,\n useMeshOpt?: boolean,\n extensions?: (loader: GLTFLoader) => void\n ): Observable<NgtLoaderResults<TInput, GLTF & NgtObjectMap>>;\n preload: <TInput extends string | string[] | Record<string, string>>(\n path: TInput | Observable<TInput>,\n useDraco?: boolean | string,\n useMeshOpt?: boolean,\n extensions?: (loader: GLTFLoader) => void\n ) => void;\n}\n\nfunction injectGLTFLoader<TInput extends string | string[] | Record<string, string>>(\n path: TInput | Observable<TInput>,\n useDraco: boolean | string = true,\n useMeshOpt = true,\n extensions?: (loader: GLTFLoader) => void\n): Observable<NgtLoaderResults<TInput, GLTF & NgtObjectMap>> {\n return injectNgtLoader(() => GLTFLoader, path, _extensions(useDraco, useMeshOpt, extensions)) as Observable<\n NgtLoaderResults<TInput, GLTF & NgtObjectMap>\n >;\n}\n\n(injectGLTFLoader as NgtsGLTFLoader).preload = (path, useDraco = true, useMeshOpt = true, extensions) => {\n injectGLTFLoader(path, useDraco, useMeshOpt, extensions).pipe(take(1)).subscribe();\n};\n\nexport const injectNgtsGLTFLoader = injectGLTFLoader as NgtsGLTFLoader;\n","import { injectNgtDestroy, NgtRxStore } from 'angular-three';\nimport * as THREE from 'three';\n\nexport function injectNgtsProgress() {\n const progress = new NgtRxStore<{\n errors: string[];\n active: boolean;\n progress: number;\n item: string;\n loaded: number;\n total: number;\n }>();\n progress.set({ errors: [], active: false, progress: 0, item: '', loaded: 0, total: 0 });\n const { cdr } = injectNgtDestroy(() => progress.ngOnDestroy());\n let saveLastTotalLoaded = 0;\n\n THREE.DefaultLoadingManager.onStart = (item, loaded, total) => {\n progress.set({\n active: true,\n item,\n loaded,\n total,\n progress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100,\n });\n cdr.detectChanges();\n };\n\n THREE.DefaultLoadingManager.onLoad = () => {\n progress.set({ active: false });\n cdr.detectChanges();\n };\n\n THREE.DefaultLoadingManager.onError = (url) => {\n progress.set({ errors: [...progress.get('errors'), url] });\n cdr.detectChanges();\n };\n\n THREE.DefaultLoadingManager.onProgress = (item, loaded, total) => {\n if (loaded === total) saveLastTotalLoaded = total;\n progress.set({\n item,\n loaded,\n total,\n progress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100 || 100,\n });\n cdr.detectChanges();\n };\n\n return progress;\n}\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { NgtPush, NgtRxStore, startWithUndefined } from 'angular-three';\nimport { combineLatest, map, of, switchMap, timer, withLatestFrom } from 'rxjs';\nimport { injectNgtsProgress } from '../progress/progress';\n\nconst defaultDataInterpolation = (p: number) => `Loading ${p.toFixed(2)}%`;\n\n@Component({\n selector: 'ngts-loader',\n standalone: true,\n template: `\n <ng-container *ngIf=\"vm$ | ngtPush as vm\">\n <div\n *ngIf=\"vm.shown\"\n class=\"ngts-loader-container\"\n [class]=\"vm.containerClass\"\n [style.--ngts-loader-container-opacity]=\"vm.active ? 1 : 0\"\n >\n <div>\n <div class=\"ngts-loader-inner\" [class]=\"vm.innerClass\">\n <div\n class=\"ngts-loader-bar\"\n [class]=\"vm.barClass\"\n [style.--ngts-loader-bar-scale]=\"vm.progress / 100\"\n ></div>\n <span #progressSpanRef class=\"ngts-loader-data\" [class]=\"vm.dataClass\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n `,\n styleUrls: ['loader.css'],\n imports: [NgIf, AsyncPipe, NgtPush],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsLoader extends NgtRxStore implements OnInit {\n private readonly progress = injectNgtsProgress();\n\n readonly vm$ = combineLatest([\n this.select('shown'),\n this.select('containerClass').pipe(startWithUndefined()),\n this.select('innerClass').pipe(startWithUndefined()),\n this.select('barClass').pipe(startWithUndefined()),\n this.select('dataClass').pipe(startWithUndefined()),\n this.progress.select('progress'),\n this.progress.select('active'),\n ]).pipe(\n map(([shown, containerClass, innerClass, barClass, dataClass, progress, active]) => {\n return { shown, containerClass, innerClass, barClass, dataClass, progress, active };\n })\n );\n\n @Input() set containerClass(containerClass: string) {\n this.set({ containerClass });\n }\n\n @Input() set innerClass(innerClass: string) {\n this.set({ innerClass });\n }\n\n @Input() set barClass(barClass: string) {\n this.set({ barClass });\n }\n\n @Input() set dataClass(dataClass: string) {\n this.set({ dataClass });\n }\n\n @Input() set dataInterpolation(dataInterpolation: (value: number) => string) {\n this.set({ dataInterpolation });\n }\n\n @Input() set initialState(initialState: (value: boolean) => boolean) {\n this.set({ initialState });\n }\n\n @ViewChild('progressSpanRef') progressSpanRef?: ElementRef<HTMLSpanElement>;\n\n override initialize(): void {\n super.initialize();\n this.set({ dataInterpolation: defaultDataInterpolation, initialState: (active: boolean) => active });\n }\n\n ngOnInit() {\n this.set({ shown: this.get('initialState')(this.progress.get('active')) });\n this.connect(\n 'shown',\n this.progress.select('active').pipe(\n withLatestFrom(this.select('shown')),\n switchMap(([active, shown]) => {\n if (shown !== active) return timer(300).pipe(map(() => active));\n return of(shown);\n })\n )\n );\n\n let progressRef = 0;\n let rafId: ReturnType<typeof requestAnimationFrame>;\n\n this.effect(\n combineLatest([this.select('dataInterpolation'), this.progress.select('progress')]),\n ([dataInterpolation, progress]) => {\n const updateProgress = () => {\n if (!this.progressSpanRef?.nativeElement) return;\n progressRef += (progress - progressRef) / 2;\n if (progressRef > 0.95 * progress || progress === 100) progressRef = progress;\n this.progressSpanRef.nativeElement.innerText = dataInterpolation(progressRef);\n if (progressRef < progress) {\n rafId = requestAnimationFrame(updateProgress);\n }\n };\n\n updateProgress();\n\n return () => cancelAnimationFrame(rafId);\n }\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { injectNgtLoader, NgtLoaderResults, NgtStore } from 'angular-three';\nimport { Observable, tap } from 'rxjs';\nimport * as THREE from 'three';\n\nexport const IsObject = (url: any): url is Record<string, string> =>\n url === Object(url) && !Array.isArray(url) && typeof url !== 'function';\n\nexport function injectNgtsTextureLoader<TInput extends string[] | string | Record<string, string>>(\n input: TInput | Observable<TInput>,\n onLoad?: (texture: THREE.Texture | THREE.Texture[]) => void\n): Observable<NgtLoaderResults<TInput, THREE.Texture>> {\n const store = inject(NgtStore);\n return injectNgtLoader(() => THREE.TextureLoader, input).pipe(\n tap((textures) => {\n const array = Array.isArray(textures)\n ? textures\n : textures instanceof THREE.Texture\n ? [textures]\n : Object.values(textures);\n if (onLoad) onLoad(array);\n array.forEach(store.get('gl').initTexture);\n })\n ) as Observable<NgtLoaderResults<TInput, THREE.Texture>>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Directive } from '@angular/core';
3
+ import { NgtRxStore, NgtStore } from 'angular-three';
4
+
5
+ class NgtsBakeShadows extends NgtRxStore {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.store = inject(NgtStore);
9
+ }
10
+ ngOnInit() {
11
+ this.effect(this.store.select('gl'), (gl) => {
12
+ gl.shadowMap.autoUpdate = false;
13
+ gl.shadowMap.needsUpdate = true;
14
+ return () => {
15
+ gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;
16
+ };
17
+ });
18
+ }
19
+ }
20
+ NgtsBakeShadows.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsBakeShadows, deps: null, target: i0.ɵɵFactoryTarget.Directive });
21
+ NgtsBakeShadows.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsBakeShadows, isStandalone: true, selector: "ngts-bake-shadows", usesInheritance: true, ngImport: i0 });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsBakeShadows, decorators: [{
23
+ type: Directive,
24
+ args: [{ selector: 'ngts-bake-shadows', standalone: true }]
25
+ }] });
26
+
27
+ /**
28
+ * Generated bundle index. Do not edit.
29
+ */
30
+
31
+ export { NgtsBakeShadows };
32
+ //# sourceMappingURL=angular-three-soba-misc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/angular-three-soba/misc/src/lib/bake-shadows/bake-shadows.ts","../../../../libs/angular-three-soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { Directive, inject, OnInit } from '@angular/core';\nimport { NgtRxStore, NgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows extends NgtRxStore implements OnInit {\n private readonly store = inject(NgtStore);\n\n ngOnInit() {\n this.effect(this.store.select('gl'), (gl) => {\n gl.shadowMap.autoUpdate = false;\n gl.shadowMap.needsUpdate = true;\n\n return () => {\n gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n };\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAIM,MAAO,eAAgB,SAAQ,UAAU,CAAA;AAD/C,IAAA,WAAA,GAAA;;AAEqB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;KAY7C;IAVG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAI;AACxC,YAAA,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;AAChC,YAAA,EAAE,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAEhC,YAAA,OAAO,MAAK;AACR,gBAAA,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9D,aAAC,CAAC;AACN,SAAC,CAAC,CAAC;KACN;;4GAZQ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;gGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;YAAC,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;;;ACH9D;;AAEG;;;;"}
@@ -0,0 +1,191 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Directive, Input, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3
+ import { RxActionFactory } from '@rx-angular/state/actions';
4
+ import { NgtRxStore, NgtStore, extend, injectNgtRef, startWithUndefined, addEffect, addAfterEffect } from 'angular-three';
5
+ import { combineLatest } from 'rxjs';
6
+ import { LOD } from 'three';
7
+ import { DOCUMENT } from '@angular/common';
8
+ import * as Stats from 'stats.js';
9
+
10
+ class NgtsAdaptiveDpr extends NgtRxStore {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.store = inject(NgtStore);
14
+ this.actions = inject((RxActionFactory)).create();
15
+ this.pixelated = false;
16
+ }
17
+ ngOnInit() {
18
+ this.effect(this.actions.restorePixel$, () => {
19
+ const domElement = this.store.get('gl', 'domElement');
20
+ return () => {
21
+ const active = this.store.get('internal', 'active');
22
+ const setDpr = this.store.get('setDpr');
23
+ const initialDpr = this.store.get('viewport', 'initialDpr');
24
+ if (active)
25
+ setDpr(initialDpr);
26
+ if (this.pixelated && domElement)
27
+ domElement.style.imageRendering = 'auto';
28
+ };
29
+ });
30
+ this.actions.restorePixel();
31
+ this.hold(this.store.select('performance', 'current'), (performanceCurrent) => {
32
+ const { gl, viewport, setDpr } = this.store.get();
33
+ setDpr(performanceCurrent * viewport.initialDpr);
34
+ if (this.pixelated && gl.domElement)
35
+ gl.domElement.style.imageRendering = performanceCurrent === 1 ? 'auto' : 'pixelated';
36
+ });
37
+ }
38
+ }
39
+ NgtsAdaptiveDpr.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsAdaptiveDpr, deps: null, target: i0.ɵɵFactoryTarget.Directive });
40
+ 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 });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
42
+ type: Directive,
43
+ args: [{
44
+ selector: 'ngts-adaptive-dpr',
45
+ standalone: true,
46
+ providers: [RxActionFactory],
47
+ }]
48
+ }], propDecorators: { pixelated: [{
49
+ type: Input
50
+ }] } });
51
+
52
+ class NgtsAdaptiveEvents extends NgtRxStore {
53
+ constructor() {
54
+ super(...arguments);
55
+ this.store = inject(NgtStore);
56
+ this.actions = inject((RxActionFactory)).create();
57
+ }
58
+ ngOnInit() {
59
+ this.effect(this.actions.setEvents$, () => {
60
+ const enabled = this.store.get('events', 'enabled');
61
+ return () => {
62
+ const setEvents = this.store.get('setEvents');
63
+ setEvents({ enabled });
64
+ };
65
+ });
66
+ this.actions.setEvents();
67
+ this.hold(this.store.select('performance', 'current'), (current) => {
68
+ const setEvents = this.store.get('setEvents');
69
+ setEvents({ enabled: current === 1 });
70
+ });
71
+ }
72
+ }
73
+ NgtsAdaptiveEvents.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsAdaptiveEvents, deps: null, target: i0.ɵɵFactoryTarget.Directive });
74
+ 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 });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
76
+ type: Directive,
77
+ args: [{
78
+ selector: 'ngts-adaptive-events',
79
+ standalone: true,
80
+ providers: [RxActionFactory],
81
+ }]
82
+ }] });
83
+
84
+ extend({ LOD });
85
+ class NgtsDetailed extends NgtRxStore {
86
+ constructor() {
87
+ super(...arguments);
88
+ this.lodRef = injectNgtRef();
89
+ }
90
+ set distances(distances) {
91
+ this.set({ distances });
92
+ }
93
+ ngOnInit() {
94
+ this.updateLodChildren();
95
+ }
96
+ updateLodChildren() {
97
+ this.hold(combineLatest([this.lodRef.children$(), this.select('distances')]), ([children, distances]) => {
98
+ this.lodRef.nativeElement.levels.length = 0;
99
+ children.forEach((child, index) => {
100
+ this.lodRef.nativeElement.addLevel(child, distances[index]);
101
+ });
102
+ });
103
+ }
104
+ }
105
+ NgtsDetailed.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsDetailed, deps: null, target: i0.ɵɵFactoryTarget.Component });
106
+ 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: `
107
+ <ngt-lOD [ref]="lodRef" ngtCompound (beforeRender)="$any($event).object.update($any($event).state.camera)">
108
+ <ng-content />
109
+ </ngt-lOD>
110
+ `, isInline: true });
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsDetailed, decorators: [{
112
+ type: Component,
113
+ args: [{
114
+ selector: 'ngts-detailed[distances]',
115
+ standalone: true,
116
+ template: `
117
+ <ngt-lOD [ref]="lodRef" ngtCompound (beforeRender)="$any($event).object.update($any($event).state.camera)">
118
+ <ng-content />
119
+ </ngt-lOD>
120
+ `,
121
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
122
+ }]
123
+ }], propDecorators: { lodRef: [{
124
+ type: Input
125
+ }], distances: [{
126
+ type: Input
127
+ }] } });
128
+
129
+ class NgtsStats extends NgtRxStore {
130
+ constructor() {
131
+ super(...arguments);
132
+ this.document = inject(DOCUMENT);
133
+ this.stats = new Stats();
134
+ }
135
+ set showPanel(showPanel) {
136
+ this.set({ showPanel: showPanel === undefined ? this.get('showPanel') : showPanel });
137
+ }
138
+ set parent(parent) {
139
+ this.set({ parent });
140
+ }
141
+ set classes(classes) {
142
+ this.set({ classes });
143
+ }
144
+ initialize() {
145
+ super.initialize();
146
+ this.set({ showPanel: 0 });
147
+ }
148
+ ngOnInit() {
149
+ this.effect(combineLatest([
150
+ this.select('showPanel'),
151
+ this.select('parent').pipe(startWithUndefined()),
152
+ this.select('classes').pipe(startWithUndefined()),
153
+ ]), ([showPanel, parent, classes]) => {
154
+ const node = parent && parent.nativeElement ? parent.nativeElement : this.document.body;
155
+ this.stats.showPanel(showPanel);
156
+ node.appendChild(this.stats.dom);
157
+ if (classes) {
158
+ this.stats.dom.classList.add(...classes.split(' ').filter((cls) => cls));
159
+ }
160
+ const begin = addEffect(() => this.stats.begin());
161
+ const end = addAfterEffect(() => this.stats.end());
162
+ return () => {
163
+ node.removeChild(this.stats.dom);
164
+ begin();
165
+ end();
166
+ };
167
+ });
168
+ }
169
+ }
170
+ NgtsStats.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStats, deps: null, target: i0.ɵɵFactoryTarget.Directive });
171
+ 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 });
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStats, decorators: [{
173
+ type: Directive,
174
+ args: [{
175
+ selector: 'ngts-stats',
176
+ standalone: true,
177
+ }]
178
+ }], propDecorators: { showPanel: [{
179
+ type: Input
180
+ }], parent: [{
181
+ type: Input
182
+ }], classes: [{
183
+ type: Input
184
+ }] } });
185
+
186
+ /**
187
+ * Generated bundle index. Do not edit.
188
+ */
189
+
190
+ export { NgtsAdaptiveDpr, NgtsAdaptiveEvents, NgtsDetailed, NgtsStats };
191
+ //# sourceMappingURL=angular-three-soba-performance.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-three-soba-performance.mjs","sources":["../../../../libs/angular-three-soba/performance/src/lib/adaptive/adaptive-dpr.ts","../../../../libs/angular-three-soba/performance/src/lib/adaptive/adaptive-events.ts","../../../../libs/angular-three-soba/performance/src/lib/detailed/detailed.ts","../../../../libs/angular-three-soba/performance/src/lib/stats/stats.ts","../../../../libs/angular-three-soba/performance/src/angular-three-soba-performance.ts"],"sourcesContent":["import { Directive, inject, Input, OnInit } from '@angular/core';\nimport { RxActionFactory } from '@rx-angular/state/actions';\nimport { NgtRxStore, NgtStore } from 'angular-three';\n\n@Directive({\n selector: 'ngts-adaptive-dpr',\n standalone: true,\n providers: [RxActionFactory],\n})\nexport class NgtsAdaptiveDpr extends NgtRxStore implements OnInit {\n private readonly store = inject(NgtStore);\n private readonly actions = inject(RxActionFactory<{ restorePixel: void }>).create();\n\n @Input() pixelated = false;\n\n ngOnInit(): void {\n this.effect(this.actions.restorePixel$, () => {\n const domElement = this.store.get('gl', 'domElement');\n return () => {\n const active = this.store.get('internal', 'active');\n const setDpr = this.store.get('setDpr');\n const initialDpr = this.store.get('viewport', 'initialDpr');\n if (active) setDpr(initialDpr);\n if (this.pixelated && domElement) domElement.style.imageRendering = 'auto';\n };\n });\n\n this.actions.restorePixel();\n\n this.hold(this.store.select('performance', 'current'), (performanceCurrent) => {\n const { gl, viewport, setDpr } = this.store.get();\n setDpr(performanceCurrent * viewport.initialDpr);\n if (this.pixelated && gl.domElement)\n gl.domElement.style.imageRendering = performanceCurrent === 1 ? 'auto' : 'pixelated';\n });\n }\n}\n","import { Directive, inject, OnInit } from '@angular/core';\nimport { RxActionFactory } from '@rx-angular/state/actions';\nimport { NgtRxStore, NgtStore } from 'angular-three';\n\n@Directive({\n selector: 'ngts-adaptive-events',\n standalone: true,\n providers: [RxActionFactory],\n})\nexport class NgtsAdaptiveEvents extends NgtRxStore implements OnInit {\n private readonly store = inject(NgtStore);\n private readonly actions = inject(RxActionFactory<{ setEvents: void }>).create();\n\n ngOnInit(): void {\n this.effect(this.actions.setEvents$, () => {\n const enabled = this.store.get('events', 'enabled');\n return () => {\n const setEvents = this.store.get('setEvents');\n setEvents({ enabled });\n };\n });\n this.actions.setEvents();\n\n this.hold(this.store.select('performance', 'current'), (current) => {\n const setEvents = this.store.get('setEvents');\n setEvents({ enabled: current === 1 });\n });\n }\n}\n","import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, OnInit } from '@angular/core';\nimport { extend, injectNgtRef, NgtRxStore } from 'angular-three';\nimport { combineLatest } from 'rxjs';\nimport { LOD } from 'three';\n\nextend({ LOD });\n\n@Component({\n selector: 'ngts-detailed[distances]',\n standalone: true,\n template: `\n <ngt-lOD [ref]=\"lodRef\" ngtCompound (beforeRender)=\"$any($event).object.update($any($event).state.camera)\">\n <ng-content />\n </ngt-lOD>\n `,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsDetailed extends NgtRxStore implements OnInit {\n @Input() lodRef = injectNgtRef<LOD>();\n\n @Input() set distances(distances: number[]) {\n this.set({ distances });\n }\n\n ngOnInit() {\n this.updateLodChildren();\n }\n\n private updateLodChildren() {\n this.hold(combineLatest([this.lodRef.children$(), this.select('distances')]), ([children, distances]) => {\n this.lodRef.nativeElement.levels.length = 0;\n children.forEach((child, index) => {\n this.lodRef.nativeElement.addLevel(child, distances[index]);\n });\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, inject, Input, OnInit } from '@angular/core';\nimport { addAfterEffect, addEffect, NgtInjectedRef, NgtRxStore, startWithUndefined } from 'angular-three';\nimport { combineLatest } from 'rxjs';\nimport * as Stats from 'stats.js';\n\n@Directive({\n selector: 'ngts-stats',\n standalone: true,\n})\nexport class NgtsStats extends NgtRxStore implements OnInit {\n private readonly document = inject(DOCUMENT);\n private readonly stats = new Stats();\n\n @Input() set showPanel(showPanel: number) {\n this.set({ showPanel: showPanel === undefined ? this.get('showPanel') : showPanel });\n }\n\n @Input() set parent(parent: NgtInjectedRef<HTMLElement>) {\n this.set({ parent });\n }\n\n @Input() set classes(classes: string) {\n this.set({ classes });\n }\n\n override initialize(): void {\n super.initialize();\n this.set({ showPanel: 0 });\n }\n\n ngOnInit() {\n this.effect(\n combineLatest([\n this.select('showPanel'),\n this.select('parent').pipe(startWithUndefined()),\n this.select('classes').pipe(startWithUndefined()),\n ]),\n ([showPanel, parent, classes]) => {\n const node = parent && parent.nativeElement ? parent.nativeElement : this.document.body;\n this.stats.showPanel(showPanel);\n node.appendChild(this.stats.dom);\n if (classes) {\n this.stats.dom.classList.add(...classes.split(' ').filter((cls: string) => cls));\n }\n const begin = addEffect(() => this.stats.begin());\n const end = addAfterEffect(() => this.stats.end());\n return () => {\n node.removeChild(this.stats.dom);\n begin();\n end();\n };\n }\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import * as THREE from 'three';
2
+
3
+ function shaderMaterial(uniforms, vertexShader, fragmentShader, onInit) {
4
+ const material = class extends THREE.ShaderMaterial {
5
+ constructor(parameters = {}) {
6
+ const entries = Object.entries(uniforms);
7
+ // Create unforms and shaders
8
+ super({
9
+ uniforms: entries.reduce((acc, [name, value]) => {
10
+ const uniform = THREE.UniformsUtils.clone({ [name]: { value } });
11
+ return Object.assign(Object.assign({}, acc), uniform);
12
+ }, {}),
13
+ vertexShader,
14
+ fragmentShader,
15
+ });
16
+ this.key = '';
17
+ // Create getter/setters
18
+ entries.forEach(([name]) => Object.defineProperty(this, name, {
19
+ get: () => this.uniforms[name].value,
20
+ set: (v) => (this.uniforms[name].value = v),
21
+ }));
22
+ // Assign parameters, this might include uniforms
23
+ Object.assign(this, parameters);
24
+ // Call onInit
25
+ if (onInit)
26
+ onInit(this);
27
+ }
28
+ };
29
+ material.key = THREE.MathUtils.generateUUID();
30
+ return material;
31
+ }
32
+
33
+ /**
34
+ * Generated bundle index. Do not edit.
35
+ */
36
+
37
+ export { shaderMaterial };
38
+ //# sourceMappingURL=angular-three-soba-shaders.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-three-soba-shaders.mjs","sources":["../../../../libs/angular-three-soba/shaders/src/lib/shader-material/shader-material.ts","../../../../libs/angular-three-soba/shaders/src/angular-three-soba-shaders.ts"],"sourcesContent":["import * as THREE from 'three';\n\nexport function shaderMaterial(\n uniforms: {\n [name: string]:\n | THREE.CubeTexture\n | THREE.Texture\n | Int32Array\n | Float32Array\n | THREE.Matrix4\n | THREE.Matrix3\n | THREE.Quaternion\n | THREE.Vector4\n | THREE.Vector3\n | THREE.Vector2\n | THREE.Color\n | number\n | boolean\n | Array<any>\n | null;\n },\n vertexShader: string,\n fragmentShader: string,\n onInit?: (material?: THREE.ShaderMaterial) => void\n) {\n const material = class extends THREE.ShaderMaterial {\n public key = '';\n constructor(parameters = {}) {\n const entries = Object.entries(uniforms);\n // Create unforms and shaders\n super({\n uniforms: entries.reduce((acc, [name, value]) => {\n const uniform = THREE.UniformsUtils.clone({ [name]: { value } });\n return {\n ...acc,\n ...uniform,\n };\n }, {}),\n vertexShader,\n fragmentShader,\n });\n // Create getter/setters\n entries.forEach(([name]) =>\n Object.defineProperty(this, name, {\n get: () => this.uniforms[name].value,\n set: (v) => (this.uniforms[name].value = v),\n })\n );\n\n // Assign parameters, this might include uniforms\n Object.assign(this, parameters);\n // Call onInit\n if (onInit) onInit(this);\n }\n } as unknown as typeof THREE.ShaderMaterial & { key: string };\n material.key = THREE.MathUtils.generateUUID();\n return material;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAEM,SAAU,cAAc,CAC1B,QAiBC,EACD,YAAoB,EACpB,cAAsB,EACtB,MAAkD,EAAA;AAElD,IAAA,MAAM,QAAQ,GAAG,cAAc,KAAK,CAAC,cAAc,CAAA;QAE/C,WAAY,CAAA,UAAU,GAAG,EAAE,EAAA;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAEzC,YAAA,KAAK,CAAC;AACF,gBAAA,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,KAAI;AAC5C,oBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACjE,OACO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,GAAG,CACH,EAAA,OAAO,CACZ,CAAA;iBACL,EAAE,EAAE,CAAC;gBACN,YAAY;gBACZ,cAAc;AACjB,aAAA,CAAC,CAAC;AAdA,YAAA,IAAG,CAAA,GAAA,GAAG,EAAE,CAAC;;AAgBZ,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KACnB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE;gBAC9B,GAAG,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK;AACpC,gBAAA,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9C,aAAA,CAAC,CACL,CAAC;;AAGF,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;;AAEhC,YAAA,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAC5B;KACwD,CAAC;IAC9D,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;AAC9C,IAAA,OAAO,QAAQ,CAAC;AACpB;;ACzDA;;AAEG;;;;"}