angular-three-soba 2.0.0-beta.237 → 2.0.0-beta.239

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.
@@ -1,6 +1,522 @@
1
- import { signal, computed } from '@angular/core';
2
- import { injectTextureLoader } from 'angular-three-soba/loaders';
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { computed, inject, Injector, signal, afterNextRender, untracked, input, Directive, viewChild, Component, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, contentChild, TemplateRef } from '@angular/core';
4
+ import { HDRJPGLoader, GainMapLoader } from '@monogrid/gainmap-js';
5
+ import { is, applyProps, injectNgtStore, injectLoader, prepare, extend, injectNextBeforeRender, NgtArgs, NgtPortal, NgtPortalContent, injectNgtRef, makeParameters } from 'angular-three';
6
+ import { sRGBEncoding, LinearEncoding, NgtsContent } from 'angular-three-soba/misc';
3
7
  import { assertInjector } from 'ngxtension/assert-injector';
8
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
9
+ import { mergeInputs } from 'ngxtension/inject-inputs';
10
+ import { CubeTextureLoader, CubeReflectionMapping, EquirectangularReflectionMapping, WebGLCubeRenderTarget, HalfFloatType, Scene, CubeCamera, Group, MathUtils } from 'three';
11
+ import { RGBELoader, EXRLoader, GroundProjectedEnv } from 'three-stdlib';
12
+ import { injectTextureLoader } from 'angular-three-soba/loaders';
13
+
14
+ const CUBEMAP_ROOT = 'https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/';
15
+ const ENVIRONMENT_PRESETS = {
16
+ apartment: 'lebombo_1k.hdr',
17
+ city: 'potsdamer_platz_1k.hdr',
18
+ dawn: 'kiara_1_dawn_1k.hdr',
19
+ forest: 'forest_slope_1k.hdr',
20
+ lobby: 'st_fagans_interior_1k.hdr',
21
+ night: 'dikhololo_night_1k.hdr',
22
+ park: 'rooitou_park_1k.hdr',
23
+ studio: 'studio_small_03_1k.hdr',
24
+ sunset: 'venice_sunset_1k.hdr',
25
+ warehouse: 'empty_warehouse_01_1k.hdr',
26
+ };
27
+ function resolveScene(scene) {
28
+ return is.ref(scene) ? scene.nativeElement : scene;
29
+ }
30
+ function setEnvProps(background, scene, defaultScene, texture, sceneProps = {}) {
31
+ sceneProps.backgroundBlurriness ??= sceneProps.blur ?? 0;
32
+ sceneProps.backgroundIntensity ??= 1;
33
+ // @ts-expect-error - it's ok, we're sending through applyProps
34
+ sceneProps.backgroundRotation ??= [0, 0, 0];
35
+ sceneProps.environmentIntensity ??= 1;
36
+ // @ts-expect-error - it's ok, we're sending through applyProps
37
+ sceneProps.environmentRotation ??= [0, 0, 0];
38
+ const target = resolveScene(scene || defaultScene);
39
+ const oldbg = target.background;
40
+ const oldenv = target.environment;
41
+ const oldSceneProps = {
42
+ backgroundBlurriness: target.backgroundBlurriness,
43
+ backgroundIntensity: target.backgroundIntensity,
44
+ backgroundRotation: target.backgroundRotation?.clone?.() ?? [0, 0, 0],
45
+ environmentIntensity: target.environmentIntensity,
46
+ environmentRotation: target.environmentRotation?.clone?.() ?? [0, 0, 0],
47
+ };
48
+ if (background !== 'only')
49
+ target.environment = texture;
50
+ if (background)
51
+ target.background = texture;
52
+ applyProps(target, sceneProps);
53
+ return () => {
54
+ if (background !== 'only')
55
+ target.environment = oldenv;
56
+ if (background)
57
+ target.background = oldbg;
58
+ applyProps(target, oldSceneProps);
59
+ };
60
+ }
61
+ function injectEnvironment(options = () => ({}), { injector } = {}) {
62
+ return assertInjector(injectEnvironment, injector, () => {
63
+ const adjustedOptions = computed(() => {
64
+ let { files, path, preset, extensions, encoding } = options();
65
+ if (files == null) {
66
+ files = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'];
67
+ }
68
+ if (path == null) {
69
+ path = '';
70
+ }
71
+ if (preset) {
72
+ if (!(preset in ENVIRONMENT_PRESETS))
73
+ throw new Error('Preset must be one of: ' + Object.keys(ENVIRONMENT_PRESETS).join(', '));
74
+ files = ENVIRONMENT_PRESETS[preset];
75
+ path = CUBEMAP_ROOT;
76
+ }
77
+ return { files, preset, encoding, path, extensions };
78
+ });
79
+ const resultOptions = computed(() => {
80
+ const { files } = adjustedOptions();
81
+ const multiFile = Array.isArray(files);
82
+ const isCubeMap = multiFile && files.length === 6;
83
+ const isGainmain = multiFile && files.length === 3 && files.some((file) => file.endsWith('json'));
84
+ const firstEntry = multiFile ? files[0] : files;
85
+ const extension = isCubeMap
86
+ ? 'cube'
87
+ : isGainmain
88
+ ? 'webp'
89
+ : firstEntry.startsWith('data:application/exr')
90
+ ? 'exr'
91
+ : firstEntry.startsWith('data:application/hdr')
92
+ ? 'hdr'
93
+ : firstEntry.startsWith('data:image/jpeg')
94
+ ? 'jpg'
95
+ : firstEntry.split('.').pop()?.split('?')?.shift()?.toLowerCase();
96
+ return { multiFile, extension, isCubeMap };
97
+ });
98
+ const loader = computed(() => {
99
+ const { extension } = resultOptions();
100
+ const loader = extension === 'cube'
101
+ ? CubeTextureLoader
102
+ : extension === 'hdr'
103
+ ? RGBELoader
104
+ : extension === 'exr'
105
+ ? EXRLoader
106
+ : extension === 'jpg' || extension === 'jpeg'
107
+ ? HDRJPGLoader
108
+ : extension === 'webp'
109
+ ? GainMapLoader
110
+ : null;
111
+ if (!loader) {
112
+ throw new Error('injectEnvironment: Unrecognized file extension: ' + extension);
113
+ }
114
+ return loader;
115
+ });
116
+ const assertedInjector = inject(Injector);
117
+ const autoEffect = injectAutoEffect();
118
+ const store = injectNgtStore();
119
+ const gl = store.select('gl');
120
+ const texture = signal(null);
121
+ afterNextRender(() => {
122
+ const result = injectLoader(loader,
123
+ // @ts-expect-error
124
+ () => {
125
+ const { files } = adjustedOptions();
126
+ return Array.isArray(files) ? [files] : files;
127
+ }, {
128
+ injector: assertedInjector,
129
+ extensions: (loader) => {
130
+ const { extensions, path } = adjustedOptions();
131
+ const { extension } = resultOptions();
132
+ if (extension === 'webp' || extension === 'jpg' || extension === 'jpeg') {
133
+ // @ts-expect-error - Gainmap requires a renderer
134
+ loader.setRenderer(gl());
135
+ }
136
+ loader.setPath?.(path);
137
+ if (extensions)
138
+ extensions(loader);
139
+ },
140
+ });
141
+ //
142
+ autoEffect(() => {
143
+ const loaderResult = result();
144
+ if (!loaderResult)
145
+ return;
146
+ untracked(() => {
147
+ const { multiFile, extension, isCubeMap } = resultOptions();
148
+ const { encoding } = adjustedOptions();
149
+ // @ts-expect-error
150
+ let textureResult = (multiFile ? loaderResult[0] : loaderResult);
151
+ if (extension === 'jpg' || extension === 'jpeg' || extension === 'webp') {
152
+ textureResult = textureResult.renderTarget?.texture;
153
+ }
154
+ textureResult.mapping = isCubeMap ? CubeReflectionMapping : EquirectangularReflectionMapping;
155
+ if ('colorSpace' in textureResult)
156
+ textureResult.colorSpace = encoding ?? isCubeMap ? 'srgb' : 'srgb-linear';
157
+ else
158
+ textureResult.encoding = encoding ?? isCubeMap ? sRGBEncoding : LinearEncoding;
159
+ texture.set(textureResult);
160
+ });
161
+ });
162
+ });
163
+ return texture.asReadonly();
164
+ });
165
+ }
166
+ class NgtsEnvironmentOptionsProvider {
167
+ constructor() {
168
+ this.options = input({});
169
+ this.autoEffect = injectAutoEffect();
170
+ this.store = injectNgtStore();
171
+ this.defaultScene = this.store.select('scene');
172
+ this.envConfig = computed(() => {
173
+ const { background = false, scene, blur, backgroundBlurriness, backgroundIntensity, backgroundRotation, environmentIntensity, environmentRotation, } = this.options();
174
+ return {
175
+ background,
176
+ scene,
177
+ blur,
178
+ backgroundBlurriness,
179
+ backgroundIntensity,
180
+ backgroundRotation,
181
+ environmentIntensity,
182
+ environmentRotation,
183
+ };
184
+ });
185
+ }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentOptionsProvider, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
187
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.3", type: NgtsEnvironmentOptionsProvider, isStandalone: true, inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
188
+ }
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentOptionsProvider, decorators: [{
190
+ type: Directive,
191
+ args: [{ standalone: true }]
192
+ }] });
193
+ const defaultBackground = {
194
+ background: false,
195
+ };
196
+ class NgtsEnvironmentMap {
197
+ constructor() {
198
+ this.options = input(defaultBackground, { transform: mergeInputs(defaultBackground) });
199
+ this.autoEffect = injectAutoEffect();
200
+ this.store = injectNgtStore();
201
+ this.defaultScene = this.store.select('scene');
202
+ this.envConfig = computed(() => {
203
+ const { background = false, scene, blur, backgroundBlurriness, backgroundIntensity, backgroundRotation, environmentIntensity, environmentRotation, } = this.options();
204
+ return {
205
+ background,
206
+ scene,
207
+ blur,
208
+ backgroundBlurriness,
209
+ backgroundIntensity,
210
+ backgroundRotation,
211
+ environmentIntensity,
212
+ environmentRotation,
213
+ };
214
+ });
215
+ this.map = computed(() => this.options().map);
216
+ afterNextRender(() => {
217
+ this.autoEffect(() => {
218
+ const map = this.map();
219
+ if (!map)
220
+ return;
221
+ const { background = false, scene, ...config } = this.envConfig();
222
+ return setEnvProps(background, scene, this.defaultScene(), map, config);
223
+ });
224
+ });
225
+ }
226
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentMap, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
227
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.3", type: NgtsEnvironmentMap, isStandalone: true, selector: "ngts-environment-map", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
228
+ }
229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentMap, decorators: [{
230
+ type: Directive,
231
+ args: [{ standalone: true, selector: 'ngts-environment-map' }]
232
+ }], ctorParameters: () => [] });
233
+ class NgtsEnvironmentCube {
234
+ constructor() {
235
+ this.options = input(defaultBackground, { transform: mergeInputs(defaultBackground) });
236
+ this.autoEffect = injectAutoEffect();
237
+ this.store = injectNgtStore();
238
+ this.defaultScene = this.store.select('scene');
239
+ this.envConfig = computed(() => {
240
+ const { background = false, scene, blur, backgroundBlurriness, backgroundIntensity, backgroundRotation, environmentIntensity, environmentRotation, } = this.options();
241
+ return {
242
+ background,
243
+ scene,
244
+ blur,
245
+ backgroundBlurriness,
246
+ backgroundIntensity,
247
+ backgroundRotation,
248
+ environmentIntensity,
249
+ environmentRotation,
250
+ };
251
+ });
252
+ this.environmentOptions = computed(() => {
253
+ const { encoding, preset, files, path, extensions } = this.options();
254
+ return { encoding, preset, files, path, extensions };
255
+ });
256
+ this.texture = injectEnvironment(this.environmentOptions);
257
+ afterNextRender(() => {
258
+ this.autoEffect(() => {
259
+ const texture = this.texture();
260
+ if (!texture)
261
+ return;
262
+ const { background = false, scene, ...config } = this.envConfig();
263
+ return setEnvProps(background, scene, this.defaultScene(), texture, config);
264
+ });
265
+ });
266
+ }
267
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentCube, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
268
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.3", type: NgtsEnvironmentCube, isStandalone: true, selector: "ngts-environment-cube", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
269
+ }
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentCube, decorators: [{
271
+ type: Directive,
272
+ args: [{ standalone: true, selector: 'ngts-environment-cube' }]
273
+ }], ctorParameters: () => [] });
274
+ class NgtsEnvironmentPortal {
275
+ constructor() {
276
+ this.defaultOptions = {
277
+ near: 1,
278
+ far: 1000,
279
+ resolution: 256,
280
+ frames: 1,
281
+ background: false,
282
+ };
283
+ this.options = input(this.defaultOptions, { transform: mergeInputs(this.defaultOptions) });
284
+ this.content = input.required();
285
+ this.autoEffect = injectAutoEffect();
286
+ this.store = injectNgtStore();
287
+ this.defaultScene = this.store.select('scene');
288
+ this.gl = this.store.select('gl');
289
+ this.camera = viewChild.required('cubeCamera');
290
+ this.map = computed(() => this.options().map);
291
+ this.extensions = computed(() => this.options().extensions);
292
+ this.files = computed(() => this.options().files);
293
+ this.path = computed(() => this.options().path);
294
+ this.preset = computed(() => this.options().preset);
295
+ this.envMapOptions = computed(() => ({ background: true, map: this.map(), extensions: this.extensions() }));
296
+ this.envCubeOptions = computed(() => ({
297
+ background: true,
298
+ files: this.files(),
299
+ preset: this.preset(),
300
+ extensions: this.extensions(),
301
+ }));
302
+ this.near = computed(() => this.options().near);
303
+ this.far = computed(() => this.options().far);
304
+ this.resolution = computed(() => this.options().resolution);
305
+ this.fbo = computed(() => {
306
+ const fbo = new WebGLCubeRenderTarget(this.resolution());
307
+ fbo.texture.type = HalfFloatType;
308
+ return fbo;
309
+ });
310
+ this.cameraArgs = computed(() => [this.near(), this.far(), this.fbo()]);
311
+ this.virtualScene = prepare(new Scene());
312
+ extend({ CubeCamera });
313
+ afterNextRender(() => {
314
+ this.autoEffect(() => {
315
+ const camera = this.camera();
316
+ if (!camera.nativeElement)
317
+ return;
318
+ const [{ frames, background = false, scene, blur, backgroundBlurriness, backgroundIntensity, backgroundRotation, environmentIntensity, environmentRotation, }, gl, fbo, defaultScene,] = [this.options(), this.gl(), this.fbo(), this.defaultScene()];
319
+ if (frames === 1) {
320
+ camera.nativeElement.update(gl, this.virtualScene);
321
+ }
322
+ return setEnvProps(background, scene, defaultScene, fbo.texture, {
323
+ blur,
324
+ backgroundBlurriness,
325
+ backgroundIntensity,
326
+ backgroundRotation,
327
+ environmentIntensity,
328
+ environmentRotation,
329
+ });
330
+ });
331
+ });
332
+ let count = 1;
333
+ injectNextBeforeRender(() => {
334
+ const frames = this.options().frames;
335
+ if (frames === Infinity || (frames != null && count < frames)) {
336
+ const camera = this.camera().nativeElement;
337
+ if (camera) {
338
+ camera.update(this.gl(), this.virtualScene);
339
+ count++;
340
+ }
341
+ }
342
+ });
343
+ }
344
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentPortal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
345
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtsEnvironmentPortal, isStandalone: true, selector: "ngts-environment-portal", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "camera", first: true, predicate: ["cubeCamera"], descendants: true, isSignal: true }], ngImport: i0, template: `
346
+ <ngt-portal [container]="virtualScene">
347
+ <ng-container [ngTemplateOutlet]="content()" />
348
+
349
+ <ngt-cube-camera #cubeCamera *args="cameraArgs()" />
350
+
351
+ @if (files() || preset()) {
352
+ <ngts-environment-cube [options]="envCubeOptions()" />
353
+ } @else if (map()) {
354
+ <ngts-environment-map [options]="envMapOptions()" />
355
+ }
356
+ </ngt-portal>
357
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtsEnvironmentCube, selector: "ngts-environment-cube", inputs: ["options"] }, { kind: "directive", type: NgtsEnvironmentMap, selector: "ngts-environment-map", inputs: ["options"] }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "camera", "state", "autoRender", "autoRenderPriority"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
358
+ }
359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentPortal, decorators: [{
360
+ type: Component,
361
+ args: [{
362
+ selector: 'ngts-environment-portal',
363
+ standalone: true,
364
+ template: `
365
+ <ngt-portal [container]="virtualScene">
366
+ <ng-container [ngTemplateOutlet]="content()" />
367
+
368
+ <ngt-cube-camera #cubeCamera *args="cameraArgs()" />
369
+
370
+ @if (files() || preset()) {
371
+ <ngts-environment-cube [options]="envCubeOptions()" />
372
+ } @else if (map()) {
373
+ <ngts-environment-map [options]="envMapOptions()" />
374
+ }
375
+ </ngt-portal>
376
+ `,
377
+ imports: [NgtsEnvironmentCube, NgtsEnvironmentMap, NgtArgs, NgtPortal, NgtPortalContent, NgTemplateOutlet],
378
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
379
+ changeDetection: ChangeDetectionStrategy.OnPush,
380
+ }]
381
+ }], ctorParameters: () => [] });
382
+ class NgtsEnvironmentGround {
383
+ constructor() {
384
+ this.options = input({});
385
+ this.defaultTexture = injectEnvironment(this.options);
386
+ this.texture = computed(() => this.options().map || this.defaultTexture());
387
+ this.args = computed(() => [this.texture()]);
388
+ this.height = computed(() => this.options().ground?.height);
389
+ this.radius = computed(() => this.options().ground?.radius);
390
+ this.scale = computed(() => this.options().ground?.scale ?? 1000);
391
+ this.envMapOptions = computed(() => {
392
+ const { map: _, ...options } = this.options();
393
+ return Object.assign(options, { map: this.texture() });
394
+ });
395
+ extend({ GroundProjectedEnv });
396
+ }
397
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentGround, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
398
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.3", type: NgtsEnvironmentGround, isStandalone: true, selector: "ngts-environment-ground", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
399
+ <ngts-environment-map [options]="envMapOptions()" />
400
+ <ngt-ground-projected-env *args="args()" [scale]="scale()" [height]="height()" [radius]="radius()" />
401
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtsEnvironmentMap, selector: "ngts-environment-map", inputs: ["options"] }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
402
+ }
403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironmentGround, decorators: [{
404
+ type: Component,
405
+ args: [{
406
+ selector: 'ngts-environment-ground',
407
+ standalone: true,
408
+ template: `
409
+ <ngts-environment-map [options]="envMapOptions()" />
410
+ <ngt-ground-projected-env *args="args()" [scale]="scale()" [height]="height()" [radius]="radius()" />
411
+ `,
412
+ imports: [NgtsEnvironmentMap, NgtArgs],
413
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
414
+ changeDetection: ChangeDetectionStrategy.OnPush,
415
+ }]
416
+ }], ctorParameters: () => [] });
417
+ class NgtsEnvironment {
418
+ constructor() {
419
+ this.optionsProvider = inject(NgtsEnvironmentOptionsProvider);
420
+ this.content = contentChild(NgtsContent, { read: TemplateRef });
421
+ }
422
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironment, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
423
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtsEnvironment, isStandalone: true, selector: "ngts-environment", queries: [{ propertyName: "content", first: true, predicate: NgtsContent, descendants: true, read: TemplateRef, isSignal: true }], hostDirectives: [{ directive: NgtsEnvironmentOptionsProvider, inputs: ["options", "options"] }], ngImport: i0, template: `
424
+ @if (optionsProvider.options().ground) {
425
+ <ngts-environment-ground [options]="optionsProvider.options()" />
426
+ } @else if (optionsProvider.options().map) {
427
+ <ngts-environment-map [options]="optionsProvider.options()" />
428
+ } @else if (content()) {
429
+ <ngts-environment-portal [options]="optionsProvider.options()" [content]="$any(content())" />
430
+ } @else {
431
+ <ngts-environment-cube [options]="optionsProvider.options()" />
432
+ }
433
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtsEnvironmentCube, selector: "ngts-environment-cube", inputs: ["options"] }, { kind: "directive", type: NgtsEnvironmentMap, selector: "ngts-environment-map", inputs: ["options"] }, { kind: "component", type: NgtsEnvironmentPortal, selector: "ngts-environment-portal", inputs: ["options", "content"] }, { kind: "component", type: NgtsEnvironmentGround, selector: "ngts-environment-ground", inputs: ["options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
434
+ }
435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsEnvironment, decorators: [{
436
+ type: Component,
437
+ args: [{
438
+ selector: 'ngts-environment',
439
+ standalone: true,
440
+ template: `
441
+ @if (optionsProvider.options().ground) {
442
+ <ngts-environment-ground [options]="optionsProvider.options()" />
443
+ } @else if (optionsProvider.options().map) {
444
+ <ngts-environment-map [options]="optionsProvider.options()" />
445
+ } @else if (content()) {
446
+ <ngts-environment-portal [options]="optionsProvider.options()" [content]="$any(content())" />
447
+ } @else {
448
+ <ngts-environment-cube [options]="optionsProvider.options()" />
449
+ }
450
+ `,
451
+ imports: [NgtsEnvironmentCube, NgtsEnvironmentMap, NgtsEnvironmentPortal, NgtsEnvironmentGround],
452
+ hostDirectives: [{ directive: NgtsEnvironmentOptionsProvider, inputs: ['options'] }],
453
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
454
+ changeDetection: ChangeDetectionStrategy.OnPush,
455
+ }]
456
+ }] });
457
+
458
+ extend({ Group });
459
+ const defaultOptions = {
460
+ enabled: true,
461
+ speed: 1,
462
+ rotationIntensity: 1,
463
+ floatIntensity: 1,
464
+ floatingRange: [-0.1, 0.1],
465
+ };
466
+ class NgtsFloat {
467
+ constructor() {
468
+ this.floatRef = input(injectNgtRef());
469
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
470
+ this.parameters = makeParameters(this.options, [
471
+ 'enabled',
472
+ 'speed',
473
+ 'rotationIntensity',
474
+ 'floatIntensity',
475
+ 'floatingRange',
476
+ ]);
477
+ this.content = contentChild.required(NgtsContent, { read: TemplateRef });
478
+ const offset = Math.random() * 10000;
479
+ injectNextBeforeRender(({ clock }) => {
480
+ const [{ enabled, speed, rotationIntensity, floatingRange, floatIntensity }] = [this.options()];
481
+ if (!enabled || speed === 0)
482
+ return;
483
+ const container = this.floatRef().nativeElement;
484
+ const offsetTime = offset + clock.getElapsedTime();
485
+ container.rotation.x = (Math.cos((offsetTime / 4) * speed) / 8) * rotationIntensity;
486
+ container.rotation.y = (Math.sin((offsetTime / 4) * speed) / 8) * rotationIntensity;
487
+ container.rotation.z = (Math.sin((offsetTime / 4) * speed) / 20) * rotationIntensity;
488
+ let yPosition = Math.sin((offsetTime / 4) * speed) / 10;
489
+ yPosition = MathUtils.mapLinear(yPosition, -0.1, 0.1, floatingRange[0] ?? -0.1, floatingRange[1] ?? 0.1);
490
+ container.position.y = yPosition * floatIntensity;
491
+ container.updateMatrix();
492
+ });
493
+ }
494
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsFloat, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
495
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.3", type: NgtsFloat, isStandalone: true, selector: "ngts-float", inputs: { floatRef: { classPropertyName: "floatRef", publicName: "floatRef", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: NgtsContent, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: `
496
+ <ngt-group [parameters]="parameters()">
497
+ <ngt-group [ref]="floatRef()" [matrixAutoUpdate]="false">
498
+ <ng-container [ngTemplateOutlet]="content()" />
499
+ </ngt-group>
500
+ </ngt-group>
501
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
502
+ }
503
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtsFloat, decorators: [{
504
+ type: Component,
505
+ args: [{
506
+ selector: 'ngts-float',
507
+ standalone: true,
508
+ template: `
509
+ <ngt-group [parameters]="parameters()">
510
+ <ngt-group [ref]="floatRef()" [matrixAutoUpdate]="false">
511
+ <ng-container [ngTemplateOutlet]="content()" />
512
+ </ngt-group>
513
+ </ngt-group>
514
+ `,
515
+ imports: [NgTemplateOutlet],
516
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
517
+ changeDetection: ChangeDetectionStrategy.OnPush,
518
+ }]
519
+ }], ctorParameters: () => [] });
4
520
 
