@o3r/components 10.0.0-next.8 → 11.0.0-next.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 (134) hide show
  1. package/README.md +1 -1
  2. package/builders/component-extractor/helpers/component/component-class.extractor.d.ts +2 -0
  3. package/builders/component-extractor/helpers/component/component-class.extractor.d.ts.map +1 -1
  4. package/builders/component-extractor/helpers/component/component-class.extractor.js +14 -8
  5. package/builders/component-extractor/helpers/component/component-class.extractor.js.map +1 -1
  6. package/builders/component-extractor/helpers/component/component-config.extractor.d.ts.map +1 -1
  7. package/builders/component-extractor/helpers/component/component-config.extractor.js +6 -2
  8. package/builders/component-extractor/helpers/component/component-config.extractor.js.map +1 -1
  9. package/builders/component-extractor/helpers/component/component.extractor.d.ts +5 -5
  10. package/builders/component-extractor/helpers/component/component.extractor.d.ts.map +1 -1
  11. package/builders/component-extractor/helpers/component/component.extractor.js +4 -2
  12. package/builders/component-extractor/helpers/component/component.extractor.js.map +1 -1
  13. package/builders/component-extractor/helpers/component/component.parser.d.ts +9 -6
  14. package/builders/component-extractor/helpers/component/component.parser.d.ts.map +1 -1
  15. package/builders/component-extractor/helpers/component/component.parser.js +36 -10
  16. package/builders/component-extractor/helpers/component/component.parser.js.map +1 -1
  17. package/builders/component-extractor/index.d.ts +0 -1
  18. package/builders/component-extractor/index.d.ts.map +1 -1
  19. package/builders/component-extractor/index.js +8 -9
  20. package/builders/component-extractor/index.js.map +1 -1
  21. package/builders/component-extractor/schema.d.ts +5 -0
  22. package/builders/component-extractor/schema.d.ts.map +1 -1
  23. package/builders/component-extractor/schema.json +22 -1
  24. package/core/component.output.d.ts +8 -11
  25. package/core/component.output.d.ts.map +1 -1
  26. package/core/index.d.ts +0 -1
  27. package/core/index.d.ts.map +1 -1
  28. package/core/rendering/helpers.d.ts +0 -1
  29. package/core/rendering/helpers.d.ts.map +1 -1
  30. package/devkit/components-devkit.interface.d.ts +0 -1
  31. package/devkit/components-devkit.interface.d.ts.map +1 -1
  32. package/devkit/components-devtools.message.service.d.ts +4 -6
  33. package/devkit/components-devtools.message.service.d.ts.map +1 -1
  34. package/devkit/components-devtools.module.d.ts +0 -1
  35. package/devkit/components-devtools.module.d.ts.map +1 -1
  36. package/devkit/inspector/ng/ng.d.ts +0 -3
  37. package/devkit/inspector/ng/ng.d.ts.map +1 -1
  38. package/devkit/inspector/otter-inspector.helpers.d.ts +0 -7
  39. package/devkit/inspector/otter-inspector.helpers.d.ts.map +1 -1
  40. package/devkit/inspector/otter-inspector.service.d.ts +5 -6
  41. package/devkit/inspector/otter-inspector.service.d.ts.map +1 -1
  42. package/esm2022/core/component.output.mjs +1 -1
  43. package/esm2022/core/index.mjs +1 -2
  44. package/esm2022/core/rendering/helpers.mjs +1 -2
  45. package/esm2022/devkit/components-devkit.interface.mjs +1 -2
  46. package/esm2022/devkit/components-devtools.message.service.mjs +6 -8
  47. package/esm2022/devkit/components-devtools.module.mjs +5 -6
  48. package/esm2022/devkit/inspector/ng/ng.mjs +1 -1
  49. package/esm2022/devkit/inspector/otter-inspector.helpers.mjs +1 -8
  50. package/esm2022/devkit/inspector/otter-inspector.service.mjs +1 -2
  51. package/esm2022/public_api.mjs +1 -1
  52. package/esm2022/rules-engine/o3r-components-rules-engine.mjs +5 -0
  53. package/esm2022/rules-engine/placeholder.action-handler.mjs +154 -0
  54. package/esm2022/rules-engine/placeholder.interfaces.mjs +3 -0
  55. package/esm2022/rules-engine/placeholder.rules-engine.effect.mjs +124 -0
  56. package/esm2022/rules-engine/placeholder.rules-engine.module.mjs +31 -0
  57. package/esm2022/rules-engine/public_api.mjs +4 -0
  58. package/esm2022/stores/placeholder-request/placeholder-request.module.mjs +4 -4
  59. package/esm2022/stores/placeholder-request/placeholder-request.selectors.mjs +1 -2
  60. package/esm2022/stores/placeholder-template/placeholder-template.module.mjs +4 -4
  61. package/esm2022/stores/placeholder-template/placeholder-template.selectors.mjs +24 -10
  62. package/esm2022/tools/component-replacement/c11n.directive.mjs +17 -23
  63. package/esm2022/tools/component-replacement/c11n.helpers.mjs +1 -2
  64. package/esm2022/tools/component-replacement/c11n.mock.module.mjs +10 -10
  65. package/esm2022/tools/component-replacement/c11n.module.mjs +5 -6
  66. package/esm2022/tools/component-replacement/c11n.service.mjs +6 -8
  67. package/esm2022/tools/pipes/capitalize/capitalize.module.mjs +4 -4
  68. package/esm2022/tools/pipes/capitalize/capitalize.pipe.mjs +3 -3
  69. package/esm2022/tools/pipes/duration/duration.module.mjs +4 -4
  70. package/esm2022/tools/pipes/duration/duration.pipe.mjs +4 -5
  71. package/esm2022/tools/pipes/keep-white-space/keep-white-space.module.mjs +4 -4
  72. package/esm2022/tools/pipes/keep-white-space/keep-white-space.pipe.mjs +3 -3
  73. package/esm2022/tools/pipes/replace-with-bold/replace-with-bold.module.mjs +4 -4
  74. package/esm2022/tools/pipes/replace-with-bold/replace-with-bold.pipe.mjs +3 -3
  75. package/esm2022/tools/placeholder/placeholder.component.mjs +44 -23
  76. package/esm2022/tools/placeholder/placeholder.interface.mjs +2 -0
  77. package/esm2022/tools/placeholder/placeholder.module.mjs +4 -4
  78. package/fesm2022/o3r-components-rules-engine.mjs +302 -0
  79. package/fesm2022/o3r-components-rules-engine.mjs.map +1 -0
  80. package/fesm2022/o3r-components.mjs +150 -141
  81. package/fesm2022/o3r-components.mjs.map +1 -1
  82. package/package.json +62 -33
  83. package/public_api.d.ts +1 -1
  84. package/public_api.d.ts.map +1 -1
  85. package/rules-engine/index.d.ts +6 -0
  86. package/rules-engine/o3r-components-rules-engine.d.ts.map +1 -0
  87. package/rules-engine/placeholder.action-handler.d.ts +42 -0
  88. package/rules-engine/placeholder.action-handler.d.ts.map +1 -0
  89. package/rules-engine/placeholder.interfaces.d.ts +13 -0
  90. package/rules-engine/placeholder.interfaces.d.ts.map +1 -0
  91. package/rules-engine/placeholder.rules-engine.effect.d.ts +37 -0
  92. package/rules-engine/placeholder.rules-engine.effect.d.ts.map +1 -0
  93. package/rules-engine/placeholder.rules-engine.module.d.ts +9 -0
  94. package/rules-engine/placeholder.rules-engine.module.d.ts.map +1 -0
  95. package/rules-engine/public_api.d.ts +4 -0
  96. package/rules-engine/public_api.d.ts.map +1 -0
  97. package/schemas/component.metadata.schema.json +8 -1
  98. package/schemas/placeholder-template.schema.json +1 -1
  99. package/schemas/rules-engine.placeholder-action.schema.json +26 -0
  100. package/schematics/cms-adapter/index.d.ts +0 -1
  101. package/schematics/cms-adapter/index.d.ts.map +1 -1
  102. package/schematics/cms-adapter/index.js +5 -9
  103. package/schematics/cms-adapter/index.js.map +1 -1
  104. package/schematics/ng-add/helpers/devtools-registration.d.ts +10 -0
  105. package/schematics/ng-add/helpers/devtools-registration.d.ts.map +1 -0
  106. package/schematics/ng-add/helpers/devtools-registration.js +25 -0
  107. package/schematics/ng-add/helpers/devtools-registration.js.map +1 -0
  108. package/schematics/ng-add/index.d.ts +0 -1
  109. package/schematics/ng-add/index.d.ts.map +1 -1
  110. package/schematics/ng-add/index.js +7 -5
  111. package/schematics/ng-add/index.js.map +1 -1
  112. package/schematics/ng-add/schema.json +1 -1
  113. package/stores/placeholder-request/placeholder-request.selectors.d.ts +0 -1
  114. package/stores/placeholder-request/placeholder-request.selectors.d.ts.map +1 -1
  115. package/stores/placeholder-template/placeholder-template.selectors.d.ts +41 -8
  116. package/stores/placeholder-template/placeholder-template.selectors.d.ts.map +1 -1
  117. package/tools/component-replacement/c11n.directive.d.ts +5 -10
  118. package/tools/component-replacement/c11n.directive.d.ts.map +1 -1
  119. package/tools/component-replacement/c11n.helpers.d.ts +1 -3
  120. package/tools/component-replacement/c11n.helpers.d.ts.map +1 -1
  121. package/tools/component-replacement/c11n.module.d.ts +0 -1
  122. package/tools/component-replacement/c11n.module.d.ts.map +1 -1
  123. package/tools/component-replacement/c11n.service.d.ts +2 -5
  124. package/tools/component-replacement/c11n.service.d.ts.map +1 -1
  125. package/tools/pipes/duration/duration.pipe.d.ts.map +1 -1
  126. package/tools/placeholder/placeholder.component.d.ts +7 -5
  127. package/tools/placeholder/placeholder.component.d.ts.map +1 -1
  128. package/tools/placeholder/placeholder.interface.d.ts +22 -0
  129. package/tools/placeholder/placeholder.interface.d.ts.map +1 -0
  130. package/builders/package.json +0 -3
  131. package/core/focus.d.ts +0 -17
  132. package/core/focus.d.ts.map +0 -1
  133. package/esm2022/core/focus.mjs +0 -2
  134. package/schematics/package.json +0 -3
