@firestitch/app-message 18.0.14 → 18.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/app/modules/message-preview/components/preview/preview.component.d.ts +2 -2
  2. package/app/modules/message-queues/components/queue/queue.component.d.ts +2 -7
  3. package/app/modules/message-queues/components/queues/queues.component.d.ts +2 -6
  4. package/app/modules/message-queues/components/recipient/recipient.component.d.ts +1 -1
  5. package/app/modules/message-queues/message-queues.module.d.ts +22 -24
  6. package/app/modules/message-queues/pipes/linkify.pipe.d.ts +1 -1
  7. package/app/modules/message-queues/pipes/truncate.pipe.d.ts +1 -1
  8. package/app/modules/message-queues/services/message-queue.service.d.ts +0 -2
  9. package/app/modules/message-templates/components/template/template.component.d.ts +5 -9
  10. package/app/modules/message-templates/components/templates/templates.component.d.ts +1 -4
  11. package/app/modules/messages/components/attachments/attachments.component.d.ts +1 -4
  12. package/app/modules/messages/components/message/message.component.d.ts +2 -7
  13. package/app/modules/messages/components/messages/messages.component.d.ts +1 -4
  14. package/app/modules/webhooks/components/webhooks/webhooks.component.d.ts +1 -4
  15. package/esm2022/app/modules/message-preview/components/preview/preview.component.mjs +16 -17
  16. package/esm2022/app/modules/message-queues/components/queue/queue.component.mjs +48 -42
  17. package/esm2022/app/modules/message-queues/components/queues/queues.component.mjs +33 -32
  18. package/esm2022/app/modules/message-queues/components/recipient/recipient.component.mjs +5 -6
  19. package/esm2022/app/modules/message-queues/message-queues.module.mjs +12 -18
  20. package/esm2022/app/modules/message-queues/pipes/linkify.pipe.mjs +6 -3
  21. package/esm2022/app/modules/message-queues/pipes/truncate.pipe.mjs +3 -2
  22. package/esm2022/app/modules/message-queues/services/message-queue.service.mjs +5 -9
  23. package/esm2022/app/modules/message-templates/components/template/template.component.mjs +30 -39
  24. package/esm2022/app/modules/message-templates/components/templates/templates.component.mjs +10 -18
  25. package/esm2022/app/modules/messages/components/attachments/attachments.component.mjs +12 -19
  26. package/esm2022/app/modules/messages/components/message/message.component.mjs +62 -46
  27. package/esm2022/app/modules/messages/components/messages/messages.component.mjs +10 -19
  28. package/esm2022/app/modules/webhooks/components/webhooks/webhooks.component.mjs +12 -19
  29. package/esm2022/public_api.mjs +1 -4
  30. package/fesm2022/firestitch-app-message.mjs +185 -444
  31. package/fesm2022/firestitch-app-message.mjs.map +1 -1
  32. package/package.json +1 -1
  33. package/public_api.d.ts +0 -3
  34. package/app/modules/message-preview/message-preview.module.d.ts +0 -11
  35. package/app/modules/message-templates/message-templates.module.d.ts +0 -24
  36. package/app/modules/messages/messages.module.d.ts +0 -31
  37. package/app/modules/webhooks/webhooks.module.d.ts +0 -9
  38. package/esm2022/app/modules/message-preview/message-preview.module.mjs +0 -36
  39. package/esm2022/app/modules/message-templates/message-templates.module.mjs +0 -92
  40. package/esm2022/app/modules/messages/messages.module.mjs +0 -119
  41. package/esm2022/app/modules/webhooks/webhooks.module.mjs +0 -28
@@ -1,61 +1,50 @@
1
1
  import * as i0 from '@angular/core';
2
- import { NgModule, Component, Inject, InjectionToken, ChangeDetectionStrategy, ViewChild, Input, Injectable, Pipe } from '@angular/core';
3
- import * as i4$1 from '@angular/common';
2
+ import { NgModule, inject, Component, InjectionToken, ChangeDetectionStrategy, ViewChild, Input, ChangeDetectorRef, Injectable, Pipe } from '@angular/core';
4
3
  import { CommonModule } from '@angular/common';
5
- import * as i5$1 from '@angular/forms';
4
+ import * as i2$3 from '@angular/forms';
6
5
  import { FormsModule } from '@angular/forms';
7
6
  import { RouterModule } from '@angular/router';
8
- import * as i5 from '@angular/material/button';
9
- import { MatButtonModule } from '@angular/material/button';
10
- import * as i1 from '@angular/material/dialog';
11
- import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
12
- import * as i3$2 from '@angular/material/icon';
13
- import { MatIconModule } from '@angular/material/icon';
14
- import * as i6 from '@angular/material/tabs';
15
- import { MatTabsModule } from '@angular/material/tabs';
16
- import * as i2$1 from '@angular/material/tooltip';
17
- import { MatTooltipModule } from '@angular/material/tooltip';
18
- import * as i10$1 from '@firestitch/date';
7
+ import { MatButton, MatAnchor, MatButtonModule } from '@angular/material/button';
8
+ import { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
9
+ import { MatIcon, MatIconModule } from '@angular/material/icon';
10
+ import { MatTabGroup, MatTab, MatTabContent, MatTabsModule } from '@angular/material/tabs';
11
+ import { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';
12
+ import * as i6$1 from '@firestitch/date';
19
13
  import { FsDateModule } from '@firestitch/date';
20
- import * as i3 from '@firestitch/dialog';
14
+ import * as i2 from '@firestitch/dialog';
21
15
  import { FsDialogModule } from '@firestitch/dialog';
22
- import * as i12 from '@firestitch/form';
16
+ import * as i3 from '@firestitch/form';
23
17
  import { FsFormModule } from '@firestitch/form';
24
- import * as i4 from '@firestitch/iframe';
18
+ import * as i2$1 from '@firestitch/iframe';
25
19
  import { FsIFrameModule } from '@firestitch/iframe';
26
- import * as i13 from '@firestitch/label';
20
+ import * as i6 from '@firestitch/label';
27
21
  import { FsLabelModule } from '@firestitch/label';
28
- import * as i2 from '@firestitch/list';
22
+ import * as i1 from '@firestitch/list';
29
23
  import { FsListComponent, FsListModule, PaginationStrategy } from '@firestitch/list';
30
- import * as i1$1 from '@firestitch/message';
31
- import { FsMessageModule } from '@firestitch/message';
32
- import * as i1$2 from '@firestitch/prompt';
33
- import { FsPromptInputModule } from '@firestitch/prompt';
34
- import * as i11$1 from '@firestitch/skeleton';
24
+ import * as i1$2 from '@firestitch/message';
25
+ import { FsMessage, FsMessageModule } from '@firestitch/message';
26
+ import * as i1$1 from '@firestitch/skeleton';
35
27
  import { FsSkeletonModule } from '@firestitch/skeleton';
36
- import { MatCheckboxModule } from '@angular/material/checkbox';
37
- import * as i10 from '@angular/material/core';
38
- import { MatOptionModule } from '@angular/material/core';
39
- import * as i8 from '@angular/material/form-field';
40
- import { MatFormFieldModule } from '@angular/material/form-field';
41
- import * as i9 from '@angular/material/input';
42
- import { MatInputModule } from '@angular/material/input';
43
- import * as i11 from '@angular/material/select';
44
- import { MatSelectModule } from '@angular/material/select';
45
- import * as i3$1 from '@firestitch/common';
46
- import { FsCommonModule } from '@firestitch/common';
47
- import * as i17 from '@firestitch/html-editor';
48
- import { FsHtmlEditorModule, FsHtmlRendererModule } from '@firestitch/html-editor';
49
- import * as i18 from '@firestitch/tabs';
28
+ import { FsPrompt } from '@firestitch/prompt';
29
+ import { Subject, of } from 'rxjs';
30
+ import { tap, switchMap, map, takeUntil, filter } from 'rxjs/operators';
31
+ import anchorme from 'anchorme';
32
+ import { CdkScrollable } from '@angular/cdk/scrolling';
33
+ import * as i5 from '@firestitch/tabs';
50
34
  import { FsTabsModule } from '@firestitch/tabs';
51
- import * as i16 from '@firestitch/text-editor';
35
+ import { MatFormField, MatLabel } from '@angular/material/form-field';
36
+ import { MatInput } from '@angular/material/input';
37
+ import { MatSelect } from '@angular/material/select';
38
+ import { MatOption } from '@angular/material/core';
39
+ import * as i7 from '@firestitch/text-editor';
52
40
  import { FsTextEditorModule } from '@firestitch/text-editor';
53
- import { tap, switchMap, map, takeUntil, filter } from 'rxjs/operators';
54
- import { Subject, of } from 'rxjs';
41
+ import * as i8 from '@firestitch/html-editor';
42
+ import { FsHtmlEditorModule, FsHtmlRendererModule } from '@firestitch/html-editor';
55
43
  import { ActionMode, ItemType } from '@firestitch/filter';
56
- import anchorme from 'anchorme';
44
+ import * as i2$2 from '@firestitch/common';
45
+ import { FsCommonModule } from '@firestitch/common';
57
46
  import { SelectionActionType } from '@firestitch/selection';
58
- import * as i2$2 from '@firestitch/store';
47
+ import { FsStore } from '@firestitch/store';
59
48
  import { isAfter } from 'date-fns';
60
49
 
61
50
  class FsAppMessageModule {
@@ -73,56 +62,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
73
62
  args: [{}]
74
63
  }] });
