@firestitch/form 12.4.14 → 12.4.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +23 -23
  2. package/app/consts/error-messages.const.d.ts +19 -19
  3. package/app/directives/button.directive.d.ts +35 -35
  4. package/app/directives/form/form.directive.d.ts +122 -122
  5. package/app/directives/form-dialog-close.directive.d.ts +12 -12
  6. package/app/directives/index.d.ts +2 -2
  7. package/app/directives/submit-button.directive.d.ts +6 -6
  8. package/app/directives/validators/compare.directive.d.ts +15 -15
  9. package/app/directives/validators/control.directive.d.ts +48 -48
  10. package/app/directives/validators/daterange.directive.d.ts +13 -13
  11. package/app/directives/validators/email.directive.d.ts +13 -13
  12. package/app/directives/validators/emails.directive.d.ts +13 -13
  13. package/app/directives/validators/function.directive.d.ts +15 -15
  14. package/app/directives/validators/greater.directive.d.ts +13 -13
  15. package/app/directives/validators/integer.directive.d.ts +13 -13
  16. package/app/directives/validators/lesser.directive.d.ts +13 -13
  17. package/app/directives/validators/max.directive.d.ts +13 -13
  18. package/app/directives/validators/maxlength.directive.d.ts +13 -13
  19. package/app/directives/validators/min.directive.d.ts +13 -13
  20. package/app/directives/validators/minlength.directive.d.ts +13 -13
  21. package/app/directives/validators/no-fs-validators.directive.d.ts +13 -13
  22. package/app/directives/validators/numeric.directive.d.ts +13 -13
  23. package/app/directives/validators/pattern.directive.d.ts +13 -13
  24. package/app/directives/validators/phone.directive.d.ts +13 -13
  25. package/app/directives/validators/required.directive.d.ts +16 -16
  26. package/app/directives/validators/url.directive.d.ts +14 -14
  27. package/app/directives/validators/validate.directive.d.ts +15 -15
  28. package/app/enums/confirm-result.d.ts +7 -7
  29. package/app/enums/form-status.d.ts +10 -10
  30. package/app/fs-form.module.d.ts +37 -37
  31. package/app/guards/form-deactivate.guard.d.ts +14 -14
  32. package/app/helpers/confirm-result-continue.d.ts +1 -1
  33. package/app/helpers/confirm-unsaved.d.ts +5 -5
  34. package/app/helpers/get-active-route.d.ts +2 -2
  35. package/app/helpers/get-form-errors.d.ts +2 -2
  36. package/app/helpers/index.d.ts +2 -2
  37. package/app/helpers/is-enabled.d.ts +1 -1
  38. package/app/interfaces/async-validator.d.ts +14 -14
  39. package/app/interfaces/confirm-config.d.ts +7 -7
  40. package/app/interfaces/confirm-tab-group.d.ts +10 -10
  41. package/app/interfaces/index.d.ts +4 -4
  42. package/app/interfaces/submit-event.d.ts +6 -6
  43. package/app/interfaces/submitted-event.d.ts +7 -7
  44. package/app/interfaces/validator.d.ts +13 -13
  45. package/app/providers/validate-messages.provider.d.ts +25 -25
  46. package/app/services/fsform.service.d.ts +16 -16
  47. package/app/validators/validators.d.ts +12 -12
  48. package/bundles/firestitch-form.umd.js +2832 -2832
  49. package/esm2015/app/components/form-dialog-actions/form-dialog-actions.component.js +91 -91
  50. package/esm2015/app/consts/error-messages.const.js +19 -19
  51. package/esm2015/app/directives/button.directive.js +152 -152
  52. package/esm2015/app/directives/form/form.directive.js +695 -695
  53. package/esm2015/app/directives/form-dialog-close.directive.js +30 -30
  54. package/esm2015/app/directives/index.js +2 -2
  55. package/esm2015/app/directives/submit-button.directive.js +13 -13
  56. package/esm2015/app/directives/validators/compare.directive.js +48 -48
  57. package/esm2015/app/directives/validators/control.directive.js +257 -257
  58. package/esm2015/app/directives/validators/daterange.directive.js +40 -40
  59. package/esm2015/app/directives/validators/email.directive.js +40 -40
  60. package/esm2015/app/directives/validators/emails.directive.js +40 -40
  61. package/esm2015/app/directives/validators/function.directive.js +40 -40
  62. package/esm2015/app/directives/validators/greater.directive.js +39 -39
  63. package/esm2015/app/directives/validators/integer.directive.js +40 -40
  64. package/esm2015/app/directives/validators/lesser.directive.js +39 -39
  65. package/esm2015/app/directives/validators/max.directive.js +35 -35
  66. package/esm2015/app/directives/validators/maxlength.directive.js +34 -34
  67. package/esm2015/app/directives/validators/min.directive.js +35 -35
  68. package/esm2015/app/directives/validators/minlength.directive.js +34 -34
  69. package/esm2015/app/directives/validators/no-fs-validators.directive.js +46 -46
  70. package/esm2015/app/directives/validators/numeric.directive.js +40 -40
  71. package/esm2015/app/directives/validators/pattern.directive.js +34 -34
  72. package/esm2015/app/directives/validators/phone.directive.js +40 -40
  73. package/esm2015/app/directives/validators/required.directive.js +70 -70
  74. package/esm2015/app/directives/validators/url.directive.js +46 -46
  75. package/esm2015/app/directives/validators/validate.directive.js +42 -42
  76. package/esm2015/app/enums/confirm-result.js +8 -8
  77. package/esm2015/app/enums/form-status.js +11 -11
  78. package/esm2015/app/fs-form.module.js +180 -180
  79. package/esm2015/app/guards/form-deactivate.guard.js +44 -44
  80. package/esm2015/app/helpers/confirm-result-continue.js +4 -4
  81. package/esm2015/app/helpers/confirm-unsaved.js +71 -71
  82. package/esm2015/app/helpers/get-active-route.js +6 -6
  83. package/esm2015/app/helpers/get-form-errors.js +24 -24
  84. package/esm2015/app/helpers/index.js +2 -2
  85. package/esm2015/app/helpers/is-enabled.js +3 -3
  86. package/esm2015/app/interfaces/async-validator.js +1 -1
  87. package/esm2015/app/interfaces/confirm-config.js +1 -1
  88. package/esm2015/app/interfaces/confirm-tab-group.js +1 -1
  89. package/esm2015/app/interfaces/index.js +4 -4
  90. package/esm2015/app/interfaces/submit-event.js +1 -1
  91. package/esm2015/app/interfaces/submitted-event.js +1 -1
  92. package/esm2015/app/interfaces/validator.js +1 -1
  93. package/esm2015/app/providers/validate-messages.provider.js +10 -10
  94. package/esm2015/app/services/fsform.service.js +39 -39
  95. package/esm2015/app/validators/validators.js +96 -96
  96. package/esm2015/firestitch-form.js +4 -4
  97. package/esm2015/public_api.js +36 -36
  98. package/fesm2015/firestitch-form.js +2269 -2269
  99. package/firestitch-form.d.ts +5 -5
  100. package/package.json +1 -1
  101. package/public_api.d.ts +34 -34
  102. package/styles.scss +3 -3
