@firestitch/form 15.0.0 → 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 (128) hide show
  1. package/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +1 -1
  2. package/app/components/form-template/form-template.component.d.ts +1 -1
  3. package/app/components/form-template-outlet/form-template-outlet.component.d.ts +1 -1
  4. package/app/directives/button.directive.d.ts +1 -1
  5. package/app/directives/form/form.directive.d.ts +1 -1
  6. package/app/directives/form-dialog-close.directive.d.ts +1 -1
  7. package/app/directives/validators/compare.directive.d.ts +1 -1
  8. package/app/directives/validators/control.directive.d.ts +1 -1
  9. package/app/directives/validators/daterange.directive.d.ts +1 -1
  10. package/app/directives/validators/email.directive.d.ts +1 -1
  11. package/app/directives/validators/emails.directive.d.ts +1 -1
  12. package/app/directives/validators/function.directive.d.ts +1 -1
  13. package/app/directives/validators/greater-equal.directive.d.ts +1 -1
  14. package/app/directives/validators/greater.directive.d.ts +1 -1
  15. package/app/directives/validators/integer.directive.d.ts +1 -1
  16. package/app/directives/validators/lesser-equal.directive.d.ts +1 -1
  17. package/app/directives/validators/lesser.directive.d.ts +1 -1
  18. package/app/directives/validators/max.directive.d.ts +1 -1
  19. package/app/directives/validators/maxlength.directive.d.ts +1 -1
  20. package/app/directives/validators/min.directive.d.ts +1 -1
  21. package/app/directives/validators/minlength.directive.d.ts +1 -1
  22. package/app/directives/validators/numeric.directive.d.ts +1 -1
  23. package/app/directives/validators/pattern.directive.d.ts +1 -1
  24. package/app/directives/validators/phone.directive.d.ts +1 -1
  25. package/app/directives/validators/required.directive.d.ts +1 -1
  26. package/app/directives/validators/url.directive.d.ts +1 -1
  27. package/app/directives/validators/validate.directive.d.ts +1 -1
  28. package/app/guards/form-deactivate.guard.d.ts +2 -2
  29. package/esm2022/app/components/confirm-unsaved/confirm-unsaved.component.mjs +51 -0
  30. package/esm2022/app/components/form-dialog-actions/form-dialog-actions.component.mjs +79 -0
  31. package/esm2022/app/components/form-template/form-template.component.mjs +34 -0
  32. package/esm2022/app/components/form-template-outlet/form-template-outlet.component.mjs +32 -0
  33. package/esm2022/app/directives/button.directive.mjs +172 -0
  34. package/esm2022/app/directives/form/form.directive.mjs +702 -0
  35. package/esm2022/app/directives/form-dialog-close.directive.mjs +57 -0
  36. package/esm2022/app/directives/form-template.directive.mjs +21 -0
  37. package/{esm2020 → esm2022}/app/directives/submit-button.directive.mjs +4 -4
  38. package/esm2022/app/directives/validators/compare.directive.mjs +48 -0
  39. package/esm2022/app/directives/validators/control.directive.mjs +269 -0
  40. package/esm2022/app/directives/validators/daterange.directive.mjs +42 -0
  41. package/esm2022/app/directives/validators/email.directive.mjs +42 -0
  42. package/esm2022/app/directives/validators/emails.directive.mjs +42 -0
  43. package/esm2022/app/directives/validators/function.directive.mjs +40 -0
  44. package/esm2022/app/directives/validators/greater-equal.directive.mjs +41 -0
  45. package/esm2022/app/directives/validators/greater.directive.mjs +41 -0
  46. package/esm2022/app/directives/validators/integer.directive.mjs +40 -0
  47. package/esm2022/app/directives/validators/lesser-equal.directive.mjs +41 -0
  48. package/esm2022/app/directives/validators/lesser.directive.mjs +41 -0
  49. package/esm2022/app/directives/validators/max.directive.mjs +37 -0
  50. package/esm2022/app/directives/validators/maxlength.directive.mjs +36 -0
  51. package/esm2022/app/directives/validators/min.directive.mjs +37 -0
  52. package/esm2022/app/directives/validators/minlength.directive.mjs +36 -0
  53. package/{esm2020 → esm2022}/app/directives/validators/no-fs-validators.directive.mjs +6 -6
  54. package/esm2022/app/directives/validators/numeric.directive.mjs +42 -0
  55. package/esm2022/app/directives/validators/pattern.directive.mjs +36 -0
  56. package/esm2022/app/directives/validators/phone.directive.mjs +42 -0
  57. package/esm2022/app/directives/validators/required.directive.mjs +66 -0
  58. package/esm2022/app/directives/validators/url.directive.mjs +43 -0
  59. package/esm2022/app/directives/validators/validate.directive.mjs +42 -0
  60. package/esm2022/app/fs-form.module.mjs +209 -0
  61. package/esm2022/app/guards/form-deactivate.guard.mjs +44 -0
  62. package/esm2022/app/services/fsform.service.mjs +94 -0
  63. package/{fesm2020 → fesm2022}/firestitch-form.mjs +354 -291
  64. package/fesm2022/firestitch-form.mjs.map +1 -0
  65. package/package.json +5 -11
  66. package/esm2020/app/components/confirm-unsaved/confirm-unsaved.component.mjs +0 -44
  67. package/esm2020/app/components/form-dialog-actions/form-dialog-actions.component.mjs +0 -75
  68. package/esm2020/app/components/form-template/form-template.component.mjs +0 -31
  69. package/esm2020/app/components/form-template-outlet/form-template-outlet.component.mjs +0 -30
  70. package/esm2020/app/directives/button.directive.mjs +0 -166
  71. package/esm2020/app/directives/form/form.directive.mjs +0 -689
  72. package/esm2020/app/directives/form-dialog-close.directive.mjs +0 -54
  73. package/esm2020/app/directives/form-template.directive.mjs +0 -20
  74. package/esm2020/app/directives/validators/compare.directive.mjs +0 -47
  75. package/esm2020/app/directives/validators/control.directive.mjs +0 -258
  76. package/esm2020/app/directives/validators/daterange.directive.mjs +0 -41
  77. package/esm2020/app/directives/validators/email.directive.mjs +0 -41
  78. package/esm2020/app/directives/validators/emails.directive.mjs +0 -41
  79. package/esm2020/app/directives/validators/function.directive.mjs +0 -41
  80. package/esm2020/app/directives/validators/greater-equal.directive.mjs +0 -40
  81. package/esm2020/app/directives/validators/greater.directive.mjs +0 -40
  82. package/esm2020/app/directives/validators/integer.directive.mjs +0 -39
  83. package/esm2020/app/directives/validators/lesser-equal.directive.mjs +0 -40
  84. package/esm2020/app/directives/validators/lesser.directive.mjs +0 -40
  85. package/esm2020/app/directives/validators/max.directive.mjs +0 -36
  86. package/esm2020/app/directives/validators/maxlength.directive.mjs +0 -35
  87. package/esm2020/app/directives/validators/min.directive.mjs +0 -36
  88. package/esm2020/app/directives/validators/minlength.directive.mjs +0 -35
  89. package/esm2020/app/directives/validators/numeric.directive.mjs +0 -41
  90. package/esm2020/app/directives/validators/pattern.directive.mjs +0 -35
  91. package/esm2020/app/directives/validators/phone.directive.mjs +0 -41
  92. package/esm2020/app/directives/validators/required.directive.mjs +0 -69
  93. package/esm2020/app/directives/validators/url.directive.mjs +0 -45
  94. package/esm2020/app/directives/validators/validate.directive.mjs +0 -43
  95. package/esm2020/app/fs-form.module.mjs +0 -209
  96. package/esm2020/app/guards/form-deactivate.guard.mjs +0 -42
  97. package/esm2020/app/services/fsform.service.mjs +0 -92
  98. package/fesm2015/firestitch-form.mjs +0 -2579
  99. package/fesm2015/firestitch-form.mjs.map +0 -1
  100. package/fesm2020/firestitch-form.mjs.map +0 -1
  101. /package/{esm2020 → esm2022}/app/components/confirm-unsaved/index.mjs +0 -0
  102. /package/{esm2020 → esm2022}/app/components/form-dialog-actions/index.mjs +0 -0
  103. /package/{esm2020 → esm2022}/app/components/form-template/index.mjs +0 -0
  104. /package/{esm2020 → esm2022}/app/components/form-template-outlet/index.mjs +0 -0
  105. /package/{esm2020 → esm2022}/app/components/index.mjs +0 -0
  106. /package/{esm2020 → esm2022}/app/consts/error-messages.const.mjs +0 -0
  107. /package/{esm2020 → esm2022}/app/directives/form/index.mjs +0 -0
  108. /package/{esm2020 → esm2022}/app/directives/index.mjs +0 -0
  109. /package/{esm2020 → esm2022}/app/directives/validators/index.mjs +0 -0
  110. /package/{esm2020 → esm2022}/app/enums/confirm-result.mjs +0 -0
  111. /package/{esm2020 → esm2022}/app/enums/form-status.mjs +0 -0
  112. /package/{esm2020 → esm2022}/app/enums/index.mjs +0 -0
  113. /package/{esm2020 → esm2022}/app/helpers/confirm-result-continue.mjs +0 -0
  114. /package/{esm2020 → esm2022}/app/helpers/get-active-route.mjs +0 -0
  115. /package/{esm2020 → esm2022}/app/helpers/get-form-errors.mjs +0 -0
  116. /package/{esm2020 → esm2022}/app/helpers/index.mjs +0 -0
  117. /package/{esm2020 → esm2022}/app/helpers/is-enabled.mjs +0 -0
  118. /package/{esm2020 → esm2022}/app/interfaces/async-validator.mjs +0 -0
  119. /package/{esm2020 → esm2022}/app/interfaces/confirm-config.mjs +0 -0
  120. /package/{esm2020 → esm2022}/app/interfaces/confirm-tab-group.mjs +0 -0
  121. /package/{esm2020 → esm2022}/app/interfaces/index.mjs +0 -0
  122. /package/{esm2020 → esm2022}/app/interfaces/submit-event.mjs +0 -0
  123. /package/{esm2020 → esm2022}/app/interfaces/submitted-event.mjs +0 -0
  124. /package/{esm2020 → esm2022}/app/interfaces/validator.mjs +0 -0
  125. /package/{esm2020 → esm2022}/app/providers/validate-messages.provider.mjs +0 -0
  126. /package/{esm2020 → esm2022}/app/validators/validators.mjs +0 -0
  127. /package/{esm2020 → esm2022}/firestitch-form.mjs +0 -0
  128. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -0,0 +1,57 @@