75
64
 
65
+ function indexNameValue(arry) {
66
+ const obj = {};
67
+ arry.forEach(item => {
68
+ obj[item.value] = item.name;
69
+ });
70
+ return obj;
71
+ }
72
+
76
73
  class PreviewComponent {
77
- _data;
74
+ _data = inject(MAT_DIALOG_DATA);
78
75
  html;
79
76
  styles;
80
- constructor(_data) {
81
- this._data = _data;
77
+ constructor() {
78
+ const _data = this._data;
82
79
  this.html = _data.html;
83
80
  this.styles = _data.styles;
84
81
  }
85
82
  ngOnInit() {
86
83
  }
87
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PreviewComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
88
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PreviewComponent, selector: "ng-component", ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i4.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }] });
84
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
85
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PreviewComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FsIFrameModule }, { kind: "component", type: i2$1.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] });
89
86
  }
90
87
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PreviewComponent, decorators: [{
91
88
  type: Component,
92
- args: [{ template: "<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" }]
93
- }], ctorParameters: () => [{ type: undefined, decorators: [{
94
- type: Inject,
95
- args: [MAT_DIALOG_DATA]
96
- }] }] });
97
-
98
- class FsAppMessagePreviewModule {
99
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessagePreviewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
100
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessagePreviewModule, declarations: [PreviewComponent], imports: [MatDialogModule,
101
- MatButtonModule,
102
- FsDialogModule,
103
- FsIFrameModule], exports: [PreviewComponent] });
104
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessagePreviewModule, imports: [MatDialogModule,
105
- MatButtonModule,
106
- FsDialogModule,
107
- FsIFrameModule] });
108
- }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessagePreviewModule, decorators: [{
110
- type: NgModule,
111
- args: [{
112
- imports: [
113
- MatDialogModule,
114
- MatButtonModule,
115
- FsDialogModule,
116
- FsIFrameModule,
117
- ],
118
- declarations: [
119
- PreviewComponent,
120
- ],
121
- exports: [
122
- PreviewComponent,
123
- ]
124
- }]
125
- }] });
89
+ args: [{ standalone: true, imports: [FsDialogModule, MatDialogTitle, CdkScrollable, MatDialogContent, FsIFrameModule, MatDialogActions, MatButton, MatDialogClose], template: "<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" }]
90
+ }], ctorParameters: () => [] });
126
91
 
127
92
  const FS_APP_MESSAGE_ROOT_CONFIG = new InjectionToken('fs-app-message-root-config');
128
93
  const FS_APP_MESSAGE_CONFIG = new InjectionToken('fs-app-message-config');
@@ -141,16 +106,12 @@ const EmailMessageFormats = [
141
106
  ];
142
107
 
