angular-three-postprocessing 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +15 -0
  2. package/effects/README.md +3 -0
  3. package/effects/index.d.ts +14 -0
  4. package/effects/lib/bloom/bloom.d.ts +9 -0
  5. package/effects/lib/brightness-contrast/brightness-contrast.d.ts +8 -0
  6. package/effects/lib/color-depth/color-depth.d.ts +8 -0
  7. package/effects/lib/depth/depth.d.ts +8 -0
  8. package/effects/lib/dot-screen/dot-screen.d.ts +8 -0
  9. package/effects/lib/hue-saturation/hue-saturation.d.ts +8 -0
  10. package/effects/lib/lut/lut.d.ts +13 -0
  11. package/effects/lib/noise/noise.d.ts +9 -0
  12. package/effects/lib/scanline/scanline.d.ts +9 -0
  13. package/effects/lib/sepia/sepia.d.ts +8 -0
  14. package/effects/lib/ssao/ssao.d.ts +13 -0
  15. package/effects/lib/tilt-shift/tilt-shift.d.ts +9 -0
  16. package/effects/lib/tone-mapping/tone-mapping.d.ts +8 -0
  17. package/effects/lib/vignette/vignette.d.ts +8 -0
  18. package/esm2020/angular-three-postprocessing.mjs +5 -0
  19. package/esm2020/effects/angular-three-postprocessing-effects.mjs +5 -0
  20. package/esm2020/effects/index.mjs +15 -0
  21. package/esm2020/effects/lib/bloom/bloom.mjs +43 -0
  22. package/esm2020/effects/lib/brightness-contrast/brightness-contrast.mjs +28 -0
  23. package/esm2020/effects/lib/color-depth/color-depth.mjs +28 -0
  24. package/esm2020/effects/lib/depth/depth.mjs +28 -0
  25. package/esm2020/effects/lib/dot-screen/dot-screen.mjs +28 -0
  26. package/esm2020/effects/lib/hue-saturation/hue-saturation.mjs +28 -0
  27. package/esm2020/effects/lib/lut/lut.mjs +59 -0
  28. package/esm2020/effects/lib/noise/noise.mjs +32 -0
  29. package/esm2020/effects/lib/scanline/scanline.mjs +32 -0
  30. package/esm2020/effects/lib/sepia/sepia.mjs +28 -0
  31. package/esm2020/effects/lib/ssao/ssao.mjs +101 -0
  32. package/esm2020/effects/lib/tilt-shift/tilt-shift.mjs +42 -0
  33. package/esm2020/effects/lib/tone-mapping/tone-mapping.mjs +38 -0
  34. package/esm2020/effects/lib/vignette/vignette.mjs +28 -0
  35. package/esm2020/index.mjs +3 -0
  36. package/esm2020/lib/effect-composer.mjs +218 -0
  37. package/esm2020/lib/effect.mjs +79 -0
  38. package/fesm2015/angular-three-postprocessing-effects.mjs +481 -0
  39. package/fesm2015/angular-three-postprocessing-effects.mjs.map +1 -0
  40. package/fesm2015/angular-three-postprocessing.mjs +295 -0
  41. package/fesm2015/angular-three-postprocessing.mjs.map +1 -0
  42. package/fesm2020/angular-three-postprocessing-effects.mjs +484 -0
  43. package/fesm2020/angular-three-postprocessing-effects.mjs.map +1 -0
  44. package/fesm2020/angular-three-postprocessing.mjs +299 -0
  45. package/fesm2020/angular-three-postprocessing.mjs.map +1 -0
  46. package/index.d.ts +2 -0
  47. package/lib/effect-composer.d.ts +39 -0
  48. package/lib/effect.d.ts +22 -0
  49. package/package.json +68 -0
  50. package/plugin/README.md +11 -0
  51. package/plugin/generators.json +19 -0
  52. package/plugin/package.json +10 -0
  53. package/plugin/src/generators/init/compat.d.ts +2 -0
  54. package/plugin/src/generators/init/compat.js +6 -0
  55. package/plugin/src/generators/init/compat.js.map +1 -0
  56. package/plugin/src/generators/init/init.d.ts +4 -0
  57. package/plugin/src/generators/init/init.js +26 -0
  58. package/plugin/src/generators/init/init.js.map +1 -0
  59. package/plugin/src/generators/init/schema.json +6 -0
  60. package/plugin/src/index.d.ts +1 -0
  61. package/plugin/src/index.js +6 -0
  62. package/plugin/src/index.js.map +1 -0
