@firestitch/form 14.0.2 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/app/components/confirm-unsaved/confirm-unsaved.component.d.ts +21 -21
  2. package/app/components/confirm-unsaved/index.d.ts +1 -1
  3. package/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +22 -22
  4. package/app/components/form-dialog-actions/index.d.ts +1 -1
  5. package/app/components/form-template/form-template.component.d.ts +13 -13
  6. package/app/components/form-template/index.d.ts +1 -1
  7. package/app/components/form-template-outlet/form-template-outlet.component.d.ts +13 -13
  8. package/app/components/form-template-outlet/index.d.ts +1 -1
  9. package/app/components/index.d.ts +4 -4
  10. package/app/consts/error-messages.const.d.ts +21 -21
  11. package/app/directives/button.directive.d.ts +35 -35
  12. package/app/directives/form/form.directive.d.ts +122 -122
  13. package/app/directives/form/index.d.ts +1 -1
  14. package/app/directives/form-dialog-close.directive.d.ts +16 -16
  15. package/app/directives/form-template.directive.d.ts +10 -10
  16. package/app/directives/index.d.ts +6 -6
  17. package/app/directives/submit-button.directive.d.ts +6 -6
  18. package/app/directives/validators/compare.directive.d.ts +15 -15
  19. package/app/directives/validators/control.directive.d.ts +49 -49
  20. package/app/directives/validators/daterange.directive.d.ts +13 -13
  21. package/app/directives/validators/email.directive.d.ts +13 -13
  22. package/app/directives/validators/emails.directive.d.ts +13 -13
  23. package/app/directives/validators/function.directive.d.ts +15 -15
  24. package/app/directives/validators/greater-equal.directive.d.ts +13 -13
  25. package/app/directives/validators/greater.directive.d.ts +13 -13
  26. package/app/directives/validators/index.d.ts +22 -22
  27. package/app/directives/validators/integer.directive.d.ts +13 -13
  28. package/app/directives/validators/lesser-equal.directive.d.ts +13 -13
  29. package/app/directives/validators/lesser.directive.d.ts +13 -13
  30. package/app/directives/validators/max.directive.d.ts +13 -13
  31. package/app/directives/validators/maxlength.directive.d.ts +13 -13
  32. package/app/directives/validators/min.directive.d.ts +13 -13
  33. package/app/directives/validators/minlength.directive.d.ts +13 -13
  34. package/app/directives/validators/no-fs-validators.directive.d.ts +14 -14
  35. package/app/directives/validators/numeric.directive.d.ts +13 -13
  36. package/app/directives/validators/pattern.directive.d.ts +13 -13
  37. package/app/directives/validators/phone.directive.d.ts +13 -13
  38. package/app/directives/validators/required.directive.d.ts +16 -16
  39. package/app/directives/validators/url.directive.d.ts +14 -14
  40. package/app/directives/validators/validate.directive.d.ts +15 -15
  41. package/app/enums/confirm-result.d.ts +7 -7
  42. package/app/enums/form-status.d.ts +10 -10
  43. package/app/enums/index.d.ts +2 -2
  44. package/app/fs-form.module.d.ts +44 -44
  45. package/app/guards/form-deactivate.guard.d.ts +12 -12
  46. package/app/helpers/confirm-result-continue.d.ts +1 -1
  47. package/app/helpers/get-active-route.d.ts +2 -2
  48. package/app/helpers/get-form-errors.d.ts +2 -2
  49. package/app/helpers/index.d.ts +1 -1
  50. package/app/helpers/is-enabled.d.ts +1 -1
  51. package/app/interfaces/async-validator.d.ts +14 -14
  52. package/app/interfaces/confirm-config.d.ts +7 -7
  53. package/app/interfaces/confirm-tab-group.d.ts +10 -10
  54. package/app/interfaces/index.d.ts +4 -4
  55. package/app/interfaces/submit-event.d.ts +6 -6
  56. package/app/interfaces/submitted-event.d.ts +7 -7
  57. package/app/interfaces/validator.d.ts +13 -13
  58. package/app/providers/validate-messages.provider.d.ts +27 -27
  59. package/app/services/fsform.service.d.ts +20 -20
  60. package/app/validators/validators.d.ts +12 -12
  61. package/esm2022/app/components/confirm-unsaved/confirm-unsaved.component.mjs +51 -0
  62. package/{esm2020 → esm2022}/app/components/confirm-unsaved/index.mjs +1 -1
  63. package/esm2022/app/components/form-dialog-actions/form-dialog-actions.component.mjs +79 -0
  64. package/{esm2020 → esm2022}/app/components/form-dialog-actions/index.mjs +1 -1
  65. package/esm2022/app/components/form-template/form-template.component.mjs +34 -0
  66. package/{esm2020 → esm2022}/app/components/form-template/index.mjs +2 -2
  67. package/esm2022/app/components/form-template-outlet/form-template-outlet.component.mjs +32 -0
  68. package/{esm2020 → esm2022}/app/components/form-template-outlet/index.mjs +2 -2
  69. package/{esm2020 → esm2022}/app/components/index.mjs +4 -4
  70. package/{esm2020 → esm2022}/app/consts/error-messages.const.mjs +21 -21
  71. package/esm2022/app/directives/button.directive.mjs +172 -0
  72. package/esm2022/app/directives/form/form.directive.mjs +702 -0
  73. package/{esm2020 → esm2022}/app/directives/form/index.mjs +1 -1
  74. package/esm2022/app/directives/form-dialog-close.directive.mjs +57 -0
  75. package/esm2022/app/directives/form-template.directive.mjs +21 -0
  76. package/{esm2020 → esm2022}/app/directives/index.mjs +6 -6
  77. package/{esm2020 → esm2022}/app/directives/submit-button.directive.mjs +14 -14
  78. package/esm2022/app/directives/validators/compare.directive.mjs +48 -0
  79. package/esm2022/app/directives/validators/control.directive.mjs +269 -0
  80. package/esm2022/app/directives/validators/daterange.directive.mjs +42 -0
  81. package/esm2022/app/directives/validators/email.directive.mjs +42 -0
  82. package/esm2022/app/directives/validators/emails.directive.mjs +42 -0
  83. package/esm2022/app/directives/validators/function.directive.mjs +40 -0
  84. package/esm2022/app/directives/validators/greater-equal.directive.mjs +41 -0
  85. package/esm2022/app/directives/validators/greater.directive.mjs +41 -0
  86. package/{esm2020 → esm2022}/app/directives/validators/index.mjs +22 -22
  87. package/esm2022/app/directives/validators/integer.directive.mjs +40 -0
  88. package/esm2022/app/directives/validators/lesser-equal.directive.mjs +41 -0
  89. package/esm2022/app/directives/validators/lesser.directive.mjs +41 -0
  90. package/esm2022/app/directives/validators/max.directive.mjs +37 -0
  91. package/esm2022/app/directives/validators/maxlength.directive.mjs +36 -0
  92. package/esm2022/app/directives/validators/min.directive.mjs +37 -0
  93. package/esm2022/app/directives/validators/minlength.directive.mjs +36 -0
  94. package/{esm2020 → esm2022}/app/directives/validators/no-fs-validators.directive.mjs +53 -53
  95. package/esm2022/app/directives/validators/numeric.directive.mjs +42 -0
  96. package/esm2022/app/directives/validators/pattern.directive.mjs +36 -0
  97. package/esm2022/app/directives/validators/phone.directive.mjs +42 -0
  98. package/esm2022/app/directives/validators/required.directive.mjs +66 -0
  99. package/esm2022/app/directives/validators/url.directive.mjs +43 -0
  100. package/esm2022/app/directives/validators/validate.directive.mjs +42 -0
  101. package/{esm2020 → esm2022}/app/enums/confirm-result.mjs +8 -8
  102. package/{esm2020 → esm2022}/app/enums/form-status.mjs +11 -11
  103. package/{esm2020 → esm2022}/app/enums/index.mjs +2 -2
  104. package/esm2022/app/fs-form.module.mjs +209 -0
  105. package/esm2022/app/guards/form-deactivate.guard.mjs +44 -0
  106. package/{esm2020 → esm2022}/app/helpers/confirm-result-continue.mjs +4 -4
  107. package/{esm2020 → esm2022}/app/helpers/get-active-route.mjs +6 -6
  108. package/{esm2020 → esm2022}/app/helpers/get-form-errors.mjs +24 -24
  109. package/{esm2020 → esm2022}/app/helpers/index.mjs +1 -1
  110. package/{esm2020 → esm2022}/app/helpers/is-enabled.mjs +3 -3
  111. package/{esm2020 → esm2022}/app/interfaces/async-validator.mjs +1 -1
  112. package/{esm2020 → esm2022}/app/interfaces/confirm-config.mjs +1 -1
  113. package/{esm2020 → esm2022}/app/interfaces/confirm-tab-group.mjs +1 -1
  114. package/{esm2020 → esm2022}/app/interfaces/index.mjs +4 -4
  115. package/{esm2020 → esm2022}/app/interfaces/submit-event.mjs +1 -1
  116. package/{esm2020 → esm2022}/app/interfaces/submitted-event.mjs +1 -1
  117. package/{esm2020 → esm2022}/app/interfaces/validator.mjs +1 -1
  118. package/{esm2020 → esm2022}/app/providers/validate-messages.provider.mjs +10 -10
  119. package/esm2022/app/services/fsform.service.mjs +94 -0
  120. package/{esm2020 → esm2022}/app/validators/validators.mjs +92 -92
  121. package/{esm2020 → esm2022}/firestitch-form.mjs +4 -4
  122. package/{esm2020 → esm2022}/public_api.mjs +36 -36
  123. package/{fesm2020 → fesm2022}/firestitch-form.mjs +2497 -2434
  124. package/fesm2022/firestitch-form.mjs.map +1 -0
  125. package/index.d.ts +5 -5
  126. package/package.json +5 -11
  127. package/public_api.d.ts +34 -34
  128. package/esm2020/app/components/confirm-unsaved/confirm-unsaved.component.mjs +0 -44
  129. package/esm2020/app/components/form-dialog-actions/form-dialog-actions.component.mjs +0 -75
  130. package/esm2020/app/components/form-template/form-template.component.mjs +0 -31
  131. package/esm2020/app/components/form-template-outlet/form-template-outlet.component.mjs +0 -30
  132. package/esm2020/app/directives/button.directive.mjs +0 -166
  133. package/esm2020/app/directives/form/form.directive.mjs +0 -689
  134. package/esm2020/app/directives/form-dialog-close.directive.mjs +0 -54
  135. package/esm2020/app/directives/form-template.directive.mjs +0 -20
  136. package/esm2020/app/directives/validators/compare.directive.mjs +0 -47
  137. package/esm2020/app/directives/validators/control.directive.mjs +0 -258
  138. package/esm2020/app/directives/validators/daterange.directive.mjs +0 -41
  139. package/esm2020/app/directives/validators/email.directive.mjs +0 -41
  140. package/esm2020/app/directives/validators/emails.directive.mjs +0 -41
  141. package/esm2020/app/directives/validators/function.directive.mjs +0 -41
  142. package/esm2020/app/directives/validators/greater-equal.directive.mjs +0 -40
  143. package/esm2020/app/directives/validators/greater.directive.mjs +0 -40
  144. package/esm2020/app/directives/validators/integer.directive.mjs +0 -39
  145. package/esm2020/app/directives/validators/lesser-equal.directive.mjs +0 -40
  146. package/esm2020/app/directives/validators/lesser.directive.mjs +0 -40
  147. package/esm2020/app/directives/validators/max.directive.mjs +0 -36
  148. package/esm2020/app/directives/validators/maxlength.directive.mjs +0 -35
  149. package/esm2020/app/directives/validators/min.directive.mjs +0 -36
  150. package/esm2020/app/directives/validators/minlength.directive.mjs +0 -35
  151. package/esm2020/app/directives/validators/numeric.directive.mjs +0 -41
  152. package/esm2020/app/directives/validators/pattern.directive.mjs +0 -35
  153. package/esm2020/app/directives/validators/phone.directive.mjs +0 -41
  154. package/esm2020/app/directives/validators/required.directive.mjs +0 -69
  155. package/esm2020/app/directives/validators/url.directive.mjs +0 -45
  156. package/esm2020/app/directives/validators/validate.directive.mjs +0 -43
  157. package/esm2020/app/fs-form.module.mjs +0 -209
  158. package/esm2020/app/guards/form-deactivate.guard.mjs +0 -42
  159. package/esm2020/app/services/fsform.service.mjs +0 -92
  160. package/fesm2015/firestitch-form.mjs +0 -2579
  161. package/fesm2015/firestitch-form.mjs.map +0 -1
  162. package/fesm2020/firestitch-form.mjs.map +0 -1
