angular-three-postprocessing 1.5.2 → 1.6.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/effects/lib/bloom/bloom.d.ts +1 -1
- package/effects/lib/brightness-contrast/brightness-contrast.d.ts +1 -1
- package/effects/lib/color-depth/color-depth.d.ts +1 -1
- package/effects/lib/depth/depth.d.ts +1 -1
- package/effects/lib/dot-screen/dot-screen.d.ts +1 -1
- package/effects/lib/hue-saturation/hue-saturation.d.ts +1 -1
- package/effects/lib/lut/lut.d.ts +1 -1
- package/effects/lib/noise/noise.d.ts +1 -1
- package/effects/lib/scanline/scanline.d.ts +1 -1
- package/effects/lib/sepia/sepia.d.ts +1 -1
- package/effects/lib/ssao/ssao.d.ts +1 -1
- package/effects/lib/tilt-shift/tilt-shift.d.ts +1 -1
- package/effects/lib/tone-mapping/tone-mapping.d.ts +1 -1
- package/effects/lib/vignette/vignette.d.ts +1 -1
- package/esm2022/effects/lib/bloom/bloom.mjs +44 -0
- package/esm2022/effects/lib/brightness-contrast/brightness-contrast.mjs +29 -0
- package/esm2022/effects/lib/color-depth/color-depth.mjs +29 -0
- package/esm2022/effects/lib/depth/depth.mjs +29 -0
- package/esm2022/effects/lib/dot-screen/dot-screen.mjs +29 -0
- package/esm2022/effects/lib/hue-saturation/hue-saturation.mjs +29 -0
- package/esm2022/effects/lib/lut/lut.mjs +60 -0
- package/esm2022/effects/lib/noise/noise.mjs +33 -0
- package/esm2022/effects/lib/scanline/scanline.mjs +33 -0
- package/esm2022/effects/lib/sepia/sepia.mjs +29 -0
- package/esm2022/effects/lib/ssao/ssao.mjs +102 -0
- package/esm2022/effects/lib/tilt-shift/tilt-shift.mjs +43 -0
- package/esm2022/effects/lib/tone-mapping/tone-mapping.mjs +39 -0
- package/esm2022/effects/lib/vignette/vignette.mjs +29 -0
- package/esm2022/lib/effect-composer.mjs +241 -0
- package/esm2022/lib/effect.mjs +80 -0
- package/esm2022/selection/lib/select.mjs +69 -0
- package/esm2022/selection/lib/selection.mjs +44 -0
- package/{fesm2020 → fesm2022}/angular-three-postprocessing-effects.mjs +70 -70
- package/{fesm2015 → fesm2022}/angular-three-postprocessing-effects.mjs.map +1 -1
- package/{fesm2015 → fesm2022}/angular-three-postprocessing-selection.mjs +10 -10
- package/{fesm2015 → fesm2022}/angular-three-postprocessing-selection.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/angular-three-postprocessing.mjs +11 -11
- package/{fesm2020 → fesm2022}/angular-three-postprocessing.mjs.map +1 -1
- package/lib/effect-composer.d.ts +1 -1
- package/lib/effect.d.ts +1 -1
- package/package.json +20 -29
- package/plugin/package.json +1 -1
- package/plugin/src/generators/init/compat.js +1 -1
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/init.d.ts +1 -1
- package/plugin/src/generators/init/init.js +1 -1
- package/plugin/src/generators/init/init.js.map +1 -1
- package/selection/lib/select.d.ts +1 -1
- package/selection/lib/selection.d.ts +1 -1
- package/esm2020/effects/lib/bloom/bloom.mjs +0 -43
- package/esm2020/effects/lib/brightness-contrast/brightness-contrast.mjs +0 -28
- package/esm2020/effects/lib/color-depth/color-depth.mjs +0 -28
- package/esm2020/effects/lib/depth/depth.mjs +0 -28
- package/esm2020/effects/lib/dot-screen/dot-screen.mjs +0 -28
- package/esm2020/effects/lib/hue-saturation/hue-saturation.mjs +0 -28
- package/esm2020/effects/lib/lut/lut.mjs +0 -59
- package/esm2020/effects/lib/noise/noise.mjs +0 -32
- package/esm2020/effects/lib/scanline/scanline.mjs +0 -32
- package/esm2020/effects/lib/sepia/sepia.mjs +0 -28
- package/esm2020/effects/lib/ssao/ssao.mjs +0 -101
- package/esm2020/effects/lib/tilt-shift/tilt-shift.mjs +0 -42
- package/esm2020/effects/lib/tone-mapping/tone-mapping.mjs +0 -38
- package/esm2020/effects/lib/vignette/vignette.mjs +0 -28
- package/esm2020/lib/effect-composer.mjs +0 -240
- package/esm2020/lib/effect.mjs +0 -79
- package/esm2020/selection/lib/select.mjs +0 -68
- package/esm2020/selection/lib/selection.mjs +0 -43
- package/fesm2015/angular-three-postprocessing-effects.mjs +0 -481
- package/fesm2015/angular-three-postprocessing.mjs +0 -317
- package/fesm2015/angular-three-postprocessing.mjs.map +0 -1
- package/fesm2020/angular-three-postprocessing-effects.mjs.map +0 -1
- package/fesm2020/angular-three-postprocessing-selection.mjs +0 -114
- package/fesm2020/angular-three-postprocessing-selection.mjs.map +0 -1
- /package/{esm2020 → esm2022}/angular-three-postprocessing.mjs +0 -0
- /package/{esm2020 → esm2022}/effects/angular-three-postprocessing-effects.mjs +0 -0
- /package/{esm2020 → esm2022}/effects/index.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/selection/angular-three-postprocessing-selection.mjs +0 -0
- /package/{esm2020 → esm2022}/selection/index.mjs +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
|
|
2
|
+
import { injectNgtRef, NgtArgs, NgtRxStore } from 'angular-three';
|
|
3
|
+
import { componentInputsToCombinedStream, NGTP_EFFECT_COMPOSER_API, simpleChangesToStateObject, } from 'angular-three-postprocessing';
|
|
4
|
+
import { BlendFunction, SSAOEffect } from 'postprocessing';
|
|
5
|
+
import { combineLatest, map } from 'rxjs';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
class NgtpSSAO extends NgtRxStore {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.effectComposerApi = inject(NGTP_EFFECT_COMPOSER_API);
|
|
11
|
+
this.ssaoRef = injectNgtRef();
|
|
12
|
+
}
|
|
13
|
+
initialize() {
|
|
14
|
+
super.initialize();
|
|
15
|
+
this.set({
|
|
16
|
+
blendFunction: BlendFunction.MULTIPLY,
|
|
17
|
+
samples: 30,
|
|
18
|
+
rings: 4,
|
|
19
|
+
distanceThreshold: 1.0,
|
|
20
|
+
distanceFalloff: 0.0,
|
|
21
|
+
rangeThreshold: 0.5,
|
|
22
|
+
rangeFalloff: 0.1,
|
|
23
|
+
luminanceInfluence: 0.9,
|
|
24
|
+
radius: 20,
|
|
25
|
+
scale: 0.5,
|
|
26
|
+
bias: 0.5,
|
|
27
|
+
intensity: 1.0,
|
|
28
|
+
color: null,
|
|
29
|
+
depthAwareUpsampling: true,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
ngOnChanges(changes) {
|
|
33
|
+
this.set((s) => ({
|
|
34
|
+
...s,
|
|
35
|
+
...simpleChangesToStateObject(changes, ['ssaoRef']),
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this.connect('effect', combineLatest([
|
|
40
|
+
this.effectComposerApi.select('entities'),
|
|
41
|
+
this.effectComposerApi.select('activeCamera'),
|
|
42
|
+
componentInputsToCombinedStream(this, (input) => input.propName !== 'ssaoRef'),
|
|
43
|
+
]).pipe(map(([[, normalPass, downSamplingPass], camera, props]) => {
|
|
44
|
+
const { resolutionScale } = this.effectComposerApi;
|
|
45
|
+
if (props['normalDepthBuffer'] === undefined) {
|
|
46
|
+
props['normalDepthBuffer'] = downSamplingPass ? downSamplingPass.texture : null;
|
|
47
|
+
}
|
|
48
|
+
if (props['resolutionScale'] === undefined) {
|
|
49
|
+
props['resolutionScale'] = resolutionScale ?? 1;
|
|
50
|
+
}
|
|
51
|
+
return new SSAOEffect(camera, normalPass && !downSamplingPass ? normalPass.texture : null, props);
|
|
52
|
+
})));
|
|
53
|
+
}
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpSSAO, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtpSSAO, isStandalone: true, selector: "ngtp-ssao", inputs: { blendFunction: "blendFunction", distanceScaling: "distanceScaling", depthAwareUpsampling: "depthAwareUpsampling", normalDepthBuffer: "normalDepthBuffer", samples: "samples", rings: "rings", worldDistanceThreshold: "worldDistanceThreshold", worldDistanceFalloff: "worldDistanceFalloff", worldProximityThreshold: "worldProximityThreshold", worldProximityFalloff: "worldProximityFalloff", distanceThreshold: "distanceThreshold", distanceFalloff: "distanceFalloff", rangeThreshold: "rangeThreshold", rangeFalloff: "rangeFalloff", minRadiusScale: "minRadiusScale", luminanceInfluence: "luminanceInfluence", radius: "radius", intensity: "intensity", bias: "bias", fade: "fade", color: "color", resolutionScale: "resolutionScale", resolutionX: "resolutionX", resolutionY: "resolutionY", width: "width", height: "height", ssaoRef: "ssaoRef" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
|
|
56
|
+
<ngt-primitive *args="[get('effect')]" [ref]="ssaoRef" />
|
|
57
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
|
|
58
|
+
}
|
|
59
|
+
export { NgtpSSAO };
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpSSAO, decorators: [{
|
|
61
|
+
type: Component,
|
|
62
|
+
args: [{
|
|
63
|
+
selector: 'ngtp-ssao',
|
|
64
|
+
standalone: true,
|
|
65
|
+
template: `
|
|
66
|
+
<ngt-primitive *args="[get('effect')]" [ref]="ssaoRef" />
|
|
67
|
+
`,
|
|
68
|
+
imports: [NgtArgs],
|
|
69
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
70
|
+
inputs: [
|
|
71
|
+
'blendFunction',
|
|
72
|
+
'distanceScaling',
|
|
73
|
+
'depthAwareUpsampling',
|
|
74
|
+
'normalDepthBuffer',
|
|
75
|
+
'samples',
|
|
76
|
+
'rings',
|
|
77
|
+
'worldDistanceThreshold',
|
|
78
|
+
'worldDistanceFalloff',
|
|
79
|
+
'worldProximityThreshold',
|
|
80
|
+
'worldProximityFalloff',
|
|
81
|
+
'distanceThreshold',
|
|
82
|
+
'distanceFalloff',
|
|
83
|
+
'rangeThreshold',
|
|
84
|
+
'rangeFalloff',
|
|
85
|
+
'minRadiusScale',
|
|
86
|
+
'luminanceInfluence',
|
|
87
|
+
'radius',
|
|
88
|
+
'intensity',
|
|
89
|
+
'bias',
|
|
90
|
+
'fade',
|
|
91
|
+
'color',
|
|
92
|
+
'resolutionScale',
|
|
93
|
+
'resolutionX',
|
|
94
|
+
'resolutionY',
|
|
95
|
+
'width',
|
|
96
|
+
'height',
|
|
97
|
+
],
|
|
98
|
+
}]
|
|
99
|
+
}], propDecorators: { ssaoRef: [{
|
|
100
|
+
type: Input
|
|
101
|
+
}] } });
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Nhby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1wb3N0cHJvY2Vzc2luZy9lZmZlY3RzL3NyYy9saWIvc3Nhby9zc2FvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0Isd0JBQXdCLEVBQ3hCLDBCQUEwQixHQUM3QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRTFDLE1BcUNhLFFBQVMsU0FBUSxVQUFVO0lBckN4Qzs7UUFzQ3FCLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRTdELFlBQU8sR0FBRyxZQUFZLEVBQWMsQ0FBQztLQXlEakQ7SUF2RFksVUFBVTtRQUNmLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ0wsYUFBYSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQ3JDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLENBQUM7WUFDUixpQkFBaUIsRUFBRSxHQUFHO1lBQ3RCLGVBQWUsRUFBRSxHQUFHO1lBQ3BCLGNBQWMsRUFBRSxHQUFHO1lBQ25CLFlBQVksRUFBRSxHQUFHO1lBQ2pCLGtCQUFrQixFQUFFLEdBQUc7WUFDdkIsTUFBTSxFQUFFLEVBQUU7WUFDVixLQUFLLEVBQUUsR0FBRztZQUNWLElBQUksRUFBRSxHQUFHO1lBQ1QsU0FBUyxFQUFFLEdBQUc7WUFDZCxLQUFLLEVBQUUsSUFBSztZQUNaLG9CQUFvQixFQUFFLElBQUk7U0FDN0IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsR0FBRyxDQUFDO1lBQ0osR0FBRywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLE9BQU8sQ0FDUixRQUFRLEVBQ1IsYUFBYSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDN0MsK0JBQStCLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztTQUNqRixDQUFDLENBQUMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3RELE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFFbkQsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQzFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUNuRjtZQUVELElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUN4QyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxlQUFlLElBQUksQ0FBQyxDQUFDO2FBQ25EO1lBRUQsT0FBTyxJQUFJLFVBQVUsQ0FDakIsTUFBTSxFQUNOLFVBQVUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQzNELEtBQW9ELENBQ3ZELENBQUM7UUFDTixDQUFDLENBQUMsQ0FDTCxDQUNKLENBQUM7SUFDTixDQUFDOzhHQTNEUSxRQUFRO2tHQUFSLFFBQVEsKzdCQWxDUDs7S0FFVCw0REFDUyxPQUFPOztTQStCUixRQUFROzJGQUFSLFFBQVE7a0JBckNwQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxXQUFXO29CQUNyQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOztLQUVUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE1BQU0sRUFBRTt3QkFDSixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsT0FBTzt3QkFDUCx3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIseUJBQXlCO3dCQUN6Qix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLFFBQVE7d0JBQ1IsV0FBVzt3QkFDWCxNQUFNO3dCQUNOLE1BQU07d0JBQ04sT0FBTzt3QkFDUCxpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixPQUFPO3dCQUNQLFFBQVE7cUJBQ1g7aUJBQ0o7OEJBSVksT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0UmVmLCBOZ3RBcmdzLCBOZ3RSeFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQge1xuICAgIGNvbXBvbmVudElucHV0c1RvQ29tYmluZWRTdHJlYW0sXG4gICAgTkdUUF9FRkZFQ1RfQ09NUE9TRVJfQVBJLFxuICAgIHNpbXBsZUNoYW5nZXNUb1N0YXRlT2JqZWN0LFxufSBmcm9tICdhbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nJztcbmltcG9ydCB7IEJsZW5kRnVuY3Rpb24sIFNTQU9FZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RwLXNzYW8nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbZ2V0KCdlZmZlY3QnKV1cIiBbcmVmXT1cInNzYW9SZWZcIiAvPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndEFyZ3NdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgICBpbnB1dHM6IFtcbiAgICAgICAgJ2JsZW5kRnVuY3Rpb24nLFxuICAgICAgICAnZGlzdGFuY2VTY2FsaW5nJyxcbiAgICAgICAgJ2RlcHRoQXdhcmVVcHNhbXBsaW5nJyxcbiAgICAgICAgJ25vcm1hbERlcHRoQnVmZmVyJyxcbiAgICAgICAgJ3NhbXBsZXMnLFxuICAgICAgICAncmluZ3MnLFxuICAgICAgICAnd29ybGREaXN0YW5jZVRocmVzaG9sZCcsXG4gICAgICAgICd3b3JsZERpc3RhbmNlRmFsbG9mZicsXG4gICAgICAgICd3b3JsZFByb3hpbWl0eVRocmVzaG9sZCcsXG4gICAgICAgICd3b3JsZFByb3hpbWl0eUZhbGxvZmYnLFxuICAgICAgICAnZGlzdGFuY2VUaHJlc2hvbGQnLFxuICAgICAgICAnZGlzdGFuY2VGYWxsb2ZmJyxcbiAgICAgICAgJ3JhbmdlVGhyZXNob2xkJyxcbiAgICAgICAgJ3JhbmdlRmFsbG9mZicsXG4gICAgICAgICdtaW5SYWRpdXNTY2FsZScsXG4gICAgICAgICdsdW1pbmFuY2VJbmZsdWVuY2UnLFxuICAgICAgICAncmFkaXVzJyxcbiAgICAgICAgJ2ludGVuc2l0eScsXG4gICAgICAgICdiaWFzJyxcbiAgICAgICAgJ2ZhZGUnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAncmVzb2x1dGlvblNjYWxlJyxcbiAgICAgICAgJ3Jlc29sdXRpb25YJyxcbiAgICAgICAgJ3Jlc29sdXRpb25ZJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cFNTQU8gZXh0ZW5kcyBOZ3RSeFN0b3JlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWZmZWN0Q29tcG9zZXJBcGkgPSBpbmplY3QoTkdUUF9FRkZFQ1RfQ09NUE9TRVJfQVBJKTtcblxuICAgIEBJbnB1dCgpIHNzYW9SZWYgPSBpbmplY3ROZ3RSZWY8U1NBT0VmZmVjdD4oKTtcblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jdGlvbi5NVUxUSVBMWSxcbiAgICAgICAgICAgIHNhbXBsZXM6IDMwLFxuICAgICAgICAgICAgcmluZ3M6IDQsXG4gICAgICAgICAgICBkaXN0YW5jZVRocmVzaG9sZDogMS4wLFxuICAgICAgICAgICAgZGlzdGFuY2VGYWxsb2ZmOiAwLjAsXG4gICAgICAgICAgICByYW5nZVRocmVzaG9sZDogMC41LFxuICAgICAgICAgICAgcmFuZ2VGYWxsb2ZmOiAwLjEsXG4gICAgICAgICAgICBsdW1pbmFuY2VJbmZsdWVuY2U6IDAuOSxcbiAgICAgICAgICAgIHJhZGl1czogMjAsXG4gICAgICAgICAgICBzY2FsZTogMC41LFxuICAgICAgICAgICAgYmlhczogMC41LFxuICAgICAgICAgICAgaW50ZW5zaXR5OiAxLjAsXG4gICAgICAgICAgICBjb2xvcjogbnVsbCEsXG4gICAgICAgICAgICBkZXB0aEF3YXJlVXBzYW1wbGluZzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICB0aGlzLnNldCgocykgPT4gKHtcbiAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICAuLi5zaW1wbGVDaGFuZ2VzVG9TdGF0ZU9iamVjdChjaGFuZ2VzLCBbJ3NzYW9SZWYnXSksXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ2VmZmVjdCcsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdENvbXBvc2VyQXBpLnNlbGVjdCgnZW50aXRpZXMnKSxcbiAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdENvbXBvc2VyQXBpLnNlbGVjdCgnYWN0aXZlQ2FtZXJhJyksXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5wdXRzVG9Db21iaW5lZFN0cmVhbSh0aGlzLCAoaW5wdXQpID0+IGlucHV0LnByb3BOYW1lICE9PSAnc3Nhb1JlZicpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtbLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzXSwgY2FtZXJhLCBwcm9wc10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZXNvbHV0aW9uU2NhbGUgfSA9IHRoaXMuZWZmZWN0Q29tcG9zZXJBcGk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzWydub3JtYWxEZXB0aEJ1ZmZlciddID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzWydub3JtYWxEZXB0aEJ1ZmZlciddID0gZG93blNhbXBsaW5nUGFzcyA/IGRvd25TYW1wbGluZ1Bhc3MudGV4dHVyZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHNbJ3Jlc29sdXRpb25TY2FsZSddID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzWydyZXNvbHV0aW9uU2NhbGUnXSA9IHJlc29sdXRpb25TY2FsZSA/PyAxO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTU0FPRWZmZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsUGFzcyAmJiAhZG93blNhbXBsaW5nUGFzcyA/IG5vcm1hbFBhc3MudGV4dHVyZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFNTQU9FZmZlY3Q+WzJdXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
2
|
+
import { NgtArgs } from 'angular-three';
|
|
3
|
+
import { NgtpEffect } from 'angular-three-postprocessing';
|
|
4
|
+
import { BlendFunction, TiltShiftEffect } from 'postprocessing';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
class NgtpTiltShift extends NgtpEffect {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.defaultBlendMode = BlendFunction.ADD;
|
|
10
|
+
}
|
|
11
|
+
get effectConstructor() {
|
|
12
|
+
return TiltShiftEffect;
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpTiltShift, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtpTiltShift, isStandalone: true, selector: "ngtp-tilt-shift", inputs: { offset: "offset", rotation: "rotation", focusArea: "focusArea", feather: "feather", bias: "bias", kernelSize: "kernelSize", resolutionScale: "resolutionScale", resolutionX: "resolutionX", resolutionY: "resolutionY" }, usesInheritance: true, ngImport: i0, template: `
|
|
16
|
+
<ngt-primitive *args="[get('effect')]" ngtCompound />
|
|
17
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
|
|
18
|
+
}
|
|
19
|
+
export { NgtpTiltShift };
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpTiltShift, decorators: [{
|
|
21
|
+
type: Component,
|
|
22
|
+
args: [{
|
|
23
|
+
selector: 'ngtp-tilt-shift',
|
|
24
|
+
standalone: true,
|
|
25
|
+
template: `
|
|
26
|
+
<ngt-primitive *args="[get('effect')]" ngtCompound />
|
|
27
|
+
`,
|
|
28
|
+
imports: [NgtArgs],
|
|
29
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
30
|
+
inputs: [
|
|
31
|
+
'offset',
|
|
32
|
+
'rotation',
|
|
33
|
+
'focusArea',
|
|
34
|
+
'feather',
|
|
35
|
+
'bias',
|
|
36
|
+
'kernelSize',
|
|
37
|
+
'resolutionScale',
|
|
38
|
+
'resolutionX',
|
|
39
|
+
'resolutionY',
|
|
40
|
+
],
|
|
41
|
+
}]
|
|
42
|
+
}] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsdC1zaGlmdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1wb3N0cHJvY2Vzc2luZy9lZmZlY3RzL3NyYy9saWIvdGlsdC1zaGlmdC90aWx0LXNoaWZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFaEUsTUFvQmEsYUFBYyxTQUFRLFVBQTJCO0lBcEI5RDs7UUF5QmEscUJBQWdCLEdBQWtCLGFBQWEsQ0FBQyxHQUFHLENBQUM7S0FDaEU7SUFMRyxJQUFhLGlCQUFpQjtRQUMxQixPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDOzhHQUhRLGFBQWE7a0dBQWIsYUFBYSxzVUFqQlo7O0tBRVQsNERBQ1MsT0FBTzs7U0FjUixhQUFhOzJGQUFiLGFBQWE7a0JBcEJ6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7O0tBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsTUFBTSxFQUFFO3dCQUNKLFFBQVE7d0JBQ1IsVUFBVTt3QkFDVixXQUFXO3dCQUNYLFNBQVM7d0JBQ1QsTUFBTTt3QkFDTixZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixhQUFhO3FCQUNoQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0cEVmZmVjdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtcG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgQmxlbmRGdW5jdGlvbiwgVGlsdFNoaWZ0RWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHAtdGlsdC1zaGlmdCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltnZXQoJ2VmZmVjdCcpXVwiIG5ndENvbXBvdW5kIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICAgIGlucHV0czogW1xuICAgICAgICAnb2Zmc2V0JyxcbiAgICAgICAgJ3JvdGF0aW9uJyxcbiAgICAgICAgJ2ZvY3VzQXJlYScsXG4gICAgICAgICdmZWF0aGVyJyxcbiAgICAgICAgJ2JpYXMnLFxuICAgICAgICAna2VybmVsU2l6ZScsXG4gICAgICAgICdyZXNvbHV0aW9uU2NhbGUnLFxuICAgICAgICAncmVzb2x1dGlvblgnLFxuICAgICAgICAncmVzb2x1dGlvblknLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBUaWx0U2hpZnQgZXh0ZW5kcyBOZ3RwRWZmZWN0PFRpbHRTaGlmdEVmZmVjdD4ge1xuICAgIG92ZXJyaWRlIGdldCBlZmZlY3RDb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgcmV0dXJuIFRpbHRTaGlmdEVmZmVjdDtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkZWZhdWx0QmxlbmRNb2RlOiBCbGVuZEZ1bmN0aW9uID0gQmxlbmRGdW5jdGlvbi5BREQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
2
|
+
import { NgtArgs } from 'angular-three';
|
|
3
|
+
import { NgtpEffect } from 'angular-three-postprocessing';
|
|
4
|
+
import { ToneMappingEffect } from 'postprocessing';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
class NgtpToneMapping extends NgtpEffect {
|
|
7
|
+
get effectConstructor() {
|
|
8
|
+
return ToneMappingEffect;
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpToneMapping, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
11
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtpToneMapping, isStandalone: true, selector: "ngtp-tone-mapping", inputs: { adaptive: "adaptive", mode: "mode", resolution: "resolution", maxLuminance: "maxLuminance", whitePoint: "whitePoint", middleGrey: "middleGrey", minLuminance: "minLuminance", averageLuminance: "averageLuminance", adaptationRate: "adaptationRate" }, usesInheritance: true, ngImport: i0, template: `
|
|
12
|
+
<ngt-primitive *args="[get('effect')]" ngtCompound />
|
|
13
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
|
|
14
|
+
}
|
|
15
|
+
export { NgtpToneMapping };
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpToneMapping, decorators: [{
|
|
17
|
+
type: Component,
|
|
18
|
+
args: [{
|
|
19
|
+
selector: 'ngtp-tone-mapping',
|
|
20
|
+
standalone: true,
|
|
21
|
+
template: `
|
|
22
|
+
<ngt-primitive *args="[get('effect')]" ngtCompound />
|
|
23
|
+
`,
|
|
24
|
+
imports: [NgtArgs],
|
|
25
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
26
|
+
inputs: [
|
|
27
|
+
'adaptive',
|
|
28
|
+
'mode',
|
|
29
|
+
'resolution',
|
|
30
|
+
'maxLuminance',
|
|
31
|
+
'whitePoint',
|
|
32
|
+
'middleGrey',
|
|
33
|
+
'minLuminance',
|
|
34
|
+
'averageLuminance',
|
|
35
|
+
'adaptationRate',
|
|
36
|
+
],
|
|
37
|
+
}]
|
|
38
|
+
}] });
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9uZS1tYXBwaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nL2VmZmVjdHMvc3JjL2xpYi90b25lLW1hcHBpbmcvdG9uZS1tYXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRW5ELE1Bb0JhLGVBQWdCLFNBQVEsVUFBNkI7SUFDOUQsSUFBYSxpQkFBaUI7UUFDMUIsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDOzhHQUhRLGVBQWU7a0dBQWYsZUFBZSxzV0FqQmQ7O0tBRVQsNERBQ1MsT0FBTzs7U0FjUixlQUFlOzJGQUFmLGVBQWU7a0JBcEIzQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7O0tBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsTUFBTSxFQUFFO3dCQUNKLFVBQVU7d0JBQ1YsTUFBTTt3QkFDTixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixnQkFBZ0I7cUJBQ25CO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RwRWZmZWN0IH0gZnJvbSAnYW5ndWxhci10aHJlZS1wb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBUb25lTWFwcGluZ0VmZmVjdCB9IGZyb20gJ3Bvc3Rwcm9jZXNzaW5nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RwLXRvbmUtbWFwcGluZycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltnZXQoJ2VmZmVjdCcpXVwiIG5ndENvbXBvdW5kIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICAgIGlucHV0czogW1xuICAgICAgICAnYWRhcHRpdmUnLFxuICAgICAgICAnbW9kZScsXG4gICAgICAgICdyZXNvbHV0aW9uJyxcbiAgICAgICAgJ21heEx1bWluYW5jZScsXG4gICAgICAgICd3aGl0ZVBvaW50JyxcbiAgICAgICAgJ21pZGRsZUdyZXknLFxuICAgICAgICAnbWluTHVtaW5hbmNlJyxcbiAgICAgICAgJ2F2ZXJhZ2VMdW1pbmFuY2UnLFxuICAgICAgICAnYWRhcHRhdGlvblJhdGUnLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBUb25lTWFwcGluZyBleHRlbmRzIE5ndHBFZmZlY3Q8VG9uZU1hcHBpbmdFZmZlY3Q+IHtcbiAgICBvdmVycmlkZSBnZXQgZWZmZWN0Q29uc3RydWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBUb25lTWFwcGluZ0VmZmVjdDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
2
|
+
import { NgtArgs } from 'angular-three';
|
|
3
|
+
import { NgtpEffect } from 'angular-three-postprocessing';
|
|
4
|
+
import { VignetteEffect } from 'postprocessing';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
class NgtpVignette extends NgtpEffect {
|
|
7
|
+
get effectConstructor() {
|
|
8
|
+
return VignetteEffect;
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpVignette, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
11
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtpVignette, isStandalone: true, selector: "ngtp-vignette", inputs: { technique: "technique", eskil: "eskil", offset: "offset", darkness: "darkness" }, usesInheritance: true, ngImport: i0, template: `
|
|
12
|
+
<ngt-primitive *args="[get('effect')]" ngtCompound />
|
|
13
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
|
|
14
|
+
}
|
|
15
|
+
export { NgtpVignette };
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpVignette, decorators: [{
|
|
17
|
+
type: Component,
|
|
18
|
+
args: [{
|
|
19
|
+
selector: 'ngtp-vignette',
|
|
20
|
+
standalone: true,
|
|
21
|
+
template: `
|
|
22
|
+
<ngt-primitive *args="[get('effect')]" ngtCompound />
|
|
23
|
+
`,
|
|
24
|
+
imports: [NgtArgs],
|
|
25
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
26
|
+
inputs: ['technique', 'eskil', 'offset', 'darkness'],
|
|
27
|
+
}]
|
|
28
|
+
}] });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlnbmV0dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtcG9zdHByb2Nlc3NpbmcvZWZmZWN0cy9zcmMvbGliL3ZpZ25ldHRlL3ZpZ25ldHRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUVoRCxNQVVhLFlBQWEsU0FBUSxVQUEwQjtJQUN4RCxJQUFhLGlCQUFpQjtRQUMxQixPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDOzhHQUhRLFlBQVk7a0dBQVosWUFBWSw0TEFQWDs7S0FFVCw0REFDUyxPQUFPOztTQUlSLFlBQVk7MkZBQVosWUFBWTtrQkFWeEIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7S0FFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUM7aUJBQ3ZEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RwRWZmZWN0IH0gZnJvbSAnYW5ndWxhci10aHJlZS1wb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBWaWduZXR0ZUVmZmVjdCB9IGZyb20gJ3Bvc3Rwcm9jZXNzaW5nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RwLXZpZ25ldHRlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2dldCgnZWZmZWN0JyldXCIgbmd0Q29tcG91bmQgLz5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RBcmdzXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gICAgaW5wdXRzOiBbJ3RlY2huaXF1ZScsICdlc2tpbCcsICdvZmZzZXQnLCAnZGFya25lc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cFZpZ25ldHRlIGV4dGVuZHMgTmd0cEVmZmVjdDxWaWduZXR0ZUVmZmVjdD4ge1xuICAgIG92ZXJyaWRlIGdldCBlZmZlY3RDb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgcmV0dXJuIFZpZ25ldHRlRWZmZWN0O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, InjectionToken, Input } from '@angular/core';
|
|
2
|
+
import { RxActionFactory } from '@rx-angular/state/actions';
|
|
3
|
+
import { extend, getLocalState, injectNgtRef, NgtRxStore, NgtStore, startWithUndefined } from 'angular-three';
|
|
4
|
+
import { DepthDownsamplingPass, EffectComposer, EffectPass, NormalPass, RenderPass } from 'postprocessing';
|
|
5
|
+
import { combineLatest, map } from 'rxjs';
|
|
6
|
+
import * as THREE from 'three';
|
|
7
|
+
import { Group } from 'three';
|
|
8
|
+
import { isWebGL2Available } from 'three-stdlib';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
extend({ Group });
|
|
11
|
+
export const NGTP_EFFECT_COMPOSER_API = new InjectionToken('NgtpEffectComposer API');
|
|
12
|
+
function effectComposerApiFactory(composer) {
|
|
13
|
+
const api = {};
|
|
14
|
+
Object.defineProperties(api, {
|
|
15
|
+
composer: { get: () => composer.get('entities')[0] },
|
|
16
|
+
normalPass: { get: () => composer.get('entities')[1] },
|
|
17
|
+
downSamplingPass: { get: () => composer.get('entities')[2] },
|
|
18
|
+
resolutionScale: { get: () => composer.get('resolutionScale') },
|
|
19
|
+
scene: { get: () => composer.get('activeScene') },
|
|
20
|
+
camera: { get: () => composer.get('activeCamera') },
|
|
21
|
+
select: { get: () => composer.select.bind(composer) },
|
|
22
|
+
get: { get: () => composer.get.bind(composer) },
|
|
23
|
+
});
|
|
24
|
+
return api;
|
|
25
|
+
}
|
|
26
|
+
class NgtpEffectComposer extends NgtRxStore {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(...arguments);
|
|
29
|
+
this.composerRef = injectNgtRef();
|
|
30
|
+
this.store = inject(NgtStore);
|
|
31
|
+
this.actions = inject((RxActionFactory)).create();
|
|
32
|
+
}
|
|
33
|
+
set enabled(enabled) {
|
|
34
|
+
this.set({ enabled });
|
|
35
|
+
}
|
|
36
|
+
set depthBuffer(depthBuffer) {
|
|
37
|
+
this.set({ depthBuffer });
|
|
38
|
+
}
|
|
39
|
+
set disableNormalPass(disableNormalPass) {
|
|
40
|
+
this.set({ disableNormalPass });
|
|
41
|
+
}
|
|
42
|
+
set stencilBuffer(stencilBuffer) {
|
|
43
|
+
this.set({ stencilBuffer });
|
|
44
|
+
}
|
|
45
|
+
set autoClear(autoClear) {
|
|
46
|
+
this.set({ autoClear });
|
|
47
|
+
}
|
|
48
|
+
set resolutionScale(resolutionScale) {
|
|
49
|
+
this.set({ resolutionScale });
|
|
50
|
+
}
|
|
51
|
+
set multisampling(multisampling) {
|
|
52
|
+
this.set({ multisampling });
|
|
53
|
+
}
|
|
54
|
+
set frameBufferType(frameBufferType) {
|
|
55
|
+
this.set({ frameBufferType });
|
|
56
|
+
}
|
|
57
|
+
set renderPriority(renderPriority) {
|
|
58
|
+
this.set({ renderPriority });
|
|
59
|
+
}
|
|
60
|
+
set camera(camera) {
|
|
61
|
+
this.set({ camera });
|
|
62
|
+
}
|
|
63
|
+
set scene(scene) {
|
|
64
|
+
this.set({ scene });
|
|
65
|
+
}
|
|
66
|
+
initialize() {
|
|
67
|
+
super.initialize();
|
|
68
|
+
this.set({
|
|
69
|
+
enabled: true,
|
|
70
|
+
renderPriority: 1,
|
|
71
|
+
autoClear: true,
|
|
72
|
+
multisampling: 0,
|
|
73
|
+
frameBufferType: THREE.HalfFloatType,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
ngOnInit() {
|
|
77
|
+
this.connect('activeScene', combineLatest([this.store.select('scene'), this.select('scene').pipe(startWithUndefined())]).pipe(map(([defaultScene, scene]) => scene || defaultScene)));
|
|
78
|
+
this.connect('activeCamera', combineLatest([this.store.select('camera'), this.select('camera').pipe(startWithUndefined())]).pipe(map(([defaultCamera, camera]) => camera || defaultCamera)));
|
|
79
|
+
this.connect('entities', combineLatest([
|
|
80
|
+
this.store.select('gl'),
|
|
81
|
+
this.select('activeScene'),
|
|
82
|
+
this.select('activeCamera'),
|
|
83
|
+
this.select('multisampling'),
|
|
84
|
+
this.select('frameBufferType'),
|
|
85
|
+
this.select('depthBuffer').pipe(startWithUndefined()),
|
|
86
|
+
this.select('stencilBuffer').pipe(startWithUndefined()),
|
|
87
|
+
this.select('disableNormalPass').pipe(startWithUndefined()),
|
|
88
|
+
this.select('resolutionScale').pipe(startWithUndefined()),
|
|
89
|
+
]).pipe(map(([gl, scene, camera, multisampling, frameBufferType, depthBuffer, stencilBuffer, disableNormalPass, resolutionScale,]) => {
|
|
90
|
+
const webGL2Available = isWebGL2Available();
|
|
91
|
+
// Initialize composer
|
|
92
|
+
const effectComposer = new EffectComposer(gl, {
|
|
93
|
+
depthBuffer,
|
|
94
|
+
stencilBuffer,
|
|
95
|
+
multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
|
|
96
|
+
frameBufferType,
|
|
97
|
+
});
|
|
98
|
+
// Add render pass
|
|
99
|
+
effectComposer.addPass(new RenderPass(scene, camera));
|
|
100
|
+
// Create normal pass
|
|
101
|
+
let downSamplingPass = null;
|
|
102
|
+
let normalPass = null;
|
|
103
|
+
if (!disableNormalPass) {
|
|
104
|
+
normalPass = new NormalPass(scene, camera);
|
|
105
|
+
normalPass.enabled = false;
|
|
106
|
+
effectComposer.addPass(normalPass);
|
|
107
|
+
if (resolutionScale !== undefined && webGL2Available) {
|
|
108
|
+
downSamplingPass = new DepthDownsamplingPass({
|
|
109
|
+
normalBuffer: normalPass.texture,
|
|
110
|
+
resolutionScale,
|
|
111
|
+
});
|
|
112
|
+
downSamplingPass.enabled = false;
|
|
113
|
+
effectComposer.addPass(downSamplingPass);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return [effectComposer, normalPass, downSamplingPass];
|
|
117
|
+
})));
|
|
118
|
+
this.setComposerSize();
|
|
119
|
+
this.setEffectPassed();
|
|
120
|
+
this.setBeforeRender();
|
|
121
|
+
}
|
|
122
|
+
setComposerSize() {
|
|
123
|
+
this.hold(combineLatest([this.select('entities'), this.store.select('size')]), ([[composer], size]) => void composer.setSize(size.width, size.height));
|
|
124
|
+
}
|
|
125
|
+
setEffectPassed() {
|
|
126
|
+
this.effect(combineLatest([
|
|
127
|
+
this.select('entities'),
|
|
128
|
+
this.select('activeCamera'),
|
|
129
|
+
this.composerRef.children$('nonObjects'),
|
|
130
|
+
]), ([[composer, normalPass, downSamplingPass], camera, effects]) => {
|
|
131
|
+
let effectPass;
|
|
132
|
+
if (this.composerRef.nativeElement &&
|
|
133
|
+
Object.keys(getLocalState(this.composerRef.nativeElement)).length &&
|
|
134
|
+
composer) {
|
|
135
|
+
effectPass = new EffectPass(camera, ...effects);
|
|
136
|
+
effectPass.renderToScreen = true;
|
|
137
|
+
composer.addPass(effectPass);
|
|
138
|
+
if (normalPass)
|
|
139
|
+
normalPass.enabled = true;
|
|
140
|
+
if (downSamplingPass)
|
|
141
|
+
downSamplingPass.enabled = true;
|
|
142
|
+
}
|
|
143
|
+
return () => {
|
|
144
|
+
if (effectPass)
|
|
145
|
+
composer?.removePass(effectPass);
|
|
146
|
+
if (normalPass)
|
|
147
|
+
normalPass.enabled = false;
|
|
148
|
+
if (downSamplingPass)
|
|
149
|
+
downSamplingPass.enabled = false;
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
setBeforeRender() {
|
|
154
|
+
const renderPriority = this.get('renderPriority');
|
|
155
|
+
const enabled = this.get('enabled');
|
|
156
|
+
this.effect(this.actions.setBeforeRender$, () => this.store.get('internal').subscribe(({ delta }) => {
|
|
157
|
+
const [composer] = this.get('entities') || [];
|
|
158
|
+
const enabled = this.get('enabled');
|
|
159
|
+
const autoClear = this.get('autoClear');
|
|
160
|
+
const gl = this.store.get('gl');
|
|
161
|
+
const size = this.store.get('size');
|
|
162
|
+
const camera = this.store.get('camera');
|
|
163
|
+
if (composer && enabled) {
|
|
164
|
+
if (!gl.xr.isPresenting) {
|
|
165
|
+
gl.autoClear = autoClear;
|
|
166
|
+
composer.render(delta);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// manually handle XR
|
|
170
|
+
gl.xr.enabled = false;
|
|
171
|
+
// update camera with XRPose
|
|
172
|
+
gl.xr.updateCamera(camera);
|
|
173
|
+
// render stereo cameras
|
|
174
|
+
const { cameras } = gl.xr.getCamera();
|
|
175
|
+
cameras.forEach(({ viewport, matrixWorld, projectionMatrix }) => {
|
|
176
|
+
gl.setViewport(viewport);
|
|
177
|
+
camera.position.setFromMatrixPosition(matrixWorld);
|
|
178
|
+
camera.projectionMatrix.copy(projectionMatrix);
|
|
179
|
+
composer.render(delta);
|
|
180
|
+
});
|
|
181
|
+
// reset
|
|
182
|
+
gl.setViewport(0, 0, size.width, size.height);
|
|
183
|
+
gl.xr.updateCamera(camera);
|
|
184
|
+
gl.xr.enabled = true;
|
|
185
|
+
}
|
|
186
|
+
}, enabled ? renderPriority : 0));
|
|
187
|
+
this.actions.setBeforeRender();
|
|
188
|
+
}
|
|
189
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpEffectComposer, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
190
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtpEffectComposer, isStandalone: true, selector: "ngtp-effect-composer", inputs: { composerRef: "composerRef", enabled: "enabled", depthBuffer: "depthBuffer", disableNormalPass: "disableNormalPass", stencilBuffer: "stencilBuffer", autoClear: "autoClear", resolutionScale: "resolutionScale", multisampling: "multisampling", frameBufferType: "frameBufferType", renderPriority: "renderPriority", camera: "camera", scene: "scene" }, providers: [
|
|
191
|
+
{ provide: NGTP_EFFECT_COMPOSER_API, useFactory: effectComposerApiFactory, deps: [NgtpEffectComposer] },
|
|
192
|
+
RxActionFactory,
|
|
193
|
+
], usesInheritance: true, ngImport: i0, template: `
|
|
194
|
+
<ngt-group [ref]="composerRef">
|
|
195
|
+
<ng-content />
|
|
196
|
+
</ngt-group>
|
|
197
|
+
`, isInline: true }); }
|
|
198
|
+
}
|
|
199
|
+
export { NgtpEffectComposer };
|
|
200
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpEffectComposer, decorators: [{
|
|
201
|
+
type: Component,
|
|
202
|
+
args: [{
|
|
203
|
+
selector: 'ngtp-effect-composer',
|
|
204
|
+
standalone: true,
|
|
205
|
+
template: `
|
|
206
|
+
<ngt-group [ref]="composerRef">
|
|
207
|
+
<ng-content />
|
|
208
|
+
</ngt-group>
|
|
209
|
+
`,
|
|
210
|
+
providers: [
|
|
211
|
+
{ provide: NGTP_EFFECT_COMPOSER_API, useFactory: effectComposerApiFactory, deps: [NgtpEffectComposer] },
|
|
212
|
+
RxActionFactory,
|
|
213
|
+
],
|
|
214
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
215
|
+
}]
|
|
216
|
+
}], propDecorators: { composerRef: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], enabled: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], depthBuffer: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], disableNormalPass: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], stencilBuffer: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], autoClear: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], resolutionScale: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], multisampling: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], frameBufferType: [{
|
|
233
|
+
type: Input
|
|
234
|
+
}], renderPriority: [{
|
|
235
|
+
type: Input
|
|
236
|
+
}], camera: [{
|
|
237
|
+
type: Input
|
|
238
|
+
}], scene: [{
|
|
239
|
+
type: Input
|
|
240
|
+
}] } });
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0LWNvbXBvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFakQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQWFsQixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBd0Isd0JBQXdCLENBQUMsQ0FBQztBQUU1RyxTQUFTLHdCQUF3QixDQUFDLFFBQTRCO0lBQzFELE1BQU0sR0FBRyxHQUFHLEVBQTJCLENBQUM7SUFFeEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtRQUN6QixRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFB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QUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3ZHLGVBQWU7U0FDbEIsaURBUlM7Ozs7S0FJVDs7U0FPUSxrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFkOUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0tBSVQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNQLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7d0JBQ3ZHLGVBQWU7cUJBQ2xCO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFFWSxXQUFXO3NCQUFuQixLQUFLO2dCQUVPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQUlPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSeEFjdGlvbkZhY3RvcnkgfSBmcm9tICdAcngtYW5ndWxhci9zdGF0ZS9hY3Rpb25zJztcbmltcG9ydCB7IGV4dGVuZCwgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0Tmd0UmVmLCBOZ3RSeFN0b3JlLCBOZ3RTdG9yZSwgc3RhcnRXaXRoVW5kZWZpbmVkIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBEZXB0aERvd25zYW1wbGluZ1Bhc3MsIEVmZmVjdENvbXBvc2VyLCBFZmZlY3RQYXNzLCBOb3JtYWxQYXNzLCBSZW5kZXJQYXNzIH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGlzV2ViR0wyQXZhaWxhYmxlIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0cEVmZmVjdENvbXBvc2VyQXBpIHtcbiAgICBjb21wb3NlcjogRWZmZWN0Q29tcG9zZXI7XG4gICAgbm9ybWFsUGFzczogTm9ybWFsUGFzcyB8IG51bGw7XG4gICAgZGVwdGhQYXNzOiBEZXB0aERvd25zYW1wbGluZ1Bhc3MgfCBudWxsO1xuICAgIHNjZW5lOiBUSFJFRS5TY2VuZTtcbiAgICBjYW1lcmE6IFRIUkVFLkNhbWVyYTtcbiAgICByZXNvbHV0aW9uU2NhbGU/OiBudW1iZXI7XG4gICAgc2VsZWN0OiBOZ3RwRWZmZWN0Q29tcG9zZXJbJ3NlbGVjdCddO1xuICAgIGdldDogTmd0cEVmZmVjdENvbXBvc2VyWydnZXQnXTtcbn1cblxuZXhwb3J0IGNvbnN0IE5HVFBfRUZGRUNUX0NPTVBPU0VSX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3RwRWZmZWN0Q29tcG9zZXJBcGk+KCdOZ3RwRWZmZWN0Q29tcG9zZXIgQVBJJyk7XG5cbmZ1bmN0aW9uIGVmZmVjdENvbXBvc2VyQXBpRmFjdG9yeShjb21wb3NlcjogTmd0cEVmZmVjdENvbXBvc2VyKSB7XG4gICAgY29uc3QgYXBpID0ge30gYXMgTmd0cEVmZmVjdENvbXBvc2VyQXBpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XG4gICAgICAgIGNvbXBvc2VyOiB7IGdldDogKCkgPT4gY29tcG9zZXIuZ2V0KCdlbnRpdGllcycpWzBdIH0sXG4gICAgICAgIG5vcm1hbFBhc3M6IHsgZ2V0OiAoKSA9PiBjb21wb3Nlci5nZXQoJ2VudGl0aWVzJylbMV0gfSxcbiAgICAgICAgZG93blNhbXBsaW5nUGFzczogeyBnZXQ6ICgpID0+IGNvbXBvc2VyLmdldCgnZW50aXRpZXMnKVsyXSB9LFxuICAgICAgICByZXNvbHV0aW9uU2NhbGU6IHsgZ2V0OiAoKSA9PiBjb21wb3Nlci5nZXQoJ3Jlc29sdXRpb25TY2FsZScpIH0sXG4gICAgICAgIHNjZW5lOiB7IGdldDogKCkgPT4gY29tcG9zZXIuZ2V0KCdhY3RpdmVTY2VuZScpIH0sXG4gICAgICAgIGNhbWVyYTogeyBnZXQ6ICgpID0+IGNvbXBvc2VyLmdldCgnYWN0aXZlQ2FtZXJhJykgfSxcbiAgICAgICAgc2VsZWN0OiB7IGdldDogKCkgPT4gY29tcG9zZXIuc2VsZWN0LmJpbmQoY29tcG9zZXIpIH0sXG4gICAgICAgIGdldDogeyBnZXQ6ICgpID0+IGNvbXBvc2VyLmdldC5iaW5kKGNvbXBvc2VyKSB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFwaTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RwLWVmZmVjdC1jb21wb3NlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWdyb3VwIFtyZWZdPVwiY29tcG9zZXJSZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdUUF9FRkZFQ1RfQ09NUE9TRVJfQVBJLCB1c2VGYWN0b3J5OiBlZmZlY3RDb21wb3NlckFwaUZhY3RvcnksIGRlcHM6IFtOZ3RwRWZmZWN0Q29tcG9zZXJdIH0sXG4gICAgICAgIFJ4QWN0aW9uRmFjdG9yeSxcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cEVmZmVjdENvbXBvc2VyIGV4dGVuZHMgTmd0UnhTdG9yZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgY29tcG9zZXJSZWYgPSBpbmplY3ROZ3RSZWY8R3JvdXA+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgZW5hYmxlZChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZW5hYmxlZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVwdGhCdWZmZXIoZGVwdGhCdWZmZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZXB0aEJ1ZmZlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGlzYWJsZU5vcm1hbFBhc3MoZGlzYWJsZU5vcm1hbFBhc3M6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXNhYmxlTm9ybWFsUGFzcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc3RlbmNpbEJ1ZmZlcihzdGVuY2lsQnVmZmVyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3RlbmNpbEJ1ZmZlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXV0b0NsZWFyKGF1dG9DbGVhcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGF1dG9DbGVhciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVzb2x1dGlvblNjYWxlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtdWx0aXNhbXBsaW5nKG11bHRpc2FtcGxpbmc6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG11bHRpc2FtcGxpbmcgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZyYW1lQnVmZmVyVHlwZShmcmFtZUJ1ZmZlclR5cGU6IFRIUkVFLlRleHR1cmVEYXRhVHlwZSkge1xuICAgICAgICB0aGlzLnNldCh7IGZyYW1lQnVmZmVyVHlwZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmVuZGVyUHJpb3JpdHkocmVuZGVyUHJpb3JpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJlbmRlclByaW9yaXR5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjYW1lcmEoY2FtZXJhOiBUSFJFRS5DYW1lcmEpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjYW1lcmEgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNjZW5lKHNjZW5lOiBUSFJFRS5TY2VuZSkge1xuICAgICAgICB0aGlzLnNldCh7IHNjZW5lIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbmRlclByaW9yaXR5OiAxLFxuICAgICAgICAgICAgYXV0b0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgbXVsdGlzYW1wbGluZzogMCxcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyVHlwZTogVEhSRUUuSGFsZkZsb2F0VHlwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25zID0gaW5qZWN0KFJ4QWN0aW9uRmFjdG9yeTx7IHNldEJlZm9yZVJlbmRlcjogdm9pZCB9PikuY3JlYXRlKCk7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ2FjdGl2ZVNjZW5lJyxcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmUuc2VsZWN0KCdzY2VuZScpLCB0aGlzLnNlbGVjdCgnc2NlbmUnKS5waXBlKHN0YXJ0V2l0aFVuZGVmaW5lZCgpKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbZGVmYXVsdFNjZW5lLCBzY2VuZV0pID0+IHNjZW5lIHx8IGRlZmF1bHRTY2VuZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnYWN0aXZlQ2FtZXJhJyxcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKSwgdGhpcy5zZWxlY3QoJ2NhbWVyYScpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtkZWZhdWx0Q2FtZXJhLCBjYW1lcmFdKSA9PiBjYW1lcmEgfHwgZGVmYXVsdENhbWVyYSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnZW50aXRpZXMnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGl2ZVNjZW5lJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGl2ZUNhbWVyYScpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtdWx0aXNhbXBsaW5nJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2ZyYW1lQnVmZmVyVHlwZScpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdkZXB0aEJ1ZmZlcicpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdzdGVuY2lsQnVmZmVyJykucGlwZShzdGFydFdpdGhVbmRlZmluZWQoKSksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2Rpc2FibGVOb3JtYWxQYXNzJykucGlwZShzdGFydFdpdGhVbmRlZmluZWQoKSksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3Jlc29sdXRpb25TY2FsZScpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICBnbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjZW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzYW1wbGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoQnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlbmNpbEJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVOb3JtYWxQYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvblNjYWxlLFxuICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3ZWJHTDJBdmFpbGFibGUgPSBpc1dlYkdMMkF2YWlsYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBjb21wb3NlclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWZmZWN0Q29tcG9zZXIgPSBuZXcgRWZmZWN0Q29tcG9zZXIoZ2wsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aEJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVuY2lsQnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc2FtcGxpbmc6IG11bHRpc2FtcGxpbmcgPiAwICYmIHdlYkdMMkF2YWlsYWJsZSA/IG11bHRpc2FtcGxpbmcgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgcmVuZGVyIHBhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdENvbXBvc2VyLmFkZFBhc3MobmV3IFJlbmRlclBhc3Moc2NlbmUsIGNhbWVyYSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgbm9ybWFsIHBhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb3duU2FtcGxpbmdQYXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub3JtYWxQYXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZU5vcm1hbFBhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxQYXNzID0gbmV3IE5vcm1hbFBhc3Moc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsUGFzcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0Q29tcG9zZXIuYWRkUGFzcyhub3JtYWxQYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9PSB1bmRlZmluZWQgJiYgd2ViR0wyQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25TYW1wbGluZ1Bhc3MgPSBuZXcgRGVwdGhEb3duc2FtcGxpbmdQYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbEJ1ZmZlcjogbm9ybWFsUGFzcy50ZXh0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvblNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93blNhbXBsaW5nUGFzcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdENvbXBvc2VyLmFkZFBhc3MoZG93blNhbXBsaW5nUGFzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2VmZmVjdENvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNldENvbXBvc2VyU2l6ZSgpO1xuICAgICAgICB0aGlzLnNldEVmZmVjdFBhc3NlZCgpO1xuICAgICAgICB0aGlzLnNldEJlZm9yZVJlbmRlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29tcG9zZXJTaXplKCkge1xuICAgICAgICB0aGlzLmhvbGQoXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlbGVjdCgnZW50aXRpZXMnKSwgdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKV0pLFxuICAgICAgICAgICAgKFtbY29tcG9zZXJdLCBzaXplXSkgPT4gdm9pZCAoY29tcG9zZXIgYXMgRWZmZWN0Q29tcG9zZXIpLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFZmZlY3RQYXNzZWQoKSB7XG4gICAgICAgIHRoaXMuZWZmZWN0KFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2VudGl0aWVzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGl2ZUNhbWVyYScpLFxuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9zZXJSZWYuY2hpbGRyZW4kKCdub25PYmplY3RzJyksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIChbW2NvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzXSwgY2FtZXJhLCBlZmZlY3RzXSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBlZmZlY3RQYXNzOiBFZmZlY3RQYXNzO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb3NlclJlZi5uYXRpdmVFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGdldExvY2FsU3RhdGUodGhpcy5jb21wb3NlclJlZi5uYXRpdmVFbGVtZW50KSkubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2VyXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGVmZmVjdFBhc3MgPSBuZXcgRWZmZWN0UGFzcyhjYW1lcmEsIC4uLmVmZmVjdHMpO1xuICAgICAgICAgICAgICAgICAgICBlZmZlY3RQYXNzLnJlbmRlclRvU2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZXIuYWRkUGFzcyhlZmZlY3RQYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbFBhc3MpIG5vcm1hbFBhc3MuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb3duU2FtcGxpbmdQYXNzKSBkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlZmZlY3RQYXNzKSBjb21wb3Nlcj8ucmVtb3ZlUGFzcyhlZmZlY3RQYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbFBhc3MpIG5vcm1hbFBhc3MuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG93blNhbXBsaW5nUGFzcykgZG93blNhbXBsaW5nUGFzcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEJlZm9yZVJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyUHJpb3JpdHkgPSB0aGlzLmdldCgncmVuZGVyUHJpb3JpdHknKTtcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuZ2V0KCdlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuZWZmZWN0KHRoaXMuYWN0aW9ucy5zZXRCZWZvcmVSZW5kZXIkLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5zdG9yZS5nZXQoJ2ludGVybmFsJykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICh7IGRlbHRhIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbXBvc2VyXSA9IHRoaXMuZ2V0KCdlbnRpdGllcycpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkID0gdGhpcy5nZXQoJ2VuYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0b0NsZWFyID0gdGhpcy5nZXQoJ2F1dG9DbGVhcicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnbCA9IHRoaXMuc3RvcmUuZ2V0KCdnbCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplID0gdGhpcy5zdG9yZS5nZXQoJ3NpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FtZXJhID0gdGhpcy5zdG9yZS5nZXQoJ2NhbWVyYScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9zZXIgJiYgZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnbC54ci5pc1ByZXNlbnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5hdXRvQ2xlYXIgPSBhdXRvQ2xlYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zZXIucmVuZGVyKGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IGhhbmRsZSBYUlxuICAgICAgICAgICAgICAgICAgICAgICAgZ2wueHIuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGNhbWVyYSB3aXRoIFhSUG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2wueHIudXBkYXRlQ2FtZXJhKGNhbWVyYSBhcyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbmRlciBzdGVyZW8gY2FtZXJhc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjYW1lcmFzIH0gPSBnbC54ci5nZXRDYW1lcmEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYXMuZm9yRWFjaCgoeyB2aWV3cG9ydCwgbWF0cml4V29ybGQsIHByb2plY3Rpb25NYXRyaXggfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG1hdHJpeFdvcmxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KHByb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zZXIucmVuZGVyKGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuc2V0Vmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wueHIudXBkYXRlQ2FtZXJhKGNhbWVyYSBhcyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC54ci5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5hYmxlZCA/IHJlbmRlclByaW9yaXR5IDogMFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFjdGlvbnMuc2V0QmVmb3JlUmVuZGVyKCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Directive, inject, Input, reflectComponentType } from '@angular/core';
|
|
2
|
+
import { NgtRxStore, NgtStore, startWithUndefined } from 'angular-three';
|
|
3
|
+
import { BlendFunction } from 'postprocessing';
|
|
4
|
+
import { combineLatest } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
class NgtpEffect extends NgtRxStore {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.defaultBlendMode = BlendFunction.NORMAL;
|
|
10
|
+
this.store = inject(NgtStore);
|
|
11
|
+
}
|
|
12
|
+
set blendFunction(blendFunction) {
|
|
13
|
+
this.set({ blendFunction });
|
|
14
|
+
}
|
|
15
|
+
set opacity(opacity) {
|
|
16
|
+
this.set({ opacity });
|
|
17
|
+
}
|
|
18
|
+
ngOnChanges(changes) {
|
|
19
|
+
this.set((s) => ({
|
|
20
|
+
...s,
|
|
21
|
+
...simpleChangesToStateObject(changes, ['blendFunction', 'opacity']),
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this.connect('effect', componentInputsToCombinedStream(this), (props) => {
|
|
26
|
+
delete props['__ngt_dummy__'];
|
|
27
|
+
delete props['effect'];
|
|
28
|
+
return new this.effectConstructor(props);
|
|
29
|
+
});
|
|
30
|
+
this.configureBlendMode();
|
|
31
|
+
}
|
|
32
|
+
configureBlendMode() {
|
|
33
|
+
this.hold(combineLatest([
|
|
34
|
+
this.select('effect'),
|
|
35
|
+
this.select('blendFunction').pipe(startWithUndefined()),
|
|
36
|
+
this.select('opacity').pipe(startWithUndefined()),
|
|
37
|
+
]), ([effect, blendFunction, opacity]) => {
|
|
38
|
+
const invalidate = this.store.get('invalidate');
|
|
39
|
+
effect.blendMode.blendFunction =
|
|
40
|
+
!blendFunction && blendFunction !== 0 ? this.defaultBlendMode : blendFunction;
|
|
41
|
+
if (opacity !== undefined)
|
|
42
|
+
effect.blendMode.opacity.value = opacity;
|
|
43
|
+
invalidate();
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpEffect, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
47
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtpEffect, inputs: { blendFunction: "blendFunction", opacity: "opacity" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
|
|
48
|
+
}
|
|
49
|
+
export { NgtpEffect };
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtpEffect, decorators: [{
|
|
51
|
+
type: Directive
|
|
52
|
+
}], propDecorators: { blendFunction: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}], opacity: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}] } });
|
|
57
|
+
export function simpleChangesToStateObject(changes, keysToDelete = []) {
|
|
58
|
+
for (const key of keysToDelete) {
|
|
59
|
+
if (changes[key])
|
|
60
|
+
delete changes[key];
|
|
61
|
+
}
|
|
62
|
+
return Object.entries(changes).reduce((obj, [key, change]) => {
|
|
63
|
+
obj[key] = change.currentValue;
|
|
64
|
+
return obj;
|
|
65
|
+
}, {});
|
|
66
|
+
}
|
|
67
|
+
export function componentInputsToCombinedStream(component, filterFn = () => true) {
|
|
68
|
+
const inputs = reflectComponentType(component.constructor)
|
|
69
|
+
?.inputs.filter(filterFn)
|
|
70
|
+
.map((input) => input.propName) || [];
|
|
71
|
+
return combineLatest(inputs.reduce((combined, input) => {
|
|
72
|
+
let input$ = component.select(input);
|
|
73
|
+
if (component.get(input) === undefined) {
|
|
74
|
+
input$ = input$.pipe(startWithUndefined());
|
|
75
|
+
}
|
|
76
|
+
combined[input] = input$;
|
|
77
|
+
return combined;
|
|
78
|
+
}, {}));
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsb0JBQW9CLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBZ0IsVUFBVSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFFakQsTUFDc0IsVUFBNkIsU0FBUSxVQUFVO0lBRHJFOztRQVljLHFCQUFnQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDL0IsVUFBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQWtDL0M7SUE3Q0csSUFBYSxhQUFhLENBQUMsYUFBNEI7UUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQWEsT0FBTyxDQUFDLE9BQWU7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQU9ELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsR0FBRyxDQUFDO1lBQ0osR0FBRywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDdkUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFF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QUMsQ0FBQztTQUM5QztRQUNELFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDekIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQyxFQUFFLEVBQXFDLENBQUMsQ0FDNUMsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCByZWZsZWN0Q29tcG9uZW50VHlwZSwgU2ltcGxlQ2hhbmdlcywgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QW55UmVjb3JkLCBOZ3RSeFN0b3JlLCBOZ3RTdG9yZSwgc3RhcnRXaXRoVW5kZWZpbmVkIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBCbGVuZEZ1bmN0aW9uLCBFZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5ndHBFZmZlY3Q8VCBleHRlbmRzIEVmZmVjdD4gZXh0ZW5kcyBOZ3RSeFN0b3JlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIHNldCBibGVuZEZ1bmN0aW9uKGJsZW5kRnVuY3Rpb246IEJsZW5kRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBibGVuZEZ1bmN0aW9uIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG9wYWNpdHkgfSk7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ2V0IGVmZmVjdENvbnN0cnVjdG9yKCk6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEJsZW5kTW9kZSA9IEJsZW5kRnVuY3Rpb24uTk9STUFMO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuc2V0KChzKSA9PiAoe1xuICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgIC4uLnNpbXBsZUNoYW5nZXNUb1N0YXRlT2JqZWN0KGNoYW5nZXMsIFsnYmxlbmRGdW5jdGlvbicsICdvcGFjaXR5J10pLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdCgnZWZmZWN0JywgY29tcG9uZW50SW5wdXRzVG9Db21iaW5lZFN0cmVhbSh0aGlzKSwgKHByb3BzKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgcHJvcHNbJ19fbmd0X2R1bW15X18nXTtcbiAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1snZWZmZWN0J107XG4gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuZWZmZWN0Q29uc3RydWN0b3IocHJvcHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVCbGVuZE1vZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ3VyZUJsZW5kTW9kZSgpIHtcbiAgICAgICAgdGhpcy5ob2xkKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2VmZmVjdCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdibGVuZEZ1bmN0aW9uJykucGlwZShzdGFydFdpdGhVbmRlZmluZWQoKSksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ29wYWNpdHknKS5waXBlKHN0YXJ0V2l0aFVuZGVmaW5lZCgpKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKFtlZmZlY3QsIGJsZW5kRnVuY3Rpb24sIG9wYWNpdHldKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuZ2V0KCdpbnZhbGlkYXRlJyk7XG4gICAgICAgICAgICAgICAgZWZmZWN0LmJsZW5kTW9kZS5ibGVuZEZ1bmN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgIWJsZW5kRnVuY3Rpb24gJiYgYmxlbmRGdW5jdGlvbiAhPT0gMCA/IHRoaXMuZGVmYXVsdEJsZW5kTW9kZSA6IGJsZW5kRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgaWYgKG9wYWNpdHkgIT09IHVuZGVmaW5lZCkgZWZmZWN0LmJsZW5kTW9kZS5vcGFjaXR5LnZhbHVlID0gb3BhY2l0eTtcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlQ2hhbmdlc1RvU3RhdGVPYmplY3QoY2hhbmdlczogU2ltcGxlQ2hhbmdlcywga2V5c1RvRGVsZXRlOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1RvRGVsZXRlKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzW2tleV0pIGRlbGV0ZSBjaGFuZ2VzW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLnJlZHVjZSgob2JqLCBba2V5LCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgIG9ialtrZXldID0gY2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSBhcyBOZ3RBbnlSZWNvcmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9uZW50SW5wdXRzVG9Db21iaW5lZFN0cmVhbShcbiAgICBjb21wb25lbnQ6IE5ndFJ4U3RvcmUsXG4gICAgZmlsdGVyRm46IChpbnB1dDogeyBwcm9wTmFtZTogc3RyaW5nOyB0ZW1wbGF0ZU5hbWU6IHN0cmluZyB9KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKTogT2JzZXJ2YWJsZTxOZ3RBbnlSZWNvcmQ+IHtcbiAgICBjb25zdCBpbnB1dHMgPVxuICAgICAgICByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQuY29uc3RydWN0b3IgYXMgVHlwZTxhbnk+KVxuICAgICAgICAgICAgPy5pbnB1dHMuZmlsdGVyKGZpbHRlckZuKVxuICAgICAgICAgICAgLm1hcCgoaW5wdXQpID0+IGlucHV0LnByb3BOYW1lKSB8fCBbXTtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgICAgICBpbnB1dHMucmVkdWNlKChjb21iaW5lZCwgaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGxldCBpbnB1dCQgPSBjb21wb25lbnQuc2VsZWN0KGlucHV0KTtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0KGlucHV0KSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQkID0gaW5wdXQkLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tYmluZWRbaW5wdXRdID0gaW5wdXQkO1xuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkO1xuICAgICAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlPGFueT4+KVxuICAgICk7XG59XG4iXX0=
|