1
+ import { Directive, HostBinding, HostListener, Input, Optional } from '@angular/core';
2
+ import { MatDialogRef } from '@angular/material/dialog';
3
+ import { Subject } from 'rxjs';
4
+ import { filter, takeUntil } from 'rxjs/operators';
5
+ import { ConfirmResult } from '../enums/confirm-result';
6
+ import { FsFormDirective } from './form';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./form";
9
+ import * as i2 from "@angular/material/dialog";
10
+ export class FsFormDialogCloseDirective {
11
+ _form;
12
+ _dialogRef;
13
+ closeData;
14
+ type = 'button';
15
+ _destroy$ = new Subject();
16
+ constructor(_form, _dialogRef) {
17
+ this._form = _form;
18
+ this._dialogRef = _dialogRef;
19
+ }
20
+ closeClick() {
21
+ if (this._form) {
22
+ this._form.triggerConfirm()
23
+ .pipe(filter((confirmResult) => (confirmResult !== ConfirmResult.Review)), takeUntil(this._destroy$))
24
+ .subscribe(() => {
25
+ this._dialogRef.close(this.closeData);
26
+ });
27
+ }
28
+ else {
29
+ this._dialogRef.close(this.closeData);
30
+ }
31
+ }
32
+ ngOnDestroy() {
33
+ this._destroy$.next();
34
+ this._destroy$.complete();
35
+ }
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormDialogCloseDirective, deps: [{ token: i1.FsFormDirective, optional: true }, { token: i2.MatDialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
37
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsFormDialogCloseDirective, selector: "[fsFormDialogClose],[fs-form-dialog-close]", inputs: { closeData: "closeData" }, host: { listeners: { "click": "closeClick($event.target)" }, properties: { "attr.type": "this.type" } }, ngImport: i0 });
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormDialogCloseDirective, decorators: [{
40
+ type: Directive,
41
+ args: [{
42
+ selector: '[fsFormDialogClose],[fs-form-dialog-close]',
43
+ }]
44
+ }], ctorParameters: function () { return [{ type: i1.FsFormDirective, decorators: [{
45
+ type: Optional
46
+ }] }, { type: i2.MatDialogRef, decorators: [{
47
+ type: Optional
48
+ }] }]; }, propDecorators: { closeData: [{
49
+ type: Input
50
+ }], type: [{
51
+ type: HostBinding,
52
+ args: ['attr.type']
53
+ }], closeClick: [{
54
+ type: HostListener,
55
+ args: ['click', ['$event.target']]
56
+ }] } });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctY2xvc2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2Zvcm0tZGlhbG9nLWNsb3NlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7O0FBTXpDLE1BQU0sT0FBTywwQkFBMEI7SUFTZjtJQUNBO0lBUk4sU0FBUyxDQUFDO0lBRU8sSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUV6QyxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVsQyxZQUNzQixLQUFzQixFQUN0QixVQUE2QjtRQUQ3QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtJQUVuRCxDQUFDO0lBR00sVUFBVTtRQUNmLElBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO2lCQUN4QixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsYUFBNEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ2xGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQWpDVSwwQkFBMEI7NEZBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFIdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNENBQTRDO2lCQUN2RDs7MEJBVUksUUFBUTs7MEJBQ1IsUUFBUTs0Q0FSSyxTQUFTO3NCQUF4QixLQUFLO2dCQUUyQixJQUFJO3NCQUFwQyxXQUFXO3VCQUFDLFdBQVc7Z0JBV2pCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29uZmlybVJlc3VsdCB9IGZyb20gJy4uL2VudW1zL2NvbmZpcm0tcmVzdWx0JztcblxuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtJztcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZnNGb3JtRGlhbG9nQ2xvc2VdLFtmcy1mb3JtLWRpYWxvZy1jbG9zZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zvcm1EaWFsb2dDbG9zZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgcHVibGljIGNsb3NlRGF0YTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudHlwZScpIHB1YmxpYyB0eXBlID0gJ2J1dHRvbic7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuIFxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9mb3JtOiBGc0Zvcm1EaXJlY3RpdmUsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8YW55PixcbiAgKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICBwdWJsaWMgY2xvc2VDbGljaygpOiB2b2lkIHtcbiAgICBpZih0aGlzLl9mb3JtKSB7XG4gICAgICB0aGlzLl9mb3JtLnRyaWdnZXJDb25maXJtKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChjb25maXJtUmVzdWx0OiBDb25maXJtUmVzdWx0KSA9PiAoY29uZmlybVJlc3VsdCAhPT0gQ29uZmlybVJlc3VsdC5SZXZpZXcpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZSh0aGlzLmNsb3NlRGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UodGhpcy5jbG9zZURhdGEpO1xuICAgIH1cbiAgfVxuIFxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,21 @@
1
+ import { Directive, QueryList, ViewChildren } from '@angular/core';
2
+ import { NgModel } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export class FsFormTemplateDirective {
5
+ constructor() { }
6
+ models;
7
+ ngAfterContentInit() {
8
+ }
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
10
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsFormTemplateDirective, selector: "[fsFormTemplate]", viewQueries: [{ propertyName: "models", predicate: NgModel, descendants: true }], ngImport: i0 });
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormTemplateDirective, decorators: [{
13
+ type: Directive,
14
+ args: [{
15
+ selector: '[fsFormTemplate]',
16
+ }]
17
+ }], ctorParameters: function () { return []; }, propDecorators: { models: [{
18
+ type: ViewChildren,
19
+ args: [NgModel]
20
+ }] } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10ZW1wbGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvZm9ybS10ZW1wbGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQyxTQUFTLEVBQUUsU0FBUyxFQUFlLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBTXpDLE1BQU0sT0FBTyx1QkFBdUI7SUFFbEMsZ0JBRUcsQ0FBQztJQUdHLE1BQU0sQ0FBcUI7SUFFM0Isa0JBQWtCO0lBRXpCLENBQUM7d0dBWFUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsbUZBTXBCLE9BQU87OzRGQU5WLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2lCQUM3QjswRUFRUSxNQUFNO3NCQURaLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbnRlbnRDaGlsZHJlbiwgRGlyZWN0aXZlLCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzRm9ybVRlbXBsYXRlXScsXG59KVxuZXhwb3J0IGNsYXNzIEZzRm9ybVRlbXBsYXRlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAvL3B1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8RnNGb3JtVGVtcGxhdGVEaXJlY3RpdmU+XG4gICkge31cblxuICBAVmlld0NoaWxkcmVuKE5nTW9kZWwpIFxuICBwdWJsaWMgbW9kZWxzOiBRdWVyeUxpc3Q8TmdNb2RlbD47XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcblxuICB9XG59XG4iXX0=
@@ -2,13 +2,13 @@ import { Directive } from '@angular/core';
2
2
  import { FsButtonDirective } from './button.directive';