5
521
  function getFormatString(format) {
6
522
  switch (format) {
@@ -49,5 +565,5 @@ function injectMatcapTexture(id = () => 0, { format = () => 1024, onLoad, inject
49
565
  * Generated bundle index. Do not edit.
50
566
  */
51
567
 
52
- export { injectMatcapTexture };
568
+ export { ENVIRONMENT_PRESETS, NgtsEnvironment, NgtsEnvironmentCube, NgtsEnvironmentGround, NgtsEnvironmentMap, NgtsEnvironmentOptionsProvider, NgtsEnvironmentPortal, NgtsFloat, injectEnvironment, injectMatcapTexture };
53
569
  //# sourceMappingURL=angular-three-soba-staging.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-soba-staging.mjs","sources":["../../../../libs/soba/staging/src/lib/matcap-texture.ts","../../../../libs/soba/staging/src/angular-three-soba-staging.ts"],"sourcesContent":["import { Injector, computed, signal } from '@angular/core';\nimport { injectTextureLoader } from 'angular-three-soba/loaders';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { Texture } from 'three';\n\nfunction getFormatString(format: number) {\n\tswitch (format) {\n\t\tcase 64:\n\t\t\treturn '-64px';\n\t\tcase 128:\n\t\t\treturn '-128px';\n\t\tcase 256:\n\t\t\treturn '-256px';\n\t\tcase 512:\n\t\t\treturn '-512px';\n\t\tdefault:\n\t\t\treturn '';\n\t}\n}\n\nconst LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';\n\nexport function injectMatcapTexture(\n\tid: () => number | string = () => 0,\n\t{\n\t\tformat = () => 1024,\n\t\tonLoad,\n\t\tinjector,\n\t}: { format?: () => number; onLoad?: (texture: Texture[]) => void; injector?: Injector } = {},\n) {\n\treturn assertInjector(injectMatcapTexture, injector, () => {\n\t\tconst matcapList = signal<Record<string, string>>({});\n\n\t\tfetch(LIST_URL)\n\t\t\t.then((res) => res.json())\n\t\t\t.then((list) => {\n\t\t\t\tmatcapList.set(list);\n\t\t\t});\n\n\t\tconst DEFAULT_MATCAP = computed(() => matcapList()[0]);\n\t\tconst numTot = computed(() => Object.keys(matcapList()).length);\n\n\t\tconst fileHash = computed(() => {\n\t\t\tconst idValue = id();\n\t\t\tif (typeof idValue === 'string') {\n\t\t\t\treturn idValue;\n\t\t\t}\n\n\t\t\tif (typeof idValue === 'number') {\n\t\t\t\treturn matcapList()[idValue];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t});\n\n\t\tconst fileName = computed(() => `${fileHash() || DEFAULT_MATCAP()}${getFormatString(format())}.png`);\n\t\tconst url = computed(() => `${MATCAP_ROOT}/${format()}/${fileName()}`);\n\n\t\tconst matcapTexture = injectTextureLoader(url, { onLoad });\n\n\t\treturn { url, texture: matcapTexture, numTot };\n\t});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAKA,SAAS,eAAe,CAAC,MAAc,EAAA;IACtC,QAAQ,MAAM;AACb,QAAA,KAAK,EAAE;AACN,YAAA,OAAO,OAAO,CAAC;AAChB,QAAA,KAAK,GAAG;AACP,YAAA,OAAO,QAAQ,CAAC;AACjB,QAAA,KAAK,GAAG;AACP,YAAA,OAAO,QAAQ,CAAC;AACjB,QAAA,KAAK,GAAG;AACP,YAAA,OAAO,QAAQ,CAAC;AACjB,QAAA;AACC,YAAA,OAAO,EAAE,CAAC;KACX;AACF,CAAC;AAED,MAAM,QAAQ,GAAG,oEAAoE,CAAC;AACtF,MAAM,WAAW,GAAG,wFAAwF,CAAC;AAEvG,SAAU,mBAAmB,CAClC,EAAA,GAA4B,MAAM,CAAC,EACnC,EACC,MAAM,GAAG,MAAM,IAAI,EACnB,MAAM,EACN,QAAQ,GAAA,GACkF,EAAE,EAAA;AAE7F,IAAA,OAAO,cAAc,CAAC,mBAAmB,EAAE,QAAQ,EAAE,MAAK;AACzD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAyB,EAAE,CAAC,CAAC;QAEtD,KAAK,CAAC,QAAQ,CAAC;aACb,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AACzB,aAAA,IAAI,CAAC,CAAC,IAAI,KAAI;AACd,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,SAAC,CAAC,CAAC;AAEJ,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC;AACrB,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAChC,gBAAA,OAAO,OAAO,CAAC;aACf;AAED,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAChC,gBAAA,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;aAC7B;AAED,YAAA,OAAO,IAAI,CAAC;AACb,SAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE,IAAI,cAAc,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAM,IAAA,CAAA,CAAC,CAAC;AACrG,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,MAAM,EAAE,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA,CAAE,CAAC,CAAC;QAEvE,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAE3D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;AAChD,KAAC,CAAC,CAAC;AACJ;;AC/DA;;AAEG;;;;"}
1
+ {"version":3,"file":"angular-three-soba-staging.mjs","sources":["../../../../libs/soba/staging/src/lib/environment.ts","../../../../libs/soba/staging/src/lib/float.ts","../../../../libs/soba/staging/src/lib/matcap-texture.ts","../../../../libs/soba/staging/src/angular-three-soba-staging.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tChangeDetectionStrategy,\n\tComponent,\n\tDirective,\n\tElementRef,\n\tInjector,\n\tTemplateRef,\n\tafterNextRender,\n\tcomputed,\n\tcontentChild,\n\tinject,\n\tinput,\n\tsignal,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport { GainMapLoader, HDRJPGLoader } from '@monogrid/gainmap-js';\nimport {\n\tNgtArgs,\n\tNgtPortal,\n\tNgtPortalContent,\n\tapplyProps,\n\textend,\n\tinjectLoader,\n\tinjectNextBeforeRender,\n\tinjectNgtStore,\n\tis,\n\tprepare,\n} from 'angular-three';\nimport { LinearEncoding, NgtsContent, TextureEncoding, sRGBEncoding } from 'angular-three-soba/misc';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { injectAutoEffect } from 'ngxtension/auto-effect';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport {\n\tCubeCamera,\n\tCubeReflectionMapping,\n\tCubeTexture,\n\tCubeTextureLoader,\n\tEquirectangularReflectionMapping,\n\tEuler,\n\tHalfFloatType,\n\tLoader,\n\tScene,\n\tTexture,\n\tWebGLCubeRenderTarget,\n} from 'three';\nimport { EXRLoader, GroundProjectedEnv, RGBELoader } from 'three-stdlib';\n\nconst CUBEMAP_ROOT = 'https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/';\n\nexport const ENVIRONMENT_PRESETS = {\n\tapartment: 'lebombo_1k.hdr',\n\tcity: 'potsdamer_platz_1k.hdr',\n\tdawn: 'kiara_1_dawn_1k.hdr',\n\tforest: 'forest_slope_1k.hdr',\n\tlobby: 'st_fagans_interior_1k.hdr',\n\tnight: 'dikhololo_night_1k.hdr',\n\tpark: 'rooitou_park_1k.hdr',\n\tstudio: 'studio_small_03_1k.hdr',\n\tsunset: 'venice_sunset_1k.hdr',\n\twarehouse: 'empty_warehouse_01_1k.hdr',\n};\n\nexport type NgtsEnvironmentPresets = keyof typeof ENVIRONMENT_PRESETS;\n\nfunction resolveScene(scene: Scene | ElementRef<Scene>) {\n\treturn is.ref(scene) ? scene.nativeElement : scene;\n}\n\nfunction setEnvProps(\n\tbackground: boolean | 'only',\n\tscene: Scene | ElementRef<Scene> | undefined,\n\tdefaultScene: Scene,\n\ttexture: Texture,\n\tsceneProps: Partial<NgtsEnvironmentOptions> = {},\n) {\n\tsceneProps.backgroundBlurriness ??= sceneProps.blur ?? 0;\n\tsceneProps.backgroundIntensity ??= 1;\n\t// @ts-expect-error - it's ok, we're sending through applyProps\n\tsceneProps.backgroundRotation ??= [0, 0, 0];\n\tsceneProps.environmentIntensity ??= 1;\n\t// @ts-expect-error - it's ok, we're sending through applyProps\n\tsceneProps.environmentRotation ??= [0, 0, 0];\n\n\tconst target = resolveScene(scene || defaultScene);\n\tconst oldbg = target.background;\n\tconst oldenv = target.environment;\n\tconst oldSceneProps = {\n\t\tbackgroundBlurriness: target.backgroundBlurriness,\n\t\tbackgroundIntensity: target.backgroundIntensity,\n\t\tbackgroundRotation: target.backgroundRotation?.clone?.() ?? [0, 0, 0],\n\t\tenvironmentIntensity: target.environmentIntensity,\n\t\tenvironmentRotation: target.environmentRotation?.clone?.() ?? [0, 0, 0],\n\t};\n\n\tif (background !== 'only') target.environment = texture;\n\tif (background) target.background = texture;\n\tapplyProps(target, sceneProps);\n\n\treturn () => {\n\t\tif (background !== 'only') target.environment = oldenv;\n\t\tif (background) target.background = oldbg;\n\t\tapplyProps(target, oldSceneProps);\n\t};\n}\n\nexport interface NgtsInjectEnvironmentOptions {\n\tfiles: string | string[];\n\tpath: string;\n\tpreset?: NgtsEnvironmentPresets;\n\textensions?: (loader: Loader) => void;\n\tencoding?: TextureEncoding;\n}\n\nexport function injectEnvironment(\n\toptions: () => Partial<NgtsInjectEnvironmentOptions> = () => ({}),\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(injectEnvironment, injector, () => {\n\t\tconst adjustedOptions = computed(() => {\n\t\t\tlet { files, path, preset, extensions, encoding } = options();\n\n\t\t\tif (files == null) {\n\t\t\t\tfiles = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'];\n\t\t\t}\n\n\t\t\tif (path == null) {\n\t\t\t\tpath = '';\n\t\t\t}\n\n\t\t\tif (preset) {\n\t\t\t\tif (!(preset in ENVIRONMENT_PRESETS))\n\t\t\t\t\tthrow new Error('Preset must be one of: ' + Object.keys(ENVIRONMENT_PRESETS).join(', '));\n\t\t\t\tfiles = ENVIRONMENT_PRESETS[preset];\n\t\t\t\tpath = CUBEMAP_ROOT;\n\t\t\t}\n\n\t\t\treturn { files, preset, encoding, path, extensions };\n\t\t});\n\n\t\tconst resultOptions = computed(() => {\n\t\t\tconst { files } = adjustedOptions();\n\t\t\tconst multiFile = Array.isArray(files);\n\n\t\t\tconst isCubeMap = multiFile && files.length === 6;\n\t\t\tconst isGainmain = multiFile && files.length === 3 && files.some((file) => file.endsWith('json'));\n\t\t\tconst firstEntry = multiFile ? files[0] : files;\n\n\t\t\tconst extension = isCubeMap\n\t\t\t\t? 'cube'\n\t\t\t\t: isGainmain\n\t\t\t\t\t? 'webp'\n\t\t\t\t\t: firstEntry.startsWith('data:application/exr')\n\t\t\t\t\t\t? 'exr'\n\t\t\t\t\t\t: firstEntry.startsWith('data:application/hdr')\n\t\t\t\t\t\t\t? 'hdr'\n\t\t\t\t\t\t\t: firstEntry.startsWith('data:image/jpeg')\n\t\t\t\t\t\t\t\t? 'jpg'\n\t\t\t\t\t\t\t\t: firstEntry.split('.').pop()?.split('?')?.shift()?.toLowerCase();\n\t\t\treturn { multiFile, extension, isCubeMap };\n\t\t});\n\n\t\tconst loader = computed(() => {\n\t\t\tconst { extension } = resultOptions();\n\t\t\tconst loader =\n\t\t\t\textension === 'cube'\n\t\t\t\t\t? CubeTextureLoader\n\t\t\t\t\t: extension === 'hdr'\n\t\t\t\t\t\t? RGBELoader\n\t\t\t\t\t\t: extension === 'exr'\n\t\t\t\t\t\t\t? EXRLoader\n\t\t\t\t\t\t\t: extension === 'jpg' || extension === 'jpeg'\n\t\t\t\t\t\t\t\t? (HDRJPGLoader as unknown as typeof Loader)\n\t\t\t\t\t\t\t\t: extension === 'webp'\n\t\t\t\t\t\t\t\t\t? (GainMapLoader as unknown as typeof Loader)\n\t\t\t\t\t\t\t\t\t: null;\n\n\t\t\tif (!loader) {\n\t\t\t\tthrow new Error('injectEnvironment: Unrecognized file extension: ' + extension);\n\t\t\t}\n\n\t\t\treturn loader as typeof Loader;\n\t\t});\n\n\t\tconst assertedInjector = inject(Injector);\n\t\tconst autoEffect = injectAutoEffect();\n\t\tconst store = injectNgtStore();\n\t\tconst gl = store.select('gl');\n\n\t\tconst texture = signal<Texture | CubeTexture | null>(null);\n\t\tafterNextRender(() => {\n\t\t\tconst result = injectLoader(\n\t\t\t\tloader,\n\t\t\t\t// @ts-expect-error\n\t\t\t\t() => {\n\t\t\t\t\tconst { files } = adjustedOptions();\n\t\t\t\t\treturn Array.isArray(files) ? [files] : files;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tinjector: assertedInjector,\n\t\t\t\t\textensions: (loader) => {\n\t\t\t\t\t\tconst { extensions, path } = adjustedOptions();\n\t\t\t\t\t\tconst { extension } = resultOptions();\n\t\t\t\t\t\tif (extension === 'webp' || extension === 'jpg' || extension === 'jpeg') {\n\t\t\t\t\t\t\t// @ts-expect-error - Gainmap requires a renderer\n\t\t\t\t\t\t\tloader.setRenderer(gl());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tloader.setPath?.(path);\n\t\t\t\t\t\tif (extensions) extensions(loader);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\t//\n\t\t\tautoEffect(() => {\n\t\t\t\tconst loaderResult = result();\n\t\t\t\tif (!loaderResult) return;\n\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tconst { multiFile, extension, isCubeMap } = resultOptions();\n\t\t\t\t\tconst { encoding } = adjustedOptions();\n\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tlet textureResult = (multiFile ? loaderResult[0] : loaderResult) as Texture | CubeTexture;\n\n\t\t\t\t\tif (extension === 'jpg' || extension === 'jpeg' || extension === 'webp') {\n\t\t\t\t\t\ttextureResult = (textureResult as any).renderTarget?.texture;\n\t\t\t\t\t}\n\n\t\t\t\t\ttextureResult.mapping = isCubeMap ? CubeReflectionMapping : EquirectangularReflectionMapping;\n\n\t\t\t\t\tif ('colorSpace' in textureResult)\n\t\t\t\t\t\t(textureResult as any).colorSpace = encoding ?? isCubeMap ? 'srgb' : 'srgb-linear';\n\t\t\t\t\telse (textureResult as any).encoding = encoding ?? isCubeMap ? sRGBEncoding : LinearEncoding;\n\n\t\t\t\t\ttexture.set(textureResult);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\treturn texture.asReadonly();\n\t});\n}\n\nexport interface NgtsEnvironmentOptions extends Partial<NgtsInjectEnvironmentOptions> {\n\tframes?: number;\n\tnear?: number;\n\tfar?: number;\n\tresolution?: number;\n\tbackground?: boolean | 'only';\n\n\t/** deprecated, use backgroundBlurriness */\n\tblur?: number;\n\tbackgroundBlurriness?: number;\n\tbackgroundIntensity?: number;\n\tbackgroundRotation?: Euler;\n\tenvironmentIntensity?: number;\n\tenvironmentRotation?: Euler;\n\n\tmap?: Texture;\n\tpreset?: NgtsEnvironmentPresets;\n\tscene?: Scene | ElementRef<Scene>;\n\tground?: boolean | { radius?: number; height?: number; scale?: number };\n}\n\n@Directive({ standalone: true })\nexport class NgtsEnvironmentOptionsProvider {\n\toptions = input({} as NgtsEnvironmentOptions);\n\n\tautoEffect = injectAutoEffect();\n\tstore = injectNgtStore();\n\tdefaultScene = this.store.select('scene');\n\n\tenvConfig = computed(() => {\n\t\tconst {\n\t\t\tbackground = false,\n\t\t\tscene,\n\t\t\tblur,\n\t\t\tbackgroundBlurriness,\n\t\t\tbackgroundIntensity,\n\t\t\tbackgroundRotation,\n\t\t\tenvironmentIntensity,\n\t\t\tenvironmentRotation,\n\t\t} = this.options();\n\n\t\treturn {\n\t\t\tbackground,\n\t\t\tscene,\n\t\t\tblur,\n\t\t\tbackgroundBlurriness,\n\t\t\tbackgroundIntensity,\n\t\t\tbackgroundRotation,\n\t\t\tenvironmentIntensity,\n\t\t\tenvironmentRotation,\n\t\t};\n\t});\n}\n\nconst defaultBackground: NgtsEnvironmentOptions = {\n\tbackground: false,\n};\n\n@Directive({ standalone: true, selector: 'ngts-environment-map' })\nexport class NgtsEnvironmentMap {\n\toptions = input(defaultBackground, { transform: mergeInputs(defaultBackground) });\n\n\tautoEffect = injectAutoEffect();\n\tstore = injectNgtStore();\n\tdefaultScene = this.store.select('scene');\n\n\tenvConfig = computed(() => {\n\t\tconst {\n\t\t\tbackground = false,\n\t\t\tscene,\n\t\t\tblur,\n\t\t\tbackgroundBlurriness,\n\t\t\tbackgroundIntensity,\n\t\t\tbackgroundRotation,\n\t\t\tenvironmentIntensity,\n\t\t\tenvironmentRotation,\n\t\t} = this.options();\n\n\t\treturn {\n\t\t\tbackground,\n\t\t\tscene,\n\t\t\tblur,\n\t\t\tbackgroundBlurriness,\n\t\t\tbackgroundIntensity,\n\t\t\tbackgroundRotation,\n\t\t\tenvironmentIntensity,\n\t\t\tenvironmentRotation,\n\t\t};\n\t});\n\n\tmap = computed(() => this.options().map);\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis.autoEffect(() => {\n\t\t\t\tconst map = this.map();\n\t\t\t\tif (!map) return;\n\t\t\t\tconst { background = false, scene, ...config } = this.envConfig();\n\t\t\t\treturn setEnvProps(background, scene, this.defaultScene(), map, config);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Directive({ standalone: true, selector: 'ngts-environment-cube' })\nexport class NgtsEnvironmentCube {\n\toptions = input(defaultBackground, { transform: mergeInputs(defaultBackground) });\n\n\tautoEffect = injectAutoEffect();\n\tstore = injectNgtStore();\n\tdefaultScene = this.store.select('scene');\n\n\tenvConfig = computed(() => {\n\t\tconst {\n\t\t\tbackground = false,\n\t\t\tscene,\n\t\t\tblur,\n\t\t\tbackgroundBlurriness,\n\t\t\tbackgroundIntensity,\n\t\t\tbackgroundRotation,\n\t\t\tenvironmentIntensity,\n\t\t\tenvironmentRotation,\n\t\t} = this.options();\n\n\t\treturn {\n\t\t\tbackground,\n\t\t\tscene,\n\t\t\tblur,\n\t\t\tbackgroundBlurriness,\n\t\t\tbackgroundIntensity,\n\t\t\tbackgroundRotation,\n\t\t\tenvironmentIntensity,\n\t\t\tenvironmentRotation,\n\t\t};\n\t});\n\n\tenvironmentOptions = computed(() => {\n\t\tconst { encoding, preset, files, path, extensions } = this.options();\n\t\treturn { encoding, preset, files, path, extensions };\n\t});\n\ttexture = injectEnvironment(this.environmentOptions);\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis.autoEffect(() => {\n\t\t\t\tconst texture = this.texture();\n\t\t\t\tif (!texture) return;\n\t\t\t\tconst { background = false, scene, ...config } = this.envConfig();\n\t\t\t\treturn setEnvProps(background, scene, this.defaultScene(), texture, config);\n\t\t\t});\n\t\t});\n\t}\n}\n\n@Component({\n\tselector: 'ngts-environment-portal',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-portal [container]=\"virtualScene\">\n\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" />\n\n\t\t\t<ngt-cube-camera #cubeCamera *args=\"cameraArgs()\" />\n\n\t\t\t@if (files() || preset()) {\n\t\t\t\t<ngts-environment-cube [options]=\"envCubeOptions()\" />\n\t\t\t} @else if (map()) {\n\t\t\t\t<ngts-environment-map [options]=\"envMapOptions()\" />\n\t\t\t}\n\t\t</ngt-portal>\n\t`,\n\timports: [NgtsEnvironmentCube, NgtsEnvironmentMap, NgtArgs, NgtPortal, NgtPortalContent, NgTemplateOutlet],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsEnvironmentPortal {\n\tprivate defaultOptions: NgtsEnvironmentOptions = {\n\t\tnear: 1,\n\t\tfar: 1000,\n\t\tresolution: 256,\n\t\tframes: 1,\n\t\tbackground: false,\n\t};\n\toptions = input(this.defaultOptions, { transform: mergeInputs(this.defaultOptions) });\n\tcontent = input.required<TemplateRef<unknown>>();\n\n\tautoEffect = injectAutoEffect();\n\tstore = injectNgtStore();\n\tdefaultScene = this.store.select('scene');\n\tgl = this.store.select('gl');\n\n\tcamera = viewChild.required<ElementRef<CubeCamera>>('cubeCamera');\n\n\tmap = computed(() => this.options().map);\n\textensions = computed(() => this.options().extensions);\n\tfiles = computed(() => this.options().files);\n\tpath = computed(() => this.options().path);\n\tpreset = computed(() => this.options().preset);\n\n\tenvMapOptions = computed(() => ({ background: true, map: this.map(), extensions: this.extensions() }));\n\tenvCubeOptions = computed(() => ({\n\t\tbackground: true,\n\t\tfiles: this.files(),\n\t\tpreset: this.preset(),\n\t\textensions: this.extensions(),\n\t}));\n\n\tprivate near = computed(() => this.options().near);\n\tprivate far = computed(() => this.options().far);\n\tprivate resolution = computed(() => this.options().resolution);\n\tprivate fbo = computed(() => {\n\t\tconst fbo = new WebGLCubeRenderTarget(this.resolution());\n\t\tfbo.texture.type = HalfFloatType;\n\t\treturn fbo;\n\t});\n\n\tcameraArgs = computed(() => [this.near(), this.far(), this.fbo()]);\n\n\tvirtualScene = prepare(new Scene());\n\n\tconstructor() {\n\t\textend({ CubeCamera });\n\t\tafterNextRender(() => {\n\t\t\tthis.autoEffect(() => {\n\t\t\t\tconst camera = this.camera();\n\t\t\t\tif (!camera.nativeElement) return;\n\n\t\t\t\tconst [\n\t\t\t\t\t{\n\t\t\t\t\t\tframes,\n\t\t\t\t\t\tbackground = false,\n\t\t\t\t\t\tscene,\n\t\t\t\t\t\tblur,\n\t\t\t\t\t\tbackgroundBlurriness,\n\t\t\t\t\t\tbackgroundIntensity,\n\t\t\t\t\t\tbackgroundRotation,\n\t\t\t\t\t\tenvironmentIntensity,\n\t\t\t\t\t\tenvironmentRotation,\n\t\t\t\t\t},\n\t\t\t\t\tgl,\n\t\t\t\t\tfbo,\n\t\t\t\t\tdefaultScene,\n\t\t\t\t] = [this.options(), this.gl(), this.fbo(), this.defaultScene()];\n\t\t\t\tif (frames === 1) {\n\t\t\t\t\tcamera.nativeElement.update(gl, this.virtualScene);\n\t\t\t\t}\n\t\t\t\treturn setEnvProps(background, scene, defaultScene, fbo.texture, {\n\t\t\t\t\tblur,\n\t\t\t\t\tbackgroundBlurriness,\n\t\t\t\t\tbackgroundIntensity,\n\t\t\t\t\tbackgroundRotation,\n\t\t\t\t\tenvironmentIntensity,\n\t\t\t\t\tenvironmentRotation,\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet count = 1;\n\t\tinjectNextBeforeRender(() => {\n\t\t\tconst frames = this.options().frames;\n\t\t\tif (frames === Infinity || (frames != null && count < frames)) {\n\t\t\t\tconst camera = this.camera().nativeElement;\n\t\t\t\tif (camera) {\n\t\t\t\t\tcamera.update(this.gl(), this.virtualScene);\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n@Component({\n\tselector: 'ngts-environment-ground',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngts-environment-map [options]=\"envMapOptions()\" />\n\t\t<ngt-ground-projected-env *args=\"args()\" [scale]=\"scale()\" [height]=\"height()\" [radius]=\"radius()\" />\n\t`,\n\timports: [NgtsEnvironmentMap, NgtArgs],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsEnvironmentGround {\n\toptions = input({} as NgtsEnvironmentOptions);\n\n\tprivate defaultTexture = injectEnvironment(this.options);\n\tprivate texture = computed(() => this.options().map || this.defaultTexture());\n\n\targs = computed(() => [this.texture()]);\n\theight = computed(() => (this.options().ground as any)?.height);\n\tradius = computed(() => (this.options().ground as any)?.radius);\n\tscale = computed(() => (this.options().ground as any)?.scale ?? 1000);\n\n\tenvMapOptions = computed(() => {\n\t\tconst { map: _, ...options } = this.options();\n\t\treturn Object.assign(options, { map: this.texture() }) as NgtsEnvironmentOptions;\n\t});\n\n\tconstructor() {\n\t\textend({ GroundProjectedEnv });\n\t}\n}\n\n@Component({\n\tselector: 'ngts-environment',\n\tstandalone: true,\n\ttemplate: `\n\t\t@if (optionsProvider.options().ground) {\n\t\t\t<ngts-environment-ground [options]=\"optionsProvider.options()\" />\n\t\t} @else if (optionsProvider.options().map) {\n\t\t\t<ngts-environment-map [options]=\"optionsProvider.options()\" />\n\t\t} @else if (content()) {\n\t\t\t<ngts-environment-portal [options]=\"optionsProvider.options()\" [content]=\"$any(content())\" />\n\t\t} @else {\n\t\t\t<ngts-environment-cube [options]=\"optionsProvider.options()\" />\n\t\t}\n\t`,\n\timports: [NgtsEnvironmentCube, NgtsEnvironmentMap, NgtsEnvironmentPortal, NgtsEnvironmentGround],\n\thostDirectives: [{ directive: NgtsEnvironmentOptionsProvider, inputs: ['options'] }],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsEnvironment {\n\toptionsProvider = inject(NgtsEnvironmentOptionsProvider);\n\tcontent = contentChild(NgtsContent, { read: TemplateRef });\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tChangeDetectionStrategy,\n\tComponent,\n\tTemplateRef,\n\tcontentChild,\n\tinput,\n} from '@angular/core';\nimport { extend, injectNextBeforeRender, injectNgtRef, makeParameters } from 'angular-three';\nimport { NgtsContent } from 'angular-three-soba/misc';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { Group, MathUtils } from 'three';\n\nextend({ Group });\n\nexport interface NgtsFloatOptions extends Partial<Group> {\n\tenabled: boolean;\n\tspeed: number;\n\trotationIntensity: number;\n\tfloatIntensity: number;\n\tfloatingRange: [number?, number?];\n}\n\nconst defaultOptions: NgtsFloatOptions = {\n\tenabled: true,\n\tspeed: 1,\n\trotationIntensity: 1,\n\tfloatIntensity: 1,\n\tfloatingRange: [-0.1, 0.1],\n};\n\n@Component({\n\tselector: 'ngts-float',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group [parameters]=\"parameters()\">\n\t\t\t<ngt-group [ref]=\"floatRef()\" [matrixAutoUpdate]=\"false\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" />\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\timports: [NgTemplateOutlet],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsFloat {\n\tfloatRef = input(injectNgtRef<Group>());\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tparameters = makeParameters(this.options, [\n\t\t'enabled',\n\t\t'speed',\n\t\t'rotationIntensity',\n\t\t'floatIntensity',\n\t\t'floatingRange',\n\t]);\n\n\tcontent = contentChild.required(NgtsContent, { read: TemplateRef });\n\n\tconstructor() {\n\t\tconst offset = Math.random() * 10000;\n\t\tinjectNextBeforeRender(({ clock }) => {\n\t\t\tconst [{ enabled, speed, rotationIntensity, floatingRange, floatIntensity }] = [this.options()];\n\t\t\tif (!enabled || speed === 0) return;\n\n\t\t\tconst container = this.floatRef().nativeElement;\n\n\t\t\tconst offsetTime = offset + clock.getElapsedTime();\n\t\t\tcontainer.rotation.x = (Math.cos((offsetTime / 4) * speed) / 8) * rotationIntensity;\n\t\t\tcontainer.rotation.y = (Math.sin((offsetTime / 4) * speed) / 8) * rotationIntensity;\n\t\t\tcontainer.rotation.z = (Math.sin((offsetTime / 4) * speed) / 20) * rotationIntensity;\n\n\t\t\tlet yPosition = Math.sin((offsetTime / 4) * speed) / 10;\n\t\t\tyPosition = MathUtils.mapLinear(yPosition, -0.1, 0.1, floatingRange[0] ?? -0.1, floatingRange[1] ?? 0.1);\n\t\t\tcontainer.position.y = yPosition * floatIntensity;\n\t\t\tcontainer.updateMatrix();\n\t\t});\n\t}\n}\n","import { Injector, computed, signal } from '@angular/core';\nimport { injectTextureLoader } from 'angular-three-soba/loaders';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { Texture } from 'three';\n\nfunction getFormatString(format: number) {\n\tswitch (format) {\n\t\tcase 64:\n\t\t\treturn '-64px';\n\t\tcase 128:\n\t\t\treturn '-128px';\n\t\tcase 256:\n\t\t\treturn '-256px';\n\t\tcase 512:\n\t\t\treturn '-512px';\n\t\tdefault:\n\t\t\treturn '';\n\t}\n}\n\nconst LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';\n\nexport function injectMatcapTexture(\n\tid: () => number | string = () => 0,\n\t{\n\t\tformat = () => 1024,\n\t\tonLoad,\n\t\tinjector,\n\t}: { format?: () => number; onLoad?: (texture: Texture[]) => void; injector?: Injector } = {},\n) {\n\treturn assertInjector(injectMatcapTexture, injector, () => {\n\t\tconst matcapList = signal<Record<string, string>>({});\n\n\t\tfetch(LIST_URL)\n\t\t\t.then((res) => res.json())\n\t\t\t.then((list) => {\n\t\t\t\tmatcapList.set(list);\n\t\t\t});\n\n\t\tconst DEFAULT_MATCAP = computed(() => matcapList()[0]);\n\t\tconst numTot = computed(() => Object.keys(matcapList()).length);\n\n\t\tconst fileHash = computed(() => {\n\t\t\tconst idValue = id();\n\t\t\tif (typeof idValue === 'string') {\n\t\t\t\treturn idValue;\n\t\t\t}\n\n\t\t\tif (typeof idValue === 'number') {\n\t\t\t\treturn matcapList()[idValue];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t});\n\n\t\tconst fileName = computed(() => `${fileHash() || DEFAULT_MATCAP()}${getFormatString(format())}.png`);\n\t\tconst url = computed(() => `${MATCAP_ROOT}/${format()}/${fileName()}`);\n\n\t\tconst matcapTexture = injectTextureLoader(url, { onLoad });\n\n\t\treturn { url, texture: matcapTexture, numTot };\n\t});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}