@@ -1,258 +1,258 @@
1
- import { Input, ElementRef, Renderer2, Directive, Injector, Optional, Inject, Self, } from '@angular/core';
2
- import { NgControl } from '@angular/forms';
3
- import { Subject } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
5
- import { values, keys } from 'lodash-es';
6
- import { FsFormDirective } from '../form/form.directive';
7
- import { VALIDATE_MESSAGE_PROVIDER, VALIDATE_MESSAGES } from '../../providers/validate-messages.provider';
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
- constructor(elementRef, renderer2, injector, _validateMessages, ngControl, formDirective) {
13
- this.elementRef = elementRef;
14
- this.renderer2 = renderer2;
15
- this.injector = injector;
16
- this._validateMessages = _validateMessages;
17
- this.ngControl = ngControl;
18
- this.formDirective = formDirective;
19
- this.appendMessageClass = 'fs-form-message';
20
- this.appendLabelClass = 'fs-form-label';
21
- this.appendErrorClass = 'fs-form-error';
22
- this.appendHintClass = 'fs-form-hint';
23
- this.errors = [];
24
- // protected _validateMessages = { ...ERROR_MESSAGES };
25
- this._destroy$ = new Subject();
26
- if (ngControl) {
27
- this._control = ngControl.control;
28
- }
29
- else {
30
- console.error('The element does not have a valid ngModel', this.elementRef.nativeElement);
31
- }
32
- }
33
- set validateMessages(messages) {
34
- this._validateMessages = Object.assign(Object.assign({}, this._validateMessages), messages);
35
- }
36
- ngOnInit() {
37
- this._setupValidators();
38
- }
39
- ngOnDestroy() {
40
- this._destroy$.next();
41
- this._destroy$.complete();
42
- }
43
- ngAfterContentInit() {
44
- if (this._control) {
45
- this._control.statusChanges
46
- .pipe(takeUntil(this._destroy$))
47
- .subscribe(this.render.bind(this));
48
- }
49
- }
50
- getMessageSelector() {
51
- var _a;
52
- if (this.messageSelector === false) {
53
- return '';
54
- }
55
- if (this.messageSelector) {
56
- return this.messageSelector;
57
- }
58
- else if ((_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.messageSelector) {
59
- return this.formDirective.messageSelector;
60
- }
61
- }
62
- getHintWrapperSelector() {
63
- var _a;
64
- if (this.hintSelector === false) {
65
- return '';
66
- }
67
- if (this.hintSelector) {
68
- return this.hintSelector;
69
- }
70
- else if ((_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.hintSelector) {
71
- return this.formDirective.hintSelector;
72
- }
73
- }
74
- getWrapperSelector() {
75
- var _a;
76
- if (this.wrapperSelector === false) {
77
- return '';
78
- }
79
- if (this.wrapperSelector) {
80
- return this.wrapperSelector;
81
- }
82
- else if ((_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.wrapperSelector) {
83
- return this.formDirective.wrapperSelector;
84
- }
85
- }
86
- getlabelSelector() {
87
- var _a;
88
- if (this.labelSelector === false) {
89
- return '';
90
- }
91
- if (this.labelSelector) {
92
- return this.labelSelector;
93
- }
94
- else if ((_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.labelSelector) {
95
- return this.formDirective.labelSelector;
96
- }
97
- }
98
- getWrapperElement() {
99
- const wrapper = this.getWrapper(this.elementRef.nativeElement);
100
- if (wrapper) {
101
- return wrapper;
102
- }
103
- return this.elementRef.nativeElement;
104
- }
105
- /*
106
- <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.
107
- <input>
108
- <div class="fs-form-message"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector
109
- <div class="fs-form-message"></div>
110
- <div class="fs-form-hint"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector
111
- </div>
112
- </mat-form-field>
113
- */
114
- render() {
115
- var _a, _b;
116
- if (this.ngControl) {
117
- const renderer = this.renderer2;
118
- const wrapper = this.getWrapperElement();
119
- const error = this.ngControl.dirty ? this.getError(this.ngControl) : null;
120
- const shouldErrorBeRendered = this.ngControl.invalid
121
- && (this.ngControl.dirty || ((_b = (_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.ngForm) === null || _b === void 0 ? void 0 : _b.submitted));
122
- if (shouldErrorBeRendered && error) {
123
- wrapper.classList.add('ng-invalid', 'ng-dirty');
124
- }
125
- else {
126
- wrapper.classList.remove('ng-invalid');
127
- }
128
- if (!this.getMessageSelector()) {
129
- return;
130
- }
131
- const messageWrapper = wrapper.querySelector(this.getMessageSelector());
132
- if (!messageWrapper) {
133
- return console.warn('Failed to locate ' + this.getMessageSelector(), this.elementRef.nativeElement);
134
- }
135
- if (this.getlabelSelector()) {
136
- const labelWrapper = wrapper.querySelector(this.getlabelSelector());
137
- if (labelWrapper) {
138
- if (this.appendLabelClass) {
139
- this.renderer2.addClass(labelWrapper, this.appendLabelClass);
140
- }
141
- }
142
- }
143
- if (this.appendMessageClass) {
144
- renderer.addClass(messageWrapper, this.appendMessageClass);
145
- }
146
- if (this.getHintWrapperSelector()) {
147
- const hint = messageWrapper.querySelector(this.getHintWrapperSelector());
148
- if (hint) {
149
- renderer.setStyle(hint, 'display', error ? 'none' : 'block');
150
- if (this.appendHintClass) {
151
- renderer.addClass(hint, this.appendHintClass);
152
- }
153
- }
154
- }
155
- let errorWrapper = wrapper.querySelector('.fs-form-error-target');
156
- if (errorWrapper) {
157
- errorWrapper.remove();
158
- }
159
- if (!shouldErrorBeRendered || !error) {
160
- return;
161
- }
162
- errorWrapper = renderer.createElement('div');
163
- renderer.addClass(errorWrapper, 'fs-form-error-target');
164
- renderer.addClass(errorWrapper, this.appendErrorClass);
165
- renderer.addClass(errorWrapper, this.appendErrorClass + '-' + error.name);
166
- const errorText = renderer.createText(error.message);
167
- renderer.appendChild(errorWrapper, errorText);
168
- messageWrapper.appendChild(errorWrapper);
169
- }
170
- }
171
- getWrapper(node, count = 0) {
172
- if (!node || count > 10) {
173
- return null;
174
- }
175
- if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {
176
- return node;
177
- }
178
- return this.getWrapper(node.parentNode, ++count);
179
- }
180
- parseErrorMessage(message, args) {
181
- values(args)
182
- .forEach((name) => {
183
- message = message.replace(/\$\(\d\)/, name);
184
- });
185
- return message;
186
- }
187
- getError(controlRef) {
188
- const name = keys(controlRef.control.errors)[0];
189
- if (!name) {
190
- return null;
191
- }
192
- let message = controlRef.control.errors[name];
193
- if (this._validateMessages[name]) {
194
- message = this.parseErrorMessage(this._validateMessages[name], message);
195
- }
196
- return { name: name, message: message };
197
- }
198
- _setupValidators() {
199
- const control = this._control;
200
- if (this.validate) {
201
- const validators = control.validator
202
- ? [control.validator, this.validate.bind(this)]
203
- : this.validate.bind(this);
204
- control.setValidators(validators);
205
- }
206
- if (this.validateAsync) {
207
- const asyncValidators = control.asyncValidator
208
- ? [control.asyncValidator, this.validateAsync.bind(this)]
209
- : this.validateAsync.bind(this);
210
- control.setAsyncValidators(asyncValidators);
211
- }
212
- control.updateValueAndValidity();
213
- }
214
- }
215
- FsControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", 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 });
216
- FsControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: FsControlDirective, selector: "[fsFormControl]", inputs: { wrapperSelector: "wrapperSelector", messageSelector: "messageSelector", hintSelector: "hintSelector", labelSelector: "labelSelector", appendMessageClass: "appendMessageClass", appendLabelClass: "appendLabelClass", appendErrorClass: "appendErrorClass", appendHintClass: "appendHintClass", validateMessages: "validateMessages" }, providers: [
217
- VALIDATE_MESSAGE_PROVIDER
218
- ], ngImport: i0 });
219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsControlDirective, decorators: [{
220
- type: Directive,
221
- args: [{
222
- selector: '[fsFormControl]',
223
- providers: [
224
- VALIDATE_MESSAGE_PROVIDER
225
- ],
226
- }]
227
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined, decorators: [{
228
- type: Self
229
- }, {
230
- type: Inject,
231
- args: [VALIDATE_MESSAGES]
232
- }] }, { type: i1.NgControl, decorators: [{
233
- type: Optional
234
- }] }, { type: i2.FsFormDirective, decorators: [{
235
- type: Optional
236
- }, {
237
- type: Inject,
238
- args: [FsFormDirective]
239
- }] }]; }, propDecorators: { wrapperSelector: [{
240
- type: Input
241
- }], messageSelector: [{
242
- type: Input
243
- }], hintSelector: [{
244
- type: Input
245
- }], labelSelector: [{
246
- type: Input
247
- }], appendMessageClass: [{
248
- type: Input
249
- }], appendLabelClass: [{
250
- type: Input
251
- }], appendErrorClass: [{
252
- type: Input
253
- }], appendHintClass: [{
254
- type: Input
255
- }], validateMessages: [{
256
- type: Input
257
- }] } });
1
+ import { Input, ElementRef, Renderer2, Directive, Injector, Optional, Inject, Self, } from '@angular/core';
2
+ import { NgControl } from '@angular/forms';
3
+ import { Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { values, keys } from 'lodash-es';
6
+ import { FsFormDirective } from '../form/form.directive';
7
+ import { VALIDATE_MESSAGE_PROVIDER, VALIDATE_MESSAGES } from '../../providers/validate-messages.provider';
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
+ constructor(elementRef, renderer2, injector, _validateMessages, ngControl, formDirective) {
13
+ this.elementRef = elementRef;
14
+ this.renderer2 = renderer2;
15
+ this.injector = injector;
16
+ this._validateMessages = _validateMessages;
17
+ this.ngControl = ngControl;
18
+ this.formDirective = formDirective;
19
+ this.appendMessageClass = 'fs-form-message';
20
+ this.appendLabelClass = 'fs-form-label';
21
+ this.appendErrorClass = 'fs-form-error';
22
+ this.appendHintClass = 'fs-form-hint';
23
+ this.errors = [];
24
+ // protected _validateMessages = { ...ERROR_MESSAGES };
25
+ this._destroy$ = new Subject();
26
+ if (ngControl) {
27
+ this._control = ngControl.control;
28
+ }
29
+ else {
30
+ console.error('The element does not have a valid ngModel', this.elementRef.nativeElement);
31
+ }
32
+ }
33
+ set validateMessages(messages) {
34
+ this._validateMessages = Object.assign(Object.assign({}, this._validateMessages), messages);
35
+ }
36
+ ngOnInit() {
37
+ this._setupValidators();
38
+ }
39
+ ngOnDestroy() {
40
+ this._destroy$.next();
41
+ this._destroy$.complete();
42
+ }
43
+ ngAfterContentInit() {
44
+ if (this._control) {
45
+ this._control.statusChanges
46
+ .pipe(takeUntil(this._destroy$))
47
+ .subscribe(this.render.bind(this));
48
+ }
49
+ }
50
+ getMessageSelector() {
51
+ var _a;
52
+ if (this.messageSelector === false) {
53
+ return '';
54
+ }
55
+ if (this.messageSelector) {
56
+ return this.messageSelector;
57
+ }
58
+ else if ((_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.messageSelector) {
59
+ return this.formDirective.messageSelector;
60
+ }
61
+ }
62
+ getHintWrapperSelector() {
63
+ var _a;
64
+ if (this.hintSelector === false) {
65
+ return '';
66
+ }
67
+ if (this.hintSelector) {
68
+ return this.hintSelector;
69
+ }
70
+ else if ((_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.hintSelector) {
71
+ return this.formDirective.hintSelector;
72
+ }
73
+ }
74
+ getWrapperSelector() {
75
+ var _a;
76
+ if (this.wrapperSelector === false) {
77
+ return '';
78
+ }
79
+ if (this.wrapperSelector) {
80
+ return this.wrapperSelector;
81
+ }
82
+ else if ((_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.wrapperSelector) {
83
+ return this.formDirective.wrapperSelector;
84
+ }
85
+ }
86
+ getlabelSelector() {
87
+ var _a;
88
+ if (this.labelSelector === false) {
89
+ return '';
90
+ }
91
+ if (this.labelSelector) {
92
+ return this.labelSelector;
93
+ }
94
+ else if ((_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.labelSelector) {
95
+ return this.formDirective.labelSelector;
96
+ }
97
+ }
98
+ getWrapperElement() {
99
+ const wrapper = this.getWrapper(this.elementRef.nativeElement);
100
+ if (wrapper) {
101
+ return wrapper;
102
+ }
103
+ return this.elementRef.nativeElement;
104
+ }
105
+ /*
106
+ <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.
107
+ <input>
108
+ <div class="fs-form-message"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector
109
+ <div class="fs-form-message"></div>
110
+ <div class="fs-form-hint"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector
111
+ </div>
112
+ </mat-form-field>
113
+ */
114
+ render() {
115
+ var _a, _b;
116
+ if (this.ngControl) {
117
+ const renderer = this.renderer2;
118
+ const wrapper = this.getWrapperElement();
119
+ const error = this.ngControl.dirty ? this.getError(this.ngControl) : null;
120
+ const shouldErrorBeRendered = this.ngControl.invalid
121
+ && (this.ngControl.dirty || ((_b = (_a = this.formDirective) === null || _a === void 0 ? void 0 : _a.ngForm) === null || _b === void 0 ? void 0 : _b.submitted));
122
+ if (shouldErrorBeRendered && error) {
123
+ wrapper.classList.add('ng-invalid', 'ng-dirty');
124
+ }
125
+ else {
126
+ wrapper.classList.remove('ng-invalid');
127
+ }
128
+ if (!this.getMessageSelector()) {
129
+ return;
130
+ }
131
+ const messageWrapper = wrapper.querySelector(this.getMessageSelector());
132
+ if (!messageWrapper) {
133
+ return console.warn('Failed to locate ' + this.getMessageSelector(), this.elementRef.nativeElement);
134
+ }
135
+ if (this.getlabelSelector()) {
136
+ const labelWrapper = wrapper.querySelector(this.getlabelSelector());
137
+ if (labelWrapper) {
138
+ if (this.appendLabelClass) {
139
+ this.renderer2.addClass(labelWrapper, this.appendLabelClass);
140
+ }
141
+ }
142
+ }
143
+ if (this.appendMessageClass) {
144
+ renderer.addClass(messageWrapper, this.appendMessageClass);
145
+ }
146
+ if (this.getHintWrapperSelector()) {
147
+ const hint = messageWrapper.querySelector(this.getHintWrapperSelector());
148
+ if (hint) {
149
+ renderer.setStyle(hint, 'display', error ? 'none' : 'block');
150
+ if (this.appendHintClass) {
151
+ renderer.addClass(hint, this.appendHintClass);
152
+ }
153
+ }
154
+ }
155
+ let errorWrapper = wrapper.querySelector('.fs-form-error-target');
156
+ if (errorWrapper) {
157
+ errorWrapper.remove();
158
+ }
159
+ if (!shouldErrorBeRendered || !error) {
160
+ return;
161
+ }
162
+ errorWrapper = renderer.createElement('div');
163
+ renderer.addClass(errorWrapper, 'fs-form-error-target');
164
+ renderer.addClass(errorWrapper, this.appendErrorClass);
165
+ renderer.addClass(errorWrapper, this.appendErrorClass + '-' + error.name);
166
+ const errorText = renderer.createText(error.message);
167
+ renderer.appendChild(errorWrapper, errorText);
168
+ messageWrapper.appendChild(errorWrapper);
169
+ }
170
+ }
171
+ getWrapper(node, count = 0) {
172
+ if (!node || count > 10) {
173
+ return null;
174
+ }
175
+ if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {
176
+ return node;
177
+ }
178
+ return this.getWrapper(node.parentNode, ++count);
179
+ }
180
+ parseErrorMessage(message, args) {
181
+ values(args)
182
+ .forEach((name) => {
183
+ message = message.replace(/\$\(\d\)/, name);
184
+ });
185
+ return message;
186
+ }
187
+ getError(controlRef) {
188
+ const name = keys(controlRef.control.errors)[0];
189
+ if (!name) {
190
+ return null;
191
+ }
192
+ let message = controlRef.control.errors[name];
193
+ if (this._validateMessages[name]) {
194
+ message = this.parseErrorMessage(this._validateMessages[name], message);
195
+ }
196
+ return { name: name, message: message };
197
+ }
198
+ _setupValidators() {
199
+ const control = this._control;
200
+ if (this.validate) {
201
+ const validators = control.validator
202
+ ? [control.validator, this.validate.bind(this)]
203
+ : this.validate.bind(this);
204
+ control.setValidators(validators);
205
+ }
206
+ if (this.validateAsync) {
207
+ const asyncValidators = control.asyncValidator
208
+ ? [control.asyncValidator, this.validateAsync.bind(this)]
209
+ : this.validateAsync.bind(this);
210
+ control.setAsyncValidators(asyncValidators);
211
+ }
212
+ control.updateValueAndValidity();
213
+ }
214
+ }
215
+ FsControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", 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 });
216
+ FsControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: FsControlDirective, selector: "[fsFormControl]", inputs: { wrapperSelector: "wrapperSelector", messageSelector: "messageSelector", hintSelector: "hintSelector", labelSelector: "labelSelector", appendMessageClass: "appendMessageClass", appendLabelClass: "appendLabelClass", appendErrorClass: "appendErrorClass", appendHintClass: "appendHintClass", validateMessages: "validateMessages" }, providers: [
217
+ VALIDATE_MESSAGE_PROVIDER
218
+ ], ngImport: i0 });
219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsControlDirective, decorators: [{
220
+ type: Directive,
221
+ args: [{
222
+ selector: '[fsFormControl]',
223
+ providers: [
224
+ VALIDATE_MESSAGE_PROVIDER
225
+ ],
226
+ }]
227
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined, decorators: [{
228
+ type: Self
229
+ }, {
230
+ type: Inject,
231
+ args: [VALIDATE_MESSAGES]
232
+ }] }, { type: i1.NgControl, decorators: [{
233
+ type: Optional
234
+ }] }, { type: i2.FsFormDirective, decorators: [{
235
+ type: Optional
236
+ }, {
237
+ type: Inject,
238
+ args: [FsFormDirective]
239
+ }] }]; }, propDecorators: { wrapperSelector: [{
240
+ type: Input
241
+ }], messageSelector: [{
242
+ type: Input
243
+ }], hintSelector: [{
244
+ type: Input
245
+ }], labelSelector: [{
246
+ type: Input
247
+ }], appendMessageClass: [{
248
+ type: Input
249
+ }], appendLabelClass: [{
250
+ type: Input
251
+ }], appendErrorClass: [{
252
+ type: Input
253
+ }], appendHintClass: [{
254
+ type: Input
255
+ }], validateMessages: [{
256
+ type: Input
257
+ }] } });
258
258
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksR0FJTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFxQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNsQixNQUFNLDRDQUE0QyxDQUFDOzs7O0FBZXBELE1BQU0sT0FBTyxrQkFBa0I7SUF5QjdCLFlBQ1ksVUFBc0IsRUFDdEIsU0FBb0IsRUFDcEIsUUFBa0IsRUFDaUIsaUJBQWlCLEVBQ3hDLFNBQW9CLEVBQ0ssYUFBOEI7UUFMbkUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDaUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFBO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDSyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUF6QnRFLHVCQUFrQixHQUFHLGlCQUFpQixDQUFDO1FBQ3ZDLHFCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUNuQyxxQkFBZ0IsR0FBRyxlQUFl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Q3RCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxjQUFjO2dCQUM1QyxDQUFDLENBQUMsQ0FBRSxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbkMsQ0FBQzs7Z0hBM1FVLGtCQUFrQiw2RkE2QlgsaUJBQWlCLGtFQUViLGVBQWU7b0dBL0IxQixrQkFBa0IsNFhBSmxCO1FBQ1QseUJBQXlCO0tBQzFCOzRGQUVVLGtCQUFrQjtrQkFOOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixTQUFTLEVBQUU7d0JBQ1QseUJBQXlCO3FCQUMxQjtpQkFDRjs7MEJBOEJJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDaEMsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzRDQTdCNUIsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdLLGdCQUFnQjtzQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjIsXG4gIERpcmVjdGl2ZSxcbiAgSW5qZWN0b3IsXG4gIE9wdGlvbmFsLFxuICBJbmplY3QsXG4gIFNlbGYsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBBZnRlckNvbnRlbnRJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHZhbHVlcywga2V5cyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0vZm9ybS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUixcbiAgVkFMSURBVEVfTUVTU0FHRVNcbn0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3ZhbGlkYXRlLW1lc3NhZ2VzLnByb3ZpZGVyJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEZzQ29udHJvbERpcmVjdGl2ZSB7XG4gIHZhbGlkYXRlPyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcbiAgdmFsaWRhdGVBc3luYz8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPjtcbn1cblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZnNGb3JtQ29udHJvbF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBWQUxJREFURV9NRVNTQUdFX1BST1ZJREVSXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSB3cmFwcGVyU2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBtZXNzYWdlU2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBoaW50U2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbFNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgYXBwZW5kTWVzc2FnZUNsYXNzID0gJ2ZzLWZvcm0tbWVzc2FnZSc7XG4gIEBJbnB1dCgpIGFwcGVuZExhYmVsQ2xhc3MgPSAnZnMtZm9ybS1sYWJlbCc7XG4gIEBJbnB1dCgpIGFwcGVuZEVycm9yQ2xhc3MgPSAnZnMtZm9ybS1lcnJvcic7XG4gIEBJbnB1dCgpIGFwcGVuZEhpbnRDbGFzcyA9ICdmcy1mb3JtLWhpbnQnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGVNZXNzYWdlcyhtZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMgPSB7XG4gICAgICAuLi50aGlzLl92YWxpZGF0ZU1lc3NhZ2VzLFxuICAgICAgLi4ubWVzc2FnZXMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlcnJvcnMgPSBbXTtcblxuICAvLyBwcm90ZWN0ZWQgX3ZhbGlkYXRlTWVzc2FnZXMgPSB7IC4uLkVSUk9SX01FU1NBR0VTIH07XG4gIHByb3RlY3RlZCBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICBwcm90ZWN0ZWQgX2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXIyOiBSZW5kZXJlcjIsXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAU2VsZigpIEBJbmplY3QoVkFMSURBVEVfTUVTU0FHRVMpIHByb3RlY3RlZCBfdmFsaWRhdGVNZXNzYWdlcyxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGc0Zvcm1EaXJlY3RpdmUpIHByb3RlY3RlZCBmb3JtRGlyZWN0aXZlOiBGc0Zvcm1EaXJlY3RpdmUsXG4gICkge1xuXG4gICAgaWYgKG5nQ29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgbmdNb2RlbCcsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9zZXR1cFZhbGlkYXRvcnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLl9jb250cm9sKSB7XG4gICAgICB0aGlzLl9jb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodGhpcy5yZW5kZXIuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1lc3NhZ2VTZWxlY3RvcigpOiBzdHJpbmcge1xuXG4gICAgaWYgKHRoaXMubWVzc2FnZVNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1lc3NhZ2VTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1EaXJlY3RpdmU/Lm1lc3NhZ2VTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5tZXNzYWdlU2VsZWN0b3I7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKTogc3RyaW5nIHtcblxuICAgIGlmICh0aGlzLmhpbnRTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaW50U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpbnRTZWxlY3RvcjtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtRGlyZWN0aXZlPy5oaW50U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuaGludFNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRXcmFwcGVyU2VsZWN0b3IoKTogc3RyaW5nIHtcblxuICAgIGlmICh0aGlzLndyYXBwZXJTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLndyYXBwZXJTZWxlY3RvcjtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtRGlyZWN0aXZlPy53cmFwcGVyU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUud3JhcHBlclNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRsYWJlbFNlbGVjdG9yKCk6IHN0cmluZyB7XG5cbiAgICBpZiAodGhpcy5sYWJlbFNlbGVjdG9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxhYmVsU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhYmVsU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURpcmVjdGl2ZT8ubGFiZWxTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5sYWJlbFNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRXcmFwcGVyRWxlbWVudCgpIHtcblxuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmdldFdyYXBwZXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgaWYgKHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIC8qXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZvcm0tZmllbGRcIj4gIDwtLSBGaWVsZCBXcmFwcGVyIENsYXNzLiBMb29rIGZvciBwYXJlbnRzIGZyb20gdGhlIG5hdGl2ZSBlbGVtZW50IHdpdGggdGhlIG1hdGNoaW5nIHdyYXBwZXJTZWxlY3Rvci4gSWYgbm90IGZvdW5kIGRlZmF1bHRzIHRvIG5hdGl2ZSBlbGVtZW50LlxuICAgICAgPGlucHV0PlxuICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPiA8LS0gTWVzc2FnZSBTZWxlY3Rvci4gTG9vayBmb3IgdGhlIGVsZW1lbnQgd2l0aCBjbGFzcyAuZnMtZm9ybS1tZXNzYWdlIG9yIG1lc3NhZ2VTZWxlY3RvclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtZm9ybS1tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLWhpbnRcIj48L2Rpdj4gPC0tIEhpbnQgU2VsZWN0b3IuIExvb2sgZm9yIHRoZSBlbGVtZW50IHdpdGggY2xhc3MgLmZzLWZvcm0taGludCBvciBoaW50U2VsZWN0b3JcbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICovXG5cbiAgcHJvdGVjdGVkIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjI7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5nQ29udHJvbC5kaXJ0eSA/IHRoaXMuZ2V0RXJyb3IodGhpcy5uZ0NvbnRyb2wpIDogbnVsbDtcbiAgICAgIGNvbnN0IHNob3VsZEVycm9yQmVSZW5kZXJlZCA9IHRoaXMubmdDb250cm9sLmludmFsaWRcbiAgICAgICAgJiYgKHRoaXMubmdDb250cm9sLmRpcnR5IHx8IHRoaXMuZm9ybURpcmVjdGl2ZT8ubmdGb3JtPy5zdWJtaXR0ZWQpO1xuXG4gICAgICBpZiAoc2hvdWxkRXJyb3JCZVJlbmRlcmVkICYmIGVycm9yKSB7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnbmctaW52YWxpZCcsICduZy1kaXJ0eScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCduZy1pbnZhbGlkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5nZXRNZXNzYWdlU2VsZWN0b3IoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCkpO1xuXG4gICAgICBpZiAoIW1lc3NhZ2VXcmFwcGVyKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2NhdGUgJyArIHRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCksIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZ2V0bGFiZWxTZWxlY3RvcigpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsV3JhcHBlciA9IHdyYXBwZXIucXVlcnlTZWxlY3Rvcih0aGlzLmdldGxhYmVsU2VsZWN0b3IoKSk7XG5cbiAgICAgICAgaWYgKGxhYmVsV3JhcHBlcikge1xuICAgICAgICAgIGlmICh0aGlzLmFwcGVuZExhYmVsQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKGxhYmVsV3JhcHBlciwgdGhpcy5hcHBlbmRMYWJlbENsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYXBwZW5kTWVzc2FnZUNsYXNzKSB7XG4gICAgICAgIHJlbmRlcmVyLmFkZENsYXNzKG1lc3NhZ2VXcmFwcGVyLCB0aGlzLmFwcGVuZE1lc3NhZ2VDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKSkge1xuICAgICAgICBjb25zdCBoaW50ID0gbWVzc2FnZVdyYXBwZXIucXVlcnlTZWxlY3Rvcih0aGlzLmdldEhpbnRXcmFwcGVyU2VsZWN0b3IoKSk7XG5cbiAgICAgICAgaWYgKGhpbnQpIHtcbiAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShoaW50LCAnZGlzcGxheScsIGVycm9yID8gJ25vbmUnIDogJ2Jsb2NrJyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5hcHBlbmRIaW50Q2xhc3MpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGhpbnQsIHRoaXMuYXBwZW5kSGludENsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGVycm9yV3JhcHBlciA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcignLmZzLWZvcm0tZXJyb3ItdGFyZ2V0Jyk7XG4gICAgICBpZiAoZXJyb3JXcmFwcGVyKSB7XG4gICAgICAgIGVycm9yV3JhcHBlci5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG91bGRFcnJvckJlUmVuZGVyZWQgfHwgIWVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXJyb3JXcmFwcGVyID0gcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZW5kZXJlci5hZGRDbGFzcyhlcnJvcldyYXBwZXIsICdmcy1mb3JtLWVycm9yLXRhcmdldCcpO1xuICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCB0aGlzLmFwcGVuZEVycm9yQ2xhc3MpO1xuICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCB0aGlzLmFwcGVuZEVycm9yQ2xhc3MgKyAnLScgKyBlcnJvci5uYW1lKTtcblxuICAgICAgY29uc3QgZXJyb3JUZXh0ID0gcmVuZGVyZXIuY3JlYXRlVGV4dChlcnJvci5tZXNzYWdlKTtcblxuICAgICAgcmVuZGVyZXIuYXBwZW5kQ2hpbGQoZXJyb3JXcmFwcGVyLCBlcnJvclRleHQpO1xuICAgICAgbWVzc2FnZVdyYXBwZXIuYXBwZW5kQ2hpbGQoZXJyb3JXcmFwcGVyKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0V3JhcHBlcihub2RlLCBjb3VudCA9IDApIHtcblxuICAgIGlmICghbm9kZSB8fCBjb3VudCA+IDEwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5wYXJlbnROb2RlICYmIG5vZGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0V3JhcHBlclNlbGVjdG9yKCkpKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRXcmFwcGVyKG5vZGUucGFyZW50Tm9kZSwgKytjb3VudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VFcnJvck1lc3NhZ2UobWVzc2FnZSwgYXJncyk6IHN0cmluZyB7XG4gICAgdmFsdWVzKGFyZ3MpXG4gICAgICAuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL1xcJFxcKFxcZFxcKS8sIG5hbWUpO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRFcnJvcihjb250cm9sUmVmKTogeyBuYW1lOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9IHtcblxuICAgIGNvbnN0IG5hbWUgPSBrZXlzKGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnMpWzBdO1xuXG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWVzc2FnZSA9IGNvbnRyb2xSZWYuY29udHJvbC5lcnJvcnNbbmFtZV07XG5cbiAgICBpZiAodGhpcy5fdmFsaWRhdGVNZXNzYWdlc1tuYW1lXSkge1xuICAgICAgbWVzc2FnZSA9IHRoaXMucGFyc2VFcnJvck1lc3NhZ2UodGhpcy5fdmFsaWRhdGVNZXNzYWdlc1tuYW1lXSwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbmFtZTogbmFtZSwgbWVzc2FnZTogbWVzc2FnZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBWYWxpZGF0b3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLl9jb250cm9sO1xuXG4gICAgaWYgKHRoaXMudmFsaWRhdGUpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBjb250cm9sLnZhbGlkYXRvclxuICAgICAgICA/IFsgY29udHJvbC52YWxpZGF0b3IsIHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKV1cbiAgICAgICAgOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyk7XG5cbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWxpZGF0ZUFzeW5jKSB7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBjb250cm9sLmFzeW5jVmFsaWRhdG9yXG4gICAgICAgID8gWyBjb250cm9sLmFzeW5jVmFsaWRhdG9yLCB0aGlzLnZhbGlkYXRlQXN5bmMuYmluZCh0aGlzKV1cbiAgICAgICAgOiB0aGlzLnZhbGlkYXRlQXN5bmMuYmluZCh0aGlzKTtcblxuICAgICAgY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG59XG4iXX0=
@@ -1,41 +1,41 @@
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
- set validationMessage(value) {
9
- this._validateMessages.dateRange = value;
10
- }
11
- ngOnChanges() {
12
- this._control.updateValueAndValidity();
13
- }
14
- validate(control) {
15
- if (isEnabled(this.fsFormDateRange)) {
16
- return FsValidators.dateRange(this._control);
17
- }
18
- else {
19
- return null;
20
- }
21
- }
22
- }
23
- FsFormDateRangeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFormDateRangeDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
24
- FsFormDateRangeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: FsFormDateRangeDirective, selector: "[fsFormDateRange]", inputs: { fsFormDateRange: "fsFormDateRange", validationMessage: ["fsFormDateRangeMessage", "validationMessage"] }, providers: [
25
- VALIDATE_MESSAGE_PROVIDER
26
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFormDateRangeDirective, decorators: [{
28
- type: Directive,
29
- args: [{
30
- selector: '[fsFormDateRange]',
31
- providers: [
32
- VALIDATE_MESSAGE_PROVIDER
33
- ],
34
- }]
35
- }], propDecorators: { fsFormDateRange: [{
36
- type: Input
37
- }], validationMessage: [{
38
- type: Input,
39
- args: ['fsFormDateRangeMessage']
40
- }] } });
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
+ set validationMessage(value) {
9
+ this._validateMessages.dateRange = value;
10
+ }
11
+ ngOnChanges() {
12
+ this._control.updateValueAndValidity();
13
+ }
14
+ validate(control) {
15
+ if (isEnabled(this.fsFormDateRange)) {
16
+ return FsValidators.dateRange(this._control);
17
+ }
18
+ else {
19
+ return null;
20
+ }
21
+ }
22
+ }
23
+ FsFormDateRangeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFormDateRangeDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
24
+ FsFormDateRangeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: FsFormDateRangeDirective, selector: "[fsFormDateRange]", inputs: { fsFormDateRange: "fsFormDateRange", validationMessage: ["fsFormDateRangeMessage", "validationMessage"] }, providers: [
25
+ VALIDATE_MESSAGE_PROVIDER
26
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFormDateRangeDirective, decorators: [{
28
+ type: Directive,
29
+ args: [{
30
+ selector: '[fsFormDateRange]',
31
+ providers: [
32
+ VALIDATE_MESSAGE_PROVIDER
33
+ ],
34
+ }]
35
+ }], propDecorators: { fsFormDateRange: [{
36
+ type: Input
37
+ }], validationMessage: [{
38
+ type: Input,
39
+ args: ['fsFormDateRangeMessage']
40
+ }] } });
41
41
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy92YWxpZGF0b3JzL2RhdGVyYW5nZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFTckQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGtCQUFrQjtJQUs5RCxJQUNXLGlCQUFpQixDQUFDLEtBQWE7UUFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0MsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTSxRQUFRLENBQUMsT0FBd0I7UUFDdEMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ25DLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDOztzSEFwQlUsd0JBQXdCOzBHQUF4Qix3QkFBd0IsZ0tBSnhCO1FBQ1QseUJBQXlCO0tBQzFCOzRGQUVVLHdCQUF3QjtrQkFOcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixTQUFTLEVBQUU7d0JBQ1QseUJBQXlCO3FCQUMxQjtpQkFDRjs4QkFJUSxlQUFlO3NCQURyQixLQUFLO2dCQUlLLGlCQUFpQjtzQkFEM0IsS0FBSzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRnNDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi9jb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc1ZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy92YWxpZGF0ZS1tZXNzYWdlcy5wcm92aWRlcic7XG5pbXBvcnQgeyBGc1ZhbGlkYXRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdmFsaWRhdG9yJztcbmltcG9ydCB7IGlzRW5hYmxlZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaXMtZW5hYmxlZCc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzRm9ybURhdGVSYW5nZV0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBWQUxJREFURV9NRVNTQUdFX1BST1ZJREVSXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzRm9ybURhdGVSYW5nZURpcmVjdGl2ZSBleHRlbmRzIEZzQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgRnNWYWxpZGF0b3Ige1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmc0Zvcm1EYXRlUmFuZ2U7XG5cbiAgQElucHV0KCdmc0Zvcm1EYXRlUmFuZ2VNZXNzYWdlJylcbiAgcHVibGljIHNldCB2YWxpZGF0aW9uTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsaWRhdGVNZXNzYWdlcy5kYXRlUmFuZ2UgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGlzRW5hYmxlZCh0aGlzLmZzRm9ybURhdGVSYW5nZSkpIHtcbiAgICAgIHJldHVybiBGc1ZhbGlkYXRvcnMuZGF0ZVJhbmdlKHRoaXMuX2NvbnRyb2wpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==