@@ -1,12 +1,12 @@
1
- import { AbstractControl, ValidationErrors } from '@angular/forms';
2
- import { Observable } from 'rxjs';
3
- export declare class FsValidators {
4
- static email(control: AbstractControl): ValidationErrors | null;
5
- static emails(control: AbstractControl): ValidationErrors | null;
6
- static numeric(control: AbstractControl): ValidationErrors | null;
7
- static integer(control: AbstractControl): ValidationErrors | null;
8
- static phone(control: AbstractControl): ValidationErrors | null;
9
- static url(control: AbstractControl, protocolRequired?: boolean): ValidationErrors | null;
10
- static dateRange(control: AbstractControl): ValidationErrors | null;
11
- static func(control: AbstractControl, formFunction: any, data: any): Observable<any>;
12
- }
1
+ import { AbstractControl, ValidationErrors } from '@angular/forms';
2
+ import { Observable } from 'rxjs';
3
+ export declare class FsValidators {
4
+ static email(control: AbstractControl): ValidationErrors | null;
5
+ static emails(control: AbstractControl): ValidationErrors | null;
6
+ static numeric(control: AbstractControl): ValidationErrors | null;
7
+ static integer(control: AbstractControl): ValidationErrors | null;
8
+ static phone(control: AbstractControl): ValidationErrors | null;
9
+ static url(control: AbstractControl, protocolRequired?: boolean): ValidationErrors | null;
10
+ static dateRange(control: AbstractControl): ValidationErrors | null;
11
+ static func(control: AbstractControl, formFunction: any, data: any): Observable<any>;
12
+ }
@@ -0,0 +1,51 @@
1
+ import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
3
+ import { Subject } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/dialog";
6
+ import * as i2 from "@angular/material/button";
7
+ import * as i3 from "@firestitch/dialog";
8
+ export class ConfirmUnsavedComponent {
9
+ _data;
10
+ _dialogRef;
11
+ saveLabel;
12
+ discardLabel;
13
+ cancelLabel;
14
+ message;
15
+ title;
16
+ _destroy$ = new Subject();
17
+ constructor(_data, _dialogRef) {
18
+ this._data = _data;
19
+ this._dialogRef = _dialogRef;
20
+ }
21
+ ngOnInit() {
22
+ this.saveLabel = this._data.saveLabel;
23
+ this.discardLabel = this._data.discardLabel;
24
+ this.cancelLabel = this._data.cancelLabel;
25
+ this.message = this._data.message;
26
+ this.title = this._data.title;
27
+ }
28
+ save() {
29
+ this._dialogRef.close('save');
30
+ }
31
+ discard() {
32
+ this._dialogRef.close('discard');
33
+ }
34
+ cancel() {
35
+ this._dialogRef.close(null);
36
+ }
37
+ ngOnDestroy() {
38
+ this._destroy$.next();
39
+ this._destroy$.complete();
40
+ }
41
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfirmUnsavedComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
42
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfirmUnsavedComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>{{title}}</h1>\n <mat-dialog-content>\n {{message}}\n </mat-dialog-content> \n <mat-dialog-actions>\n <button\n type=\"button\"\n color=\"primary\"\n (click)=\"save()\"\n fsFormButtonStandalone\n mat-button>\n {{saveLabel}}\n </button>\n <button\n type=\"button\"\n (click)=\"discard()\"\n fsFormButtonStandalone\n mat-button>\n {{discardLabel}}\n </button> \n <button\n type=\"button\"\n (click)=\"cancel()\"\n fsFormButtonStandalone\n mat-button>\n {{cancelLabel}}\n </button> \n </mat-dialog-actions>\n</fs-dialog>\n", styles: [":host{width:100%}.form-buttons.save-create .close-button:not(.cancel-button){float:right}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
43
+ }
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfirmUnsavedComponent, decorators: [{
45
+ type: Component,
46
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog>\n <h1 mat-dialog-title>{{title}}</h1>\n <mat-dialog-content>\n {{message}}\n </mat-dialog-content> \n <mat-dialog-actions>\n <button\n type=\"button\"\n color=\"primary\"\n (click)=\"save()\"\n fsFormButtonStandalone\n mat-button>\n {{saveLabel}}\n </button>\n <button\n type=\"button\"\n (click)=\"discard()\"\n fsFormButtonStandalone\n mat-button>\n {{discardLabel}}\n </button> \n <button\n type=\"button\"\n (click)=\"cancel()\"\n fsFormButtonStandalone\n mat-button>\n {{cancelLabel}}\n </button> \n </mat-dialog-actions>\n</fs-dialog>\n", styles: [":host{width:100%}.form-buttons.save-create .close-button:not(.cancel-button){float:right}\n"] }]
47
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
48
+ type: Inject,
49
+ args: [MAT_DIALOG_DATA]
50
+ }] }, { type: i1.MatDialogRef }]; } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS11bnNhdmVkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9jb25maXJtLXVuc2F2ZWQvY29uZmlybS11bnNhdmVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9jb25maXJtLXVuc2F2ZWQvY29uZmlybS11bnNhdmVkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUS9CLE1BQU0sT0FBTyx1QkFBdUI7SUFXQztJQUN6QjtJQVZILFNBQVMsQ0FBQztJQUNWLFlBQVksQ0FBQztJQUNiLFdBQVcsQ0FBQztJQUNaLE9BQU8sQ0FBQztJQUNSLEtBQUssQ0FBQztJQUVMLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXhDLFlBQ21DLEtBQVUsRUFDbkMsVUFBaUQ7UUFEeEIsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNuQyxlQUFVLEdBQVYsVUFBVSxDQUF1QztJQUN4RCxDQUFDO0lBRUcsUUFBUTtRQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0F0Q1UsdUJBQXVCLGtCQVd4QixlQUFlOzRGQVhkLHVCQUF1QixvRENacEMscXJCQThCQTs7NEZEbEJhLHVCQUF1QjtrQkFMbkMsU0FBUztzQ0FHUyx1QkFBdUIsQ0FBQyxNQUFNOzswQkFhNUMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpcm0tdW5zYXZlZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbmZpcm0tdW5zYXZlZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlybVVuc2F2ZWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHNhdmVMYWJlbDtcbiAgcHVibGljIGRpc2NhcmRMYWJlbDtcbiAgcHVibGljIGNhbmNlbExhYmVsO1xuICBwdWJsaWMgbWVzc2FnZTtcbiAgcHVibGljIHRpdGxlO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Q29uZmlybVVuc2F2ZWRDb21wb25lbnQ+LFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZUxhYmVsID0gdGhpcy5fZGF0YS5zYXZlTGFiZWw7XG4gICAgdGhpcy5kaXNjYXJkTGFiZWwgPSB0aGlzLl9kYXRhLmRpc2NhcmRMYWJlbDtcbiAgICB0aGlzLmNhbmNlbExhYmVsID0gdGhpcy5fZGF0YS5jYW5jZWxMYWJlbDtcbiAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLl9kYXRhLm1lc3NhZ2U7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuX2RhdGEudGl0bGU7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UoJ3NhdmUnKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNjYXJkKCk6IHZvaWQge1xuICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZSgnZGlzY2FyZCcpO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2c+XG4gIDxoMSBtYXQtZGlhbG9nLXRpdGxlPnt7dGl0bGV9fTwvaDE+XG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAge3ttZXNzYWdlfX1cbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+ICBcbiAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICAgICAgZnNGb3JtQnV0dG9uU3RhbmRhbG9uZVxuICAgICAgICBtYXQtYnV0dG9uPlxuICAgICAge3tzYXZlTGFiZWx9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJkaXNjYXJkKClcIlxuICAgICAgICBmc0Zvcm1CdXR0b25TdGFuZGFsb25lXG4gICAgICAgIG1hdC1idXR0b24+XG4gICAgICB7e2Rpc2NhcmRMYWJlbH19XG4gICAgPC9idXR0b24+ICBcbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgICAgICBmc0Zvcm1CdXR0b25TdGFuZGFsb25lXG4gICAgICAgIG1hdC1idXR0b24+XG4gICAgICB7e2NhbmNlbExhYmVsfX1cbiAgICA8L2J1dHRvbj4gICAgXG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuPC9mcy1kaWFsb2c+XG4iXX0=
@@ -1,2 +1,2 @@
1
- export * from './confirm-unsaved.component';
1
+ export * from './confirm-unsaved.component';
2
2
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvY29uZmlybS11bnNhdmVkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbmZpcm0tdW5zYXZlZC5jb21wb25lbnQnO1xuXG4iXX0=
@@ -0,0 +1,79 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, Optional } from '@angular/core';
2
+ import { MatDialogRef } from '@angular/material/dialog';
3
+ import { Subject } from 'rxjs';
4
+ import { delay, filter, takeUntil } from 'rxjs/operators';
5
+ import { FsFormDirective } from '../../directives/form/form.directive';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../directives/form/form.directive";
8
+ import * as i2 from "@angular/material/dialog";
9
+ import * as i3 from "@angular/common";
10
+ import * as i4 from "@angular/material/button";
11
+ import * as i5 from "../../directives/form-dialog-close.directive";
12
+ import * as i6 from "../../directives/button.directive";
13
+ export class FsFormDialogActionsComponent {
14
+ _form;
15
+ _dialogRef;
16
+ _cdRef;
17
+ save = true;
18
+ create = false;
19
+ close = false;
20
+ done = false;
21
+ closeData = null;
22
+ name;
23
+ dirty = false;
24
+ _destroy$ = new Subject();
25
+ constructor(_form, _dialogRef, _cdRef) {
26
+ this._form = _form;
27
+ this._dialogRef = _dialogRef;
28
+ this._cdRef = _cdRef;
29
+ }
30
+ ngOnInit() {
31
+ if (this._form) {
32
+ this._form.ngForm.valueChanges
33
+ .pipe(filter(() => (!this.dirty)), takeUntil(this._destroy$))
34
+ .subscribe(() => {
35
+ this.dirty = this._form.ngForm.dirty;
36
+ this._cdRef.markForCheck();
37
+ });
38
+ this._form.submitted
39
+ .pipe(delay(50), takeUntil(this._destroy$))
40
+ .subscribe(() => {
41
+ this.dirty = false;
42
+ this._cdRef.markForCheck();
43
+ });
44
+ this._form.reseted
45
+ .pipe(takeUntil(this._destroy$))
46
+ .subscribe(() => {
47
+ this.dirty = false;
48
+ this._cdRef.markForCheck();
49
+ });
50
+ }
51
+ }
52
+ ngOnDestroy() {
53
+ this._destroy$.next();
54
+ this._destroy$.complete();
55
+ }
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormDialogActionsComponent, deps: [{ token: i1.FsFormDirective, optional: true }, { token: i2.MatDialogRef, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
57
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: { save: "save", create: "create", close: "close", done: "done", closeData: "closeData", name: "name" }, ngImport: i0, template: "<div class=\"form-buttons\" [ngClass]=\"{ 'save-create': save || create }\">\n <ng-container *ngIf=\"save || create\">\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{create ? 'Create' : 'Save'}}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"close-button cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"done\">\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"save || create\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"close\">\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"!(save || create)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n</div>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.form-buttons.save-create .close-button:not(.cancel-button){float:right}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i5.FsFormDialogCloseDirective, selector: "[fsFormDialogClose],[fs-form-dialog-close]", inputs: ["closeData"] }, { kind: "directive", type: i6.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormDialogActionsComponent, decorators: [{
60
+ type: Component,
61
+ args: [{ selector: 'fs-form-dialog-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-buttons\" [ngClass]=\"{ 'save-create': save || create }\">\n <ng-container *ngIf=\"save || create\">\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{create ? 'Create' : 'Save'}}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"close-button cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"done\">\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"save || create\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"close\">\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"!(save || create)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n</div>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.form-buttons.save-create .close-button:not(.cancel-button){float:right}\n"] }]
62
+ }], ctorParameters: function () { return [{ type: i1.FsFormDirective, decorators: [{
63
+ type: Optional
64
+ }] }, { type: i2.MatDialogRef, decorators: [{
65
+ type: Optional
66
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { save: [{
67
+ type: Input
68
+ }], create: [{
69
+ type: Input
70
+ }], close: [{
71
+ type: Input
72
+ }], done: [{
73
+ type: Input
74
+ }], closeData: [{
75
+ type: Input
76
+ }], name: [{
77
+ type: Input
78
+ }] } });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLWRpYWxvZy1hY3Rpb25zL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyw0QkFBNEI7SUFjakI7SUFDQTtJQUNaO0lBZE0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUNaLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDZixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNiLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxDQUFTO0lBRXRCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFYixTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV4QyxZQUNzQixLQUFzQixFQUN0QixVQUE2QixFQUN6QyxNQUF5QjtRQUZiLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQ3pDLFdBQU0sR0FBTixNQUFNLENBQW1CO0lBQ2hDLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWTtpQkFDM0IsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7aUJBQ2pCLElBQUksQ0FDSCxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7aUJBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztpQkFDZixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7aUJBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBdkRVLDRCQUE0Qjs0RkFBNUIsNEJBQTRCLDhLQ2hCekMsMjBDQXFEQTs7NEZEckNhLDRCQUE0QjtrQkFOeEMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU07OzBCQWdCNUMsUUFBUTs7MEJBQ1IsUUFBUTs0RUFiSyxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0vZm9ybS5kaXJlY3RpdmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZnMtZm9ybS1kaWFsb2ctYWN0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZzRm9ybURpYWxvZ0FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzYXZlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGNsb3NlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGRvbmUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VEYXRhID0gbnVsbDtcclxuICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZm9ybTogRnNGb3JtRGlyZWN0aXZlLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8YW55PixcclxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgICBcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcclxuICAgICAgdGhpcy5fZm9ybS5uZ0Zvcm0udmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoICBcclxuICAgICAgICAgIGZpbHRlcigoKSA9PiAoIXRoaXMuZGlydHkpKSxcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IHRoaXMuX2Zvcm0ubmdGb3JtLmRpcnR5O1xyXG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9mb3JtLnN1Ym1pdHRlZFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGVsYXkoNTApLFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuX2Zvcm0ucmVzZXRlZFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWJ1dHRvbnNcIiBbbmdDbGFzc109XCJ7ICdzYXZlLWNyZWF0ZSc6IHNhdmUgfHwgY3JlYXRlIH1cIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNhdmUgfHwgY3JlYXRlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbbmFtZV09XCJuYW1lXCI+XG4gICAgICB7e2NyZWF0ZSA/ICdDcmVhdGUnIDogJ1NhdmUnfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY2xvc2UtYnV0dG9uIGNhbmNlbC1idXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiY2xvc2UgJiYgIWRpcnR5ICYmICFjcmVhdGVcIlxuICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCI+XG4gICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvbmVcIj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIj5cbiAgICAgIERvbmVcbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNhdmUgfHwgY3JlYXRlXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2xvc2VcIj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCJcbiAgICAgICAgZnNGb3JtRGlhbG9nQ2xvc2VcbiAgICAgICAgW2Nsb3NlRGF0YV09XCJjbG9zZURhdGFcIlxuICAgICAgICBbY29sb3JdPVwiZGlydHkgPyAnYmFzaWMnIDogJ3ByaW1hcnknXCI+XG4gICAgICBDbG9zZVxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShzYXZlIHx8IGNyZWF0ZSlcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,2 +1,2 @@
1
- export * from './form-dialog-actions.component';
1
+ export * from './form-dialog-actions.component';
2
2
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,34 @@
1
+ import { Component, ChangeDetectionStrategy, Input, ContentChildren, QueryList, TemplateRef, ViewChild } from '@angular/core';
2
+ import { NgModel } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export class FsFormTemplateComponent {
5
+ templateRef;
6
+ formTemplate;
7
+ models;
8
+ ngAfterContentInit() {
9
+ debugger;
10
+ const x = this.models;
11
+ this.models.changes.subscribe((x) => {
12
+ debugger;
13
+ });
14
+ }
15
+ ngOnInit() {
16
+ debugger;
17
+ }
18
+ constructor() { }
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FsFormTemplateComponent, selector: "fs-form-template", inputs: { formTemplate: "formTemplate" }, queries: [{ propertyName: "models", predicate: NgModel, descendants: true }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["templateRef1"], descendants: true }], ngImport: i0, template: "<ng-template #templateRef1>\n <ng-content></ng-content>\n</ng-template>", changeDetection: i0.ChangeDetectionStrategy.OnPush });
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormTemplateComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'fs-form-template', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #templateRef1>\n <ng-content></ng-content>\n</ng-template>" }]
25
+ }], ctorParameters: function () { return []; }, propDecorators: { templateRef: [{
26
+ type: ViewChild,
27
+ args: ['templateRef1']
28
+ }], formTemplate: [{
29
+ type: Input
30
+ }], models: [{
31
+ type: ContentChildren,
32
+ args: [NgModel, { descendants: true }]
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS10ZW1wbGF0ZS9mb3JtLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLXRlbXBsYXRlL2Zvcm0tdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBb0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBUXpDLE1BQU0sT0FBTyx1QkFBdUI7SUFHM0IsV0FBVyxDQUFtQjtJQUVyQixZQUFZLENBQU07SUFHM0IsTUFBTSxDQUFxQjtJQUUzQixrQkFBa0I7UUFDdkIsUUFBUSxDQUFDO1FBQ1QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsQyxRQUFRLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sUUFBUSxDQUFDO0lBQ1gsQ0FBQztJQUVELGdCQUVHLENBQUM7d0dBeEJPLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLHlIQU9qQixPQUFPLDZKQ2hCMUIsMEVBRWM7OzRGRE9ELHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBRVgsdUJBQXVCLENBQUMsTUFBTTswRUFLeEMsV0FBVztzQkFEakIsU0FBUzt1QkFBQyxjQUFjO2dCQUdULFlBQVk7c0JBQTNCLEtBQUs7Z0JBR0MsTUFBTTtzQkFEWixlQUFlO3VCQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZm9ybS10ZW1wbGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZzRm9ybVRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYxJykgXG4gIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKSBwdWJsaWMgZm9ybVRlbXBsYXRlOiBhbnk7XG4gIFxuICBAQ29udGVudENoaWxkcmVuKE5nTW9kZWwsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgXG4gIHB1YmxpYyBtb2RlbHM6IFF1ZXJ5TGlzdDxOZ01vZGVsPjtcblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGRlYnVnZ2VyO1xuICAgIGNvbnN0IHggPSB0aGlzLm1vZGVscztcbiAgICB0aGlzLm1vZGVscy5jaGFuZ2VzLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgZGVidWdnZXI7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBkZWJ1Z2dlcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgXG4gICkge31cblxufVxuIiwiPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZjE+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+Il19
@@ -1,2 +1,2 @@
1
- export * from './form-template.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS10ZW1wbGF0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbiJdfQ==
1
+ export * from './form-template.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS10ZW1wbGF0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtLXRlbXBsYXRlLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,32 @@
1
+ import { Component, ChangeDetectionStrategy, Input, ContentChildren, QueryList } from '@angular/core';
2
+ import { NgModel } from '@angular/forms';
3
+ import { FsFormTemplateComponent } from '../../components';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class FsFormTemplateOutletComponent {
7
+ formTemplate;
8
+ models;
9
+ ngOnChanges(changes) {
10
+ if (changes.formTemplate?.currentValue) {
11
+ }
12
+ }
13
+ ngAfterContentInit() {
14
+ // const x = this.models;
15
+ // this.models.changes.subscribe((x) => {
16
+ // debugger;
17
+ // });
18
+ }
19
+ constructor() { }
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormTemplateOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FsFormTemplateOutletComponent, selector: "fs-form-template-outlet", inputs: { formTemplate: "formTemplate" }, queries: [{ propertyName: "models", predicate: NgModel, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n{{formTemplate.templateRef|json}}\n\n<ng-container *ngIf=\"formTemplate\">\n <ng-container [ngTemplateOutlet]=\"formTemplate.templateRef\"></ng-container> \n</ng-container>", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormTemplateOutletComponent, decorators: [{
24
+ type: Component,
25
+ args: [{ selector: 'fs-form-template-outlet', changeDetection: ChangeDetectionStrategy.OnPush, template: "\n{{formTemplate.templateRef|json}}\n\n<ng-container *ngIf=\"formTemplate\">\n <ng-container [ngTemplateOutlet]=\"formTemplate.templateRef\"></ng-container> \n</ng-container>" }]
26
+ }], ctorParameters: function () { return []; }, propDecorators: { formTemplate: [{
27
+ type: Input
28
+ }], models: [{
29
+ type: ContentChildren,
30
+ args: [NgModel, { descendants: true }]
31
+ }] } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10ZW1wbGF0ZS1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2Zvcm0tdGVtcGxhdGUtb3V0bGV0L2Zvcm0tdGVtcGxhdGUtb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLXRlbXBsYXRlLW91dGxldC9mb3JtLXRlbXBsYXRlLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUEyRCxNQUFNLGVBQWUsQ0FBQztBQUMvSixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQVEzRCxNQUFNLE9BQU8sNkJBQTZCO0lBRXhCLFlBQVksQ0FBMEI7SUFHL0MsTUFBTSxDQUFxQjtJQUVsQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBRyxPQUFPLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRTtTQUN0QztJQUNILENBQUM7SUFFTSxrQkFBa0I7UUFDdkIseUJBQXlCO1FBQ3pCLHlDQUF5QztRQUN6QyxjQUFjO1FBQ2QsTUFBTTtJQUNSLENBQUM7SUFFRCxnQkFFRyxDQUFDO3dHQXJCTyw2QkFBNkI7NEZBQTdCLDZCQUE2QixnSUFJdkIsT0FBTyxxRUNkMUIsaUxBS2U7OzRGREtGLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSx5QkFBeUIsbUJBRWxCLHVCQUF1QixDQUFDLE1BQU07MEVBSS9CLFlBQVk7c0JBQTNCLEtBQUs7Z0JBR0MsTUFBTTtzQkFEWixlQUFlO3VCQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIFRlbXBsYXRlUmVmLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGc0Zvcm1UZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWZvcm0tdGVtcGxhdGUtb3V0bGV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tdGVtcGxhdGUtb3V0bGV0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZzRm9ybVRlbXBsYXRlT3V0bGV0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSBwdWJsaWMgZm9ybVRlbXBsYXRlOiBGc0Zvcm1UZW1wbGF0ZUNvbXBvbmVudDtcbiAgXG4gIEBDb250ZW50Q2hpbGRyZW4oTmdNb2RlbCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBcbiAgcHVibGljIG1vZGVsczogUXVlcnlMaXN0PE5nTW9kZWw+O1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZihjaGFuZ2VzLmZvcm1UZW1wbGF0ZT8uY3VycmVudFZhbHVlKSB7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBjb25zdCB4ID0gdGhpcy5tb2RlbHM7XG4gICAgLy8gdGhpcy5tb2RlbHMuY2hhbmdlcy5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAvLyAgIGRlYnVnZ2VyO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICBcbiAgKSB7fVxuXG59XG4iLCJcbnt7Zm9ybVRlbXBsYXRlLnRlbXBsYXRlUmVmfGpzb259fVxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybVRlbXBsYXRlXCI+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZm9ybVRlbXBsYXRlLnRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+IFxuPC9uZy1jb250YWluZXI+Il19
@@ -1,2 +1,2 @@
1
- export * from './form-template-outlet.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS10ZW1wbGF0ZS1vdXRsZXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9ybS10ZW1wbGF0ZS1vdXRsZXQuY29tcG9uZW50JztcclxuIl19
1
+ export * from './form-template-outlet.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS10ZW1wbGF0ZS1vdXRsZXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9ybS10ZW1wbGF0ZS1vdXRsZXQuY29tcG9uZW50JztcbiJdfQ==
@@ -1,5 +1,5 @@
1
- export * from './confirm-unsaved';
2
- export * from './form-dialog-actions';
3
- export * from './form-template';
4
- export * from './form-template-outlet';
1
+ export * from './confirm-unsaved';
2
+ export * from './form-dialog-actions';
3
+ export * from './form-template';
4
+ export * from './form-template-outlet';
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29uZmlybS11bnNhdmVkJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1kaWFsb2ctYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tdGVtcGxhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLXRlbXBsYXRlLW91dGxldCc7XG4iXX0=
@@ -1,22 +1,22 @@
1
- export const ERROR_MESSAGES = {
2
- required: 'This field is required',
3
- email: 'This is not a valid email address',
4
- emails: 'Input valid email addresses, comma separated',
5
- phone: 'Invalid phone number',
6
- numeric: 'Value should be numeric',
7
- integer: 'Value should be an integer',
8
- min: 'Value should not be less than $(1)',
9
- max: 'Value should not be greater than $(1)',
10
- minlength: 'Should not be shorter than $(1) characters',
11
- maxlength: 'Should not be longer than $(1) characters',
12
- compare: 'Inputs do not match',
13
- pattern: 'Value should match pattern $(1)',
14
- dateRange: 'Invalid date range',
15
- url: 'This is not a valid url',
16
- urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',
17
- greater: 'Value must be greater than $(1)',
18
- lesser: 'Value must be less than $(1)',
19
- greaterEqual: 'Value must be greater than or equal $(1)',
20
- lesserEqual: 'Value must be less than or equal $(1)',
21
- };
1
+ export const ERROR_MESSAGES = {
2
+ required: 'This field is required',
3
+ email: 'This is not a valid email address',
4
+ emails: 'Input valid email addresses, comma separated',
5
+ phone: 'Invalid phone number',
6
+ numeric: 'Value should be numeric',
7
+ integer: 'Value should be an integer',
8
+ min: 'Value should not be less than $(1)',
9
+ max: 'Value should not be greater than $(1)',
10
+ minlength: 'Should not be shorter than $(1) characters',
11
+ maxlength: 'Should not be longer than $(1) characters',
12
+ compare: 'Inputs do not match',
13
+ pattern: 'Value should match pattern $(1)',
14
+ dateRange: 'Invalid date range',
15
+ url: 'This is not a valid url',
16
+ urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',
17
+ greater: 'Value must be greater than $(1)',
18
+ lesser: 'Value must be less than $(1)',
19
+ greaterEqual: 'Value must be greater than or equal $(1)',
20
+ lesserEqual: 'Value must be less than or equal $(1)',
21
+ };
22
22
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbWVzc2FnZXMuY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2NvbnN0cy9lcnJvci1tZXNzYWdlcy5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsUUFBUSxFQUFFLHdCQUF3QjtJQUNsQyxLQUFLLEVBQUUsbUNBQW1DO0lBQzFDLE1BQU0sRUFBRSw4Q0FBOEM7SUFDdEQsS0FBSyxFQUFFLHNCQUFzQjtJQUM3QixPQUFPLEVBQUUseUJBQXlCO0lBQ2xDLE9BQU8sRUFBRSw0QkFBNEI7SUFDckMsR0FBRyxFQUFFLG9DQUFvQztJQUN6QyxHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFNBQVMsRUFBRSw0Q0FBNEM7SUFDdkQsU0FBUyxFQUFFLDJDQUEyQztJQUN0RCxPQUFPLEVBQUUscUJBQXFCO0lBQzlCLE9BQU8sRUFBRSxpQ0FBaUM7SUFDMUMsU0FBUyxFQUFFLG9CQUFvQjtJQUMvQixHQUFHLEVBQUUseUJBQXlCO0lBQzlCLFdBQVcsRUFBRSx1RUFBdUU7SUFDcEYsT0FBTyxFQUFFLGlDQUFpQztJQUMxQyxNQUFNLEVBQUUsOEJBQThCO0lBQ3RDLFlBQVksRUFBRSwwQ0FBMEM7SUFDeEQsV0FBVyxFQUFFLHVDQUF1QztDQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0VTID0ge1xuICByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnLFxuICBlbWFpbDogJ1RoaXMgaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcycsXG4gIGVtYWlsczogJ0lucHV0IHZhbGlkIGVtYWlsIGFkZHJlc3NlcywgY29tbWEgc2VwYXJhdGVkJyxcbiAgcGhvbmU6ICdJbnZhbGlkIHBob25lIG51bWJlcicsXG4gIG51bWVyaWM6ICdWYWx1ZSBzaG91bGQgYmUgbnVtZXJpYycsXG4gIGludGVnZXI6ICdWYWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdlcicsXG4gIG1pbjogJ1ZhbHVlIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuICQoMSknLFxuICBtYXg6ICdWYWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiAkKDEpJyxcbiAgbWlubGVuZ3RoOiAnU2hvdWxkIG5vdCBiZSBzaG9ydGVyIHRoYW4gJCgxKSBjaGFyYWN0ZXJzJyxcbiAgbWF4bGVuZ3RoOiAnU2hvdWxkIG5vdCBiZSBsb25nZXIgdGhhbiAkKDEpIGNoYXJhY3RlcnMnLFxuICBjb21wYXJlOiAnSW5wdXRzIGRvIG5vdCBtYXRjaCcsXG4gIHBhdHRlcm46ICdWYWx1ZSBzaG91bGQgbWF0Y2ggcGF0dGVybiAkKDEpJyxcbiAgZGF0ZVJhbmdlOiAnSW52YWxpZCBkYXRlIHJhbmdlJyxcbiAgdXJsOiAnVGhpcyBpcyBub3QgYSB2YWxpZCB1cmwnLFxuICB1cmxQcm90b2NvbDogJ0ludmFsaWQgVVJMLiBQcm9wZXIgaHR0cCBwcm90b2NvbCBpcyByZXF1aXJlZC4gZWcuIGh0dHBzOi8vZ29vZ2xlLmNvbScsXG4gIGdyZWF0ZXI6ICdWYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAkKDEpJyxcbiAgbGVzc2VyOiAnVmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJCgxKScsXG4gIGdyZWF0ZXJFcXVhbDogJ1ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsICQoMSknLFxuICBsZXNzZXJFcXVhbDogJ1ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsICQoMSknLFxufTtcbiJdfQ==
@@ -0,0 +1,172 @@
1
+ import { ChangeDetectorRef, Directive, ElementRef, Host, HostBinding, Input, Optional, } from '@angular/core';
2
+ import { MatButton } from '@angular/material/button';
3
+ import { fromEvent, Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { FsFormDirective } from './form/form.directive';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/button";
8
+ import * as i2 from "./form/form.directive";
9
+ export class FsButtonDirective {
10
+ _matButton;
11
+ _form;
12
+ _elementRef;
13
+ _cdRef;
14
+ name;
15
+ dirtySubmit = true;
16
+ form;
17
+ transitionStyle = null;
18
+ active = false;
19
+ submit = false;
20
+ _previousDisabled = false;
21
+ _destroy$ = new Subject();
22
+ constructor(_matButton, _form, _elementRef, _cdRef) {
23
+ this._matButton = _matButton;
24
+ this._form = _form;
25
+ this._elementRef = _elementRef;
26
+ this._cdRef = _cdRef;
27
+ }
28
+ ngOnInit() {
29
+ this.submit = this._elementRef.nativeElement.getAttribute('type') === 'submit';
30
+ this.form = this.form || this._form;
31
+ if (this.form) {
32
+ this.form.addButton(this);
33
+ if (this.submit) {
34
+ fromEvent(this.element, 'click')
35
+ .pipe(takeUntil(this._destroy$))
36
+ .subscribe(() => {
37
+ this.active = true;
38
+ });
39
+ if (this.dirtySubmit) {
40
+ if (this.form.dirtySubmitButton) {
41
+ if (!this.form.ngForm.dirty) {
42
+ this.disable();
43
+ }
44
+ }
45
+ }
46
+ this.transitionStyle = 'none';
47
+ setTimeout(() => {
48
+ this.transitionStyle = null;
49
+ }, 500);
50
+ }
51
+ }
52
+ }
53
+ disable() {
54
+ if (this._matButton && !this.active) {
55
+ this._previousDisabled = this._matButton.disabled;
56
+ this._matButton.disabled = true;
57
+ this._cdRef.markForCheck();
58
+ }
59
+ }
60
+ enable() {
61
+ if (this._matButton) {
62
+ this._matButton.disabled = false;
63
+ this._matButton.disableRipple = true;
64
+ this._cdRef.markForCheck();
65
+ }
66
+ }
67
+ process() {
68
+ this.setClass('process');
69
+ if (this._matButton) {
70
+ this._matButton.disableRipple = true;
71
+ }
72
+ }
73
+ success() {
74
+ this.setClass('success');
75
+ if (this._matButton) {
76
+ this._matButton.disableRipple = false;
77
+ }
78
+ }
79
+ error() {
80
+ this.setClass('error');
81
+ if (this._matButton) {
82
+ this._matButton.disableRipple = false;
83
+ }
84
+ }
85
+ setClass(cls) {
86
+ const svg = this._getSvg(cls);
87
+ this._resetClass();
88
+ this._disableShadowAnimation();
89
+ this.element.classList.add(`submit-${cls}`);
90
+ this.element.append(svg);
91
+ }
92
+ get element() {
93
+ return this._elementRef.nativeElement;
94
+ }
95
+ resetActive() {
96
+ this.active = false;
97
+ }
98
+ reset() {
99
+ if (!this._previousDisabled) {
100
+ this.enable();
101
+ }
102
+ this.element.querySelectorAll('.svg-icon')
103
+ .forEach((el) => {
104
+ el.remove();
105
+ });
106
+ if (this._matButton) {
107
+ this._matButton.disableRipple = false;
108
+ }
109
+ this._resetClass();
110
+ }
111
+ ngOnDestroy() {
112
+ this._destroy$.next();
113
+ this._destroy$.complete();
114
+ this.form?.removeButton(this);
115
+ }
116
+ _disableShadowAnimation() {
117
+ // .mat-elevation-z2 removes the click shadow animation
118
+ //this.element.classList.add('mat-elevation-z2');
119
+ }
120
+ _resetClass() {
121
+ this.element.classList.remove('submit-success', 'submit-error', 'submit-process', 'mat-elevation-z2');
122
+ }
123
+ _getSvg(type) {
124
+ if (type === 'success') {
125
+ return new DOMParser().parseFromString(`<svg class="svg-icon svg-icon-success" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 38 38" style="enable-background:new 0 0 38 38;" xml:space="preserve" width="38px" height="38px">
126
+ <g>
127
+ <g class="check">
128
+ <g>
129
+ <path d="M29.6,11.9c-0.5-0.5-1.3-0.5-1.8,0L16.3,23.4l-6.1-6.1c-0.5-0.5-1.3-0.5-1.8,0s-0.5,1.3,0,1.8l7,7c0.3,0.3,0.6,0.4,0.9,0.4s0.7-0.1,0.9-0.4l12.4-12.4C30.1,13.2,30.1,12.4,29.6,11.9z"/>
130
+ </g>
131
+ </g>
132
+ </g>
133
+ </svg>`, 'text/xml').firstChild;
134
+ }
135
+ if (type === 'process') {
136
+ return new DOMParser().parseFromString(`<svg class="svg-icon svg-icon-process" width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg">
137
+ <g fill="none" fill-rule="evenodd">
138
+ <g transform="translate(1 1)" stroke-width="2"><circle stroke-opacity=".5" cx="18" cy="18" r="18"/>
139
+ <path d="M36 18c0-9.94-8.06-18-18-18"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur=".7s" repeatCount="indefinite"/></path>
140
+ </g>
141
+ </g>
142
+ </svg>`, 'text/xml').firstChild;
143
+ }
144
+ if (type === 'error') {
145
+ return new DOMParser().parseFromString('<svg class="svg-icon svg-icon-error" xmlns="http://www.w3.org/2000/svg" width="38px" height="38px" viewBox="0 0 16 16"><g><path d="M8 1c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7zM8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8v0z" data-original="#444444" data-old_color="#444444"/><path d="M12.2 10.8l-2.8-2.8 2.8-2.8-1.4-1.4-2.8 2.8-2.8-2.8-1.4 1.4 2.8 2.8-2.8 2.8 1.4 1.4 2.8-2.8 2.8 2.8z"/></g> </svg>', 'text/xml').firstChild;
146
+ }
147
+ }
148
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsButtonDirective, deps: [{ token: i1.MatButton, host: true, optional: true }, { token: i2.FsFormDirective, optional: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
149
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: { name: "name", dirtySubmit: "dirtySubmit", form: "form" }, host: { properties: { "style.transition": "this.transitionStyle" } }, ngImport: i0 });
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsButtonDirective, decorators: [{
152
+ type: Directive,
153
+ args: [{
154
+ selector: '[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])',
155
+ }]
156
+ }], ctorParameters: function () { return [{ type: i1.MatButton, decorators: [{
157
+ type: Optional
158
+ }, {
159
+ type: Host
160
+ }] }, { type: i2.FsFormDirective, decorators: [{
161
+ type: Optional
162
+ }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { name: [{
163
+ type: Input
164
+ }], dirtySubmit: [{
165
+ type: Input
166
+ }], form: [{
167
+ type: Input
168
+ }], transitionStyle: [{
169
+ type: HostBinding,
170
+ args: ['style.transition']
171
+ }] } });
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9idXR0b24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFxQixRQUFRLEdBQ2hHLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBTXhELE1BQU0sT0FBTyxpQkFBaUI7SUFxQkU7SUFDUjtJQUNaO0lBQ0E7SUFyQkgsSUFBSSxDQUFDO0lBR0wsV0FBVyxHQUFHLElBQUksQ0FBQztJQUduQixJQUFJLENBQWtCO0lBR3RCLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFFdkIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFZCxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFbEMsWUFDOEIsVUFBcUIsRUFDN0IsS0FBc0IsRUFDbEMsV0FBdUIsRUFDdkIsTUFBeUI7UUFITCxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQzdCLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQW1CO0lBQ2hDLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFD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QUFPLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDOzs7Ozs7OzthQVFoQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQztTQUNqQztRQUVELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixPQUFPLElBQUksU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDOzs7Ozs7YUFNaEMsRUFBRSxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDcEIsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyw4WkFBOFosRUFBRSxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUM7U0FDL2Q7SUFDSCxDQUFDO3dHQXpLVSxpQkFBaUI7NEZBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFIN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaU1BQWlNO2lCQUM1TTs7MEJBc0JJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFRO3FHQW5CSixJQUFJO3NCQURWLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsZUFBZTtzQkFEckIsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0LCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cblxuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4vZm9ybS9mb3JtLmRpcmVjdGl2ZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW21hdC1yYWlzZWQtYnV0dG9uXTpub3QoW2ZzRm9ybUJ1dHRvblN0YW5kYWxvbmVdKSxbbWF0LWJ1dHRvbl06bm90KFtmc0Zvcm1CdXR0b25TdGFuZGFsb25lXSksW21hdC1mbGF0LWJ1dHRvbl06bm90KFtmc0Zvcm1CdXR0b25TdGFuZGFsb25lXSksW21hdC1zdHJva2VkLWJ1dHRvbl06bm90KFtmc0Zvcm1CdXR0b25TdGFuZGFsb25lXSknLFxufSlcbmV4cG9ydCBjbGFzcyBGc0J1dHRvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbmFtZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGlydHlTdWJtaXQgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmb3JtOiBGc0Zvcm1EaXJlY3RpdmU7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS50cmFuc2l0aW9uJylcbiAgcHVibGljIHRyYW5zaXRpb25TdHlsZSA9IG51bGw7XG5cbiAgcHVibGljIGFjdGl2ZSA9IGZhbHNlO1xuICBwdWJsaWMgc3VibWl0ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNEaXNhYmxlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwcml2YXRlIF9tYXRCdXR0b246IE1hdEJ1dHRvbixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9mb3JtOiBGc0Zvcm1EaXJlY3RpdmUsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJtaXQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdzdWJtaXQnO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybSB8fCB0aGlzLl9mb3JtO1xuXG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5mb3JtLmFkZEJ1dHRvbih0aGlzKTtcblxuICAgICAgaWYodGhpcy5zdWJtaXQpIHtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudCwgJ2NsaWNrJylcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmRpcnR5U3VibWl0KSB7XG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5kaXJ0eVN1Ym1pdEJ1dHRvbikge1xuICAgICAgICAgICAgaWYoIXRoaXMuZm9ybS5uZ0Zvcm0uZGlydHkpIHtcbiAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2l0aW9uU3R5bGUgPSAnbm9uZSc7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblN0eWxlID0gbnVsbDtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZSgpIHsgICAgXG4gICAgaWYgKHRoaXMuX21hdEJ1dHRvbiAmJiAhdGhpcy5hY3RpdmUpIHtcbiAgICAgIHRoaXMuX3ByZXZpb3VzRGlzYWJsZWQgPSB0aGlzLl9tYXRCdXR0b24uZGlzYWJsZWQ7XG4gICAgICB0aGlzLl9tYXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7IFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbmFibGUoKSB7XG4gICAgaWYgKHRoaXMuX21hdEJ1dHRvbikge1xuICAgICAgdGhpcy5fbWF0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9tYXRCdXR0b24uZGlzYWJsZVJpcHBsZSA9IHRydWU7XG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJvY2VzcygpIHtcbiAgICB0aGlzLnNldENsYXNzKCdwcm9jZXNzJyk7XG4gICAgaWYgKHRoaXMuX21hdEJ1dHRvbikge1xuICAgICAgdGhpcy5fbWF0QnV0dG9uLmRpc2FibGVSaXBwbGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdWNjZXNzKCkge1xuICAgIHRoaXMuc2V0Q2xhc3MoJ3N1Y2Nlc3MnKTtcbiAgICBpZiAodGhpcy5fbWF0QnV0dG9uKSB7XG4gICAgICB0aGlzLl9tYXRCdXR0b24uZGlzYWJsZVJpcHBsZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlcnJvcigpIHtcbiAgICB0aGlzLnNldENsYXNzKCdlcnJvcicpO1xuICAgIGlmICh0aGlzLl9tYXRCdXR0b24pIHtcbiAgICAgIHRoaXMuX21hdEJ1dHRvbi5kaXNhYmxlUmlwcGxlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldENsYXNzKGNscykge1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuX2dldFN2ZyhjbHMpO1xuICAgIHRoaXMuX3Jlc2V0Q2xhc3MoKTtcbiAgICB0aGlzLl9kaXNhYmxlU2hhZG93QW5pbWF0aW9uKCk7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoYHN1Ym1pdC0ke2Nsc31gKTtcbiAgICB0aGlzLmVsZW1lbnQuYXBwZW5kKHN2Zyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEFjdGl2ZSgpIHtcbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIGlmKCF0aGlzLl9wcmV2aW91c0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3ZnLWljb24nKVxuICAgICAgLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgIGVsLnJlbW92ZSgpO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5fbWF0QnV0dG9uKSB7XG4gICAgICB0aGlzLl9tYXRCdXR0b24uZGlzYWJsZVJpcHBsZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9yZXNldENsYXNzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5mb3JtPy5yZW1vdmVCdXR0b24odGhpcyk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlU2hhZG93QW5pbWF0aW9uKCkge1xuICAgIC8vIC5tYXQtZWxldmF0aW9uLXoyIHJlbW92ZXMgdGhlIGNsaWNrIHNoYWRvdyBhbmltYXRpb25cbiAgICAvL3RoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdtYXQtZWxldmF0aW9uLXoyJyk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldENsYXNzKCkge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdzdWJtaXQtc3VjY2VzcycsICdzdWJtaXQtZXJyb3InLCAnc3VibWl0LXByb2Nlc3MnLCAnbWF0LWVsZXZhdGlvbi16MicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3ZnKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICByZXR1cm4gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhgPHN2ZyBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLXN1Y2Nlc3NcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgdmVyc2lvbj1cIjEuMVwiIHg9XCIwcHhcIiB5PVwiMHB4XCIgdmlld0JveD1cIjAgMCAzOCAzOFwiIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzOCAzODtcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiIHdpZHRoPVwiMzhweFwiIGhlaWdodD1cIjM4cHhcIj5cbiAgICAgIDxnPlxuICAgICAgICA8ZyBjbGFzcz1cImNoZWNrXCI+XG4gICAgICAgICAgPGc+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTI5LjYsMTEuOWMtMC41LTAuNS0xLjMtMC41LTEuOCwwTDE2LjMsMjMuNGwtNi4xLTYuMWMtMC41LTAuNS0xLjMtMC41LTEuOCwwcy0wLjUsMS4zLDAsMS44bDcsN2MwLjMsMC4zLDAuNiwwLjQsMC45LDAuNHMwLjctMC4xLDAuOS0wLjRsMTIuNC0xMi40QzMwLjEsMTMuMiwzMC4xLDEyLjQsMjkuNiwxMS45elwiLz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgIDwvZz5cbiAgICAgIDwvZz5cbiAgICAgIDwvc3ZnPmAsICd0ZXh0L3htbCcpLmZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdwcm9jZXNzJykge1xuICAgICAgcmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoYDxzdmcgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1wcm9jZXNzXCIgd2lkdGg9XCIzOFwiIGhlaWdodD1cIjM4XCIgdmlld0JveD1cIjAgMCAzOCAzOFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMSAxKVwiIHN0cm9rZS13aWR0aD1cIjJcIj48Y2lyY2xlIHN0cm9rZS1vcGFjaXR5PVwiLjVcIiBjeD1cIjE4XCIgY3k9XCIxOFwiIHI9XCIxOFwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTM2IDE4YzAtOS45NC04LjA2LTE4LTE4LTE4XCI+PGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT1cInRyYW5zZm9ybVwiIHR5cGU9XCJyb3RhdGVcIiBmcm9tPVwiMCAxOCAxOFwiIHRvPVwiMzYwIDE4IDE4XCIgZHVyPVwiLjdzXCIgcmVwZWF0Q291bnQ9XCJpbmRlZmluaXRlXCIvPjwvcGF0aD5cbiAgICAgICAgPC9nPlxuICAgICAgPC9nPlxuICAgICAgPC9zdmc+YCwgJ3RleHQveG1sJykuZmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgcmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoJzxzdmcgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1lcnJvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjM4cHhcIiBoZWlnaHQ9XCIzOHB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxnPjxwYXRoIGQ9XCJNOCAxYzMuOSAwIDcgMy4xIDcgN3MtMy4xIDctNyA3LTctMy4xLTctNyAzLjEtNyA3LTd6TTggMGMtNC40IDAtOCAzLjYtOCA4czMuNiA4IDggOCA4LTMuNiA4LTgtMy42LTgtOC04djB6XCIgZGF0YS1vcmlnaW5hbD1cIiM0NDQ0NDRcIiBkYXRhLW9sZF9jb2xvcj1cIiM0NDQ0NDRcIi8+PHBhdGggZD1cIk0xMi4yIDEwLjhsLTIuOC0yLjggMi44LTIuOC0xLjQtMS40LTIuOCAyLjgtMi44LTIuOC0xLjQgMS40IDIuOCAyLjgtMi44IDIuOCAxLjQgMS40IDIuOC0yLjggMi44IDIuOHpcIi8+PC9nPiA8L3N2Zz4nLCAndGV4dC94bWwnKS5maXJzdENoaWxkO1xuICAgIH1cbiAgfVxufVxuIl19