143
108
  class AttachmentsComponent {
144
- _config;
145
- _message;
109
+ _config = inject(FS_APP_MESSAGE_CONFIG);
110
+ _message = inject(FsMessage);
146
111
  list = null;
147
112
  message;
148
113
  config = null;
149
114
  _destroy$ = new Subject();
150
- constructor(_config, _message) {
151
- this._config = _config;
152
- this._message = _message;
153
- }
154
115
  ngOnInit() {
155
116
  this.config = {
156
117
  rowActions: [],
@@ -198,16 +159,13 @@ class AttachmentsComponent {
198
159
  this._destroy$.next(null);
199
160
  this._destroy$.complete();
200
161
  }
201
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AttachmentsComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
202
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: AttachmentsComponent, selector: "fs-app-message-attachments", inputs: { message: "message" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "component", type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "pipe", type: i3$1.FsFormatBytesPipe, name: "fsFormatBytes" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
162
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AttachmentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
163
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: AttachmentsComponent, isStandalone: true, selector: "fs-app-message-attachments", inputs: { message: "message" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsCommonModule }, { kind: "pipe", type: i2$2.FsFormatBytesPipe, name: "fsFormatBytes" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
203
164
  }
204
165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AttachmentsComponent, decorators: [{
205
166
  type: Component,
206
- args: [{ selector: 'fs-app-message-attachments', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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>" }]
207
- }], ctorParameters: () => [{ type: undefined, decorators: [{
208
- type: Inject,
209
- args: [FS_APP_MESSAGE_CONFIG]
210
- }] }, { type: i1$1.FsMessage }], propDecorators: { list: [{
167
+ args: [{ selector: 'fs-app-message-attachments', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FsListModule, FsCommonModule], template: "<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>" }]
168
+ }], propDecorators: { list: [{
211
169
  type: ViewChild,
212
170
  args: [FsListComponent, { static: true }]
213
171
  }], message: [{
@@ -215,25 +173,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
215
173
  }] } });
216
174
 
217
175
  class MessageComponent {
218
- _config;
219
- _data;
220
- _prompt;
221
- _message;
222
- _dialog;
223
- _cdRef;
176
+ _config = inject(FS_APP_MESSAGE_CONFIG);
177
+ _data = inject(MAT_DIALOG_DATA);
178
+ _prompt = inject(FsPrompt);
179
+ _message = inject(FsMessage);
180
+ _dialog = inject(MatDialog);
181
+ _cdRef = inject(ChangeDetectorRef);
224
182
  message;
225
183
  tab = 'general';
226
184
  messageTemplates = [];
227
185
  emailMessageFormats = EmailMessageFormats;
228
186
  emailMessageFormat = EmailMessageFormat;
229
- constructor(_config, _data, _prompt, _message, _dialog, _cdRef) {
230
- this._config = _config;
231
- this._data = _data;
232
- this._prompt = _prompt;
233
- this._message = _message;
234
- this._dialog = _dialog;
235
- this._cdRef = _cdRef;
236
- }
237
187
  ngOnInit() {
238
188
  this._config.loadMessage(this._data.message)
239
189
  .subscribe((message) => {
@@ -306,39 +256,46 @@ class MessageComponent {
306
256
  });
307
257
  });
308
258
  }
309
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MessageComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: MAT_DIALOG_DATA }, { token: i1$2.FsPrompt }, { token: i1$1.FsMessage }, { token: i1.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
310
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: MessageComponent, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"message\"\n [confirmTabs]=\"false\">\n <fs-dialog *ngIf=\"message\">\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 <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 </div>\n </ng-template>\n </mat-tab>\n <mat-tab\n label=\"Email Message\"\n *ngIf=\"message.emailMessage\"\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 <mat-option\n *ngFor=\"let item of emailMessageFormats\"\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\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 <mat-option\n *ngFor=\"let item of messageTemplates\"\n [value]=\"item.id\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngIf=\"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 <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText\">\n <fs-html-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\">\n </fs-html-editor>\n </ng-container>\n <ng-container *ngIf=\"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 </ng-container>\n </ng-template>\n </mat-tab>\n <mat-tab\n *ngIf=\"message.emailMessage.format===emailMessageFormat.HTML || message.emailMessage.format===emailMessageFormat.RichText\"\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 </mat-tab-group>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!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 <fs-html-renderer\n *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText || message.emailMessage.format===emailMessageFormat.HTML\"\n [html]=\"message.defaultEmailBody\">\n </fs-html-renderer>\n </div>\n <div\n class=\"email-body-text-default\"\n *ngIf=\"message.emailMessage.format===emailMessageFormat.Text\">\n {{ message.defaultEmailBody }}\n </div>\n </fs-label-field>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n <ng-container *ngIf=\"!!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 <div\n *ngIf=\"message.smsMessage.customize\"\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 <fs-label-field *ngIf=\"!message.smsMessage.customize\">\n <fs-label>\n Message\n </fs-label>\n <div class=\"content\">\n {{ message.defaultSmsMessage }}\n </div>\n </fs-label-field>\n </ng-template>\n </mat-tab>\n </ng-container>\n <mat-tab\n label=\"Attachments\"\n *ngIf=\"message.emailMessage\"\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 <mat-tab\n label=\"Variables\"\n *ngIf=\"message.variables\">\n <ng-template matTabContent>\n <div\n *ngFor=\"let variable of message.variables\"\n class=\"variable\">\n {{ variable.name }}\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Defaults\">\n <ng-template matTabContent>\n <ng-container *ngIf=\"message.emailMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">\n Email\n </h2>\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 </ng-container>\n <ng-container *ngIf=\"message.smsMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">\n SMS\n </h2>\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 </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"tab==='email' || tab==='sms' || tab==='general'; else done\">\n <button\n mat-button\n color=\"primary\">\n Save\n </button>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"tab==='sms'\">\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('sms')\"\n type=\"button\">\n Send Test SMS\n </button>\n </ng-container>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Cancel\n </button>\n </ng-container>\n <ng-template #done>\n <button\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Close\n </button>\n </ng-template>\n </mat-dialog-actions>\n </fs-dialog>\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"], dependencies: [{ kind: "directive", type: i4$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i13.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i13.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "directive", type: i11$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "directive", type: i12.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i12.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i12.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i12.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i16.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["ready", "blur"] }, { kind: "component", type: i17.FsHtmlEditorComponent, selector: "fs-html-editor", inputs: ["config", "disabled"] }, { kind: "component", type: i17.FsHtmlRendererComponent, selector: "fs-html-renderer", inputs: ["html"] }, { kind: "directive", type: i18.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { kind: "directive", type: i18.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { kind: "component", type: AttachmentsComponent, selector: "fs-app-message-attachments", inputs: ["message"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
259
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
260
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: MessageComponent, isStandalone: true, selector: "ng-component", ngImport: i0, 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 <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 </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"], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i3.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i3.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i3.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i3.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: FsTabsModule }, { kind: "directive", type: i5.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { kind: "directive", type: i5.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "directive", type: MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i6.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FsTextEditorModule }, { kind: "component", type: i7.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["ready", "blur"] }, { kind: "ngmodule", type: FsHtmlEditorModule }, { kind: "component", type: i8.FsHtmlEditorComponent, selector: "fs-html-editor", inputs: ["config", "disabled"] }, { kind: "ngmodule", type: FsHtmlRendererModule }, { kind: "component", type: i8.FsHtmlRendererComponent, selector: "fs-html-renderer", inputs: ["html"] }, { kind: "component", type: AttachmentsComponent, selector: "fs-app-message-attachments", inputs: ["message"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
311
261
  }
312
262
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MessageComponent, decorators: [{
313
263
  type: Component,
314
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"message\"\n [confirmTabs]=\"false\">\n <fs-dialog *ngIf=\"message\">\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 <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 </div>\n </ng-template>\n </mat-tab>\n <mat-tab\n label=\"Email Message\"\n *ngIf=\"message.emailMessage\"\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 <mat-option\n *ngFor=\"let item of emailMessageFormats\"\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\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 <mat-option\n *ngFor=\"let item of messageTemplates\"\n [value]=\"item.id\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngIf=\"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 <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText\">\n <fs-html-editor\n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\">\n </fs-html-editor>\n </ng-container>\n <ng-container *ngIf=\"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 </ng-container>\n </ng-template>\n </mat-tab>\n <mat-tab\n *ngIf=\"message.emailMessage.format===emailMessageFormat.HTML || message.emailMessage.format===emailMessageFormat.RichText\"\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 </mat-tab-group>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!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 <fs-html-renderer\n *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText || message.emailMessage.format===emailMessageFormat.HTML\"\n [html]=\"message.defaultEmailBody\">\n </fs-html-renderer>\n </div>\n <div\n class=\"email-body-text-default\"\n *ngIf=\"message.emailMessage.format===emailMessageFormat.Text\">\n {{ message.defaultEmailBody }}\n </div>\n </fs-label-field>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n <ng-container *ngIf=\"!!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 <div\n *ngIf=\"message.smsMessage.customize\"\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 <fs-label-field *ngIf=\"!message.smsMessage.customize\">\n <fs-label>\n Message\n </fs-label>\n <div class=\"content\">\n {{ message.defaultSmsMessage }}\n </div>\n </fs-label-field>\n </ng-template>\n </mat-tab>\n </ng-container>\n <mat-tab\n label=\"Attachments\"\n *ngIf=\"message.emailMessage\"\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 <mat-tab\n label=\"Variables\"\n *ngIf=\"message.variables\">\n <ng-template matTabContent>\n <div\n *ngFor=\"let variable of message.variables\"\n class=\"variable\">\n {{ variable.name }}\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Defaults\">\n <ng-template matTabContent>\n <ng-container *ngIf=\"message.emailMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">\n Email\n </h2>\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 </ng-container>\n <ng-container *ngIf=\"message.smsMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">\n SMS\n </h2>\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 </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"tab==='email' || tab==='sms' || tab==='general'; else done\">\n <button\n mat-button\n color=\"primary\">\n Save\n </button>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"tab==='sms'\">\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('sms')\"\n type=\"button\">\n Send Test SMS\n </button>\n </ng-container>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Cancel\n </button>\n </ng-container>\n <ng-template #done>\n <button\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\"\n type=\"button\">\n Close\n </button>\n </ng-template>\n </mat-dialog-actions>\n </fs-dialog>\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"] }]
315
- }], ctorParameters: () => [{ type: undefined, decorators: [{
316
- type: Inject,
317
- args: [FS_APP_MESSAGE_CONFIG]
318
- }] }, { type: undefined, decorators: [{
319
- type: Inject,
320
- args: [MAT_DIALOG_DATA]
321
- }] }, { type: i1$2.FsPrompt }, { type: i1$1.FsMessage }, { type: i1.MatDialog }, { type: i0.ChangeDetectorRef }] });
322
-
323
- function indexNameValue(arry) {
324
- const obj = {};
325
- arry.forEach(item => {
326
- obj[item.value] = item.name;
327
- });
328
- return obj;
329
- }
264
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
265
+ FsSkeletonModule,
266
+ FormsModule,
267
+ FsFormModule,
268
+ FsDialogModule,
269
+ MatDialogTitle,
270
+ CdkScrollable,
271
+ MatDialogContent,
272
+ MatTabGroup,
273
+ FsTabsModule,
274
+ MatTab,
275
+ MatTabContent,
276
+ MatFormField,
277
+ MatLabel,
278
+ MatInput,
279
+ FsLabelModule,
280
+ MatSelect,
281
+ MatOption,
282
+ FsTextEditorModule,
283
+ FsHtmlEditorModule,
284
+ FsHtmlRendererModule,
285
+ AttachmentsComponent,
286
+ MatDialogActions,
287
+ MatButton,
288
+ MatDialogClose,
289
+ ], 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 <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 </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"] }]
290
+ }] });
330
291
 