@@ -2,11 +2,11 @@ import { NgModule } from '@angular/core';
2
2
  import { DurationPipe } from './duration.pipe';
3
3
  import * as i0 from "@angular/core";
4
4
  export class DurationPipeModule {
5
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: DurationPipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: DurationPipeModule, declarations: [DurationPipe], exports: [DurationPipe] }); }
7
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: DurationPipeModule }); }
5
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: DurationPipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: DurationPipeModule, declarations: [DurationPipe], exports: [DurationPipe] }); }
7
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: DurationPipeModule }); }
8
8
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: DurationPipeModule, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: DurationPipeModule, decorators: [{
10
10
  type: NgModule,
11
11
  args: [{
12
12
  declarations: [DurationPipe],
@@ -3,7 +3,6 @@ import { defaultTimeUnits } from './duration.model';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
5
  * Pad a number with zeroes
6
- *
7
6
  * @param num
8
7
  * @param digits
9
8
  */
@@ -56,11 +55,11 @@ export class DurationPipe {
56
55
  return result.replace(matchedPatternToReplace, padded);
57
56
  }, pattern);
58
57
  }
59
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: DurationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
60
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: DurationPipe, name: "duration" }); }
58
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: DurationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
59
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: DurationPipe, name: "duration" }); }
61
60
  }
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: DurationPipe, decorators: [{
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: DurationPipe, decorators: [{
63
62
  type: Pipe,
64
63
  args: [{ name: 'duration' }]
65
64
  }] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90b29scy9waXBlcy9kdXJhdGlvbi9kdXJhdGlvbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBQyxnQkFBZ0IsRUFBVyxNQUFNLGtCQUFrQixDQUFDOztBQUU1RDs7Ozs7R0FLRztBQUNILFNBQVMsTUFBTSxDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQ3pDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1FBQzdCLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUFFdkI7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLFNBQVMsQ0FBQyxLQUFjLEVBQUUsT0FBTyxHQUFHLFVBQVUsRUFBRSxZQUF3QixnQkFBZ0I7UUFDN0YsTUFBTSxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFFckMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FHM0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLE1BQU0sQ0FBQzthQUNmO1lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNuQixTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEMsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ2hELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvRSxNQUFNLGVBQWUsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzVHLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDdEQsTUFBTSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNuRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekQsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWQsQ0FBQztpSUE3Q1UsWUFBWTsrSEFBWixZQUFZOzsyRkFBWixZQUFZO2tCQUR4QixJQUFJO21CQUFDLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2RlZmF1bHRUaW1lVW5pdHMsIFRpbWVVbml0fSBmcm9tICcuL2R1cmF0aW9uLm1vZGVsJztcblxuLyoqXG4gKiBQYWQgYSBudW1iZXIgd2l0aCB6ZXJvZXNcbiAqXG4gKiBAcGFyYW0gbnVtXG4gKiBAcGFyYW0gZGlnaXRzXG4gKi9cbmZ1bmN0aW9uIHBhZE51bShudW06IG51bWJlciwgZGlnaXRzOiBudW1iZXIpIHtcbiAgbGV0IHN0ck51bSA9IFN0cmluZyhudW0pO1xuICB3aGlsZSAoc3RyTnVtLmxlbmd0aCA8IGRpZ2l0cykge1xuICAgIHN0ck51bSA9ICcwJyArIHN0ck51bTtcbiAgfVxuICByZXR1cm4gc3RyTnVtO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZHVyYXRpb24gaW4gc2Vjb25kcyBpbnRvIHRoZSBISDptbSBmb3JtYXRcbiAqL1xuQFBpcGUoe25hbWU6ICdkdXJhdGlvbid9KVxuZXhwb3J0IGNsYXNzIER1cmF0aW9uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIGluIHNlY29uZHNcbiAgICogQHBhcmFtIHBhdHRlcm4gdGhlIGRlc2lyZWQgb3V0cHV0IGZvcm1hdC5cbiAgICogVGhlIHBhdHRlcm4gdGFrZXMgaW50byBhY2NvdW50IHN0YXRpYyBmb3JtYXQgY2hhcmFjdGVycyBzdXJyb3VuZGVkIGJ5IGJyYWNlc1xuICAgKiAgIHtkfSBmb3IgZGF5cywge2h9IGZvciBob3Vycywge219IGZvciBtaW51dGVzIGFuZCB7c30gZm9yIHNlY29uZHMuXG4gICAqIEl0IGFjY2VwdHMgYSBkb3VibGUgdW5pdCB0aW1lIGluIGNhc2UgYSBwYWRkaW5nIGlzIHdhbnRlZCB7ZGR9IG91dHB1dHMgMDUgZm9yIGluc3RhbmNlXG4gICAqIFNob3VsZCByZXNwZWN0IHRoZSBmb2xsb3dpbmcgcGF0dGVybiBgLyhcXHtoK1xcfSl8KFxce20rXFx9KS9gIChleDogYCd7aH1oe219bSdgIG91dHB1dHMgYDBoMm1gLCBgJ3tofUh7bW19J2AgYDBIMDJgIGV0Yy4pXG4gICAqIEBwYXJhbSB0aW1lVW5pdHMgdGhlIHVuaXRzIHRpbWUgdG8gYmUgdXNlZCBpbiB0aGlzIHRyYW5zZm9ybWF0aW9uLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBjdXN0b20gdW5pdHMgaW4gdGhlIHBhdHRlcm4gbGlrZVxuICAgKiAge1xuICAgKiAgICBmb3JtYXRDaGFyYWN0ZXI6ICd3JyxcbiAgICogICAgZGl2aWRlcjogMzYwMCAqIDI0ICogN1xuICAgKiAgfVxuICAgKiBUaGUgYWJvdmUgZGVmaW5lcyBhIHdlZWsgZm9yIHt3fVxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZT86IG51bWJlciwgcGF0dGVybiA9ICd7aH06e21tfScsIHRpbWVVbml0czogVGltZVVuaXRbXSA9IGRlZmF1bHRUaW1lVW5pdHMpIHtcbiAgICBjb25zdCB2YWwgPSB2YWx1ZSB8fCAwO1xuICAgIGxldCBtb2R1bG8gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSB0aW1lVW5pdHMucmVkdWNlPHtcbiAgICAgIHRleHRNYXRjaDogc3RyaW5nO1xuICAgICAgdGltZVVuaXQ6IFRpbWVVbml0O1xuICAgIH1bXT4oKHJlc3VsdCwgdW5pdCkgPT4ge1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKHsnICsgdW5pdC5mb3JtYXRDaGFyYWN0ZXIgKyAnK30pJywgJ2cnKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gcmVnZXhwLmV4ZWMocGF0dGVybik7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdCh7XG4gICAgICAgIHRleHRNYXRjaDogbWF0Y2hbMF0sXG4gICAgICAgIHRpbWVVbml0OiB1bml0XG4gICAgICB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcy5yZWR1Y2UoKHJlc3VsdCwgbWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZWRQYXR0ZXJuVG9SZXBsYWNlID0gbWF0Y2gudGV4dE1hdGNoO1xuICAgICAgY29uc3QgdW5pdCA9IG1hdGNoLnRpbWVVbml0O1xuICAgICAgY29uc3QgdW5pdFRpbWVWYWx1ZSA9IE1hdGguZmxvb3IodmFsICUgKHVuaXQubW9kdWxvIHx8IG1vZHVsbykgLyB1bml0LmRpdmlkZXIpO1xuICAgICAgY29uc3QgdW5pdE1hdGNoTGVuZ3RoID0gKG1hdGNoZWRQYXR0ZXJuVG9SZXBsYWNlLm1hdGNoKG5ldyBSZWdFeHAodW5pdC5mb3JtYXRDaGFyYWN0ZXIsICdnJykpIHx8IFtdKS5sZW5ndGg7XG4gICAgICBjb25zdCBwYWRkZWQgPSBwYWROdW0odW5pdFRpbWVWYWx1ZSwgdW5pdE1hdGNoTGVuZ3RoKTtcbiAgICAgIG1vZHVsbyA9IHVuaXRUaW1lVmFsdWUgPiAwID8gdW5pdC5kaXZpZGVyIDogbW9kdWxvO1xuICAgICAgcmV0dXJuIHJlc3VsdC5yZXBsYWNlKG1hdGNoZWRQYXR0ZXJuVG9SZXBsYWNlLCBwYWRkZWQpO1xuICAgIH0sIHBhdHRlcm4pO1xuXG4gIH1cbn1cbiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90b29scy9waXBlcy9kdXJhdGlvbi9kdXJhdGlvbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBQyxnQkFBZ0IsRUFBVyxNQUFNLGtCQUFrQixDQUFDOztBQUU1RDs7OztHQUlHO0FBQ0gsU0FBUyxNQUFNLENBQUMsR0FBVyxFQUFFLE1BQWM7SUFDekMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUU7UUFDN0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7S0FDdkI7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQUV2Qjs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksU0FBUyxDQUFDLEtBQWMsRUFBRSxPQUFPLEdBQUcsVUFBVSxFQUFFLFlBQXdCLGdCQUFnQjtRQUM3RixNQUFNLEdBQUcsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUVyQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUczQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztRQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN0QyxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDaEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9FLE1BQU0sZUFBZSxHQUFHLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDNUcsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUN0RCxNQUFNLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ25ELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFZCxDQUFDO2lJQTdDVSxZQUFZOytIQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBRHhCLElBQUk7bUJBQUMsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7ZGVmYXVsdFRpbWVVbml0cywgVGltZVVuaXR9IGZyb20gJy4vZHVyYXRpb24ubW9kZWwnO1xuXG4vKipcbiAqIFBhZCBhIG51bWJlciB3aXRoIHplcm9lc1xuICogQHBhcmFtIG51bVxuICogQHBhcmFtIGRpZ2l0c1xuICovXG5mdW5jdGlvbiBwYWROdW0obnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKSB7XG4gIGxldCBzdHJOdW0gPSBTdHJpbmcobnVtKTtcbiAgd2hpbGUgKHN0ck51bS5sZW5ndGggPCBkaWdpdHMpIHtcbiAgICBzdHJOdW0gPSAnMCcgKyBzdHJOdW07XG4gIH1cbiAgcmV0dXJuIHN0ck51bTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGR1cmF0aW9uIGluIHNlY29uZHMgaW50byB0aGUgSEg6bW0gZm9ybWF0XG4gKi9cbkBQaXBlKHtuYW1lOiAnZHVyYXRpb24nfSlcbmV4cG9ydCBjbGFzcyBEdXJhdGlvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAvKipcbiAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBpbiBzZWNvbmRzXG4gICAqIEBwYXJhbSBwYXR0ZXJuIHRoZSBkZXNpcmVkIG91dHB1dCBmb3JtYXQuXG4gICAqIFRoZSBwYXR0ZXJuIHRha2VzIGludG8gYWNjb3VudCBzdGF0aWMgZm9ybWF0IGNoYXJhY3RlcnMgc3Vycm91bmRlZCBieSBicmFjZXNcbiAgICogICB7ZH0gZm9yIGRheXMsIHtofSBmb3IgaG91cnMsIHttfSBmb3IgbWludXRlcyBhbmQge3N9IGZvciBzZWNvbmRzLlxuICAgKiBJdCBhY2NlcHRzIGEgZG91YmxlIHVuaXQgdGltZSBpbiBjYXNlIGEgcGFkZGluZyBpcyB3YW50ZWQge2RkfSBvdXRwdXRzIDA1IGZvciBpbnN0YW5jZVxuICAgKiBTaG91bGQgcmVzcGVjdCB0aGUgZm9sbG93aW5nIHBhdHRlcm4gYC8oXFx7aCtcXH0pfChcXHttK1xcfSkvYCAoZXg6IGAne2h9aHttfW0nYCBvdXRwdXRzIGAwaDJtYCwgYCd7aH1Ie21tfSdgIGAwSDAyYCBldGMuKVxuICAgKiBAcGFyYW0gdGltZVVuaXRzIHRoZSB1bml0cyB0aW1lIHRvIGJlIHVzZWQgaW4gdGhpcyB0cmFuc2Zvcm1hdGlvbi4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgY3VzdG9tIHVuaXRzIGluIHRoZSBwYXR0ZXJuIGxpa2VcbiAgICogIHtcbiAgICogICAgZm9ybWF0Q2hhcmFjdGVyOiAndycsXG4gICAqICAgIGRpdmlkZXI6IDM2MDAgKiAyNCAqIDdcbiAgICogIH1cbiAgICogVGhlIGFib3ZlIGRlZmluZXMgYSB3ZWVrIGZvciB7d31cbiAgICovXG4gIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU/OiBudW1iZXIsIHBhdHRlcm4gPSAne2h9OnttbX0nLCB0aW1lVW5pdHM6IFRpbWVVbml0W10gPSBkZWZhdWx0VGltZVVuaXRzKSB7XG4gICAgY29uc3QgdmFsID0gdmFsdWUgfHwgMDtcbiAgICBsZXQgbW9kdWxvID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gdGltZVVuaXRzLnJlZHVjZTx7XG4gICAgICB0ZXh0TWF0Y2g6IHN0cmluZztcbiAgICAgIHRpbWVVbml0OiBUaW1lVW5pdDtcbiAgICB9W10+KChyZXN1bHQsIHVuaXQpID0+IHtcbiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyh7JyArIHVuaXQuZm9ybWF0Q2hhcmFjdGVyICsgJyt9KScsICdnJyk7XG4gICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4cC5leGVjKHBhdHRlcm4pO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoe1xuICAgICAgICB0ZXh0TWF0Y2g6IG1hdGNoWzBdLFxuICAgICAgICB0aW1lVW5pdDogdW5pdFxuICAgICAgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIG1hdGNoZXMucmVkdWNlKChyZXN1bHQsIG1hdGNoKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVkUGF0dGVyblRvUmVwbGFjZSA9IG1hdGNoLnRleHRNYXRjaDtcbiAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaC50aW1lVW5pdDtcbiAgICAgIGNvbnN0IHVuaXRUaW1lVmFsdWUgPSBNYXRoLmZsb29yKHZhbCAlICh1bml0Lm1vZHVsbyB8fCBtb2R1bG8pIC8gdW5pdC5kaXZpZGVyKTtcbiAgICAgIGNvbnN0IHVuaXRNYXRjaExlbmd0aCA9IChtYXRjaGVkUGF0dGVyblRvUmVwbGFjZS5tYXRjaChuZXcgUmVnRXhwKHVuaXQuZm9ybWF0Q2hhcmFjdGVyLCAnZycpKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgY29uc3QgcGFkZGVkID0gcGFkTnVtKHVuaXRUaW1lVmFsdWUsIHVuaXRNYXRjaExlbmd0aCk7XG4gICAgICBtb2R1bG8gPSB1bml0VGltZVZhbHVlID4gMCA/IHVuaXQuZGl2aWRlciA6IG1vZHVsbztcbiAgICAgIHJldHVybiByZXN1bHQucmVwbGFjZShtYXRjaGVkUGF0dGVyblRvUmVwbGFjZSwgcGFkZGVkKTtcbiAgICB9LCBwYXR0ZXJuKTtcblxuICB9XG59XG4iXX0=
@@ -2,11 +2,11 @@ import { NgModule } from '@angular/core';
2
2
  import { KeepWhiteSpacePipe } from './keep-white-space.pipe';
3
3
  import * as i0 from "@angular/core";
4
4
  export class KeepWhiteSpacePipeModule {
5
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: KeepWhiteSpacePipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: KeepWhiteSpacePipeModule, declarations: [KeepWhiteSpacePipe], exports: [KeepWhiteSpacePipe] }); }
7
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: KeepWhiteSpacePipeModule }); }
5
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: KeepWhiteSpacePipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: KeepWhiteSpacePipeModule, declarations: [KeepWhiteSpacePipe], exports: [KeepWhiteSpacePipe] }); }
7
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: KeepWhiteSpacePipeModule }); }
8
8
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: KeepWhiteSpacePipeModule, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: KeepWhiteSpacePipeModule, decorators: [{
10
10
  type: NgModule,
11
11
  args: [{
12
12
  declarations: [KeepWhiteSpacePipe],
@@ -4,10 +4,10 @@ export class KeepWhiteSpacePipe {
4
4
  transform(value) {
5
5
  return value.replace(/\s/g, ' ');
6
6
  }
7
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: KeepWhiteSpacePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
8
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: KeepWhiteSpacePipe, name: "keepWhiteSpace" }); }
7
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: KeepWhiteSpacePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
8
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: KeepWhiteSpacePipe, name: "keepWhiteSpace" }); }
9
9
  }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: KeepWhiteSpacePipe, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: KeepWhiteSpacePipe, decorators: [{
11
11
  type: Pipe,
12
12
  args: [{
13
13
  name: 'keepWhiteSpace',
@@ -2,11 +2,11 @@ import { NgModule } from '@angular/core';
2
2
  import { ReplaceWithBoldPipe } from './replace-with-bold.pipe';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ReplaceWithBoldPipeModule {
5
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ReplaceWithBoldPipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: ReplaceWithBoldPipeModule, declarations: [ReplaceWithBoldPipe], exports: [ReplaceWithBoldPipe] }); }
7
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ReplaceWithBoldPipeModule }); }
5
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ReplaceWithBoldPipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: ReplaceWithBoldPipeModule, declarations: [ReplaceWithBoldPipe], exports: [ReplaceWithBoldPipe] }); }
7
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ReplaceWithBoldPipeModule }); }
8
8
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ReplaceWithBoldPipeModule, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ReplaceWithBoldPipeModule, decorators: [{
10
10
  type: NgModule,
11
11
  args: [{
12
12
  declarations: [ReplaceWithBoldPipe],
@@ -13,10 +13,10 @@ export class ReplaceWithBoldPipe {
13
13
  escapeRegExp(str) {
14
14
  return str.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&');
15
15
  }
16
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ReplaceWithBoldPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
17
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: ReplaceWithBoldPipe, name: "replaceWithBold" }); }
16
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ReplaceWithBoldPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
17
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: ReplaceWithBoldPipe, name: "replaceWithBold" }); }
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ReplaceWithBoldPipe, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ReplaceWithBoldPipe, decorators: [{
20
20
  type: Pipe,
21
21
  args: [{
22
22
  name: 'replaceWithBold',
@@ -1,15 +1,15 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewEncapsulation } from '@angular/core';
2
2
  import { Store } from '@ngrx/store';
3
- import { ReplaySubject, Subscription } from 'rxjs';
4
- import { distinctUntilChanged, switchMap } from 'rxjs/operators';
5
- import { selectPlaceholderRenderedTemplates } from '../../stores/placeholder-template';
3
+ import { BehaviorSubject, ReplaySubject, sample, Subject, Subscription } from 'rxjs';
4
+ import { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';
5
+ import { selectSortedTemplates } from '../../stores/placeholder-template';
6
+ import { sendOtterMessage } from '@o3r/core';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@ngrx/store";
8
9
  import * as i2 from "@angular/common";
9
10
  /**
10
11
  * Placeholder component that is bind to the PlaceholderTemplateStore to display a template based on its ID
11
12
  * A loading indication can be provided via projection
12
- *
13
13
  * @example
14
14
  * <o3r-placeholder id="my-template-id">Is loading ...</o3r-placeholder>
15
15
  */
@@ -22,37 +22,58 @@ export class PlaceholderComponent {
22
22
  this.store = store;
23
23
  this.cd = cd;
24
24
  this.subscription = new Subscription();
25
- this.id$ = new ReplaySubject(1);
25
+ this.id$ = new BehaviorSubject(undefined);
26
+ this.afterViewInit$ = new Subject();
27
+ this.messages$ = new ReplaySubject(1);
26
28
  }
27
29
  /** @inheritdoc */
28
30
  ngOnInit() {
29
- this.subscription.add(this.id$.pipe(distinctUntilChanged(), switchMap((id) => this.store.select(selectPlaceholderRenderedTemplates(id)))).subscribe((templates) => {
30
- if (templates) {
31
- this.isPending = templates.isPending;
32
- const orderedRenderedTemplates = templates.orderedRenderedTemplates;
33
- if (!orderedRenderedTemplates || !orderedRenderedTemplates.length) {
34
- this.template = undefined;
35
- }
36
- else {
37
- // Concatenates the list of templates
38
- this.template = orderedRenderedTemplates.join('');
39
- }
31
+ this.subscription.add(this.id$.pipe(filter((id) => !!id), distinctUntilChanged(), switchMap((id) => this.store.select(selectSortedTemplates(id)).pipe(map((placeholders) => ({
32
+ id,
33
+ orderedTemplates: placeholders?.orderedTemplates,
34
+ isPending: placeholders?.isPending
35
+ })), distinctUntilChanged((previous, current) => previous.id === current.id &&
36
+ previous.isPending === current.isPending &&
37
+ previous.orderedTemplates?.map(placeholder => placeholder.renderedTemplate).join('') ===
38
+ current.orderedTemplates?.map(placeholder => placeholder.renderedTemplate).join(''))))).subscribe(({ id, orderedTemplates, isPending }) => {
39
+ this.isPending = isPending;
40
+ if (!orderedTemplates?.length) {
41
+ this.template = undefined;
40
42
  }
41
43
  else {
42
- this.isPending = false;
43
- this.template = undefined;
44
+ // Concatenates the list of templates
45
+ this.template = orderedTemplates.map(placeholder => placeholder.renderedTemplate).join('');
46
+ }
47
+ if (this.isPending === false) {
48
+ this.messages$.next({
49
+ templateIds: !this.isPending ? (orderedTemplates || []).map(placeholder => placeholder.resolvedUrl) : [],
50
+ placeholderId: id
51
+ });
44
52
  }
45
53
  this.cd.markForCheck();
46
54
  }));
55
+ this.messages$.pipe(sample(this.afterViewInit$), distinctUntilChanged((previous, current) => JSON.stringify(current) === JSON.stringify(previous))).subscribe({
56
+ next: (data) => sendOtterMessage('placeholder-loading-status', data, false),
57
+ complete: () => sendOtterMessage('placeholder-loading-status', {
58
+ placeholderId: this.id$.value,
59
+ templateIds: []
60
+ }, false)
61
+ });
62
+ }
63
+ ngAfterViewChecked() {
64
+ // Make sure the view is rendered before posting the status
65
+ this.afterViewInit$.next();
47
66
  }
48
67
  /** @inheritdoc */
49
68
  ngOnDestroy() {
69
+ this.messages$.complete();
70
+ this.afterViewInit$.complete();
50
71
  this.subscription.unsubscribe();
51
72
  }
52
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PlaceholderComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
53
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: PlaceholderComponent, selector: "o3r-placeholder", inputs: { id: "id" }, ngImport: i0, template: "<ng-content *ngIf=\"isPending; else displayTemplate\"></ng-content><ng-template #displayTemplate><div [innerHTML]=\"template\"></div></ng-template>", isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
73
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
74
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: PlaceholderComponent, selector: "o3r-placeholder", inputs: { id: "id" }, ngImport: i0, template: "<ng-content *ngIf=\"isPending; else displayTemplate\"></ng-content><ng-template #displayTemplate><div [innerHTML]=\"template\"></div></ng-template>", isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
54
75
  }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PlaceholderComponent, decorators: [{
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderComponent, decorators: [{
56
77
  type: Component,
57
78
  args: [{
58
79
  selector: 'o3r-placeholder',
@@ -61,7 +82,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
61
82
  changeDetection: ChangeDetectionStrategy.OnPush,
62
83
  encapsulation: ViewEncapsulation.None
63
84
  }]
64
- }], ctorParameters: function () { return [{ type: i1.Store }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
85
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ChangeDetectorRef }], propDecorators: { id: [{
65
86
  type: Input
66
87
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xzL3BsYWNlaG9sZGVyL3BsYWNlaG9sZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxFQUdMLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQTJCLGtDQUFrQyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7Ozs7QUFFL0c7Ozs7OztHQU1HO0FBUUgsTUFBTSxPQUFPLG9CQUFvQjtJQVkvQix3QkFBd0I7SUFDeEIsSUFDVyxFQUFFLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBb0IsS0FBc0MsRUFBVSxFQUFxQjtRQUFyRSxVQUFLLEdBQUwsS0FBSyxDQUFpQztRQUFVLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBaEJqRixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbEMsUUFBRyxHQUFHLElBQUksYUFBYSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBZTNDLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxRQUFRO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNYLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM3RSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3hCLElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDckMsTUFBTSx3QkFBd0IsR0FBRyxTQUFTLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRTtvQkFDakUsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7aUJBQzNCO3FCQUFNO29CQUNMLHFDQUFxQztvQkFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ25EO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2FBQzNCO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdELGtCQUFrQjtJQUNYLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO2lJQWxEVSxvQkFBb0I7cUhBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFQaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsbUVBQW1FO3dCQUMzRSxnRkFBZ0Y7b0JBQ2xGLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7NEhBZVksRUFBRTtzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N0b3JlfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1JlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7UGxhY2Vob2xkZXJUZW1wbGF0ZVN0b3JlLCBzZWxlY3RQbGFjZWhvbGRlclJlbmRlcmVkVGVtcGxhdGVzfSBmcm9tICcuLi8uLi9zdG9yZXMvcGxhY2Vob2xkZXItdGVtcGxhdGUnO1xuXG4vKipcbiAqIFBsYWNlaG9sZGVyIGNvbXBvbmVudCB0aGF0IGlzIGJpbmQgdG8gdGhlIFBsYWNlaG9sZGVyVGVtcGxhdGVTdG9yZSB0byBkaXNwbGF5IGEgdGVtcGxhdGUgYmFzZWQgb24gaXRzIElEXG4gKiBBIGxvYWRpbmcgaW5kaWNhdGlvbiBjYW4gYmUgcHJvdmlkZWQgdmlhIHByb2plY3Rpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogIDxvM3ItcGxhY2Vob2xkZXIgaWQ9XCJteS10ZW1wbGF0ZS1pZFwiPklzIGxvYWRpbmcgLi4uPC9vM3ItcGxhY2Vob2xkZXI+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28zci1wbGFjZWhvbGRlcicsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQgKm5nSWY9XCJpc1BlbmRpbmc7IGVsc2UgZGlzcGxheVRlbXBsYXRlXCI+PC9uZy1jb250ZW50PicgK1xuICAgICc8bmctdGVtcGxhdGUgI2Rpc3BsYXlUZW1wbGF0ZT48ZGl2IFtpbm5lckhUTUxdPVwidGVtcGxhdGVcIj48L2Rpdj48L25nLXRlbXBsYXRlPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFBsYWNlaG9sZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgaWQkID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcblxuICAvKiogRGV0ZXJtaW5lIGlmIHRoZSBwbGFjZWhvbGRlciBjb250ZW50IGlzIHBlbmRpbmcgKi9cbiAgcHVibGljIGlzUGVuZGluZz86IGJvb2xlYW47XG5cbiAgLyoqIEdlbmVyYXRlZCBIVE1MIHRlbXBsYXRlICovXG4gIHB1YmxpYyB0ZW1wbGF0ZT86IHN0cmluZztcblxuICAvKiogdGVtcGxhdGUgaWRlbnRpZnkgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pZCQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZTxQbGFjZWhvbGRlclRlbXBsYXRlU3RvcmU+LCBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmlkJC5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKGlkKSA9PiB0aGlzLnN0b3JlLnNlbGVjdChzZWxlY3RQbGFjZWhvbGRlclJlbmRlcmVkVGVtcGxhdGVzKGlkKSkpXG4gICAgICApLnN1YnNjcmliZSgodGVtcGxhdGVzKSA9PiB7XG4gICAgICAgIGlmICh0ZW1wbGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmlzUGVuZGluZyA9IHRlbXBsYXRlcy5pc1BlbmRpbmc7XG4gICAgICAgICAgY29uc3Qgb3JkZXJlZFJlbmRlcmVkVGVtcGxhdGVzID0gdGVtcGxhdGVzLm9yZGVyZWRSZW5kZXJlZFRlbXBsYXRlcztcbiAgICAgICAgICBpZiAoIW9yZGVyZWRSZW5kZXJlZFRlbXBsYXRlcyB8fCAhb3JkZXJlZFJlbmRlcmVkVGVtcGxhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29uY2F0ZW5hdGVzIHRoZSBsaXN0IG9mIHRlbXBsYXRlc1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IG9yZGVyZWRSZW5kZXJlZFRlbXBsYXRlcy5qb2luKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc1BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xzL3BsYWNlaG9sZGVyL3BsYWNlaG9sZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxFQUdMLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBMkIscUJBQXFCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUVsRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7QUFFM0M7Ozs7O0dBS0c7QUFRSCxNQUFNLE9BQU8sb0JBQW9CO0lBZ0IvQix3QkFBd0I7SUFDeEIsSUFDVyxFQUFFLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBNkIsS0FBc0MsRUFBbUIsRUFBcUI7UUFBOUUsVUFBSyxHQUFMLEtBQUssQ0FBaUM7UUFBbUIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFwQjFGLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVsQyxRQUFHLEdBQUcsSUFBSSxlQUFlLENBQXFCLFNBQVMsQ0FBQyxDQUFDO1FBRXpELG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVyQyxjQUFTLEdBQUcsSUFBSSxhQUFhLENBQTJCLENBQUMsQ0FBQyxDQUFDO0lBZTVFLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxRQUFRO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNYLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDbEMsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9DLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQixFQUFFO1lBQ0YsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGdCQUFnQjtZQUNoRCxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVM7U0FDbkMsQ0FBQyxDQUFDLEVBQ0gsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FDekMsUUFBUSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRTtZQUMxQixRQUFRLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTO1lBQ3hDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwRixPQUFPLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNwRixDQUNGLENBQ0YsQ0FDRixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBQyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRTtnQkFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7YUFDM0I7aUJBQU07Z0JBQ0wscUNBQXFDO2dCQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM1RjtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUNsQixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDeEcsYUFBYSxFQUFFLEVBQUU7aUJBQ2xCLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQzNCLG9CQUFvQixDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ2xHLENBQUMsU0FBUyxDQUFDO1lBQ1YsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDYixnQkFBZ0IsQ0FBa0MsNEJBQTRCLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUM5RixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQ2IsZ0JBQWdCLENBQWtDLDRCQUE0QixFQUFFO2dCQUM5RSxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO2dCQUM3QixXQUFXLEVBQUUsRUFBRTthQUNoQixFQUFFLEtBQUssQ0FBQztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztpSUF2RlUsb0JBQW9CO3FIQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBUGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFLG1FQUFtRTt3QkFDM0UsZ0ZBQWdGO29CQUNsRixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzBHQW1CWSxFQUFFO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3RvcmV9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBzYW1wbGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1BsYWNlaG9sZGVyVGVtcGxhdGVTdG9yZSwgc2VsZWN0U29ydGVkVGVtcGxhdGVzfSBmcm9tICcuLi8uLi9zdG9yZXMvcGxhY2Vob2xkZXItdGVtcGxhdGUnO1xuaW1wb3J0IHtQbGFjZWhvbGRlckxvYWRpbmdTdGF0dXMsIFBsYWNlaG9sZGVyTG9hZGluZ1N0YXR1c01lc3NhZ2V9IGZyb20gJy4vcGxhY2Vob2xkZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7c2VuZE90dGVyTWVzc2FnZX0gZnJvbSAnQG8zci9jb3JlJztcblxuLyoqXG4gKiBQbGFjZWhvbGRlciBjb21wb25lbnQgdGhhdCBpcyBiaW5kIHRvIHRoZSBQbGFjZWhvbGRlclRlbXBsYXRlU3RvcmUgdG8gZGlzcGxheSBhIHRlbXBsYXRlIGJhc2VkIG9uIGl0cyBJRFxuICogQSBsb2FkaW5nIGluZGljYXRpb24gY2FuIGJlIHByb3ZpZGVkIHZpYSBwcm9qZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogIDxvM3ItcGxhY2Vob2xkZXIgaWQ9XCJteS10ZW1wbGF0ZS1pZFwiPklzIGxvYWRpbmcgLi4uPC9vM3ItcGxhY2Vob2xkZXI+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28zci1wbGFjZWhvbGRlcicsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQgKm5nSWY9XCJpc1BlbmRpbmc7IGVsc2UgZGlzcGxheVRlbXBsYXRlXCI+PC9uZy1jb250ZW50PicgK1xuICAgICc8bmctdGVtcGxhdGUgI2Rpc3BsYXlUZW1wbGF0ZT48ZGl2IFtpbm5lckhUTUxdPVwidGVtcGxhdGVcIj48L2Rpdj48L25nLXRlbXBsYXRlPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFBsYWNlaG9sZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhZnRlclZpZXdJbml0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlcyQgPSBuZXcgUmVwbGF5U3ViamVjdDxQbGFjZWhvbGRlckxvYWRpbmdTdGF0dXM+KDEpO1xuXG4gIC8qKiBEZXRlcm1pbmUgaWYgdGhlIHBsYWNlaG9sZGVyIGNvbnRlbnQgaXMgcGVuZGluZyAqL1xuICBwdWJsaWMgaXNQZW5kaW5nPzogYm9vbGVhbjtcblxuICAvKiogR2VuZXJhdGVkIEhUTUwgdGVtcGxhdGUgKi9cbiAgcHVibGljIHRlbXBsYXRlPzogc3RyaW5nO1xuXG4gIC8qKiB0ZW1wbGF0ZSBpZGVudGlmeSAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IFN0b3JlPFBsYWNlaG9sZGVyVGVtcGxhdGVTdG9yZT4sIHByaXZhdGUgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuaWQkLnBpcGUoXG4gICAgICAgIGZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gISFpZCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHN3aXRjaE1hcCgoaWQ6IHN0cmluZykgPT5cbiAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChzZWxlY3RTb3J0ZWRUZW1wbGF0ZXMoaWQpKS5waXBlKFxuICAgICAgICAgICAgbWFwKChwbGFjZWhvbGRlcnMpID0+ICh7XG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBvcmRlcmVkVGVtcGxhdGVzOiBwbGFjZWhvbGRlcnM/Lm9yZGVyZWRUZW1wbGF0ZXMsXG4gICAgICAgICAgICAgIGlzUGVuZGluZzogcGxhY2Vob2xkZXJzPy5pc1BlbmRpbmdcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2aW91cywgY3VycmVudCkgPT5cbiAgICAgICAgICAgICAgcHJldmlvdXMuaWQgPT09IGN1cnJlbnQuaWQgJiZcbiAgICAgICAgICAgICAgcHJldmlvdXMuaXNQZW5kaW5nID09PSBjdXJyZW50LmlzUGVuZGluZyAmJlxuICAgICAgICAgICAgICBwcmV2aW91cy5vcmRlcmVkVGVtcGxhdGVzPy5tYXAocGxhY2Vob2xkZXIgPT4gcGxhY2Vob2xkZXIucmVuZGVyZWRUZW1wbGF0ZSkuam9pbignJykgPT09XG4gICAgICAgICAgICAgIGN1cnJlbnQub3JkZXJlZFRlbXBsYXRlcz8ubWFwKHBsYWNlaG9sZGVyID0+IHBsYWNlaG9sZGVyLnJlbmRlcmVkVGVtcGxhdGUpLmpvaW4oJycpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApLnN1YnNjcmliZSgoe2lkLCBvcmRlcmVkVGVtcGxhdGVzLCBpc1BlbmRpbmd9KSA9PiB7XG4gICAgICAgIHRoaXMuaXNQZW5kaW5nID0gaXNQZW5kaW5nO1xuICAgICAgICBpZiAoIW9yZGVyZWRUZW1wbGF0ZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMudGVtcGxhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ29uY2F0ZW5hdGVzIHRoZSBsaXN0IG9mIHRlbXBsYXRlc1xuICAgICAgICAgIHRoaXMudGVtcGxhdGUgPSBvcmRlcmVkVGVtcGxhdGVzLm1hcChwbGFjZWhvbGRlciA9PiBwbGFjZWhvbGRlci5yZW5kZXJlZFRlbXBsYXRlKS5qb2luKCcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1BlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlcyQubmV4dCh7XG4gICAgICAgICAgICB0ZW1wbGF0ZUlkczogIXRoaXMuaXNQZW5kaW5nID8gKG9yZGVyZWRUZW1wbGF0ZXMgfHwgW10pLm1hcChwbGFjZWhvbGRlciA9PiBwbGFjZWhvbGRlci5yZXNvbHZlZFVybCkgOiBbXSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVySWQ6IGlkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLm1lc3NhZ2VzJC5waXBlKFxuICAgICAgc2FtcGxlKHRoaXMuYWZ0ZXJWaWV3SW5pdCQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBKU09OLnN0cmluZ2lmeShjdXJyZW50KSA9PT0gSlNPTi5zdHJpbmdpZnkocHJldmlvdXMpKVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PlxuICAgICAgICBzZW5kT3R0ZXJNZXNzYWdlPFBsYWNlaG9sZGVyTG9hZGluZ1N0YXR1c01lc3NhZ2U+KCdwbGFjZWhvbGRlci1sb2FkaW5nLXN0YXR1cycsIGRhdGEsIGZhbHNlKSxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PlxuICAgICAgICBzZW5kT3R0ZXJNZXNzYWdlPFBsYWNlaG9sZGVyTG9hZGluZ1N0YXR1c01lc3NhZ2U+KCdwbGFjZWhvbGRlci1sb2FkaW5nLXN0YXR1cycsIHtcbiAgICAgICAgICBwbGFjZWhvbGRlcklkOiB0aGlzLmlkJC52YWx1ZSxcbiAgICAgICAgICB0ZW1wbGF0ZUlkczogW11cbiAgICAgICAgfSwgZmFsc2UpXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmlldyBpcyByZW5kZXJlZCBiZWZvcmUgcG9zdGluZyB0aGUgc3RhdHVzXG4gICAgdGhpcy5hZnRlclZpZXdJbml0JC5uZXh0KCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubWVzc2FnZXMkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5hZnRlclZpZXdJbml0JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xzL3BsYWNlaG9sZGVyL3BsYWNlaG9sZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge090dGVyTWVzc2FnZUNvbnRlbnR9IGZyb20gJ0BvM3IvY29yZSc7XG5cbi8qKlxuICogUGF5bG9hZCBvZiB0aGUge0BzZWUgUGxhY2Vob2xkZXJMb2FkaW5nU3RhdHVzTWVzc2FnZX1cbiAqXG4gKiBEZXNjcmliZSB0aGUgc3RhdGUgb2YgYW4gaWRlbnRpZmllZCBwbGFjZWhvbGRlcjogd2hhdCB0ZW1wbGF0ZSBpcyBiZWluZyBsb2FkZWQgYW5kIHdoZXRoZXIgdGhlIGxvYWQgaXMgZG9uZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlaG9sZGVyTG9hZGluZ1N0YXR1cyB7XG4gIC8qKlxuICAgKiBJZHMgb2YgdGhlIHRlbXBsYXRlIHRvIGJlIGxvYWRlZCBpbiB0aGUgcGxhY2Vob2xkZXJcbiAgICovXG4gIHRlbXBsYXRlSWRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBJZGVudGlmeSB0aGUgcGxhY2Vob2xkZXIgdW5kZXIgY29uc2lkZXJhdGlvblxuICAgKi9cbiAgcGxhY2Vob2xkZXJJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNZXNzYWdlIHRvIGRlc2NyaWJlIGEgcGxhY2Vob2xkZXIncyBsb2FkaW5nIHN0YXR1czogdGhlIHRlbXBsYXRlcyB0byBiZSBsb2FkZWQgYW5kIHRoZSBwZW5kaW5nIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZWhvbGRlckxvYWRpbmdTdGF0dXNNZXNzYWdlIGV4dGVuZHMgUGxhY2Vob2xkZXJMb2FkaW5nU3RhdHVzLFxuICBPdHRlck1lc3NhZ2VDb250ZW50PCdwbGFjZWhvbGRlci1sb2FkaW5nLXN0YXR1cyc+IHt9XG4iXX0=
@@ -6,17 +6,17 @@ import { PlaceholderComponent } from './placeholder.component';
6
6
  import { PlaceholderRequestStoreModule } from '../../stores/placeholder-request/index';
7
7
  import * as i0 from "@angular/core";
8
8
  export class PlaceholderModule {
9
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PlaceholderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: PlaceholderModule, declarations: [PlaceholderComponent], imports: [CommonModule,
9
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderModule, declarations: [PlaceholderComponent], imports: [CommonModule,
11
11
  StoreModule,
12
12
  PlaceholderTemplateStoreModule,
13
13
  PlaceholderRequestStoreModule], exports: [PlaceholderComponent] }); }
14
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PlaceholderModule, imports: [CommonModule,
14
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderModule, imports: [CommonModule,
15
15
  StoreModule,
16
16
  PlaceholderTemplateStoreModule,
17
17
  PlaceholderRequestStoreModule] }); }
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PlaceholderModule, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderModule, decorators: [{
20
20
  type: NgModule,
21
21
  args: [{
22
22
  imports: [
@@ -0,0 +1,302 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable, Optional, NgModule } from '@angular/core';
3
+ import * as i1$1 from '@ngrx/effects';
4
+ import { ofType, createEffect, EffectsModule } from '@ngrx/effects';
5
+ import { selectPlaceholderTemplateEntities, selectPlaceholderRequestEntities, deletePlaceholderTemplateEntity, setPlaceholderTemplateEntity, updatePlaceholderRequestEntity, setPlaceholderRequestEntityFromUrl, selectPlaceholderRequestEntityUsage, failPlaceholderRequestEntity, cancelPlaceholderRequest, PlaceholderRequestStoreModule, PlaceholderTemplateStoreModule } from '@o3r/components';
6
+ import * as i2 from '@o3r/logger';
7
+ import { Subscription, Subject, map, distinctUntilChanged, of, combineLatest, withLatestFrom, firstValueFrom, EMPTY } from 'rxjs';
8
+ import * as i1 from '@ngrx/store';
9
+ import { select } from '@ngrx/store';
10
+ import * as i3 from '@o3r/localization';
11
+ import * as i4 from '@o3r/dynamic-content';
12
+ import { DynamicContentService } from '@o3r/dynamic-content';
13
+ import { fromApiEffectSwitchMapById } from '@o3r/core';
14
+ import { map as map$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, take } from 'rxjs/operators';
15
+ import { JSONPath } from 'jsonpath-plus';
16
+ import * as i3$1 from '@o3r/rules-engine';
17
+
18
+ /** ActionUpdatePlaceholderBlock */
19
+ const RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE = 'UPDATE_PLACEHOLDER';
20
+
21
+ /**
22
+ * Service to handle async PlaceholderTemplate actions
23
+ */
24
+ class PlaceholderRulesEngineActionHandler {
25
+ constructor(store, logger, translateService) {
26
+ this.logger = logger;
27
+ this.subscription = new Subscription();
28
+ this.placeholdersActions$ = new Subject();
29
+ /** @inheritdoc */
30
+ this.supportingActions = [RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE];
31
+ const lang$ = translateService ? translateService.getTranslateService().onLangChange.pipe(map(({ lang }) => lang), distinctUntilChanged()) : of(null);
32
+ const filteredActions$ = combineLatest([lang$, this.placeholdersActions$.pipe(distinctUntilChanged((prev, next) => JSON.stringify(prev) === JSON.stringify(next)))]).pipe(withLatestFrom(combineLatest([store.pipe(select(selectPlaceholderTemplateEntities)), store.pipe(select(selectPlaceholderRequestEntities))])), map(([langAndTemplatesUrls, storedPlaceholdersAndRequests]) => {
33
+ const [lang, placeholderActions] = langAndTemplatesUrls;
34
+ const storedPlaceholders = storedPlaceholdersAndRequests[0] || {};
35
+ const storedPlaceholderRequests = storedPlaceholdersAndRequests[1] || {};
36
+ const placeholderNewRequests = [];
37
+ // Stores all raw Urls used from the current engine execution
38
+ const usedUrls = {};
39
+ // Get all Urls that needs to be resolved from current rules engine output
40
+ const placeholdersTemplates = placeholderActions.reduce((acc, placeholderAction) => {
41
+ const placeholdersTemplateUrl = {
42
+ rawUrl: placeholderAction.templateUrl,
43
+ priority: placeholderAction.priority
44
+ };
45
+ if (acc[placeholderAction.placeholderId]) {
46
+ acc[placeholderAction.placeholderId].push(placeholdersTemplateUrl);
47
+ }
48
+ else {
49
+ acc[placeholderAction.placeholderId] = [placeholdersTemplateUrl];
50
+ }
51
+ const resolvedUrl = this.resolveUrlWithLang(placeholderAction.templateUrl, lang);
52
+ // Filters duplicates and resolved urls that are already in the store
53
+ if (!usedUrls[placeholderAction.templateUrl] && (!storedPlaceholderRequests[placeholderAction.templateUrl]
54
+ || storedPlaceholderRequests[placeholderAction.templateUrl].resolvedUrl !== resolvedUrl)) {
55
+ placeholderNewRequests.push({
56
+ rawUrl: placeholderAction.templateUrl,
57
+ resolvedUrl: this.resolveUrlWithLang(placeholderAction.templateUrl, lang)
58
+ });
59
+ }
60
+ usedUrls[placeholderAction.templateUrl] = true;
61
+ return acc;
62
+ }, {});
63
+ // Urls not used anymore and not already disabled
64
+ const placeholderRequestsToDisable = [];
65
+ // Urls used that were disabled
66
+ const placeholderRequestsToEnable = [];
67
+ Object.keys(storedPlaceholderRequests).forEach((storedPlaceholderRequestRawUrl) => {
68
+ const usedFromEngineIteration = usedUrls[storedPlaceholderRequestRawUrl];
69
+ const usedFromStore = (storedPlaceholderRequests && storedPlaceholderRequests[storedPlaceholderRequestRawUrl]) ? storedPlaceholderRequests[storedPlaceholderRequestRawUrl].used : false;
70
+ if (!usedFromEngineIteration && usedFromStore) {
71
+ placeholderRequestsToDisable.push(storedPlaceholderRequestRawUrl);
72
+ }
73
+ else if (usedFromEngineIteration && !usedFromStore) {
74
+ placeholderRequestsToEnable.push(storedPlaceholderRequestRawUrl);
75
+ }
76
+ });
77
+ // Placeholder that are no longer filled by the current engine execution output will be cleared
78
+ const placeholdersTemplatesToBeCleanedUp = Object.keys(storedPlaceholders)
79
+ .filter(placeholderId => !placeholdersTemplates[placeholderId]);
80
+ const placeholdersTemplatesToBeSet = Object.keys(placeholdersTemplates).reduce((changedPlaceholderTemplates, placeholderTemplateId) => {
81
+ // Caching if the placeholder template already exists with the same urls
82
+ if (!storedPlaceholders[placeholderTemplateId] ||
83
+ !(JSON.stringify(storedPlaceholders[placeholderTemplateId].urlsWithPriority) === JSON.stringify(placeholdersTemplates[placeholderTemplateId]))) {
84
+ changedPlaceholderTemplates.push({
85
+ id: placeholderTemplateId,
86
+ urlsWithPriority: placeholdersTemplates[placeholderTemplateId]
87
+ });
88
+ }
89
+ return changedPlaceholderTemplates;
90
+ }, []);
91
+ return {
92
+ placeholdersTemplatesToBeCleanedUp,
93
+ placeholderRequestsToDisable,
94
+ placeholderRequestsToEnable,
95
+ placeholdersTemplatesToBeSet,
96
+ placeholderNewRequests
97
+ };
98
+ }));
99
+ this.subscription.add(filteredActions$.subscribe((placeholdersUpdates) => {
100
+ placeholdersUpdates.placeholdersTemplatesToBeCleanedUp.forEach(placeholderId => store.dispatch(deletePlaceholderTemplateEntity({
101
+ id: placeholderId
102
+ })));
103
+ placeholdersUpdates.placeholdersTemplatesToBeSet.forEach(placeholdersTemplateToBeSet => {
104
+ store.dispatch(setPlaceholderTemplateEntity({ entity: placeholdersTemplateToBeSet }));
105
+ });
106
+ placeholdersUpdates.placeholderRequestsToDisable.forEach(placeholderRequestToDisable => {
107
+ store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToDisable, used: false } }));
108
+ });
109
+ placeholdersUpdates.placeholderRequestsToEnable.forEach(placeholderRequestToEnable => {
110
+ store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToEnable, used: true } }));
111
+ });
112
+ placeholdersUpdates.placeholderNewRequests.forEach(placeholderNewRequest => {
113
+ store.dispatch(setPlaceholderRequestEntityFromUrl({
114
+ resolvedUrl: placeholderNewRequest.resolvedUrl,
115
+ id: placeholderNewRequest.rawUrl,
116
+ call: this.retrieveTemplate(placeholderNewRequest.resolvedUrl)
117
+ }));
118
+ });
119
+ }));
120
+ }
121
+ /**
122
+ * Localize the url, replacing the language marker
123
+ * @param url
124
+ * @param language
125
+ */
126
+ resolveUrlWithLang(url, language) {
127
+ if (!language && url.includes('[LANGUAGE]')) {
128
+ this.logger.warn(`Missing language when trying to resolve ${url}`);
129
+ }
130
+ return language ? url.replace(/\[LANGUAGE]/g, language) : url;
131
+ }
132
+ /**
133
+ * Retrieve template as json from a given url
134
+ * @param url
135
+ */
136
+ async retrieveTemplate(url) {
137
+ const resolvedUrl$ = inject(DynamicContentService, { optional: true })?.getContentPathStream(url) || of(url);
138
+ const fullUrl = await firstValueFrom(resolvedUrl$);
139
+ return fetch(fullUrl).then((response) => response.json());
140
+ }
141
+ /** @inheritdoc */
142
+ executeActions(actions) {
143
+ const templates = actions.map((action) => ({
144
+ placeholderId: action.placeholderId,
145
+ templateUrl: action.value,
146
+ priority: action.priority || 0
147
+ }));
148
+ this.placeholdersActions$.next(templates);
149
+ }
150
+ /** @inheritdoc */
151
+ ngOnDestroy() {
152
+ this.subscription.unsubscribe();
153
+ }
154
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderRulesEngineActionHandler, deps: [{ token: i1.Store }, { token: i2.LoggerService }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
155
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderRulesEngineActionHandler }); }
156
+ }
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderRulesEngineActionHandler, decorators: [{
158
+ type: Injectable
159
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2.LoggerService }, { type: i3.LocalizationService, decorators: [{
160
+ type: Optional
161
+ }] }] });
162
+
163
+ /**
164
+ * Service to handle async PlaceholderTemplate actions
165
+ */
166
+ class PlaceholderTemplateResponseEffect {
167
+ constructor(actions$, store, rulesEngineService, dynamicContentService, translationService) {
168
+ this.actions$ = actions$;
169
+ this.store = store;
170
+ this.rulesEngineService = rulesEngineService;
171
+ this.dynamicContentService = dynamicContentService;
172
+ this.translationService = translationService;
173
+ /**
174
+ * Set the PlaceholderRequest entity with the reply content, dispatch failPlaceholderRequestEntity if it catches a failure
175
+ * Handles the rendering of the HTML content from the template and creates the combine latest from facts list if needed
176
+ * Disables unused templates refresh if used is false in the store
177
+ */
178
+ this.setPlaceholderRequestEntityFromUrl$ = createEffect(() => this.actions$.pipe(ofType(setPlaceholderRequestEntityFromUrl), fromApiEffectSwitchMapById((templateResponse, action) => {
179
+ const facts = templateResponse.vars ? Object.values(templateResponse.vars).filter((variable) => variable.type === 'fact') : [];
180
+ const factsStreamsList = this.rulesEngineService ? facts.map((fact) => this.rulesEngineService.engine.retrieveOrCreateFactStream(fact.value).pipe(map$1((factValue) => ({
181
+ name: fact.value,
182
+ // eslint-disable-next-line new-cap
183
+ factValue: (fact.path && factValue) ? JSONPath({ wrap: false, json: factValue, path: fact.path }) : factValue
184
+ })), distinctUntilChanged$1((previous, current) => previous.factValue === current.factValue))) : [];
185
+ const factsStreamsList$ = factsStreamsList.length ? combineLatest(factsStreamsList) : of([]);
186
+ return combineLatest([factsStreamsList$, this.store.select(selectPlaceholderRequestEntityUsage(action.id)).pipe(distinctUntilChanged$1())]).pipe(switchMap(([factsUsedInTemplate, placeholderRequestUsage]) => {
187
+ if (!placeholderRequestUsage) {
188
+ return EMPTY;
189
+ }
190
+ return this.getRenderedHTML$(templateResponse.template, templateResponse.vars, factsUsedInTemplate).pipe(map$1(({ renderedTemplate, unknownTypeFound }) =>
191
+ // Update instead of set because used already set by the update from url action
192
+ updatePlaceholderRequestEntity({
193
+ entity: {
194
+ ...templateResponse,
195
+ resolvedUrl: action.resolvedUrl,
196
+ id: action.id,
197
+ renderedTemplate,
198
+ unknownTypeFound
199
+ },
200
+ requestId: action.requestId
201
+ })));
202
+ }));
203
+ }, (error, action) => of(failPlaceholderRequestEntity({ ids: [action.id], error, requestId: action.requestId })), (requestIdPayload, action) => cancelPlaceholderRequest({ ...requestIdPayload, id: action.id }))));
204
+ }
205
+ /**
206
+ * Renders the html template, replacing facts and urls and localizationKeys
207
+ * @param template
208
+ * @param vars
209
+ * @param facts
210
+ */
211
+ getRenderedHTML$(template, vars, facts) {
212
+ let unknownTypeFound = false;
213
+ const factset = (facts || []).reduce((set, fact) => {
214
+ set[fact.name] = fact.factValue;
215
+ return set;
216
+ }, {});
217
+ const replacements$ = [];
218
+ if (vars && template) {
219
+ for (const varName in vars) {
220
+ if (Object.prototype.hasOwnProperty.call(vars, varName)) {
221
+ const ejsVar = new RegExp(`<%=\\s*${varName}\\s*%>`, 'g');
222
+ switch (vars[varName].type) {
223
+ case 'relativeUrl': {
224
+ replacements$.push(this.dynamicContentService?.getMediaPathStream(vars[varName].value).pipe(take(1), map$1((value) => ({ ejsVar, value }))) || of({ ejsVar, value: vars[varName].value }));
225
+ break;
226
+ }
227
+ case 'fullUrl': {
228
+ template = template.replace(ejsVar, vars[varName].value);
229
+ break;
230
+ }
231
+ case 'fact': {
232
+ template = template.replace(ejsVar, factset[vars[varName].value] ?? '');
233
+ break;
234
+ }
235
+ case 'localisation': {
236
+ const linkedParams = (vars[varName].vars || []).reduce((acc, parameter) => {
237
+ const paramName = vars[parameter].value;
238
+ acc[paramName] = factset[paramName];
239
+ return acc;
240
+ }, {});
241
+ replacements$.push(this.translationService ?
242
+ this.translationService.translate(vars[varName].value, linkedParams).pipe(map$1((value) => (value ? { ejsVar, value } : null))) :
243
+ of(null));
244
+ break;
245
+ }
246
+ default: {
247
+ unknownTypeFound = true;
248
+ break;
249
+ }
250
+ }
251
+ }
252
+ }
253
+ }
254
+ return replacements$.length > 0 && !!template ?
255
+ combineLatest(replacements$).pipe(map$1((replacements) => ({
256
+ renderedTemplate: replacements.reduce((acc, replacement) => replacement ? acc.replace(replacement.ejsVar, replacement.value) : acc, template),
257
+ unknownTypeFound
258
+ }))) : of({ renderedTemplate: template, unknownTypeFound });
259
+ }
260
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderTemplateResponseEffect, deps: [{ token: i1$1.Actions }, { token: i1.Store }, { token: i3$1.RulesEngineRunnerService, optional: true }, { token: i4.DynamicContentService, optional: true }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
261
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderTemplateResponseEffect }); }
262
+ }
263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderTemplateResponseEffect, decorators: [{
264
+ type: Injectable
265
+ }], ctorParameters: () => [{ type: i1$1.Actions }, { type: i1.Store }, { type: i3$1.RulesEngineRunnerService, decorators: [{
266
+ type: Optional
267
+ }] }, { type: i4.DynamicContentService, decorators: [{
268
+ type: Optional
269
+ }] }, { type: i3.LocalizationService, decorators: [{
270
+ type: Optional
271
+ }] }] });
272
+
273
+ class PlaceholderRulesEngineActionModule {
274
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderRulesEngineActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
275
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderRulesEngineActionModule, imports: [i1$1.EffectsFeatureModule, PlaceholderRequestStoreModule,
276
+ PlaceholderTemplateStoreModule] }); }
277
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderRulesEngineActionModule, providers: [
278
+ PlaceholderRulesEngineActionHandler
279
+ ], imports: [EffectsModule.forFeature([PlaceholderTemplateResponseEffect]),
280
+ PlaceholderRequestStoreModule,
281
+ PlaceholderTemplateStoreModule] }); }
282
+ }
283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: PlaceholderRulesEngineActionModule, decorators: [{
284
+ type: NgModule,
285
+ args: [{
286
+ imports: [
287
+ EffectsModule.forFeature([PlaceholderTemplateResponseEffect]),
288
+ PlaceholderRequestStoreModule,
289
+ PlaceholderTemplateStoreModule
290
+ ],
291
+ providers: [
292
+ PlaceholderRulesEngineActionHandler
293
+ ]
294
+ }]
295
+ }] });
296
+
297
+ /**
298
+ * Generated bundle index. Do not edit.
299
+ */
300
+
301
+ export { PlaceholderRulesEngineActionHandler, PlaceholderRulesEngineActionModule, RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE };
302
+ //# sourceMappingURL=o3r-components-rules-engine.mjs.map