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.
Files changed (79) hide show
  1. package/effects/lib/bloom/bloom.d.ts +1 -1
  2. package/effects/lib/brightness-contrast/brightness-contrast.d.ts +1 -1
  3. package/effects/lib/color-depth/color-depth.d.ts +1 -1
  4. package/effects/lib/depth/depth.d.ts +1 -1
  5. package/effects/lib/dot-screen/dot-screen.d.ts +1 -1
  6. package/effects/lib/hue-saturation/hue-saturation.d.ts +1 -1
  7. package/effects/lib/lut/lut.d.ts +1 -1
  8. package/effects/lib/noise/noise.d.ts +1 -1
  9. package/effects/lib/scanline/scanline.d.ts +1 -1
  10. package/effects/lib/sepia/sepia.d.ts +1 -1
  11. package/effects/lib/ssao/ssao.d.ts +1 -1
  12. package/effects/lib/tilt-shift/tilt-shift.d.ts +1 -1
  13. package/effects/lib/tone-mapping/tone-mapping.d.ts +1 -1
  14. package/effects/lib/vignette/vignette.d.ts +1 -1
  15. package/esm2022/effects/lib/bloom/bloom.mjs +44 -0
  16. package/esm2022/effects/lib/brightness-contrast/brightness-contrast.mjs +29 -0
  17. package/esm2022/effects/lib/color-depth/color-depth.mjs +29 -0
  18. package/esm2022/effects/lib/depth/depth.mjs +29 -0
  19. package/esm2022/effects/lib/dot-screen/dot-screen.mjs +29 -0
  20. package/esm2022/effects/lib/hue-saturation/hue-saturation.mjs +29 -0
  21. package/esm2022/effects/lib/lut/lut.mjs +60 -0
  22. package/esm2022/effects/lib/noise/noise.mjs +33 -0
  23. package/esm2022/effects/lib/scanline/scanline.mjs +33 -0
  24. package/esm2022/effects/lib/sepia/sepia.mjs +29 -0
  25. package/esm2022/effects/lib/ssao/ssao.mjs +102 -0
  26. package/esm2022/effects/lib/tilt-shift/tilt-shift.mjs +43 -0
  27. package/esm2022/effects/lib/tone-mapping/tone-mapping.mjs +39 -0
  28. package/esm2022/effects/lib/vignette/vignette.mjs +29 -0
  29. package/esm2022/lib/effect-composer.mjs +241 -0
  30. package/esm2022/lib/effect.mjs +80 -0
  31. package/esm2022/selection/lib/select.mjs +69 -0
  32. package/esm2022/selection/lib/selection.mjs +44 -0
  33. package/{fesm2020 → fesm2022}/angular-three-postprocessing-effects.mjs +70 -70
  34. package/{fesm2015 → fesm2022}/angular-three-postprocessing-effects.mjs.map +1 -1
  35. package/{fesm2015 → fesm2022}/angular-three-postprocessing-selection.mjs +10 -10
  36. package/{fesm2015 → fesm2022}/angular-three-postprocessing-selection.mjs.map +1 -1
  37. package/{fesm2020 → fesm2022}/angular-three-postprocessing.mjs +11 -11
  38. package/{fesm2020 → fesm2022}/angular-three-postprocessing.mjs.map +1 -1
  39. package/lib/effect-composer.d.ts +1 -1
  40. package/lib/effect.d.ts +1 -1
  41. package/package.json +20 -29
  42. package/plugin/package.json +1 -1
  43. package/plugin/src/generators/init/compat.js +1 -1
  44. package/plugin/src/generators/init/compat.js.map +1 -1
  45. package/plugin/src/generators/init/init.d.ts +1 -1
  46. package/plugin/src/generators/init/init.js +1 -1
  47. package/plugin/src/generators/init/init.js.map +1 -1
  48. package/selection/lib/select.d.ts +1 -1
  49. package/selection/lib/selection.d.ts +1 -1
  50. package/esm2020/effects/lib/bloom/bloom.mjs +0 -43
  51. package/esm2020/effects/lib/brightness-contrast/brightness-contrast.mjs +0 -28
  52. package/esm2020/effects/lib/color-depth/color-depth.mjs +0 -28
  53. package/esm2020/effects/lib/depth/depth.mjs +0 -28
  54. package/esm2020/effects/lib/dot-screen/dot-screen.mjs +0 -28
  55. package/esm2020/effects/lib/hue-saturation/hue-saturation.mjs +0 -28
  56. package/esm2020/effects/lib/lut/lut.mjs +0 -59
  57. package/esm2020/effects/lib/noise/noise.mjs +0 -32
  58. package/esm2020/effects/lib/scanline/scanline.mjs +0 -32
  59. package/esm2020/effects/lib/sepia/sepia.mjs +0 -28
  60. package/esm2020/effects/lib/ssao/ssao.mjs +0 -101
  61. package/esm2020/effects/lib/tilt-shift/tilt-shift.mjs +0 -42
  62. package/esm2020/effects/lib/tone-mapping/tone-mapping.mjs +0 -38
  63. package/esm2020/effects/lib/vignette/vignette.mjs +0 -28
  64. package/esm2020/lib/effect-composer.mjs +0 -240
  65. package/esm2020/lib/effect.mjs +0 -79
  66. package/esm2020/selection/lib/select.mjs +0 -68
  67. package/esm2020/selection/lib/selection.mjs +0 -43
  68. package/fesm2015/angular-three-postprocessing-effects.mjs +0 -481
  69. package/fesm2015/angular-three-postprocessing.mjs +0 -317
  70. package/fesm2015/angular-three-postprocessing.mjs.map +0 -1
  71. package/fesm2020/angular-three-postprocessing-effects.mjs.map +0 -1
  72. package/fesm2020/angular-three-postprocessing-selection.mjs +0 -114
  73. package/fesm2020/angular-three-postprocessing-selection.mjs.map +0 -1
  74. /package/{esm2020 → esm2022}/angular-three-postprocessing.mjs +0 -0
  75. /package/{esm2020 → esm2022}/effects/angular-three-postprocessing-effects.mjs +0 -0
  76. /package/{esm2020 → esm2022}/effects/index.mjs +0 -0
  77. /package/{esm2020 → esm2022}/index.mjs +0 -0
  78. /package/{esm2020 → esm2022}/selection/angular-three-postprocessing-selection.mjs +0 -0
  79. /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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXBvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0LWNvbXBvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFakQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQWFsQixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBd0Isd0JBQXdCLENBQUMsQ0FBQztBQUU1RyxTQUFTLHdCQUF3QixDQUFDLFFBQTRCO0lBQzFELE1BQU0sR0FBRyxHQUFHLEVBQTJCLENBQUM7SUFFeEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtRQUN6QixRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNwRCxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN0RCxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzVELGVBQWUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDL0QsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDakQsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDbkQsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3JELEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtLQUNsRCxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxNQWNhLGtCQUFtQixTQUFRLFVBQVU7SUFkbEQ7O1FBZWEsZ0JBQVcsR0FBRyxZQUFZLEVBQVMsQ0FBQztRQXlENUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QixZQUFPLEdBQUcsTUFBTSxDQUFDLENBQUEsZUFBMEMsQ0FBQSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7S0FvSzFGO0lBNU5HLElBQWEsT0FBTyxDQUFDLE9BQWdCO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLFdBQVcsQ0FBQyxXQUFvQjtRQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBYSxpQkFBaUIsQ0FBQyxpQkFBMEI7UUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBYSxhQUFhLENBQUMsYUFBc0I7UUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLFNBQWtCO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLGVBQWUsQ0FBQyxlQUF1QjtRQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBYSxhQUFhLENBQUMsYUFBcUI7UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQWEsZUFBZSxDQUFDLGVBQXNDO1FBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFhLGNBQWMsQ0FBQyxjQUFzQjtRQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBb0I7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWtCO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFUSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDTCxPQUFPLEVBQUUsSUFBSTtZQUNiLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLENBQUM7WUFDaEIsZUFBZSxFQUFFLEtBQUssQ0FBQyxhQUFhO1NBQ3ZDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFLRCxRQUFRO1FBQ0osSUFBSSxDQUFDLE9BQU8sQ0FDUixhQUFhLEVBQ2IsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdGLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLENBQ3hELENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQ1IsY0FBYyxFQUNkLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRixHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxDQUM1RCxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUNSLFVBQVUsRUFDVixhQUFhLENBQUM7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM1RCxDQUFDLENBQUMsSUFBSSxDQUNILEdBQUcsQ0FDQyxDQUFDLENBQ0csRUFBRSxFQUNGLEtBQUssRUFDTCxNQUFNLEVBQ04sYUFBYSxFQUNiLGVBQWUsRUFDZixXQUFXLEVBQ1gsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixlQUFlLEVBQ2xCLEVBQUUsRUFBRTtZQUNELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDNUMsc0JBQXNCO1lBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsV0FBVztnQkFDWCxhQUFhO2dCQUNiLGFBQWEsRUFBRSxhQUFhLEdBQUcsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxlQUFlO2FBQ2xCLENBQUMsQ0FBQztZQUVILGtCQUFrQjtZQUNsQixjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRXRELHFCQUFxQjtZQUNyQixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNwQixVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQyxVQUFVLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDM0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxlQUFlLEtBQUssU0FBUyxJQUFJLGVBQWUsRUFBRTtvQkFDbEQsZ0JBQWdCLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQzt3QkFDekMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxPQUFPO3dCQUNoQyxlQUFlO3FCQUNsQixDQUFDLENBQUM7b0JBQ0gsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDakMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUM1QzthQUNKO1lBRUQsT0FBTyxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQ0osQ0FDSixDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUNMLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNuRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBTSxRQUEyQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDN0YsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQ1AsYUFBYSxDQUFDO1lBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1NBQzNDLENBQUMsRUFDRixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxVQUFzQixDQUFDO1lBQzNCLElBQ0ksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO2dCQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDakUsUUFBUSxFQUNWO2dCQUNFLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdCLElBQUksVUFBVTtvQkFBRSxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDMUMsSUFBSSxnQkFBZ0I7b0JBQUUsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN6RDtZQUVELE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksVUFBVTtvQkFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLFVBQVU7b0JBQUUsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQzNDLElBQUksZ0JBQWdCO29CQUFFLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDM0QsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sZUFBZTtRQUNuQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FDaEMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDVixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLElBQUksUUFBUSxJQUFJLE9BQU8sRUFBRTtnQkFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFO29CQUNyQixFQUFFLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztvQkFDekIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdkIsT0FBTztpQkFDVjtnQkFFRCxxQkFBcUI7Z0JBQ3JCLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDdEIsNEJBQTRCO2dCQUM1QixFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFpQyxDQUFDLENBQUM7Z0JBRXRELHdCQUF3QjtnQkFDeEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFO29CQUM1RCxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN6QixNQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNuRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBRS9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO2dCQUVILFFBQVE7Z0JBQ1IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFpQyxDQUFDLENBQUM7Z0JBQ3RELEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN4QjtRQUNMLENBQUMsRUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvQixDQUNKLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ25DLENBQUM7OEdBOU5RLGtCQUFrQjtrR0FBbEIsa0JBQWtCLHVhQU5oQjtZQUNQLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3ZHLGVBQWU7U0FDbEIsaURBUlM7Ozs7S0FJVDs7U0FPUSxrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFkOUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0tBSVQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNQLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7d0JBQ3ZHLGVBQWU7cUJBQ2xCO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFFWSxXQUFXO3NCQUFuQixLQUFLO2dCQUVPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQUlPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSeEFjdGlvbkZhY3RvcnkgfSBmcm9tICdAcngtYW5ndWxhci9zdGF0ZS9hY3Rpb25zJztcbmltcG9ydCB7IGV4dGVuZCwgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0Tmd0UmVmLCBOZ3RSeFN0b3JlLCBOZ3RTdG9yZSwgc3RhcnRXaXRoVW5kZWZpbmVkIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBEZXB0aERvd25zYW1wbGluZ1Bhc3MsIEVmZmVjdENvbXBvc2VyLCBFZmZlY3RQYXNzLCBOb3JtYWxQYXNzLCBSZW5kZXJQYXNzIH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGlzV2ViR0wyQXZhaWxhYmxlIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0cEVmZmVjdENvbXBvc2VyQXBpIHtcbiAgICBjb21wb3NlcjogRWZmZWN0Q29tcG9zZXI7XG4gICAgbm9ybWFsUGFzczogTm9ybWFsUGFzcyB8IG51bGw7XG4gICAgZGVwdGhQYXNzOiBEZXB0aERvd25zYW1wbGluZ1Bhc3MgfCBudWxsO1xuICAgIHNjZW5lOiBUSFJFRS5TY2VuZTtcbiAgICBjYW1lcmE6IFRIUkVFLkNhbWVyYTtcbiAgICByZXNvbHV0aW9uU2NhbGU/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=