331
292
  class MessagesComponent {
332
- _config;
333
- _dialog;
293
+ _config = inject(FS_APP_MESSAGE_CONFIG);
294
+ _dialog = inject(MatDialog);
334
295
  list = null;
335
296
  config = null;
336
297
  emailMessageFormats = {};
337
298
  _destroy$ = new Subject();
338
- constructor(_config, _dialog) {
339
- this._config = _config;
340
- this._dialog = _dialog;
341
- }
342
299
  ngOnInit() {
343
300
  this.emailMessageFormats = indexNameValue(EmailMessageFormats);
344
301
  this.config = {
@@ -374,112 +331,17 @@ class MessagesComponent {
374
331
  this._destroy$.next(null);
375
332
  this._destroy$.complete();
376
333
  }
377
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MessagesComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
378
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: MessagesComponent, selector: "fs-app-messages", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<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 {{ emailMessageFormats[row.emailMessage.format] }}\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 {{ row.emailMessage.messageTemplate?.name || 'None' }}\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 <ng-container *ngIf=\"row.emailMessage?.customize || row.smsMessage?.customize; else noCustomize\">\n <ng-container *ngIf=\"row.emailMessage?.customize\">\n {{ row.emailMessage.customize ? 'Email' : '' }}\n </ng-container>\n <ng-container *ngIf=\"row.smsMessage?.customize\">\n {{ row.smsMessage.customize ? 'SMS' : '' }}\n </ng-container>\n </ng-container>\n <ng-template #noCustomize>\n None\n </ng-template>\n </ng-template>\n </fs-list-column>\n</fs-list>", dependencies: [{ kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
334
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MessagesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
335
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: MessagesComponent, isStandalone: true, selector: "fs-app-messages", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<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 {{ emailMessageFormats[row.emailMessage.format] }}\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 {{ row.emailMessage.messageTemplate?.name || 'None' }}\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>", dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
379
336
  }
380
337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MessagesComponent, decorators: [{
381
338
  type: Component,
382
- args: [{ selector: 'fs-app-messages', template: "<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 {{ emailMessageFormats[row.emailMessage.format] }}\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 {{ row.emailMessage.messageTemplate?.name || 'None' }}\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 <ng-container *ngIf=\"row.emailMessage?.customize || row.smsMessage?.customize; else noCustomize\">\n <ng-container *ngIf=\"row.emailMessage?.customize\">\n {{ row.emailMessage.customize ? 'Email' : '' }}\n </ng-container>\n <ng-container *ngIf=\"row.smsMessage?.customize\">\n {{ row.smsMessage.customize ? 'SMS' : '' }}\n </ng-container>\n </ng-container>\n <ng-template #noCustomize>\n None\n </ng-template>\n </ng-template>\n </fs-list-column>\n</fs-list>" }]
383
- }], ctorParameters: () => [{ type: undefined, decorators: [{
384
- type: Inject,
385
- args: [FS_APP_MESSAGE_CONFIG]
386
- }] }, { type: i1.MatDialog }], propDecorators: { list: [{
339
+ args: [{ selector: 'fs-app-messages', standalone: true, imports: [FsListModule], template: "<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 {{ emailMessageFormats[row.emailMessage.format] }}\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 {{ row.emailMessage.messageTemplate?.name || 'None' }}\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>" }]
340
+ }], propDecorators: { list: [{
387
341
  type: ViewChild,
388
342
  args: [FsListComponent, { static: true }]
389
343
  }] } });
390
344
 
391
- class FsAppMessagesModule {
392
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessagesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
393
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessagesModule, declarations: [MessagesComponent,
394
- MessageComponent,
395
- AttachmentsComponent], imports: [RouterModule,
396
- CommonModule,
397
- FormsModule,
398
- MatDialogModule,
399
- MatButtonModule,
400
- MatTabsModule,
401
- MatFormFieldModule,
402
- MatInputModule,
403
- MatOptionModule,
404
- MatSelectModule,
405
- MatTooltipModule,
406
- MatCheckboxModule,
407
- FsDialogModule,
408
- FsListModule,
409
- FsLabelModule,
410
- FsSkeletonModule,
411
- FsFormModule,
412
- FsTextEditorModule,
413
- FsHtmlEditorModule,
414
- FsHtmlRendererModule,
415
- FsCommonModule,
416
- FsTabsModule,
417
- FsAppMessagePreviewModule], exports: [MessagesComponent,
418
- MessageComponent] });
419
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessagesModule, imports: [RouterModule,
420
- CommonModule,
421
- FormsModule,
422
- MatDialogModule,
423
- MatButtonModule,
424
- MatTabsModule,
425
- MatFormFieldModule,
426
- MatInputModule,
427
- MatOptionModule,
428
- MatSelectModule,
429
- MatTooltipModule,
430
- MatCheckboxModule,
431
- FsDialogModule,
432
- FsListModule,
433
- FsLabelModule,
434
- FsSkeletonModule,
435
- FsFormModule,
436
- FsTextEditorModule,
437
- FsHtmlEditorModule,
438
- FsHtmlRendererModule,
439
- FsCommonModule,
440
- FsTabsModule,
441
- FsAppMessagePreviewModule] });
442
- }
443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessagesModule, decorators: [{
444
- type: NgModule,
445
- args: [{
446
- imports: [
447
- RouterModule,
448
- CommonModule,
449
- FormsModule,
450
- MatDialogModule,
451
- MatButtonModule,
452
- MatTabsModule,
453
- MatFormFieldModule,
454
- MatInputModule,
455
- MatOptionModule,
456
- MatSelectModule,
457
- MatTooltipModule,
458
- MatCheckboxModule,
459
- FsDialogModule,
460
- FsListModule,
461
- FsLabelModule,
462
- FsSkeletonModule,
463
- FsFormModule,
464
- FsTextEditorModule,
465
- FsHtmlEditorModule,
466
- FsHtmlRendererModule,
467
- FsCommonModule,
468
- FsTabsModule,
469
- FsAppMessagePreviewModule,
470
- ],
471
- declarations: [
472
- MessagesComponent,
473
- MessageComponent,
474
- AttachmentsComponent,
475
- ],
476
- exports: [
477
- MessagesComponent,
478
- MessageComponent,
479
- ],
480
- }]
481
- }] });
482
-
483
345
  var MessageQueueState;
