@factor_ec/ui 1.0.13 → 1.0.15

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 (123) hide show
  1. package/esm2020/factor_ec-ui.mjs +5 -0
  2. package/esm2020/lib/display/avatar/avatar.component.mjs +74 -0
  3. package/esm2020/lib/display/content/content.component.mjs +19 -0
  4. package/esm2020/lib/display/display.module.mjs +66 -0
  5. package/esm2020/lib/display/icon/icon.component.mjs +97 -0
  6. package/esm2020/lib/display/image/image.component.mjs +80 -0
  7. package/esm2020/lib/display/message/message.component.mjs +30 -0
  8. package/esm2020/lib/display/message.service.mjs +58 -0
  9. package/esm2020/lib/display/observe-intersecting.directive.mjs +43 -0
  10. package/esm2020/lib/display/progress/progress.component.mjs +42 -0
  11. package/esm2020/lib/display/progress.service.mjs +50 -0
  12. package/esm2020/lib/inputs/inputs.module.mjs +24 -0
  13. package/esm2020/lib/inputs/rating/rating.component.mjs +73 -0
  14. package/esm2020/lib/models/action.mjs +2 -0
  15. package/esm2020/lib/models/content.mjs +2 -0
  16. package/esm2020/lib/models/icon.mjs +2 -0
  17. package/esm2020/lib/models/message-options.mjs +2 -0
  18. package/esm2020/lib/models/module-configuration.mjs +2 -0
  19. package/esm2020/lib/models/ui-configuration.mjs +2 -0
  20. package/esm2020/lib/navigation/list/list.component.mjs +70 -0
  21. package/esm2020/lib/navigation/navbar/navbar.component.mjs +74 -0
  22. package/esm2020/lib/navigation/navigation.module.mjs +55 -0
  23. package/esm2020/lib/navigation/searchbox/searchbox.component.mjs +109 -0
  24. package/esm2020/lib/navigation/toolbar/toolbar.component.mjs +53 -0
  25. package/esm2020/lib/ui.module.mjs +47 -0
  26. package/esm2020/public-api.mjs +22 -0
  27. package/fesm2015/factor_ec-ui.mjs +1002 -0
  28. package/fesm2015/factor_ec-ui.mjs.map +1 -0
  29. package/fesm2020/factor_ec-ui.mjs +993 -0
  30. package/fesm2020/factor_ec-ui.mjs.map +1 -0
  31. package/index.d.ts +5 -0
  32. package/lib/display/avatar/avatar.component.d.ts +22 -0
  33. package/lib/display/content/content.component.d.ts +7 -0
  34. package/lib/display/display.module.d.ts +17 -0
  35. package/lib/display/icon/icon.component.d.ts +24 -0
  36. package/lib/display/image/image.component.d.ts +15 -0
  37. package/lib/display/message/message.component.d.ts +11 -0
  38. package/lib/display/message.service.d.ts +15 -0
  39. package/lib/display/observe-intersecting.directive.d.ts +16 -0
  40. package/lib/display/progress/progress.component.d.ts +15 -0
  41. package/lib/display/progress.service.d.ts +15 -0
  42. package/lib/inputs/inputs.module.d.ts +8 -0
  43. package/lib/inputs/rating/rating.component.d.ts +23 -0
  44. package/{src/lib/models/action.ts → lib/models/action.d.ts} +1 -1
  45. package/{src/lib/models/content.ts → lib/models/content.d.ts} +1 -1
  46. package/{src/lib/models/icon.ts → lib/models/icon.d.ts} +1 -1
  47. package/{src/lib/models/message-options.ts → lib/models/message-options.d.ts} +1 -2
  48. package/lib/models/module-configuration.d.ts +6 -0
  49. package/lib/models/ui-configuration.d.ts +7 -0
  50. package/lib/navigation/list/list.component.d.ts +21 -0
  51. package/lib/navigation/navbar/navbar.component.d.ts +23 -0
  52. package/lib/navigation/navigation.module.d.ts +15 -0
  53. package/lib/navigation/searchbox/searchbox.component.d.ts +34 -0
  54. package/lib/navigation/toolbar/toolbar.component.d.ts +18 -0
  55. package/lib/ui.module.d.ts +13 -0
  56. package/package.json +23 -3
  57. package/{src/public-api.ts → public-api.d.ts} +0 -4
  58. package/.browserslistrc +0 -16
  59. package/karma.conf.js +0 -44
  60. package/ng-package.json +0 -7
  61. package/src/lib/display/avatar/avatar.component.html +0 -1
  62. package/src/lib/display/avatar/avatar.component.scss +0 -20
  63. package/src/lib/display/avatar/avatar.component.spec.ts +0 -23
  64. package/src/lib/display/avatar/avatar.component.ts +0 -69
  65. package/src/lib/display/content/content.component.html +0 -4
  66. package/src/lib/display/content/content.component.scss +0 -0
  67. package/src/lib/display/content/content.component.spec.ts +0 -23
  68. package/src/lib/display/content/content.component.ts +0 -15
  69. package/src/lib/display/display.module.ts +0 -41
  70. package/src/lib/display/icon/icon.component.html +0 -4
  71. package/src/lib/display/icon/icon.component.scss +0 -47
  72. package/src/lib/display/icon/icon.component.spec.ts +0 -23
  73. package/src/lib/display/icon/icon.component.ts +0 -88
  74. package/src/lib/display/image/image.component.html +0 -2
  75. package/src/lib/display/image/image.component.scss +0 -53
  76. package/src/lib/display/image/image.component.spec.ts +0 -23
  77. package/src/lib/display/image/image.component.ts +0 -71
  78. package/src/lib/display/message/message.component.html +0 -33
  79. package/src/lib/display/message/message.component.scss +0 -25
  80. package/src/lib/display/message/message.component.spec.ts +0 -23
  81. package/src/lib/display/message/message.component.ts +0 -24
  82. package/src/lib/display/message.service.spec.ts +0 -16
  83. package/src/lib/display/message.service.ts +0 -58
  84. package/src/lib/display/observe-intersecting.directive.spec.ts +0 -8
  85. package/src/lib/display/observe-intersecting.directive.ts +0 -34
  86. package/src/lib/display/progress/progress.component.html +0 -6
  87. package/src/lib/display/progress/progress.component.scss +0 -121
  88. package/src/lib/display/progress/progress.component.spec.ts +0 -23
  89. package/src/lib/display/progress/progress.component.ts +0 -36
  90. package/src/lib/display/progress.service.spec.ts +0 -16
  91. package/src/lib/display/progress.service.ts +0 -51
  92. package/src/lib/inputs/inputs.module.ts +0 -17
  93. package/src/lib/inputs/rating/rating.component.html +0 -13
  94. package/src/lib/inputs/rating/rating.component.scss +0 -61
  95. package/src/lib/inputs/rating/rating.component.spec.ts +0 -25
  96. package/src/lib/inputs/rating/rating.component.ts +0 -66
  97. package/src/lib/models/action-group.ts +0 -9
  98. package/src/lib/models/module-configuration.ts +0 -6
  99. package/src/lib/models/ui-configuration.ts +0 -7
  100. package/src/lib/navigation/list/list.component.html +0 -52
  101. package/src/lib/navigation/list/list.component.scss +0 -93
  102. package/src/lib/navigation/list/list.component.spec.ts +0 -23
  103. package/src/lib/navigation/list/list.component.ts +0 -56
  104. package/src/lib/navigation/navbar/navbar.component.html +0 -23
  105. package/src/lib/navigation/navbar/navbar.component.scss +0 -202
  106. package/src/lib/navigation/navbar/navbar.component.spec.ts +0 -23
  107. package/src/lib/navigation/navbar/navbar.component.ts +0 -57
  108. package/src/lib/navigation/navigation.module.ts +0 -34
  109. package/src/lib/navigation/searchbox/searchbox.component.html +0 -34
  110. package/src/lib/navigation/searchbox/searchbox.component.scss +0 -37
  111. package/src/lib/navigation/searchbox/searchbox.component.spec.ts +0 -23
  112. package/src/lib/navigation/searchbox/searchbox.component.ts +0 -94
  113. package/src/lib/navigation/toolbar/toolbar.component.html +0 -43
  114. package/src/lib/navigation/toolbar/toolbar.component.scss +0 -29
  115. package/src/lib/navigation/toolbar/toolbar.component.spec.ts +0 -23
  116. package/src/lib/navigation/toolbar/toolbar.component.ts +0 -43
  117. package/src/lib/scss/breakpoints.scss +0 -123
  118. package/src/lib/scss/variables.scss +0 -8
  119. package/src/lib/ui.module.ts +0 -34
  120. package/src/test.ts +0 -27
  121. package/tsconfig.lib.json +0 -15
  122. package/tsconfig.lib.prod.json +0 -10
  123. package/tsconfig.spec.json +0 -17
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yX2VjLXVpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2ZhY3Rvcl9lYy11aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,74 @@
1
+ import { Component, HostBinding, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@factor_ec/utils";
4
+ import * as i2 from "@angular/common";
5
+ export class AvatarComponent {
6
+ constructor(colorService) {
7
+ this.colorService = colorService;
8
+ this.class = '';
9
+ }
10
+ set src(value) {
11
+ if (value && value.trim() != '') {
12
+ this._src = value;
13
+ let image = new Image();
14
+ image.src = value;
15
+ image.onload = () => {
16
+ if ("decode" in image) {
17
+ image.decode().then(() => {
18
+ this.loaded = true;
19
+ });
20
+ }
21
+ else {
22
+ console.error('Image.decode not available.');
23
+ }
24
+ };
25
+ }
26
+ }
27
+ set label(value) {
28
+ this._label = value;
29
+ this.initials = this.getInitials(value);
30
+ }
31
+ get backgroundColor() {
32
+ return this.color || this.colorService.hex(this._label);
33
+ }
34
+ get backgroundImage() {
35
+ return this._src ? `url(${this._src})` : '';
36
+ }
37
+ get hostClasses() {
38
+ return [
39
+ 'ft-avatar',
40
+ this.class
41
+ ].join(' ');
42
+ }
43
+ ngOnInit() {
44
+ }
45
+ getInitials(value) {
46
+ let allInitials = value.match(/\b\w/g) || [];
47
+ let initials = ((allInitials.shift() || '') + (allInitials.pop() || '')).toUpperCase();
48
+ return initials;
49
+ }
50
+ }
51
+ AvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: AvatarComponent, deps: [{ token: i1.ColorService }], target: i0.ɵɵFactoryTarget.Component });
52
+ AvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: AvatarComponent, selector: "ft-avatar", inputs: { color: "color", class: "class", src: "src", label: "label" }, host: { properties: { "style.background-color": "this.backgroundColor", "style.background-image": "this.backgroundImage", "class": "this.hostClasses" } }, ngImport: i0, template: "<div *ngIf=\"!loaded\">{{ initials }}</div>\n", styles: [":host{--default-size: var(--size, 3rem);display:inline-flex;align-items:center;justify-content:center;color:#fff;background-size:cover;background-repeat:no-repeat;border-radius:calc(var(--default-size) / 2);font-size:calc(var(--default-size) - var(--default-size) * .6);min-width:var(--default-size);min-height:var(--default-size);cursor:default;-webkit-user-select:none;user-select:none}div{font-size:1em;line-height:1em}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: AvatarComponent, decorators: [{
54
+ type: Component,
55
+ args: [{ selector: 'ft-avatar', template: "<div *ngIf=\"!loaded\">{{ initials }}</div>\n", styles: [":host{--default-size: var(--size, 3rem);display:inline-flex;align-items:center;justify-content:center;color:#fff;background-size:cover;background-repeat:no-repeat;border-radius:calc(var(--default-size) / 2);font-size:calc(var(--default-size) - var(--default-size) * .6);min-width:var(--default-size);min-height:var(--default-size);cursor:default;-webkit-user-select:none;user-select:none}div{font-size:1em;line-height:1em}\n"] }]
56
+ }], ctorParameters: function () { return [{ type: i1.ColorService }]; }, propDecorators: { color: [{
57
+ type: Input
58
+ }], class: [{
59
+ type: Input
60
+ }], src: [{
61
+ type: Input
62
+ }], label: [{
63
+ type: Input
64
+ }], backgroundColor: [{
65
+ type: HostBinding,
66
+ args: ['style.background-color']
67
+ }], backgroundImage: [{
68
+ type: HostBinding,
69
+ args: ['style.background-image']
70
+ }], hostClasses: [{
71
+ type: HostBinding,
72
+ args: ['class']
73
+ }] } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZGlzcGxheS9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZGlzcGxheS9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7OztBQVF0RSxNQUFNLE9BQU8sZUFBZTtJQStDMUIsWUFDVSxZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXhDcEMsVUFBSyxHQUFXLEVBQUUsQ0FBQztJQXlDZixDQUFDO0lBeENMLElBQ0ksR0FBRyxDQUFDLEtBQXlCO1FBQy9CLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBRSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDbEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztZQUNsQixLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDbEIsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFO29CQUNyQixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTt3QkFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztpQkFDOUM7WUFDSCxDQUFDLENBQUM7U0FDSDtJQUNILENBQUM7SUFDRCxJQUNJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELElBQ0ksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQ0ksV0FBVztRQUNiLE9BQU87WUFDTCxXQUFXO1lBQ1gsSUFBSSxDQUFDLEtBQUs7U0FDWCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7SUFNRCxRQUFRO0lBRVIsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksV0FBVyxHQUFhLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZELElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs0R0ExRFUsZUFBZTtnR0FBZixlQUFlLG9SQ1I1QiwrQ0FDQTsyRkRPYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFdBQVc7bUdBUXJCLEtBQUs7c0JBREosS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBR0YsR0FBRztzQkFETixLQUFLO2dCQWtCRixLQUFLO3NCQURSLEtBQUs7Z0JBTUYsZUFBZTtzQkFEbEIsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBS2pDLGVBQWU7c0JBRGxCLFdBQVc7dUJBQUMsd0JBQXdCO2dCQUtqQyxXQUFXO3NCQURkLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbG9yU2VydmljZSB9IGZyb20gJ0BmYWN0b3JfZWMvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmdC1hdmF0YXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXZhdGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXZhdGFyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXZhdGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgX2xhYmVsITogc3RyaW5nO1xuICBfc3JjITogc3RyaW5nO1xuICBASW5wdXQoKVxuICBjb2xvciE6IHN0cmluZztcbiAgaW5pdGlhbHMhOiBzdHJpbmc7XG4gIGxvYWRlZCE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KClcbiAgc2V0IHNyYyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLnRyaW0oKSE9JycpIHtcbiAgICAgIHRoaXMuX3NyYyA9IHZhbHVlO1xuICAgICAgbGV0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWFnZS5zcmMgPSB2YWx1ZTtcbiAgICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKFwiZGVjb2RlXCIgaW4gaW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZS5kZWNvZGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbWFnZS5kZWNvZGUgbm90IGF2YWlsYWJsZS4nKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYWJlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW5pdGlhbHMgPSB0aGlzLmdldEluaXRpYWxzKHZhbHVlKTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmJhY2tncm91bmQtY29sb3InKVxuICBnZXQgYmFja2dyb3VuZENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sb3IgfHwgdGhpcy5jb2xvclNlcnZpY2UuaGV4KHRoaXMuX2xhYmVsKTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmJhY2tncm91bmQtaW1hZ2UnKVxuICBnZXQgYmFja2dyb3VuZEltYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NyYyA/IGB1cmwoJHt0aGlzLl9zcmN9KWAgOiAnJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGhvc3RDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdmdC1hdmF0YXInLFxuICAgICAgdGhpcy5jbGFzc1xuICAgIF0uam9pbignICcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb2xvclNlcnZpY2U6IENvbG9yU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gIH1cbiAgZ2V0SW5pdGlhbHModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGFsbEluaXRpYWxzOiBzdHJpbmdbXSA9IHZhbHVlLm1hdGNoKC9cXGJcXHcvZykgfHwgW107XG4gICAgbGV0IGluaXRpYWxzOiBzdHJpbmcgPSAoKGFsbEluaXRpYWxzLnNoaWZ0KCkgfHwgJycpICsgKGFsbEluaXRpYWxzLnBvcCgpIHx8ICcnKSkudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gaW5pdGlhbHM7XG4gIH1cblxufVxuIiwiPGRpdiAqbmdJZj1cIiFsb2FkZWRcIj57eyBpbml0aWFscyB9fTwvZGl2PlxuIl19
@@ -0,0 +1,19 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class ContentComponent {
6
+ constructor(data) {
7
+ this.data = data;
8
+ }
9
+ }
10
+ ContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ContentComponent, deps: [{ token: MAT_SNACK_BAR_DATA }], target: i0.ɵɵFactoryTarget.Component });
11
+ ContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: ContentComponent, selector: "lib-content", ngImport: i0, template: "<ng-container [ngSwitch]=\"data.message?.type\">\n <div *ngSwitchCase=\"'html'\" [innerHTML]=\"data.message?.content\"></div>\n <ng-container *ngSwitchDefault>{{ data.message?.content }}</ng-container>\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ContentComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: 'lib-content', template: "<ng-container [ngSwitch]=\"data.message?.type\">\n <div *ngSwitchCase=\"'html'\" [innerHTML]=\"data.message?.content\"></div>\n <ng-container *ngSwitchDefault>{{ data.message?.content }}</ng-container>\n</ng-container>" }]
15
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
16
+ type: Inject,
17
+ args: [MAT_SNACK_BAR_DATA]
18
+ }] }]; } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2Rpc3BsYXkvY29udGVudC9jb250ZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZGlzcGxheS9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQU9qRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLFlBQ3FDLElBQVM7UUFBVCxTQUFJLEdBQUosSUFBSSxDQUFLO0lBQzFDLENBQUM7OzZHQUpNLGdCQUFnQixrQkFHakIsa0JBQWtCO2lHQUhqQixnQkFBZ0IsbURDUjdCLGtPQUdlOzJGREtGLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhOzswQkFPcEIsTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX1NOQUNLX0JBUl9EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50Q29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9TTkFDS19CQVJfREFUQSkgcHVibGljIGRhdGE6IGFueVxuICApIHsgfVxuXG59XG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJkYXRhLm1lc3NhZ2U/LnR5cGVcIj5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIiBbaW5uZXJIVE1MXT1cImRhdGEubWVzc2FnZT8uY29udGVudFwiPjwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD57eyBkYXRhLm1lc3NhZ2U/LmNvbnRlbnQgfX08L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPiJdfQ==
@@ -0,0 +1,66 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatButtonModule } from '@angular/material/button';
4
+ import { MatDialogModule } from '@angular/material/dialog';
5
+ import { MatSnackBarModule } from '@angular/material/snack-bar';
6
+ import { AvatarComponent } from './avatar/avatar.component';
7
+ import { IconComponent } from './icon/icon.component';
8
+ import { ImageComponent } from './image/image.component';
9
+ import { ProgressComponent } from './progress/progress.component';
10
+ import { ObserveIntersectingDirective } from './observe-intersecting.directive';
11
+ import { MessageComponent } from './message/message.component';
12
+ import { ContentComponent } from './content/content.component';
13
+ import * as i0 from "@angular/core";
14
+ export class DisplayModule {
15
+ }
16
+ DisplayModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: DisplayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17
+ DisplayModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.0", ngImport: i0, type: DisplayModule, declarations: [AvatarComponent,
18
+ IconComponent,
19
+ ImageComponent,
20
+ ProgressComponent,
21
+ ObserveIntersectingDirective,
22
+ MessageComponent,
23
+ ContentComponent], imports: [CommonModule,
24
+ MatButtonModule,
25
+ MatDialogModule,
26
+ MatSnackBarModule], exports: [AvatarComponent,
27
+ IconComponent,
28
+ ImageComponent,
29
+ ProgressComponent,
30
+ ObserveIntersectingDirective,
31
+ MessageComponent,
32
+ ContentComponent] });
33
+ DisplayModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: DisplayModule, imports: [CommonModule,
34
+ MatButtonModule,
35
+ MatDialogModule,
36
+ MatSnackBarModule] });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: DisplayModule, decorators: [{
38
+ type: NgModule,
39
+ args: [{
40
+ declarations: [
41
+ AvatarComponent,
42
+ IconComponent,
43
+ ImageComponent,
44
+ ProgressComponent,
45
+ ObserveIntersectingDirective,
46
+ MessageComponent,
47
+ ContentComponent
48
+ ],
49
+ exports: [
50
+ AvatarComponent,
51
+ IconComponent,
52
+ ImageComponent,
53
+ ProgressComponent,
54
+ ObserveIntersectingDirective,
55
+ MessageComponent,
56
+ ContentComponent
57
+ ],
58
+ imports: [
59
+ CommonModule,
60
+ MatButtonModule,
61
+ MatDialogModule,
62
+ MatSnackBarModule
63
+ ]
64
+ }]
65
+ }] });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2Rpc3BsYXkvZGlzcGxheS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUE0Qi9ELE1BQU0sT0FBTyxhQUFhOzswR0FBYixhQUFhOzJHQUFiLGFBQWEsaUJBeEJ0QixlQUFlO1FBQ2YsYUFBYTtRQUNiLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixnQkFBZ0IsYUFZaEIsWUFBWTtRQUNaLGVBQWU7UUFDZixlQUFlO1FBQ2YsaUJBQWlCLGFBWmpCLGVBQWU7UUFDZixhQUFhO1FBQ2IsY0FBYztRQUNkLGlCQUFpQjtRQUNqQiw0QkFBNEI7UUFDNUIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjsyR0FTUCxhQUFhLFlBTnRCLFlBQVk7UUFDWixlQUFlO1FBQ2YsZUFBZTtRQUNmLGlCQUFpQjsyRkFHUixhQUFhO2tCQTFCekIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQiw0QkFBNEI7d0JBQzVCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQiw0QkFBNEI7d0JBQzVCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsaUJBQWlCO3FCQUNsQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5cbmltcG9ydCB7IEF2YXRhckNvbXBvbmVudCB9IGZyb20gJy4vYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4vaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2dyZXNzQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9ncmVzcy9wcm9ncmVzcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2ZUludGVyc2VjdGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4vb2JzZXJ2ZS1pbnRlcnNlY3RpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL21lc3NhZ2UvbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vY29udGVudC9jb250ZW50LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIEltYWdlQ29tcG9uZW50LFxuICAgIFByb2dyZXNzQ29tcG9uZW50LFxuICAgIE9ic2VydmVJbnRlcnNlY3RpbmdEaXJlY3RpdmUsXG4gICAgTWVzc2FnZUNvbXBvbmVudCxcbiAgICBDb250ZW50Q29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBJbWFnZUNvbXBvbmVudCxcbiAgICBQcm9ncmVzc0NvbXBvbmVudCxcbiAgICBPYnNlcnZlSW50ZXJzZWN0aW5nRGlyZWN0aXZlLFxuICAgIE1lc3NhZ2VDb21wb25lbnQsXG4gICAgQ29udGVudENvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgTWF0U25hY2tCYXJNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEaXNwbGF5TW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,97 @@
1
+ import { Component, Input, Inject, HostBinding } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class IconComponent {
5
+ constructor(configuration) {
6
+ this.configuration = configuration;
7
+ this.class = '';
8
+ }
9
+ set collection(collection) {
10
+ this._collection = collection;
11
+ this.update();
12
+ }
13
+ set mode(mode) {
14
+ this._mode = mode;
15
+ this.update();
16
+ }
17
+ set name(name) {
18
+ this._name = name;
19
+ this.update();
20
+ }
21
+ set path(path) {
22
+ this._path = path;
23
+ this.update();
24
+ }
25
+ get hostClasses() {
26
+ return [
27
+ 'ft-icon',
28
+ this.class
29
+ ].join(' ');
30
+ }
31
+ ngOnInit() {
32
+ this.update();
33
+ }
34
+ update() {
35
+ // Set the default collection if the mode is external
36
+ if (!this._collection) {
37
+ if (this.configuration.icon && this.configuration.icon.collection) {
38
+ this._collection = this.configuration.icon.collection;
39
+ }
40
+ else if (this._mode === 'external') {
41
+ this._collection = 'icons';
42
+ }
43
+ }
44
+ if (!this._mode) {
45
+ if (this.configuration.icon && this.configuration.icon.mode) {
46
+ this._mode = this.configuration.icon.mode;
47
+ }
48
+ else {
49
+ this._mode = 'external';
50
+ }
51
+ }
52
+ if (this._mode === 'external') {
53
+ // If the icon mode is external
54
+ if (!this._path) {
55
+ if (this.configuration.icon && this.configuration.icon.path) {
56
+ this._path = this.configuration.icon.path;
57
+ }
58
+ else {
59
+ this._path = 'assets';
60
+ }
61
+ }
62
+ this.url = `${this._path}/${this._collection}.svg#${this._name}`;
63
+ }
64
+ else {
65
+ // If the icon mode is inline
66
+ const name = this._collection && this._collection !== 'unset' ? `${this._collection}--${this._name}` : this._name;
67
+ this.url = `#${name}`;
68
+ }
69
+ }
70
+ }
71
+ IconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: IconComponent, deps: [{ token: 'FactorUiConfiguration' }], target: i0.ɵɵFactoryTarget.Component });
72
+ IconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: IconComponent, selector: "ft-icon", inputs: { class: "class", collection: "collection", mode: "mode", name: "name", path: "path", size: "size", src: "src" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<svg *ngIf=\"!src; else imageTemplate\"><use attr.xlink:href=\"{{ url }}\" attr.href=\"{{ url }}\" /></svg>\n<ng-template #imageTemplate>\n <img [src]=\"src\" />\n</ng-template>", styles: [":host{line-height:0;display:inline-block}:host[size=\"1\"],:host.ft-icon--1{font-size:1rem}:host[size=\"2\"],:host.ft-icon--2{font-size:1.5rem}:host[size=\"3\"],:host.ft-icon--3{font-size:2rem}:host[size=\"4\"],:host.ft-icon--4{font-size:3rem}:host[size=\"5\"],:host.ft-icon--5{font-size:4.5rem}:host[size=\"6\"],:host.ft-icon--6{font-size:8rem}:host[size=\"7\"],:host.ft-icon--7{font-size:16rem}:host[size=\"8\"],:host.ft-icon--8{font-size:32rem}svg{width:1em;height:1em;vertical-align:middle;fill:currentColor}img{height:1em;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: IconComponent, decorators: [{
74
+ type: Component,
75
+ args: [{ selector: 'ft-icon', template: "<svg *ngIf=\"!src; else imageTemplate\"><use attr.xlink:href=\"{{ url }}\" attr.href=\"{{ url }}\" /></svg>\n<ng-template #imageTemplate>\n <img [src]=\"src\" />\n</ng-template>", styles: [":host{line-height:0;display:inline-block}:host[size=\"1\"],:host.ft-icon--1{font-size:1rem}:host[size=\"2\"],:host.ft-icon--2{font-size:1.5rem}:host[size=\"3\"],:host.ft-icon--3{font-size:2rem}:host[size=\"4\"],:host.ft-icon--4{font-size:3rem}:host[size=\"5\"],:host.ft-icon--5{font-size:4.5rem}:host[size=\"6\"],:host.ft-icon--6{font-size:8rem}:host[size=\"7\"],:host.ft-icon--7{font-size:16rem}:host[size=\"8\"],:host.ft-icon--8{font-size:32rem}svg{width:1em;height:1em;vertical-align:middle;fill:currentColor}img{height:1em;vertical-align:middle}\n"] }]
76
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
77
+ type: Inject,
78
+ args: ['FactorUiConfiguration']
79
+ }] }]; }, propDecorators: { class: [{
80
+ type: Input
81
+ }], collection: [{
82
+ type: Input
83
+ }], mode: [{
84
+ type: Input
85
+ }], name: [{
86
+ type: Input
87
+ }], path: [{
88
+ type: Input
89
+ }], size: [{
90
+ type: Input
91
+ }], src: [{
92
+ type: Input
93
+ }], hostClasses: [{
94
+ type: HostBinding,
95
+ args: ['class']
96
+ }] } });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2Rpc3BsYXkvaWNvbi9pY29uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZGlzcGxheS9pY29uL2ljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBUTlFLE1BQU0sT0FBTyxhQUFhO0lBd0N4QixZQUMyQyxhQUE4QjtRQUE5QixrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFuQ3pFLFVBQUssR0FBVyxFQUFFLENBQUM7SUFvQ2YsQ0FBQztJQW5DTCxJQUNJLFVBQVUsQ0FBQyxVQUFrQjtRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQ0ksSUFBSSxDQUFDLElBQTJCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0QsSUFDSSxJQUFJLENBQUMsSUFBWTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQ0ksSUFBSSxDQUFDLElBQVk7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFNRCxJQUNJLFdBQVc7UUFDYixPQUFPO1lBQ0wsU0FBUztZQUNULElBQUksQ0FBQyxLQUFLO1NBQ1gsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBTUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ08sTUFBTTtRQUNaLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDdkQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7YUFDNUI7U0FDRjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQzNDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO2FBQ3pCO1NBQ0Y7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1lBQzdCLCtCQUErQjtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDM0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQzNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO2lCQUN2QjthQUNGO1lBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFJLElBQUksQ0FBQyxLQUFNLElBQUssSUFBSSxDQUFDLFdBQVksUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdEU7YUFBTTtZQUNMLDZCQUE2QjtZQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2xILElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7OzBHQTlFVSxhQUFhLGtCQXlDZCx1QkFBdUI7OEZBekN0QixhQUFhLGdPQ1IxQixvTEFHYzsyRkRLRCxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFNBQVM7OzBCQTZDaEIsTUFBTTsyQkFBQyx1QkFBdUI7NENBbkNqQyxLQUFLO3NCQURKLEtBQUs7Z0JBR0YsVUFBVTtzQkFEYixLQUFLO2dCQU1GLElBQUk7c0JBRFAsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLO2dCQU1OLElBQUk7c0JBREgsS0FBSztnQkFHTixHQUFHO3NCQURGLEtBQUs7Z0JBSUYsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEluamVjdCwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVpQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy91aS1jb25maWd1cmF0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnQtaWNvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pY29uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaWNvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBfY29sbGVjdGlvbiE6IHN0cmluZztcbiAgX25hbWUhOiBzdHJpbmc7XG4gIF9tb2RlITogJ2lubGluZScgfCAnZXh0ZXJuYWwnO1xuICBfcGF0aCE6IHN0cmluZztcbiAgQElucHV0KClcbiAgY2xhc3M6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKVxuICBzZXQgY29sbGVjdGlvbihjb2xsZWN0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtb2RlKG1vZGU6ICdpbmxpbmUnIHwgJ2V4dGVybmFsJykge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfSBcbiAgQElucHV0KClcbiAgc2V0IHBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGF0aCA9IHBhdGg7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzaXplITogc3RyaW5nO1xuICBASW5wdXQoKVxuICBzcmMhOiBzdHJpbmc7XG4gIHVybCE6IHN0cmluZztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAnZnQtaWNvbicsXG4gICAgICB0aGlzLmNsYXNzXG4gICAgXS5qb2luKCcgJyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdGYWN0b3JVaUNvbmZpZ3VyYXRpb24nKSBwcml2YXRlIGNvbmZpZ3VyYXRpb246IFVpQ29uZmlndXJhdGlvblxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGUoKSB7XG4gICAgLy8gU2V0IHRoZSBkZWZhdWx0IGNvbGxlY3Rpb24gaWYgdGhlIG1vZGUgaXMgZXh0ZXJuYWxcbiAgICBpZiAoIXRoaXMuX2NvbGxlY3Rpb24pIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaWNvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uaWNvbi5jb2xsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24uaWNvbi5jb2xsZWN0aW9uO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9tb2RlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb24gPSAnaWNvbnMnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX21vZGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaWNvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uaWNvbi5tb2RlKSB7XG4gICAgICAgIHRoaXMuX21vZGUgPSB0aGlzLmNvbmZpZ3VyYXRpb24uaWNvbi5tb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9kZSA9ICdleHRlcm5hbCc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9tb2RlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICAvLyBJZiB0aGUgaWNvbiBtb2RlIGlzIGV4dGVybmFsXG4gICAgICBpZiAoIXRoaXMuX3BhdGgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pY29uICYmIHRoaXMuY29uZmlndXJhdGlvbi5pY29uLnBhdGgpIHtcbiAgICAgICAgICB0aGlzLl9wYXRoID0gdGhpcy5jb25maWd1cmF0aW9uLmljb24ucGF0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wYXRoID0gJ2Fzc2V0cyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXJsID0gYCR7IHRoaXMuX3BhdGggfS8keyB0aGlzLl9jb2xsZWN0aW9uIH0uc3ZnIyR7dGhpcy5fbmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgaWNvbiBtb2RlIGlzIGlubGluZVxuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX2NvbGxlY3Rpb24gJiYgdGhpcy5fY29sbGVjdGlvbiAhPT0gJ3Vuc2V0JyA/IGAke3RoaXMuX2NvbGxlY3Rpb259LS0ke3RoaXMuX25hbWV9YCA6IHRoaXMuX25hbWU7XG4gICAgICB0aGlzLnVybCA9IGAjJHtuYW1lfWA7XG4gICAgfVxuICB9XG59XG4iLCI8c3ZnICpuZ0lmPVwiIXNyYzsgZWxzZSBpbWFnZVRlbXBsYXRlXCI+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ7eyB1cmwgfX1cIiBhdHRyLmhyZWY9XCJ7eyB1cmwgfX1cIiAvPjwvc3ZnPlxuPG5nLXRlbXBsYXRlICNpbWFnZVRlbXBsYXRlPlxuICA8aW1nIFtzcmNdPVwic3JjXCIgLz5cbjwvbmctdGVtcGxhdGU+Il19
@@ -0,0 +1,80 @@
1
+ import { Component, Input, HostBinding } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "../icon/icon.component";
5
+ export class ImageComponent {
6
+ constructor(element) {
7
+ this.element = element;
8
+ this.class = '';
9
+ this.loading = false;
10
+ this.shown = false;
11
+ }
12
+ ngOnInit() {
13
+ if ("IntersectionObserver" in window) {
14
+ let elementObserver = new IntersectionObserver((entries, observer) => {
15
+ entries.forEach((entry) => {
16
+ if (entry.isIntersecting) {
17
+ let image = new Image();
18
+ image.src = this.src;
19
+ setTimeout(() => {
20
+ if (!this.shown && !this.error) {
21
+ this.loading = true;
22
+ }
23
+ }, 100);
24
+ image.onerror = () => {
25
+ this.error = true;
26
+ this.loading = false;
27
+ };
28
+ image.onload = () => {
29
+ if ("decode" in image) {
30
+ image.decode().then(() => {
31
+ this.loading = false;
32
+ this.shown = true;
33
+ });
34
+ }
35
+ else {
36
+ this.loading = false;
37
+ this.shown = true;
38
+ }
39
+ };
40
+ elementObserver.unobserve(this.element.nativeElement);
41
+ }
42
+ });
43
+ }, {
44
+ rootMargin: "0px 0px 200px 0px"
45
+ });
46
+ elementObserver.observe(this.element.nativeElement);
47
+ }
48
+ else {
49
+ console.error('IntersectionObserver not available.');
50
+ this.loading = false;
51
+ this.shown = true;
52
+ }
53
+ }
54
+ get hostClasses() {
55
+ return [
56
+ 'ft-image',
57
+ this.class
58
+ ].join(' ');
59
+ }
60
+ }
61
+ ImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ImageComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
62
+ ImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: ImageComponent, selector: "ft-image", inputs: { class: "class", src: "src" }, host: { properties: { "class.ft-image--error": "this.error", "class.ft-image--loading": "this.loading", "class": "this.hostClasses" } }, ngImport: i0, template: "<img *ngIf=\"shown\" [src]=\"src\" />\n<ft-icon name=\"warning\" size=\"2\" *ngIf=\"error\"></ft-icon>\n", styles: [":host{display:inline-block;overflow:hidden;display:flex;align-items:center;justify-content:center}:host.ft-image--loading{background-color:#00000008;position:relative;overflow:hidden}:host.ft-image--loading:after{content:\"\";display:block;background-color:#00000005;position:absolute;top:0;bottom:0;width:100%;height:100%;transform:translate(0);animation:1.5s placeholder-loading ease-in-out infinite}:host.ft-image--error{background-color:#ff000008}:host.ft-image--error ft-icon{color:var(--danger)}img{position:relative;z-index:1;max-width:100%;max-height:100%;animation:fade-in .3s}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes placeholder-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "ft-icon", inputs: ["class", "collection", "mode", "name", "path", "size", "src"] }] });
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ImageComponent, decorators: [{
64
+ type: Component,
65
+ args: [{ selector: 'ft-image', template: "<img *ngIf=\"shown\" [src]=\"src\" />\n<ft-icon name=\"warning\" size=\"2\" *ngIf=\"error\"></ft-icon>\n", styles: [":host{display:inline-block;overflow:hidden;display:flex;align-items:center;justify-content:center}:host.ft-image--loading{background-color:#00000008;position:relative;overflow:hidden}:host.ft-image--loading:after{content:\"\";display:block;background-color:#00000005;position:absolute;top:0;bottom:0;width:100%;height:100%;transform:translate(0);animation:1.5s placeholder-loading ease-in-out infinite}:host.ft-image--error{background-color:#ff000008}:host.ft-image--error ft-icon{color:var(--danger)}img{position:relative;z-index:1;max-width:100%;max-height:100%;animation:fade-in .3s}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes placeholder-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"] }]
66
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { class: [{
67
+ type: Input
68
+ }], error: [{
69
+ type: HostBinding,
70
+ args: ['class.ft-image--error']
71
+ }], loading: [{
72
+ type: HostBinding,
73
+ args: ['class.ft-image--loading']
74
+ }], src: [{
75
+ type: Input
76
+ }], hostClasses: [{
77
+ type: HostBinding,
78
+ args: ['class']
79
+ }] } });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9kaXNwbGF5L2ltYWdlL2ltYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZGlzcGxheS9pbWFnZS9pbWFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxXQUFXLEVBQWMsTUFBTSxlQUFlLENBQUM7Ozs7QUFPbEYsTUFBTSxPQUFPLGNBQWM7SUFXekIsWUFDVSxPQUFtQjtRQUFuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBVjdCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFJbkIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUd6QixVQUFLLEdBQVksS0FBSyxDQUFDO0lBSW5CLENBQUM7SUFFTCxRQUFRO1FBQ04sSUFBSSxzQkFBc0IsSUFBSSxNQUFNLEVBQUU7WUFDcEMsSUFBSSxlQUFlLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDbkUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN4QixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7d0JBQ3hCLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7d0JBQ3hCLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzt3QkFDckIsVUFBVSxDQUFDLEdBQUcsRUFBRTs0QkFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0NBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzZCQUNyQjt3QkFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ1IsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7NEJBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOzRCQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDdkIsQ0FBQyxDQUFDO3dCQUNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFOzRCQUNsQixJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUU7Z0NBQ3JCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29DQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQ0FDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0NBQ3BCLENBQUMsQ0FBQyxDQUFDOzZCQUNKO2lDQUFNO2dDQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dDQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs2QkFDbkI7d0JBQ0gsQ0FBQyxDQUFDO3dCQUNGLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFDdkQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLEVBQUU7Z0JBQ0QsVUFBVSxFQUFFLG1CQUFtQjthQUNoQyxDQUFDLENBQUM7WUFDSCxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNuQjtJQUNILENBQUM7SUFDRCxJQUNJLFdBQVc7UUFDYixPQUFPO1lBQ0wsVUFBVTtZQUNWLElBQUksQ0FBQyxLQUFLO1NBQ1gsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDOzsyR0E3RFUsY0FBYzsrRkFBZCxjQUFjLGlPQ1AzQiwwR0FFQTsyRkRLYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFVBQVU7aUdBTXBCLEtBQUs7c0JBREosS0FBSztnQkFHTixLQUFLO3NCQURKLFdBQVc7dUJBQUMsdUJBQXVCO2dCQUdwQyxPQUFPO3NCQUROLFdBQVc7dUJBQUMseUJBQXlCO2dCQUd0QyxHQUFHO3NCQURGLEtBQUs7Z0JBaURGLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBIb3N0QmluZGluZywgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmdC1pbWFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBjbGFzczogc3RyaW5nID0gJyc7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZnQtaW1hZ2UtLWVycm9yJylcbiAgZXJyb3IhOiBib29sZWFuO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZ0LWltYWdlLS1sb2FkaW5nJylcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBzcmMhOiBzdHJpbmc7XG4gIHNob3duOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKFwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcIiBpbiB3aW5kb3cpIHtcbiAgICAgIGxldCBlbGVtZW50T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XG4gICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdGhpcy5zcmM7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3duICYmICF0aGlzLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChcImRlY29kZVwiIGluIGltYWdlKSB7XG4gICAgICAgICAgICAgICAgaW1hZ2UuZGVjb2RlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd24gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWxlbWVudE9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIHtcbiAgICAgICAgcm9vdE1hcmdpbjogXCIwcHggMHB4IDIwMHB4IDBweFwiXG4gICAgICB9KTtcbiAgICAgIGVsZW1lbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbm90IGF2YWlsYWJsZS4nKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93biA9IHRydWU7XG4gICAgfVxuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2Z0LWltYWdlJyxcbiAgICAgIHRoaXMuY2xhc3NcbiAgICBdLmpvaW4oJyAnKTtcbiAgfVxuXG59XG4iLCI8aW1nICpuZ0lmPVwic2hvd25cIiBbc3JjXT1cInNyY1wiIC8+XG48ZnQtaWNvbiBuYW1lPVwid2FybmluZ1wiIHNpemU9XCIyXCIgKm5nSWY9XCJlcnJvclwiPjwvZnQtaWNvbj5cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { Component, EventEmitter, Inject, Output } from '@angular/core';
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/material/button";
6
+ import * as i3 from "@angular/material/dialog";
7
+ import * as i4 from "../icon/icon.component";
8
+ export class MessageComponent {
9
+ constructor(data) {
10
+ this.data = data;
11
+ this.beforeSelect = new EventEmitter();
12
+ }
13
+ ngOnInit() {
14
+ }
15
+ select(value) {
16
+ this.beforeSelect.emit(value);
17
+ }
18
+ }
19
+ MessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: MessageComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
20
+ MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: MessageComponent, selector: "ft-message", outputs: { beforeSelect: "beforeSelect" }, ngImport: i0, template: "<h1 mat-dialog-title class=\"ft-message__title\" *ngIf=\"data.options?.title\">\n <ft-icon *ngIf=\"data.options?.titleIcon\" [name]=\"data.options?.titleIcon?.name\"\n [collection]=\"data.options?.titleIcon?.collection\" [ngClass]=\"data.options?.titleIcon?.class\"\n [size]=\"data.options?.titleIcon?.size || 2\"></ft-icon>\n <div>{{ data.options?.title }}</div>\n </h1>\n <div mat-dialog-content class=\"ft-message__content\" [ngClass]=\"data.options?.class\">\n <ft-icon *ngIf=\"data.options?.icon\" [name]=\"data.options?.icon?.name\" [collection]=\"data.options?.icon?.collection\"\n [ngClass]=\"data.options?.icon?.class\" [size]=\"data.options?.icon?.size || 2\"></ft-icon>\n <ng-container [ngSwitch]=\"data.message?.type\">\n <div *ngSwitchCase=\"'html'\" [innerHTML]=\"data.message?.content\"></div>\n <ng-container *ngSwitchDefault>{{ data.message?.content }}</ng-container>\n </ng-container>\n </div>\n <div mat-dialog-actions class=\"ft-message__actions\" *ngIf=\"data.options.actionsVisible\">\n <ng-container *ngIf=\"data.options?.actions?.length > 0; else acceptTemplate\">\n <ng-container *ngFor=\"let action of data.options?.actions; let i = index\">\n <ng-container [ngSwitch]=\"action.type\">\n <button type=\"button\" *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchDefault mat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\">{{ action.label }}</button>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <ng-template #acceptTemplate>\n <button type=\"button\" mat-stroked-button color=\"primary\" autofocus (click)=\"select('-1')\" i18n>Accept</button>\n </ng-template>", styles: [".mat-dialog-title{display:flex;align-items:center}.mat-dialog-title ft-icon{margin-right:.5rem}.mat-dialog-content{display:flex;align-items:center;margin-bottom:.5rem}.mat-dialog-content ft-icon{margin-right:.5rem}.mat-dialog-actions{display:flex;align-items:center;justify-content:flex-end;padding-bottom:1.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i4.IconComponent, selector: "ft-icon", inputs: ["class", "collection", "mode", "name", "path", "size", "src"] }] });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: MessageComponent, decorators: [{
22
+ type: Component,
23
+ args: [{ selector: 'ft-message', template: "<h1 mat-dialog-title class=\"ft-message__title\" *ngIf=\"data.options?.title\">\n <ft-icon *ngIf=\"data.options?.titleIcon\" [name]=\"data.options?.titleIcon?.name\"\n [collection]=\"data.options?.titleIcon?.collection\" [ngClass]=\"data.options?.titleIcon?.class\"\n [size]=\"data.options?.titleIcon?.size || 2\"></ft-icon>\n <div>{{ data.options?.title }}</div>\n </h1>\n <div mat-dialog-content class=\"ft-message__content\" [ngClass]=\"data.options?.class\">\n <ft-icon *ngIf=\"data.options?.icon\" [name]=\"data.options?.icon?.name\" [collection]=\"data.options?.icon?.collection\"\n [ngClass]=\"data.options?.icon?.class\" [size]=\"data.options?.icon?.size || 2\"></ft-icon>\n <ng-container [ngSwitch]=\"data.message?.type\">\n <div *ngSwitchCase=\"'html'\" [innerHTML]=\"data.message?.content\"></div>\n <ng-container *ngSwitchDefault>{{ data.message?.content }}</ng-container>\n </ng-container>\n </div>\n <div mat-dialog-actions class=\"ft-message__actions\" *ngIf=\"data.options.actionsVisible\">\n <ng-container *ngIf=\"data.options?.actions?.length > 0; else acceptTemplate\">\n <ng-container *ngFor=\"let action of data.options?.actions; let i = index\">\n <ng-container [ngSwitch]=\"action.type\">\n <button type=\"button\" *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchDefault mat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\">{{ action.label }}</button>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <ng-template #acceptTemplate>\n <button type=\"button\" mat-stroked-button color=\"primary\" autofocus (click)=\"select('-1')\" i18n>Accept</button>\n </ng-template>", styles: [".mat-dialog-title{display:flex;align-items:center}.mat-dialog-title ft-icon{margin-right:.5rem}.mat-dialog-content{display:flex;align-items:center;margin-bottom:.5rem}.mat-dialog-content ft-icon{margin-right:.5rem}.mat-dialog-actions{display:flex;align-items:center;justify-content:flex-end;padding-bottom:1.5rem}\n"] }]
24
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
25
+ type: Inject,
26
+ args: [MAT_DIALOG_DATA]
27
+ }] }]; }, propDecorators: { beforeSelect: [{
28
+ type: Output
29
+ }] } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2Rpc3BsYXkvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZGlzcGxheS9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQU8zRCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQ2tDLElBQVM7UUFBVCxTQUFJLEdBQUosSUFBSSxDQUFLO1FBSDNDLGlCQUFZLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFJakQsQ0FBQztJQUVMLFFBQVE7SUFDUixDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7NkdBWlUsZ0JBQWdCLGtCQUtqQixlQUFlO2lHQUxkLGdCQUFnQiw2RkNSN0IsbXZFQWdDZ0I7MkZEeEJILGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxZQUFZOzswQkFTbkIsTUFBTTsyQkFBQyxlQUFlOzRDQUh6QixZQUFZO3NCQURYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnQtbWVzc2FnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVzc2FnZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAT3V0cHV0KClcbiAgYmVmb3JlU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG4gIHNlbGVjdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5iZWZvcmVTZWxlY3QuZW1pdCh2YWx1ZSk7XG4gIH1cblxuXG59XG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZSBjbGFzcz1cImZ0LW1lc3NhZ2VfX3RpdGxlXCIgKm5nSWY9XCJkYXRhLm9wdGlvbnM/LnRpdGxlXCI+XG4gICAgPGZ0LWljb24gKm5nSWY9XCJkYXRhLm9wdGlvbnM/LnRpdGxlSWNvblwiIFtuYW1lXT1cImRhdGEub3B0aW9ucz8udGl0bGVJY29uPy5uYW1lXCJcbiAgICAgIFtjb2xsZWN0aW9uXT1cImRhdGEub3B0aW9ucz8udGl0bGVJY29uPy5jb2xsZWN0aW9uXCIgW25nQ2xhc3NdPVwiZGF0YS5vcHRpb25zPy50aXRsZUljb24/LmNsYXNzXCJcbiAgICAgIFtzaXplXT1cImRhdGEub3B0aW9ucz8udGl0bGVJY29uPy5zaXplIHx8IDJcIj48L2Z0LWljb24+XG4gICAgPGRpdj57eyBkYXRhLm9wdGlvbnM/LnRpdGxlIH19PC9kaXY+XG4gIDwvaDE+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwiZnQtbWVzc2FnZV9fY29udGVudFwiIFtuZ0NsYXNzXT1cImRhdGEub3B0aW9ucz8uY2xhc3NcIj5cbiAgICA8ZnQtaWNvbiAqbmdJZj1cImRhdGEub3B0aW9ucz8uaWNvblwiIFtuYW1lXT1cImRhdGEub3B0aW9ucz8uaWNvbj8ubmFtZVwiIFtjb2xsZWN0aW9uXT1cImRhdGEub3B0aW9ucz8uaWNvbj8uY29sbGVjdGlvblwiXG4gICAgICBbbmdDbGFzc109XCJkYXRhLm9wdGlvbnM/Lmljb24/LmNsYXNzXCIgW3NpemVdPVwiZGF0YS5vcHRpb25zPy5pY29uPy5zaXplIHx8IDJcIj48L2Z0LWljb24+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZGF0YS5tZXNzYWdlPy50eXBlXCI+XG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIiBbaW5uZXJIVE1MXT1cImRhdGEubWVzc2FnZT8uY29udGVudFwiPjwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0Pnt7IGRhdGEubWVzc2FnZT8uY29udGVudCB9fTwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgY2xhc3M9XCJmdC1tZXNzYWdlX19hY3Rpb25zXCIgKm5nSWY9XCJkYXRhLm9wdGlvbnMuYWN0aW9uc1Zpc2libGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5vcHRpb25zPy5hY3Rpb25zPy5sZW5ndGggPiAwOyBlbHNlIGFjY2VwdFRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZGF0YS5vcHRpb25zPy5hY3Rpb25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImFjdGlvbi50eXBlXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nU3dpdGNoQ2FzZT1cIidyYWlzZWQnXCIgbWF0LXJhaXNlZC1idXR0b24gW2NvbG9yXT1cImFjdGlvbi5tZXRhZGF0YT8uY29sb3JcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChhY3Rpb24udmFsdWUpXCIgYXV0b2ZvY3VzPnt7IGFjdGlvbi5sYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ1N3aXRjaENhc2U9XCInZmxhdCdcIiBtYXQtZmxhdC1idXR0b24gW2NvbG9yXT1cImFjdGlvbi5tZXRhZGF0YT8uY29sb3JcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChhY3Rpb24udmFsdWUpXCIgYXV0b2ZvY3VzPnt7IGFjdGlvbi5sYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ1N3aXRjaENhc2U9XCInc3Ryb2tlZCdcIiBtYXQtc3Ryb2tlZC1idXR0b24gW2NvbG9yXT1cImFjdGlvbi5tZXRhZGF0YT8uY29sb3JcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChhY3Rpb24udmFsdWUpXCIgYXV0b2ZvY3VzPnt7IGFjdGlvbi5sYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ1N3aXRjaERlZmF1bHQgbWF0LWJ1dHRvbiBbY29sb3JdPVwiYWN0aW9uLm1ldGFkYXRhPy5jb2xvclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0KGFjdGlvbi52YWx1ZSlcIj57eyBhY3Rpb24ubGFiZWwgfX08L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjYWNjZXB0VGVtcGxhdGU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGF1dG9mb2N1cyAoY2xpY2spPVwic2VsZWN0KCctMScpXCIgaTE4bj5BY2NlcHQ8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -0,0 +1,58 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ReplaySubject } from "rxjs";
3
+ import { MessageComponent } from './message/message.component';
4
+ import { ContentComponent } from './content/content.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/snack-bar";
7
+ import * as i2 from "@angular/material/dialog";
8
+ export class MessageService {
9
+ constructor(snackBar, dialog) {
10
+ this.snackBar = snackBar;
11
+ this.dialog = dialog;
12
+ }
13
+ show(message, options) {
14
+ let selectionSource = new ReplaySubject(undefined);
15
+ let selection = selectionSource.asObservable();
16
+ const defaults = {
17
+ type: 'notification',
18
+ duration: 2000,
19
+ actionsVisible: true
20
+ };
21
+ options = Object.assign(defaults, options);
22
+ const data = { message: typeof message === 'string' ? { content: message, type: 'text' } : message, options };
23
+ switch (options.type) {
24
+ default:
25
+ case 'notification':
26
+ this.snackBar.openFromComponent(ContentComponent, {
27
+ data,
28
+ panelClass: ['ft-message', 'ft-message--notification'],
29
+ duration: options.duration || 2000,
30
+ });
31
+ break;
32
+ case 'modal':
33
+ const dialogRef = this.dialog.open(MessageComponent, {
34
+ width: options.width || '350px',
35
+ data,
36
+ panelClass: ['ft-message', 'ft-message--modal'],
37
+ autoFocus: false,
38
+ disableClose: true
39
+ });
40
+ dialogRef.componentInstance.beforeSelect.subscribe(response => {
41
+ selectionSource.next(response);
42
+ dialogRef.close();
43
+ });
44
+ this.snackBar.dismiss();
45
+ break;
46
+ }
47
+ return selection;
48
+ }
49
+ }
50
+ MessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: MessageService, deps: [{ token: i1.MatSnackBar }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
51
+ MessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: MessageService, providedIn: 'root' });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: MessageService, decorators: [{
53
+ type: Injectable,
54
+ args: [{
55
+ providedIn: 'root'
56
+ }]
57
+ }], ctorParameters: function () { return [{ type: i1.MatSnackBar }, { type: i2.MatDialog }]; } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9kaXNwbGF5L21lc3NhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFJakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFNL0QsTUFBTSxPQUFPLGNBQWM7SUFHekIsWUFDVSxRQUFxQixFQUNyQixNQUFpQjtRQURqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVc7SUFDdkIsQ0FBQztJQUVMLElBQUksQ0FBQyxPQUF5QixFQUFFLE9BQXdCO1FBQ3RELElBQUksZUFBZSxHQUEwQixJQUFJLGFBQWEsQ0FBUyxTQUFTLENBQUMsQ0FBQztRQUNsRixJQUFJLFNBQVMsR0FBdUIsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUFtQjtZQUMvQixJQUFJLEVBQUUsY0FBYztZQUNwQixRQUFRLEVBQUUsSUFBSTtZQUNkLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7UUFDRixPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUcsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3BCLFFBQVE7WUFDUixLQUFLLGNBQWM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2hELElBQUk7b0JBQ0osVUFBVSxFQUFFLENBQUMsWUFBWSxFQUFFLDBCQUEwQixDQUFDO29CQUN0RCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJO2lCQUNuQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDbkQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTztvQkFDL0IsSUFBSTtvQkFDSixVQUFVLEVBQUUsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUM7b0JBQy9DLFNBQVMsRUFBRSxLQUFLO29CQUNoQixZQUFZLEVBQUUsSUFBSTtpQkFDbkIsQ0FBQyxDQUFDO2dCQUNILFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUM1RCxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU07U0FDVDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7OzJHQTNDVSxjQUFjOytHQUFkLGNBQWMsY0FGYixNQUFNOzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRlbnQgfSBmcm9tICcuLi9tb2RlbHMvY29udGVudCc7XG5pbXBvcnQgeyBDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IE1lc3NhZ2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL21lc3NhZ2Utb3B0aW9ucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VTZXJ2aWNlIHtcbiAgZWxlbWVudDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2dcbiAgKSB7IH1cblxuICBzaG93KG1lc3NhZ2U6IHN0cmluZyB8IENvbnRlbnQsIG9wdGlvbnM/OiBNZXNzYWdlT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHNlbGVjdGlvblNvdXJjZTogUmVwbGF5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICAgIGxldCBzZWxlY3Rpb246IE9ic2VydmFibGU8c3RyaW5nPiA9IHNlbGVjdGlvblNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICBjb25zdCBkZWZhdWx0czogTWVzc2FnZU9wdGlvbnMgPSB7XG4gICAgICB0eXBlOiAnbm90aWZpY2F0aW9uJyxcbiAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgYWN0aW9uc1Zpc2libGU6IHRydWVcbiAgICB9O1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICBjb25zdCBkYXRhID0geyBtZXNzYWdlOiB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgPyB7IGNvbnRlbnQ6IG1lc3NhZ2UsIHR5cGU6ICd0ZXh0JyB9IDogbWVzc2FnZSwgb3B0aW9ucyB9O1xuICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnbm90aWZpY2F0aW9uJzpcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChDb250ZW50Q29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ2Z0LW1lc3NhZ2UnLCAnZnQtbWVzc2FnZS0tbm90aWZpY2F0aW9uJ10sXG4gICAgICAgICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24gfHwgMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9kYWwnOlxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogb3B0aW9ucy53aWR0aCB8fCAnMzUwcHgnLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydmdC1tZXNzYWdlJywgJ2Z0LW1lc3NhZ2UtLW1vZGFsJ10sXG4gICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5iZWZvcmVTZWxlY3Quc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBzZWxlY3Rpb25Tb3VyY2UubmV4dChyZXNwb25zZSk7XG4gICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLmRpc21pc3MoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb247XG4gIH1cbn0iXX0=
@@ -0,0 +1,43 @@
1
+ import { Directive, EventEmitter, Output, Input, Inject, PLATFORM_ID } from '@angular/core';
2
+ import { isPlatformBrowser } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ export class ObserveIntersectingDirective {
5
+ constructor(element, platformId) {
6
+ this.element = element;
7
+ this.platformId = platformId;
8
+ this.event = new EventEmitter();
9
+ }
10
+ ngOnInit() {
11
+ if (isPlatformBrowser(this.platformId)) {
12
+ if ("IntersectionObserver" in window) {
13
+ const elementObserver = new IntersectionObserver((entries, observer) => {
14
+ entries.forEach((entry) => {
15
+ this.event.emit(entry.isIntersecting);
16
+ });
17
+ }, this.options);
18
+ elementObserver.observe(this.element.nativeElement);
19
+ }
20
+ else {
21
+ console.error('ftObserveIntersecting not available in this browser.');
22
+ }
23
+ }
24
+ }
25
+ }
26
+ ObserveIntersectingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ObserveIntersectingDirective, deps: [{ token: i0.ElementRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive });
27
+ ObserveIntersectingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0", type: ObserveIntersectingDirective, selector: "[ftObserveIntersecting]", inputs: { options: ["ftObserveIntersectingOptions", "options"] }, outputs: { event: "ftObserveIntersecting" }, ngImport: i0 });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ObserveIntersectingDirective, decorators: [{
29
+ type: Directive,
30
+ args: [{
31
+ selector: '[ftObserveIntersecting]'
32
+ }]
33
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Object, decorators: [{
34
+ type: Inject,
35
+ args: [PLATFORM_ID]
36
+ }] }]; }, propDecorators: { options: [{
37
+ type: Input,
38
+ args: ['ftObserveIntersectingOptions']
39
+ }], event: [{
40
+ type: Output,
41
+ args: ['ftObserveIntersecting']
42
+ }] } });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1pbnRlcnNlY3RpbmcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9kaXNwbGF5L29ic2VydmUtaW50ZXJzZWN0aW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFjLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBTXBELE1BQU0sT0FBTyw0QkFBNEI7SUFNdkMsWUFDVSxPQUFtQixFQUNFLFVBQWtCO1FBRHZDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDRSxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBSmpELFVBQUssR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUs5QyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDLElBQUksc0JBQXNCLElBQUksTUFBTSxFQUFFO2dCQUNwQyxNQUFNLGVBQWUsR0FBRyxJQUFJLG9CQUFvQixDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUNyRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDeEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQzthQUN2RTtTQUNGO0lBQ0gsQ0FBQzs7eUhBeEJVLDRCQUE0Qiw0Q0FRN0IsV0FBVzs2R0FSViw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFIeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUseUJBQXlCO2lCQUNwQzttRkFTNEMsTUFBTTswQkFBOUMsTUFBTTsyQkFBQyxXQUFXOzRDQU5yQixPQUFPO3NCQUROLEtBQUs7dUJBQUMsOEJBQThCO2dCQUdyQyxLQUFLO3NCQURKLE1BQU07dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0LCBJbnB1dCwgRWxlbWVudFJlZiwgSW5qZWN0LCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueTtcbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmdE9ic2VydmVJbnRlcnNlY3RpbmddJ1xufSlcbmV4cG9ydCBjbGFzcyBPYnNlcnZlSW50ZXJzZWN0aW5nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdmdE9ic2VydmVJbnRlcnNlY3RpbmdPcHRpb25zJylcbiAgb3B0aW9ucyE6IHsgcm9vdDogYW55LCByb290TWFyZ2luOiBhbnksIHRocmVzaG9sZDogYW55IH07XG4gIEBPdXRwdXQoJ2Z0T2JzZXJ2ZUludGVyc2VjdGluZycpXG4gIGV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0XG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIGlmIChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIgaW4gd2luZG93KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50LmVtaXQoZW50cnkuaXNJbnRlcnNlY3RpbmcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBlbGVtZW50T2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdmdE9ic2VydmVJbnRlcnNlY3Rpbmcgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGJyb3dzZXIuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==