@firestitch/app-message 18.0.20 → 18.0.22

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.
@@ -11,6 +11,7 @@ export declare class TemplateComponent implements OnInit {
11
11
  private _dialogRef;
12
12
  private _message;
13
13
  private _dialog;
14
+ private _cdRef;
14
15
  ngOnInit(): void;
15
16
  openPreview(): void;
16
17
  save: (event: SubmitEvent) => import("rxjs").Observable<any>;
@@ -1,4 +1,4 @@
1
- import { Component, inject } from '@angular/core';
1
+ import { ChangeDetectorRef, Component, inject } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
3
  import { CdkScrollable } from '@angular/cdk/scrolling';
4
4
  import { MatButton } from '@angular/material/button';
@@ -23,7 +23,7 @@ import * as i4 from "@firestitch/dialog";
23
23
  import * as i5 from "@firestitch/label";
24
24
  import * as i6 from "@firestitch/text-editor";
25
25
  export class TemplateComponent {
26
- messageTemplate;
26
+ messageTemplate = null;
27
27
  htmlEditorconfig = {
28
28
  language: 'html',
29
29
  insertSpaces: true,
@@ -39,11 +39,13 @@ export class TemplateComponent {
39
39
  _dialogRef = inject(MatDialogRef);
40
40
  _message = inject(FsMessage);
41
41
  _dialog = inject(MatDialog);
42
+ _cdRef = inject(ChangeDetectorRef);
42
43
  ngOnInit() {
43
- if (this._data.messageTemplate.id) {
44
+ if (this._data.messageTemplate?.id) {
44
45
  this._config.loadMessageTemplate(this._data.messageTemplate)
45
46
  .subscribe((messageTemplate) => {
46
47
  this.messageTemplate = messageTemplate;
48
+ this._cdRef.markForCheck();
47
49
  });
48
50
  }
49
51
  else {
@@ -75,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
75
77
  type: Component,
76
78
  args: [{ standalone: true, imports: [FsSkeletonModule, FormsModule, FsFormModule, FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, MatFormField, MatLabel, MatInput, MatTabGroup, MatTab, MatTabContent, FsLabelModule, FsTextEditorModule, MatDialogActions, MatButton, MatDialogClose], template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"messageTemplate\"\n [confirmTabs]=\"false\">\n @if (messageTemplate) {\n <fs-dialog>\n <div mat-dialog-title>\n Message Template\n </div>\n <mat-dialog-content>\n <div class=\"fs-column\">\n <mat-form-field class=\"name\">\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"messageTemplate.name\"\n required\n name=\"name\">\n </mat-form-field>\n <div [@.disabled]=\"true\">\n <mat-tab-group\n mat-align-tabs=\"start\"\n [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <div class=\"content\">\n <fs-label-field>\n <fs-text-editor\n [(ngModel)]=\"messageTemplate.content\"\n name=\"body\"\n [config]=\"htmlEditorconfig\">\n </fs-text-editor>\n <fs-label-message>\n &#123;$content&#125; will be replaced with the message content.\n </fs-label-message>\n </fs-label-field>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Styles\">\n <ng-template matTabContent>\n <div class=\"styles\">\n <fs-text-editor\n [(ngModel)]=\"messageTemplate.styles\"\n name=\"styles\"\n [config]=\"cssEditorconfig\">\n </fs-text-editor>\n </div>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n name=\"close\">\n Save\n </button>\n <button\n mat-button\n type=\"submit\"\n name=\"save-close\">\n Save & Close\n </button>\n <button\n mat-button\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n }\n</form>", styles: [".name{width:100%}:host ::ng-deep .mat-tab-body-content,:host ::ng-deep .mat-tab-body{overflow:visible}\n"] }]
77
79
  }] });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL2NvbXBvbmVudHMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL2NvbXBvbmVudHMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4SixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBZSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0s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Q0FHSSxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRUYWIsIE1hdFRhYkNvbnRlbnQsIE1hdFRhYkdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5cbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSwgU3VibWl0RXZlbnQgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcbmltcG9ydCB7IEZzTGFiZWxNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9sYWJlbCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9za2VsZXRvbic7XG5pbXBvcnQgeyBGc1RleHRFZGl0b3JDb25maWcsIEZzVGV4dEVkaXRvck1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3RleHQtZWRpdG9yJztcblxuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kdWxlcy9tZXNzYWdlLXByZXZpZXcvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtGc1NrZWxldG9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgRnNGb3JtTW9kdWxlLCBGc0RpYWxvZ01vZHVsZSwgTWF0RGlhbG9nVGl0bGUsIENka1Njcm9sbGFibGUsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwsIE1hdElucHV0LCBNYXRUYWJHcm91cCwgTWF0VGFiLCBNYXRUYWJDb250ZW50LCBGc0xhYmVsTW9kdWxlLCBGc1RleHRFZGl0b3JNb2R1bGUsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdEJ1dHRvbiwgTWF0RGlhbG9nQ2xvc2VdLFxufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIG1lc3NhZ2VUZW1wbGF0ZTsgICAgXG4gIHB1YmxpYyBodG1sRWRpdG9yY29uZmlnOiBGc1RleHRFZGl0b3JDb25maWcgPSB7XG4gICAgbGFuZ3VhZ2U6ICdodG1sJyxcbiAgICBpbnNlcnRTcGFjZXM6IHRydWUsXG4gICAgdGFiU2l6ZTogMixcbiAgfTtcbiAgcHVibGljIGNzc0VkaXRvcmNvbmZpZzogRnNUZXh0RWRpdG9yQ29uZmlnID0ge1xuICAgIGxhbmd1YWdlOiAnc2NzcycsXG4gICAgaW5zZXJ0U3BhY2VzOiB0cnVlLFxuICAgIHRhYlNpemU6IDIsXG4gIH07XG4gIFxuICBwcml2YXRlIF9kYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSk7XG4gIHByaXZhdGUgX2NvbmZpZyA9IGluamVjdDxGc0FwcE1lc3NhZ2VDb25maWc+KEZTX0FQUF9NRVNTQUdFX0NPTkZJRyk7XG4gIHByaXZhdGUgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8VGVtcGxhdGVDb21wb25lbnQ+PihNYXREaWFsb2dSZWYpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhLm1lc3NhZ2VUZW1wbGF0ZS5pZCkge1xuICAgICAgdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlVGVtcGxhdGUodGhpcy5fZGF0YS5tZXNzYWdlVGVtcGxhdGUpXG4gICAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2VUZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVRlbXBsYXRlID0gbWVzc2FnZVRlbXBsYXRlO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlVGVtcGxhdGUgPSB7fTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlblByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oUHJldmlld0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBzdHlsZXM6IHRoaXMubWVzc2FnZVRlbXBsYXRlLnN0eWxlcyxcbiAgICAgICAgaHRtbDogdGhpcy5tZXNzYWdlVGVtcGxhdGUuY29udGVudCxcbiAgICAgIH0sXG4gICAgICB3aWR0aDogJzk1JScsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSA9IChldmVudDogU3VibWl0RXZlbnQpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhdmVNZXNzYWdlVGVtcGxhdGUodGhpcy5tZXNzYWdlVGVtcGxhdGUpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChtZXNzYWdlVGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIENoYW5nZXMnKTtcbiAgICAgICAgICBpZiAoZXZlbnQuc3VibWl0dGVyID09PSAnc2F2ZS1jbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShtZXNzYWdlVGVtcGxhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApO1xuICB9O1xufVxuIiwiPGZvcm1cbiAgICBmc0Zvcm1cbiAgICBbc3VibWl0XT1cInNhdmVcIlxuICAgICNmb3JtPVwibmdGb3JtXCJcbiAgICAqZnNTa2VsZXRvbj1cIm1lc3NhZ2VUZW1wbGF0ZVwiXG4gICAgW2NvbmZpcm1UYWJzXT1cImZhbHNlXCI+XG4gIEBpZiAobWVzc2FnZVRlbXBsYXRlKSB7XG4gICAgPGZzLWRpYWxvZz5cbiAgICAgIDxkaXYgbWF0LWRpYWxvZy10aXRsZT5cbiAgICAgICAgTWVzc2FnZSBUZW1wbGF0ZVxuICAgICAgPC9kaXY+XG4gICAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgTmFtZVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlVGVtcGxhdGUubmFtZVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIG5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8ZGl2IFtALmRpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwXG4gICAgICAgICAgICAgICAgbWF0LWFsaWduLXRhYnM9XCJzdGFydFwiXG4gICAgICAgICAgICAgICAgW2R5bmFtaWNIZWlnaHRdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJDb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2VUZW1wbGF0ZS5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiaHRtbEVkaXRvcmNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsLW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAmIzEyMzskY29udGVudCYjMTI1OyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG1lc3NhZ2UgY29udGVudC5cbiAgICAgICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU3R5bGVzXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3R5bGVzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZVRlbXBsYXRlLnN0eWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN0eWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJjc3NFZGl0b3Jjb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIG5hbWU9XCJjbG9zZVwiPlxuICAgICAgICAgIFNhdmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgbmFtZT1cInNhdmUtY2xvc2VcIj5cbiAgICAgICAgICBTYXZlICYgQ2xvc2VcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuUHJldmlldygpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICBQcmV2aWV3XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2ZzLWRpYWxvZz5cbiAgfVxuPC9mb3JtPiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL2NvbXBvbmVudHMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL2NvbXBvbmVudHMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4SixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBZSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FB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QUFFLE1BQU0scUtBQUUsYUFBYSwyREFBRSxhQUFhLDhSQUFFLGtCQUFrQixnTEFBRSxnQkFBZ0IsNEhBQUUsU0FBUyxpTEFBRSxjQUFjOzsyRkFFalEsaUJBQWlCO2tCQU43QixTQUFTO2lDQUdJLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRUYWIsIE1hdFRhYkNvbnRlbnQsIE1hdFRhYkdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5cbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSwgU3VibWl0RXZlbnQgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcbmltcG9ydCB7IEZzTGFiZWxNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9sYWJlbCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9za2VsZXRvbic7XG5pbXBvcnQgeyBGc1RleHRFZGl0b3JDb25maWcsIEZzVGV4dEVkaXRvck1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3RleHQtZWRpdG9yJztcblxuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kdWxlcy9tZXNzYWdlLXByZXZpZXcvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtGc1NrZWxldG9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgRnNGb3JtTW9kdWxlLCBGc0RpYWxvZ01vZHVsZSwgTWF0RGlhbG9nVGl0bGUsIENka1Njcm9sbGFibGUsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwsIE1hdElucHV0LCBNYXRUYWJHcm91cCwgTWF0VGFiLCBNYXRUYWJDb250ZW50LCBGc0xhYmVsTW9kdWxlLCBGc1RleHRFZGl0b3JNb2R1bGUsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdEJ1dHRvbiwgTWF0RGlhbG9nQ2xvc2VdLFxufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIG1lc3NhZ2VUZW1wbGF0ZSA9IG51bGw7XG4gIHB1YmxpYyBodG1sRWRpdG9yY29uZmlnOiBGc1RleHRFZGl0b3JDb25maWcgPSB7XG4gICAgbGFuZ3VhZ2U6ICdodG1sJyxcbiAgICBpbnNlcnRTcGFjZXM6IHRydWUsXG4gICAgdGFiU2l6ZTogMixcbiAgfTtcbiAgcHVibGljIGNzc0VkaXRvcmNvbmZpZzogRnNUZXh0RWRpdG9yQ29uZmlnID0ge1xuICAgIGxhbmd1YWdlOiAnc2NzcycsXG4gICAgaW5zZXJ0U3BhY2VzOiB0cnVlLFxuICAgIHRhYlNpemU6IDIsXG4gIH07XG4gIFxuICBwcml2YXRlIF9kYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSk7XG4gIHByaXZhdGUgX2NvbmZpZyA9IGluamVjdDxGc0FwcE1lc3NhZ2VDb25maWc+KEZTX0FQUF9NRVNTQUdFX0NPTkZJRyk7XG4gIHByaXZhdGUgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8VGVtcGxhdGVDb21wb25lbnQ+PihNYXREaWFsb2dSZWYpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwcml2YXRlIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhLm1lc3NhZ2VUZW1wbGF0ZT8uaWQpIHtcbiAgICAgIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVRlbXBsYXRlKHRoaXMuX2RhdGEubWVzc2FnZVRlbXBsYXRlKVxuICAgICAgICAuc3Vic2NyaWJlKChtZXNzYWdlVGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VUZW1wbGF0ZSA9IG1lc3NhZ2VUZW1wbGF0ZTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZVRlbXBsYXRlID0ge307XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5QcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMuX2RpYWxvZy5vcGVuKFByZXZpZXdDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc3R5bGVzOiB0aGlzLm1lc3NhZ2VUZW1wbGF0ZS5zdHlsZXMsXG4gICAgICAgIGh0bWw6IHRoaXMubWVzc2FnZVRlbXBsYXRlLmNvbnRlbnQsXG4gICAgICB9LFxuICAgICAgd2lkdGg6ICc5NSUnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmUgPSAoZXZlbnQ6IFN1Ym1pdEV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYXZlTWVzc2FnZVRlbXBsYXRlKHRoaXMubWVzc2FnZVRlbXBsYXRlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgobWVzc2FnZVRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTYXZlZCBDaGFuZ2VzJyk7XG4gICAgICAgICAgaWYgKGV2ZW50LnN1Ym1pdHRlciA9PT0gJ3NhdmUtY2xvc2UnKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UobWVzc2FnZVRlbXBsYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfTtcbn1cbiIsIjxmb3JtXG4gICAgZnNGb3JtXG4gICAgW3N1Ym1pdF09XCJzYXZlXCJcbiAgICAjZm9ybT1cIm5nRm9ybVwiXG4gICAgKmZzU2tlbGV0b249XCJtZXNzYWdlVGVtcGxhdGVcIlxuICAgIFtjb25maXJtVGFic109XCJmYWxzZVwiPlxuICBAaWYgKG1lc3NhZ2VUZW1wbGF0ZSkge1xuICAgIDxmcy1kaWFsb2c+XG4gICAgICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+XG4gICAgICAgIE1lc3NhZ2UgVGVtcGxhdGVcbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtblwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIE5hbWVcbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZVRlbXBsYXRlLm5hbWVcIlxuICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPGRpdiBbQC5kaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8bWF0LXRhYi1ncm91cFxuICAgICAgICAgICAgICAgIG1hdC1hbGlnbi10YWJzPVwic3RhcnRcIlxuICAgICAgICAgICAgICAgIFtkeW5hbWljSGVpZ2h0XT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQ29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlVGVtcGxhdGUuY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImh0bWxFZGl0b3Jjb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgJiMxMjM7JGNvbnRlbnQmIzEyNTsgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBtZXNzYWdlIGNvbnRlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgPC9mcy1sYWJlbC1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlN0eWxlc1wiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0eWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2VUZW1wbGF0ZS5zdHlsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzdHlsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiY3NzRWRpdG9yY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBuYW1lPVwiY2xvc2VcIj5cbiAgICAgICAgICBTYXZlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIG5hbWU9XCJzYXZlLWNsb3NlXCI+XG4gICAgICAgICAgU2F2ZSAmIENsb3NlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblByZXZpZXcoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgUHJldmlld1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPC9mcy1kaWFsb2c+XG4gIH1cbjwvZm9ybT4iXX0=
@@ -40,7 +40,7 @@ export class MessageComponent {
40
40
  _message = inject(FsMessage);
41
41
  _dialog = inject(MatDialog);
42
42
  _cdRef = inject(ChangeDetectorRef);
43
- message;
43
+ message = null;
44
44
  tab = 'general';
45
45
  messageTemplates = [];
46
46
  emailMessageFormats = EmailMessageFormats;
@@ -149,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
149
149
  MatDialogClose,
150
150
  ], template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"message\"\n [confirmTabs]=\"false\">\n @if (message) {\n <fs-dialog>\n <div mat-dialog-title>\n Edit Message\n </div>\n <mat-dialog-content>\n <mat-tab-group\n fsTabs\n [(selected)]=\"tab\">\n <mat-tab\n label=\"General\"\n name=\"general\">\n <ng-template matTabContent>\n <div class=\"fs-column\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.name\"\n name=\"Name\"\n required>\n </mat-form-field>\n <fs-label-field>\n <fs-label>\n Reference\n </fs-label>\n {{ message.reference }}\n </fs-label-field>\n <mat-form-field>\n <mat-label>\n Description\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.description\"\n name=\"description\">\n </mat-form-field>\n @if (message.emailMessage) {\n <div class=\"fs-row.gap-sm.wrap\">\n <mat-form-field>\n <mat-label>\n From Email\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.fromEmail\"\n name=\"from_email\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n From Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.fromName\"\n name=\"from_name\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Reply To\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.replyEmail\"\n name=\"reply_to\">\n </mat-form-field>\n </div>\n <div class=\"fs-row.gap-sm.wrap\">\n <mat-form-field>\n <mat-label>\n To\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.toRecipients\"\n name=\"to\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n CC\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.ccRecipients\"\n name=\"cc\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n BCC\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.bccRecipients\"\n name=\"bcc\">\n </mat-form-field>\n </div>\n }\n </div>\n </ng-template>\n </mat-tab>\n @if (message.emailMessage) {\n <mat-tab\n label=\"Email Message\"\n name=\"email\">\n <ng-template matTabContent>\n <div class=\"fs-column\">\n <div class=\"fs-row.gap-sm\">\n <mat-form-field>\n <mat-label>\n Customize Message\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.emailMessage.customize\"\n name=\"customizeEmail\">\n <mat-option [value]=\"true\">\n Yes\n </mat-option>\n <mat-option [value]=\"false\">\n No\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Format\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.emailMessage.format\"\n name=\"format\">\n @for (item of emailMessageFormats; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Template\n </mat-label>\n <mat-select\n [(ngModel)]=\"message.emailMessage.messageTemplateId\"\n name=\"template\">\n <mat-option [value]=\"null\">\n None\n </mat-option>\n @for (item of messageTemplates; track item) {\n <mat-option\n [value]=\"item.id\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (message.emailMessage.customize) {\n <mat-form-field>\n <mat-label>\n Subject\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.subject\"\n name=\"name\"\n required>\n </mat-form-field>\n <div [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n @if (message.emailMessage.format===emailMessageFormat.HTML) {\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\"\n [config]=\"{ language: 'html '}\">\n </fs-text-editor>\n }\n @if (message.emailMessage.format===emailMessageFormat.RichText) {\n <fs-html-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\">\n </fs-html-editor>\n }\n @if (message.emailMessage.format===emailMessageFormat.Text) {\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"emailMessageBody\"\n [config]=\"{ language: 'text' }\">\n </fs-text-editor>\n }\n </ng-template>\n </mat-tab>\n @if (message.emailMessage.format===emailMessageFormat.HTML || message.emailMessage.format===emailMessageFormat.RichText) {\n <mat-tab\n label=\"Styles\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.styles\"\n name=\"styles\"\n [config]=\"{ language: 'scss' }\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n }\n </mat-tab-group>\n </div>\n }\n @if (!message.emailMessage.customize) {\n <fs-label-field>\n <fs-label>\n Subject\n </fs-label>\n {{ message.defaultEmailSubject }}\n </fs-label-field>\n <div>\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"email-body-html-default\">\n @if (message.emailMessage.format===emailMessageFormat.RichText || message.emailMessage.format===emailMessageFormat.HTML) {\n <fs-html-renderer\n [html]=\"message.defaultEmailBody\">\n </fs-html-renderer>\n }\n </div>\n @if (message.emailMessage.format===emailMessageFormat.Text) {\n <div\n class=\"email-body-text-default\"\n >\n {{ message.defaultEmailBody }}\n </div>\n }\n </fs-label-field>\n </div>\n }\n </div>\n </ng-template>\n </mat-tab>\n }\n @if (!!message.smsMessage) {\n <mat-tab\n label=\"SMS Message\"\n name=\"sms\">\n <ng-template matTabContent>\n <mat-form-field>\n <mat-label>\n Customize Message\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.smsMessage.customize\"\n name=\"customizeSms\">\n <mat-option [value]=\"true\">\n Yes\n </mat-option>\n <mat-option [value]=\"false\">\n No\n </mat-option>\n </mat-select>\n </mat-form-field>\n @if (message.smsMessage.customize) {\n <div\n [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.smsMessage.message\"\n name=\"smsMessageMessage\"\n [config]=\"{ language: 'text '}\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n }\n @if (!message.smsMessage.customize) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div class=\"content\">\n {{ message.defaultSmsMessage }}\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n }\n @if (message.emailMessage) {\n <mat-tab\n label=\"Attachments\"\n name=\"attachments\">\n <ng-template matTabContent>\n <fs-app-message-attachments [message]=\"message\"></fs-app-message-attachments>\n </ng-template>\n </mat-tab>\n }\n @if (message.variables) {\n <mat-tab\n label=\"Variables\"\n >\n <ng-template matTabContent>\n @for (variable of message.variables; track variable) {\n <div\n class=\"variable\">\n {{ variable.name }}\n </div>\n }\n </ng-template>\n </mat-tab>\n }\n <mat-tab label=\"Defaults\">\n <ng-template matTabContent>\n @if (message.emailMessage) {\n @if (message.emailMessage && message.smsMessage) {\n <h2>\n Email\n </h2>\n }\n <fs-label-field>\n <fs-label>\n Subject\n </fs-label>\n <div class=\"content\">\n {{ message.defaultEmailSubject }}\n </div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"content\">\n {{ message.defaultEmailBody }}\n </div>\n </fs-label-field>\n }\n @if (message.smsMessage) {\n @if (message.emailMessage && message.smsMessage) {\n <h2>\n SMS\n </h2>\n }\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"content\">\n {{ message.defaultSmsMessage }}\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n @if (tab==='email' || tab==='sms' || tab==='general') {\n <button\n mat-button\n color=\"primary\">\n Save\n </button>\n @if (tab==='email') {\n <button\n mat-button\n type=\"button\"\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('email')\"\n type=\"button\">\n Send Test Email\n </button>\n }\n @if (tab==='sms') {\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('sms')\"\n type=\"button\">\n Send Test SMS\n </button>\n }\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Cancel\n </button>\n } @else {\n <button\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Close\n </button>\n }\n </mat-dialog-actions>\n </fs-dialog>\n }\n</form>", styles: ["fs-label-field .content{white-space:pre-wrap}:host ::ng-deep .mat-tab-body-content,:host ::ng-deep .mat-tab-body{overflow:visible}:host ::ng-deep .sms-message{width:100%}:host ::ng-deep .email-body-text-default{white-space:pre-line}.fs-column .mat-form-field{flex:1}.email-body-text{width:100%}.variable{margin-bottom:4px}\n"] }]
151
151
  }] });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cy9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBbUNyRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLE9BQU8sR0FBRyxNQUFNLENBQXFCLHFCQUFxQixDQUFDLENBQUM7SUFDNUQsS0FBSyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNCLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QixNQUFNLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFHcEMsT0FBTyxDQUFDO0lBQ1IsR0FBRyxHQUFHLFNBQVMsQ0FBQztJQUNoQixnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDdEIsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFDMUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7SUFFeEMsUUFBUTtRQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBRXZCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNuRixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzdDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMzQyxDQUFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7aUJBQ3pDLGlCQUFpQixFQUFFO2lCQUNuQixLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFWixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTthQUNoQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzFDLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUMsQ0FBQTtJQUVNLFdBQVc7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDL0MsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUN0RixJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUV2QyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0I7aUJBQzFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLE9BQU8sWUFBWSxDQUFDLGlCQUFpQixLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsTUFBTSxJQUFJLEVBQUUsT0FBTyxNQUFNLEVBQUUsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2xDLElBQUksRUFBRTtnQkFDSixNQUFNO2dCQUNOLElBQUk7YUFDTDtZQUNELEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFJO1FBQ2xCLEVBQUUsQ0FBQyxJQUFJLENBQUM7YUFDTCxJQUFJLENBQ0gsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE9BQU8sSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1lBRWhFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxnQkFBZ0IsUUFBUSxrQkFBa0I7Z0JBQ2pELEtBQUssRUFBRSxXQUFXO2dCQUNsQixXQUFXLEVBQUUsTUFBTTtnQkFDbkIsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQ2hELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7dUdBdEdVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLHdFQ2pFN0Isby9lQWthTyw2WEQzWEMsZ0JBQWdCLGlLQUNoQixXQUFXLG93Q0FDWCxZQUFZLGk2Q0FDWixjQUFjLGlNQUNkLGNBQWMsK0hBRWQsZ0JBQWdCLHlHQUNoQixXQUFXLGliQUNYLFlBQVksb2FBQ1osTUFBTSxxS0FDTixhQUFhLDREQUNiLFlBQVksNExBQ1osUUFBUSxzREFDUixRQUFRLGdVQUNSLGFBQWEsZ1JBQ2IsU0FBUyx3ZUFDVCxTQUFTLG9KQUNULGtCQUFrQiwrS0FDbEIsa0JBQWtCLGlKQUNsQixvQkFBb0Isd0lBQ3BCLG9CQUFvQiw0RkFDcEIsZ0JBQWdCLDRIQUNoQixTQUFTLGlMQUNULGNBQWM7OzJGQUdULGdCQUFnQjtrQkFoQzVCLFNBQVM7c0NBR1csdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ0wsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osTUFBTTt3QkFDTixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixRQUFRO3dCQUNSLGFBQWE7d0JBQ2IsU0FBUzt3QkFDVCxTQUFTO3dCQUNULGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixTQUFTO3dCQUNULGNBQWM7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dUaXRsZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kdWxlcy9tZXNzYWdlLXByZXZpZXcvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFbWFpbE1lc3NhZ2VGb3JtYXRzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IEVtYWlsTWVzc2FnZUZvcm1hdCB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEZzU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9za2VsZXRvbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNEaWFsb2dNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTWF0VGFiR3JvdXAsIE1hdFRhYiwgTWF0VGFiQ29udGVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgRnNUYWJzTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvdGFicyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdExhYmVsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEZzTGFiZWxNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9sYWJlbCc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBGc1RleHRFZGl0b3JNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC90ZXh0LWVkaXRvcic7XG5pbXBvcnQgeyBGc0h0bWxFZGl0b3JNb2R1bGUsIEZzSHRtbFJlbmRlcmVyTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvaHRtbC1lZGl0b3InO1xuaW1wb3J0IHsgQXR0YWNobWVudHNDb21wb25lbnQgfSBmcm9tICcuLi9hdHRhY2htZW50cy9hdHRhY2htZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbWVzc2FnZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBGc1NrZWxldG9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgRnNGb3JtTW9kdWxlLFxuICAgICAgICBGc0RpYWxvZ01vZHVsZSxcbiAgICAgICAgTWF0RGlhbG9nVGl0bGUsXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gICAgICAgIE1hdFRhYkdyb3VwLFxuICAgICAgICBGc1RhYnNNb2R1bGUsXG4gICAgICAgIE1hdFRhYixcbiAgICAgICAgTWF0VGFiQ29udGVudCxcbiAgICAgICAgTWF0Rm9ybUZpZWxkLFxuICAgICAgICBNYXRMYWJlbCxcbiAgICAgICAgTWF0SW5wdXQsXG4gICAgICAgIEZzTGFiZWxNb2R1bGUsXG4gICAgICAgIE1hdFNlbGVjdCxcbiAgICAgICAgTWF0T3B0aW9uLFxuICAgICAgICBGc1RleHRFZGl0b3JNb2R1bGUsXG4gICAgICAgIEZzSHRtbEVkaXRvck1vZHVsZSxcbiAgICAgICAgRnNIdG1sUmVuZGVyZXJNb2R1bGUsXG4gICAgICAgIEF0dGFjaG1lbnRzQ29tcG9uZW50LFxuICAgICAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgICAgICBNYXRCdXR0b24sXG4gICAgICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIF9jb25maWcgPSBpbmplY3Q8RnNBcHBNZXNzYWdlQ29uZmlnPihGU19BUFBfTUVTU0FHRV9DT05GSUcpO1xuICBwcml2YXRlIF9kYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSk7XG4gIHByaXZhdGUgX3Byb21wdCA9IGluamVjdChGc1Byb21wdCk7XG4gIHByaXZhdGUgX21lc3NhZ2UgPSBpbmplY3QoRnNNZXNzYWdlKTtcbiAgcHJpdmF0ZSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuXG4gIHB1YmxpYyBtZXNzYWdlO1xuICBwdWJsaWMgdGFiID0gJ2dlbmVyYWwnO1xuICBwdWJsaWMgbWVzc2FnZVRlbXBsYXRlcyA9IFtdO1xuICBwdWJsaWMgZW1haWxNZXNzYWdlRm9ybWF0cyA9IEVtYWlsTWVzc2FnZUZvcm1hdHM7XG4gIHB1YmxpYyBlbWFpbE1lc3NhZ2VGb3JtYXQgPSBFbWFpbE1lc3NhZ2VGb3JtYXQ7XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZSh0aGlzLl9kYXRhLm1lc3NhZ2UpXG4gICAgICAuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZS5lbWFpbE1lc3NhZ2UgJiYgdGhpcy5tZXNzYWdlLmVtYWlsTWVzc2FnZS5jdXN0b21pemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlLnNtc01lc3NhZ2UgJiYgdGhpcy5tZXNzYWdlLnNtc01lc3NhZ2UuY3VzdG9taXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2Uuc21zTWVzc2FnZS5jdXN0b21pemUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlLnJlZmVyZW5jZSA9IFN0cmluZyhtZXNzYWdlLnRhZylcbiAgICAgICAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgIC5zcGxpdCgnXycpXG4gICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBpdGVtLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgaXRlbS5zbGljZSgxKSlcbiAgICAgICAgICAuam9pbignJyk7XG5cbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVRlbXBsYXRlcygpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVRlbXBsYXRlcyA9IGRhdGEuZGF0YTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuc2F2ZU1lc3NhZ2UodGhpcy5tZXNzYWdlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTYXZlZCBDaGFuZ2VzJyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIG9wZW5QcmV2aWV3KCk6IHZvaWQge1xuICAgIGNvbnN0IGVtYWlsTWVzc2FnZSA9IHRoaXMubWVzc2FnZS5lbWFpbE1lc3NhZ2U7XG4gICAgbGV0IGh0bWwgPSBlbWFpbE1lc3NhZ2UuY3VzdG9taXplID8gZW1haWxNZXNzYWdlLmJvZHkgOiB0aGlzLm1lc3NhZ2UuZGVmYXVsdEVtYWlsQm9keTtcbiAgICBsZXQgc3R5bGVzID0gZW1haWxNZXNzYWdlLnN0eWxlcyB8fCAnJztcblxuICAgIGlmIChlbWFpbE1lc3NhZ2UubWVzc2FnZVRlbXBsYXRlSWQpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZW1wbGF0ZSA9IHRoaXMubWVzc2FnZVRlbXBsYXRlc1xuICAgICAgICAuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlbWFpbE1lc3NhZ2UubWVzc2FnZVRlbXBsYXRlSWQgPT09IGl0ZW0uaWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAobWVzc2FnZVRlbXBsYXRlKSB7XG4gICAgICAgIGh0bWwgPSBtZXNzYWdlVGVtcGxhdGUuY29udGVudC5yZXBsYWNlKCd7JGNvbnRlbnR9JywgaHRtbCk7XG4gICAgICAgIHN0eWxlcyA9IGAke21lc3NhZ2VUZW1wbGF0ZS5zdHlsZXMgfHwgJyd9XFxuXFxuJHtzdHlsZXN9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9kaWFsb2cub3BlbihQcmV2aWV3Q29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHN0eWxlcyxcbiAgICAgICAgaHRtbCxcbiAgICAgIH0sXG4gICAgICB3aWR0aDogJzk1JSdcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kVGVzdCh0eXBlKSB7XG4gICAgb2YodHJ1ZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0eXBlID09PSAnZW1haWwnID8gdGhpcy5fY29uZmlnLmdldFRlc3RFbWFpbCgpIDogb2YoJycpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChkZWZhdWx0XykgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gdHlwZSA9PT0gJ2VtYWlsJyA/ICdhbiBlbWFpbCcgOiAncGhvbmUgbnVtYmVyJztcblxuICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgICAgICAgbGFiZWw6IGBQbGVhc2UgZW50ZXIgJHt0eXBlTmFtZX0gdG8gc2VuZCB0ZXN0IHRvYCxcbiAgICAgICAgICAgIHRpdGxlOiAnU2VuZCBUZXN0JyxcbiAgICAgICAgICAgIGNvbW1pdExhYmVsOiAnU2VuZCcsXG4gICAgICAgICAgICBkZWZhdWx0OiBkZWZhdWx0XyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5fY29uZmlnLnRlc3RNZXNzYWdlKHRoaXMubWVzc2FnZSwgdmFsdWUsIHR5cGUpXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1Rlc3QgU2VudCcpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gIGZzRm9ybVxuICBbc3VibWl0XT1cInNhdmVcIlxuICAjZm9ybT1cIm5nRm9ybVwiXG4gICpmc1NrZWxldG9uPVwibWVzc2FnZVwiXG4gIFtjb25maXJtVGFic109XCJmYWxzZVwiPlxuICBAaWYgKG1lc3NhZ2UpIHtcbiAgICA8ZnMtZGlhbG9nPlxuICAgICAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPlxuICAgICAgICBFZGl0IE1lc3NhZ2VcbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgICAgPG1hdC10YWItZ3JvdXBcbiAgICAgICAgICBmc1RhYnNcbiAgICAgICAgICBbKHNlbGVjdGVkKV09XCJ0YWJcIj5cbiAgICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgbGFiZWw9XCJHZW5lcmFsXCJcbiAgICAgICAgICAgIG5hbWU9XCJnZW5lcmFsXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIE5hbWVcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5yZWZlcmVuY2UgfX1cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZS5lbWFpbE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLXNtLndyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICBGcm9tIEVtYWlsXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5mcm9tRW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyb21fZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICBGcm9tIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZyb21OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmcm9tX25hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXBseSBUb1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UucmVwbHlFbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmVwbHlfdG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtc20ud3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRvXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS50b1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ0NcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY2NcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICBCQ0NcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJjY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImJjY1wiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgIEBpZiAobWVzc2FnZS5lbWFpbE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICAgIGxhYmVsPVwiRW1haWwgTWVzc2FnZVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWl6ZSBNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY3VzdG9taXplRW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFllc1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZvcm1hdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBlbWFpbE1lc3NhZ2VGb3JtYXRzOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLm1lc3NhZ2VUZW1wbGF0ZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0ZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBtZXNzYWdlVGVtcGxhdGVzOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZS5jdXN0b21pemUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5zdWJqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtALmRpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYi1ncm91cCBbZHluYW1pY0hlaWdodF09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJDb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LkhUTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ2h0bWwgJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LlJpY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZnMtaHRtbC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5ib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtaHRtbC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LlRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZW1haWxNZXNzYWdlQm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ3RleHQnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuSFRNTCB8fCBtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuUmljaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlN0eWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2Uuc3R5bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN0eWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ3Njc3MnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKCFtZXNzYWdlLmVtYWlsTWVzc2FnZS5jdXN0b21pemUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3RcbiAgICAgICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2UuZGVmYXVsdEVtYWlsU3ViamVjdCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbWFpbC1ib2R5LWh0bWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5SaWNoVGV4dCB8fCBtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuSFRNTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmcy1odG1sLXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHRtbF09XCJtZXNzYWdlLmRlZmF1bHRFbWFpbEJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZzLWh0bWwtcmVuZGVyZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbWFpbC1ib2R5LXRleHQtZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2UuZGVmYXVsdEVtYWlsQm9keSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghIW1lc3NhZ2Uuc21zTWVzc2FnZSkge1xuICAgICAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgICAgbGFiZWw9XCJTTVMgTWVzc2FnZVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJzbXNcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9taXplIE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLnNtc01lc3NhZ2UuY3VzdG9taXplXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImN1c3RvbWl6ZVNtc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFllc1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIE5vXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBbQC5kaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIFtkeW5hbWljSGVpZ2h0XT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJDb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLnNtc01lc3NhZ2UubWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNtc01lc3NhZ2VNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInsgbGFuZ3VhZ2U6ICd0ZXh0ICd9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoIW1lc3NhZ2Uuc21zTWVzc2FnZS5jdXN0b21pemUpIHtcbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLmRlZmF1bHRTbXNNZXNzYWdlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobWVzc2FnZS5lbWFpbE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICAgIGxhYmVsPVwiQXR0YWNobWVudHNcIlxuICAgICAgICAgICAgICBuYW1lPVwiYXR0YWNobWVudHNcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGZzLWFwcC1tZXNzYWdlLWF0dGFjaG1lbnRzIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj48L2ZzLWFwcC1tZXNzYWdlLWF0dGFjaG1lbnRzPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKG1lc3NhZ2UudmFyaWFibGVzKSB7XG4gICAgICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgICBsYWJlbD1cIlZhcmlhYmxlc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgQGZvciAodmFyaWFibGUgb2YgbWVzc2FnZS52YXJpYWJsZXM7IHRyYWNrIHZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFyaWFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkRlZmF1bHRzXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZS5lbWFpbE1lc3NhZ2UgJiYgbWVzc2FnZS5zbXNNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICA8aDI+XG4gICAgICAgICAgICAgICAgICAgIEVtYWlsXG4gICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIFN1YmplY3RcbiAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLmRlZmF1bHRFbWFpbFN1YmplY3QgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICBDb250ZW50XG4gICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5kZWZhdWx0RW1haWxCb2R5IH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAobWVzc2FnZS5zbXNNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZSAmJiBtZXNzYWdlLnNtc01lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgICAgICAgICAgU01TXG4gICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLmRlZmF1bHRTbXNNZXNzYWdlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgICAgICBAaWYgKHRhYj09PSdlbWFpbCcgfHwgdGFiPT09J3NtcycgfHwgdGFiPT09J2dlbmVyYWwnKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICBTYXZlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmICh0YWI9PT0nZW1haWwnKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUHJldmlldygpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICBQcmV2aWV3XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRUZXN0KCdlbWFpbCcpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICBTZW5kIFRlc3QgRW1haWxcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHRhYj09PSdzbXMnKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZW5kVGVzdCgnc21zJylcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgIFNlbmQgVGVzdCBTTVNcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICBDbG9zZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L2ZzLWRpYWxvZz5cbiAgfVxuPC9mb3JtPiJdfQ==
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cy9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVB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aGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nVGl0bGUsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5cbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZS1wcmV2aWV3L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRlNfQVBQX01FU1NBR0VfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW5qZWN0b3JzJztcbmltcG9ydCB7IEZzQXBwTWVzc2FnZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2FwcC1tZXNzYWdlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRW1haWxNZXNzYWdlRm9ybWF0cyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBFbWFpbE1lc3NhZ2VGb3JtYXQgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBGc1NrZWxldG9uTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2tlbGV0b24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGc0Zvcm1Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdFRhYkdyb3VwLCBNYXRUYWIsIE1hdFRhYkNvbnRlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IEZzVGFic01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3RhYnMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBGc0xhYmVsTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGFiZWwnO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgRnNUZXh0RWRpdG9yTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvdGV4dC1lZGl0b3InO1xuaW1wb3J0IHsgRnNIdG1sRWRpdG9yTW9kdWxlLCBGc0h0bWxSZW5kZXJlck1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2h0bWwtZWRpdG9yJztcbmltcG9ydCB7IEF0dGFjaG1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vYXR0YWNobWVudHMvYXR0YWNobWVudHMuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL21lc3NhZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEZzRm9ybU1vZHVsZSxcbiAgICAgICAgRnNEaWFsb2dNb2R1bGUsXG4gICAgICAgIE1hdERpYWxvZ1RpdGxlLFxuICAgICAgICBDZGtTY3JvbGxhYmxlLFxuICAgICAgICBNYXREaWFsb2dDb250ZW50LFxuICAgICAgICBNYXRUYWJHcm91cCxcbiAgICAgICAgRnNUYWJzTW9kdWxlLFxuICAgICAgICBNYXRUYWIsXG4gICAgICAgIE1hdFRhYkNvbnRlbnQsXG4gICAgICAgIE1hdEZvcm1GaWVsZCxcbiAgICAgICAgTWF0TGFiZWwsXG4gICAgICAgIE1hdElucHV0LFxuICAgICAgICBGc0xhYmVsTW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3QsXG4gICAgICAgIE1hdE9wdGlvbixcbiAgICAgICAgRnNUZXh0RWRpdG9yTW9kdWxlLFxuICAgICAgICBGc0h0bWxFZGl0b3JNb2R1bGUsXG4gICAgICAgIEZzSHRtbFJlbmRlcmVyTW9kdWxlLFxuICAgICAgICBBdHRhY2htZW50c0NvbXBvbmVudCxcbiAgICAgICAgTWF0RGlhbG9nQWN0aW9ucyxcbiAgICAgICAgTWF0QnV0dG9uLFxuICAgICAgICBNYXREaWFsb2dDbG9zZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfY29uZmlnID0gaW5qZWN0PEZzQXBwTWVzc2FnZUNvbmZpZz4oRlNfQVBQX01FU1NBR0VfQ09ORklHKTtcbiAgcHJpdmF0ZSBfZGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwcml2YXRlIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cblxuICBwdWJsaWMgbWVzc2FnZSA9IG51bGw7XG4gIHB1YmxpYyB0YWIgPSAnZ2VuZXJhbCc7XG4gIHB1YmxpYyBtZXNzYWdlVGVtcGxhdGVzID0gW107XG4gIHB1YmxpYyBlbWFpbE1lc3NhZ2VGb3JtYXRzID0gRW1haWxNZXNzYWdlRm9ybWF0cztcbiAgcHVibGljIGVtYWlsTWVzc2FnZUZvcm1hdCA9IEVtYWlsTWVzc2FnZUZvcm1hdDtcblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlKHRoaXMuX2RhdGEubWVzc2FnZSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlLmVtYWlsTWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlLmVtYWlsTWVzc2FnZS5jdXN0b21pemUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2Uuc21zTWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2Uuc21zTWVzc2FnZS5jdXN0b21pemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1lc3NhZ2UucmVmZXJlbmNlID0gU3RyaW5nKG1lc3NhZ2UudGFnKVxuICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgLnNwbGl0KCdfJylcbiAgICAgICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnNsaWNlKDEpKVxuICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlVGVtcGxhdGVzKClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVGVtcGxhdGVzID0gZGF0YS5kYXRhO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYXZlTWVzc2FnZSh0aGlzLm1lc3NhZ2UpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIENoYW5nZXMnKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgb3BlblByZXZpZXcoKTogdm9pZCB7XG4gICAgY29uc3QgZW1haWxNZXNzYWdlID0gdGhpcy5tZXNzYWdlLmVtYWlsTWVzc2FnZTtcbiAgICBsZXQgaHRtbCA9IGVtYWlsTWVzc2FnZS5jdXN0b21pemUgPyBlbWFpbE1lc3NhZ2UuYm9keSA6IHRoaXMubWVzc2FnZS5kZWZhdWx0RW1haWxCb2R5O1xuICAgIGxldCBzdHlsZXMgPSBlbWFpbE1lc3NhZ2Uuc3R5bGVzIHx8ICcnO1xuXG4gICAgaWYgKGVtYWlsTWVzc2FnZS5tZXNzYWdlVGVtcGxhdGVJZCkge1xuICAgICAgY29uc3QgbWVzc2FnZVRlbXBsYXRlID0gdGhpcy5tZXNzYWdlVGVtcGxhdGVzXG4gICAgICAgIC5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVtYWlsTWVzc2FnZS5tZXNzYWdlVGVtcGxhdGVJZCA9PT0gaXRlbS5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmIChtZXNzYWdlVGVtcGxhdGUpIHtcbiAgICAgICAgaHRtbCA9IG1lc3NhZ2VUZW1wbGF0ZS5jb250ZW50LnJlcGxhY2UoJ3skY29udGVudH0nLCBodG1sKTtcbiAgICAgICAgc3R5bGVzID0gYCR7bWVzc2FnZVRlbXBsYXRlLnN0eWxlcyB8fCAnJ31cXG5cXG4ke3N0eWxlc31gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKFByZXZpZXdDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc3R5bGVzLFxuICAgICAgICBodG1sLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnOTUlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbmRUZXN0KHR5cGUpIHtcbiAgICBvZih0cnVlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdlbWFpbCcgPyB0aGlzLl9jb25maWcuZ2V0VGVzdEVtYWlsKCkgOiBvZignJyk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKGRlZmF1bHRfKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSB0eXBlID09PSAnZW1haWwnID8gJ2FuIGVtYWlsJyA6ICdwaG9uZSBudW1iZXInO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICAgICAgICBsYWJlbDogYFBsZWFzZSBlbnRlciAke3R5cGVOYW1lfSB0byBzZW5kIHRlc3QgdG9gLFxuICAgICAgICAgICAgdGl0bGU6ICdTZW5kIFRlc3QnLFxuICAgICAgICAgICAgY29tbWl0TGFiZWw6ICdTZW5kJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRfLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLl9jb25maWcudGVzdE1lc3NhZ2UodGhpcy5tZXNzYWdlLCB2YWx1ZSwgdHlwZSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnVGVzdCBTZW50Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgZnNGb3JtXG4gIFtzdWJtaXRdPVwic2F2ZVwiXG4gICNmb3JtPVwibmdGb3JtXCJcbiAgKmZzU2tlbGV0b249XCJtZXNzYWdlXCJcbiAgW2NvbmZpcm1UYWJzXT1cImZhbHNlXCI+XG4gIEBpZiAobWVzc2FnZSkge1xuICAgIDxmcy1kaWFsb2c+XG4gICAgICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+XG4gICAgICAgIEVkaXQgTWVzc2FnZVxuICAgICAgPC9kaXY+XG4gICAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgICA8bWF0LXRhYi1ncm91cFxuICAgICAgICAgIGZzVGFic1xuICAgICAgICAgIFsoc2VsZWN0ZWQpXT1cInRhYlwiPlxuICAgICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkdlbmVyYWxcIlxuICAgICAgICAgICAgbmFtZT1cImdlbmVyYWxcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgTmFtZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLnJlZmVyZW5jZSB9fVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtc20ud3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZyb20gRW1haWxcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZyb21FbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJvbV9lbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZyb20gTmFtZVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuZnJvbU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZyb21fbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlcGx5IFRvXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5yZXBseUVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXBseV90b1wiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1zbS53cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgVG9cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLnRvUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICBDQ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuY2NSZWNpcGllbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjY1wiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJDQ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuYmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYmNjXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgICAgbGFiZWw9XCJFbWFpbCBNZXNzYWdlXCJcbiAgICAgICAgICAgICAgbmFtZT1cImVtYWlsXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLXNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9taXplIE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjdXN0b21pemVFbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgWWVzXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZm9ybWF0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGVtYWlsTWVzc2FnZUZvcm1hdHM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UubWVzc2FnZVRlbXBsYXRlSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIG1lc3NhZ2VUZW1wbGF0ZXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZSkge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3RcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLnN1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW0AuZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIFtkeW5hbWljSGVpZ2h0XT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuSFRNTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGxhbmd1YWdlOiAnaHRtbCAnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuUmljaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmcy1odG1sLWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mcy1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbWFpbE1lc3NhZ2VCb2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGxhbmd1YWdlOiAndGV4dCcgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5IVE1MIHx8IG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5SaWNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiU3R5bGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5zdHlsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3R5bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGxhbmd1YWdlOiAnc2NzcycgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoIW1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZSkge1xuICAgICAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdFxuICAgICAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5kZWZhdWx0RW1haWxTdWJqZWN0IH19XG4gICAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtYWlsLWJvZHktaHRtbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LlJpY2hUZXh0IHx8IG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5IVE1MKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZzLWh0bWwtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtodG1sXT1cIm1lc3NhZ2UuZGVmYXVsdEVtYWlsQm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtaHRtbC1yZW5kZXJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5UZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVtYWlsLWJvZHktdGV4dC1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5kZWZhdWx0RW1haWxCb2R5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKCEhbWVzc2FnZS5zbXNNZXNzYWdlKSB7XG4gICAgICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgICBsYWJlbD1cIlNNUyBNZXNzYWdlXCJcbiAgICAgICAgICAgICAgbmFtZT1cInNtc1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICBDdXN0b21pemUgTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2Uuc21zTWVzc2FnZS5jdXN0b21pemVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY3VzdG9taXplU21zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgWWVzXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgTm9cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLnNtc01lc3NhZ2UuY3VzdG9taXplKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIFtALmRpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgW2R5bmFtaWNIZWlnaHRdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2Uuc21zTWVzc2FnZS5tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic21zTWVzc2FnZU1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ3RleHQgJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmICghbWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZSkge1xuICAgICAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2UuZGVmYXVsdFNtc01lc3NhZ2UgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgICAgbGFiZWw9XCJBdHRhY2htZW50c1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJhdHRhY2htZW50c1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICA8ZnMtYXBwLW1lc3NhZ2UtYXR0YWNobWVudHMgW21lc3NhZ2VdPVwibWVzc2FnZVwiPjwvZnMtYXBwLW1lc3NhZ2UtYXR0YWNobWVudHM+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobWVzc2FnZS52YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICAgIGxhYmVsPVwiVmFyaWFibGVzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICBAZm9yICh2YXJpYWJsZSBvZiBtZXNzYWdlLnZhcmlhYmxlczsgdHJhY2sgdmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YXJpYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiRGVmYXVsdHNcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2UuZW1haWxNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLmVtYWlsTWVzc2FnZSAmJiBtZXNzYWdlLnNtc01lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgICAgICAgICAgRW1haWxcbiAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgU3ViamVjdFxuICAgICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2UuZGVmYXVsdEVtYWlsU3ViamVjdCB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlLmRlZmF1bHRFbWFpbEJvZHkgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChtZXNzYWdlLnNtc01lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2UuZW1haWxNZXNzYWdlICYmIG1lc3NhZ2Uuc21zTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgPGgyPlxuICAgICAgICAgICAgICAgICAgICBTTVNcbiAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgQ29udGVudFxuICAgICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2UuZGVmYXVsdFNtc01lc3NhZ2UgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgIEBpZiAodGFiPT09J2VtYWlsJyB8fCB0YWI9PT0nc21zJyB8fCB0YWI9PT0nZ2VuZXJhbCcpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICBAaWYgKHRhYj09PSdlbWFpbCcpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5QcmV2aWV3KClcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgIFByZXZpZXdcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VuZFRlc3QoJ2VtYWlsJylcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgIFNlbmQgVGVzdCBFbWFpbFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAodGFiPT09J3NtcycpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRUZXN0KCdzbXMnKVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgU2VuZCBUZXN0IFNNU1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvZnMtZGlhbG9nPlxuICB9XG48L2Zvcm0+Il19
@@ -179,7 +179,7 @@ class MessageComponent {
179
179
  _message = inject(FsMessage);
180
180
  _dialog = inject(MatDialog);
181
181
  _cdRef = inject(ChangeDetectorRef);
182
- message;
182
+ message = null;
183
183
  tab = 'general';
184
184
  messageTemplates = [];
185
185
  emailMessageFormats = EmailMessageFormats;
@@ -1047,7 +1047,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1047
1047
  }] });