484
346
  (function (MessageQueueState) {
485
347
  MessageQueueState["Sent"] = "S";
@@ -538,11 +400,11 @@ class RecipientComponent {
538
400
  this.icon = icons[this.state];
539
401
  }
540
402
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RecipientComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
541
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RecipientComponent, selector: "app-recipient", inputs: { name: "name", state: "state" }, ngImport: i0, template: "<span class=\"recipient\">\n <span class=\"name\">{{name}}</span>\n <mat-icon *ngIf=\"icon\" [class]=\"'state-' + state\" [matTooltip]=\"icon.tooltip\">{{icon.name}}</mat-icon>\n</span>", styles: ["mat-icon{font-size:14px;width:14px;height:14px;line-height:14px;margin-left:2px}mat-icon.state-S{color:#5fa099}mat-icon.state-E{color:#fbbc04}mat-icon.state-F{color:#d8524e}.recipient{display:inline-flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i3$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
403
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: RecipientComponent, isStandalone: true, selector: "app-recipient", inputs: { name: "name", state: "state" }, ngImport: i0, template: "<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>", styles: ["mat-icon{font-size:14px;width:14px;height:14px;line-height:14px;margin-left:2px}mat-icon.state-S{color:#5fa099}mat-icon.state-E{color:#fbbc04}mat-icon.state-F{color:#d8524e}.recipient{display:inline-flex;align-items:center}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
542
404
  }
543
405
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RecipientComponent, decorators: [{
544
406
  type: Component,
545
- args: [{ selector: 'app-recipient', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"recipient\">\n <span class=\"name\">{{name}}</span>\n <mat-icon *ngIf=\"icon\" [class]=\"'state-' + state\" [matTooltip]=\"icon.tooltip\">{{icon.name}}</mat-icon>\n</span>", styles: ["mat-icon{font-size:14px;width:14px;height:14px;line-height:14px;margin-left:2px}mat-icon.state-S{color:#5fa099}mat-icon.state-E{color:#fbbc04}mat-icon.state-F{color:#d8524e}.recipient{display:inline-flex;align-items:center}\n"] }]
407
+ args: [{ selector: 'app-recipient', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatIcon, MatTooltip], template: "<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>", styles: ["mat-icon{font-size:14px;width:14px;height:14px;line-height:14px;margin-left:2px}mat-icon.state-S{color:#5fa099}mat-icon.state-E{color:#fbbc04}mat-icon.state-F{color:#d8524e}.recipient{display:inline-flex;align-items:center}\n"] }]
546
408
  }], propDecorators: { name: [{
547
409
  type: Input
548
410
  }], state: [{
@@ -550,12 +412,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
550
412
  }] } });
551
413
 
552
414
  class QueueComponent {
553
- _config;
554
- _data;
555
- _message;
556
- _prompt;
557
- _dialog;
558
- _cdRef;
415
+ _config = inject(FS_APP_MESSAGE_CONFIG);
416
+ _data = inject(MAT_DIALOG_DATA);
417
+ _message = inject(FsMessage);
418
+ _prompt = inject(FsPrompt);
419
+ _dialog = inject(MatDialog);
420
+ _cdRef = inject(ChangeDetectorRef);
559
421
  logList;
560
422
  messageQueue;
561
423
  loadMessage;
@@ -570,14 +432,6 @@ class QueueComponent {
570
432
  MessageQueueEventTypes = indexNameValue(MessageQueueEventTypes);
571
433
  MessageQueueEventType = MessageQueueEventType;
572
434
  _destroy$ = new Subject();
573
- constructor(_config, _data, _message, _prompt, _dialog, _cdRef) {
574
- this._config = _config;
575
- this._data = _data;
576
- this._message = _message;
577
- this._prompt = _prompt;
578
- this._dialog = _dialog;
579
- this._cdRef = _cdRef;
580
- }
581
435
  ngOnInit() {
582
436
  this.messageQueueStates = indexNameValue(MessageQueueStates);
583
437
  this.resendMessageQueue = this._config.resendMessageQueue;
@@ -728,28 +582,36 @@ class QueueComponent {
728
582
  const e = Math.floor(Math.log(bytes) / Math.log(1024));
729
583
  return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';
730
584
  }
731
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueueComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: MAT_DIALOG_DATA }, { token: i1$1.FsMessage }, { token: i1$2.FsPrompt }, { token: i1.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
732
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: QueueComponent, selector: "ng-component", viewQueries: [{ propertyName: "logList", first: true, predicate: ["logList"], descendants: true }], ngImport: i0, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>\n Message Queue\n </div>\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 <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{ messageQueue.emailMessageQueue.fromName }}\n </ng-container>\n <ng-template #fromEmailName>\n {{ messageQueue.emailMessageQueue.fromName }}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n </ng-container>\n </ng-template>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"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 <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n </ng-container>\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 <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{ messageQueue.message.name }}\n </a>\n <ng-template #elseMessage>\n {{ messageQueue.message.name }}\n </ng-template>\n </fs-label-field>\n </div>\n <ng-container *ngIf=\"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 <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"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 </ng-container>\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 <div\n class=\"small\"\n *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\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 <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"], dependencies: [{ kind: "directive", type: i4$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i13.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i13.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: i10$1.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: i11$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "directive", type: i12.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i4.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }, { kind: "component", type: RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "pipe", type: i10$1.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
585
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
586
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: QueueComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "logList", first: true, predicate: ["logList"], descendants: true }], ngImport: i0, template: "<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>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i2.FsDialogTitleComponent, selector: "fs-dialog-title", inputs: ["close", "dockToggle", "back"] }, { kind: "directive", type: i2.FsDialogSubtitleDirective, selector: "[fsDialogSubtitle]" }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "directive", type: MatTabContent, selector: "[matTabContent]" }, { kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i6.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "ngmodule", type: FsIFrameModule }, { kind: "component", type: i2$1.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }, { kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "pipe", type: i6$1.FsDateFormatPipe, name: "fsDateFormat" }, { kind: "component", type: i6$1.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i3.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
733
587
  }
734
588
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueueComponent, decorators: [{
735
589
  type: Component,
736
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>\n Message Queue\n </div>\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 <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{ messageQueue.emailMessageQueue.fromName }}\n </ng-container>\n <ng-template #fromEmailName>\n {{ messageQueue.emailMessageQueue.fromName }}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n </ng-container>\n </ng-template>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"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 <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n </ng-container>\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 <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{ messageQueue.message.name }}\n </a>\n <ng-template #elseMessage>\n {{ messageQueue.message.name }}\n </ng-template>\n </fs-label-field>\n </div>\n <ng-container *ngIf=\"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 <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"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 </ng-container>\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 <div\n class=\"small\"\n *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\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 <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"] }]
737
- }], ctorParameters: () => [{ type: undefined, decorators: [{
738
- type: Inject,
739
- args: [FS_APP_MESSAGE_CONFIG]
740
- }] }, { type: undefined, decorators: [{
741
- type: Inject,
742
- args: [MAT_DIALOG_DATA]
743
- }] }, { type: i1$1.FsMessage }, { type: i1$2.FsPrompt }, { type: i1.MatDialog }, { type: i0.ChangeDetectorRef }], propDecorators: { logList: [{
590
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
591
+ FsSkeletonModule,
592
+ FsDialogModule,
593
+ CdkScrollable,
594
+ MatDialogContent,
595
+ MatTabGroup,
596
+ MatTab,
597
+ MatTabContent,
598
+ FsLabelModule,
599
+ RecipientComponent,
600
+ FsIFrameModule,
601
+ FsListModule,
602
+ FsDateModule,
603
+ MatDialogActions,
604
+ MatButton,
605
+ FsFormModule,
606
+ MatDialogClose,
607
+ ], template: "<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>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"] }]
608
+ }], propDecorators: { logList: [{
744
609
  type: ViewChild,
745
610
  args: ['logList']
746
611
  }] } });
747
612
 
748
613
  class FsMessageQueueService {
749
- _dialog;
750
- constructor(_dialog) {
751
- this._dialog = _dialog;
752
- }
614
+ _dialog = inject(MatDialog);
753
615
  openMessageQueue(messageQueueId, options = {}) {
754
616
  return this._dialog.open(QueueComponent, {
755
617
  ...options,
@@ -760,7 +622,7 @@ class FsMessageQueueService {
760
622
  })
761
623
  .afterClosed();
762
624
  }
763
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsMessageQueueService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
625
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsMessageQueueService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
764
626
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsMessageQueueService, providedIn: 'root' });
765
627
  }
766
628
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsMessageQueueService, decorators: [{
@@ -768,7 +630,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
768
630
  args: [{
769
631
  providedIn: 'root',
770
632
  }]
771
- }], ctorParameters: () => [{ type: i1.MatDialog }] });
633
+ }] });
772
634
 