@@ -0,0 +1,28 @@
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { NgtArgs } from 'angular-three';
3
+ import { NgtpEffect } from 'angular-three-postprocessing';
4
+ import { SepiaEffect } from 'postprocessing';
5
+ import * as i0 from "@angular/core";
6
+ export class NgtpSepia extends NgtpEffect {
7
+ get effectConstructor() {
8
+ return SepiaEffect;
9
+ }
10
+ }
11
+ NgtpSepia.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpSepia, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
+ NgtpSepia.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NgtpSepia, isStandalone: true, selector: "ngtp-sepia", inputs: { intensity: "intensity" }, usesInheritance: true, ngImport: i0, template: `
13
+ <ngt-primitive *args="[get('effect')]" ngtCompound />
14
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpSepia, decorators: [{
16
+ type: Component,
17
+ args: [{
18
+ selector: 'ngtp-sepia',
19
+ standalone: true,
20
+ template: `
21
+ <ngt-primitive *args="[get('effect')]" ngtCompound />
22
+ `,
23
+ imports: [NgtArgs],
24
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
25
+ inputs: ['intensity'],
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VwaWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtcG9zdHByb2Nlc3NpbmcvZWZmZWN0cy9zcmMvbGliL3NlcGlhL3NlcGlhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVk3QyxNQUFNLE9BQU8sU0FBVSxTQUFRLFVBQXVCO0lBQ2xELElBQWEsaUJBQWlCO1FBQzFCLE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7O3NHQUhRLFNBQVM7MEZBQVQsU0FBUyxpSUFQUjs7S0FFVCw0REFDUyxPQUFPOzJGQUlSLFNBQVM7a0JBVnJCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7O0tBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0cEVmZmVjdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtcG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgU2VwaWFFZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cC1zZXBpYScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltnZXQoJ2VmZmVjdCcpXVwiIG5ndENvbXBvdW5kIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICAgIGlucHV0czogWydpbnRlbnNpdHknXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cFNlcGlhIGV4dGVuZHMgTmd0cEVmZmVjdDxTZXBpYUVmZmVjdD4ge1xuICAgIG92ZXJyaWRlIGdldCBlZmZlY3RDb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgcmV0dXJuIFNlcGlhRWZmZWN0O1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,101 @@
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
+ export 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
+ }
55
+ NgtpSSAO.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpSSAO, deps: null, target: i0.ɵɵFactoryTarget.Component });
56
+ NgtpSSAO.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", 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: `
57
+ <ngt-primitive *args="[get('effect')]" [ref]="ssaoRef" />
58
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpSSAO, decorators: [{
60
+ type: Component,
61
+ args: [{
62
+ selector: 'ngtp-ssao',
63
+ standalone: true,
64
+ template: `
65
+ <ngt-primitive *args="[get('effect')]" [ref]="ssaoRef" />
66
+ `,
67
+ imports: [NgtArgs],
68
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
69
+ inputs: [
70
+ 'blendFunction',
71
+ 'distanceScaling',
72
+ 'depthAwareUpsampling',
73
+ 'normalDepthBuffer',
74
+ 'samples',
75
+ 'rings',
76
+ 'worldDistanceThreshold',
77
+ 'worldDistanceFalloff',
78
+ 'worldProximityThreshold',
79
+ 'worldProximityFalloff',
80
+ 'distanceThreshold',
81
+ 'distanceFalloff',
82
+ 'rangeThreshold',
83
+ 'rangeFalloff',
84
+ 'minRadiusScale',
85
+ 'luminanceInfluence',
86
+ 'radius',
87
+ 'intensity',
88
+ 'bias',
89
+ 'fade',
90
+ 'color',
91
+ 'resolutionScale',
92
+ 'resolutionX',
93
+ 'resolutionY',
94
+ 'width',
95
+ 'height',
96
+ ],
97
+ }]
98
+ }], propDecorators: { ssaoRef: [{
99
+ type: Input
100
+ }] } });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Nhby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1wb3N0cHJvY2Vzc2luZy9lZmZlY3RzL3NyYy9saWIvc3Nhby9zc2FvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0Isd0JBQXdCLEVBQ3hCLDBCQUEwQixHQUM3QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBdUMxQyxNQUFNLE9BQU8sUUFBUyxTQUFRLFVBQVU7SUFyQ3hDOztRQXNDcUIsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFN0QsWUFBTyxHQUFHLFlBQVksRUFBYyxDQUFDO0tBeURqRDtJQXZEWSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDTCxhQUFhLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDckMsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsQ0FBQztZQUNSLGlCQUFpQixFQUFFLEdBQUc7WUFDdEIsZUFBZSxFQUFFLEdBQUc7WUFDcEIsY0FBYyxFQUFFLEdBQUc7WUFDbkIsWUFBWSxFQUFFLEdBQUc7WUFDakIsa0JBQWtCLEVBQUUsR0FBRztZQUN2QixNQUFNLEVBQUUsRUFBRTtZQUNWLEtBQUssRUFBRSxHQUFHO1lBQ1YsSUFBSSxFQUFFLEdBQUc7WUFDVCxTQUFTLEVBQUUsR0FBRztZQUNkLEtBQUssRUFBRSxJQUFLO1lBQ1osb0JBQW9CLEVBQUUsSUFBSTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDYixHQUFHLENBQUM7WUFDSixHQUFHLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsT0FBTyxDQUNSLFFBQVEsRUFDUixhQUFhLENBQUM7WUFDVixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztZQUM3QywrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO1NBQ2pGLENBQUMsQ0FBQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUVuRCxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDMUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ25GO1lBRUQsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQ3hDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGVBQWUsSUFBSSxDQUFDLENBQUM7YUFDbkQ7WUFFRCxPQUFPLElBQUksVUFBVSxDQUNqQixNQUFNLEVBQ04sVUFBVSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDM0QsS0FBb0QsQ0FDdkQsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUNMLENBQ0osQ0FBQztJQUNOLENBQUM7O3FHQTNEUSxRQUFRO3lGQUFSLFFBQVEsKzdCQWxDUDs7S0FFVCw0REFDUyxPQUFPOzJGQStCUixRQUFRO2tCQXJDcEIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7S0FFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxNQUFNLEVBQUU7d0JBQ0osZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixTQUFTO3dCQUNULE9BQU87d0JBQ1Asd0JBQXdCO3dCQUN4QixzQkFBc0I7d0JBQ3RCLHlCQUF5Qjt3QkFDekIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixRQUFRO3dCQUNSLFdBQVc7d0JBQ1gsTUFBTTt3QkFDTixNQUFNO3dCQUNOLE9BQU87d0JBQ1AsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxRQUFRO3FCQUNYO2lCQUNKOzhCQUlZLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiwgTmd0QXJncywgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHtcbiAgICBjb21wb25lbnRJbnB1dHNUb0NvbWJpbmVkU3RyZWFtLFxuICAgIE5HVFBfRUZGRUNUX0NPTVBPU0VSX0FQSSxcbiAgICBzaW1wbGVDaGFuZ2VzVG9TdGF0ZU9iamVjdCxcbn0gZnJvbSAnYW5ndWxhci10aHJlZS1wb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBCbGVuZEZ1bmN0aW9uLCBTU0FPRWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cC1zc2FvJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2dldCgnZWZmZWN0JyldXCIgW3JlZl09XCJzc2FvUmVmXCIgLz5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RBcmdzXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gICAgaW5wdXRzOiBbXG4gICAgICAgICdibGVuZEZ1bmN0aW9uJyxcbiAgICAgICAgJ2Rpc3RhbmNlU2NhbGluZycsXG4gICAgICAgICdkZXB0aEF3YXJlVXBzYW1wbGluZycsXG4gICAgICAgICdub3JtYWxEZXB0aEJ1ZmZlcicsXG4gICAgICAgICdzYW1wbGVzJyxcbiAgICAgICAgJ3JpbmdzJyxcbiAgICAgICAgJ3dvcmxkRGlzdGFuY2VUaHJlc2hvbGQnLFxuICAgICAgICAnd29ybGREaXN0YW5jZUZhbGxvZmYnLFxuICAgICAgICAnd29ybGRQcm94aW1pdHlUaHJlc2hvbGQnLFxuICAgICAgICAnd29ybGRQcm94aW1pdHlGYWxsb2ZmJyxcbiAgICAgICAgJ2Rpc3RhbmNlVGhyZXNob2xkJyxcbiAgICAgICAgJ2Rpc3RhbmNlRmFsbG9mZicsXG4gICAgICAgICdyYW5nZVRocmVzaG9sZCcsXG4gICAgICAgICdyYW5nZUZhbGxvZmYnLFxuICAgICAgICAnbWluUmFkaXVzU2NhbGUnLFxuICAgICAgICAnbHVtaW5hbmNlSW5mbHVlbmNlJyxcbiAgICAgICAgJ3JhZGl1cycsXG4gICAgICAgICdpbnRlbnNpdHknLFxuICAgICAgICAnYmlhcycsXG4gICAgICAgICdmYWRlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ3Jlc29sdXRpb25TY2FsZScsXG4gICAgICAgICdyZXNvbHV0aW9uWCcsXG4gICAgICAgICdyZXNvbHV0aW9uWScsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICdoZWlnaHQnLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBTU0FPIGV4dGVuZHMgTmd0UnhTdG9yZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVmZmVjdENvbXBvc2VyQXBpID0gaW5qZWN0KE5HVFBfRUZGRUNUX0NPTVBPU0VSX0FQSSk7XG5cbiAgICBASW5wdXQoKSBzc2FvUmVmID0gaW5qZWN0Tmd0UmVmPFNTQU9FZmZlY3Q+KCk7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGJsZW5kRnVuY3Rpb246IEJsZW5kRnVuY3Rpb24uTVVMVElQTFksXG4gICAgICAgICAgICBzYW1wbGVzOiAzMCxcbiAgICAgICAgICAgIHJpbmdzOiA0LFxuICAgICAgICAgICAgZGlzdGFuY2VUaHJlc2hvbGQ6IDEuMCxcbiAgICAgICAgICAgIGRpc3RhbmNlRmFsbG9mZjogMC4wLFxuICAgICAgICAgICAgcmFuZ2VUaHJlc2hvbGQ6IDAuNSxcbiAgICAgICAgICAgIHJhbmdlRmFsbG9mZjogMC4xLFxuICAgICAgICAgICAgbHVtaW5hbmNlSW5mbHVlbmNlOiAwLjksXG4gICAgICAgICAgICByYWRpdXM6IDIwLFxuICAgICAgICAgICAgc2NhbGU6IDAuNSxcbiAgICAgICAgICAgIGJpYXM6IDAuNSxcbiAgICAgICAgICAgIGludGVuc2l0eTogMS4wLFxuICAgICAgICAgICAgY29sb3I6IG51bGwhLFxuICAgICAgICAgICAgZGVwdGhBd2FyZVVwc2FtcGxpbmc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zZXQoKHMpID0+ICh7XG4gICAgICAgICAgICAuLi5zLFxuICAgICAgICAgICAgLi4uc2ltcGxlQ2hhbmdlc1RvU3RhdGVPYmplY3QoY2hhbmdlcywgWydzc2FvUmVmJ10pLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdlZmZlY3QnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wb3NlckFwaS5zZWxlY3QoJ2VudGl0aWVzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RDb21wb3NlckFwaS5zZWxlY3QoJ2FjdGl2ZUNhbWVyYScpLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudElucHV0c1RvQ29tYmluZWRTdHJlYW0odGhpcywgKGlucHV0KSA9PiBpbnB1dC5wcm9wTmFtZSAhPT0gJ3NzYW9SZWYnKSxcbiAgICAgICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbWywgbm9ybWFsUGFzcywgZG93blNhbXBsaW5nUGFzc10sIGNhbWVyYSwgcHJvcHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVzb2x1dGlvblNjYWxlIH0gPSB0aGlzLmVmZmVjdENvbXBvc2VyQXBpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wc1snbm9ybWFsRGVwdGhCdWZmZXInXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wc1snbm9ybWFsRGVwdGhCdWZmZXInXSA9IGRvd25TYW1wbGluZ1Bhc3MgPyBkb3duU2FtcGxpbmdQYXNzLnRleHR1cmUgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzWydyZXNvbHV0aW9uU2NhbGUnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wc1sncmVzb2x1dGlvblNjYWxlJ10gPSByZXNvbHV0aW9uU2NhbGUgPz8gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU1NBT0VmZmVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbFBhc3MgJiYgIWRvd25TYW1wbGluZ1Bhc3MgPyBub3JtYWxQYXNzLnRleHR1cmUgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBTU0FPRWZmZWN0PlsyXVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,42 @@
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
+ export class NgtpTiltShift extends NgtpEffect {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.defaultBlendMode = BlendFunction.ADD;
10
+ }
11
+ get effectConstructor() {
12
+ return TiltShiftEffect;
13
+ }
14
+ }
15
+ NgtpTiltShift.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpTiltShift, deps: null, target: i0.ɵɵFactoryTarget.Component });
16
+ NgtpTiltShift.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", 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: `
17
+ <ngt-primitive *args="[get('effect')]" ngtCompound />
18
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpTiltShift, decorators: [{
20
+ type: Component,
21
+ args: [{
22
+ selector: 'ngtp-tilt-shift',
23
+ standalone: true,
24
+ template: `
25
+ <ngt-primitive *args="[get('effect')]" ngtCompound />
26
+ `,
27
+ imports: [NgtArgs],
28
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
29
+ inputs: [
30
+ 'offset',
31
+ 'rotation',
32
+ 'focusArea',
33
+ 'feather',
34
+ 'bias',
35
+ 'kernelSize',
36
+ 'resolutionScale',
37
+ 'resolutionX',
38
+ 'resolutionY',
39
+ ],
40
+ }]
41
+ }] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsdC1zaGlmdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1wb3N0cHJvY2Vzc2luZy9lZmZlY3RzL3NyYy9saWIvdGlsdC1zaGlmdC90aWx0LXNoaWZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFzQmhFLE1BQU0sT0FBTyxhQUFjLFNBQVEsVUFBMkI7SUFwQjlEOztRQXlCYSxxQkFBZ0IsR0FBa0IsYUFBYSxDQUFDLEdBQUcsQ0FBQztLQUNoRTtJQUxHLElBQWEsaUJBQWlCO1FBQzFCLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7OzBHQUhRLGFBQWE7OEZBQWIsYUFBYSxzVUFqQlo7O0tBRVQsNERBQ1MsT0FBTzsyRkFjUixhQUFhO2tCQXBCekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOztLQUVUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE1BQU0sRUFBRTt3QkFDSixRQUFRO3dCQUNSLFVBQVU7d0JBQ1YsV0FBVzt3QkFDWCxTQUFTO3dCQUNULE1BQU07d0JBQ04sWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsYUFBYTtxQkFDaEI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5ndHBFZmZlY3QgfSBmcm9tICdhbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nJztcbmltcG9ydCB7IEJsZW5kRnVuY3Rpb24sIFRpbHRTaGlmdEVmZmVjdCB9IGZyb20gJ3Bvc3Rwcm9jZXNzaW5nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RwLXRpbHQtc2hpZnQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbZ2V0KCdlZmZlY3QnKV1cIiBuZ3RDb21wb3VuZCAvPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndEFyZ3NdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgICBpbnB1dHM6IFtcbiAgICAgICAgJ29mZnNldCcsXG4gICAgICAgICdyb3RhdGlvbicsXG4gICAgICAgICdmb2N1c0FyZWEnLFxuICAgICAgICAnZmVhdGhlcicsXG4gICAgICAgICdiaWFzJyxcbiAgICAgICAgJ2tlcm5lbFNpemUnLFxuICAgICAgICAncmVzb2x1dGlvblNjYWxlJyxcbiAgICAgICAgJ3Jlc29sdXRpb25YJyxcbiAgICAgICAgJ3Jlc29sdXRpb25ZJyxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RwVGlsdFNoaWZ0IGV4dGVuZHMgTmd0cEVmZmVjdDxUaWx0U2hpZnRFZmZlY3Q+IHtcbiAgICBvdmVycmlkZSBnZXQgZWZmZWN0Q29uc3RydWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBUaWx0U2hpZnRFZmZlY3Q7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGVmYXVsdEJsZW5kTW9kZTogQmxlbmRGdW5jdGlvbiA9IEJsZW5kRnVuY3Rpb24uQUREO1xufVxuIl19
@@ -0,0 +1,38 @@
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
+ export class NgtpToneMapping extends NgtpEffect {
7
+ get effectConstructor() {
8
+ return ToneMappingEffect;
9
+ }
10
+ }
11
+ NgtpToneMapping.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpToneMapping, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
+ NgtpToneMapping.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", 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: `
13
+ <ngt-primitive *args="[get('effect')]" ngtCompound />
14
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpToneMapping, decorators: [{
16
+ type: Component,
17
+ args: [{
18
+ selector: 'ngtp-tone-mapping',
19
+ standalone: true,
20
+ template: `
21
+ <ngt-primitive *args="[get('effect')]" ngtCompound />
22
+ `,
23
+ imports: [NgtArgs],
24
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
25
+ inputs: [
26
+ 'adaptive',
27
+ 'mode',
28
+ 'resolution',
29
+ 'maxLuminance',
30
+ 'whitePoint',
31
+ 'middleGrey',
32
+ 'minLuminance',
33
+ 'averageLuminance',
34
+ 'adaptationRate',
35
+ ],
36
+ }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9uZS1tYXBwaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nL2VmZmVjdHMvc3JjL2xpYi90b25lLW1hcHBpbmcvdG9uZS1tYXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBc0JuRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxVQUE2QjtJQUM5RCxJQUFhLGlCQUFpQjtRQUMxQixPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7OzRHQUhRLGVBQWU7Z0dBQWYsZUFBZSxzV0FqQmQ7O0tBRVQsNERBQ1MsT0FBTzsyRkFjUixlQUFlO2tCQXBCM0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOztLQUVUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE1BQU0sRUFBRTt3QkFDSixVQUFVO3dCQUNWLE1BQU07d0JBQ04sWUFBWTt3QkFDWixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3FCQUNuQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0cEVmZmVjdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtcG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgVG9uZU1hcHBpbmdFZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cC10b25lLW1hcHBpbmcnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbZ2V0KCdlZmZlY3QnKV1cIiBuZ3RDb21wb3VuZCAvPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndEFyZ3NdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgICBpbnB1dHM6IFtcbiAgICAgICAgJ2FkYXB0aXZlJyxcbiAgICAgICAgJ21vZGUnLFxuICAgICAgICAncmVzb2x1dGlvbicsXG4gICAgICAgICdtYXhMdW1pbmFuY2UnLFxuICAgICAgICAnd2hpdGVQb2ludCcsXG4gICAgICAgICdtaWRkbGVHcmV5JyxcbiAgICAgICAgJ21pbkx1bWluYW5jZScsXG4gICAgICAgICdhdmVyYWdlTHVtaW5hbmNlJyxcbiAgICAgICAgJ2FkYXB0YXRpb25SYXRlJyxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RwVG9uZU1hcHBpbmcgZXh0ZW5kcyBOZ3RwRWZmZWN0PFRvbmVNYXBwaW5nRWZmZWN0PiB7XG4gICAgb3ZlcnJpZGUgZ2V0IGVmZmVjdENvbnN0cnVjdG9yKCkge1xuICAgICAgICByZXR1cm4gVG9uZU1hcHBpbmdFZmZlY3Q7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,28 @@
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
+ export class NgtpVignette extends NgtpEffect {
7
+ get effectConstructor() {
8
+ return VignetteEffect;
9
+ }
10
+ }
11
+ NgtpVignette.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpVignette, deps: null, target: i0.ɵɵFactoryTarget.Component });
12
+ NgtpVignette.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NgtpVignette, isStandalone: true, selector: "ngtp-vignette", inputs: { technique: "technique", eskil: "eskil", offset: "offset", darkness: "darkness" }, usesInheritance: true, ngImport: i0, template: `
13
+ <ngt-primitive *args="[get('effect')]" ngtCompound />
14
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpVignette, decorators: [{
16
+ type: Component,
17
+ args: [{
18
+ selector: 'ngtp-vignette',
19
+ standalone: true,
20
+ template: `
21
+ <ngt-primitive *args="[get('effect')]" ngtCompound />
22
+ `,
23
+ imports: [NgtArgs],
24
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
25
+ inputs: ['technique', 'eskil', 'offset', 'darkness'],
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlnbmV0dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtcG9zdHByb2Nlc3NpbmcvZWZmZWN0cy9zcmMvbGliL3ZpZ25ldHRlL3ZpZ25ldHRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVloRCxNQUFNLE9BQU8sWUFBYSxTQUFRLFVBQTBCO0lBQ3hELElBQWEsaUJBQWlCO1FBQzFCLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7O3lHQUhRLFlBQVk7NkZBQVosWUFBWSw0TEFQWDs7S0FFVCw0REFDUyxPQUFPOzJGQUlSLFlBQVk7a0JBVnhCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7O0tBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO2lCQUN2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0cEVmZmVjdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtcG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgVmlnbmV0dGVFZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cC12aWduZXR0ZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltnZXQoJ2VmZmVjdCcpXVwiIG5ndENvbXBvdW5kIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICAgIGlucHV0czogWyd0ZWNobmlxdWUnLCAnZXNraWwnLCAnb2Zmc2V0JywgJ2RhcmtuZXNzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBWaWduZXR0ZSBleHRlbmRzIE5ndHBFZmZlY3Q8VmlnbmV0dGVFZmZlY3Q+IHtcbiAgICBvdmVycmlkZSBnZXQgZWZmZWN0Q29uc3RydWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBWaWduZXR0ZUVmZmVjdDtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './lib/effect';
2
+ export * from './lib/effect-composer';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtcG9zdHByb2Nlc3Npbmcvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9lZmZlY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWZmZWN0LWNvbXBvc2VyJztcbiJdfQ==
@@ -0,0 +1,218 @@
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
+ export 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
+ if (normalPass)
138
+ normalPass.enabled = true;
139
+ if (downSamplingPass)
140
+ downSamplingPass.enabled = true;
141
+ }
142
+ return () => {
143
+ if (effectPass)
144
+ composer?.removePass(effectPass);
145
+ if (normalPass)
146
+ normalPass.enabled = false;
147
+ if (downSamplingPass)
148
+ downSamplingPass.enabled = false;
149
+ };
150
+ });
151
+ }
152
+ setBeforeRender() {
153
+ const renderPriority = this.get('renderPriority');
154
+ const enabled = this.get('enabled');
155
+ this.effect(this.actions.setBeforeRender$, () => this.store.get('internal').subscribe(({ delta }) => {
156
+ const [composer] = this.get('entities') || [];
157
+ const enabled = this.get('enabled');
158
+ const autoClear = this.get('autoClear');
159
+ const gl = this.store.get('gl');
160
+ if (composer && enabled) {
161
+ gl.autoClear = autoClear;
162
+ composer.render(delta);
163
+ }
164
+ }, enabled ? renderPriority : 0));
165
+ this.actions.setBeforeRender();
166
+ }
167
+ }
168
+ NgtpEffectComposer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpEffectComposer, deps: null, target: i0.ɵɵFactoryTarget.Component });
169
+ NgtpEffectComposer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", 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: [
170
+ { provide: NGTP_EFFECT_COMPOSER_API, useFactory: effectComposerApiFactory, deps: [NgtpEffectComposer] },
171
+ RxActionFactory,
172
+ ], usesInheritance: true, ngImport: i0, template: `
173
+ <ngt-group [ref]="composerRef">
174
+ <ng-content />
175
+ </ngt-group>
176
+ `, isInline: true });
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpEffectComposer, decorators: [{
178
+ type: Component,
179
+ args: [{
180
+ selector: 'ngtp-effect-composer',
181
+ standalone: true,
182
+ template: `
183
+ <ngt-group [ref]="composerRef">
184
+ <ng-content />
185
+ </ngt-group>
186
+ `,
187
+ providers: [
188
+ { provide: NGTP_EFFECT_COMPOSER_API, useFactory: effectComposerApiFactory, deps: [NgtpEffectComposer] },
189
+ RxActionFactory,
190
+ ],
191
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
192
+ }]
193
+ }], propDecorators: { composerRef: [{
194
+ type: Input
195
+ }], enabled: [{
196
+ type: Input
197
+ }], depthBuffer: [{
198
+ type: Input
199
+ }], disableNormalPass: [{
200
+ type: Input
201
+ }], stencilBuffer: [{
202
+ type: Input
203
+ }], autoClear: [{
204
+ type: Input
205
+ }], resolutionScale: [{
206
+ type: Input
207
+ }], multisampling: [{
208
+ type: Input
209
+ }], frameBufferType: [{
210
+ type: Input
211
+ }], renderPriority: [{
212
+ type: Input
213
+ }], camera: [{
214
+ type: Input
215
+ }], scene: [{
216
+ type: Input
217
+ }] } });
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0LWNvbXBvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFakQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQWFsQixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBd0Isd0JBQXdCLENBQUMsQ0FBQztBQUU1RyxTQUFTLHdCQUF3QixDQUFDLFFBQTRCO0lBQzFELE1BQU0sR0FBRyxHQUFHLEVBQTJCLENBQUM7SUFFeEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtRQUN6QixRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNwRCxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN0RCxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzVELGVBQWUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDL0QsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDakQsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDbkQsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3JELEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtLQUNsRCxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFnQkQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFVBQVU7SUFkbEQ7O1FBZWEsZ0JBQVcsR0FBRyxZQUFZLEVBQVMsQ0FBQztRQXlENUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QixZQUFPLEdBQUcsTUFBTSxDQUFDLENBQUEsZUFBMEMsQ0FBQSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7S0EwSTFGO0lBbE1HLElBQWEsT0FBTyxDQUFDLE9BQWdCO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLFdBQVcsQ0FBQyxXQUFvQjtRQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBYSxpQkFBaUIsQ0FBQyxpQkFBMEI7UUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBYSxhQUFhLENBQUMsYUFBc0I7UUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLFNBQWtCO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLGVBQWUsQ0FBQyxlQUF1QjtRQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBYSxhQUFhLENBQUMsYUFBcUI7UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQWEsZUFBZSxDQUFDLGVBQXNDO1FBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFhLGNBQWMsQ0FBQyxjQUFzQjtRQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBb0I7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWtCO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFUSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDTCxPQUFPLEVBQUUsSUFBSTtZQUNiLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLENBQUM7WUFDaEIsZUFBZSxFQUFFLEtBQUssQ0FBQyxhQUFhO1NBQ3ZDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFLRCxRQUFRO1FBQ0osSUFBSSxDQUFDLE9BQU8sQ0FDUixhQUFhLEVBQ2IsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdGLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLENBQ3hELENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQ1IsY0FBYyxFQUNkLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRixHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxDQUM1RCxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUNSLFVBQVUsRUFDVixhQUFhLENBQUM7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM1RCxDQUFDLENBQUMsSUFBSSxDQUNILEdBQUcsQ0FDQyxDQUFDLENBQ0csRUFBRSxFQUNGLEtBQUssRUFDTCxNQUFNLEVBQ04sYUFBYSxFQUNiLGVBQWUsRUFDZixXQUFXLEVBQ1gsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixlQUFlLEVBQ2xCLEVBQUUsRUFBRTtZQUNELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDNUMsc0JBQXNCO1lBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsV0FBVztnQkFDWCxhQUFhO2dCQUNiLGFBQWEsRUFBRSxhQUFhLEdBQUcsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxlQUFlO2FBQ2xCLENBQUMsQ0FBQztZQUVILGtCQUFrQjtZQUNsQixjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRXRELHFCQUFxQjtZQUNyQixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNwQixVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQyxVQUFVLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDM0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxlQUFlLEtBQUssU0FBUyxJQUFJLGVBQWUsRUFBRTtvQkFDbEQsZ0JBQWdCLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQzt3QkFDekMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxPQUFPO3dCQUNoQyxlQUFlO3FCQUNsQixDQUFDLENBQUM7b0JBQ0gsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDakMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUM1QzthQUNKO1lBRUQsT0FBTyxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQ0osQ0FDSixDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUNMLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNuRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBTSxRQUEyQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDN0YsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQ1AsYUFBYSxDQUFDO1lBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1NBQzNDLENBQUMsRUFDRixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxVQUFzQixDQUFDO1lBQzNCLElBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO2dCQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDakUsUUFBUSxFQUNWO2dCQUNFLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksVUFBVTtvQkFBRSxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDMUMsSUFBSSxnQkFBZ0I7b0JBQUUsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN6RDtZQUVELE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksVUFBVTtvQkFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLFVBQVU7b0JBQUUsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQzNDLElBQUksZ0JBQWdCO29CQUFFLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDM0QsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sZUFBZTtRQUNuQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FDaEMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDVixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksUUFBUSxJQUFJLE9BQU8sRUFBRTtnQkFDckIsRUFBRSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQ3pCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDMUI7UUFDTCxDQUFDLEVBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0IsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNuQyxDQUFDOzsrR0FwTVEsa0JBQWtCO21HQUFsQixrQkFBa0IsdWFBTmhCO1FBQ1AsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDdkcsZUFBZTtLQUNsQixpREFSUzs7OztLQUlUOzJGQU9RLGtCQUFrQjtrQkFkOUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0tBSVQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNQLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7d0JBQ3ZHLGVBQWU7cUJBQ2xCO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFFWSxXQUFXO3NCQUFuQixLQUFLO2dCQUVPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQUlPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSeEFjdGlvbkZhY3RvcnkgfSBmcm9tICdAcngtYW5ndWxhci9zdGF0ZS9hY3Rpb25zJztcbmltcG9ydCB7IGV4dGVuZCwgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0Tmd0UmVmLCBOZ3RSeFN0b3JlLCBOZ3RTdG9yZSwgc3RhcnRXaXRoVW5kZWZpbmVkIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBEZXB0aERvd25zYW1wbGluZ1Bhc3MsIEVmZmVjdENvbXBvc2VyLCBFZmZlY3RQYXNzLCBOb3JtYWxQYXNzLCBSZW5kZXJQYXNzIH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGlzV2ViR0wyQXZhaWxhYmxlIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0cEVmZmVjdENvbXBvc2VyQXBpIHtcbiAgICBjb21wb3NlcjogRWZmZWN0Q29tcG9zZXI7XG4gICAgbm9ybWFsUGFzczogTm9ybWFsUGFzcyB8IG51bGw7XG4gICAgZGVwdGhQYXNzOiBEZXB0aERvd25zYW1wbGluZ1Bhc3MgfCBudWxsO1xuICAgIHNjZW5lOiBUSFJFRS5TY2VuZTtcbiAgICBjYW1lcmE6IFRIUkVFLkNhbWVyYTtcbiAgICByZXNvbHV0aW9uU2NhbGU/OiBudW1iZXI7XG4gICAgc2VsZWN0OiBOZ3RwRWZmZWN0Q29tcG9zZXJbJ3NlbGVjdCddO1xuICAgIGdldDogTmd0cEVmZmVjdENvbXBvc2VyWydnZXQnXTtcbn1cblxuZXhwb3J0IGNvbnN0IE5HVFBfRUZGRUNUX0NPTVBPU0VSX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3RwRWZmZWN0Q29tcG9zZXJBcGk+KCdOZ3RwRWZmZWN0Q29tcG9zZXIgQVBJJyk7XG5cbmZ1bmN0aW9uIGVmZmVjdENvbXBvc2VyQXBpRmFjdG9yeShjb21wb3NlcjogTmd0cEVmZmVjdENvbXBvc2VyKSB7XG4gICAgY29uc3QgYXBpID0ge30gYXMgTmd0cEVmZmVjdENvbXBvc2VyQXBpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XG4gICAgICAgIGNvbXBvc2VyOiB7IGdldDogKCkgPT4gY29tcG9zZXIuZ2V0KCdlbnRpdGllcycpWzBdIH0sXG4gICAgICAgIG5vcm1hbFBhc3M6IHsgZ2V0OiAoKSA9PiBjb21wb3Nlci5nZXQoJ2VudGl0aWVzJylbMV0gfSxcbiAgICAgICAgZG93blNhbXBsaW5nUGFzczogeyBnZXQ6ICgpID0+IGNvbXBvc2VyLmdldCgnZW50aXRpZXMnKVsyXSB9LFxuICAgICAgICByZXNvbHV0aW9uU2NhbGU6IHsgZ2V0OiAoKSA9PiBjb21wb3Nlci5nZXQoJ3Jlc29sdXRpb25TY2FsZScpIH0sXG4gICAgICAgIHNjZW5lOiB7IGdldDogKCkgPT4gY29tcG9zZXIuZ2V0KCdhY3RpdmVTY2VuZScpIH0sXG4gICAgICAgIGNhbWVyYTogeyBnZXQ6ICgpID0+IGNvbXBvc2VyLmdldCgnYWN0aXZlQ2FtZXJhJykgfSxcbiAgICAgICAgc2VsZWN0OiB7IGdldDogKCkgPT4gY29tcG9zZXIuc2VsZWN0LmJpbmQoY29tcG9zZXIpIH0sXG4gICAgICAgIGdldDogeyBnZXQ6ICgpID0+IGNvbXBvc2VyLmdldC5iaW5kKGNvbXBvc2VyKSB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFwaTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RwLWVmZmVjdC1jb21wb3NlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWdyb3VwIFtyZWZdPVwiY29tcG9zZXJSZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdUUF9FRkZFQ1RfQ09NUE9TRVJfQVBJLCB1c2VGYWN0b3J5OiBlZmZlY3RDb21wb3NlckFwaUZhY3RvcnksIGRlcHM6IFtOZ3RwRWZmZWN0Q29tcG9zZXJdIH0sXG4gICAgICAgIFJ4QWN0aW9uRmFjdG9yeSxcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cEVmZmVjdENvbXBvc2VyIGV4dGVuZHMgTmd0UnhTdG9yZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgY29tcG9zZXJSZWYgPSBpbmplY3ROZ3RSZWY8R3JvdXA+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgZW5hYmxlZChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZW5hYmxlZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVwdGhCdWZmZXIoZGVwdGhCdWZmZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZXB0aEJ1ZmZlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGlzYWJsZU5vcm1hbFBhc3MoZGlzYWJsZU5vcm1hbFBhc3M6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXNhYmxlTm9ybWFsUGFzcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc3RlbmNpbEJ1ZmZlcihzdGVuY2lsQnVmZmVyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3RlbmNpbEJ1ZmZlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXV0b0NsZWFyKGF1dG9DbGVhcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGF1dG9DbGVhciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVzb2x1dGlvblNjYWxlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtdWx0aXNhbXBsaW5nKG11bHRpc2FtcGxpbmc6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG11bHRpc2FtcGxpbmcgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZyYW1lQnVmZmVyVHlwZShmcmFtZUJ1ZmZlclR5cGU6IFRIUkVFLlRleHR1cmVEYXRhVHlwZSkge1xuICAgICAgICB0aGlzLnNldCh7IGZyYW1lQnVmZmVyVHlwZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmVuZGVyUHJpb3JpdHkocmVuZGVyUHJpb3JpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJlbmRlclByaW9yaXR5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjYW1lcmEoY2FtZXJhOiBUSFJFRS5DYW1lcmEpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjYW1lcmEgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNjZW5lKHNjZW5lOiBUSFJFRS5TY2VuZSkge1xuICAgICAgICB0aGlzLnNldCh7IHNjZW5lIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbmRlclByaW9yaXR5OiAxLFxuICAgICAgICAgICAgYXV0b0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgbXVsdGlzYW1wbGluZzogMCxcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyVHlwZTogVEhSRUUuSGFsZkZsb2F0VHlwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25zID0gaW5qZWN0KFJ4QWN0aW9uRmFjdG9yeTx7IHNldEJlZm9yZVJlbmRlcjogdm9pZCB9PikuY3JlYXRlKCk7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ2FjdGl2ZVNjZW5lJyxcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmUuc2VsZWN0KCdzY2VuZScpLCB0aGlzLnNlbGVjdCgnc2NlbmUnKS5waXBlKHN0YXJ0V2l0aFVuZGVmaW5lZCgpKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbZGVmYXVsdFNjZW5lLCBzY2VuZV0pID0+IHNjZW5lIHx8IGRlZmF1bHRTY2VuZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnYWN0aXZlQ2FtZXJhJyxcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKSwgdGhpcy5zZWxlY3QoJ2NhbWVyYScpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtkZWZhdWx0Q2FtZXJhLCBjYW1lcmFdKSA9PiBjYW1lcmEgfHwgZGVmYXVsdENhbWVyYSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnZW50aXRpZXMnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGl2ZVNjZW5lJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGl2ZUNhbWVyYScpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdtdWx0aXNhbXBsaW5nJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2ZyYW1lQnVmZmVyVHlwZScpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdkZXB0aEJ1ZmZlcicpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdzdGVuY2lsQnVmZmVyJykucGlwZShzdGFydFdpdGhVbmRlZmluZWQoKSksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2Rpc2FibGVOb3JtYWxQYXNzJykucGlwZShzdGFydFdpdGhVbmRlZmluZWQoKSksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3Jlc29sdXRpb25TY2FsZScpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICBnbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjZW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzYW1wbGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoQnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlbmNpbEJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVOb3JtYWxQYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvblNjYWxlLFxuICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3ZWJHTDJBdmFpbGFibGUgPSBpc1dlYkdMMkF2YWlsYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBjb21wb3NlclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWZmZWN0Q29tcG9zZXIgPSBuZXcgRWZmZWN0Q29tcG9zZXIoZ2wsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aEJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVuY2lsQnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc2FtcGxpbmc6IG11bHRpc2FtcGxpbmcgPiAwICYmIHdlYkdMMkF2YWlsYWJsZSA/IG11bHRpc2FtcGxpbmcgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgcmVuZGVyIHBhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdENvbXBvc2VyLmFkZFBhc3MobmV3IFJlbmRlclBhc3Moc2NlbmUsIGNhbWVyYSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgbm9ybWFsIHBhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb3duU2FtcGxpbmdQYXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub3JtYWxQYXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZU5vcm1hbFBhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxQYXNzID0gbmV3IE5vcm1hbFBhc3Moc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsUGFzcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0Q29tcG9zZXIuYWRkUGFzcyhub3JtYWxQYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x1dGlvblNjYWxlICE9PSB1bmRlZmluZWQgJiYgd2ViR0wyQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25TYW1wbGluZ1Bhc3MgPSBuZXcgRGVwdGhEb3duc2FtcGxpbmdQYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbEJ1ZmZlcjogbm9ybWFsUGFzcy50ZXh0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvblNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93blNhbXBsaW5nUGFzcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdENvbXBvc2VyLmFkZFBhc3MoZG93blNhbXBsaW5nUGFzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2VmZmVjdENvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNldENvbXBvc2VyU2l6ZSgpO1xuICAgICAgICB0aGlzLnNldEVmZmVjdFBhc3NlZCgpO1xuICAgICAgICB0aGlzLnNldEJlZm9yZVJlbmRlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29tcG9zZXJTaXplKCkge1xuICAgICAgICB0aGlzLmhvbGQoXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlbGVjdCgnZW50aXRpZXMnKSwgdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKV0pLFxuICAgICAgICAgICAgKFtbY29tcG9zZXJdLCBzaXplXSkgPT4gdm9pZCAoY29tcG9zZXIgYXMgRWZmZWN0Q29tcG9zZXIpLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFZmZlY3RQYXNzZWQoKSB7XG4gICAgICAgIHRoaXMuZWZmZWN0KFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2VudGl0aWVzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGl2ZUNhbWVyYScpLFxuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9zZXJSZWYuY2hpbGRyZW4kKCdub25PYmplY3RzJyksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIChbW2NvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzXSwgY2FtZXJhLCBlZmZlY3RzXSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBlZmZlY3RQYXNzOiBFZmZlY3RQYXNzO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb3NlclJlZi5uYXRpdmVFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGdldExvY2FsU3RhdGUodGhpcy5jb21wb3NlclJlZi5uYXRpdmVFbGVtZW50KSkubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2VyXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGVmZmVjdFBhc3MgPSBuZXcgRWZmZWN0UGFzcyhjYW1lcmEsIC4uLmVmZmVjdHMpO1xuICAgICAgICAgICAgICAgICAgICBlZmZlY3RQYXNzLnJlbmRlclRvU2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbFBhc3MpIG5vcm1hbFBhc3MuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb3duU2FtcGxpbmdQYXNzKSBkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlZmZlY3RQYXNzKSBjb21wb3Nlcj8ucmVtb3ZlUGFzcyhlZmZlY3RQYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbFBhc3MpIG5vcm1hbFBhc3MuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG93blNhbXBsaW5nUGFzcykgZG93blNhbXBsaW5nUGFzcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEJlZm9yZVJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyUHJpb3JpdHkgPSB0aGlzLmdldCgncmVuZGVyUHJpb3JpdHknKTtcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuZ2V0KCdlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuZWZmZWN0KHRoaXMuYWN0aW9ucy5zZXRCZWZvcmVSZW5kZXIkLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5zdG9yZS5nZXQoJ2ludGVybmFsJykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICh7IGRlbHRhIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbXBvc2VyXSA9IHRoaXMuZ2V0KCdlbnRpdGllcycpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkID0gdGhpcy5nZXQoJ2VuYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0b0NsZWFyID0gdGhpcy5nZXQoJ2F1dG9DbGVhcicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnbCA9IHRoaXMuc3RvcmUuZ2V0KCdnbCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9zZXIgJiYgZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYXV0b0NsZWFyID0gYXV0b0NsZWFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zZXIucmVuZGVyKGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5hYmxlZCA/IHJlbmRlclByaW9yaXR5IDogMFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFjdGlvbnMuc2V0QmVmb3JlUmVuZGVyKCk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,79 @@
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
+ export 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
+ }
47
+ NgtpEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpEffect, deps: null, target: i0.ɵɵFactoryTarget.Directive });
48
+ NgtpEffect.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.2", type: NgtpEffect, inputs: { blendFunction: "blendFunction", opacity: "opacity" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtpEffect, decorators: [{
50
+ type: Directive
51
+ }], propDecorators: { blendFunction: [{
52
+ type: Input
53
+ }], opacity: [{
54
+ type: Input
55
+ }] } });
56
+ export function simpleChangesToStateObject(changes, keysToDelete = []) {
57
+ for (const key of keysToDelete) {
58
+ if (changes[key])
59
+ delete changes[key];
60
+ }
61
+ return Object.entries(changes).reduce((obj, [key, change]) => {
62
+ obj[key] = change.currentValue;
63
+ return obj;
64
+ }, {});
65
+ }
66
+ export function componentInputsToCombinedStream(component, filterFn = () => true) {
67
+ const inputs = reflectComponentType(component.constructor)
68
+ ?.inputs.filter(filterFn)
69
+ .map((input) => input.propName) || [];
70
+ return combineLatest(inputs.reduce((combined, input) => {
71
+ let input$ = component.select(input);
72
+ if (component.get(input) !== undefined) {
73
+ input$ = input$.pipe(startWithUndefined());
74
+ }
75
+ combined[input] = input$;
76
+ return combined;
77
+ }, {}));
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsb0JBQW9CLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBZ0IsVUFBVSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFHakQsTUFBTSxPQUFnQixVQUE2QixTQUFRLFVBQVU7SUFEckU7O1FBWWMscUJBQWdCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUMvQixVQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBa0MvQztJQTdDRyxJQUFhLGFBQWEsQ0FBQyxhQUE0QjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBT0QsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDYixHQUFHLENBQUM7WUFDSixHQUFHLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFR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QUM7U0FDOUM7UUFDRCxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUMsRUFBRSxFQUFxQyxDQUFDLENBQzVDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgcmVmbGVjdENvbXBvbmVudFR5cGUsIFNpbXBsZUNoYW5nZXMsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCwgTmd0UnhTdG9yZSwgTmd0U3RvcmUsIHN0YXJ0V2l0aFVuZGVmaW5lZCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQmxlbmRGdW5jdGlvbiwgRWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3RwRWZmZWN0PFQgZXh0ZW5kcyBFZmZlY3Q+IGV4dGVuZHMgTmd0UnhTdG9yZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKSBzZXQgYmxlbmRGdW5jdGlvbihibGVuZEZ1bmN0aW9uOiBCbGVuZEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYmxlbmRGdW5jdGlvbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgb3BhY2l0eShvcGFjaXR5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBvcGFjaXR5IH0pO1xuICAgIH1cblxuICAgIGFic3RyYWN0IGdldCBlZmZlY3RDb25zdHJ1Y3RvcigpOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRCbGVuZE1vZGUgPSBCbGVuZEZ1bmN0aW9uLk5PUk1BTDtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICB0aGlzLnNldCgocykgPT4gKHtcbiAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICAuLi5zaW1wbGVDaGFuZ2VzVG9TdGF0ZU9iamVjdChjaGFuZ2VzLCBbJ2JsZW5kRnVuY3Rpb24nLCAnb3BhY2l0eSddKSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNvbm5lY3QoJ2VmZmVjdCcsIGNvbXBvbmVudElucHV0c1RvQ29tYmluZWRTdHJlYW0odGhpcyksIChwcm9wcykgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHByb3BzWydfX25ndF9kdW1teV9fJ107XG4gICAgICAgICAgICBkZWxldGUgcHJvcHNbJ2VmZmVjdCddO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmVmZmVjdENvbnN0cnVjdG9yKHByb3BzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlQmxlbmRNb2RlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVCbGVuZE1vZGUoKSB7XG4gICAgICAgIHRoaXMuaG9sZChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdlZmZlY3QnKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgnYmxlbmRGdW5jdGlvbicpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdvcGFjaXR5JykucGlwZShzdGFydFdpdGhVbmRlZmluZWQoKSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIChbZWZmZWN0LCBibGVuZEZ1bmN0aW9uLCBvcGFjaXR5XSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWRhdGUgPSB0aGlzLnN0b3JlLmdldCgnaW52YWxpZGF0ZScpO1xuICAgICAgICAgICAgICAgIGVmZmVjdC5ibGVuZE1vZGUuYmxlbmRGdW5jdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICFibGVuZEZ1bmN0aW9uICYmIGJsZW5kRnVuY3Rpb24gIT09IDAgPyB0aGlzLmRlZmF1bHRCbGVuZE1vZGUgOiBibGVuZEZ1bmN0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChvcGFjaXR5ICE9PSB1bmRlZmluZWQpIGVmZmVjdC5ibGVuZE1vZGUub3BhY2l0eS52YWx1ZSA9IG9wYWNpdHk7XG4gICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZUNoYW5nZXNUb1N0YXRlT2JqZWN0KGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMsIGtleXNUb0RlbGV0ZTogc3RyaW5nW10gPSBbXSkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNUb0RlbGV0ZSkge1xuICAgICAgICBpZiAoY2hhbmdlc1trZXldKSBkZWxldGUgY2hhbmdlc1trZXldO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5yZWR1Y2UoKG9iaiwgW2tleSwgY2hhbmdlXSkgPT4ge1xuICAgICAgICBvYmpba2V5XSA9IGNoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30gYXMgTmd0QW55UmVjb3JkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvbmVudElucHV0c1RvQ29tYmluZWRTdHJlYW0oXG4gICAgY29tcG9uZW50OiBOZ3RSeFN0b3JlLFxuICAgIGZpbHRlckZuOiAoaW5wdXQ6IHsgcHJvcE5hbWU6IHN0cmluZzsgdGVtcGxhdGVOYW1lOiBzdHJpbmcgfSkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWVcbik6IE9ic2VydmFibGU8Tmd0QW55UmVjb3JkPiB7XG4gICAgY29uc3QgaW5wdXRzID1cbiAgICAgICAgcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50LmNvbnN0cnVjdG9yIGFzIFR5cGU8YW55PilcbiAgICAgICAgICAgID8uaW5wdXRzLmZpbHRlcihmaWx0ZXJGbilcbiAgICAgICAgICAgIC5tYXAoKGlucHV0KSA9PiBpbnB1dC5wcm9wTmFtZSkgfHwgW107XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChcbiAgICAgICAgaW5wdXRzLnJlZHVjZSgoY29tYmluZWQsIGlucHV0KSA9PiB7XG4gICAgICAgICAgICBsZXQgaW5wdXQkID0gY29tcG9uZW50LnNlbGVjdChpbnB1dCk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChpbnB1dCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlucHV0JCA9IGlucHV0JC5waXBlKHN0YXJ0V2l0aFVuZGVmaW5lZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbWJpbmVkW2lucHV0XSA9IGlucHV0JDtcbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lZDtcbiAgICAgICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTxhbnk+PilcbiAgICApO1xufVxuIl19