1048
1048
 
1049
1049
  class TemplateComponent {
1050
- messageTemplate;
1050
+ messageTemplate = null;
1051
1051
  htmlEditorconfig = {
1052
1052
  language: 'html',
1053
1053
  insertSpaces: true,
@@ -1063,11 +1063,13 @@ class TemplateComponent {
1063
1063
  _dialogRef = inject(MatDialogRef);
1064
1064
  _message = inject(FsMessage);
1065
1065
  _dialog = inject(MatDialog);
1066
+ _cdRef = inject(ChangeDetectorRef);
1066
1067
  ngOnInit() {
1067
- if (this._data.messageTemplate.id) {
1068
+ if (this._data.messageTemplate?.id) {
1068
1069
  this._config.loadMessageTemplate(this._data.messageTemplate)
1069
1070
  .subscribe((messageTemplate) => {
1070
1071
  this.messageTemplate = messageTemplate;
1072
+ this._cdRef.markForCheck();
1071
1073
  });
1072
1074
  }
1073
1075
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"firestitch-app-message.mjs","sources":["../../src/app/modules/app-message/app-message.module.ts","../../src/app/helpers/index-name-value.ts","../../src/app/modules/message-preview/components/preview/preview.component.ts","../../src/app/modules/message-preview/components/preview/preview.component.html","../../src/app/modules/app-message/injectors/app-message-config.injector.ts","../../src/app/modules/messages/enums/email-message-format.enum.ts","../../src/app/modules/messages/consts/email-message-formats.const.ts","../../src/app/modules/messages/components/attachments/attachments.component.ts","../../src/app/modules/messages/components/attachments/attachments.component.html","../../src/app/modules/messages/components/message/message.component.ts","../../src/app/modules/messages/components/message/message.component.html","../../src/app/modules/messages/components/messages/messages.component.ts","../../src/app/modules/messages/components/messages/messages.component.html","../../src/app/modules/message-queues/enums/message-queue-state.enum.ts","../../src/app/modules/message-queues/consts/message-queue-states.const.ts","../../src/app/modules/message-queues/enums/email-message-queue-format.enum.ts","../../src/app/modules/message-queues/enums/message-queue-type.enum.ts","../../src/app/modules/message-queues/enums/message-queue-event-type.enum.ts","../../src/app/modules/message-queues/consts/message-queue-event-type.const.ts","../../src/app/modules/message-queues/components/recipient/recipient.component.ts","../../src/app/modules/message-queues/components/recipient/recipient.component.html","../../src/app/modules/message-queues/components/queue/queue.component.ts","../../src/app/modules/message-queues/components/queue/queue.component.html","../../src/app/modules/message-queues/services/message-queue.service.ts","../../src/app/modules/message-queues/pipes/truncate.pipe.ts","../../src/app/modules/message-queues/components/queues/queues.component.ts","../../src/app/modules/message-queues/components/queues/queues.component.html","../../src/app/modules/message-queues/pipes/linkify.pipe.ts","../../src/app/modules/message-queues/message-queues.module.ts","../../src/app/modules/webhooks/components/webhooks/webhooks.component.ts","../../src/app/modules/webhooks/components/webhooks/webhooks.component.html","../../src/app/modules/webhooks/webhooks.module.ts","../../src/app/modules/message-templates/components/template/template.component.ts","../../src/app/modules/message-templates/components/template/template.component.html","../../src/app/modules/message-templates/components/templates/templates.component.ts","../../src/app/modules/message-templates/components/templates/templates.component.html","../../src/app/modules/message-templates/message-templates.module.ts","../../src/app/modules/messages/messages.module.ts","../../src/firestitch-app-message.ts"],"sourcesContent":["import { NgModule, ModuleWithProviders } from '@angular/core';\n\n\n@NgModule({\n})\nexport class FsAppMessageModule {\n static forRoot(): ModuleWithProviders<FsAppMessageModule> {\n return {\n ngModule: FsAppMessageModule,\n };\n }\n}\n","\nexport function indexNameValue(arry) {\n const obj = {};\n arry.forEach(item => {\n obj[item.value] = item.name;\n });\n\n return obj;\n}\n","import { Component, OnInit, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsIFrameModule } from '@firestitch/iframe';\nimport { MatButton } from '@angular/material/button';\n\n\n@Component({\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.scss'],\n standalone: true,\n imports: [FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, FsIFrameModule, MatDialogActions, MatButton, MatDialogClose]\n})\nexport class PreviewComponent implements OnInit {\n private _data = inject(MAT_DIALOG_DATA);\n\n\n public html;\n public styles;\n\n constructor() {\n const _data = this._data;\n\n this.html = _data.html;\n this.styles = _data.styles;\n }\n\n public ngOnInit() {\n\n }\n}\n","<fs-dialog>\n <div mat-dialog-title>Preview</div>\n <mat-dialog-content>\n <fs-iframe\n [html]=\"html\"\n [width]=\"'100%'\"\n [styles]=\"styles\">\n </fs-iframe>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button [mat-dialog-close]=\"null\" color=\"primary\" type=\"button\">Done</button>\n </mat-dialog-actions>\n</fs-dialog>\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_APP_MESSAGE_ROOT_CONFIG = new InjectionToken<any[]>('fs-app-message-root-config');\nexport const FS_APP_MESSAGE_CONFIG = new InjectionToken<any[]>('fs-app-message-config');\n","export enum EmailMessageFormat {\n Text = 'T',\n HTML = 'H',\n RichText = 'R'\n}\n","\nimport { EmailMessageFormat } from '../enums';\n\nexport const EmailMessageFormats = [\n { name: 'Text', value: EmailMessageFormat.Text },\n { name: 'HTML', value: EmailMessageFormat.HTML },\n { name: 'Rich Text', value: EmailMessageFormat.RichText }\n];\n","import { Component, OnDestroy, OnInit, ViewChild, ChangeDetectionStrategy, Input, inject } from '@angular/core';\n\nimport { FsFile } from '@firestitch/file';\n\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { ActionMode } from '@firestitch/filter';\n\nimport { Subject } from 'rxjs';\n\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { FsMessage } from '@firestitch/message';\nimport { FsCommonModule } from '@firestitch/common';\n\n\n@Component({\n selector: 'fs-app-message-attachments',\n templateUrl: './attachments.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsCommonModule],\n})\nexport class AttachmentsComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _message = inject(FsMessage);\n\n\n @ViewChild(FsListComponent, { static: true }) \n public list: FsListComponent = null;\n\n @Input() public message;\n\n public config: FsListConfig = null;\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n this.config = {\n rowActions: [],\n actions: [\n {\n label: 'Upload',\n mode: ActionMode.File,\n select: (fsFile: FsFile) => {\n this._config.uploadMessageAttachment(this.message, fsFile)\n .subscribe(() => {\n this._message.success('Saved attachment');\n this.list.reload();\n });\n }\n }\n ],\n fetch: query => {\n return this._config.loadMessageAttachments(this.message, query);\n }\n }\n\n if (this._config.downloadMessageAttachment) {\n this.config.rowActions\n .push(\n {\n click: data => {\n return this._config.downloadMessageAttachment(data);\n },\n label: 'Download',\n },\n );\n }\n\n if (this._config.deleteMessageAttachment) {\n this.config.rowActions\n .push(\n {\n click: data => {\n return this._config.deleteMessageAttachment(data);\n },\n remove: {\n title: 'Confirm',\n template: 'Are you sure you would like to delete this template?',\n },\n label: 'Delete',\n },\n );\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n}\n","<fs-list [config]=\"config\">\n <fs-list-column title=\"File Name\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.filename}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.size | fsFormatBytes}}\n </ng-template>\n </fs-list-column>\n</fs-list>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { switchMap, tap } from 'rxjs/operators';\n\nimport { of } from 'rxjs';\nimport { PreviewComponent } from '../../../../modules/message-preview/components';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { EmailMessageFormats } from '../../consts';\nimport { EmailMessageFormat } from '../../enums';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FormsModule } from '@angular/forms';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatTabGroup, MatTab, MatTabContent } from '@angular/material/tabs';\nimport { FsTabsModule } from '@firestitch/tabs';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { FsLabelModule } from '@firestitch/label';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { FsTextEditorModule } from '@firestitch/text-editor';\nimport { FsHtmlEditorModule, FsHtmlRendererModule } from '@firestitch/html-editor';\nimport { AttachmentsComponent } from '../attachments/attachments.component';\nimport { MatButton } from '@angular/material/button';\n\n\n@Component({\n templateUrl: './message.component.html',\n styleUrls: ['./message.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FormsModule,\n FsFormModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatTabGroup,\n FsTabsModule,\n MatTab,\n MatTabContent,\n MatFormField,\n MatLabel,\n MatInput,\n FsLabelModule,\n MatSelect,\n MatOption,\n FsTextEditorModule,\n FsHtmlEditorModule,\n FsHtmlRendererModule,\n AttachmentsComponent,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class MessageComponent implements OnInit {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _data = inject(MAT_DIALOG_DATA);\n private _prompt = inject(FsPrompt);\n private _message = inject(FsMessage);\n private _dialog = inject(MatDialog);\n private _cdRef = inject(ChangeDetectorRef);\n\n\n public message;\n public tab = 'general';\n public messageTemplates = [];\n public emailMessageFormats = EmailMessageFormats;\n public emailMessageFormat = EmailMessageFormat;\n\n public ngOnInit() {\n this._config.loadMessage(this._data.message)\n .subscribe((message) => {\n this.message = message;\n\n if (this.message.emailMessage && this.message.emailMessage.customize === undefined) {\n this.message.emailMessage.customize = true;\n }\n if (this.message.smsMessage && this.message.smsMessage.customize === undefined) {\n this.message.smsMessage.customize = true;\n }\n\n this.message.reference = String(message.tag)\n .toLocaleLowerCase()\n .split('_')\n .map((item: string) => item.charAt(0).toUpperCase() + item.slice(1))\n .join('');\n\n this._cdRef.markForCheck();\n });\n\n this._config.loadMessageTemplates()\n .subscribe((data) => {\n this.messageTemplates = data.data;\n this._cdRef.markForCheck();\n });\n }\n\n public save = () => {\n return this._config.saveMessage(this.message)\n .pipe(\n tap(() => {\n this._message.success('Saved Changes');\n })\n );\n }\n\n public openPreview(): void {\n const emailMessage = this.message.emailMessage;\n let html = emailMessage.customize ? emailMessage.body : this.message.defaultEmailBody;\n let styles = emailMessage.styles || '';\n\n if (emailMessage.messageTemplateId) {\n const messageTemplate = this.messageTemplates\n .find((item) => {\n return emailMessage.messageTemplateId === item.id;\n });\n\n if (messageTemplate) {\n html = messageTemplate.content.replace('{$content}', html);\n styles = `${messageTemplate.styles || ''}\\n\\n${styles}`;\n }\n }\n\n this._dialog.open(PreviewComponent, {\n data: {\n styles,\n html,\n },\n width: '95%'\n });\n }\n\n public sendTest(type) {\n of(true)\n .pipe(\n switchMap(() => {\n return type === 'email' ? this._config.getTestEmail() : of('');\n }),\n switchMap((default_) => {\n const typeName = type === 'email' ? 'an email' : 'phone number';\n\n return this._prompt.input({\n label: `Please enter ${typeName} to send test to`,\n title: 'Send Test',\n commitLabel: 'Send',\n default: default_,\n required: true\n })\n })\n )\n .subscribe((value: string) => {\n this._config.testMessage(this.message, value, type)\n .subscribe(() => {\n this._message.success('Test Sent');\n });\n });\n }\n}\n","<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"message\"\n [confirmTabs]=\"false\">\n @if (message) {\n <fs-dialog>\n <div mat-dialog-title>\n Edit Message\n </div>\n <mat-dialog-content>\n <mat-tab-group\n fsTabs\n [(selected)]=\"tab\">\n <mat-tab\n label=\"General\"\n name=\"general\">\n <ng-template matTabContent>\n <div class=\"fs-column\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.name\"\n name=\"Name\"\n required>\n </mat-form-field>\n <fs-label-field>\n <fs-label>\n Reference\n </fs-label>\n {{ message.reference }}\n </fs-label-field>\n <mat-form-field>\n <mat-label>\n Description\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.description\"\n name=\"description\">\n </mat-form-field>\n @if (message.emailMessage) {\n <div class=\"fs-row.gap-sm.wrap\">\n <mat-form-field>\n <mat-label>\n From Email\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.fromEmail\"\n name=\"from_email\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n From Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.fromName\"\n name=\"from_name\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Reply To\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.replyEmail\"\n name=\"reply_to\">\n </mat-form-field>\n </div>\n <div class=\"fs-row.gap-sm.wrap\">\n <mat-form-field>\n <mat-label>\n To\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.toRecipients\"\n name=\"to\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n CC\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.ccRecipients\"\n name=\"cc\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n BCC\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.bccRecipients\"\n name=\"bcc\">\n </mat-form-field>\n </div>\n }\n </div>\n </ng-template>\n </mat-tab>\n @if (message.emailMessage) {\n <mat-tab\n label=\"Email Message\"\n name=\"email\">\n <ng-template matTabContent>\n <div class=\"fs-column\">\n <div class=\"fs-row.gap-sm\">\n <mat-form-field>\n <mat-label>\n Customize Message\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.emailMessage.customize\"\n name=\"customizeEmail\">\n <mat-option [value]=\"true\">\n Yes\n </mat-option>\n <mat-option [value]=\"false\">\n No\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Format\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.emailMessage.format\"\n name=\"format\">\n @for (item of emailMessageFormats; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Template\n </mat-label>\n <mat-select\n [(ngModel)]=\"message.emailMessage.messageTemplateId\"\n name=\"template\">\n <mat-option [value]=\"null\">\n None\n </mat-option>\n @for (item of messageTemplates; track item) {\n <mat-option\n [value]=\"item.id\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (message.emailMessage.customize) {\n <mat-form-field>\n <mat-label>\n Subject\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.subject\"\n name=\"name\"\n required>\n </mat-form-field>\n <div [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n @if (message.emailMessage.format===emailMessageFormat.HTML) {\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\"\n [config]=\"{ language: 'html '}\">\n </fs-text-editor>\n }\n @if (message.emailMessage.format===emailMessageFormat.RichText) {\n <fs-html-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\">\n </fs-html-editor>\n }\n @if (message.emailMessage.format===emailMessageFormat.Text) {\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"emailMessageBody\"\n [config]=\"{ language: 'text' }\">\n </fs-text-editor>\n }\n </ng-template>\n </mat-tab>\n @if (message.emailMessage.format===emailMessageFormat.HTML || message.emailMessage.format===emailMessageFormat.RichText) {\n <mat-tab\n label=\"Styles\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.styles\"\n name=\"styles\"\n [config]=\"{ language: 'scss' }\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n }\n </mat-tab-group>\n </div>\n }\n @if (!message.emailMessage.customize) {\n <fs-label-field>\n <fs-label>\n Subject\n </fs-label>\n {{ message.defaultEmailSubject }}\n </fs-label-field>\n <div>\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"email-body-html-default\">\n @if (message.emailMessage.format===emailMessageFormat.RichText || message.emailMessage.format===emailMessageFormat.HTML) {\n <fs-html-renderer\n [html]=\"message.defaultEmailBody\">\n </fs-html-renderer>\n }\n </div>\n @if (message.emailMessage.format===emailMessageFormat.Text) {\n <div\n class=\"email-body-text-default\"\n >\n {{ message.defaultEmailBody }}\n </div>\n }\n </fs-label-field>\n </div>\n }\n </div>\n </ng-template>\n </mat-tab>\n }\n @if (!!message.smsMessage) {\n <mat-tab\n label=\"SMS Message\"\n name=\"sms\">\n <ng-template matTabContent>\n <mat-form-field>\n <mat-label>\n Customize Message\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.smsMessage.customize\"\n name=\"customizeSms\">\n <mat-option [value]=\"true\">\n Yes\n </mat-option>\n <mat-option [value]=\"false\">\n No\n </mat-option>\n </mat-select>\n </mat-form-field>\n @if (message.smsMessage.customize) {\n <div\n [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.smsMessage.message\"\n name=\"smsMessageMessage\"\n [config]=\"{ language: 'text '}\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n }\n @if (!message.smsMessage.customize) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div class=\"content\">\n {{ message.defaultSmsMessage }}\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n }\n @if (message.emailMessage) {\n <mat-tab\n label=\"Attachments\"\n name=\"attachments\">\n <ng-template matTabContent>\n <fs-app-message-attachments [message]=\"message\"></fs-app-message-attachments>\n </ng-template>\n </mat-tab>\n }\n @if (message.variables) {\n <mat-tab\n label=\"Variables\"\n >\n <ng-template matTabContent>\n @for (variable of message.variables; track variable) {\n <div\n class=\"variable\">\n {{ variable.name }}\n </div>\n }\n </ng-template>\n </mat-tab>\n }\n <mat-tab label=\"Defaults\">\n <ng-template matTabContent>\n @if (message.emailMessage) {\n @if (message.emailMessage && message.smsMessage) {\n <h2>\n Email\n </h2>\n }\n <fs-label-field>\n <fs-label>\n Subject\n </fs-label>\n <div class=\"content\">\n {{ message.defaultEmailSubject }}\n </div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"content\">\n {{ message.defaultEmailBody }}\n </div>\n </fs-label-field>\n }\n @if (message.smsMessage) {\n @if (message.emailMessage && message.smsMessage) {\n <h2>\n SMS\n </h2>\n }\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"content\">\n {{ message.defaultSmsMessage }}\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n @if (tab==='email' || tab==='sms' || tab==='general') {\n <button\n mat-button\n color=\"primary\">\n Save\n </button>\n @if (tab==='email') {\n <button\n mat-button\n type=\"button\"\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('email')\"\n type=\"button\">\n Send Test Email\n </button>\n }\n @if (tab==='sms') {\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('sms')\"\n type=\"button\">\n Send Test SMS\n </button>\n }\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Cancel\n </button>\n } @else {\n <button\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Close\n </button>\n }\n </mat-dialog-actions>\n </fs-dialog>\n }\n</form>","import { Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { takeUntil, map } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { ItemType } from '@firestitch/filter';\n\nimport { MessageComponent } from '../message';\nimport { EmailMessageFormats } from '../../consts';\nimport { indexNameValue } from '../../../../helpers';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\n\n@Component({\n selector: 'fs-app-messages',\n templateUrl: './messages.component.html',\n standalone: true,\n imports: [FsListModule]\n})\nexport class MessagesComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _dialog = inject(MatDialog);\n\n\n @ViewChild(FsListComponent, { static: true })\n public list: FsListComponent = null;\n\n public config: FsListConfig = null;\n public emailMessageFormats = {};\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n this.emailMessageFormats = indexNameValue(EmailMessageFormats);\n\n this.config = {\n filters: [\n {\n name: 'keyword',\n type: ItemType.Keyword,\n label: 'Search'\n }\n ],\n fetch: query => {\n return this._config.loadMessages(query)\n .pipe(\n map(response => {\n return ({ data: response.data, paging: response.paging })\n })\n );\n }\n }\n }\n\n public open(message) {\n const dialogRef = this._dialog.open(MessageComponent, {\n data: {\n message: message,\n },\n width: '85%'\n });\n\n dialogRef.afterClosed()\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe(() => {\n this.list.reload();\n })\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column\n title=\"Name\"\n name=\"name\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email format\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessage) {\n {{ emailMessageFormats[row.emailMessage.format] }}\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email message template\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessage) {\n {{ row.emailMessage.messageTemplate?.name || 'None' }}\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Channels\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-delimit\">\n @if (row.emailMessage) {\n <span>\n Email\n </span>\n }\n @if (row.smsMessage) {\n <span>\n SMS\n </span>\n }\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Customized message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessage?.customize || row.smsMessage?.customize) {\n @if (row.emailMessage?.customize) {\n {{ row.emailMessage.customize ? 'Email' : '' }}\n }\n @if (row.smsMessage?.customize) {\n {{ row.smsMessage.customize ? 'SMS' : '' }}\n }\n } @else {\n None\n }\n </ng-template>\n </fs-list-column>\n</fs-list>","export enum MessageQueueState {\n Sent = 'S',\n PartiallySent = 'P',\n Sending = 'E',\n Queued = 'Q',\n Canceled = 'C',\n InvalidRecipients = 'I',\n Failed = 'F'\n}","import { MessageQueueState } from '../enums/message-queue-state.enum';\n\n\nexport const MessageQueueStates = [\n { name: 'Sent', value: MessageQueueState.Sent },\n { name: 'Partially Sent', value: MessageQueueState.PartiallySent },\n { name: 'Sending', value: MessageQueueState.Sending },\n { name: 'Queued', value: MessageQueueState.Queued },\n { name: 'Canceled', value: MessageQueueState.Canceled },\n { name: 'Invalid Recipients', value: MessageQueueState.InvalidRecipients },\n { name: 'Failed', value: MessageQueueState.Failed }\n];\n","export enum EmailMessageQueueFormat {\n Text = 'T',\n HTML = 'H',\n RichText = 'R'\n}\n","export enum MessageQueueType {\n Sms = 'S',\n Email = 'E'\n}\n","export enum MessageQueueEventType {\n Click = 'click',\n Open = 'open',\n}\n","import { MessageQueueEventType } from \"../enums\";\n\n\nexport const MessageQueueEventTypes = [\n { name: 'Open', value: MessageQueueEventType.Open },\n { name: 'Click', value: MessageQueueEventType.Click },\n];\n","import {\n ChangeDetectionStrategy,\n Component, Input, OnInit,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\n\n\n@Component({\n selector: 'app-recipient',\n templateUrl: './recipient.component.html',\n styleUrls: ['./recipient.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [MatIcon, MatTooltip],\n})\nexport class RecipientComponent implements OnInit {\n \n @Input() name;\n @Input() state;\n \n public icon;\n\n public ngOnInit(): void {\n \n const icons = {\n 'S': { name: 'check_circle', tooltip: 'Sent' },\n 'E': { name: 'offline_bolt', tooltip: 'Sending' },\n 'F': { name: 'info', tooltip: 'Failed' },\n }\n\n this.icon = icons[this.state];\n }\n\n}\n","<span class=\"recipient\">\n <span class=\"name\">{{name}}</span>\n @if (icon) {\n <mat-icon [class]=\"'state-' + state\" [matTooltip]=\"icon.tooltip\">{{icon.name}}</mat-icon>\n }\n</span>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsMessage } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport anchorme from 'anchorme';\n\nimport { indexNameValue } from '../../../../helpers';\nimport { MessageComponent } from '../../../../modules/messages/components';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { ForwardMessageQueue, LoadMessage, ResendMessageQueue } from '../../../app-message/types';\nimport { MessageQueueStates } from '../../consts';\nimport { MessageQueueEventTypes } from '../../consts/message-queue-event-type.const';\nimport { EmailMessageQueueFormat, MessageQueueEventType, MessageQueueType } from '../../enums';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatTabGroup, MatTab, MatTabContent } from '@angular/material/tabs';\nimport { FsLabelModule } from '@firestitch/label';\nimport { RecipientComponent } from '../recipient/recipient.component';\nimport { FsIFrameModule } from '@firestitch/iframe';\nimport { FsDateModule } from '@firestitch/date';\nimport { MatButton } from '@angular/material/button';\nimport { FsFormModule } from '@firestitch/form';\n\n\n@Component({\n templateUrl: './queue.component.html',\n styleUrls: ['./queue.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsDialogModule,\n CdkScrollable,\n MatDialogContent,\n MatTabGroup,\n MatTab,\n MatTabContent,\n FsLabelModule,\n RecipientComponent,\n FsIFrameModule,\n FsListModule,\n FsDateModule,\n MatDialogActions,\n MatButton,\n FsFormModule,\n MatDialogClose,\n ],\n})\nexport class QueueComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _data = inject(MAT_DIALOG_DATA);\n private _message = inject(FsMessage);\n private _prompt = inject(FsPrompt);\n private _dialog = inject(MatDialog);\n private _cdRef = inject(ChangeDetectorRef);\n\n\n @ViewChild('logList')\n public logList: FsListComponent;\n\n public messageQueue;\n public loadMessage: LoadMessage;\n public resendMessageQueue: ResendMessageQueue;\n public forwardMessageQueue: ForwardMessageQueue;\n public messageQueueRecipients = {};\n public emailMessageQueueFormat = EmailMessageQueueFormat;\n public messageQueueStates;\n public logConfig: FsListConfig;\n public attachmentConfig: FsListConfig;\n public eventConfig: FsListConfig;\n public MessageQueueEventTypes = indexNameValue(MessageQueueEventTypes);\n public MessageQueueEventType = MessageQueueEventType;\n\n private _destroy$ = new Subject();\n\n public ngOnInit() {\n this.messageQueueStates = indexNameValue(MessageQueueStates);\n this.resendMessageQueue = this._config.resendMessageQueue;\n this.forwardMessageQueue = this._config.forwardMessageQueue;\n\n this._config.loadMessageQueue(this._data.messageQueueId)\n .subscribe((messageQueue) => {\n this.messageQueue = messageQueue;\n\n if (this.messageQueue.emailMessageQueue) {\n let body = this.messageQueue.emailMessageQueue.body;\n if (this.messageQueue.emailMessageQueue.format === EmailMessageQueueFormat.HTML) {\n try {\n const doc = new DOMParser().parseFromString(body, 'text/html');\n\n doc.querySelectorAll('a').forEach((el) => {\n el.setAttribute('target', '_blank');\n });\n\n body = doc.documentElement.innerHTML;\n\n } catch (e) {\n }\n } else {\n body = this.anchorMe(body);\n }\n\n this.messageQueue.emailMessageQueue.body = body;\n\n this.messageQueue.emailMessageQueue.replyEmail =\n (this.messageQueue.emailMessageQueue.replyEmail || [])\n .map((item) => typeof item === 'object' && item !== null ? item.email : item);\n }\n\n if (this.messageQueue.smsMessageQueue) {\n this.messageQueue.smsMessageQueue.body = this.anchorMe(this.messageQueue.smsMessageQueue.body);\n }\n\n this.messageQueueRecipients = this.messageQueue.messageQueueRecipients\n .reduce((accum, messageQueueRecipient) => {\n accum[messageQueueRecipient.recipient] = messageQueueRecipient.state;\n\n return accum;\n }, {});\n\n this._setLogsConfig(messageQueue);\n this._setAttachmentsConfig(messageQueue);\n this._setEventsConfig(messageQueue);\n this._cdRef.markForCheck();\n });\n }\n\n public anchorMe(input) {\n return anchorme({\n input,\n options: {\n attributes: {\n target: \"_blank\",\n }\n }\n });\n }\n\n public openMessage(message) {\n this._dialog.open(MessageComponent, {\n data: {\n message: message,\n },\n width: '85%'\n });\n }\n\n public resend() {\n this._prompt.confirm({\n title: 'Confirm',\n template: 'Are you sure you would like to resend this message?'\n }).subscribe(() => {\n this.resendMessageQueue(this.messageQueue)\n .subscribe(messageQueue => {\n Object.assign(this.messageQueue, messageQueue);\n this._cdRef.markForCheck();\n this._message.success('Successfully resent');\n\n if (this.logList) {\n this.logList.reload();\n }\n });\n });\n }\n\n public forward() {\n const typeName = this.messageQueue.type === MessageQueueType.Email ? 'an email' : 'a phone number';\n\n this._prompt.input({\n label: `Please enter ${typeName} to forward to`,\n title: 'Forward Message',\n commitLabel: 'Forward',\n required: true\n }).subscribe((value: string) => {\n if (value) {\n this.forwardMessageQueue(this.messageQueue, value)\n .subscribe(messageQueue => {\n this.messageQueue = {\n ...this.messageQueue,\n messageQueue,\n };\n this._message.success('Successfully forwarded');\n this._cdRef.markForCheck();\n \n if (this.logList) {\n this.logList.reload();\n }\n });\n }\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _setLogsConfig(messageQueue) {\n this.logConfig = {\n loadMore: true,\n queryParam: false,\n fetch: query => {\n return this._config.loadLogs(messageQueue, query);\n }\n }\n }\n\n private _setEventsConfig(messageQueue) {\n this.eventConfig = {\n loadMore: true,\n queryParam: false,\n fetch: (query) => {\n return this._config.loadMessageQueueEvents(messageQueue, query);\n }\n }\n }\n\n private _setAttachmentsConfig(messageQueue) {\n this.attachmentConfig = {\n queryParam: false,\n fetch: query => {\n return this._config.loadMessageQueueAttachments(messageQueue, query)\n .pipe(\n map(response => ({\n data: response.data.map(value => {\n value.prettyFilesize = this._prettyFilesize(value.filesize);\n return value;\n }), paging: response.paging\n }))\n );\n }\n };\n\n if (this._config.downloadMessageQueueAttachment) {\n this.attachmentConfig.rowActions = [\n {\n click: (messageAttachment) => {\n this._config.downloadMessageQueueAttachment(messageAttachment, this.messageQueue);\n },\n label: 'Download',\n }\n ];\n }\n }\n\n private _prettyFilesize(bytes) {\n if (bytes === 0) { return '0.00 B'; }\n const e = Math.floor(Math.log(bytes) / Math.log(1024));\n return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';\n }\n}\n","<fs-dialog *fsSkeleton=\"messageQueue\">\n <fs-dialog-title>\n Message queue\n <ng-template fsDialogSubtitle>\n ID: {{ messageQueue.id }}\n </ng-template>\n </fs-dialog-title>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-lg.wrap\">\n @if (messageQueue.emailMessageQueue) {\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.toRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n @if (messageQueue.emailMessageQueue.ccRecipients.length) {\n <fs-label-field>\n <fs-label>\n CC\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.ccRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.bccRecipients.length) {\n <fs-label-field>\n <fs-label>\n BCC\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.bccRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail) {\n <fs-label-field>\n <fs-label>\n From\n </fs-label>\n @if (messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail) {\n {{ messageQueue.emailMessageQueue.fromName }}\n } @else {\n {{ messageQueue.emailMessageQueue.fromName }}\n @if (messageQueue.emailMessageQueue.fromEmail) {\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n }\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length) {\n <fs-label-field>\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n }\n }\n @if (messageQueue.smsMessageQueue) {\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient\n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient>\n </fs-label-field>\n @if (messageQueue.smsMessageQueue.fromNumber) {\n <fs-label-field>\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n }\n }\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ messageQueue.scheduledDate | fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ messageQueueStates[messageQueue.state] }}\n </fs-label-field>\n @if (messageQueue.message) {\n <fs-label-field>\n <fs-label>\n Message Type\n </fs-label>\n @if (loadMessage) {\n <a\n (click)=\"openMessage(messageQueue.message)\"\n >\n {{ messageQueue.message.name }}\n </a>\n } @else {\n {{ messageQueue.message.name }}\n }\n </fs-label-field>\n }\n </div>\n @if (messageQueue.emailMessageQueue) {\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{ messageQueue.emailMessageQueue.subject }}\n </fs-label-field>\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n @if (messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text) {\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n }\n @if (messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText) {\n <fs-iframe\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n }\n </fs-label-field>\n }\n @if (messageQueue.smsMessageQueue) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list\n [config]=\"logConfig\"\n #logList>\n <fs-list-column title=\"Message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.filename }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.prettyFilesize }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.messageQueueRecipient.recipient }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ MessageQueueEventTypes[row.type] }}\n @if (row.type === MessageQueueEventType.Click) {\n <div\n class=\"small\"\n >\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createDate | fsDateFormat: 'date-time-yearless' }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n @if (resendMessageQueue) {\n <button\n mat-button\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n }\n @if (forwardMessageQueue) {\n <button\n mat-button\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n }\n </mat-dialog-actions>\n</fs-dialog>","import { Injectable, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\n\nimport { Observable } from 'rxjs';\n\nimport { QueueComponent } from '../components/queue/queue.component';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsMessageQueueService {\n private _dialog = inject(MatDialog);\n\n\n public openMessageQueue(messageQueueId: number, options: any = {}): Observable<any> {\n return this._dialog.open(QueueComponent, {\n ...options,\n data: {\n messageQueueId,\n },\n width: options.width || '85%',\n })\n .afterClosed();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe({\n name: 'truncate',\n standalone: true,\n})\nexport class TruncatePipe implements PipeTransform {\n transform(value: string, limit = 25, completeWords = false, ellipsis = '...') {\n value = value || '';\n\n if (value.length < limit) {\n return `${value.substr(0, limit)}`;\n }\n\n if (completeWords) {\n limit = value.substr(0, limit).lastIndexOf(' ');\n }\n\n return `${value.substr(0, limit)}${ellipsis}`;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\n\nimport { ItemType, TextItem } from '@firestitch/filter';\nimport { FsListActionSelected, FsListComponent, FsListConfig, PaginationStrategy, FsListModule } from '@firestitch/list';\nimport { SelectionActionType } from '@firestitch/selection';\nimport { FsStore } from '@firestitch/store';\n\nimport { Subject } from 'rxjs';\nimport { filter, map, takeUntil, tap } from 'rxjs/operators';\n\nimport { isAfter } from 'date-fns';\n\nimport { indexNameValue } from '../../../../helpers';\nimport { MessageQueuesConfig } from '../../../../interfaces';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { MessageQueueStates } from '../../consts';\nimport { MessageQueueType } from '../../enums';\nimport { MessageQueueState } from '../../enums/message-queue-state.enum';\nimport { FsMessageQueueService } from '../../services/message-queue.service';\nimport { FsMessageModule } from '@firestitch/message';\nimport { MatAnchor } from '@angular/material/button';\nimport { FsFormModule } from '@firestitch/form';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { RecipientComponent } from '../recipient/recipient.component';\nimport { FsDateModule } from '@firestitch/date';\nimport { TruncatePipe } from '../../pipes/truncate.pipe';\n\n\n@Component({\n selector: 'fs-app-message-queues',\n styleUrls: ['./queues.component.scss'],\n templateUrl: './queues.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsMessageModule,\n MatAnchor,\n FsFormModule,\n FsListModule,\n MatIcon,\n MatTooltip,\n RecipientComponent,\n FsDateModule,\n TruncatePipe,\n ],\n})\nexport class QueuesComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _messageQueueService = inject(FsMessageQueueService);\n private _cdRef = inject(ChangeDetectorRef);\n private _store = inject(FsStore);\n\n\n @ViewChild(FsListComponent, { static: true })\n public list: FsListComponent = null;\n\n @Input() public query = {};\n\n @Input() public type: MessageQueueType;\n @Input() public config: MessageQueuesConfig;\n\n public listConfig: FsListConfig = null;\n public messageQueueStates = {};\n public MessageQueueState = MessageQueueState;\n public webHookEnabled;\n\n private _destroy$ = new Subject();\n\n public ngOnInit() {\n this.messageQueueStates = indexNameValue(MessageQueueStates);\n this._initConfig();\n this.initList();\n this.initWebhook();\n }\n\n public enableWebhook() {\n this._config.createWebhook()\n .subscribe(() => {\n this.initWebhook();\n });\n }\n\n public initWebhook() {\n const domain = document.location.hostname;\n\n if(domain === 'localhost' || domain === '[::1]') {\n return;\n }\n\n this._config.loadWebhooks({ domain })\n .pipe(\n filter(() => {\n return !this._store.get('messagesWebhookEnabled');\n }),\n )\n .subscribe((webhooks) => {\n this._cdRef.markForCheck();\n this.webHookEnabled = webhooks\n .some((webhook) => {\n const url = new URL(webhook.url);\n\n return url.host === domain;\n });\n\n this._store.set('messagesWebhookEnabled', this.webHookEnabled);\n });\n }\n\n public initList() {\n this.listConfig = {\n filters: [\n {\n name: 'keyword',\n type: ItemType.Keyword,\n label: 'Search',\n change: (item: TextItem) => {\n if(String(item.value ?? '').length) {\n this.list.filterRef\n .updateSort({\n sortBy: 'relevance',\n });\n } else {\n this.list.filterRef\n .updateSort({\n sortBy: 'created_date',\n sortDirection: 'desc',\n });\n }\n },\n },\n {\n name: 'state',\n type: ItemType.Select,\n label: 'Status',\n values: () => {\n return MessageQueueStates;\n },\n },\n {\n name: 'date',\n type: ItemType.DateRange,\n label: ['From Date', 'To Date'],\n },\n {\n name: 'messageId',\n type: ItemType.AutoCompleteChips,\n label: 'Message type',\n values: (query) => {\n return this._config\n .loadMessages({ keyword: query, limit: 50 })\n .pipe(\n map((response) => {\n return response.data.map((item) => ({ name: item.name, value: item.id }));\n }),\n );\n },\n },\n ...(this.config?.filters || []),\n ],\n paging: {\n strategy: PaginationStrategy.Many,\n },\n sorts: [\n {\n value: 'relevance',\n name: 'Relevance',\n direction: 'desc',\n },\n ],\n sort: {\n value: 'created_date',\n direction: 'desc',\n },\n fetch: (query) => {\n query = {\n ...query,\n ...this.query,\n type: this.type,\n messageQueueAttachmentCounts: true,\n emailMessageQueues: true,\n emailMessageQueueBodies: false,\n smsMessageQueues: true,\n };\n\n return this._config.loadMessageQueues(query)\n .pipe(\n map((response) => ({\n data: response.data\n .map((messageQueue) => {\n return {\n ...messageQueue,\n scheduled: messageQueue.state === MessageQueueState.Queued && isAfter(messageQueue.scheduledDate, new Date()),\n messageQueueRecipients: messageQueue.messageQueueRecipients\n .reduce((accum, messageQueueRecipient) => {\n accum[messageQueueRecipient.recipient] = messageQueueRecipient.state;\n\n return accum;\n }, {}),\n };\n }), paging: response.paging,\n })),\n );\n },\n };\n\n if (this._config.bulkMessageQueues) {\n this.listConfig.selection = {\n selectAll: false,\n actions: [\n {\n type: SelectionActionType.Action,\n name: 'queue',\n label: 'Queue',\n },\n {\n type: SelectionActionType.Action,\n name: 'resend',\n label: 'Resend',\n },\n {\n type: SelectionActionType.Action,\n name: 'cancel',\n label: 'Cancel',\n },\n ],\n actionSelected: (actionSelected: FsListActionSelected) => {\n return this._config.bulkMessageQueues(actionSelected.action.name, actionSelected.selected)\n .pipe(\n tap(() => {\n this.list.reload();\n }),\n );\n },\n };\n }\n\n this.config.filters.push({\n name: 'messageId',\n type: ItemType.AutoCompleteChips,\n label: 'Message Type',\n values: (keyword) => {\n return this._config\n .loadMessages({ keyword, limit: 50 })\n .pipe(\n map((response) => {\n return response.data.map((item) => ({ name: item.name, value: item.id }));\n }),\n );\n },\n });\n }\n\n public open(messageQueue) {\n this._messageQueueService.openMessageQueue(messageQueue.id)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.list.reload();\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _initConfig() {\n this.config = {\n filters: [],\n ...this.config,\n };\n }\n}\n","@if (webHookEnabled === false) {\n <fs-message-info>\n <div class=\"fs-row\">\n <span class=\"fs-flex\">\n The webhook which provides email delivery confirmations is not enabled.\n </span>\n <a\n (click)=\"enableWebhook()\"\n mat-raised-button>\n Enable\n </a>\n </div>\n </fs-message-info>\n}\n<fs-list\n [config]=\"listConfig\"\n #list>\n <fs-list-column\n title=\"Message\"\n name=\"subject\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessageQueue) {\n <a (click)=\"open(row)\">\n {{ row.emailMessageQueue.subject|truncate:100 }}\n </a>\n @if (row.messageQueueAttachmentCount) {\n <mat-icon\n class=\"attachment-icon\"\n [matTooltip]=\"row.messageQueueAttachmentCount + ' Attachment(s)'\">\n attach_file\n </mat-icon>\n }\n }\n @if (row.smsMessageQueue) {\n <a (click)=\"open(row)\">\n {{ row.smsMessageQueue.body|truncate:100 }}\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Recipients\"\n class=\"col-recipients\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessageQueue) {\n @if (row.emailMessageQueue.toRecipients.length) {\n @for (recipient of row.emailMessageQueue.toRecipients; track recipient) {\n <div\n class=\"small\"\n >\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n }\n } @else {\n <app-recipient\n class=\"small\"\n [state]=\"MessageQueueState.Failed\"\n name=\"Unspecified\">\n </app-recipient>\n }\n @for (recipient of row.emailMessageQueue.ccRecipients; track recipient) {\n <div\n class=\"small\"\n >\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n }\n @for (recipient of row.emailMessageQueue.bccRecipients; track recipient) {\n <div\n class=\"small\"\n >\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n }\n }\n @if (row.smsMessageQueue) {\n @if (row.smsMessageQueue.toNumber) {\n <app-recipient\n class=\"small\"\n [state]=\"row.state\"\n [name]=\"row.smsMessageQueue.toNumber\">\n </app-recipient>\n } @else {\n <app-recipient\n class=\"small\"\n [state]=\"MessageQueueState.Failed\"\n name=\"Unspecified\">\n </app-recipient>\n }\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Status\"\n class=\"col-state\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.scheduled) {\n Scheduled\n <div class=\"small\">\n {{ row.scheduledDate | fsDateFormat: 'date-time' }}\n </div>\n } @else {\n <span [class]=\"'state-' + row.state\">\n {{ messageQueueStates[row.state] }}\n </span>\n }\n <ng-template #state>\n <span [class]=\"'state-' + row.state\">\n {{ messageQueueStates[row.state] }}\n </span>\n </ng-template>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Date\"\n name=\"created_date\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createdDate | fsDateFormat: 'date-time-yeardiff' }}\n </ng-template>\n </fs-list-column>\n</fs-list>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport anchorme from 'anchorme';\n\n\n@Pipe({\n name: 'linkify',\n standalone: true\n})\nexport class LinkifyPipe implements PipeTransform {\n transform(input: string): string {\n return anchorme({\n input,\n options: {\n attributes: {\n target: \"_blank\",\n }\n }\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsIFrameModule } from '@firestitch/iframe';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsListModule } from '@firestitch/list';\nimport { FsMessageModule } from '@firestitch/message';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\n\nimport { QueueComponent } from './components/queue/queue.component';\nimport { QueuesComponent } from './components/queues/queues.component';\nimport { RecipientComponent } from './components/recipient/recipient.component';\nimport { LinkifyPipe } from './pipes/linkify.pipe';\nimport { TruncatePipe } from './pipes/truncate.pipe';\nimport { FsMessageQueueService } from './services/message-queue.service';\n\n\n@NgModule({\n imports: [\n RouterModule,\n FormsModule,\n CommonModule,\n MatTooltipModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatTabsModule,\n FsListModule,\n FsDialogModule,\n FsLabelModule,\n FsDateModule,\n FsSkeletonModule,\n FsFormModule,\n FsIFrameModule,\n FsMessageModule,\n QueuesComponent,\n QueueComponent,\n LinkifyPipe,\n TruncatePipe,\n RecipientComponent,\n ],\n exports: [\n QueuesComponent,\n QueueComponent,\n ],\n providers: [\n FsMessageQueueService,\n ],\n})\nexport class FsAppMessageQueuesModule { }\n","import { ChangeDetectionStrategy, Component, OnInit, ViewChild, inject } from '@angular/core';\r\n\r\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\r\nimport { FsMessage } from '@firestitch/message';\r\n\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\r\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { FsDateModule } from '@firestitch/date';\r\n\r\n\r\n@Component({\n selector: 'fs-app-message-webhooks',\n templateUrl: './webhooks.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsDateModule],\n})\r\nexport class WebhooksComponent implements OnInit {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _message = inject(FsMessage);\n\r\n\r\n @ViewChild(FsListComponent)\r\n public list: FsListComponent;\r\n\r\n public listConfig: FsListConfig;\r\n\r\n public ngOnInit(): void {\r\n this.listConfig = {\r\n paging: false,\r\n actions: [\r\n {\r\n click: () => {\r\n this._config.createWebhook()\r\n .subscribe(() => {\r\n this._message.success('Created webhook');\r\n this.list.reload();\r\n });\r\n },\r\n label: 'Create',\r\n },\r\n ],\r\n rowActions: [\r\n {\r\n click: (webhook) => {\r\n this._config.deleteWebhook(webhook)\r\n .subscribe(() => {\r\n this._message.success('Deleted webhook');\r\n this.list.reload();\r\n });\r\n },\r\n label: 'Delete',\r\n },\r\n ],\r\n fetch: () => {\r\n return this._config.loadWebhooks({\r\n domain: window.location.hostname,\r\n })\r\n .pipe(\r\n map((webhooks) => ({ data: webhooks })),\r\n );\r\n },\r\n };\r\n }\r\n}\r\n","<fs-list [config]=\"listConfig\">\r\n <fs-list-column title=\"URL\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.url}}\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column title=\"Created\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.createDate | fsDate}}\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>","import { NgModule } from '@angular/core';\n\nimport { WebhooksComponent } from './components/webhooks/webhooks.component';\n\n@NgModule({\n imports: [WebhooksComponent],\n exports: [WebhooksComponent],\n})\nexport class FsAppMessageWebhooksModule {}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatTab, MatTabContent, MatTabGroup } from '@angular/material/tabs';\n\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule, SubmitEvent } from '@firestitch/form';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsMessage } from '@firestitch/message';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsTextEditorConfig, FsTextEditorModule } from '@firestitch/text-editor';\n\nimport { tap } from 'rxjs/operators';\n\nimport { PreviewComponent } from '../../../../modules/message-preview/components';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\n\n\n@Component({\n templateUrl: './template.component.html',\n styleUrls: ['./template.component.scss'],\n standalone: true,\n imports: [FsSkeletonModule, FormsModule, FsFormModule, FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, MatFormField, MatLabel, MatInput, MatTabGroup, MatTab, MatTabContent, FsLabelModule, FsTextEditorModule, MatDialogActions, MatButton, MatDialogClose],\n})\nexport class TemplateComponent implements OnInit {\n\n public messageTemplate; \n public htmlEditorconfig: FsTextEditorConfig = {\n language: 'html',\n insertSpaces: true,\n tabSize: 2,\n };\n public cssEditorconfig: FsTextEditorConfig = {\n language: 'scss',\n insertSpaces: true,\n tabSize: 2,\n };\n \n private _data = inject(MAT_DIALOG_DATA);\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _dialogRef = inject<MatDialogRef<TemplateComponent>>(MatDialogRef);\n private _message = inject(FsMessage);\n private _dialog = inject(MatDialog);\n\n\n public ngOnInit(): void {\n if (this._data.messageTemplate.id) {\n this._config.loadMessageTemplate(this._data.messageTemplate)\n .subscribe((messageTemplate) => {\n this.messageTemplate = messageTemplate;\n });\n } else {\n this.messageTemplate = {};\n }\n }\n\n public openPreview(): void {\n this._dialog.open(PreviewComponent, {\n data: {\n styles: this.messageTemplate.styles,\n html: this.messageTemplate.content,\n },\n width: '95%',\n });\n }\n\n public save = (event: SubmitEvent) => {\n return this._config.saveMessageTemplate(this.messageTemplate)\n .pipe(\n tap((messageTemplate) => {\n this._message.success('Saved Changes');\n if (event.submitter === 'save-close') {\n this._dialogRef.close(messageTemplate);\n }\n }),\n );\n };\n}\n","<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"messageTemplate\"\n [confirmTabs]=\"false\">\n @if (messageTemplate) {\n <fs-dialog>\n <div mat-dialog-title>\n Message Template\n </div>\n <mat-dialog-content>\n <div class=\"fs-column\">\n <mat-form-field class=\"name\">\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"messageTemplate.name\"\n required\n name=\"name\">\n </mat-form-field>\n <div [@.disabled]=\"true\">\n <mat-tab-group\n mat-align-tabs=\"start\"\n [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <div class=\"content\">\n <fs-label-field>\n <fs-text-editor\n [(ngModel)]=\"messageTemplate.content\"\n name=\"body\"\n [config]=\"htmlEditorconfig\">\n </fs-text-editor>\n <fs-label-message>\n &#123;$content&#125; will be replaced with the message content.\n </fs-label-message>\n </fs-label-field>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Styles\">\n <ng-template matTabContent>\n <div class=\"styles\">\n <fs-text-editor\n [(ngModel)]=\"messageTemplate.styles\"\n name=\"styles\"\n [config]=\"cssEditorconfig\">\n </fs-text-editor>\n </div>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n name=\"close\">\n Save\n </button>\n <button\n mat-button\n type=\"submit\"\n name=\"save-close\">\n Save & Close\n </button>\n <button\n mat-button\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n }\n</form>","import { Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\n\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport { TemplateComponent } from '../template';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\n\n\n@Component({\n selector: 'fs-app-message-templates',\n templateUrl: './templates.component.html',\n standalone: true,\n imports: [FsListModule]\n})\nexport class TemplatesComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _dialog = inject(MatDialog);\n\n\n @ViewChild(FsListComponent, { static: true }) \n public list: FsListComponent = null;\n\n public config: FsListConfig = null;\n public messageQueueStates = [];\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n this.config = {\n actions: [\n {\n label: 'Create',\n click: () => {\n this.open({});\n }\n }\n ],\n status: false,\n fetch: query => {\n return this._config.loadMessageTemplates(query);\n }\n }\n\n if (this._config.deleteMessageTemplate) {\n this.config.rowActions = [\n {\n click: data => {\n return this._config.deleteMessageTemplate(data);\n },\n remove: {\n title: 'Confirm',\n template: 'Are you sure you would like to delete this template?',\n },\n menu: true,\n label: 'Delete',\n },\n ];\n }\n }\n\n public open(messageTemplate): void {\n const dialogRef = this._dialog.open(TemplateComponent, {\n data: {\n messageTemplate,\n },\n width: '85%',\n });\n\n dialogRef.afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.list.reload();\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n}\n","<fs-list [config]=\"config\">\n <fs-list-column title=\"Name\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"open(row)\">{{row.name}}</a>\n </ng-template>\n </fs-list-column>\n</fs-list>","import { NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { TemplateComponent } from './components/template/template.component';\nimport { TemplatesComponent } from './components/templates/templates.component';\n\n@NgModule({\n imports: [MatDialogModule, TemplatesComponent, TemplateComponent],\n exports: [TemplatesComponent, TemplateComponent],\n})\nexport class FsAppMessageTemplatesModule {}\n","import { NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { MessageComponent } from './components/message/message.component';\nimport { MessagesComponent } from './components/messages/messages.component';\n\n@NgModule({\n imports: [MatDialogModule, MessagesComponent, MessageComponent],\n exports: [MessagesComponent, MessageComponent],\n})\nexport class FsAppMessagesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3","i4","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"firestitch-app-message.mjs","sources":["../../src/app/modules/app-message/app-message.module.ts","../../src/app/helpers/index-name-value.ts","../../src/app/modules/message-preview/components/preview/preview.component.ts","../../src/app/modules/message-preview/components/preview/preview.component.html","../../src/app/modules/app-message/injectors/app-message-config.injector.ts","../../src/app/modules/messages/enums/email-message-format.enum.ts","../../src/app/modules/messages/consts/email-message-formats.const.ts","../../src/app/modules/messages/components/attachments/attachments.component.ts","../../src/app/modules/messages/components/attachments/attachments.component.html","../../src/app/modules/messages/components/message/message.component.ts","../../src/app/modules/messages/components/message/message.component.html","../../src/app/modules/messages/components/messages/messages.component.ts","../../src/app/modules/messages/components/messages/messages.component.html","../../src/app/modules/message-queues/enums/message-queue-state.enum.ts","../../src/app/modules/message-queues/consts/message-queue-states.const.ts","../../src/app/modules/message-queues/enums/email-message-queue-format.enum.ts","../../src/app/modules/message-queues/enums/message-queue-type.enum.ts","../../src/app/modules/message-queues/enums/message-queue-event-type.enum.ts","../../src/app/modules/message-queues/consts/message-queue-event-type.const.ts","../../src/app/modules/message-queues/components/recipient/recipient.component.ts","../../src/app/modules/message-queues/components/recipient/recipient.component.html","../../src/app/modules/message-queues/components/queue/queue.component.ts","../../src/app/modules/message-queues/components/queue/queue.component.html","../../src/app/modules/message-queues/services/message-queue.service.ts","../../src/app/modules/message-queues/pipes/truncate.pipe.ts","../../src/app/modules/message-queues/components/queues/queues.component.ts","../../src/app/modules/message-queues/components/queues/queues.component.html","../../src/app/modules/message-queues/pipes/linkify.pipe.ts","../../src/app/modules/message-queues/message-queues.module.ts","../../src/app/modules/webhooks/components/webhooks/webhooks.component.ts","../../src/app/modules/webhooks/components/webhooks/webhooks.component.html","../../src/app/modules/webhooks/webhooks.module.ts","../../src/app/modules/message-templates/components/template/template.component.ts","../../src/app/modules/message-templates/components/template/template.component.html","../../src/app/modules/message-templates/components/templates/templates.component.ts","../../src/app/modules/message-templates/components/templates/templates.component.html","../../src/app/modules/message-templates/message-templates.module.ts","../../src/app/modules/messages/messages.module.ts","../../src/firestitch-app-message.ts"],"sourcesContent":["import { NgModule, ModuleWithProviders } from '@angular/core';\n\n\n@NgModule({\n})\nexport class FsAppMessageModule {\n static forRoot(): ModuleWithProviders<FsAppMessageModule> {\n return {\n ngModule: FsAppMessageModule,\n };\n }\n}\n","\nexport function indexNameValue(arry) {\n const obj = {};\n arry.forEach(item => {\n obj[item.value] = item.name;\n });\n\n return obj;\n}\n","import { Component, OnInit, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { FsIFrameModule } from '@firestitch/iframe';\nimport { MatButton } from '@angular/material/button';\n\n\n@Component({\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.scss'],\n standalone: true,\n imports: [FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, FsIFrameModule, MatDialogActions, MatButton, MatDialogClose]\n})\nexport class PreviewComponent implements OnInit {\n private _data = inject(MAT_DIALOG_DATA);\n\n\n public html;\n public styles;\n\n constructor() {\n const _data = this._data;\n\n this.html = _data.html;\n this.styles = _data.styles;\n }\n\n public ngOnInit() {\n\n }\n}\n","<fs-dialog>\n <div mat-dialog-title>Preview</div>\n <mat-dialog-content>\n <fs-iframe\n [html]=\"html\"\n [width]=\"'100%'\"\n [styles]=\"styles\">\n </fs-iframe>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button [mat-dialog-close]=\"null\" color=\"primary\" type=\"button\">Done</button>\n </mat-dialog-actions>\n</fs-dialog>\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_APP_MESSAGE_ROOT_CONFIG = new InjectionToken<any[]>('fs-app-message-root-config');\nexport const FS_APP_MESSAGE_CONFIG = new InjectionToken<any[]>('fs-app-message-config');\n","export enum EmailMessageFormat {\n Text = 'T',\n HTML = 'H',\n RichText = 'R'\n}\n","\nimport { EmailMessageFormat } from '../enums';\n\nexport const EmailMessageFormats = [\n { name: 'Text', value: EmailMessageFormat.Text },\n { name: 'HTML', value: EmailMessageFormat.HTML },\n { name: 'Rich Text', value: EmailMessageFormat.RichText }\n];\n","import { Component, OnDestroy, OnInit, ViewChild, ChangeDetectionStrategy, Input, inject } from '@angular/core';\n\nimport { FsFile } from '@firestitch/file';\n\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { ActionMode } from '@firestitch/filter';\n\nimport { Subject } from 'rxjs';\n\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { FsMessage } from '@firestitch/message';\nimport { FsCommonModule } from '@firestitch/common';\n\n\n@Component({\n selector: 'fs-app-message-attachments',\n templateUrl: './attachments.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsCommonModule],\n})\nexport class AttachmentsComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _message = inject(FsMessage);\n\n\n @ViewChild(FsListComponent, { static: true }) \n public list: FsListComponent = null;\n\n @Input() public message;\n\n public config: FsListConfig = null;\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n this.config = {\n rowActions: [],\n actions: [\n {\n label: 'Upload',\n mode: ActionMode.File,\n select: (fsFile: FsFile) => {\n this._config.uploadMessageAttachment(this.message, fsFile)\n .subscribe(() => {\n this._message.success('Saved attachment');\n this.list.reload();\n });\n }\n }\n ],\n fetch: query => {\n return this._config.loadMessageAttachments(this.message, query);\n }\n }\n\n if (this._config.downloadMessageAttachment) {\n this.config.rowActions\n .push(\n {\n click: data => {\n return this._config.downloadMessageAttachment(data);\n },\n label: 'Download',\n },\n );\n }\n\n if (this._config.deleteMessageAttachment) {\n this.config.rowActions\n .push(\n {\n click: data => {\n return this._config.deleteMessageAttachment(data);\n },\n remove: {\n title: 'Confirm',\n template: 'Are you sure you would like to delete this template?',\n },\n label: 'Delete',\n },\n );\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n}\n","<fs-list [config]=\"config\">\n <fs-list-column title=\"File Name\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.filename}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.size | fsFormatBytes}}\n </ng-template>\n </fs-list-column>\n</fs-list>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { switchMap, tap } from 'rxjs/operators';\n\nimport { of } from 'rxjs';\nimport { PreviewComponent } from '../../../../modules/message-preview/components';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { EmailMessageFormats } from '../../consts';\nimport { EmailMessageFormat } from '../../enums';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FormsModule } from '@angular/forms';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatTabGroup, MatTab, MatTabContent } from '@angular/material/tabs';\nimport { FsTabsModule } from '@firestitch/tabs';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { FsLabelModule } from '@firestitch/label';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { FsTextEditorModule } from '@firestitch/text-editor';\nimport { FsHtmlEditorModule, FsHtmlRendererModule } from '@firestitch/html-editor';\nimport { AttachmentsComponent } from '../attachments/attachments.component';\nimport { MatButton } from '@angular/material/button';\n\n\n@Component({\n templateUrl: './message.component.html',\n styleUrls: ['./message.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FormsModule,\n FsFormModule,\n FsDialogModule,\n MatDialogTitle,\n CdkScrollable,\n MatDialogContent,\n MatTabGroup,\n FsTabsModule,\n MatTab,\n MatTabContent,\n MatFormField,\n MatLabel,\n MatInput,\n FsLabelModule,\n MatSelect,\n MatOption,\n FsTextEditorModule,\n FsHtmlEditorModule,\n FsHtmlRendererModule,\n AttachmentsComponent,\n MatDialogActions,\n MatButton,\n MatDialogClose,\n ],\n})\nexport class MessageComponent implements OnInit {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _data = inject(MAT_DIALOG_DATA);\n private _prompt = inject(FsPrompt);\n private _message = inject(FsMessage);\n private _dialog = inject(MatDialog);\n private _cdRef = inject(ChangeDetectorRef);\n\n\n public message = null;\n public tab = 'general';\n public messageTemplates = [];\n public emailMessageFormats = EmailMessageFormats;\n public emailMessageFormat = EmailMessageFormat;\n\n public ngOnInit() {\n this._config.loadMessage(this._data.message)\n .subscribe((message) => {\n this.message = message;\n\n if (this.message.emailMessage && this.message.emailMessage.customize === undefined) {\n this.message.emailMessage.customize = true;\n }\n if (this.message.smsMessage && this.message.smsMessage.customize === undefined) {\n this.message.smsMessage.customize = true;\n }\n\n this.message.reference = String(message.tag)\n .toLocaleLowerCase()\n .split('_')\n .map((item: string) => item.charAt(0).toUpperCase() + item.slice(1))\n .join('');\n\n this._cdRef.markForCheck();\n });\n\n this._config.loadMessageTemplates()\n .subscribe((data) => {\n this.messageTemplates = data.data;\n this._cdRef.markForCheck();\n });\n }\n\n public save = () => {\n return this._config.saveMessage(this.message)\n .pipe(\n tap(() => {\n this._message.success('Saved Changes');\n })\n );\n }\n\n public openPreview(): void {\n const emailMessage = this.message.emailMessage;\n let html = emailMessage.customize ? emailMessage.body : this.message.defaultEmailBody;\n let styles = emailMessage.styles || '';\n\n if (emailMessage.messageTemplateId) {\n const messageTemplate = this.messageTemplates\n .find((item) => {\n return emailMessage.messageTemplateId === item.id;\n });\n\n if (messageTemplate) {\n html = messageTemplate.content.replace('{$content}', html);\n styles = `${messageTemplate.styles || ''}\\n\\n${styles}`;\n }\n }\n\n this._dialog.open(PreviewComponent, {\n data: {\n styles,\n html,\n },\n width: '95%'\n });\n }\n\n public sendTest(type) {\n of(true)\n .pipe(\n switchMap(() => {\n return type === 'email' ? this._config.getTestEmail() : of('');\n }),\n switchMap((default_) => {\n const typeName = type === 'email' ? 'an email' : 'phone number';\n\n return this._prompt.input({\n label: `Please enter ${typeName} to send test to`,\n title: 'Send Test',\n commitLabel: 'Send',\n default: default_,\n required: true\n })\n })\n )\n .subscribe((value: string) => {\n this._config.testMessage(this.message, value, type)\n .subscribe(() => {\n this._message.success('Test Sent');\n });\n });\n }\n}\n","<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"message\"\n [confirmTabs]=\"false\">\n @if (message) {\n <fs-dialog>\n <div mat-dialog-title>\n Edit Message\n </div>\n <mat-dialog-content>\n <mat-tab-group\n fsTabs\n [(selected)]=\"tab\">\n <mat-tab\n label=\"General\"\n name=\"general\">\n <ng-template matTabContent>\n <div class=\"fs-column\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.name\"\n name=\"Name\"\n required>\n </mat-form-field>\n <fs-label-field>\n <fs-label>\n Reference\n </fs-label>\n {{ message.reference }}\n </fs-label-field>\n <mat-form-field>\n <mat-label>\n Description\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.description\"\n name=\"description\">\n </mat-form-field>\n @if (message.emailMessage) {\n <div class=\"fs-row.gap-sm.wrap\">\n <mat-form-field>\n <mat-label>\n From Email\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.fromEmail\"\n name=\"from_email\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n From Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.fromName\"\n name=\"from_name\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Reply To\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.replyEmail\"\n name=\"reply_to\">\n </mat-form-field>\n </div>\n <div class=\"fs-row.gap-sm.wrap\">\n <mat-form-field>\n <mat-label>\n To\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.toRecipients\"\n name=\"to\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n CC\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.ccRecipients\"\n name=\"cc\">\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n BCC\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.bccRecipients\"\n name=\"bcc\">\n </mat-form-field>\n </div>\n }\n </div>\n </ng-template>\n </mat-tab>\n @if (message.emailMessage) {\n <mat-tab\n label=\"Email Message\"\n name=\"email\">\n <ng-template matTabContent>\n <div class=\"fs-column\">\n <div class=\"fs-row.gap-sm\">\n <mat-form-field>\n <mat-label>\n Customize Message\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.emailMessage.customize\"\n name=\"customizeEmail\">\n <mat-option [value]=\"true\">\n Yes\n </mat-option>\n <mat-option [value]=\"false\">\n No\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Format\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.emailMessage.format\"\n name=\"format\">\n @for (item of emailMessageFormats; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Template\n </mat-label>\n <mat-select\n [(ngModel)]=\"message.emailMessage.messageTemplateId\"\n name=\"template\">\n <mat-option [value]=\"null\">\n None\n </mat-option>\n @for (item of messageTemplates; track item) {\n <mat-option\n [value]=\"item.id\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (message.emailMessage.customize) {\n <mat-form-field>\n <mat-label>\n Subject\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"message.emailMessage.subject\"\n name=\"name\"\n required>\n </mat-form-field>\n <div [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n @if (message.emailMessage.format===emailMessageFormat.HTML) {\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\"\n [config]=\"{ language: 'html '}\">\n </fs-text-editor>\n }\n @if (message.emailMessage.format===emailMessageFormat.RichText) {\n <fs-html-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\">\n </fs-html-editor>\n }\n @if (message.emailMessage.format===emailMessageFormat.Text) {\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"emailMessageBody\"\n [config]=\"{ language: 'text' }\">\n </fs-text-editor>\n }\n </ng-template>\n </mat-tab>\n @if (message.emailMessage.format===emailMessageFormat.HTML || message.emailMessage.format===emailMessageFormat.RichText) {\n <mat-tab\n label=\"Styles\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.styles\"\n name=\"styles\"\n [config]=\"{ language: 'scss' }\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n }\n </mat-tab-group>\n </div>\n }\n @if (!message.emailMessage.customize) {\n <fs-label-field>\n <fs-label>\n Subject\n </fs-label>\n {{ message.defaultEmailSubject }}\n </fs-label-field>\n <div>\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"email-body-html-default\">\n @if (message.emailMessage.format===emailMessageFormat.RichText || message.emailMessage.format===emailMessageFormat.HTML) {\n <fs-html-renderer\n [html]=\"message.defaultEmailBody\">\n </fs-html-renderer>\n }\n </div>\n @if (message.emailMessage.format===emailMessageFormat.Text) {\n <div\n class=\"email-body-text-default\"\n >\n {{ message.defaultEmailBody }}\n </div>\n }\n </fs-label-field>\n </div>\n }\n </div>\n </ng-template>\n </mat-tab>\n }\n @if (!!message.smsMessage) {\n <mat-tab\n label=\"SMS Message\"\n name=\"sms\">\n <ng-template matTabContent>\n <mat-form-field>\n <mat-label>\n Customize Message\n </mat-label>\n <mat-select\n required\n [(ngModel)]=\"message.smsMessage.customize\"\n name=\"customizeSms\">\n <mat-option [value]=\"true\">\n Yes\n </mat-option>\n <mat-option [value]=\"false\">\n No\n </mat-option>\n </mat-select>\n </mat-form-field>\n @if (message.smsMessage.customize) {\n <div\n [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.smsMessage.message\"\n name=\"smsMessageMessage\"\n [config]=\"{ language: 'text '}\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n }\n @if (!message.smsMessage.customize) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div class=\"content\">\n {{ message.defaultSmsMessage }}\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n }\n @if (message.emailMessage) {\n <mat-tab\n label=\"Attachments\"\n name=\"attachments\">\n <ng-template matTabContent>\n <fs-app-message-attachments [message]=\"message\"></fs-app-message-attachments>\n </ng-template>\n </mat-tab>\n }\n @if (message.variables) {\n <mat-tab\n label=\"Variables\"\n >\n <ng-template matTabContent>\n @for (variable of message.variables; track variable) {\n <div\n class=\"variable\">\n {{ variable.name }}\n </div>\n }\n </ng-template>\n </mat-tab>\n }\n <mat-tab label=\"Defaults\">\n <ng-template matTabContent>\n @if (message.emailMessage) {\n @if (message.emailMessage && message.smsMessage) {\n <h2>\n Email\n </h2>\n }\n <fs-label-field>\n <fs-label>\n Subject\n </fs-label>\n <div class=\"content\">\n {{ message.defaultEmailSubject }}\n </div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"content\">\n {{ message.defaultEmailBody }}\n </div>\n </fs-label-field>\n }\n @if (message.smsMessage) {\n @if (message.emailMessage && message.smsMessage) {\n <h2>\n SMS\n </h2>\n }\n <fs-label-field>\n <fs-label>\n Content\n </fs-label>\n <div class=\"content\">\n {{ message.defaultSmsMessage }}\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n @if (tab==='email' || tab==='sms' || tab==='general') {\n <button\n mat-button\n color=\"primary\">\n Save\n </button>\n @if (tab==='email') {\n <button\n mat-button\n type=\"button\"\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('email')\"\n type=\"button\">\n Send Test Email\n </button>\n }\n @if (tab==='sms') {\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('sms')\"\n type=\"button\">\n Send Test SMS\n </button>\n }\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Cancel\n </button>\n } @else {\n <button\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Close\n </button>\n }\n </mat-dialog-actions>\n </fs-dialog>\n }\n</form>","import { Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { takeUntil, map } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { ItemType } from '@firestitch/filter';\n\nimport { MessageComponent } from '../message';\nimport { EmailMessageFormats } from '../../consts';\nimport { indexNameValue } from '../../../../helpers';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\n\n@Component({\n selector: 'fs-app-messages',\n templateUrl: './messages.component.html',\n standalone: true,\n imports: [FsListModule]\n})\nexport class MessagesComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _dialog = inject(MatDialog);\n\n\n @ViewChild(FsListComponent, { static: true })\n public list: FsListComponent = null;\n\n public config: FsListConfig = null;\n public emailMessageFormats = {};\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n this.emailMessageFormats = indexNameValue(EmailMessageFormats);\n\n this.config = {\n filters: [\n {\n name: 'keyword',\n type: ItemType.Keyword,\n label: 'Search'\n }\n ],\n fetch: query => {\n return this._config.loadMessages(query)\n .pipe(\n map(response => {\n return ({ data: response.data, paging: response.paging })\n })\n );\n }\n }\n }\n\n public open(message) {\n const dialogRef = this._dialog.open(MessageComponent, {\n data: {\n message: message,\n },\n width: '85%'\n });\n\n dialogRef.afterClosed()\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe(() => {\n this.list.reload();\n })\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","<fs-list [config]=\"config\">\n <fs-list-column\n title=\"Name\"\n name=\"name\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <a (click)=\"open(row)\">\n {{ row.name }}\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email format\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessage) {\n {{ emailMessageFormats[row.emailMessage.format] }}\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email message template\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessage) {\n {{ row.emailMessage.messageTemplate?.name || 'None' }}\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Channels\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <div class=\"fs-delimit\">\n @if (row.emailMessage) {\n <span>\n Email\n </span>\n }\n @if (row.smsMessage) {\n <span>\n SMS\n </span>\n }\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Customized message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessage?.customize || row.smsMessage?.customize) {\n @if (row.emailMessage?.customize) {\n {{ row.emailMessage.customize ? 'Email' : '' }}\n }\n @if (row.smsMessage?.customize) {\n {{ row.smsMessage.customize ? 'SMS' : '' }}\n }\n } @else {\n None\n }\n </ng-template>\n </fs-list-column>\n</fs-list>","export enum MessageQueueState {\n Sent = 'S',\n PartiallySent = 'P',\n Sending = 'E',\n Queued = 'Q',\n Canceled = 'C',\n InvalidRecipients = 'I',\n Failed = 'F'\n}","import { MessageQueueState } from '../enums/message-queue-state.enum';\n\n\nexport const MessageQueueStates = [\n { name: 'Sent', value: MessageQueueState.Sent },\n { name: 'Partially Sent', value: MessageQueueState.PartiallySent },\n { name: 'Sending', value: MessageQueueState.Sending },\n { name: 'Queued', value: MessageQueueState.Queued },\n { name: 'Canceled', value: MessageQueueState.Canceled },\n { name: 'Invalid Recipients', value: MessageQueueState.InvalidRecipients },\n { name: 'Failed', value: MessageQueueState.Failed }\n];\n","export enum EmailMessageQueueFormat {\n Text = 'T',\n HTML = 'H',\n RichText = 'R'\n}\n","export enum MessageQueueType {\n Sms = 'S',\n Email = 'E'\n}\n","export enum MessageQueueEventType {\n Click = 'click',\n Open = 'open',\n}\n","import { MessageQueueEventType } from \"../enums\";\n\n\nexport const MessageQueueEventTypes = [\n { name: 'Open', value: MessageQueueEventType.Open },\n { name: 'Click', value: MessageQueueEventType.Click },\n];\n","import {\n ChangeDetectionStrategy,\n Component, Input, OnInit,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\n\n\n@Component({\n selector: 'app-recipient',\n templateUrl: './recipient.component.html',\n styleUrls: ['./recipient.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [MatIcon, MatTooltip],\n})\nexport class RecipientComponent implements OnInit {\n \n @Input() name;\n @Input() state;\n \n public icon;\n\n public ngOnInit(): void {\n \n const icons = {\n 'S': { name: 'check_circle', tooltip: 'Sent' },\n 'E': { name: 'offline_bolt', tooltip: 'Sending' },\n 'F': { name: 'info', tooltip: 'Failed' },\n }\n\n this.icon = icons[this.state];\n }\n\n}\n","<span class=\"recipient\">\n <span class=\"name\">{{name}}</span>\n @if (icon) {\n <mat-icon [class]=\"'state-' + state\" [matTooltip]=\"icon.tooltip\">{{icon.name}}</mat-icon>\n }\n</span>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\nimport { FsMessage } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\n\nimport { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport anchorme from 'anchorme';\n\nimport { indexNameValue } from '../../../../helpers';\nimport { MessageComponent } from '../../../../modules/messages/components';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { ForwardMessageQueue, LoadMessage, ResendMessageQueue } from '../../../app-message/types';\nimport { MessageQueueStates } from '../../consts';\nimport { MessageQueueEventTypes } from '../../consts/message-queue-event-type.const';\nimport { EmailMessageQueueFormat, MessageQueueEventType, MessageQueueType } from '../../enums';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatTabGroup, MatTab, MatTabContent } from '@angular/material/tabs';\nimport { FsLabelModule } from '@firestitch/label';\nimport { RecipientComponent } from '../recipient/recipient.component';\nimport { FsIFrameModule } from '@firestitch/iframe';\nimport { FsDateModule } from '@firestitch/date';\nimport { MatButton } from '@angular/material/button';\nimport { FsFormModule } from '@firestitch/form';\n\n\n@Component({\n templateUrl: './queue.component.html',\n styleUrls: ['./queue.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsSkeletonModule,\n FsDialogModule,\n CdkScrollable,\n MatDialogContent,\n MatTabGroup,\n MatTab,\n MatTabContent,\n FsLabelModule,\n RecipientComponent,\n FsIFrameModule,\n FsListModule,\n FsDateModule,\n MatDialogActions,\n MatButton,\n FsFormModule,\n MatDialogClose,\n ],\n})\nexport class QueueComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _data = inject(MAT_DIALOG_DATA);\n private _message = inject(FsMessage);\n private _prompt = inject(FsPrompt);\n private _dialog = inject(MatDialog);\n private _cdRef = inject(ChangeDetectorRef);\n\n\n @ViewChild('logList')\n public logList: FsListComponent;\n\n public messageQueue;\n public loadMessage: LoadMessage;\n public resendMessageQueue: ResendMessageQueue;\n public forwardMessageQueue: ForwardMessageQueue;\n public messageQueueRecipients = {};\n public emailMessageQueueFormat = EmailMessageQueueFormat;\n public messageQueueStates;\n public logConfig: FsListConfig;\n public attachmentConfig: FsListConfig;\n public eventConfig: FsListConfig;\n public MessageQueueEventTypes = indexNameValue(MessageQueueEventTypes);\n public MessageQueueEventType = MessageQueueEventType;\n\n private _destroy$ = new Subject();\n\n public ngOnInit() {\n this.messageQueueStates = indexNameValue(MessageQueueStates);\n this.resendMessageQueue = this._config.resendMessageQueue;\n this.forwardMessageQueue = this._config.forwardMessageQueue;\n\n this._config.loadMessageQueue(this._data.messageQueueId)\n .subscribe((messageQueue) => {\n this.messageQueue = messageQueue;\n\n if (this.messageQueue.emailMessageQueue) {\n let body = this.messageQueue.emailMessageQueue.body;\n if (this.messageQueue.emailMessageQueue.format === EmailMessageQueueFormat.HTML) {\n try {\n const doc = new DOMParser().parseFromString(body, 'text/html');\n\n doc.querySelectorAll('a').forEach((el) => {\n el.setAttribute('target', '_blank');\n });\n\n body = doc.documentElement.innerHTML;\n\n } catch (e) {\n }\n } else {\n body = this.anchorMe(body);\n }\n\n this.messageQueue.emailMessageQueue.body = body;\n\n this.messageQueue.emailMessageQueue.replyEmail =\n (this.messageQueue.emailMessageQueue.replyEmail || [])\n .map((item) => typeof item === 'object' && item !== null ? item.email : item);\n }\n\n if (this.messageQueue.smsMessageQueue) {\n this.messageQueue.smsMessageQueue.body = this.anchorMe(this.messageQueue.smsMessageQueue.body);\n }\n\n this.messageQueueRecipients = this.messageQueue.messageQueueRecipients\n .reduce((accum, messageQueueRecipient) => {\n accum[messageQueueRecipient.recipient] = messageQueueRecipient.state;\n\n return accum;\n }, {});\n\n this._setLogsConfig(messageQueue);\n this._setAttachmentsConfig(messageQueue);\n this._setEventsConfig(messageQueue);\n this._cdRef.markForCheck();\n });\n }\n\n public anchorMe(input) {\n return anchorme({\n input,\n options: {\n attributes: {\n target: \"_blank\",\n }\n }\n });\n }\n\n public openMessage(message) {\n this._dialog.open(MessageComponent, {\n data: {\n message: message,\n },\n width: '85%'\n });\n }\n\n public resend() {\n this._prompt.confirm({\n title: 'Confirm',\n template: 'Are you sure you would like to resend this message?'\n }).subscribe(() => {\n this.resendMessageQueue(this.messageQueue)\n .subscribe(messageQueue => {\n Object.assign(this.messageQueue, messageQueue);\n this._cdRef.markForCheck();\n this._message.success('Successfully resent');\n\n if (this.logList) {\n this.logList.reload();\n }\n });\n });\n }\n\n public forward() {\n const typeName = this.messageQueue.type === MessageQueueType.Email ? 'an email' : 'a phone number';\n\n this._prompt.input({\n label: `Please enter ${typeName} to forward to`,\n title: 'Forward Message',\n commitLabel: 'Forward',\n required: true\n }).subscribe((value: string) => {\n if (value) {\n this.forwardMessageQueue(this.messageQueue, value)\n .subscribe(messageQueue => {\n this.messageQueue = {\n ...this.messageQueue,\n messageQueue,\n };\n this._message.success('Successfully forwarded');\n this._cdRef.markForCheck();\n \n if (this.logList) {\n this.logList.reload();\n }\n });\n }\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _setLogsConfig(messageQueue) {\n this.logConfig = {\n loadMore: true,\n queryParam: false,\n fetch: query => {\n return this._config.loadLogs(messageQueue, query);\n }\n }\n }\n\n private _setEventsConfig(messageQueue) {\n this.eventConfig = {\n loadMore: true,\n queryParam: false,\n fetch: (query) => {\n return this._config.loadMessageQueueEvents(messageQueue, query);\n }\n }\n }\n\n private _setAttachmentsConfig(messageQueue) {\n this.attachmentConfig = {\n queryParam: false,\n fetch: query => {\n return this._config.loadMessageQueueAttachments(messageQueue, query)\n .pipe(\n map(response => ({\n data: response.data.map(value => {\n value.prettyFilesize = this._prettyFilesize(value.filesize);\n return value;\n }), paging: response.paging\n }))\n );\n }\n };\n\n if (this._config.downloadMessageQueueAttachment) {\n this.attachmentConfig.rowActions = [\n {\n click: (messageAttachment) => {\n this._config.downloadMessageQueueAttachment(messageAttachment, this.messageQueue);\n },\n label: 'Download',\n }\n ];\n }\n }\n\n private _prettyFilesize(bytes) {\n if (bytes === 0) { return '0.00 B'; }\n const e = Math.floor(Math.log(bytes) / Math.log(1024));\n return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';\n }\n}\n","<fs-dialog *fsSkeleton=\"messageQueue\">\n <fs-dialog-title>\n Message queue\n <ng-template fsDialogSubtitle>\n ID: {{ messageQueue.id }}\n </ng-template>\n </fs-dialog-title>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-lg.wrap\">\n @if (messageQueue.emailMessageQueue) {\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.toRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n @if (messageQueue.emailMessageQueue.ccRecipients.length) {\n <fs-label-field>\n <fs-label>\n CC\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.ccRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.bccRecipients.length) {\n <fs-label-field>\n <fs-label>\n BCC\n </fs-label>\n @for (recipient of messageQueue.emailMessageQueue.bccRecipients; track recipient) {\n <app-recipient\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail) {\n <fs-label-field>\n <fs-label>\n From\n </fs-label>\n @if (messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail) {\n {{ messageQueue.emailMessageQueue.fromName }}\n } @else {\n {{ messageQueue.emailMessageQueue.fromName }}\n @if (messageQueue.emailMessageQueue.fromEmail) {\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n }\n }\n </fs-label-field>\n }\n @if (messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length) {\n <fs-label-field>\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n }\n }\n @if (messageQueue.smsMessageQueue) {\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient\n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient>\n </fs-label-field>\n @if (messageQueue.smsMessageQueue.fromNumber) {\n <fs-label-field>\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n }\n }\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ messageQueue.scheduledDate | fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ messageQueueStates[messageQueue.state] }}\n </fs-label-field>\n @if (messageQueue.message) {\n <fs-label-field>\n <fs-label>\n Message Type\n </fs-label>\n @if (loadMessage) {\n <a\n (click)=\"openMessage(messageQueue.message)\"\n >\n {{ messageQueue.message.name }}\n </a>\n } @else {\n {{ messageQueue.message.name }}\n }\n </fs-label-field>\n }\n </div>\n @if (messageQueue.emailMessageQueue) {\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{ messageQueue.emailMessageQueue.subject }}\n </fs-label-field>\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n @if (messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text) {\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n }\n @if (messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText) {\n <fs-iframe\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n }\n </fs-label-field>\n }\n @if (messageQueue.smsMessageQueue) {\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n }\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list\n [config]=\"logConfig\"\n #logList>\n <fs-list-column title=\"Message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.filename }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.prettyFilesize }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.messageQueueRecipient.recipient }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ MessageQueueEventTypes[row.type] }}\n @if (row.type === MessageQueueEventType.Click) {\n <div\n class=\"small\"\n >\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createDate | fsDateFormat: 'date-time-yearless' }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n @if (resendMessageQueue) {\n <button\n mat-button\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n }\n @if (forwardMessageQueue) {\n <button\n mat-button\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n }\n </mat-dialog-actions>\n</fs-dialog>","import { Injectable, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\n\nimport { Observable } from 'rxjs';\n\nimport { QueueComponent } from '../components/queue/queue.component';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsMessageQueueService {\n private _dialog = inject(MatDialog);\n\n\n public openMessageQueue(messageQueueId: number, options: any = {}): Observable<any> {\n return this._dialog.open(QueueComponent, {\n ...options,\n data: {\n messageQueueId,\n },\n width: options.width || '85%',\n })\n .afterClosed();\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe({\n name: 'truncate',\n standalone: true,\n})\nexport class TruncatePipe implements PipeTransform {\n transform(value: string, limit = 25, completeWords = false, ellipsis = '...') {\n value = value || '';\n\n if (value.length < limit) {\n return `${value.substr(0, limit)}`;\n }\n\n if (completeWords) {\n limit = value.substr(0, limit).lastIndexOf(' ');\n }\n\n return `${value.substr(0, limit)}${ellipsis}`;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\n\nimport { ItemType, TextItem } from '@firestitch/filter';\nimport { FsListActionSelected, FsListComponent, FsListConfig, PaginationStrategy, FsListModule } from '@firestitch/list';\nimport { SelectionActionType } from '@firestitch/selection';\nimport { FsStore } from '@firestitch/store';\n\nimport { Subject } from 'rxjs';\nimport { filter, map, takeUntil, tap } from 'rxjs/operators';\n\nimport { isAfter } from 'date-fns';\n\nimport { indexNameValue } from '../../../../helpers';\nimport { MessageQueuesConfig } from '../../../../interfaces';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { MessageQueueStates } from '../../consts';\nimport { MessageQueueType } from '../../enums';\nimport { MessageQueueState } from '../../enums/message-queue-state.enum';\nimport { FsMessageQueueService } from '../../services/message-queue.service';\nimport { FsMessageModule } from '@firestitch/message';\nimport { MatAnchor } from '@angular/material/button';\nimport { FsFormModule } from '@firestitch/form';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { RecipientComponent } from '../recipient/recipient.component';\nimport { FsDateModule } from '@firestitch/date';\nimport { TruncatePipe } from '../../pipes/truncate.pipe';\n\n\n@Component({\n selector: 'fs-app-message-queues',\n styleUrls: ['./queues.component.scss'],\n templateUrl: './queues.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FsMessageModule,\n MatAnchor,\n FsFormModule,\n FsListModule,\n MatIcon,\n MatTooltip,\n RecipientComponent,\n FsDateModule,\n TruncatePipe,\n ],\n})\nexport class QueuesComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _messageQueueService = inject(FsMessageQueueService);\n private _cdRef = inject(ChangeDetectorRef);\n private _store = inject(FsStore);\n\n\n @ViewChild(FsListComponent, { static: true })\n public list: FsListComponent = null;\n\n @Input() public query = {};\n\n @Input() public type: MessageQueueType;\n @Input() public config: MessageQueuesConfig;\n\n public listConfig: FsListConfig = null;\n public messageQueueStates = {};\n public MessageQueueState = MessageQueueState;\n public webHookEnabled;\n\n private _destroy$ = new Subject();\n\n public ngOnInit() {\n this.messageQueueStates = indexNameValue(MessageQueueStates);\n this._initConfig();\n this.initList();\n this.initWebhook();\n }\n\n public enableWebhook() {\n this._config.createWebhook()\n .subscribe(() => {\n this.initWebhook();\n });\n }\n\n public initWebhook() {\n const domain = document.location.hostname;\n\n if(domain === 'localhost' || domain === '[::1]') {\n return;\n }\n\n this._config.loadWebhooks({ domain })\n .pipe(\n filter(() => {\n return !this._store.get('messagesWebhookEnabled');\n }),\n )\n .subscribe((webhooks) => {\n this._cdRef.markForCheck();\n this.webHookEnabled = webhooks\n .some((webhook) => {\n const url = new URL(webhook.url);\n\n return url.host === domain;\n });\n\n this._store.set('messagesWebhookEnabled', this.webHookEnabled);\n });\n }\n\n public initList() {\n this.listConfig = {\n filters: [\n {\n name: 'keyword',\n type: ItemType.Keyword,\n label: 'Search',\n change: (item: TextItem) => {\n if(String(item.value ?? '').length) {\n this.list.filterRef\n .updateSort({\n sortBy: 'relevance',\n });\n } else {\n this.list.filterRef\n .updateSort({\n sortBy: 'created_date',\n sortDirection: 'desc',\n });\n }\n },\n },\n {\n name: 'state',\n type: ItemType.Select,\n label: 'Status',\n values: () => {\n return MessageQueueStates;\n },\n },\n {\n name: 'date',\n type: ItemType.DateRange,\n label: ['From Date', 'To Date'],\n },\n {\n name: 'messageId',\n type: ItemType.AutoCompleteChips,\n label: 'Message type',\n values: (query) => {\n return this._config\n .loadMessages({ keyword: query, limit: 50 })\n .pipe(\n map((response) => {\n return response.data.map((item) => ({ name: item.name, value: item.id }));\n }),\n );\n },\n },\n ...(this.config?.filters || []),\n ],\n paging: {\n strategy: PaginationStrategy.Many,\n },\n sorts: [\n {\n value: 'relevance',\n name: 'Relevance',\n direction: 'desc',\n },\n ],\n sort: {\n value: 'created_date',\n direction: 'desc',\n },\n fetch: (query) => {\n query = {\n ...query,\n ...this.query,\n type: this.type,\n messageQueueAttachmentCounts: true,\n emailMessageQueues: true,\n emailMessageQueueBodies: false,\n smsMessageQueues: true,\n };\n\n return this._config.loadMessageQueues(query)\n .pipe(\n map((response) => ({\n data: response.data\n .map((messageQueue) => {\n return {\n ...messageQueue,\n scheduled: messageQueue.state === MessageQueueState.Queued && isAfter(messageQueue.scheduledDate, new Date()),\n messageQueueRecipients: messageQueue.messageQueueRecipients\n .reduce((accum, messageQueueRecipient) => {\n accum[messageQueueRecipient.recipient] = messageQueueRecipient.state;\n\n return accum;\n }, {}),\n };\n }), paging: response.paging,\n })),\n );\n },\n };\n\n if (this._config.bulkMessageQueues) {\n this.listConfig.selection = {\n selectAll: false,\n actions: [\n {\n type: SelectionActionType.Action,\n name: 'queue',\n label: 'Queue',\n },\n {\n type: SelectionActionType.Action,\n name: 'resend',\n label: 'Resend',\n },\n {\n type: SelectionActionType.Action,\n name: 'cancel',\n label: 'Cancel',\n },\n ],\n actionSelected: (actionSelected: FsListActionSelected) => {\n return this._config.bulkMessageQueues(actionSelected.action.name, actionSelected.selected)\n .pipe(\n tap(() => {\n this.list.reload();\n }),\n );\n },\n };\n }\n\n this.config.filters.push({\n name: 'messageId',\n type: ItemType.AutoCompleteChips,\n label: 'Message Type',\n values: (keyword) => {\n return this._config\n .loadMessages({ keyword, limit: 50 })\n .pipe(\n map((response) => {\n return response.data.map((item) => ({ name: item.name, value: item.id }));\n }),\n );\n },\n });\n }\n\n public open(messageQueue) {\n this._messageQueueService.openMessageQueue(messageQueue.id)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.list.reload();\n });\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n private _initConfig() {\n this.config = {\n filters: [],\n ...this.config,\n };\n }\n}\n","@if (webHookEnabled === false) {\n <fs-message-info>\n <div class=\"fs-row\">\n <span class=\"fs-flex\">\n The webhook which provides email delivery confirmations is not enabled.\n </span>\n <a\n (click)=\"enableWebhook()\"\n mat-raised-button>\n Enable\n </a>\n </div>\n </fs-message-info>\n}\n<fs-list\n [config]=\"listConfig\"\n #list>\n <fs-list-column\n title=\"Message\"\n name=\"subject\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessageQueue) {\n <a (click)=\"open(row)\">\n {{ row.emailMessageQueue.subject|truncate:100 }}\n </a>\n @if (row.messageQueueAttachmentCount) {\n <mat-icon\n class=\"attachment-icon\"\n [matTooltip]=\"row.messageQueueAttachmentCount + ' Attachment(s)'\">\n attach_file\n </mat-icon>\n }\n }\n @if (row.smsMessageQueue) {\n <a (click)=\"open(row)\">\n {{ row.smsMessageQueue.body|truncate:100 }}\n </a>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Recipients\"\n class=\"col-recipients\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.emailMessageQueue) {\n @if (row.emailMessageQueue.toRecipients.length) {\n @for (recipient of row.emailMessageQueue.toRecipients; track recipient) {\n <div\n class=\"small\"\n >\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n }\n } @else {\n <app-recipient\n class=\"small\"\n [state]=\"MessageQueueState.Failed\"\n name=\"Unspecified\">\n </app-recipient>\n }\n @for (recipient of row.emailMessageQueue.ccRecipients; track recipient) {\n <div\n class=\"small\"\n >\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n }\n @for (recipient of row.emailMessageQueue.bccRecipients; track recipient) {\n <div\n class=\"small\"\n >\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n }\n }\n @if (row.smsMessageQueue) {\n @if (row.smsMessageQueue.toNumber) {\n <app-recipient\n class=\"small\"\n [state]=\"row.state\"\n [name]=\"row.smsMessageQueue.toNumber\">\n </app-recipient>\n } @else {\n <app-recipient\n class=\"small\"\n [state]=\"MessageQueueState.Failed\"\n name=\"Unspecified\">\n </app-recipient>\n }\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Status\"\n class=\"col-state\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n @if (row.scheduled) {\n Scheduled\n <div class=\"small\">\n {{ row.scheduledDate | fsDateFormat: 'date-time' }}\n </div>\n } @else {\n <span [class]=\"'state-' + row.state\">\n {{ messageQueueStates[row.state] }}\n </span>\n }\n <ng-template #state>\n <span [class]=\"'state-' + row.state\">\n {{ messageQueueStates[row.state] }}\n </span>\n </ng-template>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Date\"\n name=\"created_date\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createdDate | fsDateFormat: 'date-time-yeardiff' }}\n </ng-template>\n </fs-list-column>\n</fs-list>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport anchorme from 'anchorme';\n\n\n@Pipe({\n name: 'linkify',\n standalone: true\n})\nexport class LinkifyPipe implements PipeTransform {\n transform(input: string): string {\n return anchorme({\n input,\n options: {\n attributes: {\n target: \"_blank\",\n }\n }\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FsDateModule } from '@firestitch/date';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsIFrameModule } from '@firestitch/iframe';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsListModule } from '@firestitch/list';\nimport { FsMessageModule } from '@firestitch/message';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\n\nimport { QueueComponent } from './components/queue/queue.component';\nimport { QueuesComponent } from './components/queues/queues.component';\nimport { RecipientComponent } from './components/recipient/recipient.component';\nimport { LinkifyPipe } from './pipes/linkify.pipe';\nimport { TruncatePipe } from './pipes/truncate.pipe';\nimport { FsMessageQueueService } from './services/message-queue.service';\n\n\n@NgModule({\n imports: [\n RouterModule,\n FormsModule,\n CommonModule,\n MatTooltipModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatTabsModule,\n FsListModule,\n FsDialogModule,\n FsLabelModule,\n FsDateModule,\n FsSkeletonModule,\n FsFormModule,\n FsIFrameModule,\n FsMessageModule,\n QueuesComponent,\n QueueComponent,\n LinkifyPipe,\n TruncatePipe,\n RecipientComponent,\n ],\n exports: [\n QueuesComponent,\n QueueComponent,\n ],\n providers: [\n FsMessageQueueService,\n ],\n})\nexport class FsAppMessageQueuesModule { }\n","import { ChangeDetectionStrategy, Component, OnInit, ViewChild, inject } from '@angular/core';\r\n\r\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\r\nimport { FsMessage } from '@firestitch/message';\r\n\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\r\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\nimport { FsDateModule } from '@firestitch/date';\r\n\r\n\r\n@Component({\n selector: 'fs-app-message-webhooks',\n templateUrl: './webhooks.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [FsListModule, FsDateModule],\n})\r\nexport class WebhooksComponent implements OnInit {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _message = inject(FsMessage);\n\r\n\r\n @ViewChild(FsListComponent)\r\n public list: FsListComponent;\r\n\r\n public listConfig: FsListConfig;\r\n\r\n public ngOnInit(): void {\r\n this.listConfig = {\r\n paging: false,\r\n actions: [\r\n {\r\n click: () => {\r\n this._config.createWebhook()\r\n .subscribe(() => {\r\n this._message.success('Created webhook');\r\n this.list.reload();\r\n });\r\n },\r\n label: 'Create',\r\n },\r\n ],\r\n rowActions: [\r\n {\r\n click: (webhook) => {\r\n this._config.deleteWebhook(webhook)\r\n .subscribe(() => {\r\n this._message.success('Deleted webhook');\r\n this.list.reload();\r\n });\r\n },\r\n label: 'Delete',\r\n },\r\n ],\r\n fetch: () => {\r\n return this._config.loadWebhooks({\r\n domain: window.location.hostname,\r\n })\r\n .pipe(\r\n map((webhooks) => ({ data: webhooks })),\r\n );\r\n },\r\n };\r\n }\r\n}\r\n","<fs-list [config]=\"listConfig\">\r\n <fs-list-column title=\"URL\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.url}}\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column title=\"Created\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.createDate | fsDate}}\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>","import { NgModule } from '@angular/core';\n\nimport { WebhooksComponent } from './components/webhooks/webhooks.component';\n\n@NgModule({\n imports: [WebhooksComponent],\n exports: [WebhooksComponent],\n})\nexport class FsAppMessageWebhooksModule {}\n","import { ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatTab, MatTabContent, MatTabGroup } from '@angular/material/tabs';\n\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule, SubmitEvent } from '@firestitch/form';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsMessage } from '@firestitch/message';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsTextEditorConfig, FsTextEditorModule } from '@firestitch/text-editor';\n\nimport { tap } from 'rxjs/operators';\n\nimport { PreviewComponent } from '../../../../modules/message-preview/components';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\n\n\n@Component({\n templateUrl: './template.component.html',\n styleUrls: ['./template.component.scss'],\n standalone: true,\n imports: [FsSkeletonModule, FormsModule, FsFormModule, FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, MatFormField, MatLabel, MatInput, MatTabGroup, MatTab, MatTabContent, FsLabelModule, FsTextEditorModule, MatDialogActions, MatButton, MatDialogClose],\n})\nexport class TemplateComponent implements OnInit {\n\n public messageTemplate = null;\n public htmlEditorconfig: FsTextEditorConfig = {\n language: 'html',\n insertSpaces: true,\n tabSize: 2,\n };\n public cssEditorconfig: FsTextEditorConfig = {\n language: 'scss',\n insertSpaces: true,\n tabSize: 2,\n };\n \n private _data = inject(MAT_DIALOG_DATA);\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _dialogRef = inject<MatDialogRef<TemplateComponent>>(MatDialogRef);\n private _message = inject(FsMessage);\n private _dialog = inject(MatDialog);\n private _cdRef = inject(ChangeDetectorRef);\n\n public ngOnInit(): void {\n if (this._data.messageTemplate?.id) {\n this._config.loadMessageTemplate(this._data.messageTemplate)\n .subscribe((messageTemplate) => {\n this.messageTemplate = messageTemplate;\n this._cdRef.markForCheck();\n });\n } else {\n this.messageTemplate = {};\n }\n }\n\n public openPreview(): void {\n this._dialog.open(PreviewComponent, {\n data: {\n styles: this.messageTemplate.styles,\n html: this.messageTemplate.content,\n },\n width: '95%',\n });\n }\n\n public save = (event: SubmitEvent) => {\n return this._config.saveMessageTemplate(this.messageTemplate)\n .pipe(\n tap((messageTemplate) => {\n this._message.success('Saved Changes');\n if (event.submitter === 'save-close') {\n this._dialogRef.close(messageTemplate);\n }\n }),\n );\n };\n}\n","<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"messageTemplate\"\n [confirmTabs]=\"false\">\n @if (messageTemplate) {\n <fs-dialog>\n <div mat-dialog-title>\n Message Template\n </div>\n <mat-dialog-content>\n <div class=\"fs-column\">\n <mat-form-field class=\"name\">\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"messageTemplate.name\"\n required\n name=\"name\">\n </mat-form-field>\n <div [@.disabled]=\"true\">\n <mat-tab-group\n mat-align-tabs=\"start\"\n [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <div class=\"content\">\n <fs-label-field>\n <fs-text-editor\n [(ngModel)]=\"messageTemplate.content\"\n name=\"body\"\n [config]=\"htmlEditorconfig\">\n </fs-text-editor>\n <fs-label-message>\n &#123;$content&#125; will be replaced with the message content.\n </fs-label-message>\n </fs-label-field>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Styles\">\n <ng-template matTabContent>\n <div class=\"styles\">\n <fs-text-editor\n [(ngModel)]=\"messageTemplate.styles\"\n name=\"styles\"\n [config]=\"cssEditorconfig\">\n </fs-text-editor>\n </div>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n name=\"close\">\n Save\n </button>\n <button\n mat-button\n type=\"submit\"\n name=\"save-close\">\n Save & Close\n </button>\n <button\n mat-button\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n }\n</form>","import { Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { FsListComponent, FsListConfig, FsListModule } from '@firestitch/list';\n\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport { TemplateComponent } from '../template';\nimport { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';\nimport { FsAppMessageConfig } from '../../../app-message/interfaces';\n\n\n@Component({\n selector: 'fs-app-message-templates',\n templateUrl: './templates.component.html',\n standalone: true,\n imports: [FsListModule]\n})\nexport class TemplatesComponent implements OnInit, OnDestroy {\n private _config = inject<FsAppMessageConfig>(FS_APP_MESSAGE_CONFIG);\n private _dialog = inject(MatDialog);\n\n\n @ViewChild(FsListComponent, { static: true }) \n public list: FsListComponent = null;\n\n public config: FsListConfig = null;\n public messageQueueStates = [];\n\n private _destroy$ = new Subject();\n\n public ngOnInit(): void {\n this.config = {\n actions: [\n {\n label: 'Create',\n click: () => {\n this.open({});\n }\n }\n ],\n status: false,\n fetch: query => {\n return this._config.loadMessageTemplates(query);\n }\n }\n\n if (this._config.deleteMessageTemplate) {\n this.config.rowActions = [\n {\n click: data => {\n return this._config.deleteMessageTemplate(data);\n },\n remove: {\n title: 'Confirm',\n template: 'Are you sure you would like to delete this template?',\n },\n menu: true,\n label: 'Delete',\n },\n ];\n }\n }\n\n public open(messageTemplate): void {\n const dialogRef = this._dialog.open(TemplateComponent, {\n data: {\n messageTemplate,\n },\n width: '85%',\n });\n\n dialogRef.afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.list.reload();\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n}\n","<fs-list [config]=\"config\">\n <fs-list-column title=\"Name\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"open(row)\">{{row.name}}</a>\n </ng-template>\n </fs-list-column>\n</fs-list>","import { NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { TemplateComponent } from './components/template/template.component';\nimport { TemplatesComponent } from './components/templates/templates.component';\n\n@NgModule({\n imports: [MatDialogModule, TemplatesComponent, TemplateComponent],\n exports: [TemplatesComponent, TemplateComponent],\n})\nexport class FsAppMessageTemplatesModule {}\n","import { NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { MessageComponent } from './components/message/message.component';\nimport { MessagesComponent } from './components/messages/messages.component';\n\n@NgModule({\n imports: [MatDialogModule, MessagesComponent, MessageComponent],\n exports: [MessagesComponent, MessageComponent],\n})\nexport class FsAppMessagesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3","i4","i5","i6"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firestitch/app-message",
3
- "version": "18.0.20",
3
+ "version": "18.0.22",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/Firestitch/ngx-admin"