773
635
  class TruncatePipe {
774
636
  transform(value, limit = 25, completeWords = false, ellipsis = '...') {
@@ -782,20 +644,21 @@ class TruncatePipe {
782
644
  return `${value.substr(0, limit)}${ellipsis}`;
783
645
  }
784
646
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TruncatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
785
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: TruncatePipe, name: "truncate" });
647
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: TruncatePipe, isStandalone: true, name: "truncate" });
786
648
  }
787
649
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TruncatePipe, decorators: [{
788
650
  type: Pipe,
789
651
  args: [{
790
652
  name: 'truncate',
653
+ standalone: true,
791
654
  }]
792
655
  }] });
793
656
 
794
657
  class QueuesComponent {
795
- _config;
796
- _messageQueueService;
797
- _cdRef;
798
- _store;
658
+ _config = inject(FS_APP_MESSAGE_CONFIG);
659
+ _messageQueueService = inject(FsMessageQueueService);
660
+ _cdRef = inject(ChangeDetectorRef);
661
+ _store = inject(FsStore);
799
662
  list = null;
800
663
  query = {};
801
664
  type;
@@ -805,12 +668,6 @@ class QueuesComponent {
805
668
  MessageQueueState = MessageQueueState;
806
669
  webHookEnabled;
807
670
  _destroy$ = new Subject();
808
- constructor(_config, _messageQueueService, _cdRef, _store) {
809
- this._config = _config;
810
- this._messageQueueService = _messageQueueService;
811
- this._cdRef = _cdRef;
812
- this._store = _store;
813
- }
814
671
  ngOnInit() {
815
672
  this.messageQueueStates = indexNameValue(MessageQueueStates);
816
673
  this._initConfig();
@@ -998,16 +855,23 @@ class QueuesComponent {
998
855
  ...this.config,
999
856
  };
1000
857
  }
1001
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueuesComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: FsMessageQueueService }, { token: i0.ChangeDetectorRef }, { token: i2$2.FsStore }], target: i0.ɵɵFactoryTarget.Component });
1002
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: QueuesComponent, selector: "fs-app-message-queues", inputs: { query: "query", type: "type", config: "config" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"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</ng-container>\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 <ng-container *ngIf=\"row.emailMessageQueue\">\n <a (click)=\"open(row)\">\n {{ row.emailMessageQueue.subject|truncate:100 }}\n </a>\n <ng-container *ngIf=\"row.messageQueueAttachmentCount\">\n <mat-icon\n class=\"attachment-icon\"\n [matTooltip]=\"row.messageQueueAttachmentCount + ' Attachment(s)'\">\n attach_file\n </mat-icon>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"row.smsMessageQueue\">\n <a (click)=\"open(row)\">\n {{ row.smsMessageQueue.body|truncate:100 }}\n </a>\n </ng-container>\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 <ng-container *ngIf=\"row.emailMessageQueue\">\n <ng-container *ngIf=\"row.emailMessageQueue.toRecipients.length; else unspecified\">\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.toRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n </ng-container>\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.ccRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.bccRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n </ng-container>\n <ng-container *ngIf=\"row.smsMessageQueue\">\n <ng-container *ngIf=\"row.smsMessageQueue.toNumber; else unspecified\">\n <app-recipient\n class=\"small\"\n [state]=\"row.state\"\n [name]=\"row.smsMessageQueue.toNumber\">\n </app-recipient>\n </ng-container>\n </ng-container>\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 <ng-container *ngIf=\"row.scheduled; else state\">\n Scheduled\n <div class=\"small\">\n {{ row.scheduledDate | fsDateFormat: 'date-time' }}\n </div>\n </ng-container>\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<ng-template #unspecified>\n <app-recipient\n class=\"small\"\n [state]=\"MessageQueueState.Failed\"\n name=\"Unspecified\">\n </app-recipient>\n</ng-template>", styles: [":host ::ng-deep .col-recipients small+small:before{content:\", \"}:host ::ng-deep .col-state .state-F,:host ::ng-deep .col-state .state-P{color:#d8524e}.attachment-icon{vertical-align:bottom}fs-message-info{margin-bottom:10px;display:block}\n"], dependencies: [{ kind: "directive", type: i4$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i12.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i1$1.FsMessageInfoComponent, selector: "fs-message-info" }, { kind: "component", type: RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "pipe", type: i10$1.FsDateFormatPipe, name: "fsDateFormat" }, { kind: "pipe", type: TruncatePipe, name: "truncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
858
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueuesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
859
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: QueuesComponent, isStandalone: true, selector: "fs-app-message-queues", inputs: { query: "query", type: "type", config: "config" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "@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", styles: [":host ::ng-deep .col-recipients small+small:before{content:\", \"}:host ::ng-deep .col-state .state-F,:host ::ng-deep .col-state .state-P{color:#d8524e}.attachment-icon{vertical-align:bottom}fs-message-info{margin-bottom:10px;display:block}\n"], dependencies: [{ kind: "ngmodule", type: FsMessageModule }, { kind: "component", type: i1$2.FsMessageInfoComponent, selector: "fs-message-info" }, { kind: "component", type: MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i3.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "pipe", type: i6$1.FsDateFormatPipe, name: "fsDateFormat" }, { kind: "pipe", type: TruncatePipe, name: "truncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1003
860
  }
1004
861
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueuesComponent, decorators: [{
1005
862
  type: Component,
1006
- args: [{ selector: 'fs-app-message-queues', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"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</ng-container>\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 <ng-container *ngIf=\"row.emailMessageQueue\">\n <a (click)=\"open(row)\">\n {{ row.emailMessageQueue.subject|truncate:100 }}\n </a>\n <ng-container *ngIf=\"row.messageQueueAttachmentCount\">\n <mat-icon\n class=\"attachment-icon\"\n [matTooltip]=\"row.messageQueueAttachmentCount + ' Attachment(s)'\">\n attach_file\n </mat-icon>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"row.smsMessageQueue\">\n <a (click)=\"open(row)\">\n {{ row.smsMessageQueue.body|truncate:100 }}\n </a>\n </ng-container>\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 <ng-container *ngIf=\"row.emailMessageQueue\">\n <ng-container *ngIf=\"row.emailMessageQueue.toRecipients.length; else unspecified\">\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.toRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n </ng-container>\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.ccRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.bccRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n </ng-container>\n <ng-container *ngIf=\"row.smsMessageQueue\">\n <ng-container *ngIf=\"row.smsMessageQueue.toNumber; else unspecified\">\n <app-recipient\n class=\"small\"\n [state]=\"row.state\"\n [name]=\"row.smsMessageQueue.toNumber\">\n </app-recipient>\n </ng-container>\n </ng-container>\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 <ng-container *ngIf=\"row.scheduled; else state\">\n Scheduled\n <div class=\"small\">\n {{ row.scheduledDate | fsDateFormat: 'date-time' }}\n </div>\n </ng-container>\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<ng-template #unspecified>\n <app-recipient\n class=\"small\"\n [state]=\"MessageQueueState.Failed\"\n name=\"Unspecified\">\n </app-recipient>\n</ng-template>", styles: [":host ::ng-deep .col-recipients small+small:before{content:\", \"}:host ::ng-deep .col-state .state-F,:host ::ng-deep .col-state .state-P{color:#d8524e}.attachment-icon{vertical-align:bottom}fs-message-info{margin-bottom:10px;display:block}\n"] }]
1007
- }], ctorParameters: () => [{ type: undefined, decorators: [{
1008
- type: Inject,
1009
- args: [FS_APP_MESSAGE_CONFIG]
1010
- }] }, { type: FsMessageQueueService }, { type: i0.ChangeDetectorRef }, { type: i2$2.FsStore }], propDecorators: { list: [{
863
+ args: [{ selector: 'fs-app-message-queues', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
864
+ FsMessageModule,
865
+ MatAnchor,
866
+ FsFormModule,
867
+ FsListModule,
868
+ MatIcon,
869
+ MatTooltip,
870
+ RecipientComponent,
871
+ FsDateModule,
872
+ TruncatePipe,
873
+ ], template: "@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", styles: [":host ::ng-deep .col-recipients small+small:before{content:\", \"}:host ::ng-deep .col-state .state-F,:host ::ng-deep .col-state .state-P{color:#d8524e}.attachment-icon{vertical-align:bottom}fs-message-info{margin-bottom:10px;display:block}\n"] }]
874
+ }], propDecorators: { list: [{
1011
875
  type: ViewChild,
1012
876
  args: [FsListComponent, { static: true }]
1013
877
  }], query: [{
@@ -1030,20 +894,19 @@ class LinkifyPipe {
1030
894
  });
1031
895
  }
1032
896
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LinkifyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1033
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: LinkifyPipe, name: "linkify" });
897
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: LinkifyPipe, isStandalone: true, name: "linkify" });
1034
898
  }
1035
899
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LinkifyPipe, decorators: [{
1036
900
  type: Pipe,
1037
- args: [{ name: 'linkify' }]
901
+ args: [{
902
+ name: 'linkify',
903
+ standalone: true
904
+ }]
1038
905
  }] });