3
3
  import * as i0 from "@angular/core";
4
4
  export class FsSubmitButtonDirective extends FsButtonDirective {
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsSubmitButtonDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsSubmitButtonDirective, selector: "dummy-selector", usesInheritance: true, ngImport: i0 });
5
7
  }
6
- FsSubmitButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsSubmitButtonDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7
- FsSubmitButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FsSubmitButtonDirective, selector: "dummy-selector", usesInheritance: true, ngImport: i0 });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsSubmitButtonDirective, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsSubmitButtonDirective, decorators: [{
9
9
  type: Directive,
10
10
  args: [{
11
11
  selector: 'dummy-selector',
12
12
  }]
13
13
  }] });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvc3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjs7cUhBQWpELHVCQUF1Qjt5R0FBdkIsdUJBQXVCOzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL2J1dHRvbi5kaXJlY3RpdmUnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2R1bW15LXNlbGVjdG9yJyxcbn0pXG5leHBvcnQgY2xhc3MgRnNTdWJtaXRCdXR0b25EaXJlY3RpdmUgZXh0ZW5kcyBGc0J1dHRvbkRpcmVjdGl2ZSB7XG59XG4iXX0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvc3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjt3R0FBakQsdUJBQXVCOzRGQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL2J1dHRvbi5kaXJlY3RpdmUnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2R1bW15LXNlbGVjdG9yJyxcbn0pXG5leHBvcnQgY2xhc3MgRnNTdWJtaXRCdXR0b25EaXJlY3RpdmUgZXh0ZW5kcyBGc0J1dHRvbkRpcmVjdGl2ZSB7XG59XG4iXX0=
