angular-three-soba 1.2.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cameras/README.md +3 -0
- package/cameras/index.d.ts +3 -0
- package/cameras/lib/camera/camera-content.d.ts +13 -0
- package/cameras/lib/camera/camera.d.ts +19 -0
- package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +17 -0
- package/cameras/lib/perspective-camera/perspective-camera.d.ts +9 -0
- package/esm2020/cameras/angular-three-soba-cameras.mjs +5 -0
- package/esm2020/cameras/index.mjs +4 -0
- package/esm2020/cameras/lib/camera/camera-content.mjs +20 -0
- package/esm2020/cameras/lib/camera/camera.mjs +74 -0
- package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +92 -0
- package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +46 -0
- package/esm2020/misc/index.mjs +2 -1
- package/esm2020/misc/lib/fbo/fbo.mjs +38 -0
- package/esm2020/performance/lib/stats/stats.mjs +4 -2
- package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +14 -12
- package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +6 -3
- package/fesm2015/angular-three-soba-cameras.mjs +224 -0
- package/fesm2015/angular-three-soba-cameras.mjs.map +1 -0
- package/fesm2015/angular-three-soba-misc.mjs +34 -2
- package/fesm2015/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2015/angular-three-soba-performance.mjs +3 -1
- package/fesm2015/angular-three-soba-performance.mjs.map +1 -1
- package/fesm2015/angular-three-soba-staging.mjs +17 -12
- package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2020/angular-three-soba-cameras.mjs +224 -0
- package/fesm2020/angular-three-soba-cameras.mjs.map +1 -0
- package/fesm2020/angular-three-soba-misc.mjs +38 -2
- package/fesm2020/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2020/angular-three-soba-performance.mjs +3 -1
- package/fesm2020/angular-three-soba-performance.mjs.map +1 -1
- package/fesm2020/angular-three-soba-staging.mjs +17 -12
- package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
- package/misc/index.d.ts +1 -0
- package/misc/lib/fbo/fbo.d.ts +13 -0
- package/package.json +11 -1
- package/plugin/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Component, CUSTOM_ELEMENTS_SCHEMA, Directive, inject, InjectionToken, Input } from '@angular/core';
|
|
2
|
-
import { extend, getLocalState,
|
|
2
|
+
import { extend, getLocalState, injectNgtRef, NgtRxStore, NgtStore } from 'angular-three';
|
|
3
3
|
import { shaderMaterial } from 'angular-three-soba/shaders';
|
|
4
|
-
import { combineLatest } from 'rxjs';
|
|
4
|
+
import { combineLatest, Subject } from 'rxjs';
|
|
5
5
|
import * as THREE from 'three';
|
|
6
6
|
import { Group, Mesh, PlaneGeometry } from 'three';
|
|
7
7
|
import { ProgressiveLightMap } from './progressive-light-map';
|
|
@@ -17,7 +17,7 @@ const SoftShadowMaterial = shaderMaterial({
|
|
|
17
17
|
`
|
|
18
18
|
varying vec2 vUv;
|
|
19
19
|
void main() {
|
|
20
|
-
gl_Position = projectionMatrix * viewMatrix *
|
|
20
|
+
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
|
|
21
21
|
vUv = uv;
|
|
22
22
|
}
|
|
23
23
|
`,
|
|
@@ -30,7 +30,7 @@ uniform float blend;
|
|
|
30
30
|
uniform float opacity;
|
|
31
31
|
uniform float alphaTest;
|
|
32
32
|
void main() {
|
|
33
|
-
vec4
|
|
33
|
+
vec4 sampledDiffuseColor = texture2D(map, vUv);
|
|
34
34
|
gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);
|
|
35
35
|
#include <tonemapping_fragment>
|
|
36
36
|
#include <encodings_fragment>
|
|
@@ -90,6 +90,7 @@ function accumulativeShadowsApiFactory(accumulativeShadows) {
|
|
|
90
90
|
: accumulativeShadows.get('frames')),
|
|
91
91
|
},
|
|
92
92
|
});
|
|
93
|
+
const subject = new Subject();
|
|
93
94
|
accumulativeShadows.hold(accumulativeShadows.meshRef.$, (mesh) => {
|
|
94
95
|
accumulativeShadows.pLM.configure(mesh);
|
|
95
96
|
accumulativeShadows.hold(combineLatest([accumulativeShadows.select(), getLocalState(store.get('scene')).objects]), () => {
|
|
@@ -99,13 +100,14 @@ function accumulativeShadowsApiFactory(accumulativeShadows) {
|
|
|
99
100
|
if (!api.temporal && api.frames !== Infinity)
|
|
100
101
|
api.update(api.blend);
|
|
101
102
|
});
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
103
|
+
accumulativeShadows.effect(subject, () => store.get('internal').subscribe(() => {
|
|
104
|
+
const limit = accumulativeShadows.get('limit');
|
|
105
|
+
if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {
|
|
106
|
+
api.update();
|
|
107
|
+
api.count++;
|
|
108
|
+
}
|
|
109
|
+
}));
|
|
110
|
+
subject.next();
|
|
109
111
|
});
|
|
110
112
|
return api;
|
|
111
113
|
}
|
|
@@ -273,4 +275,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
|
|
|
273
275
|
}], toneMapped: [{
|
|
274
276
|
type: Input
|
|
275
277
|
}] } });
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9saWIvYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUU5RCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FDckM7SUFDSSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsU0FBUyxFQUFFLElBQUk7SUFDZixPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxJQUFJO0NBQ1o7QUFDRCxnQkFBZ0I7QUFDaEI7Ozs7OztHQU1EO0FBQ0MsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7Ozs7O0dBYUQsQ0FDRixDQUFDO0FBU0YsTUFBTSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFB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RSw2QkFBNkI7NEJBQ3RDLFVBQVUsRUFBRSw2QkFBNkI7NEJBQ3pDLElBQUksRUFBRSx5QkFBeUI7eUJBQ2xDO3FCQUNKO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFhZ0IsTUFBTTtzQkFBbEIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSztnQkFLTyxRQUFRO3NCQUFwQixLQUFLO2dCQUtPLE9BQU87c0JBQW5CLEtBQUs7Z0JBS08sU0FBUztzQkFBckIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS08sVUFBVTtzQkFBdEIsS0FBSztnQkFLTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBEaXJlY3RpdmUsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0UmVmLCBOZ3RSeFN0b3JlLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IFByb2dyZXNzaXZlTGlnaHRNYXAgfSBmcm9tICcuL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcCc7XG5cbmNvbnN0IFNvZnRTaGFkb3dNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHtcbiAgICAgICAgY29sb3I6IG5ldyBUSFJFRS5Db2xvcigpLFxuICAgICAgICBibGVuZDogMi4wLFxuICAgICAgICBhbHBoYVRlc3Q6IDAuNzUsXG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIG1hcDogbnVsbCxcbiAgICB9LFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiB2aWV3TWF0cml4ICogbW9kZUxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLik7XG4gIHZVdiA9IHV2O1xufVxuICBgLFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG52YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSB2ZWMzIGNvbG9yO1xudW5pZm9ybSBmbG9hdCBibGVuZDtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0O1xudm9pZCBtYWluKCkge1xuICB2ZWM0IHNhbXBsZURpZmZ1c2VDb2xvciA9IHRleHR1cmUyRChtYXAsIHZVdik6XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IgKiBzYW1wbGVkRGlmZnVzZUNvbG9yLnIgKiBibGVuZCwgbWF4KDAuMCwgKDEuMCAtIChzYW1wbGVkRGlmZnVzZUNvbG9yLnIgKyBzYW1wbGVkRGlmZnVzZUNvbG9yLmcgKyBzYW1wbGVkRGlmZnVzZUNvbG9yLmIpIC8gYWxwaGFUZXN0KSkgKiBvcGFjaXR5KTtcbiAgI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuICAjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxufVxuICBgXG4pO1xuXG50eXBlIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyA9IHtcbiAgICBtYXA6IFRIUkVFLlRleHR1cmU7XG4gICAgY29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIGFscGhhVGVzdD86IG51bWJlcjtcbiAgICBibGVuZD86IG51bWJlcjtcbn07XG5cbmV4dGVuZCh7IFNvZnRTaGFkb3dNYXRlcmlhbCwgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSk7XG5cbmV4cG9ydCB0eXBlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzTGlnaHRBcGkgPSB7IHVwZGF0ZTogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaSA9IHtcbiAgICBsaWdodHM6IE1hcDxzdHJpbmcsIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzTGlnaHRBcGk+O1xuICAgIHRlbXBvcmFsOiBib29sZWFuO1xuICAgIGZyYW1lczogbnVtYmVyO1xuICAgIGJsZW5kOiBudW1iZXI7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBnZXRNZXNoOiAoKSA9PiBUSFJFRS5NZXNoPFRIUkVFLlBsYW5lR2VvbWV0cnksIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyAmIFRIUkVFLlNoYWRlck1hdGVyaWFsPjtcbiAgICByZXNldDogKCkgPT4gdm9pZDtcbiAgICB1cGRhdGU6IChmcmFtZXM/OiBudW1iZXIpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgTkdUU19BQ0NVTVVMQVRJVkVfU0hBRE9XU19BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NBcGk+KFxuICAgICdOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyBBUEknXG4pO1xuXG5mdW5jdGlvbiBhY2N1bXVsYXRpdmVTaGFkb3dzQXBpRmFjdG9yeShhY2N1bXVsYXRpdmVTaGFkb3dzOiBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cykge1xuICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcblxuICAgIGNvbnN0IGFwaSA9IHtcbiAgICAgICAgbGlnaHRzOiBuZXcgTWFwKCksXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgICBnZXRNZXNoOiAoKSA9PlxuICAgICAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQgYXMgVEhSRUUuTWVzaDxcbiAgICAgICAgICAgICAgICBUSFJFRS5QbGFuZUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyAmIFRIUkVFLlNoYWRlck1hdGVyaWFsXG4gICAgICAgICAgICA+LFxuICAgICAgICByZXNldDogKCkgPT4ge1xuICAgICAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5wTE0uY2xlYXIoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsID0gYXBpLmdldE1lc2goKS5tYXRlcmlhbDtcbiAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSAwO1xuICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gMDtcbiAgICAgICAgICAgIGFwaS5jb3VudCA9IDA7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZTogKGZyYW1lcyA9IDEpID0+IHtcbiAgICAgICAgICAgIC8vIGFkYXB0IHRoZSBvcGFjaXR5IGJsZW5kIHJhdGlvIHRvIHRoZSBudW1iZXIgb2YgZnJhbWVzXG4gICAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IGFwaS5nZXRNZXNoKCkubWF0ZXJpYWw7XG4gICAgICAgICAgICBpZiAoIWFwaS50ZW1wb3JhbCkge1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSBhY2N1bXVsYXRpdmVTaGFkb3dzLmdldCgnb3BhY2l0eScpO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmFscGhhVGVzdCA9IGFjY3VtdWxhdGl2ZVNoYWRvd3MuZ2V0KCdhbHBoYVRlc3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwub3BhY2l0eSA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVTaGFkb3dzLmdldCgnb3BhY2l0eScpLFxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5vcGFjaXR5ICsgYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ29wYWNpdHknKSAvIGFwaS5ibGVuZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuZ2V0KCdhbHBoYVRlc3QnKSxcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ICsgYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ2FscGhhVGVzdCcpIC8gYXBpLmJsZW5kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3dpdGNoIGFjY3VtdWxhdGl2ZSBsaWdodHMgb25cbiAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgLy8gY29sbGVjdCBzY2VuZSBsaWdodHMgYW5kIG1lc2hlc1xuICAgICAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5wTE0ucHJlcGFyZSgpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGxpZ2h0bWFwIGFuZCB0aGUgYWNjdW11bGF0aXZlIGxpZ2h0c1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIGFwaS5saWdodHMuZm9yRWFjaCgobGlnaHQpID0+IGxpZ2h0LnVwZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVTaGFkb3dzLnBMTS51cGRhdGUoc3RvcmUuZ2V0KCdjYW1lcmEnKSwgYXBpLmJsZW5kKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3dpdGNoIGxpZ2h0cyBvZmZcbiAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIHJlc3RvcmUgbGlnaHRzIGFuZCBtZXNoZXNcbiAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MucExNLmZpbmlzaCgpO1xuICAgICAgICB9LFxuICAgIH0gYXMgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NBcGk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhcGksIHtcbiAgICAgICAgdGVtcG9yYWw6IHtcbiAgICAgICAgICAgIGdldDogKCkgPT4gISFhY2N1bXVsYXRpdmVTaGFkb3dzLmdldCgndGVtcG9yYWwnKSxcbiAgICAgICAgfSxcbiAgICAgICAgZnJhbWVzOiB7XG4gICAgICAgICAgICBnZXQ6ICgpID0+IE1hdGgubWF4KDIsIGFjY3VtdWxhdGl2ZVNoYWRvd3MuZ2V0KCdmcmFtZXMnKSksXG4gICAgICAgIH0sXG4gICAgICAgIGJsZW5kOiB7XG4gICAgICAgICAgICBnZXQ6ICgpID0+XG4gICAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuZ2V0KCdmcmFtZXMnKSA9PT0gSW5maW5pdHlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ2JsZW5kJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ2ZyYW1lcycpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuaG9sZChhY2N1bXVsYXRpdmVTaGFkb3dzLm1lc2hSZWYuJCwgKG1lc2gpID0+IHtcbiAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5wTE0uY29uZmlndXJlKG1lc2gpO1xuXG4gICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuaG9sZChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW2FjY3VtdWxhdGl2ZVNoYWRvd3Muc2VsZWN0KCksIGdldExvY2FsU3RhdGUoc3RvcmUuZ2V0KCdzY2VuZScpKS5vYmplY3RzXSksXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgaW50ZXJuYWxzLCBidWZmZXJzLCAuLi5cbiAgICAgICAgICAgICAgICBhcGkucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgbGlnaHRtYXBcbiAgICAgICAgICAgICAgICBpZiAoIWFwaS50ZW1wb3JhbCAmJiBhcGkuZnJhbWVzICE9PSBJbmZpbml0eSkgYXBpLnVwZGF0ZShhcGkuYmxlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcbiAgICAgICAgY29uc3QgbGltaXQgPSBhY2N1bXVsYXRpdmVTaGFkb3dzLmdldCgnbGltaXQnKTtcbiAgICAgICAgaWYgKGFwaS5nZXRNZXNoKCkgJiYgKGFwaS50ZW1wb3JhbCB8fCBhcGkuZnJhbWVzID09PSBJbmZpbml0eSkgJiYgYXBpLmNvdW50IDwgYXBpLmZyYW1lcyAmJiBhcGkuY291bnQgPCBsaW1pdCkge1xuICAgICAgICAgICAgYXBpLnVwZGF0ZSgpO1xuICAgICAgICAgICAgYXBpLmNvdW50Kys7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhcGk7XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25ndHMtYWNjdW11bGF0aXZlLXNoYWRvd3MtY29uc3VtZXInLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgQWNjdW11bGF0aXZlU2hhZG93c0NvbnN1bWVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaW5qZWN0KE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJKTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWdyb3VwIG5ndENvbXBvdW5kPlxuICAgICAgICAgICAgPG5ndC1ncm91cCBbcmVmXT1cImFjY3VtdWxhdGl2ZVNoYWRvd3NSZWZcIiBbdHJhdmVyc2VdPVwibnVsbFRyYXZlcnNlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgICAgICAgICA8bmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cy1jb25zdW1lciAvPlxuICAgICAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgICAgICAgICA8bmd0LW1lc2ggW3JlY2VpdmVTaGFkb3ddPVwidHJ1ZVwiIFtyZWZdPVwibWVzaFJlZlwiIFtzY2FsZV09XCJnZXQoJ3NjYWxlJylcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgMF1cIj5cbiAgICAgICAgICAgICAgICA8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG4gICAgICAgICAgICAgICAgPG5ndC1zb2Z0LXNoYWRvdy1tYXRlcmlhbFxuICAgICAgICAgICAgICAgICAgICBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZXB0aFdyaXRlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImdldCgnY29sb3InKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b25lTWFwcGVkXT1cImdldCgndG9uZU1hcHBlZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2JsZW5kXT1cImdldCgnY29sb3JCbGVuZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW21hcF09XCJwTE0ucHJvZ3Jlc3NpdmVMaWdodE1hcDIudGV4dHVyZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmd0LW1lc2g+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgaW1wb3J0czogW0FjY3VtdWxhdGl2ZVNoYWRvd3NDb25zdW1lcl0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogYWNjdW11bGF0aXZlU2hhZG93c0FwaUZhY3RvcnksXG4gICAgICAgICAgICBkZXBzOiBbTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NdLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyBleHRlbmRzIE5ndFJ4U3RvcmUge1xuICAgIHJlYWRvbmx5IG51bGxUcmF2ZXJzZSA9ICgpID0+IG51bGw7XG4gICAgcmVhZG9ubHkgTWF0aCA9IE1hdGg7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcblxuICAgIHJlYWRvbmx5IHBMTSA9IG5ldyBQcm9ncmVzc2l2ZUxpZ2h0TWFwKHRoaXMuc3RvcmUuZ2V0KCdnbCcpLCB0aGlzLnN0b3JlLmdldCgnc2NlbmUnKSwgdGhpcy5nZXQoJ3Jlc29sdXRpb24nKSk7XG5cbiAgICByZWFkb25seSBhY2N1bXVsYXRpdmVTaGFkb3dzUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLkdyb3VwPigpO1xuICAgIHJlYWRvbmx5IG1lc2hSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuTWVzaD4oKTtcblxuICAgIC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgY2FuIHJlbmRlciwgbW9yZSB5aWVsZHMgY2xlYW5lciByZXN1bHRzIGJ1dCB0YWtlcyBtb3JlIHRpbWUsIDQwICovXG4gICAgQElucHV0KCkgc2V0IGZyYW1lcyhmcmFtZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZyYW1lcyB9KTtcbiAgICB9XG5cbiAgICAvKiogSWYgZnJhbWVzID09PSBJbmZpbml0eSBibGVuZCBjb250cm9scyB0aGUgcmVmcmVzaCByYXRpbywgMTAwICovXG4gICAgQElucHV0KCkgc2V0IGJsZW5kKGJsZW5kOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBibGVuZCB9KTtcbiAgICB9XG5cbiAgICAvKiogQ2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgZnJhbWVzIHJlbmRlcmVkIGlmIGZyYW1lcyA9PT0gSW5maW5pdHksIHVzdWFsbHkgdG8gZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYmFjayBvbmNlIGEgbW92YWJsZSBzY2VuZSBoYXMgc2V0dGxlZCwgSW5maW5pdHkgKi9cbiAgICBASW5wdXQoKSBzZXQgbGltaXQobGltaXQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGxpbWl0IH0pO1xuICAgIH1cblxuICAgIC8qKiBTY2FsZSBvZiB0aGUgcGxhbmUsICAqL1xuICAgIEBJbnB1dCgpIHNldCBzY2FsZShzY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2NhbGUgfSk7XG4gICAgfVxuXG4gICAgLyoqIFRlbXBvcmFsIGFjY3VtdWxhdGVzIHNoYWRvd3Mgb3ZlciB0aW1lIHdoaWNoIGlzIG1vcmUgcGVyZm9ybWFudCBidXQgaGFzIGEgdmlzdWFsIHJlZ3Jlc3Npb24gb3ZlciBpbnN0YW50IHJlc3VsdHMsIGZhbHNlICAqL1xuICAgIEBJbnB1dCgpIHNldCB0ZW1wb3JhbCh0ZW1wb3JhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IHRlbXBvcmFsIH0pO1xuICAgIH1cblxuICAgIC8qKiBPcGFjaXR5IG9mIHRoZSBwbGFuZSwgMSAqL1xuICAgIEBJbnB1dCgpIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG9wYWNpdHkgfSk7XG4gICAgfVxuXG4gICAgLyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuICAgIEBJbnB1dCgpIHNldCBhbHBoYVRlc3QoYWxwaGFUZXN0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbHBoYVRlc3QgfSk7XG4gICAgfVxuXG4gICAgLyoqIFNoYWRvdyBjb2xvciwgYmxhY2sgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cblxuICAgIC8qKiBDb2xvcmJsZW5kLCBob3cgbXVjaCBjb2xvcnMgdHVybiB0byBibGFjaywgMCBpcyBibGFjaywgMiAqL1xuICAgIEBJbnB1dCgpIHNldCBjb2xvckJsZW5kKGNvbG9yQmxlbmQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yQmxlbmQgfSk7XG4gICAgfVxuXG4gICAgLyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG4gICAgQElucHV0KCkgc2V0IHJlc29sdXRpb24ocmVzb2x1dGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVzb2x1dGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuICAgIEBJbnB1dCgpIHNldCB0b25lTWFwcGVkKHRvbmVNYXBwZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0b25lTWFwcGVkIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgZnJhbWVzOiA0MCxcbiAgICAgICAgICAgIGxpbWl0OiBJbmZpbml0eSxcbiAgICAgICAgICAgIGJsZW5kOiAyMCxcbiAgICAgICAgICAgIHNjYWxlOiAxMCxcbiAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICBhbHBoYVRlc3Q6IDAuNzUsXG4gICAgICAgICAgICBjb2xvcjogJ2JsYWNrJyxcbiAgICAgICAgICAgIGNvbG9yQmxlbmQ6IDIsXG4gICAgICAgICAgICByZXNvbHV0aW9uOiAxMDI0LFxuICAgICAgICAgICAgdG9uZU1hcHBlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9saWIvYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFOUQsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQ3JDO0lBQ0ksS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtJQUN4QixLQUFLLEVBQUUsR0FBRztJQUNWLFNBQVMsRUFBRSxJQUFJO0lBQ2YsT0FBTyxFQUFFLENBQUM7SUFDVixHQUFHLEVBQUUsSUFBSTtDQUNaO0FBQ0QsZ0JBQWdCO0FBQ2hCOzs7Ozs7R0FNRDtBQUNDLGdCQUFnQjtBQUNoQjs7Ozs7Ozs7Ozs7OztHQWFELENBQ0YsQ0FBQztBQVNGLE1BQU0sQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUs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O29CQUNyQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FrQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQ3RDLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsNkJBQTZCOzRCQUN0QyxVQUFVLEVBQUUsNkJBQTZCOzRCQUN6QyxJQUFJLEVBQUUseUJBQXlCO3lCQUNsQztxQkFDSjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7OEJBYWdCLE1BQU07c0JBQWxCLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBS08sUUFBUTtzQkFBcEIsS0FBSztnQkFLTyxPQUFPO3NCQUFuQixLQUFLO2dCQUtPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSztnQkFLTyxVQUFVO3NCQUF0QixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS08sVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRGlyZWN0aXZlLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBnZXRMb2NhbFN0YXRlLCBpbmplY3ROZ3RSZWYsIE5ndFJ4U3RvcmUsIE5ndFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEdyb3VwLCBNZXNoLCBQbGFuZUdlb21ldHJ5IH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NpdmVMaWdodE1hcCB9IGZyb20gJy4vcHJvZ3Jlc3NpdmUtbGlnaHQtbWFwJztcblxuY29uc3QgU29mdFNoYWRvd01hdGVyaWFsID0gc2hhZGVyTWF0ZXJpYWwoXG4gICAge1xuICAgICAgICBjb2xvcjogbmV3IFRIUkVFLkNvbG9yKCksXG4gICAgICAgIGJsZW5kOiAyLjAsXG4gICAgICAgIGFscGhhVGVzdDogMC43NSxcbiAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgbWFwOiBudWxsLFxuICAgIH0sXG4gICAgLy8gbGFuZ3VhZ2U9R0xTTFxuICAgIGBcbnZhcnlpbmcgdmVjMiB2VXY7XG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNYXRyaXggKiBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuKTtcbiAgdlV2ID0gdXY7XG59XG4gIGAsXG4gICAgLy8gbGFuZ3VhZ2U9R0xTTFxuICAgIGBcbnZhcnlpbmcgdmVjMiB2VXY7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG51bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IGJsZW5kO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG52b2lkIG1haW4oKSB7XG4gIHZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRChtYXAsIHZVdik7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IgKiBzYW1wbGVkRGlmZnVzZUNvbG9yLnIgKiBibGVuZCwgbWF4KDAuMCwgKDEuMCAtIChzYW1wbGVkRGlmZnVzZUNvbG9yLnIgKyBzYW1wbGVkRGlmZnVzZUNvbG9yLmcgKyBzYW1wbGVkRGlmZnVzZUNvbG9yLmIpIC8gYWxwaGFUZXN0KSkgKiBvcGFjaXR5KTtcbiAgI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuICAjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxufVxuICBgXG4pO1xuXG50eXBlIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyA9IHtcbiAgICBtYXA6IFRIUkVFLlRleHR1cmU7XG4gICAgY29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIGFscGhhVGVzdD86IG51bWJlcjtcbiAgICBibGVuZD86IG51bWJlcjtcbn07XG5cbmV4dGVuZCh7IFNvZnRTaGFkb3dNYXRlcmlhbCwgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSk7XG5cbmV4cG9ydCB0eXBlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzTGlnaHRBcGkgPSB7IHVwZGF0ZTogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaSA9IHtcbiAgICBsaWdodHM6IE1hcDxzdHJpbmcsIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzTGlnaHRBcGk+O1xuICAgIHRlbXBvcmFsOiBib29sZWFuO1xuICAgIGZyYW1lczogbnVtYmVyO1xuICAgIGJsZW5kOiBudW1iZXI7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBnZXRNZXNoOiAoKSA9PiBUSFJFRS5NZXNoPFRIUkVFLlBsYW5lR2VvbWV0cnksIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyAmIFRIUkVFLlNoYWRlck1hdGVyaWFsPjtcbiAgICByZXNldDogKCkgPT4gdm9pZDtcbiAgICB1cGRhdGU6IChmcmFtZXM/OiBudW1iZXIpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgTkdUU19BQ0NVTVVMQVRJVkVfU0hBRE9XU19BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NBcGk+KFxuICAgICdOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyBBUEknXG4pO1xuXG5mdW5jdGlvbiBhY2N1bXVsYXRpdmVTaGFkb3dzQXBpRmFjdG9yeShhY2N1bXVsYXRpdmVTaGFkb3dzOiBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cykge1xuICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcblxuICAgIGNvbnN0IGFwaSA9IHtcbiAgICAgICAgbGlnaHRzOiBuZXcgTWFwKCksXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgICBnZXRNZXNoOiAoKSA9PlxuICAgICAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQgYXMgVEhSRUUuTWVzaDxcbiAgICAgICAgICAgICAgICBUSFJFRS5QbGFuZUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyAmIFRIUkVFLlNoYWRlck1hdGVyaWFsXG4gICAgICAgICAgICA+LFxuICAgICAgICByZXNldDogKCkgPT4ge1xuICAgICAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5wTE0uY2xlYXIoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsID0gYXBpLmdldE1lc2goKS5tYXRlcmlhbDtcbiAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSAwO1xuICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gMDtcbiAgICAgICAgICAgIGFwaS5jb3VudCA9IDA7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZTogKGZyYW1lcyA9IDEpID0+IHtcbiAgICAgICAgICAgIC8vIGFkYXB0IHRoZSBvcGFjaXR5IGJsZW5kIHJhdGlvIHRvIHRoZSBudW1iZXIgb2YgZnJhbWVzXG4gICAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IGFwaS5nZXRNZXNoKCkubWF0ZXJpYWw7XG4gICAgICAgICAgICBpZiAoIWFwaS50ZW1wb3JhbCkge1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSBhY2N1bXVsYXRpdmVTaGFkb3dzLmdldCgnb3BhY2l0eScpO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmFscGhhVGVzdCA9IGFjY3VtdWxhdGl2ZVNoYWRvd3MuZ2V0KCdhbHBoYVRlc3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwub3BhY2l0eSA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVTaGFkb3dzLmdldCgnb3BhY2l0eScpLFxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5vcGFjaXR5ICsgYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ29wYWNpdHknKSAvIGFwaS5ibGVuZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuZ2V0KCdhbHBoYVRlc3QnKSxcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ICsgYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ2FscGhhVGVzdCcpIC8gYXBpLmJsZW5kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3dpdGNoIGFjY3VtdWxhdGl2ZSBsaWdodHMgb25cbiAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgLy8gY29sbGVjdCBzY2VuZSBsaWdodHMgYW5kIG1lc2hlc1xuICAgICAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5wTE0ucHJlcGFyZSgpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGxpZ2h0bWFwIGFuZCB0aGUgYWNjdW11bGF0aXZlIGxpZ2h0c1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIGFwaS5saWdodHMuZm9yRWFjaCgobGlnaHQpID0+IGxpZ2h0LnVwZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVTaGFkb3dzLnBMTS51cGRhdGUoc3RvcmUuZ2V0KCdjYW1lcmEnKSwgYXBpLmJsZW5kKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3dpdGNoIGxpZ2h0cyBvZmZcbiAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIHJlc3RvcmUgbGlnaHRzIGFuZCBtZXNoZXNcbiAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MucExNLmZpbmlzaCgpO1xuICAgICAgICB9LFxuICAgIH0gYXMgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NBcGk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhcGksIHtcbiAgICAgICAgdGVtcG9yYWw6IHtcbiAgICAgICAgICAgIGdldDogKCkgPT4gISFhY2N1bXVsYXRpdmVTaGFkb3dzLmdldCgndGVtcG9yYWwnKSxcbiAgICAgICAgfSxcbiAgICAgICAgZnJhbWVzOiB7XG4gICAgICAgICAgICBnZXQ6ICgpID0+IE1hdGgubWF4KDIsIGFjY3VtdWxhdGl2ZVNoYWRvd3MuZ2V0KCdmcmFtZXMnKSksXG4gICAgICAgIH0sXG4gICAgICAgIGJsZW5kOiB7XG4gICAgICAgICAgICBnZXQ6ICgpID0+XG4gICAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvd3MuZ2V0KCdmcmFtZXMnKSA9PT0gSW5maW5pdHlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ2JsZW5kJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ2ZyYW1lcycpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgYWNjdW11bGF0aXZlU2hhZG93cy5ob2xkKGFjY3VtdWxhdGl2ZVNoYWRvd3MubWVzaFJlZi4kLCAobWVzaCkgPT4ge1xuICAgICAgICBhY2N1bXVsYXRpdmVTaGFkb3dzLnBMTS5jb25maWd1cmUobWVzaCk7XG5cbiAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5ob2xkKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbYWNjdW11bGF0aXZlU2hhZG93cy5zZWxlY3QoKSwgZ2V0TG9jYWxTdGF0ZShzdG9yZS5nZXQoJ3NjZW5lJykpLm9iamVjdHNdKSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBpbnRlcm5hbHMsIGJ1ZmZlcnMsIC4uLlxuICAgICAgICAgICAgICAgIGFwaS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBsaWdodG1hcFxuICAgICAgICAgICAgICAgIGlmICghYXBpLnRlbXBvcmFsICYmIGFwaS5mcmFtZXMgIT09IEluZmluaXR5KSBhcGkudXBkYXRlKGFwaS5ibGVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgYWNjdW11bGF0aXZlU2hhZG93cy5lZmZlY3Qoc3ViamVjdCwgKCkgPT5cbiAgICAgICAgICAgIHN0b3JlLmdldCgnaW50ZXJuYWwnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gYWNjdW11bGF0aXZlU2hhZG93cy5nZXQoJ2xpbWl0Jyk7XG4gICAgICAgICAgICAgICAgaWYgKChhcGkudGVtcG9yYWwgfHwgYXBpLmZyYW1lcyA9PT0gSW5maW5pdHkpICYmIGFwaS5jb3VudCA8IGFwaS5mcmFtZXMgJiYgYXBpLmNvdW50IDwgbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBpLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBhcGkuY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBzdWJqZWN0Lm5leHQoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhcGk7XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25ndHMtYWNjdW11bGF0aXZlLXNoYWRvd3MtY29uc3VtZXInLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgQWNjdW11bGF0aXZlU2hhZG93c0NvbnN1bWVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaW5qZWN0KE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJKTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWdyb3VwIG5ndENvbXBvdW5kPlxuICAgICAgICAgICAgPG5ndC1ncm91cCBbcmVmXT1cImFjY3VtdWxhdGl2ZVNoYWRvd3NSZWZcIiBbdHJhdmVyc2VdPVwibnVsbFRyYXZlcnNlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgICAgICAgICA8bmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cy1jb25zdW1lciAvPlxuICAgICAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgICAgICAgICA8bmd0LW1lc2ggW3JlY2VpdmVTaGFkb3ddPVwidHJ1ZVwiIFtyZWZdPVwibWVzaFJlZlwiIFtzY2FsZV09XCJnZXQoJ3NjYWxlJylcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgMF1cIj5cbiAgICAgICAgICAgICAgICA8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG4gICAgICAgICAgICAgICAgPG5ndC1zb2Z0LXNoYWRvdy1tYXRlcmlhbFxuICAgICAgICAgICAgICAgICAgICBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZXB0aFdyaXRlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImdldCgnY29sb3InKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b25lTWFwcGVkXT1cImdldCgndG9uZU1hcHBlZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2JsZW5kXT1cImdldCgnY29sb3JCbGVuZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW21hcF09XCJwTE0ucHJvZ3Jlc3NpdmVMaWdodE1hcDIudGV4dHVyZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmd0LW1lc2g+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgaW1wb3J0czogW0FjY3VtdWxhdGl2ZVNoYWRvd3NDb25zdW1lcl0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogYWNjdW11bGF0aXZlU2hhZG93c0FwaUZhY3RvcnksXG4gICAgICAgICAgICBkZXBzOiBbTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NdLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyBleHRlbmRzIE5ndFJ4U3RvcmUge1xuICAgIHJlYWRvbmx5IG51bGxUcmF2ZXJzZSA9ICgpID0+IG51bGw7XG4gICAgcmVhZG9ubHkgTWF0aCA9IE1hdGg7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcblxuICAgIHJlYWRvbmx5IHBMTSA9IG5ldyBQcm9ncmVzc2l2ZUxpZ2h0TWFwKHRoaXMuc3RvcmUuZ2V0KCdnbCcpLCB0aGlzLnN0b3JlLmdldCgnc2NlbmUnKSwgdGhpcy5nZXQoJ3Jlc29sdXRpb24nKSk7XG5cbiAgICByZWFkb25seSBhY2N1bXVsYXRpdmVTaGFkb3dzUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLkdyb3VwPigpO1xuICAgIHJlYWRvbmx5IG1lc2hSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuTWVzaD4oKTtcblxuICAgIC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgY2FuIHJlbmRlciwgbW9yZSB5aWVsZHMgY2xlYW5lciByZXN1bHRzIGJ1dCB0YWtlcyBtb3JlIHRpbWUsIDQwICovXG4gICAgQElucHV0KCkgc2V0IGZyYW1lcyhmcmFtZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZyYW1lcyB9KTtcbiAgICB9XG5cbiAgICAvKiogSWYgZnJhbWVzID09PSBJbmZpbml0eSBibGVuZCBjb250cm9scyB0aGUgcmVmcmVzaCByYXRpbywgMTAwICovXG4gICAgQElucHV0KCkgc2V0IGJsZW5kKGJsZW5kOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBibGVuZCB9KTtcbiAgICB9XG5cbiAgICAvKiogQ2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgZnJhbWVzIHJlbmRlcmVkIGlmIGZyYW1lcyA9PT0gSW5maW5pdHksIHVzdWFsbHkgdG8gZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYmFjayBvbmNlIGEgbW92YWJsZSBzY2VuZSBoYXMgc2V0dGxlZCwgSW5maW5pdHkgKi9cbiAgICBASW5wdXQoKSBzZXQgbGltaXQobGltaXQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGxpbWl0IH0pO1xuICAgIH1cblxuICAgIC8qKiBTY2FsZSBvZiB0aGUgcGxhbmUsICAqL1xuICAgIEBJbnB1dCgpIHNldCBzY2FsZShzY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2NhbGUgfSk7XG4gICAgfVxuXG4gICAgLyoqIFRlbXBvcmFsIGFjY3VtdWxhdGVzIHNoYWRvd3Mgb3ZlciB0aW1lIHdoaWNoIGlzIG1vcmUgcGVyZm9ybWFudCBidXQgaGFzIGEgdmlzdWFsIHJlZ3Jlc3Npb24gb3ZlciBpbnN0YW50IHJlc3VsdHMsIGZhbHNlICAqL1xuICAgIEBJbnB1dCgpIHNldCB0ZW1wb3JhbCh0ZW1wb3JhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IHRlbXBvcmFsIH0pO1xuICAgIH1cblxuICAgIC8qKiBPcGFjaXR5IG9mIHRoZSBwbGFuZSwgMSAqL1xuICAgIEBJbnB1dCgpIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG9wYWNpdHkgfSk7XG4gICAgfVxuXG4gICAgLyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuICAgIEBJbnB1dCgpIHNldCBhbHBoYVRlc3QoYWxwaGFUZXN0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbHBoYVRlc3QgfSk7XG4gICAgfVxuXG4gICAgLyoqIFNoYWRvdyBjb2xvciwgYmxhY2sgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cblxuICAgIC8qKiBDb2xvcmJsZW5kLCBob3cgbXVjaCBjb2xvcnMgdHVybiB0byBibGFjaywgMCBpcyBibGFjaywgMiAqL1xuICAgIEBJbnB1dCgpIHNldCBjb2xvckJsZW5kKGNvbG9yQmxlbmQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yQmxlbmQgfSk7XG4gICAgfVxuXG4gICAgLyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG4gICAgQElucHV0KCkgc2V0IHJlc29sdXRpb24ocmVzb2x1dGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVzb2x1dGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuICAgIEBJbnB1dCgpIHNldCB0b25lTWFwcGVkKHRvbmVNYXBwZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0b25lTWFwcGVkIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgZnJhbWVzOiA0MCxcbiAgICAgICAgICAgIGxpbWl0OiBJbmZpbml0eSxcbiAgICAgICAgICAgIGJsZW5kOiAyMCxcbiAgICAgICAgICAgIHNjYWxlOiAxMCxcbiAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICBhbHBoYVRlc3Q6IDAuNzUsXG4gICAgICAgICAgICBjb2xvcjogJ2JsYWNrJyxcbiAgICAgICAgICAgIGNvbG9yQmxlbmQ6IDIsXG4gICAgICAgICAgICByZXNvbHV0aW9uOiAxMDI0LFxuICAgICAgICAgICAgdG9uZU1hcHBlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, CUSTOM_ELEMENTS_SCHEMA, Directive, inject, InjectionToken, Input } from '@angular/core';
|
|
2
|
-
import { extend, injectNgtRef, NgtRxStore } from 'angular-three';
|
|
2
|
+
import { extend, injectNgtRef, NgtArgs, NgtRepeat, NgtRxStore } from 'angular-three';
|
|
3
3
|
import { combineLatest } from 'rxjs';
|
|
4
4
|
import * as THREE from 'three';
|
|
5
5
|
import { DirectionalLight, Group, OrthographicCamera, Vector2 } from 'three';
|
|
@@ -141,8 +141,9 @@ NgtsRandomizedLights.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
141
141
|
<ngt-vector2 *args="[get('mapSize'), get('mapSize')]" attach="shadow.mapSize" />
|
|
142
142
|
<ngt-orthographic-camera *args="get('cameraArgs')" attach="shadow.camera" />
|
|
143
143
|
</ngt-directional-light>
|
|
144
|
+
<ngts-randomized-lights-consumer />
|
|
144
145
|
</ngt-group>
|
|
145
|
-
`, isInline: true });
|
|
146
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: RandomizedLightsConsumer, selector: "ngts-randomized-lights-consumer" }, { kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }, { kind: "directive", type: NgtRepeat, selector: "[ngFor][ngForRepeat]", inputs: ["ngForRepeat"] }] });
|
|
146
147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsRandomizedLights, decorators: [{
|
|
147
148
|
type: Component,
|
|
148
149
|
args: [{
|
|
@@ -159,8 +160,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
|
|
|
159
160
|
<ngt-vector2 *args="[get('mapSize'), get('mapSize')]" attach="shadow.mapSize" />
|
|
160
161
|
<ngt-orthographic-camera *args="get('cameraArgs')" attach="shadow.camera" />
|
|
161
162
|
</ngt-directional-light>
|
|
163
|
+
<ngts-randomized-lights-consumer />
|
|
162
164
|
</ngt-group>
|
|
163
165
|
`,
|
|
166
|
+
imports: [RandomizedLightsConsumer, NgtArgs, NgtRepeat],
|
|
164
167
|
providers: [
|
|
165
168
|
{ provide: NGTS_RANDOMIZED_LIGHTS_API, useFactory: randomizedLightsApiFactory, deps: [NgtsRandomizedLights] },
|
|
166
169
|
],
|
|
@@ -193,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
|
|
|
193
196
|
}], far: [{
|
|
194
197
|
type: Input
|
|
195
198
|
}] } });
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9taXplZC1saWdodHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9saWIvYWNjdW11bGF0aXZlLXNoYWRvd3MvcmFuZG9taXplZC1saWdodHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDN0UsT0FBTyxFQUFtQyw2QkFBNkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUV4RyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLGNBQWMsQ0FDeEQsMEJBQTBCLENBQzdCLENBQUM7QUFFRixTQUFTLDBCQUEwQixDQUFDLGdCQUFzQztJQUN0RSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUU5RCxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDaEIsSUFBSSxLQUF5QyxDQUFDO1FBQzlDLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtZQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFB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c0JBQW5CLEtBQUs7Z0JBS08sVUFBVTtzQkFBdEIsS0FBSztnQkFLTyxJQUFJO3NCQUFoQixLQUFLO2dCQUtPLE9BQU87c0JBQW5CLEtBQUs7Z0JBS08sSUFBSTtzQkFBaEIsS0FBSztnQkFLTyxJQUFJO3NCQUFoQixLQUFLO2dCQUtPLEdBQUc7c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRGlyZWN0aXZlLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3ROZ3RSZWYsIE5ndFJ4U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IERpcmVjdGlvbmFsTGlnaHQsIEdyb3VwLCBPcnRob2dyYXBoaWNDYW1lcmEsIFZlY3RvcjIgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0xpZ2h0QXBpLCBOR1RTX0FDQ1VNVUxBVElWRV9TSEFET1dTX0FQSSB9IGZyb20gJy4vYWNjdW11bGF0aXZlLXNoYWRvd3MnO1xuXG5leHRlbmQoeyBHcm91cCwgRGlyZWN0aW9uYWxMaWdodCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBWZWN0b3IyIH0pO1xuXG5leHBvcnQgY29uc3QgTkdUU19SQU5ET01JWkVEX0xJR0hUU19BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NMaWdodEFwaT4oXG4gICAgJ05ndHNSYW5kb21pemVkTGlnaHRzIEFQSSdcbik7XG5cbmZ1bmN0aW9uIHJhbmRvbWl6ZWRMaWdodHNBcGlGYWN0b3J5KHJhbmRvbWl6ZWRMaWdodHM6IE5ndHNSYW5kb21pemVkTGlnaHRzKSB7XG4gICAgY29uc3QgYWNjdW11bGF0aXZlQXBpID0gaW5qZWN0KE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJKTtcblxuICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IGxpZ2h0OiBUSFJFRS5EaXJlY3Rpb25hbExpZ2h0IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAocmFuZG9taXplZExpZ2h0cy5saWdodHNSZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCByYW5kb21pemVkTGlnaHRzLmxpZ2h0c1JlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgICAgICAgICAgbGlnaHQgPSByYW5kb21pemVkTGlnaHRzLmxpZ2h0c1JlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuW2xdIGFzIFRIUkVFLkRpcmVjdGlvbmFsTGlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPiByYW5kb21pemVkTGlnaHRzLmdldCgnYW1iaWVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcmFuZG9taXplZExpZ2h0cy5nZXQoJ3Bvc2l0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhZGl1cyA9IHJhbmRvbWl6ZWRMaWdodHMuZ2V0KCdyYWRpdXMnKTtcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQucG9zaXRpb24uc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25bMF0gKyBUSFJFRS5NYXRoVXRpbHMucmFuZEZsb2F0U3ByZWFkKHJhZGl1cyksXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblsxXSArIFRIUkVFLk1hdGhVdGlscy5yYW5kRmxvYXRTcHJlYWQocmFkaXVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uWzJdICsgVEhSRUUuTWF0aFV0aWxzLnJhbmRGbG9hdFNwcmVhZChyYWRpdXMpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFtYmRhID0gTWF0aC5hY29zKDIgKiBNYXRoLnJhbmRvbSgpIC0gMSkgLSBNYXRoLlBJIC8gMi4wO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwaGkgPSAyICogTWF0aC5QSSAqIE1hdGgucmFuZG9tKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHJhbmRvbWl6ZWRMaWdodHMuZ2V0KCdsZW5ndGgnKTtcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQucG9zaXRpb24uc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5jb3MobGFtYmRhKSAqIE1hdGguY29zKHBoaSkgKiBsZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhNYXRoLmNvcyhsYW1iZGEpICogTWF0aC5zaW4ocGhpKSAqIGxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbihsYW1iZGEpICogbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSA9IHsgdXBkYXRlIH0gYXMgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NMaWdodEFwaTtcblxuICAgIHJhbmRvbWl6ZWRMaWdodHMuZWZmZWN0KFxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHJhbmRvbWl6ZWRMaWdodHMubGlnaHRzUmVmLiQsXG4gICAgICAgICAgICByYW5kb21pemVkTGlnaHRzLnNlbGVjdCgncG9zaXRpb24nKSxcbiAgICAgICAgICAgIHJhbmRvbWl6ZWRMaWdodHMuc2VsZWN0KCdyYWRpdXMnKSxcbiAgICAgICAgICAgIHJhbmRvbWl6ZWRMaWdodHMuc2VsZWN0KCdsZW5ndGgnKSxcbiAgICAgICAgICAgIHJhbmRvbWl6ZWRMaWdodHMuc2VsZWN0KCdhbWJpZW50JyksXG4gICAgICAgIF0pLFxuICAgICAgICAoW2dyb3VwXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFjY3VtdWxhdGl2ZUFwaSkgYWNjdW11bGF0aXZlQXBpLmxpZ2h0cy5zZXQoZ3JvdXAudXVpZCwgYXBpKTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBhY2N1bXVsYXRpdmVBcGkubGlnaHRzLmRlbGV0ZShncm91cC51dWlkKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gYXBpO1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3RzLXJhbmRvbWl6ZWQtbGlnaHRzLWNvbnN1bWVyJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFJhbmRvbWl6ZWRMaWdodHNDb25zdW1lciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGluamVjdChOR1RTX1JBTkRPTUlaRURfTElHSFRTX0FQSSk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtcmFuZG9taXplZC1saWdodHMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1ncm91cCBuZ3RDb21wb3VuZCBbcmVmXT1cImxpZ2h0c1JlZlwiPlxuICAgICAgICAgICAgPG5ndC1kaXJlY3Rpb25hbC1saWdodFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpOyByZXBlYXQ6IGdldCgnYW1vdW50JylcIlxuICAgICAgICAgICAgICAgIFtjYXN0U2hhZG93XT1cImdldCgnY2FzdFNoYWRvdycpXCJcbiAgICAgICAgICAgICAgICBbaW50ZW5zaXR5XT1cImdldCgnaW50ZW5zaXR5JykgLyBnZXQoJ2Ftb3VudCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJnZXQoJ2JpYXMnKVwiIGF0dGFjaD1cInNoYWRvdy5iaWFzXCIgLz5cbiAgICAgICAgICAgICAgICA8bmd0LXZlY3RvcjIgKmFyZ3M9XCJbZ2V0KCdtYXBTaXplJyksIGdldCgnbWFwU2l6ZScpXVwiIGF0dGFjaD1cInNoYWRvdy5tYXBTaXplXCIgLz5cbiAgICAgICAgICAgICAgICA8bmd0LW9ydGhvZ3JhcGhpYy1jYW1lcmEgKmFyZ3M9XCJnZXQoJ2NhbWVyYUFyZ3MnKVwiIGF0dGFjaD1cInNoYWRvdy5jYW1lcmFcIiAvPlxuICAgICAgICAgICAgPC9uZ3QtZGlyZWN0aW9uYWwtbGlnaHQ+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdUU19SQU5ET01JWkVEX0xJR0hUU19BUEksIHVzZUZhY3Rvcnk6IHJhbmRvbWl6ZWRMaWdodHNBcGlGYWN0b3J5LCBkZXBzOiBbTmd0c1JhbmRvbWl6ZWRMaWdodHNdIH0sXG4gICAgXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNSYW5kb21pemVkTGlnaHRzIGV4dGVuZHMgTmd0UnhTdG9yZSB7XG4gICAgQElucHV0KCkgbGlnaHRzUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLkdyb3VwPigpO1xuICAgIC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgd2lsbCBqaWdnbGUgdGhlIGxpZ2h0cywgMS5cbiAgICAgKiAgRnJhbWVzIGlzIGNvbnRleHQgYXdhcmUsIGlmIGEgcHJvdmlkZXIgbGlrZSBBY2N1bXVsYXRpdmVTaGFkb3dzIGV4aXN0cywgZnJhbWVzIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGVyZSEgICovXG4gICAgQElucHV0KCkgc2V0IGZyYW1lcyhmcmFtZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZyYW1lcyB9KTtcbiAgICB9XG5cbiAgICAvKiogTGlnaHQgcG9zaXRpb24sIFswLCAwLCAwXSAqL1xuICAgIEBJbnB1dCgpIHNldCBwb3NpdGlvbihwb3NpdGlvbjogW3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJdKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcG9zaXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqIFJhZGl1cyBvZiB0aGUgamlnZ2xlLCBoaWdoZXIgdmFsdWVzIG1ha2Ugc29mdGVyIGxpZ2h0LCA1ICovXG4gICAgQElucHV0KCkgc2V0IHJhZGl1cyhyYWRpdXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJhZGl1cyB9KTtcbiAgICB9XG5cbiAgICAvKiogQW1vdW50IG9mIGxpZ2h0cywgOCAqL1xuICAgIEBJbnB1dCgpIHNldCBhbW91bnQoYW1vdW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbW91bnQgfSk7XG4gICAgfVxuXG4gICAgLyoqIExpZ2h0IGludGVuc2l0eSwgMSAqL1xuICAgIEBJbnB1dCgpIHNldCBpbnRlbnNpdHkoaW50ZW5zaXR5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpbnRlbnNpdHkgfSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYmllbnQgb2NjbHVzaW9uLCBsb3dlciB2YWx1ZXMgbWVhbiBsZXNzIEFPLCBoaWdodCBtb3JlLCB5b3UgY2FuIG1peCBBTyBhbmQgZGlyZWN0aW9uYWwgbGlnaHQsIDAuNSAqL1xuICAgIEBJbnB1dCgpIHNldCBhbWJpZW50KGFtYmllbnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGFtYmllbnQgfSk7XG4gICAgfVxuXG4gICAgLyoqIElmIHRoZSBsaWdodHMgY2FzdCBzaGFkb3dzLCB0aGlzIGlzIHRydWUgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpIHNldCBjYXN0U2hhZG93KGNhc3RTaGFkb3c6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjYXN0U2hhZG93IH0pO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHNoYWRvdyBiaWFzLCAwICovXG4gICAgQElucHV0KCkgc2V0IGJpYXMoYmlhczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYmlhcyB9KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBtYXAgc2l6ZSwgNTEyICovXG4gICAgQElucHV0KCkgc2V0IG1hcFNpemUobWFwU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWFwU2l6ZSB9KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBzaXplIG9mIHRoZSBzaGFkb3cgY2FtZXJhLCAxMCAqL1xuICAgIEBJbnB1dCgpIHNldCBzaXplKHNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNpemUgfSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgc2hhZG93IGNhbWVyYSBuZWFyLCAwLjUgKi9cbiAgICBASW5wdXQoKSBzZXQgbmVhcihuZWFyOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBuZWFyIH0pO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHNoYWRvdyBjYW1lcmEgZmFyLCA1MDAgKi9cbiAgICBASW5wdXQoKSBzZXQgZmFyKGZhcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFyIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgY2FzdFNoYWRvdzogdHJ1ZSxcbiAgICAgICAgICAgIGJpYXM6IDAuMDAxLFxuICAgICAgICAgICAgbWFwU2l6ZTogNTEyLFxuICAgICAgICAgICAgc2l6ZTogNSxcbiAgICAgICAgICAgIG5lYXI6IDAuNSxcbiAgICAgICAgICAgIGZhcjogNTAwLFxuICAgICAgICAgICAgZnJhbWVzOiAxLFxuICAgICAgICAgICAgcG9zaXRpb246IFswLCAwLCAwXSxcbiAgICAgICAgICAgIHJhZGl1czogMSxcbiAgICAgICAgICAgIGFtb3VudDogOCxcbiAgICAgICAgICAgIGludGVuc2l0eTogMSxcbiAgICAgICAgICAgIGFtYmllbnQ6IDAuNSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdjYW1lcmFBcmdzJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KFsnc2l6ZScsICduZWFyJywgJ2ZhciddLCAoeyBzaXplLCBuZWFyLCBmYXIgfSkgPT4gWy1zaXplLCBzaXplLCBzaXplLCAtc2l6ZSwgbmVhciwgZmFyXSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ2xlbmd0aCcsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdChbJ3Bvc2l0aW9uJ10sICh7IHBvc2l0aW9uIH0pID0+IG5ldyBUSFJFRS5WZWN0b3IzKC4uLnBvc2l0aW9uKS5sZW5ndGgoKSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9taXplZC1saWdodHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9saWIvYWNjdW11bGF0aXZlLXNoYWRvd3MvcmFuZG9taXplZC1saWdodHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3RSxPQUFPLEVBQW1DLDZCQUE2QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRXhHLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksY0FBYyxDQUN4RCwwQkFBMEIsQ0FDN0IsQ0FBQztBQUVGLFNBQVMsMEJBQTBCLENBQUMsZ0JBQXNDO0lBQ3RFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBRTlELE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRTtRQUNoQixJQUFJLEtBQXlDLENBQUM7UUFDOUMsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO1lBQzFDLEtBQUssSUFB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c0JBQWxCLEtBQUs7Z0JBS08sUUFBUTtzQkFBcEIsS0FBSztnQkFLTyxNQUFNO3NCQUFsQixLQUFLO2dCQUtPLE1BQU07c0JBQWxCLEtBQUs7Z0JBS08sU0FBUztzQkFBckIsS0FBSztnQkFLTyxPQUFPO3NCQUFuQixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS08sSUFBSTtzQkFBaEIsS0FBSztnQkFLTyxPQUFPO3NCQUFuQixLQUFLO2dCQUtPLElBQUk7c0JBQWhCLEtBQUs7Z0JBS08sSUFBSTtzQkFBaEIsS0FBSztnQkFLTyxHQUFHO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIERpcmVjdGl2ZSwgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0Tmd0UmVmLCBOZ3RBcmdzLCBOZ3RSZXBlYXQsIE5ndFJ4U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IERpcmVjdGlvbmFsTGlnaHQsIEdyb3VwLCBPcnRob2dyYXBoaWNDYW1lcmEsIFZlY3RvcjIgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0xpZ2h0QXBpLCBOR1RTX0FDQ1VNVUxBVElWRV9TSEFET1dTX0FQSSB9IGZyb20gJy4vYWNjdW11bGF0aXZlLXNoYWRvd3MnO1xuXG5leHRlbmQoeyBHcm91cCwgRGlyZWN0aW9uYWxMaWdodCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBWZWN0b3IyIH0pO1xuXG5leHBvcnQgY29uc3QgTkdUU19SQU5ET01JWkVEX0xJR0hUU19BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NMaWdodEFwaT4oXG4gICAgJ05ndHNSYW5kb21pemVkTGlnaHRzIEFQSSdcbik7XG5cbmZ1bmN0aW9uIHJhbmRvbWl6ZWRMaWdodHNBcGlGYWN0b3J5KHJhbmRvbWl6ZWRMaWdodHM6IE5ndHNSYW5kb21pemVkTGlnaHRzKSB7XG4gICAgY29uc3QgYWNjdW11bGF0aXZlQXBpID0gaW5qZWN0KE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJKTtcblxuICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IGxpZ2h0OiBUSFJFRS5EaXJlY3Rpb25hbExpZ2h0IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAocmFuZG9taXplZExpZ2h0cy5saWdodHNSZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCByYW5kb21pemVkTGlnaHRzLmxpZ2h0c1JlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgICAgICAgICAgbGlnaHQgPSByYW5kb21pemVkTGlnaHRzLmxpZ2h0c1JlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuW2xdIGFzIFRIUkVFLkRpcmVjdGlvbmFsTGlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPiByYW5kb21pemVkTGlnaHRzLmdldCgnYW1iaWVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcmFuZG9taXplZExpZ2h0cy5nZXQoJ3Bvc2l0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhZGl1cyA9IHJhbmRvbWl6ZWRMaWdodHMuZ2V0KCdyYWRpdXMnKTtcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQucG9zaXRpb24uc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25bMF0gKyBUSFJFRS5NYXRoVXRpbHMucmFuZEZsb2F0U3ByZWFkKHJhZGl1cyksXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblsxXSArIFRIUkVFLk1hdGhVdGlscy5yYW5kRmxvYXRTcHJlYWQocmFkaXVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uWzJdICsgVEhSRUUuTWF0aFV0aWxzLnJhbmRGbG9hdFNwcmVhZChyYWRpdXMpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFtYmRhID0gTWF0aC5hY29zKDIgKiBNYXRoLnJhbmRvbSgpIC0gMSkgLSBNYXRoLlBJIC8gMi4wO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwaGkgPSAyICogTWF0aC5QSSAqIE1hdGgucmFuZG9tKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHJhbmRvbWl6ZWRMaWdodHMuZ2V0KCdsZW5ndGgnKTtcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQucG9zaXRpb24uc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5jb3MobGFtYmRhKSAqIE1hdGguY29zKHBoaSkgKiBsZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhNYXRoLmNvcyhsYW1iZGEpICogTWF0aC5zaW4ocGhpKSAqIGxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbihsYW1iZGEpICogbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSA9IHsgdXBkYXRlIH0gYXMgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NMaWdodEFwaTtcblxuICAgIHJhbmRvbWl6ZWRMaWdodHMuZWZmZWN0KFxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHJhbmRvbWl6ZWRMaWdodHMubGlnaHRzUmVmLiQsXG4gICAgICAgICAgICByYW5kb21pemVkTGlnaHRzLnNlbGVjdCgncG9zaXRpb24nKSxcbiAgICAgICAgICAgIHJhbmRvbWl6ZWRMaWdodHMuc2VsZWN0KCdyYWRpdXMnKSxcbiAgICAgICAgICAgIHJhbmRvbWl6ZWRMaWdodHMuc2VsZWN0KCdsZW5ndGgnKSxcbiAgICAgICAgICAgIHJhbmRvbWl6ZWRMaWdodHMuc2VsZWN0KCdhbWJpZW50JyksXG4gICAgICAgIF0pLFxuICAgICAgICAoW2dyb3VwXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFjY3VtdWxhdGl2ZUFwaSkgYWNjdW11bGF0aXZlQXBpLmxpZ2h0cy5zZXQoZ3JvdXAudXVpZCwgYXBpKTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBhY2N1bXVsYXRpdmVBcGkubGlnaHRzLmRlbGV0ZShncm91cC51dWlkKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gYXBpO1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3RzLXJhbmRvbWl6ZWQtbGlnaHRzLWNvbnN1bWVyJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFJhbmRvbWl6ZWRMaWdodHNDb25zdW1lciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGluamVjdChOR1RTX1JBTkRPTUlaRURfTElHSFRTX0FQSSk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtcmFuZG9taXplZC1saWdodHMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1ncm91cCBuZ3RDb21wb3VuZCBbcmVmXT1cImxpZ2h0c1JlZlwiPlxuICAgICAgICAgICAgPG5ndC1kaXJlY3Rpb25hbC1saWdodFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpOyByZXBlYXQ6IGdldCgnYW1vdW50JylcIlxuICAgICAgICAgICAgICAgIFtjYXN0U2hhZG93XT1cImdldCgnY2FzdFNoYWRvdycpXCJcbiAgICAgICAgICAgICAgICBbaW50ZW5zaXR5XT1cImdldCgnaW50ZW5zaXR5JykgLyBnZXQoJ2Ftb3VudCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJnZXQoJ2JpYXMnKVwiIGF0dGFjaD1cInNoYWRvdy5iaWFzXCIgLz5cbiAgICAgICAgICAgICAgICA8bmd0LXZlY3RvcjIgKmFyZ3M9XCJbZ2V0KCdtYXBTaXplJyksIGdldCgnbWFwU2l6ZScpXVwiIGF0dGFjaD1cInNoYWRvdy5tYXBTaXplXCIgLz5cbiAgICAgICAgICAgICAgICA8bmd0LW9ydGhvZ3JhcGhpYy1jYW1lcmEgKmFyZ3M9XCJnZXQoJ2NhbWVyYUFyZ3MnKVwiIGF0dGFjaD1cInNoYWRvdy5jYW1lcmFcIiAvPlxuICAgICAgICAgICAgPC9uZ3QtZGlyZWN0aW9uYWwtbGlnaHQ+XG4gICAgICAgICAgICA8bmd0cy1yYW5kb21pemVkLWxpZ2h0cy1jb25zdW1lciAvPlxuICAgICAgICA8L25ndC1ncm91cD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtSYW5kb21pemVkTGlnaHRzQ29uc3VtZXIsIE5ndEFyZ3MsIE5ndFJlcGVhdF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdUU19SQU5ET01JWkVEX0xJR0hUU19BUEksIHVzZUZhY3Rvcnk6IHJhbmRvbWl6ZWRMaWdodHNBcGlGYWN0b3J5LCBkZXBzOiBbTmd0c1JhbmRvbWl6ZWRMaWdodHNdIH0sXG4gICAgXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNSYW5kb21pemVkTGlnaHRzIGV4dGVuZHMgTmd0UnhTdG9yZSB7XG4gICAgQElucHV0KCkgbGlnaHRzUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLkdyb3VwPigpO1xuICAgIC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgd2lsbCBqaWdnbGUgdGhlIGxpZ2h0cywgMS5cbiAgICAgKiAgRnJhbWVzIGlzIGNvbnRleHQgYXdhcmUsIGlmIGEgcHJvdmlkZXIgbGlrZSBBY2N1bXVsYXRpdmVTaGFkb3dzIGV4aXN0cywgZnJhbWVzIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGVyZSEgICovXG4gICAgQElucHV0KCkgc2V0IGZyYW1lcyhmcmFtZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZyYW1lcyB9KTtcbiAgICB9XG5cbiAgICAvKiogTGlnaHQgcG9zaXRpb24sIFswLCAwLCAwXSAqL1xuICAgIEBJbnB1dCgpIHNldCBwb3NpdGlvbihwb3NpdGlvbjogW3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJdKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcG9zaXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqIFJhZGl1cyBvZiB0aGUgamlnZ2xlLCBoaWdoZXIgdmFsdWVzIG1ha2Ugc29mdGVyIGxpZ2h0LCA1ICovXG4gICAgQElucHV0KCkgc2V0IHJhZGl1cyhyYWRpdXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJhZGl1cyB9KTtcbiAgICB9XG5cbiAgICAvKiogQW1vdW50IG9mIGxpZ2h0cywgOCAqL1xuICAgIEBJbnB1dCgpIHNldCBhbW91bnQoYW1vdW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbW91bnQgfSk7XG4gICAgfVxuXG4gICAgLyoqIExpZ2h0IGludGVuc2l0eSwgMSAqL1xuICAgIEBJbnB1dCgpIHNldCBpbnRlbnNpdHkoaW50ZW5zaXR5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpbnRlbnNpdHkgfSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYmllbnQgb2NjbHVzaW9uLCBsb3dlciB2YWx1ZXMgbWVhbiBsZXNzIEFPLCBoaWdodCBtb3JlLCB5b3UgY2FuIG1peCBBTyBhbmQgZGlyZWN0aW9uYWwgbGlnaHQsIDAuNSAqL1xuICAgIEBJbnB1dCgpIHNldCBhbWJpZW50KGFtYmllbnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGFtYmllbnQgfSk7XG4gICAgfVxuXG4gICAgLyoqIElmIHRoZSBsaWdodHMgY2FzdCBzaGFkb3dzLCB0aGlzIGlzIHRydWUgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpIHNldCBjYXN0U2hhZG93KGNhc3RTaGFkb3c6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjYXN0U2hhZG93IH0pO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHNoYWRvdyBiaWFzLCAwICovXG4gICAgQElucHV0KCkgc2V0IGJpYXMoYmlhczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYmlhcyB9KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBtYXAgc2l6ZSwgNTEyICovXG4gICAgQElucHV0KCkgc2V0IG1hcFNpemUobWFwU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWFwU2l6ZSB9KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBzaXplIG9mIHRoZSBzaGFkb3cgY2FtZXJhLCAxMCAqL1xuICAgIEBJbnB1dCgpIHNldCBzaXplKHNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNpemUgfSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgc2hhZG93IGNhbWVyYSBuZWFyLCAwLjUgKi9cbiAgICBASW5wdXQoKSBzZXQgbmVhcihuZWFyOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBuZWFyIH0pO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHNoYWRvdyBjYW1lcmEgZmFyLCA1MDAgKi9cbiAgICBASW5wdXQoKSBzZXQgZmFyKGZhcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFyIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgY2FzdFNoYWRvdzogdHJ1ZSxcbiAgICAgICAgICAgIGJpYXM6IDAuMDAxLFxuICAgICAgICAgICAgbWFwU2l6ZTogNTEyLFxuICAgICAgICAgICAgc2l6ZTogNSxcbiAgICAgICAgICAgIG5lYXI6IDAuNSxcbiAgICAgICAgICAgIGZhcjogNTAwLFxuICAgICAgICAgICAgZnJhbWVzOiAxLFxuICAgICAgICAgICAgcG9zaXRpb246IFswLCAwLCAwXSxcbiAgICAgICAgICAgIHJhZGl1czogMSxcbiAgICAgICAgICAgIGFtb3VudDogOCxcbiAgICAgICAgICAgIGludGVuc2l0eTogMSxcbiAgICAgICAgICAgIGFtYmllbnQ6IDAuNSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdjYW1lcmFBcmdzJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KFsnc2l6ZScsICduZWFyJywgJ2ZhciddLCAoeyBzaXplLCBuZWFyLCBmYXIgfSkgPT4gWy1zaXplLCBzaXplLCBzaXplLCAtc2l6ZSwgbmVhciwgZmFyXSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ2xlbmd0aCcsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdChbJ3Bvc2l0aW9uJ10sICh7IHBvc2l0aW9uIH0pID0+IG5ldyBUSFJFRS5WZWN0b3IzKC4uLnBvc2l0aW9uKS5sZW5ndGgoKSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, TemplateRef, Directive, Input, Component, CUSTOM_ELEMENTS_SCHEMA, ContentChild } from '@angular/core';
|
|
3
|
+
import { NgIf, NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { NgtRxStore, injectNgtRef, NgtStore, extend, NgtPush } from 'angular-three';
|
|
5
|
+
import { map, combineLatest } from 'rxjs';
|
|
6
|
+
import { OrthographicCamera, Group, PerspectiveCamera } from 'three';
|
|
7
|
+
import { injectNgtsFBO } from 'angular-three-soba/misc';
|
|
8
|
+
|
|
9
|
+
class NgtsCameraContent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.template = inject(TemplateRef);
|
|
12
|
+
this.ngtsCameraContent = '';
|
|
13
|
+
}
|
|
14
|
+
static ngTemplateContextGuard(_, ctx) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
NgtsCameraContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCameraContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
19
|
+
NgtsCameraContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsCameraContent, isStandalone: true, selector: "ng-template[ngtsCameraContent]", inputs: { ngtsCameraContent: "ngtsCameraContent" }, ngImport: i0 });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCameraContent, decorators: [{
|
|
21
|
+
type: Directive,
|
|
22
|
+
args: [{ selector: 'ng-template[ngtsCameraContent]', standalone: true }]
|
|
23
|
+
}], propDecorators: { ngtsCameraContent: [{
|
|
24
|
+
type: Input
|
|
25
|
+
}] } });
|
|
26
|
+
|
|
27
|
+
class NgtsCamera extends NgtRxStore {
|
|
28
|
+
constructor() {
|
|
29
|
+
super(...arguments);
|
|
30
|
+
this.cameraRef = injectNgtRef();
|
|
31
|
+
this.store = inject(NgtStore);
|
|
32
|
+
this.fboRef = injectNgtsFBO(() => this.select('resolution').pipe(map((resolution) => ({ width: resolution }))));
|
|
33
|
+
}
|
|
34
|
+
set makeDefault(makeDefault) {
|
|
35
|
+
this.set({ makeDefault });
|
|
36
|
+
}
|
|
37
|
+
set manual(manual) {
|
|
38
|
+
this.set({ manual });
|
|
39
|
+
}
|
|
40
|
+
set frames(frames) {
|
|
41
|
+
this.set({ frames });
|
|
42
|
+
}
|
|
43
|
+
set resolution(resolution) {
|
|
44
|
+
this.set({ resolution });
|
|
45
|
+
}
|
|
46
|
+
set envMap(envMap) {
|
|
47
|
+
this.set({ envMap });
|
|
48
|
+
}
|
|
49
|
+
initialize() {
|
|
50
|
+
super.initialize();
|
|
51
|
+
this.set({ resolution: 256, frames: Infinity, makeDefault: false, manual: false });
|
|
52
|
+
}
|
|
53
|
+
ngOnInit() {
|
|
54
|
+
this.hold(this.cameraRef.$, (camera) => {
|
|
55
|
+
camera.updateProjectionMatrix();
|
|
56
|
+
this.setDefaultCamera();
|
|
57
|
+
this.updateProjectionMatrix();
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
setDefaultCamera() {
|
|
61
|
+
this.effect(combineLatest([this.cameraRef.$, this.select('makeDefault')]), ([camera, makeDefault]) => {
|
|
62
|
+
if (makeDefault) {
|
|
63
|
+
const { camera: oldCamera } = this.store.get();
|
|
64
|
+
this.store.set({ camera });
|
|
65
|
+
return () => {
|
|
66
|
+
this.store.set({ camera: oldCamera });
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
updateProjectionMatrix() {
|
|
72
|
+
this.effect(combineLatest([this.cameraRef.$, this.select('manual')]), ([camera, manual]) => {
|
|
73
|
+
if (!manual && camera)
|
|
74
|
+
camera.updateProjectionMatrix();
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
NgtsCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCamera, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
79
|
+
NgtsCamera.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsCamera, inputs: { makeDefault: "makeDefault", manual: "manual", frames: "frames", resolution: "resolution", envMap: "envMap", cameraRef: "cameraRef" }, usesInheritance: true, ngImport: i0 });
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCamera, decorators: [{
|
|
81
|
+
type: Directive
|
|
82
|
+
}], propDecorators: { makeDefault: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], manual: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], frames: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], resolution: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], envMap: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], cameraRef: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}] } });
|
|
95
|
+
|
|
96
|
+
extend({ OrthographicCamera, Group });
|
|
97
|
+
class NgtsOrthographicCamera extends NgtsCamera {
|
|
98
|
+
constructor() {
|
|
99
|
+
super(...arguments);
|
|
100
|
+
this.left$ = combineLatest([this.select('left'), this.store.select('size')]).pipe(map(([left, size]) => left !== null && left !== void 0 ? left : size.width / -2));
|
|
101
|
+
this.right$ = combineLatest([this.select('right'), this.store.select('size')]).pipe(map(([right, size]) => right !== null && right !== void 0 ? right : size.width / 2));
|
|
102
|
+
this.top$ = combineLatest([this.select('top'), this.store.select('size')]).pipe(map(([top, size]) => top !== null && top !== void 0 ? top : size.height / 2));
|
|
103
|
+
this.bottom$ = combineLatest([this.select('bottom'), this.store.select('size')]).pipe(map(([bottom, size]) => bottom !== null && bottom !== void 0 ? bottom : size.height / -2));
|
|
104
|
+
}
|
|
105
|
+
set left(left) {
|
|
106
|
+
this.set({ left });
|
|
107
|
+
}
|
|
108
|
+
set right(right) {
|
|
109
|
+
this.set({ right });
|
|
110
|
+
}
|
|
111
|
+
set top(top) {
|
|
112
|
+
this.set({ top });
|
|
113
|
+
}
|
|
114
|
+
set bottom(bottom) {
|
|
115
|
+
this.set({ bottom });
|
|
116
|
+
}
|
|
117
|
+
initialize() {
|
|
118
|
+
super.initialize();
|
|
119
|
+
this.set({ left: 0, right: 0, top: 0, bottom: 0 });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
NgtsOrthographicCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsOrthographicCamera, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
123
|
+
NgtsOrthographicCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsOrthographicCamera, isStandalone: true, selector: "ngts-orthographic-camera", inputs: { left: "left", right: "right", top: "top", bottom: "bottom" }, queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
124
|
+
<ngt-orthographic-camera
|
|
125
|
+
ngtCompound
|
|
126
|
+
[ref]="cameraRef"
|
|
127
|
+
[left]="left$ | ngtPush"
|
|
128
|
+
[right]="right$ | ngtPush"
|
|
129
|
+
[top]="top$ | ngtPush"
|
|
130
|
+
[bottom]="bottom$ | ngtPush"
|
|
131
|
+
>
|
|
132
|
+
<ng-container
|
|
133
|
+
*ngIf="cameraContent && !cameraContent.ngtsCameraContent"
|
|
134
|
+
[ngTemplateOutlet]="cameraContent.template"
|
|
135
|
+
/>
|
|
136
|
+
</ngt-orthographic-camera>
|
|
137
|
+
<ngt-group #group *ngIf="cameraContent && cameraContent.ngtsCameraContent">
|
|
138
|
+
<ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
|
|
139
|
+
</ngt-group>
|
|
140
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: NgtPush, name: "ngtPush" }] });
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsOrthographicCamera, decorators: [{
|
|
142
|
+
type: Component,
|
|
143
|
+
args: [{
|
|
144
|
+
selector: 'ngts-orthographic-camera',
|
|
145
|
+
standalone: true,
|
|
146
|
+
template: `
|
|
147
|
+
<ngt-orthographic-camera
|
|
148
|
+
ngtCompound
|
|
149
|
+
[ref]="cameraRef"
|
|
150
|
+
[left]="left$ | ngtPush"
|
|
151
|
+
[right]="right$ | ngtPush"
|
|
152
|
+
[top]="top$ | ngtPush"
|
|
153
|
+
[bottom]="bottom$ | ngtPush"
|
|
154
|
+
>
|
|
155
|
+
<ng-container
|
|
156
|
+
*ngIf="cameraContent && !cameraContent.ngtsCameraContent"
|
|
157
|
+
[ngTemplateOutlet]="cameraContent.template"
|
|
158
|
+
/>
|
|
159
|
+
</ngt-orthographic-camera>
|
|
160
|
+
<ngt-group #group *ngIf="cameraContent && cameraContent.ngtsCameraContent">
|
|
161
|
+
<ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
|
|
162
|
+
</ngt-group>
|
|
163
|
+
`,
|
|
164
|
+
imports: [NgIf, NgTemplateOutlet, NgtPush],
|
|
165
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
166
|
+
}]
|
|
167
|
+
}], propDecorators: { cameraContent: [{
|
|
168
|
+
type: ContentChild,
|
|
169
|
+
args: [NgtsCameraContent]
|
|
170
|
+
}], left: [{
|
|
171
|
+
type: Input
|
|
172
|
+
}], right: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], top: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], bottom: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}] } });
|
|
179
|
+
|
|
180
|
+
extend({ PerspectiveCamera, Group });
|
|
181
|
+
class NgtsPerspectiveCamera extends NgtsCamera {
|
|
182
|
+
}
|
|
183
|
+
NgtsPerspectiveCamera.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsPerspectiveCamera, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
184
|
+
NgtsPerspectiveCamera.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsPerspectiveCamera, isStandalone: true, selector: "ngts-perspective-camera", queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
185
|
+
<ngt-perspective-camera [ref]="cameraRef" ngtCompound>
|
|
186
|
+
<ng-container
|
|
187
|
+
*ngIf="cameraContent && !cameraContent.ngtsCameraContent"
|
|
188
|
+
[ngTemplateOutlet]="cameraContent.template"
|
|
189
|
+
/>
|
|
190
|
+
</ngt-perspective-camera>
|
|
191
|
+
<ngt-group #group *ngIf="cameraContent && cameraContent.ngtsCameraContent">
|
|
192
|
+
<ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
|
|
193
|
+
</ngt-group>
|
|
194
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsPerspectiveCamera, decorators: [{
|
|
196
|
+
type: Component,
|
|
197
|
+
args: [{
|
|
198
|
+
selector: 'ngts-perspective-camera',
|
|
199
|
+
standalone: true,
|
|
200
|
+
template: `
|
|
201
|
+
<ngt-perspective-camera [ref]="cameraRef" ngtCompound>
|
|
202
|
+
<ng-container
|
|
203
|
+
*ngIf="cameraContent && !cameraContent.ngtsCameraContent"
|
|
204
|
+
[ngTemplateOutlet]="cameraContent.template"
|
|
205
|
+
/>
|
|
206
|
+
</ngt-perspective-camera>
|
|
207
|
+
<ngt-group #group *ngIf="cameraContent && cameraContent.ngtsCameraContent">
|
|
208
|
+
<ng-container *ngTemplateOutlet="cameraContent.template; context: { fbo: fboRef.nativeElement, group }" />
|
|
209
|
+
</ngt-group>
|
|
210
|
+
`,
|
|
211
|
+
imports: [NgIf, NgTemplateOutlet],
|
|
212
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
213
|
+
}]
|
|
214
|
+
}], propDecorators: { cameraContent: [{
|
|
215
|
+
type: ContentChild,
|
|
216
|
+
args: [NgtsCameraContent]
|
|
217
|
+
}] } });
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Generated bundle index. Do not edit.
|
|
221
|
+
*/
|
|
222
|
+
|
|
223
|
+
export { NgtsCameraContent, NgtsOrthographicCamera, NgtsPerspectiveCamera };
|
|
224
|
+
//# sourceMappingURL=angular-three-soba-cameras.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"angular-three-soba-cameras.mjs","sources":["../../../../libs/angular-three-soba/cameras/src/lib/camera/camera-content.ts","../../../../libs/angular-three-soba/cameras/src/lib/camera/camera.ts","../../../../libs/angular-three-soba/cameras/src/lib/orthographic-camera/orthographic-camera.ts","../../../../libs/angular-three-soba/cameras/src/lib/perspective-camera/perspective-camera.ts","../../../../libs/angular-three-soba/cameras/src/angular-three-soba-cameras.ts"],"sourcesContent":["import { Directive, inject, Input, TemplateRef } from '@angular/core';\nimport * as THREE from 'three';\n\n@Directive({ selector: 'ng-template[ngtsCameraContent]', standalone: true })\nexport class NgtsCameraContent {\n readonly template = inject(TemplateRef);\n @Input() ngtsCameraContent: boolean | '' = '';\n\n static ngTemplateContextGuard(\n _: NgtsCameraContent,\n ctx: unknown\n ): ctx is { target: THREE.WebGLRenderTarget; group?: THREE.Group } {\n return true;\n }\n}\n","import { Directive, inject, Input, OnInit } from '@angular/core';\nimport { injectNgtRef, NgtCamera, NgtRxStore, NgtStore } from 'angular-three';\nimport { injectNgtsFBO } from 'angular-three-soba/misc';\nimport { combineLatest, map } from 'rxjs';\n\n@Directive()\nexport abstract class NgtsCamera<TCamera extends NgtCamera> extends NgtRxStore implements OnInit {\n @Input() set makeDefault(makeDefault: boolean) {\n this.set({ makeDefault });\n }\n\n @Input() set manual(manual: boolean) {\n this.set({ manual });\n }\n\n @Input() set frames(frames: number) {\n this.set({ frames });\n }\n\n @Input() set resolution(resolution: number) {\n this.set({ resolution });\n }\n\n @Input() set envMap(envMap: THREE.Texture) {\n this.set({ envMap });\n }\n\n @Input() cameraRef = injectNgtRef<TCamera>();\n\n protected readonly store = inject(NgtStore);\n readonly fboRef = injectNgtsFBO(() => this.select('resolution').pipe(map((resolution) => ({ width: resolution }))));\n\n override initialize() {\n super.initialize();\n this.set({ resolution: 256, frames: Infinity, makeDefault: false, manual: false });\n }\n\n ngOnInit() {\n this.hold(this.cameraRef.$, (camera) => {\n camera.updateProjectionMatrix();\n this.setDefaultCamera();\n this.updateProjectionMatrix();\n });\n }\n\n private setDefaultCamera() {\n this.effect(combineLatest([this.cameraRef.$, this.select('makeDefault')]), ([camera, makeDefault]) => {\n if (makeDefault) {\n const { camera: oldCamera } = this.store.get();\n this.store.set({ camera });\n return () => {\n this.store.set({ camera: oldCamera });\n };\n }\n });\n }\n\n private updateProjectionMatrix() {\n this.effect(combineLatest([this.cameraRef.$, this.select('manual')]), ([camera, manual]) => {\n if (!manual && camera) camera.updateProjectionMatrix();\n });\n }\n}\n","import { NgIf, NgTemplateOutlet } from '@angular/common';\nimport { Component, ContentChild, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';\nimport { extend, NgtPush } from 'angular-three';\nimport { combineLatest, map } from 'rxjs';\nimport { Group, OrthographicCamera } from 'three';\nimport { NgtsCamera } from '../camera/camera';\nimport { NgtsCameraContent } from '../camera/camera-content';\n\nextend({ OrthographicCamera, Group });\n\n@Component({\n selector: 'ngts-orthographic-camera',\n standalone: true,\n template: `\n <ngt-orthographic-camera\n ngtCompound\n [ref]=\"cameraRef\"\n [left]=\"left$ | ngtPush\"\n [right]=\"right$ | ngtPush\"\n [top]=\"top$ | ngtPush\"\n [bottom]=\"bottom$ | ngtPush\"\n >\n <ng-container\n *ngIf=\"cameraContent && !cameraContent.ngtsCameraContent\"\n [ngTemplateOutlet]=\"cameraContent.template\"\n />\n </ngt-orthographic-camera>\n <ngt-group #group *ngIf=\"cameraContent && cameraContent.ngtsCameraContent\">\n <ng-container *ngTemplateOutlet=\"cameraContent.template; context: { fbo: fboRef.nativeElement, group }\" />\n </ngt-group>\n `,\n imports: [NgIf, NgTemplateOutlet, NgtPush],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsOrthographicCamera extends NgtsCamera<THREE.OrthographicCamera> {\n @ContentChild(NgtsCameraContent) cameraContent?: NgtsCameraContent;\n\n @Input() set left(left: number) {\n this.set({ left });\n }\n\n @Input() set right(right: number) {\n this.set({ right });\n }\n\n @Input() set top(top: number) {\n this.set({ top });\n }\n\n @Input() set bottom(bottom: number) {\n this.set({ bottom });\n }\n\n override initialize(): void {\n super.initialize();\n this.set({ left: 0, right: 0, top: 0, bottom: 0 });\n }\n\n readonly left$ = combineLatest([this.select('left'), this.store.select('size')]).pipe(\n map(([left, size]) => left ?? size.width / -2)\n );\n\n readonly right$ = combineLatest([this.select('right'), this.store.select('size')]).pipe(\n map(([right, size]) => right ?? size.width / 2)\n );\n\n readonly top$ = combineLatest([this.select('top'), this.store.select('size')]).pipe(\n map(([top, size]) => top ?? size.height / 2)\n );\n\n readonly bottom$ = combineLatest([this.select('bottom'), this.store.select('size')]).pipe(\n map(([bottom, size]) => bottom ?? size.height / -2)\n );\n}\n","import { NgIf, NgTemplateOutlet } from '@angular/common';\nimport { Component, ContentChild, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { extend } from 'angular-three';\nimport { Group, PerspectiveCamera } from 'three';\nimport { NgtsCamera } from '../camera/camera';\nimport { NgtsCameraContent } from '../camera/camera-content';\n\nextend({ PerspectiveCamera, Group });\n\n@Component({\n selector: 'ngts-perspective-camera',\n standalone: true,\n template: `\n <ngt-perspective-camera [ref]=\"cameraRef\" ngtCompound>\n <ng-container\n *ngIf=\"cameraContent && !cameraContent.ngtsCameraContent\"\n [ngTemplateOutlet]=\"cameraContent.template\"\n />\n </ngt-perspective-camera>\n <ngt-group #group *ngIf=\"cameraContent && cameraContent.ngtsCameraContent\">\n <ng-container *ngTemplateOutlet=\"cameraContent.template; context: { fbo: fboRef.nativeElement, group }\" />\n </ngt-group>\n `,\n imports: [NgIf, NgTemplateOutlet],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsPerspectiveCamera extends NgtsCamera<PerspectiveCamera> {\n @ContentChild(NgtsCameraContent) cameraContent?: NgtsCameraContent;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;MAIa,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEa,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAC/B,QAAA,IAAiB,CAAA,iBAAA,GAAiB,EAAE,CAAC;KAQjD;AANG,IAAA,OAAO,sBAAsB,CACzB,CAAoB,EACpB,GAAY,EAAA;AAEZ,QAAA,OAAO,IAAI,CAAC;KACf;;8GATQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,SAAS;YAAC,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,gCAAgC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;8BAG9D,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;;;ACAJ,MAAgB,UAAsC,SAAQ,UAAU,CAAA;AAD9E,IAAA,WAAA,GAAA;;AAsBa,QAAA,IAAS,CAAA,SAAA,GAAG,YAAY,EAAW,CAAC;AAE1B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnC,QAAA,IAAA,CAAA,MAAM,GAAG,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAgCvH;IAvDG,IAAa,WAAW,CAAC,WAAoB,EAAA;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KAC7B;IAED,IAAa,MAAM,CAAC,MAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KACxB;IAED,IAAa,MAAM,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KACxB;IAED,IAAa,UAAU,CAAC,UAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAC5B;IAED,IAAa,MAAM,CAAC,MAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KACxB;IAOQ,UAAU,GAAA;QACf,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;KACtF;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,KAAI;YACnC,MAAM,CAAC,sBAAsB,EAAE,CAAC;YAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAClC,SAAC,CAAC,CAAC;KACN;IAEO,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,KAAI;AACjG,YAAA,IAAI,WAAW,EAAE;AACb,gBAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3B,gBAAA,OAAO,MAAK;oBACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1C,iBAAC,CAAC;AACL,aAAA;AACL,SAAC,CAAC,CAAC;KACN;IAEO,sBAAsB,GAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,KAAI;YACvF,IAAI,CAAC,MAAM,IAAI,MAAM;gBAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC;AAC3D,SAAC,CAAC,CAAC;KACN;;uGAvDiB,UAAU,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAV,UAAU,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAD/B,SAAS;8BAEO,WAAW,EAAA,CAAA;sBAAvB,KAAK;gBAIO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAIO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAIO,UAAU,EAAA,CAAA;sBAAtB,KAAK;gBAIO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAIG,SAAS,EAAA,CAAA;sBAAjB,KAAK;;;ACnBV,MAAM,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;AA0BhC,MAAO,sBAAuB,SAAQ,UAAoC,CAAA;AAxBhF,IAAA,WAAA,GAAA;;QAgDa,IAAK,CAAA,KAAA,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CACjF,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,IAAI,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CACjD,CAAC;QAEO,IAAM,CAAA,MAAA,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CACnF,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAL,KAAK,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAClD,CAAC;QAEO,IAAI,CAAA,IAAA,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,aAAH,GAAG,KAAA,KAAA,CAAA,GAAH,GAAG,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAC/C,CAAC;QAEO,IAAO,CAAA,OAAA,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CACrF,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,MAAM,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACtD,CAAC;KACL;IApCG,IAAa,IAAI,CAAC,IAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KACtB;IAED,IAAa,KAAK,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KACvB;IAED,IAAa,GAAG,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KACrB;IAED,IAAa,MAAM,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KACxB;IAEQ,UAAU,GAAA;QACf,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;KACtD;;mHAtBQ,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACjB,iBAAiB,EAtBrB,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;AAiBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,OAAO,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAGhC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAxBlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;AAiBT,IAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC;oBAC1C,OAAO,EAAE,CAAC,sBAAsB,CAAC;iBACpC,CAAA;8BAEoC,aAAa,EAAA,CAAA;sBAA7C,YAAY;uBAAC,iBAAiB,CAAA;gBAElB,IAAI,EAAA,CAAA;sBAAhB,KAAK;gBAIO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAIO,GAAG,EAAA,CAAA;sBAAf,KAAK;gBAIO,MAAM,EAAA,CAAA;sBAAlB,KAAK;;;AC1CV,MAAM,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;AAmB/B,MAAO,qBAAsB,SAAQ,UAA6B,CAAA;;kHAA3D,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAChB,iBAAiB,EAfrB,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;KAUT,EACS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAI,6FAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAGvB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAUT,IAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC;oBACjC,OAAO,EAAE,CAAC,sBAAsB,CAAC;iBACpC,CAAA;8BAEoC,aAAa,EAAA,CAAA;sBAA7C,YAAY;uBAAC,iBAAiB,CAAA;;;AC3BnC;;AAEG;;;;"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Directive } from '@angular/core';
|
|
3
|
-
import { NgtRxStore, NgtStore } from 'angular-three';
|
|
3
|
+
import { NgtRxStore, NgtStore, injectNgtRef, injectNgtDestroy, safeDetectChanges } from 'angular-three';
|
|
4
|
+
import { __rest } from 'tslib';
|
|
5
|
+
import { isObservable, of, takeUntil } from 'rxjs';
|
|
6
|
+
import * as THREE from 'three';
|
|
4
7
|
|
|
5
8
|
class NgtsBakeShadows extends NgtRxStore {
|
|
6
9
|
constructor() {
|
|
@@ -24,9 +27,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
|
|
|
24
27
|
args: [{ selector: 'ngts-bake-shadows', standalone: true }]
|
|
25
28
|
}] });
|
|
26
29
|
|
|
30
|
+
function injectNgtsFBO(paramsFactory) {
|
|
31
|
+
const store = inject(NgtStore);
|
|
32
|
+
const targetRef = injectNgtRef();
|
|
33
|
+
const { destroy$, cdr } = injectNgtDestroy(() => {
|
|
34
|
+
var _a;
|
|
35
|
+
(_a = targetRef.nativeElement) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
36
|
+
});
|
|
37
|
+
const params = paramsFactory({});
|
|
38
|
+
const params$ = isObservable(params) ? params : of(params);
|
|
39
|
+
params$.pipe(takeUntil(destroy$)).subscribe(({ width, height, settings }) => {
|
|
40
|
+
const { gl, size, viewport } = store.get();
|
|
41
|
+
const _width = typeof width === 'number' ? width : size.width * viewport.dpr;
|
|
42
|
+
const _height = typeof height === 'number' ? height : size.height * viewport.dpr;
|
|
43
|
+
const _settings = (typeof width === 'number' ? settings : width) || {};
|
|
44
|
+
const { samples } = _settings, targetSettings = __rest(_settings, ["samples"]);
|
|
45
|
+
if (!targetRef.nativeElement) {
|
|
46
|
+
const target = new THREE.WebGLRenderTarget(_width, _height, Object.assign({ minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, encoding: gl.outputEncoding, type: THREE.HalfFloatType }, targetSettings));
|
|
47
|
+
if (samples)
|
|
48
|
+
target.samples = samples;
|
|
49
|
+
targetRef.nativeElement = target;
|
|
50
|
+
}
|
|
51
|
+
targetRef.nativeElement.setSize(_width, _height);
|
|
52
|
+
if (samples)
|
|
53
|
+
targetRef.nativeElement.samples = samples;
|
|
54
|
+
safeDetectChanges(cdr);
|
|
55
|
+
});
|
|
56
|
+
return targetRef;
|
|
57
|
+
}
|
|
58
|
+
|
|
27
59
|
/**
|
|
28
60
|
* Generated bundle index. Do not edit.
|
|
29
61
|
*/
|
|
30
62
|
|
|
31
|
-
export { NgtsBakeShadows };
|
|
63
|
+
export { NgtsBakeShadows, injectNgtsFBO };
|
|
32
64
|
//# sourceMappingURL=angular-three-soba-misc.mjs.map
|
|
@@ -1 +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":"
|
|
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/lib/fbo/fbo.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","import { inject } from '@angular/core';\nimport { injectNgtDestroy, injectNgtRef, NgtStore, safeDetectChanges } from 'angular-three';\nimport { isObservable, Observable, of, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\n\ninterface FBOSettings<T extends boolean = false> extends THREE.WebGLRenderTargetOptions {\n multisample?: T;\n samples?: number;\n}\n\nexport interface NgtsFBOParams<T extends boolean = false> {\n width?: number | FBOSettings<T>;\n height?: number;\n settings?: FBOSettings<T>;\n}\n\nexport function injectNgtsFBO<T extends boolean = false>(\n paramsFactory: (defaultParams: Partial<NgtsFBOParams<T>>) => NgtsFBOParams<T> | Observable<NgtsFBOParams<T>>\n) {\n const store = inject(NgtStore);\n const targetRef = injectNgtRef<THREE.WebGLRenderTarget>();\n const { destroy$, cdr } = injectNgtDestroy(() => {\n targetRef.nativeElement?.dispose();\n });\n const params = paramsFactory({});\n const params$ = isObservable(params) ? params : of(params);\n\n params$.pipe(takeUntil(destroy$)).subscribe(({ width, height, settings }) => {\n const { gl, size, viewport } = store.get();\n const _width = typeof width === 'number' ? width : size.width * viewport.dpr;\n const _height = typeof height === 'number' ? height : size.height * viewport.dpr;\n const _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\n const { samples, ...targetSettings } = _settings;\n\n if (!targetRef.nativeElement) {\n const target = new THREE.WebGLRenderTarget(_width, _height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n encoding: gl.outputEncoding,\n type: THREE.HalfFloatType,\n ...targetSettings,\n });\n if (samples) target.samples = samples;\n targetRef.nativeElement = target;\n }\n\n targetRef.nativeElement.setSize(_width, _height);\n if (samples) targetRef.nativeElement.samples = samples;\n safeDetectChanges(cdr);\n });\n\n return targetRef;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -130,7 +130,9 @@ class NgtsStats extends NgtRxStore {
|
|
|
130
130
|
constructor() {
|
|
131
131
|
super(...arguments);
|
|
132
132
|
this.document = inject(DOCUMENT);
|
|
133
|
-
this.stats =
|
|
133
|
+
this.stats = Stats['default']
|
|
134
|
+
? new Stats['default']()
|
|
135
|
+
: new Stats();
|
|
134
136
|
}
|
|
135
137
|
set showPanel(showPanel) {
|
|
136
138
|
this.set({ showPanel: showPanel === undefined ? this.get('showPanel') : showPanel });
|