1039
906
 
1040
907
  class FsAppMessageQueuesModule {
1041
908
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageQueuesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1042
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageQueuesModule, declarations: [QueuesComponent,
1043
- QueueComponent,
1044
- LinkifyPipe,
1045
- TruncatePipe,
1046
- RecipientComponent], imports: [RouterModule,
909
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageQueuesModule, imports: [RouterModule,
1047
910
  FormsModule,
1048
911
  CommonModule,
1049
912
  MatTooltipModule,
@@ -1056,11 +919,14 @@ class FsAppMessageQueuesModule {
1056
919
  FsLabelModule,
1057
920
  FsDateModule,
1058
921
  FsSkeletonModule,
1059
- FsAppMessagesModule,
1060
922
  FsFormModule,
1061
- FsPromptInputModule,
1062
923
  FsIFrameModule,
1063
- FsMessageModule], exports: [QueuesComponent,
924
+ FsMessageModule,
925
+ QueuesComponent,
926
+ QueueComponent,
927
+ LinkifyPipe,
928
+ TruncatePipe,
929
+ RecipientComponent], exports: [QueuesComponent,
1064
930
  QueueComponent] });
1065
931
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageQueuesModule, providers: [
1066
932
  FsMessageQueueService,
@@ -1077,11 +943,12 @@ class FsAppMessageQueuesModule {
1077
943
  FsLabelModule,
1078
944
  FsDateModule,
1079
945
  FsSkeletonModule,
1080
- FsAppMessagesModule,
1081
946
  FsFormModule,
1082
- FsPromptInputModule,
1083
947
  FsIFrameModule,
1084
- FsMessageModule] });
948
+ FsMessageModule,
949
+ QueuesComponent,
950
+ QueueComponent,
951
+ RecipientComponent] });
1085
952
  }
1086
953
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageQueuesModule, decorators: [{
1087
954
  type: NgModule,
@@ -1100,13 +967,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1100
967
  FsLabelModule,
1101
968
  FsDateModule,
1102
969
  FsSkeletonModule,
1103
- FsAppMessagesModule,
1104
970
  FsFormModule,
1105
- FsPromptInputModule,
1106
971
  FsIFrameModule,
1107
972
  FsMessageModule,
1108
- ],
1109
- declarations: [
1110
973
  QueuesComponent,
1111
974
  QueueComponent,
1112
975
  LinkifyPipe,
@@ -1124,11 +987,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1124
987
  }] });
1125
988
 
1126
989
  class TemplateComponent {
1127
- _data;
1128
- _config;
1129
- _dialogRef;
1130
- _message;
1131
- _dialog;
1132
990
  messageTemplate;
1133
991
  htmlEditorconfig = {
1134
992
  language: 'html',
@@ -1140,17 +998,15 @@ class TemplateComponent {
1140
998
  insertSpaces: true,
1141
999
  tabSize: 2,
1142
1000
  };
1143
- constructor(_data, _config, _dialogRef, _message, _dialog) {
1144
- this._data = _data;
1145
- this._config = _config;
1146
- this._dialogRef = _dialogRef;
1147
- this._message = _message;
1148
- this._dialog = _dialog;
1149
- }
1001
+ _data = inject(MAT_DIALOG_DATA);
1002
+ _config = inject(FS_APP_MESSAGE_CONFIG);
1003
+ _dialogRef = inject(MatDialogRef);
1004
+ _message = inject(FsMessage);
1005
+ _dialog = inject(MatDialog);
1150
1006
  ngOnInit() {
1151
1007
  if (this._data.messageTemplate.id) {
1152
1008
  this._config.loadMessageTemplate(this._data.messageTemplate)
1153
- .subscribe(messageTemplate => {
1009
+ .subscribe((messageTemplate) => {
1154
1010
  this.messageTemplate = messageTemplate;
1155
1011
  });
1156
1012
  }
@@ -1176,31 +1032,21 @@ class TemplateComponent {
1176
1032
  }
1177
1033
  }));
1178
1034
  };
1179
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplateComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: FS_APP_MESSAGE_CONFIG }, { token: i1.MatDialogRef }, { token: i1$1.FsMessage }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1180
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: TemplateComponent, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"messageTemplate\"\n [confirmTabs]=\"false\">\n <fs-dialog *ngIf=\"messageTemplate\">\n <div mat-dialog-title>Message Template</div>\n <mat-dialog-content>\n <div class=\"fs-column\">\n <mat-form-field class=\"name\">\n <mat-label>Name</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 mat-button type=\"submit\" color=\"primary\" name=\"close\">Save</button>\n <button mat-button type=\"submit\" name=\"save-close\">Save & Close</button>\n <button mat-button (click)=\"openPreview()\" type=\"button\">Preview</button>\n <button mat-button [mat-dialog-close]=\"null\" type=\"button\">Cancel</button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: [".name{width:100%}:host ::ng-deep .mat-tab-body-content,:host ::ng-deep .mat-tab-body{overflow:visible}\n"], dependencies: [{ kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i13.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: i13.FsLabelMessageComponent, selector: "fs-label-message" }, { kind: "directive", type: i11$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "directive", type: i12.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i12.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i12.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i12.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i16.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["ready", "blur"] }] });
1035
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1036
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: TemplateComponent, isStandalone: true, selector: "ng-component", ngImport: i0, 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"], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i3.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i3.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i3.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i3.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "directive", type: MatTabContent, selector: "[matTabContent]" }, { kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: i6.FsLabelMessageComponent, selector: "fs-label-message" }, { kind: "ngmodule", type: FsTextEditorModule }, { kind: "component", type: i7.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["ready", "blur"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] });
1181
1037
  }
1182
1038
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplateComponent, decorators: [{
1183
1039
  type: Component,
1184
- args: [{ template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"messageTemplate\"\n [confirmTabs]=\"false\">\n <fs-dialog *ngIf=\"messageTemplate\">\n <div mat-dialog-title>Message Template</div>\n <mat-dialog-content>\n <div class=\"fs-column\">\n <mat-form-field class=\"name\">\n <mat-label>Name</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 mat-button type=\"submit\" color=\"primary\" name=\"close\">Save</button>\n <button mat-button type=\"submit\" name=\"save-close\">Save & Close</button>\n <button mat-button (click)=\"openPreview()\" type=\"button\">Preview</button>\n <button mat-button [mat-dialog-close]=\"null\" type=\"button\">Cancel</button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: [".name{width:100%}:host ::ng-deep .mat-tab-body-content,:host ::ng-deep .mat-tab-body{overflow:visible}\n"] }]
1185
- }], ctorParameters: () => [{ type: undefined, decorators: [{
1186
- type: Inject,
1187
- args: [MAT_DIALOG_DATA]
1188
- }] }, { type: undefined, decorators: [{
1189
- type: Inject,
1190
- args: [FS_APP_MESSAGE_CONFIG]
1191
- }] }, { type: i1.MatDialogRef }, { type: i1$1.FsMessage }, { type: i1.MatDialog }] });
1040
+ 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"] }]
1041
+ }] });
1192
1042
 