@@ -0,0 +1,48 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';
3
+ import { FsControlDirective } from './control.directive';
4
+ import * as i0 from "@angular/core";
5
+ export class FsFormCompareDirective extends FsControlDirective {
6
+ fsFormCompare;
7
+ set validationMessage(value) {
8
+ this._validateMessages.compare = value;
9
+ }
10
+ ngOnChanges() {
11
+ this._control.updateValueAndValidity();
12
+ }
13
+ validate(control) {
14
+ if (this.fsFormCompare.value === this._elementRef.nativeElement.value) {
15
+ return null;
16
+ }
17
+ return { compare: true };
18
+ }
19
+ ngAfterViewInit() {
20
+ this.fsFormCompare.addEventListener('keyup', () => {
21
+ this._control.updateValueAndValidity();
22
+ }, false);
23
+ }
24
+ ngOnDestroy() {
25
+ this.fsFormCompare.removeEventListener('keyup', () => {
26
+ this._control.updateValueAndValidity();
27
+ }, false);
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormCompareDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
30
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsFormCompareDirective, selector: "[fsFormCompare]", inputs: { fsFormCompare: "fsFormCompare", validationMessage: ["fsFormCompareMessage", "validationMessage"] }, providers: [
31
+ VALIDATE_MESSAGE_PROVIDER,
32
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormCompareDirective, decorators: [{
35
+ type: Directive,
36
+ args: [{
37
+ selector: '[fsFormCompare]',
38
+ providers: [
39
+ VALIDATE_MESSAGE_PROVIDER,
40
+ ],
41
+ }]
42
+ }], propDecorators: { fsFormCompare: [{
43
+ type: Input
44
+ }], validationMessage: [{
45
+ type: Input,
46
+ args: ['fsFormCompareMessage']
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb21wYXJlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxLQUFLLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBSXRGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQVN6RCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsa0JBQWtCO0lBSXJELGFBQWEsQ0FBQztJQUVyQixJQUNXLGlCQUFpQixDQUFDLEtBQWE7UUFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTSxRQUFRLENBQUMsT0FBd0I7UUFDdEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDckUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFFM0IsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN6QyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3pDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7d0dBbENVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLHdKQUp0QjtZQUNULHlCQUF5QjtTQUMxQjs7NEZBRVUsc0JBQXNCO2tCQU5sQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFNBQVMsRUFBRTt3QkFDVCx5QkFBeUI7cUJBQzFCO2lCQUNGOzhCQUtRLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUssaUJBQWlCO3NCQUQzQixLQUFLO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEZzVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy92YWxpZGF0b3InO1xuaW1wb3J0IHsgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy92YWxpZGF0ZS1tZXNzYWdlcy5wcm92aWRlcic7XG5cbmltcG9ydCB7IEZzQ29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vY29udHJvbC5kaXJlY3RpdmUnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1Db21wYXJlXScsXG4gIHByb3ZpZGVyczogW1xuICAgIFZBTElEQVRFX01FU1NBR0VfUFJPVklERVIsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzRm9ybUNvbXBhcmVEaXJlY3RpdmUgZXh0ZW5kcyBGc0NvbnRyb2xEaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgRnNWYWxpZGF0b3Ige1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmc0Zvcm1Db21wYXJlO1xuXG4gIEBJbnB1dCgnZnNGb3JtQ29tcGFyZU1lc3NhZ2UnKVxuICBwdWJsaWMgc2V0IHZhbGlkYXRpb25NZXNzYWdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWxpZGF0ZU1lc3NhZ2VzLmNvbXBhcmUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZnNGb3JtQ29tcGFyZS52YWx1ZSA9PT0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gXG4gICAgcmV0dXJuIHsgY29tcGFyZTogdHJ1ZSB9O1xuICAgIFxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmZzRm9ybUNvbXBhcmUuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoKSA9PiB7XG4gICAgICB0aGlzLl9jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5mc0Zvcm1Db21wYXJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKCkgPT4ge1xuICAgICAgdGhpcy5fY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSwgZmFsc2UpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,269 @@
1
+ import { Directive, ElementRef, Inject, Injector, Input, Optional, Renderer2, Self, } from '@angular/core';
2
+ import { NgControl } from '@angular/forms';
3
+ import { Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { keys, values } from 'lodash-es';
6
+ import { VALIDATE_MESSAGE_PROVIDER, VALIDATE_MESSAGES, } from '../../providers/validate-messages.provider';
7
+ import { FsFormDirective } from '../form/form.directive';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ import * as i2 from "../form/form.directive";
11
+ export class FsControlDirective {
12
+ _elementRef;
13
+ renderer2;
14
+ injector;
15
+ _validateMessages;
16
+ ngControl;
17
+ formDirective;
18
+ wrapperSelector;
19
+ messageSelector;
20
+ hintSelector;
21
+ labelSelector;
22
+ appendMessageClass = 'fs-form-message';
23
+ appendLabelClass = 'fs-form-label';
24
+ appendErrorClass = 'fs-form-error';
25
+ appendHintClass = 'fs-form-hint';
26
+ set validateMessages(messages) {
27
+ this._validateMessages = {
28
+ ...this._validateMessages,
29
+ ...messages,
30
+ };
31
+ }
32
+ errors = [];
33
+ _control;
34
+ _destroy$ = new Subject();
35
+ constructor(_elementRef, renderer2, injector, _validateMessages, ngControl, formDirective) {
36
+ this._elementRef = _elementRef;
37
+ this.renderer2 = renderer2;
38
+ this.injector = injector;
39
+ this._validateMessages = _validateMessages;
40
+ this.ngControl = ngControl;
41
+ this.formDirective = formDirective;
42
+ if (ngControl) {
43
+ this._control = ngControl.control;
44
+ }
45
+ else {
46
+ console.error('The element does not have a valid ngModel', this._elementRef.nativeElement);
47
+ }
48
+ }
49
+ ngOnInit() {
50
+ this._setupValidators();
51
+ }
52
+ ngOnDestroy() {
53
+ this._destroy$.next();
54
+ this._destroy$.complete();
55
+ }
56
+ ngAfterContentInit() {
57
+ this._subscribeToStatusChagnes();
58
+ }
59
+ getMessageSelector() {
60
+ if (this.messageSelector === false) {
61
+ return '';
62
+ }
63
+ if (this.messageSelector) {
64
+ return this.messageSelector;
65
+ }
66
+ else if (this.formDirective?.messageSelector) {
67
+ return this.formDirective.messageSelector;
68
+ }
69
+ }
70
+ getHintWrapperSelector() {
71
+ if (this.hintSelector === false) {
72
+ return '';
73
+ }
74
+ if (this.hintSelector) {
75
+ return this.hintSelector;
76
+ }
77
+ else if (this.formDirective?.hintSelector) {
78
+ return this.formDirective.hintSelector;
79
+ }
80
+ }
81
+ getWrapperSelector() {
82
+ if (this.wrapperSelector === false) {
83
+ return '';
84
+ }
85
+ if (this.wrapperSelector) {
86
+ return this.wrapperSelector;
87
+ }
88
+ else if (this.formDirective?.wrapperSelector) {
89
+ return this.formDirective.wrapperSelector;
90
+ }
91
+ }
92
+ getlabelSelector() {
93
+ if (this.labelSelector === false) {
94
+ return '';
95
+ }
96
+ if (this.labelSelector) {
97
+ return this.labelSelector;
98
+ }
99
+ else if (this.formDirective?.labelSelector) {
100
+ return this.formDirective.labelSelector;
101
+ }
102
+ }
103
+ getWrapperElement() {
104
+ const wrapper = this.getWrapper(this._elementRef.nativeElement);
105
+ if (wrapper) {
106
+ return wrapper;
107
+ }
108
+ return this._elementRef.nativeElement;
109
+ }
110
+ /*
111
+ <mat-form-field class="mat-form-field"> <-- Field Wrapper Class. Look for parents from the native element with the matching wrapperSelector. If not found defaults to native element.
112
+ <input>
113
+ <div class="fs-form-message"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector
114
+ <div class="fs-form-message"></div>
115
+ <div class="fs-form-hint"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector
116
+ </div>
117
+ </mat-form-field>
118
+ */
119
+ render() {
120
+ if (this.ngControl) {
121
+ const renderer = this.renderer2;
122
+ const wrapper = this.getWrapperElement();
123
+ const error = this.ngControl.dirty ? this.getError(this.ngControl) : null;
124
+ const shouldErrorBeRendered = this.ngControl.invalid
125
+ && (this.ngControl.dirty || this.formDirective?.ngForm?.submitted);
126
+ if (shouldErrorBeRendered && error) {
127
+ wrapper.classList.add('ng-invalid', 'ng-dirty');
128
+ }
129
+ else {
130
+ wrapper.classList.remove('ng-invalid');
131
+ }
132
+ if (!this.getMessageSelector()) {
133
+ return;
134
+ }
135
+ const messageWrapper = wrapper.querySelector(this.getMessageSelector());
136
+ if (!messageWrapper) {
137
+ return console.warn(`Failed to locate ${this.getMessageSelector()}`, this._elementRef.nativeElement);
138
+ }
139
+ if (this.getlabelSelector()) {
140
+ const labelWrapper = wrapper.querySelector(this.getlabelSelector());
141
+ if (labelWrapper) {
142
+ if (this.appendLabelClass) {
143
+ this.renderer2.addClass(labelWrapper, this.appendLabelClass);
144
+ }
145
+ }
146
+ }
147
+ if (this.appendMessageClass) {
148
+ renderer.addClass(messageWrapper, this.appendMessageClass);
149
+ }
150
+ if (this.getHintWrapperSelector()) {
151
+ const hint = messageWrapper.querySelector(this.getHintWrapperSelector());
152
+ if (hint) {
153
+ renderer.setStyle(hint, 'display', error ? 'none' : 'block');
154
+ if (this.appendHintClass) {
155
+ renderer.addClass(hint, this.appendHintClass);
156
+ }
157
+ }
158
+ }
159
+ let errorWrapper = wrapper.querySelector('.fs-form-error-target');
160
+ if (errorWrapper) {
161
+ errorWrapper.remove();
162
+ }
163
+ if (!shouldErrorBeRendered || !error) {
164
+ return;
165
+ }
166
+ errorWrapper = renderer.createElement('div');
167
+ renderer.addClass(errorWrapper, 'fs-form-error-target');
168
+ renderer.addClass(errorWrapper, this.appendErrorClass);
169
+ renderer.addClass(errorWrapper, `${this.appendErrorClass}-${error.name}`);
170
+ const errorText = renderer.createText(error.message);
171
+ renderer.appendChild(errorWrapper, errorText);
172
+ messageWrapper.appendChild(errorWrapper);
173
+ }
174
+ }
175
+ _subscribeToStatusChagnes() {
176
+ if (this._control) {
177
+ this._control.statusChanges
178
+ .pipe(takeUntil(this._destroy$))
179
+ .subscribe(this.render.bind(this));
180
+ }
181
+ }
182
+ getWrapper(node, count = 0) {
183
+ if (!node || count > 10) {
184
+ return null;
185
+ }
186
+ if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {
187
+ return node;
188
+ }
189
+ return this.getWrapper(node.parentNode, ++count);
190
+ }
191
+ parseErrorMessage(message, args) {
192
+ values(args)
193
+ .forEach((name) => {
194
+ message = message.replace(/\$\(\d\)/, name);
195
+ });
196
+ return message;
197
+ }
198
+ getError(controlRef) {
199
+ const name = keys(controlRef.control.errors)[0];
200
+ if (!name) {
201
+ return null;
202
+ }
203
+ let message = controlRef.control.errors[name];
204
+ if (this._validateMessages[name]) {
205
+ message = this.parseErrorMessage(this._validateMessages[name], message);
206
+ }
207
+ return { name: name, message: message };
208
+ }
209
+ _setupValidators() {
210
+ const control = this._control;
211
+ if (this.validate) {
212
+ const validators = control.validator
213
+ ? [control.validator, this.validate.bind(this)]
214
+ : this.validate.bind(this);
215
+ control.setValidators(validators);
216
+ }
217
+ if (this.validateAsync) {
218
+ const asyncValidators = control.asyncValidator
219
+ ? [control.asyncValidator, this.validateAsync.bind(this)]
220
+ : this.validateAsync.bind(this);
221
+ control.setAsyncValidators(asyncValidators);
222
+ }
223
+ control.updateValueAndValidity();
224
+ }
225
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsControlDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: VALIDATE_MESSAGES, self: true }, { token: i1.NgControl, optional: true }, { token: FsFormDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
226
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsControlDirective, selector: "[fsFormControl]", inputs: { wrapperSelector: "wrapperSelector", messageSelector: "messageSelector", hintSelector: "hintSelector", labelSelector: "labelSelector", appendMessageClass: "appendMessageClass", appendLabelClass: "appendLabelClass", appendErrorClass: "appendErrorClass", appendHintClass: "appendHintClass", validateMessages: "validateMessages" }, providers: [
227
+ VALIDATE_MESSAGE_PROVIDER,
228
+ ], ngImport: i0 });
229
+ }
230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsControlDirective, decorators: [{
231
+ type: Directive,
232
+ args: [{
233
+ selector: '[fsFormControl]',
234
+ providers: [
235
+ VALIDATE_MESSAGE_PROVIDER,
236
+ ],
237
+ }]
238
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined, decorators: [{
239
+ type: Self
240
+ }, {
241
+ type: Inject,
242
+ args: [VALIDATE_MESSAGES]
243
+ }] }, { type: i1.NgControl, decorators: [{
244
+ type: Optional
245
+ }] }, { type: i2.FsFormDirective, decorators: [{
246
+ type: Optional
247
+ }, {
248
+ type: Inject,
249
+ args: [FsFormDirective]
250
+ }] }]; }, propDecorators: { wrapperSelector: [{
251
+ type: Input
252
+ }], messageSelector: [{
253
+ type: Input
254
+ }], hintSelector: [{
255
+ type: Input
256
+ }], labelSelector: [{
257
+ type: Input
258
+ }], appendMessageClass: [{
259
+ type: Input
260
+ }], appendLabelClass: [{
261
+ type: Input
262
+ }], appendErrorClass: [{
263
+ type: Input
264
+ }], appendHintClass: [{
265
+ type: Input
266
+ }], validateMessages: [{
267
+ type: Input
268
+ }] } });
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxRQUFRLEVBQ1IsU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGlCQUFpQixHQUNsQixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQWV6RCxNQUFNLE9BQU8sa0JBQWtCO0lBMEJqQjtJQUNBO0lBQ0E7SUFDbUM7SUFDdkI7SUFDeUI7SUE3QmpDLGVBQWUsQ0FBaUI7SUFDaEMsZUFBZSxDQUFpQjtJQUNoQyxZQUFZLENBQWlCO0lBQzdCLGFBQWEsQ0FBaUI7SUFDOUIsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7SUFDdkMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0lBQ25DLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztJQUNuQyxlQUFlLEdBQUcsY0FBYyxDQUFDO0lBRWpELElBQ1csZ0JBQWdCLENBQUMsUUFBZ0M7UUFDMUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QixHQUFHLFFBQVE7U0FD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dCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgU2VsZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5nQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBrZXlzLCB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQge1xuICBWQUxJREFURV9NRVNTQUdFX1BST1ZJREVSLFxuICBWQUxJREFURV9NRVNTQUdFUyxcbn0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3ZhbGlkYXRlLW1lc3NhZ2VzLnByb3ZpZGVyJztcbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0vZm9ybS5kaXJlY3RpdmUnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgRnNDb250cm9sRGlyZWN0aXZlIHtcbiAgdmFsaWRhdGU/KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xuICB2YWxpZGF0ZUFzeW5jPyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBQcm9taXNlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiB8IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+O1xufVxuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1Db250cm9sXScsXG4gIHByb3ZpZGVyczogW1xuICAgIFZBTElEQVRFX01FU1NBR0VfUFJPVklERVIsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBwdWJsaWMgd3JhcHBlclNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIG1lc3NhZ2VTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBoaW50U2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWxTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBhcHBlbmRNZXNzYWdlQ2xhc3MgPSAnZnMtZm9ybS1tZXNzYWdlJztcbiAgQElucHV0KCkgcHVibGljIGFwcGVuZExhYmVsQ2xhc3MgPSAnZnMtZm9ybS1sYWJlbCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBhcHBlbmRFcnJvckNsYXNzID0gJ2ZzLWZvcm0tZXJyb3InO1xuICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kSGludENsYXNzID0gJ2ZzLWZvcm0taGludCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWxpZGF0ZU1lc3NhZ2VzKG1lc3NhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgdGhpcy5fdmFsaWRhdGVNZXNzYWdlcyA9IHtcbiAgICAgIC4uLnRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMsXG4gICAgICAuLi5tZXNzYWdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVycm9ycyA9IFtdO1xuXG4gIHByb3RlY3RlZCBfY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQFNlbGYoKSBASW5qZWN0KFZBTElEQVRFX01FU1NBR0VTKSBwcm90ZWN0ZWQgX3ZhbGlkYXRlTWVzc2FnZXMsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRnNGb3JtRGlyZWN0aXZlKSBwcm90ZWN0ZWQgZm9ybURpcmVjdGl2ZTogRnNGb3JtRGlyZWN0aXZlLFxuICApIHtcblxuICAgIGlmIChuZ0NvbnRyb2wpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignVGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIG5nTW9kZWwnLCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9zZXR1cFZhbGlkYXRvcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5fc3Vic2NyaWJlVG9TdGF0dXNDaGFnbmVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWVzc2FnZVNlbGVjdG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubWVzc2FnZVNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1lc3NhZ2VTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1EaXJlY3RpdmU/Lm1lc3NhZ2VTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5tZXNzYWdlU2VsZWN0b3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oaW50U2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGludFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaW50U2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURpcmVjdGl2ZT8uaGludFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmhpbnRTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0V3JhcHBlclNlbGVjdG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud3JhcHBlclNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndyYXBwZXJTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMud3JhcHBlclNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1EaXJlY3RpdmU/LndyYXBwZXJTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS53cmFwcGVyU2VsZWN0b3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldGxhYmVsU2VsZWN0b3IoKTogc3RyaW5nIHtcblxuICAgIGlmICh0aGlzLmxhYmVsU2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGFiZWxTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMubGFiZWxTZWxlY3RvcjtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtRGlyZWN0aXZlPy5sYWJlbFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmxhYmVsU2VsZWN0b3I7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFdyYXBwZXJFbGVtZW50KCkge1xuXG4gICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZ2V0V3JhcHBlcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgaWYgKHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvKlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkXCI+ICA8LS0gRmllbGQgV3JhcHBlciBDbGFzcy4gTG9vayBmb3IgcGFyZW50cyBmcm9tIHRoZSBuYXRpdmUgZWxlbWVudCB3aXRoIHRoZSBtYXRjaGluZyB3cmFwcGVyU2VsZWN0b3IuIElmIG5vdCBmb3VuZCBkZWZhdWx0cyB0byBuYXRpdmUgZWxlbWVudC5cbiAgICAgIDxpbnB1dD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLW1lc3NhZ2VcIj4gPC0tIE1lc3NhZ2UgU2VsZWN0b3IuIExvb2sgZm9yIHRoZSBlbGVtZW50IHdpdGggY2xhc3MgLmZzLWZvcm0tbWVzc2FnZSBvciBtZXNzYWdlU2VsZWN0b3JcbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtZm9ybS1oaW50XCI+PC9kaXY+IDwtLSBIaW50IFNlbGVjdG9yLiBMb29rIGZvciB0aGUgZWxlbWVudCB3aXRoIGNsYXNzIC5mcy1mb3JtLWhpbnQgb3IgaGludFNlbGVjdG9yXG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyMjtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmdldFdyYXBwZXJFbGVtZW50KCk7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMubmdDb250cm9sLmRpcnR5ID8gdGhpcy5nZXRFcnJvcih0aGlzLm5nQ29udHJvbCkgOiBudWxsO1xuICAgICAgY29uc3Qgc2hvdWxkRXJyb3JCZVJlbmRlcmVkID0gdGhpcy5uZ0NvbnRyb2wuaW52YWxpZFxuICAgICAgICAmJiAodGhpcy5uZ0NvbnRyb2wuZGlydHkgfHwgdGhpcy5mb3JtRGlyZWN0aXZlPy5uZ0Zvcm0/LnN1Ym1pdHRlZCk7XG5cbiAgICAgIGlmIChzaG91bGRFcnJvckJlUmVuZGVyZWQgJiYgZXJyb3IpIHtcbiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCduZy1pbnZhbGlkJywgJ25nLWRpcnR5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ25nLWludmFsaWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmdldE1lc3NhZ2VTZWxlY3RvcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZVdyYXBwZXIgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRNZXNzYWdlU2VsZWN0b3IoKSk7XG5cbiAgICAgIGlmICghbWVzc2FnZVdyYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGxvY2F0ZSAkeyAgdGhpcy5nZXRNZXNzYWdlU2VsZWN0b3IoKX1gLCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nZXRsYWJlbFNlbGVjdG9yKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWxXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0bGFiZWxTZWxlY3RvcigpKTtcblxuICAgICAgICBpZiAobGFiZWxXcmFwcGVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYXBwZW5kTGFiZWxDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3MobGFiZWxXcmFwcGVyLCB0aGlzLmFwcGVuZExhYmVsQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5hcHBlbmRNZXNzYWdlQ2xhc3MpIHtcbiAgICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MobWVzc2FnZVdyYXBwZXIsIHRoaXMuYXBwZW5kTWVzc2FnZUNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZ2V0SGludFdyYXBwZXJTZWxlY3RvcigpKSB7XG4gICAgICAgIGNvbnN0IGhpbnQgPSBtZXNzYWdlV3JhcHBlci5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0SGludFdyYXBwZXJTZWxlY3RvcigpKTtcblxuICAgICAgICBpZiAoaGludCkge1xuICAgICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGhpbnQsICdkaXNwbGF5JywgZXJyb3IgPyAnbm9uZScgOiAnYmxvY2snKTtcblxuICAgICAgICAgIGlmICh0aGlzLmFwcGVuZEhpbnRDbGFzcykge1xuICAgICAgICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoaGludCwgdGhpcy5hcHBlbmRIaW50Q2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgZXJyb3JXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuZnMtZm9ybS1lcnJvci10YXJnZXQnKTtcbiAgICAgIGlmIChlcnJvcldyYXBwZXIpIHtcbiAgICAgICAgZXJyb3JXcmFwcGVyLnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNob3VsZEVycm9yQmVSZW5kZXJlZCB8fCAhZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlcnJvcldyYXBwZXIgPSByZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgJ2ZzLWZvcm0tZXJyb3ItdGFyZ2V0Jyk7XG4gICAgICByZW5kZXJlci5hZGRDbGFzcyhlcnJvcldyYXBwZXIsIHRoaXMuYXBwZW5kRXJyb3JDbGFzcyk7XG4gICAgICByZW5kZXJlci5hZGRDbGFzcyhlcnJvcldyYXBwZXIsIGAke3RoaXMuYXBwZW5kRXJyb3JDbGFzcyAgfS0keyAgZXJyb3IubmFtZX1gKTtcblxuICAgICAgY29uc3QgZXJyb3JUZXh0ID0gcmVuZGVyZXIuY3JlYXRlVGV4dChlcnJvci5tZXNzYWdlKTtcblxuICAgICAgcmVuZGVyZXIuYXBwZW5kQ2hpbGQoZXJyb3JXcmFwcGVyLCBlcnJvclRleHQpO1xuICAgICAgbWVzc2FnZVdyYXBwZXIuYXBwZW5kQ2hpbGQoZXJyb3JXcmFwcGVyKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3N1YnNjcmliZVRvU3RhdHVzQ2hhZ25lcygpOnZvaWQge1xuICAgIGlmICh0aGlzLl9jb250cm9sKSB7XG4gICAgICB0aGlzLl9jb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMucmVuZGVyLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGdldFdyYXBwZXIobm9kZSwgY291bnQgPSAwKSB7XG4gICAgaWYgKCFub2RlIHx8IGNvdW50ID4gMTApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRXcmFwcGVyU2VsZWN0b3IoKSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFdyYXBwZXIobm9kZS5wYXJlbnROb2RlLCArK2NvdW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUVycm9yTWVzc2FnZShtZXNzYWdlLCBhcmdzKTogc3RyaW5nIHtcbiAgICB2YWx1ZXMoYXJncylcbiAgICAgIC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL1xcJFxcKFxcZFxcKS8sIG5hbWUpO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRFcnJvcihjb250cm9sUmVmKTogeyBuYW1lOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHtcblxuICAgIGNvbnN0IG5hbWUgPSBrZXlzKGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnMpWzBdO1xuXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWVzc2FnZSA9IGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnNbbmFtZV07XG5cbiAgICBpZiAodGhpcy5fdmFsaWRhdGVNZXNzYWdlc1tuYW1lXSkge1xuICAgICAgbWVzc2FnZSA9IHRoaXMucGFyc2VFcnJvck1lc3NhZ2UodGhpcy5fdmFsaWRhdGVNZXNzYWdlc1tuYW1lXSwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbmFtZTogbmFtZSwgbWVzc2FnZTogbWVzc2FnZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBWYWxpZGF0b3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLl9jb250cm9sO1xuXG4gICAgaWYgKHRoaXMudmFsaWRhdGUpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBjb250cm9sLnZhbGlkYXRvclxuICAgICAgICA/IFtjb250cm9sLnZhbGlkYXRvciwgdGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpXVxuICAgICAgICA6IHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKTtcblxuICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbGlkYXRlQXN5bmMpIHtcbiAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9ycyA9IGNvbnRyb2wuYXN5bmNWYWxpZGF0b3JcbiAgICAgICAgPyBbY29udHJvbC5hc3luY1ZhbGlkYXRvciwgdGhpcy52YWxpZGF0ZUFzeW5jLmJpbmQodGhpcyldXG4gICAgICAgIDogdGhpcy52YWxpZGF0ZUFzeW5jLmJpbmQodGhpcyk7XG5cbiAgICAgIGNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxufVxuIl19
@@ -0,0 +1,42 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { FsControlDirective } from './control.directive';
3
+ import { FsValidators } from '../../validators/validators';
4
+ import { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';
5
+ import { isEnabled } from '../../helpers/is-enabled';
6
+ import * as i0 from "@angular/core";
7
+ export class FsFormDateRangeDirective extends FsControlDirective {
8
+ fsFormDateRange;
9
+ set validationMessage(value) {
10
+ this._validateMessages.dateRange = value;
11
+ }
12
+ ngOnChanges() {
13
+ this._control.updateValueAndValidity();
14
+ }
15
+ validate(control) {
16
+ if (isEnabled(this.fsFormDateRange)) {
17
+ return FsValidators.dateRange(this._control);
18
+ }
19
+ else {
20
+ return null;
21
+ }
22
+ }
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormDateRangeDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
24
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsFormDateRangeDirective, selector: "[fsFormDateRange]", inputs: { fsFormDateRange: "fsFormDateRange", validationMessage: ["fsFormDateRangeMessage", "validationMessage"] }, providers: [
25
+ VALIDATE_MESSAGE_PROVIDER
26
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormDateRangeDirective, decorators: [{
29
+ type: Directive,
30
+ args: [{
31
+ selector: '[fsFormDateRange]',
32
+ providers: [
33
+ VALIDATE_MESSAGE_PROVIDER
34
+ ],
35
+ }]
36
+ }], propDecorators: { fsFormDateRange: [{
37
+ type: Input
38
+ }], validationMessage: [{
39
+ type: Input,
40
+ args: ['fsFormDateRangeMessage']
41
+ }] } });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy92YWxpZGF0b3JzL2RhdGVyYW5nZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFTckQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGtCQUFrQjtJQUd2RCxlQUFlLENBQUM7SUFFdkIsSUFDVyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQXdCO1FBQ3RDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNuQyxPQUFPLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQzt3R0FwQlUsd0JBQXdCOzRGQUF4Qix3QkFBd0IsZ0tBSnhCO1lBQ1QseUJBQXlCO1NBQzFCOzs0RkFFVSx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsU0FBUyxFQUFFO3dCQUNULHlCQUF5QjtxQkFDMUI7aUJBQ0Y7OEJBSVEsZUFBZTtzQkFEckIsS0FBSztnQkFJSyxpQkFBaUI7c0JBRDNCLEtBQUs7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEZzQ29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vY29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9ycy92YWxpZGF0b3JzJztcbmltcG9ydCB7IFZBTElEQVRFX01FU1NBR0VfUFJPVklERVIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvdmFsaWRhdGUtbWVzc2FnZXMucHJvdmlkZXInO1xuaW1wb3J0IHsgRnNWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBpc0VuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2lzLWVuYWJsZWQnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1EYXRlUmFuZ2VdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUlxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zvcm1EYXRlUmFuZ2VEaXJlY3RpdmUgZXh0ZW5kcyBGc0NvbnRyb2xEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEZzVmFsaWRhdG9yIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZnNGb3JtRGF0ZVJhbmdlO1xuXG4gIEBJbnB1dCgnZnNGb3JtRGF0ZVJhbmdlTWVzc2FnZScpXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMuZGF0ZVJhbmdlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChpc0VuYWJsZWQodGhpcy5mc0Zvcm1EYXRlUmFuZ2UpKSB7XG4gICAgICByZXR1cm4gRnNWYWxpZGF0b3JzLmRhdGVSYW5nZSh0aGlzLl9jb250cm9sKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,42 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { FsControlDirective } from './control.directive';
3
+ import { FsValidators } from '../../validators/validators';
4
+ import { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';
5
+ import { isEnabled } from '../../helpers/is-enabled';
6
+ import * as i0 from "@angular/core";
7
+ export class FsFormEmailDirective extends FsControlDirective {
8
+ fsFormEmail;
9
+ set validationMessage(value) {
10
+ this._validateMessages.email = value;
11
+ }
12
+ ngOnChanges() {
13
+ this._control.updateValueAndValidity();
14
+ }
15
+ validate(control) {
16
+ if (isEnabled(this.fsFormEmail)) {
17
+ return FsValidators.email(this._control);
18
+ }
19
+ else {
20
+ return null;
21
+ }
22
+ }
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormEmailDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
24
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsFormEmailDirective, selector: "[fsFormEmail]", inputs: { fsFormEmail: "fsFormEmail", validationMessage: ["fsFormEmailMessage", "validationMessage"] }, providers: [
25
+ VALIDATE_MESSAGE_PROVIDER
26
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormEmailDirective, decorators: [{
29
+ type: Directive,
30
+ args: [{
31
+ selector: '[fsFormEmail]',
32
+ providers: [
33
+ VALIDATE_MESSAGE_PROVIDER
34
+ ],
35
+ }]
36
+ }], propDecorators: { fsFormEmail: [{
37
+ type: Input
38
+ }], validationMessage: [{
39
+ type: Input,
40
+ args: ['fsFormEmailMessage']
41
+ }] } });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL3ZhbGlkYXRvcnMvZW1haWwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUV2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBU3JELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxrQkFBa0I7SUFHbkQsV0FBVyxDQUFDO0lBRW5CLElBQ1csaUJBQWlCLENBQUMsS0FBYTtRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxPQUF3QjtRQUN0QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0IsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7d0dBcEJVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLGdKQUpwQjtZQUNULHlCQUF5QjtTQUMxQjs7NEZBRVUsb0JBQW9CO2tCQU5oQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixTQUFTLEVBQUU7d0JBQ1QseUJBQXlCO3FCQUMxQjtpQkFDRjs4QkFJUSxXQUFXO3NCQURqQixLQUFLO2dCQUlLLGlCQUFpQjtzQkFEM0IsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRnNDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi9jb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc1ZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy92YWxpZGF0ZS1tZXNzYWdlcy5wcm92aWRlcic7XG5pbXBvcnQgeyBGc1ZhbGlkYXRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdmFsaWRhdG9yJztcbmltcG9ydCB7IGlzRW5hYmxlZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaXMtZW5hYmxlZCc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzRm9ybUVtYWlsXScsXG4gIHByb3ZpZGVyczogW1xuICAgIFZBTElEQVRFX01FU1NBR0VfUFJPVklERVJcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNGb3JtRW1haWxEaXJlY3RpdmUgZXh0ZW5kcyBGc0NvbnRyb2xEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEZzVmFsaWRhdG9yIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZnNGb3JtRW1haWw7XG5cbiAgQElucHV0KCdmc0Zvcm1FbWFpbE1lc3NhZ2UnKVxuICBwdWJsaWMgc2V0IHZhbGlkYXRpb25NZXNzYWdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWxpZGF0ZU1lc3NhZ2VzLmVtYWlsID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChpc0VuYWJsZWQodGhpcy5mc0Zvcm1FbWFpbCkpIHtcbiAgICAgIHJldHVybiBGc1ZhbGlkYXRvcnMuZW1haWwodGhpcy5fY29udHJvbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,42 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { FsControlDirective } from './control.directive';
3
+ import { FsValidators } from '../../validators/validators';
4
+ import { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';
5
+ import { isEnabled } from '../../helpers/is-enabled';
6
+ import * as i0 from "@angular/core";
7
+ export class FsFormEmailsDirective extends FsControlDirective {
8
+ fsFormEmails;
9
+ set validationMessage(value) {
10
+ this._validateMessages.emails = value;
11
+ }
12
+ ngOnChanges() {
13
+ this._control.updateValueAndValidity();
14
+ }
15
+ validate(control) {
16
+ if (isEnabled(this.fsFormEmails)) {
17
+ return FsValidators.emails(this._control);
18
+ }
19
+ else {
20
+ return null;
21
+ }
22
+ }
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormEmailsDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
24
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsFormEmailsDirective, selector: "[fsFormEmails]", inputs: { fsFormEmails: "fsFormEmails", validationMessage: ["fsFormEmailsMessage", "validationMessage"] }, providers: [
25
+ VALIDATE_MESSAGE_PROVIDER
26
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsFormEmailsDirective, decorators: [{
29
+ type: Directive,
30
+ args: [{
31
+ selector: '[fsFormEmails]',
32
+ providers: [
33
+ VALIDATE_MESSAGE_PROVIDER
34
+ ],
35
+ }]
36
+ }], propDecorators: { fsFormEmails: [{
37
+ type: Input
38
+ }], validationMessage: [{
39
+ type: Input,
40
+ args: ['fsFormEmailsMessage']
41
+ }] } });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWxzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy92YWxpZGF0b3JzL2VtYWlscy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFTckQsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGtCQUFrQjtJQUdwRCxZQUFZLENBQUM7SUFFcEIsSUFDVyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQXdCO1FBQ3RDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNoQyxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQzt3R0FwQlUscUJBQXFCOzRGQUFyQixxQkFBcUIsb0pBSnJCO1lBQ1QseUJBQXlCO1NBQzFCOzs0RkFFVSxxQkFBcUI7a0JBTmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsU0FBUyxFQUFFO3dCQUNULHlCQUF5QjtxQkFDMUI7aUJBQ0Y7OEJBSVEsWUFBWTtzQkFEbEIsS0FBSztnQkFJSyxpQkFBaUI7c0JBRDNCLEtBQUs7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEZzQ29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vY29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9ycy92YWxpZGF0b3JzJztcbmltcG9ydCB7IFZBTElEQVRFX01FU1NBR0VfUFJPVklERVIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvdmFsaWRhdGUtbWVzc2FnZXMucHJvdmlkZXInO1xuaW1wb3J0IHsgRnNWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBpc0VuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2lzLWVuYWJsZWQnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1FbWFpbHNdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUlxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zvcm1FbWFpbHNEaXJlY3RpdmUgZXh0ZW5kcyBGc0NvbnRyb2xEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEZzVmFsaWRhdG9yIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZnNGb3JtRW1haWxzO1xuXG4gIEBJbnB1dCgnZnNGb3JtRW1haWxzTWVzc2FnZScpXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMuZW1haWxzID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChpc0VuYWJsZWQodGhpcy5mc0Zvcm1FbWFpbHMpKSB7XG4gICAgICByZXR1cm4gRnNWYWxpZGF0b3JzLmVtYWlscyh0aGlzLl9jb250cm9sKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==