1193
1043
  class TemplatesComponent {
1194
- _config;
1195
- _dialog;
1044
+ _config = inject(FS_APP_MESSAGE_CONFIG);
1045
+ _dialog = inject(MatDialog);
1196
1046
  list = null;
1197
1047
  config = null;
1198
1048
  messageQueueStates = [];
1199
1049
  _destroy$ = new Subject();
1200
- constructor(_config, _dialog) {
1201
- this._config = _config;
1202
- this._dialog = _dialog;
1203
- }
1204
1050
  ngOnInit() {
1205
1051
  this.config = {
1206
1052
  actions: [
@@ -1249,101 +1095,22 @@ class TemplatesComponent {
1249
1095
  this._destroy$.next(null);
1250
1096
  this._destroy$.complete();
1251
1097
  }
1252
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplatesComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1253
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: TemplatesComponent, selector: "fs-app-message-templates", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "component", type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
1098
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplatesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1099
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: TemplatesComponent, isStandalone: true, selector: "fs-app-message-templates", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
1254
1100
  }
1255
1101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplatesComponent, decorators: [{
1256
1102
  type: Component,
1257
- args: [{ selector: 'fs-app-message-templates', template: "<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>" }]
1258
- }], ctorParameters: () => [{ type: undefined, decorators: [{
1259
- type: Inject,
1260
- args: [FS_APP_MESSAGE_CONFIG]
1261
- }] }, { type: i1.MatDialog }], propDecorators: { list: [{
1103
+ args: [{ selector: 'fs-app-message-templates', standalone: true, imports: [FsListModule], template: "<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>" }]
1104
+ }], propDecorators: { list: [{
1262
1105
  type: ViewChild,
1263
1106
  args: [FsListComponent, { static: true }]
1264
1107
  }] } });
1265
1108
 
1266
- class FsAppMessageTemplatesModule {
1267
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageTemplatesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1268
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageTemplatesModule, declarations: [TemplatesComponent,
1269
- TemplateComponent], imports: [RouterModule,
1270
- CommonModule,
1271
- FormsModule,
1272
- MatTooltipModule,
1273
- MatDialogModule,
1274
- MatButtonModule,
1275
- MatTabsModule,
1276
- MatFormFieldModule,
1277
- MatFormFieldModule,
1278
- MatInputModule,
1279
- FsListModule,
1280
- FsDialogModule,
1281
- FsLabelModule,
1282
- FsSkeletonModule,
1283
- FsFormModule,
1284
- FsTextEditorModule,
1285
- FsAppMessagePreviewModule], exports: [TemplatesComponent,
1286
- TemplateComponent] });
1287
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageTemplatesModule, imports: [RouterModule,
1288
- CommonModule,
1289
- FormsModule,
1290
- MatTooltipModule,
1291
- MatDialogModule,
1292
- MatButtonModule,
1293
- MatTabsModule,
1294
- MatFormFieldModule,
1295
- MatFormFieldModule,
1296
- MatInputModule,
1297
- FsListModule,
1298
- FsDialogModule,
1299
- FsLabelModule,
1300
- FsSkeletonModule,
1301
- FsFormModule,
1302
- FsTextEditorModule,
1303
- FsAppMessagePreviewModule] });
1304
- }
1305
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageTemplatesModule, decorators: [{
1306
- type: NgModule,
1307
- args: [{
1308
- imports: [
1309
- RouterModule,
1310
- CommonModule,
1311
- FormsModule,
1312
- MatTooltipModule,
1313
- MatDialogModule,
1314
- MatButtonModule,
1315
- MatTabsModule,
1316
- MatFormFieldModule,
1317
- MatFormFieldModule,
1318
- MatInputModule,
1319
- FsListModule,
1320
- FsDialogModule,
1321
- FsLabelModule,
1322
- FsSkeletonModule,
1323
- FsFormModule,
1324
- FsTextEditorModule,
1325
- FsAppMessagePreviewModule,
1326
- ],
1327
- declarations: [
1328
- TemplatesComponent,
1329
- TemplateComponent,
1330
- ],
1331
- exports: [
1332
- TemplatesComponent,
1333
- TemplateComponent,
1334
- ],
1335
- }]
1336
- }] });
1337
-
1338
1109
  class WebhooksComponent {
1339
- _config;
1340
- _message;
1110
+ _config = inject(FS_APP_MESSAGE_CONFIG);
1111
+ _message = inject(FsMessage);
1341
1112
  list;
1342
1113
  listConfig;
1343
- constructor(_config, _message) {
1344
- this._config = _config;
1345
- this._message = _message;
1346
- }
1347
1114
  ngOnInit() {
1348
1115
  this.listConfig = {
1349
1116
  paging: false,
@@ -1379,46 +1146,20 @@ class WebhooksComponent {
1379
1146
  },
1380
1147
  };
1381
1148
  }
1382
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WebhooksComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
1383
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: WebhooksComponent, selector: "fs-app-message-webhooks", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "component", type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "pipe", type: i10$1.FsDatePipe, name: "fsDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WebhooksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1150
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: WebhooksComponent, isStandalone: true, selector: "fs-app-message-webhooks", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "pipe", type: i6$1.FsDatePipe, name: "fsDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1384
1151
  }
1385
1152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WebhooksComponent, decorators: [{
1386
1153
  type: Component,
1387
- args: [{ selector: 'fs-app-message-webhooks', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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>" }]
1388
- }], ctorParameters: () => [{ type: undefined, decorators: [{
1389
- type: Inject,
1390
- args: [FS_APP_MESSAGE_CONFIG]
1391
- }] }, { type: i1$1.FsMessage }], propDecorators: { list: [{
1154
+ args: [{ selector: 'fs-app-message-webhooks', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FsListModule, FsDateModule], template: "<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>" }]
1155
+ }], propDecorators: { list: [{
1392
1156
  type: ViewChild,
1393
1157
  args: [FsListComponent]
1394
1158
  }] } });
1395
1159
 
1396
- class FsAppMessageWebhooksModule {
1397
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageWebhooksModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1398
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageWebhooksModule, declarations: [WebhooksComponent], imports: [FsListModule,
1399
- FsDateModule], exports: [WebhooksComponent] });
1400
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageWebhooksModule, imports: [FsListModule,
1401
- FsDateModule] });
1402
- }
1403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAppMessageWebhooksModule, decorators: [{
1404
- type: NgModule,
1405
- args: [{
1406
- imports: [
1407
- FsListModule,
1408
- FsDateModule,
1409
- ],
1410
- declarations: [
1411
- WebhooksComponent,
1412
- ],
1413
- exports: [
1414
- WebhooksComponent,
1415
- ],
1416
- }]
1417
- }] });
1418
-
1419
1160
  /**
1420
1161
  * Generated bundle index. Do not edit.
1421
1162
  */
1422
1163
 
1423
- export { FS_APP_MESSAGE_CONFIG, FsAppMessageModule, FsAppMessageQueuesModule, FsAppMessageTemplatesModule, FsAppMessageWebhooksModule, FsAppMessagesModule, FsMessageQueueService, MessageComponent, MessageQueueType, MessagesComponent, QueueComponent, QueuesComponent, TemplateComponent, TemplatesComponent, WebhooksComponent };
1164
+ export { FS_APP_MESSAGE_CONFIG, FsAppMessageModule, FsAppMessageQueuesModule, FsMessageQueueService, MessageComponent, MessageQueueType, MessagesComponent, QueueComponent, QueuesComponent, TemplateComponent, TemplatesComponent, WebhooksComponent };
1424
1165
  //# sourceMappingURL=firestitch-app-message.mjs.map