@firestitch/form 12.0.2 → 12.1.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 (97) hide show
  1. package/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +21 -21
  2. package/app/consts/error-messages.const.d.ts +19 -19
  3. package/app/directives/form/form.directive.d.ts +108 -105
  4. package/app/directives/form-dialog-close.directive.d.ts +12 -12
  5. package/app/directives/submit-button.directive.d.ts +31 -31
  6. package/app/directives/validators/compare.directive.d.ts +15 -15
  7. package/app/directives/validators/control.directive.d.ts +48 -48
  8. package/app/directives/validators/daterange.directive.d.ts +13 -13
  9. package/app/directives/validators/email.directive.d.ts +13 -13
  10. package/app/directives/validators/emails.directive.d.ts +13 -13
  11. package/app/directives/validators/function.directive.d.ts +14 -14
  12. package/app/directives/validators/greater.directive.d.ts +13 -13
  13. package/app/directives/validators/integer.directive.d.ts +13 -13
  14. package/app/directives/validators/lesser.directive.d.ts +13 -13
  15. package/app/directives/validators/max.directive.d.ts +13 -13
  16. package/app/directives/validators/maxlength.directive.d.ts +13 -13
  17. package/app/directives/validators/min.directive.d.ts +13 -13
  18. package/app/directives/validators/minlength.directive.d.ts +13 -13
  19. package/app/directives/validators/numeric.directive.d.ts +13 -13
  20. package/app/directives/validators/pattern.directive.d.ts +13 -13
  21. package/app/directives/validators/phone.directive.d.ts +13 -13
  22. package/app/directives/validators/required.directive.d.ts +16 -16
  23. package/app/directives/validators/url.directive.d.ts +14 -14
  24. package/app/directives/validators/validate.directive.d.ts +14 -14
  25. package/app/enums/confirm-result.d.ts +7 -7
  26. package/app/enums/form-status.d.ts +9 -9
  27. package/app/fs-form.module.d.ts +35 -35
  28. package/app/guards/form-deactivate.guard.d.ts +12 -12
  29. package/app/helpers/confirm-result-continue.d.ts +1 -1
  30. package/app/helpers/confirm-unsaved.d.ts +5 -5
  31. package/app/helpers/get-form-errors.d.ts +2 -2
  32. package/app/helpers/index.d.ts +2 -2
  33. package/app/helpers/is-enabled.d.ts +1 -1
  34. package/app/interfaces/async-validator.d.ts +14 -14
  35. package/app/interfaces/confirm-config.d.ts +7 -7
  36. package/app/interfaces/confirm-tab-group.d.ts +10 -10
  37. package/app/interfaces/form-deactivate.d.ts +4 -4
  38. package/app/interfaces/index.d.ts +4 -4
  39. package/app/interfaces/submit-event.d.ts +5 -5
  40. package/app/interfaces/submitted-event.d.ts +6 -6
  41. package/app/interfaces/validator.d.ts +13 -13
  42. package/app/providers/validate-messages.provider.d.ts +25 -25
  43. package/app/services/fsform.service.d.ts +10 -10
  44. package/app/validators/validators.d.ts +12 -12
  45. package/bundles/firestitch-form.umd.js +2623 -2613
  46. package/bundles/firestitch-form.umd.js.map +1 -1
  47. package/esm2015/app/components/form-dialog-actions/form-dialog-actions.component.js +85 -85
  48. package/esm2015/app/consts/error-messages.const.js +19 -19
  49. package/esm2015/app/directives/form/form.directive.js +622 -619
  50. package/esm2015/app/directives/form-dialog-close.directive.js +30 -30
  51. package/esm2015/app/directives/submit-button.directive.js +132 -131
  52. package/esm2015/app/directives/validators/compare.directive.js +48 -48
  53. package/esm2015/app/directives/validators/control.directive.js +256 -256
  54. package/esm2015/app/directives/validators/daterange.directive.js +40 -40
  55. package/esm2015/app/directives/validators/email.directive.js +40 -40
  56. package/esm2015/app/directives/validators/emails.directive.js +40 -40
  57. package/esm2015/app/directives/validators/function.directive.js +30 -30
  58. package/esm2015/app/directives/validators/greater.directive.js +39 -39
  59. package/esm2015/app/directives/validators/integer.directive.js +40 -40
  60. package/esm2015/app/directives/validators/lesser.directive.js +39 -39
  61. package/esm2015/app/directives/validators/max.directive.js +35 -35
  62. package/esm2015/app/directives/validators/maxlength.directive.js +34 -34
  63. package/esm2015/app/directives/validators/min.directive.js +35 -35
  64. package/esm2015/app/directives/validators/minlength.directive.js +34 -34
  65. package/esm2015/app/directives/validators/numeric.directive.js +40 -40
  66. package/esm2015/app/directives/validators/pattern.directive.js +34 -34
  67. package/esm2015/app/directives/validators/phone.directive.js +40 -40
  68. package/esm2015/app/directives/validators/required.directive.js +70 -70
  69. package/esm2015/app/directives/validators/url.directive.js +46 -46
  70. package/esm2015/app/directives/validators/validate.directive.js +32 -32
  71. package/esm2015/app/enums/confirm-result.js +8 -8
  72. package/esm2015/app/enums/form-status.js +10 -10
  73. package/esm2015/app/fs-form.module.js +171 -165
  74. package/esm2015/app/guards/form-deactivate.guard.js +39 -39
  75. package/esm2015/app/helpers/confirm-result-continue.js +4 -4
  76. package/esm2015/app/helpers/confirm-unsaved.js +69 -69
  77. package/esm2015/app/helpers/get-form-errors.js +24 -24
  78. package/esm2015/app/helpers/index.js +2 -2
  79. package/esm2015/app/helpers/is-enabled.js +3 -3
  80. package/esm2015/app/interfaces/async-validator.js +1 -1
  81. package/esm2015/app/interfaces/confirm-config.js +1 -1
  82. package/esm2015/app/interfaces/confirm-tab-group.js +1 -1
  83. package/esm2015/app/interfaces/form-deactivate.js +1 -1
  84. package/esm2015/app/interfaces/index.js +4 -4
  85. package/esm2015/app/interfaces/submit-event.js +1 -1
  86. package/esm2015/app/interfaces/submitted-event.js +1 -1
  87. package/esm2015/app/interfaces/validator.js +1 -1
  88. package/esm2015/app/providers/validate-messages.provider.js +10 -10
  89. package/esm2015/app/services/fsform.service.js +24 -24
  90. package/esm2015/app/validators/validators.js +96 -96
  91. package/esm2015/firestitch-form.js +4 -4
  92. package/esm2015/public_api.js +34 -34
  93. package/fesm2015/firestitch-form.js +2071 -2061
  94. package/fesm2015/firestitch-form.js.map +1 -1
  95. package/firestitch-form.d.ts +5 -5
  96. package/package.json +1 -1
  97. package/public_api.d.ts +33 -33
@@ -1,257 +1,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
- /*
46
- Ensure that statusChanges has one subscription per control. Multiple can happen
47
- when multiple fsForm validation directives are applied to the same element
48
- */
49
- if (!this._control.statusChangesSubscribe) {
50
- this._control.statusChanges
51
- .pipe(takeUntil(this._destroy$))
52
- .subscribe(this.render.bind(this));
53
- this._control.statusChangesSubscribe = true;
54
- }
55
- }
56
- }
57
- getMessageSelector() {
58
- if (this.messageSelector === false) {
59
- return '';
60
- }
61
- if (this.messageSelector) {
62
- return this.messageSelector;
63
- }
64
- else if (this.formDirective && this.formDirective.messageSelector) {
65
- return this.formDirective.messageSelector;
66
- }
67
- }
68
- getHintWrapperSelector() {
69
- if (this.hintSelector === false) {
70
- return '';
71
- }
72
- if (this.hintSelector) {
73
- return this.hintSelector;
74
- }
75
- else if (this.formDirective && this.formDirective.hintSelector) {
76
- return this.formDirective.hintSelector;
77
- }
78
- }
79
- getWrapperSelector() {
80
- if (this.wrapperSelector === false) {
81
- return '';
82
- }
83
- if (this.wrapperSelector) {
84
- return this.wrapperSelector;
85
- }
86
- else if (this.formDirective && this.formDirective.wrapperSelector) {
87
- return this.formDirective.wrapperSelector;
88
- }
89
- }
90
- getlabelSelector() {
91
- if (this.labelSelector === false) {
92
- return '';
93
- }
94
- if (this.labelSelector) {
95
- return this.labelSelector;
96
- }
97
- else if (this.formDirective && this.formDirective.labelSelector) {
98
- return this.formDirective.labelSelector;
99
- }
100
- }
101
- getWrapperElement() {
102
- const wrapper = this.getWrapper(this.elementRef.nativeElement);
103
- if (wrapper) {
104
- return wrapper;
105
- }
106
- return this.elementRef.nativeElement;
107
- }
108
- /*
109
- <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.
110
- <input>
111
- <div class="fs-form-message"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector
112
- <div class="fs-form-message"></div>
113
- <div class="fs-form-hint"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector
114
- </div>
115
- </mat-form-field>
116
- */
117
- render() {
118
- var _a;
119
- if (this.ngControl) {
120
- const renderer = this.renderer2;
121
- const wrapper = this.getWrapperElement();
122
- const error = this.ngControl.dirty ? this.getError(this.ngControl) : null;
123
- if (!this.getMessageSelector()) {
124
- return;
125
- }
126
- const messageWrapper = wrapper.querySelector(this.getMessageSelector());
127
- if (!messageWrapper) {
128
- return console.warn('Failed to locate ' + this.getMessageSelector(), this.elementRef.nativeElement);
129
- }
130
- if (this.getlabelSelector()) {
131
- const labelWrapper = wrapper.querySelector(this.getlabelSelector());
132
- if (labelWrapper) {
133
- if (this.appendLabelClass) {
134
- this.renderer2.addClass(labelWrapper, this.appendLabelClass);
135
- }
136
- }
137
- }
138
- if (this.appendMessageClass) {
139
- renderer.addClass(messageWrapper, this.appendMessageClass);
140
- }
141
- if (this.getHintWrapperSelector()) {
142
- const hint = messageWrapper.querySelector(this.getHintWrapperSelector());
143
- if (hint) {
144
- renderer.setStyle(hint, 'display', error ? 'none' : 'block');
145
- if (this.appendHintClass) {
146
- renderer.addClass(hint, this.appendHintClass);
147
- }
148
- }
149
- }
150
- let errorWrapper = wrapper.querySelector('.fs-form-error-target');
151
- if (errorWrapper) {
152
- errorWrapper.remove();
153
- }
154
- wrapper.classList.remove('ng-invalid');
155
- const shouldErrorBeRendered = this.ngControl.invalid
156
- && (this.ngControl.dirty || ((_a = this.formDirective.ngForm) === null || _a === void 0 ? void 0 : _a.submitted));
157
- if (!shouldErrorBeRendered || !error) {
158
- return;
159
- }
160
- wrapper.classList.add('ng-invalid');
161
- errorWrapper = renderer.createElement('div');
162
- renderer.addClass(errorWrapper, 'fs-form-error-target');
163
- renderer.addClass(errorWrapper, this.appendErrorClass);
164
- renderer.addClass(errorWrapper, this.appendErrorClass + '-' + error.name);
165
- const errorText = renderer.createText(error.message);
166
- renderer.appendChild(errorWrapper, errorText);
167
- messageWrapper.appendChild(errorWrapper);
168
- }
169
- }
170
- getWrapper(node, count = 0) {
171
- if (!node || count > 10) {
172
- return null;
173
- }
174
- if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {
175
- return node;
176
- }
177
- return this.getWrapper(node.parentNode, ++count);
178
- }
179
- parseErrorMessage(message, args) {
180
- values(args)
181
- .forEach((name) => {
182
- message = message.replace(/\$\(\d\)/, name);
183
- });
184
- return message;
185
- }
186
- getError(controlRef) {
187
- const name = keys(controlRef.control.errors)[0];
188
- if (!name) {
189
- return null;
190
- }
191
- let message = controlRef.control.errors[name];
192
- if (this._validateMessages[name]) {
193
- message = this.parseErrorMessage(this._validateMessages[name], message);
194
- }
195
- return { name: name, message: message };
196
- }
197
- _setupValidators() {
198
- const control = this._control;
199
- if (this.validate) {
200
- const validators = control.validator
201
- ? [control.validator, this.validate.bind(this)]
202
- : this.validate.bind(this);
203
- control.setValidators(validators);
204
- }
205
- if (this.validateAsync) {
206
- const asyncValidators = control.asyncValidator
207
- ? [control.asyncValidator, this.validateAsync.bind(this)]
208
- : this.validateAsync.bind(this);
209
- control.setAsyncValidators(asyncValidators);
210
- }
211
- control.updateValueAndValidity();
212
- }
213
- }
214
- 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 });
215
- 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: [
216
- VALIDATE_MESSAGE_PROVIDER
217
- ], ngImport: i0 });
218
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsControlDirective, decorators: [{
219
- type: Directive,
220
- args: [{
221
- selector: '[fsFormControl]',
222
- providers: [
223
- VALIDATE_MESSAGE_PROVIDER
224
- ],
225
- }]
226
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined, decorators: [{
227
- type: Self
228
- }, {
229
- type: Inject,
230
- args: [VALIDATE_MESSAGES]
231
- }] }, { type: i1.NgControl, decorators: [{
232
- type: Optional
233
- }] }, { type: i2.FsFormDirective, decorators: [{
234
- type: Optional
235
- }, {
236
- type: Inject,
237
- args: [FsFormDirective]
238
- }] }]; }, propDecorators: { wrapperSelector: [{
239
- type: Input
240
- }], messageSelector: [{
241
- type: Input
242
- }], hintSelector: [{
243
- type: Input
244
- }], labelSelector: [{
245
- type: Input
246
- }], appendMessageClass: [{
247
- type: Input
248
- }], appendLabelClass: [{
249
- type: Input
250
- }], appendErrorClass: [{
251
- type: Input
252
- }], appendHintClass: [{
253
- type: Input
254
- }], validateMessages: [{
255
- type: Input
256
- }] } });
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
+ /*
46
+ Ensure that statusChanges has one subscription per control. Multiple can happen
47
+ when multiple fsForm validation directives are applied to the same element
48
+ */
49
+ if (!this._control.statusChangesSubscribe) {
50
+ this._control.statusChanges
51
+ .pipe(takeUntil(this._destroy$))
52
+ .subscribe(this.render.bind(this));
53
+ this._control.statusChangesSubscribe = true;
54
+ }
55
+ }
56
+ }
57
+ getMessageSelector() {
58
+ if (this.messageSelector === false) {
59
+ return '';
60
+ }
61
+ if (this.messageSelector) {
62
+ return this.messageSelector;
63
+ }
64
+ else if (this.formDirective && this.formDirective.messageSelector) {
65
+ return this.formDirective.messageSelector;
66
+ }
67
+ }
68
+ getHintWrapperSelector() {
69
+ if (this.hintSelector === false) {
70
+ return '';
71
+ }
72
+ if (this.hintSelector) {
73
+ return this.hintSelector;
74
+ }
75
+ else if (this.formDirective && this.formDirective.hintSelector) {
76
+ return this.formDirective.hintSelector;
77
+ }
78
+ }
79
+ getWrapperSelector() {
80
+ if (this.wrapperSelector === false) {
81
+ return '';
82
+ }
83
+ if (this.wrapperSelector) {
84
+ return this.wrapperSelector;
85
+ }
86
+ else if (this.formDirective && this.formDirective.wrapperSelector) {
87
+ return this.formDirective.wrapperSelector;
88
+ }
89
+ }
90
+ getlabelSelector() {
91
+ if (this.labelSelector === false) {
92
+ return '';
93
+ }
94
+ if (this.labelSelector) {
95
+ return this.labelSelector;
96
+ }
97
+ else if (this.formDirective && this.formDirective.labelSelector) {
98
+ return this.formDirective.labelSelector;
99
+ }
100
+ }
101
+ getWrapperElement() {
102
+ const wrapper = this.getWrapper(this.elementRef.nativeElement);
103
+ if (wrapper) {
104
+ return wrapper;
105
+ }
106
+ return this.elementRef.nativeElement;
107
+ }
108
+ /*
109
+ <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.
110
+ <input>
111
+ <div class="fs-form-message"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector
112
+ <div class="fs-form-message"></div>
113
+ <div class="fs-form-hint"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector
114
+ </div>
115
+ </mat-form-field>
116
+ */
117
+ render() {
118
+ var _a;
119
+ if (this.ngControl) {
120
+ const renderer = this.renderer2;
121
+ const wrapper = this.getWrapperElement();
122
+ const error = this.ngControl.dirty ? this.getError(this.ngControl) : null;
123
+ if (!this.getMessageSelector()) {
124
+ return;
125
+ }
126
+ const messageWrapper = wrapper.querySelector(this.getMessageSelector());
127
+ if (!messageWrapper) {
128
+ return console.warn('Failed to locate ' + this.getMessageSelector(), this.elementRef.nativeElement);
129
+ }
130
+ if (this.getlabelSelector()) {
131
+ const labelWrapper = wrapper.querySelector(this.getlabelSelector());
132
+ if (labelWrapper) {
133
+ if (this.appendLabelClass) {
134
+ this.renderer2.addClass(labelWrapper, this.appendLabelClass);
135
+ }
136
+ }
137
+ }
138
+ if (this.appendMessageClass) {
139
+ renderer.addClass(messageWrapper, this.appendMessageClass);
140
+ }
141
+ if (this.getHintWrapperSelector()) {
142
+ const hint = messageWrapper.querySelector(this.getHintWrapperSelector());
143
+ if (hint) {
144
+ renderer.setStyle(hint, 'display', error ? 'none' : 'block');
145
+ if (this.appendHintClass) {
146
+ renderer.addClass(hint, this.appendHintClass);
147
+ }
148
+ }
149
+ }
150
+ let errorWrapper = wrapper.querySelector('.fs-form-error-target');
151
+ if (errorWrapper) {
152
+ errorWrapper.remove();
153
+ }
154
+ wrapper.classList.remove('ng-invalid');
155
+ const shouldErrorBeRendered = this.ngControl.invalid
156
+ && (this.ngControl.dirty || ((_a = this.formDirective.ngForm) === null || _a === void 0 ? void 0 : _a.submitted));
157
+ if (!shouldErrorBeRendered || !error) {
158
+ return;
159
+ }
160
+ wrapper.classList.add('ng-invalid');
161
+ errorWrapper = renderer.createElement('div');
162
+ renderer.addClass(errorWrapper, 'fs-form-error-target');
163
+ renderer.addClass(errorWrapper, this.appendErrorClass);
164
+ renderer.addClass(errorWrapper, this.appendErrorClass + '-' + error.name);
165
+ const errorText = renderer.createText(error.message);
166
+ renderer.appendChild(errorWrapper, errorText);
167
+ messageWrapper.appendChild(errorWrapper);
168
+ }
169
+ }
170
+ getWrapper(node, count = 0) {
171
+ if (!node || count > 10) {
172
+ return null;
173
+ }
174
+ if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {
175
+ return node;
176
+ }
177
+ return this.getWrapper(node.parentNode, ++count);
178
+ }
179
+ parseErrorMessage(message, args) {
180
+ values(args)
181
+ .forEach((name) => {
182
+ message = message.replace(/\$\(\d\)/, name);
183
+ });
184
+ return message;
185
+ }
186
+ getError(controlRef) {
187
+ const name = keys(controlRef.control.errors)[0];
188
+ if (!name) {
189
+ return null;
190
+ }
191
+ let message = controlRef.control.errors[name];
192
+ if (this._validateMessages[name]) {
193
+ message = this.parseErrorMessage(this._validateMessages[name], message);
194
+ }
195
+ return { name: name, message: message };
196
+ }
197
+ _setupValidators() {
198
+ const control = this._control;
199
+ if (this.validate) {
200
+ const validators = control.validator
201
+ ? [control.validator, this.validate.bind(this)]
202
+ : this.validate.bind(this);
203
+ control.setValidators(validators);
204
+ }
205
+ if (this.validateAsync) {
206
+ const asyncValidators = control.asyncValidator
207
+ ? [control.asyncValidator, this.validateAsync.bind(this)]
208
+ : this.validateAsync.bind(this);
209
+ control.setAsyncValidators(asyncValidators);
210
+ }
211
+ control.updateValueAndValidity();
212
+ }
213
+ }
214
+ 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 });
215
+ 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: [
216
+ VALIDATE_MESSAGE_PROVIDER
217
+ ], ngImport: i0 });
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsControlDirective, decorators: [{
219
+ type: Directive,
220
+ args: [{
221
+ selector: '[fsFormControl]',
222
+ providers: [
223
+ VALIDATE_MESSAGE_PROVIDER
224
+ ],
225
+ }]
226
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined, decorators: [{
227
+ type: Self
228
+ }, {
229
+ type: Inject,
230
+ args: [VALIDATE_MESSAGES]
231
+ }] }, { type: i1.NgControl, decorators: [{
232
+ type: Optional
233
+ }] }, { type: i2.FsFormDirective, decorators: [{
234
+ type: Optional
235
+ }, {
236
+ type: Inject,
237
+ args: [FsFormDirective]
238
+ }] }]; }, propDecorators: { wrapperSelector: [{
239
+ type: Input
240
+ }], messageSelector: [{
241
+ type: Input
242
+ }], hintSelector: [{
243
+ type: Input
244
+ }], labelSelector: [{
245
+ type: Input
246
+ }], appendMessageClass: [{
247
+ type: Input
248
+ }], appendLabelClass: [{
249
+ type: Input
250
+ }], appendErrorClass: [{
251
+ type: Input
252
+ }], appendHintClass: [{
253
+ type: Input
254
+ }], validateMessages: [{
255
+ type: Input
256
+ }] } });
257
257
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksR0FJTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFxQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNsQixNQUFNLDRDQUE0QyxDQUFDOzs7O0FBZXBELE1BQU0sT0FBTyxrQkFBa0I7SUF5QjdCLFlBQ1ksVUFBc0IsRUFDdEIsU0FBb0IsRUFDcEIsUUFBa0IsRUFDaUIsaUJBQWlCLEVBQ3hDLFNBQW9CLEVBQ0csYUFBOEI7UUFMakUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDaUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFBO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDRyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUF6QnBFLHVCQUFrQixHQUFHLGlCQUFpQixDQUFDO1FBQ3ZDLHFCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUNuQyxxQkFBZ0IsR0FBRyxlQUFl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bWVudFJlZixcbiAgUmVuZGVyZXIyLFxuICBEaXJlY3RpdmUsXG4gIEluamVjdG9yLFxuICBPcHRpb25hbCxcbiAgSW5qZWN0LFxuICBTZWxmLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wsIEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyB2YWx1ZXMsIGtleXMgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIFZBTElEQVRFX01FU1NBR0VfUFJPVklERVIsXG4gIFZBTElEQVRFX01FU1NBR0VTXG59IGZyb20gJy4uLy4uL3Byb3ZpZGVycy92YWxpZGF0ZS1tZXNzYWdlcy5wcm92aWRlcic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBGc0NvbnRyb2xEaXJlY3RpdmUge1xuICB2YWxpZGF0ZT8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGw7XG4gIHZhbGlkYXRlQXN5bmM/KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD47XG59XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzRm9ybUNvbnRyb2xdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUlxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0NvbnRyb2xEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgd3JhcHBlclNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgbWVzc2FnZVNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgaGludFNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgbGFiZWxTZWxlY3Rvcjogc3RyaW5nIHwgZmFsc2U7XG4gIEBJbnB1dCgpIGFwcGVuZE1lc3NhZ2VDbGFzcyA9ICdmcy1mb3JtLW1lc3NhZ2UnO1xuICBASW5wdXQoKSBhcHBlbmRMYWJlbENsYXNzID0gJ2ZzLWZvcm0tbGFiZWwnO1xuICBASW5wdXQoKSBhcHBlbmRFcnJvckNsYXNzID0gJ2ZzLWZvcm0tZXJyb3InO1xuICBASW5wdXQoKSBhcHBlbmRIaW50Q2xhc3MgPSAnZnMtZm9ybS1oaW50JztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZhbGlkYXRlTWVzc2FnZXMobWVzc2FnZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgICB0aGlzLl92YWxpZGF0ZU1lc3NhZ2VzID0ge1xuICAgICAgLi4udGhpcy5fdmFsaWRhdGVNZXNzYWdlcyxcbiAgICAgIC4uLm1lc3NhZ2VzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZXJyb3JzID0gW107XG5cbiAgLy8gcHJvdGVjdGVkIF92YWxpZGF0ZU1lc3NhZ2VzID0geyAuLi5FUlJPUl9NRVNTQUdFUyB9O1xuICBwcm90ZWN0ZWQgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJvdGVjdGVkIF9jb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQFNlbGYoKSBASW5qZWN0KFZBTElEQVRFX01FU1NBR0VTKSBwcm90ZWN0ZWQgX3ZhbGlkYXRlTWVzc2FnZXMsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRnNGb3JtRGlyZWN0aXZlKSBwcml2YXRlIGZvcm1EaXJlY3RpdmU6IEZzRm9ybURpcmVjdGl2ZSxcbiAgKSB7XG5cbiAgICBpZiAobmdDb250cm9sKSB7XG4gICAgICB0aGlzLl9jb250cm9sID0gbmdDb250cm9sLmNvbnRyb2w7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBuZ01vZGVsJywgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3NldHVwVmFsaWRhdG9ycygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcblxuICAgICAgLypcbiAgICAgICAgRW5zdXJlIHRoYXQgc3RhdHVzQ2hhbmdlcyBoYXMgb25lIHN1YnNjcmlwdGlvbiBwZXIgY29udHJvbC4gTXVsdGlwbGUgY2FuIGhhcHBlblxuICAgICAgICB3aGVuIG11bHRpcGxlIGZzRm9ybSB2YWxpZGF0aW9uIGRpcmVjdGl2ZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNhbWUgZWxlbWVudFxuICAgICAgKi9cbiAgICAgIGlmICghKDxhbnk+dGhpcy5fY29udHJvbCkuc3RhdHVzQ2hhbmdlc1N1YnNjcmliZSkge1xuXG4gICAgICAgIHRoaXMuX2NvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMucmVuZGVyLmJpbmQodGhpcykpO1xuXG4gICAgICAgICg8YW55PnRoaXMuX2NvbnRyb2wpLnN0YXR1c0NoYW5nZXNTdWJzY3JpYmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRNZXNzYWdlU2VsZWN0b3IoKTogc3RyaW5nIHtcblxuICAgIGlmICh0aGlzLm1lc3NhZ2VTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXNzYWdlU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZWxlY3RvcjtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtRGlyZWN0aXZlICYmIHRoaXMuZm9ybURpcmVjdGl2ZS5tZXNzYWdlU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUubWVzc2FnZVNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRIaW50V3JhcHBlclNlbGVjdG9yKCk6IHN0cmluZyB7XG5cbiAgICBpZiAodGhpcy5oaW50U2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGludFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaW50U2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURpcmVjdGl2ZSAmJiB0aGlzLmZvcm1EaXJlY3RpdmUuaGludFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmhpbnRTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0V3JhcHBlclNlbGVjdG9yKCk6IHN0cmluZyB7XG5cbiAgICBpZiAodGhpcy53cmFwcGVyU2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlclNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy53cmFwcGVyU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURpcmVjdGl2ZSAmJiB0aGlzLmZvcm1EaXJlY3RpdmUud3JhcHBlclNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLndyYXBwZXJTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0bGFiZWxTZWxlY3RvcigpOiBzdHJpbmcge1xuXG4gICAgaWYgKHRoaXMubGFiZWxTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYWJlbFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYWJlbFNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1EaXJlY3RpdmUgJiYgdGhpcy5mb3JtRGlyZWN0aXZlLmxhYmVsU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUubGFiZWxTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0V3JhcHBlckVsZW1lbnQoKSB7XG5cbiAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRXcmFwcGVyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIGlmICh3cmFwcGVyKSB7XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvKlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkXCI+ICA8LS0gRmllbGQgV3JhcHBlciBDbGFzcy4gTG9vayBmb3IgcGFyZW50cyBmcm9tIHRoZSBuYXRpdmUgZWxlbWVudCB3aXRoIHRoZSBtYXRjaGluZyB3cmFwcGVyU2VsZWN0b3IuIElmIG5vdCBmb3VuZCBkZWZhdWx0cyB0byBuYXRpdmUgZWxlbWVudC5cbiAgICAgIDxpbnB1dD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLW1lc3NhZ2VcIj4gPC0tIE1lc3NhZ2UgU2VsZWN0b3IuIExvb2sgZm9yIHRoZSBlbGVtZW50IHdpdGggY2xhc3MgLmZzLWZvcm0tbWVzc2FnZSBvciBtZXNzYWdlU2VsZWN0b3JcbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtZm9ybS1oaW50XCI+PC9kaXY+IDwtLSBIaW50IFNlbGVjdG9yLiBMb29rIGZvciB0aGUgZWxlbWVudCB3aXRoIGNsYXNzIC5mcy1mb3JtLWhpbnQgb3IgaGludFNlbGVjdG9yXG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAqL1xuXG4gIHByb3RlY3RlZCByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG5cbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjI7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5nQ29udHJvbC5kaXJ0eSA/IHRoaXMuZ2V0RXJyb3IodGhpcy5uZ0NvbnRyb2wpIDogbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLmdldE1lc3NhZ2VTZWxlY3RvcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZVdyYXBwZXIgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRNZXNzYWdlU2VsZWN0b3IoKSk7XG5cbiAgICAgIGlmICghbWVzc2FnZVdyYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvY2F0ZSAnICsgdGhpcy5nZXRNZXNzYWdlU2VsZWN0b3IoKSwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nZXRsYWJlbFNlbGVjdG9yKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWxXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0bGFiZWxTZWxlY3RvcigpKTtcblxuICAgICAgICBpZiAobGFiZWxXcmFwcGVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYXBwZW5kTGFiZWxDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3MobGFiZWxXcmFwcGVyLCB0aGlzLmFwcGVuZExhYmVsQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5hcHBlbmRNZXNzYWdlQ2xhc3MpIHtcbiAgICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MobWVzc2FnZVdyYXBwZXIsIHRoaXMuYXBwZW5kTWVzc2FnZUNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZ2V0SGludFdyYXBwZXJTZWxlY3RvcigpKSB7XG4gICAgICAgIGNvbnN0IGhpbnQgPSBtZXNzYWdlV3JhcHBlci5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0SGludFdyYXBwZXJTZWxlY3RvcigpKTtcblxuICAgICAgICBpZiAoaGludCkge1xuICAgICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGhpbnQsICdkaXNwbGF5JywgZXJyb3IgPyAnbm9uZScgOiAnYmxvY2snKTtcblxuICAgICAgICAgIGlmICh0aGlzLmFwcGVuZEhpbnRDbGFzcykge1xuICAgICAgICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoaGludCwgdGhpcy5hcHBlbmRIaW50Q2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgZXJyb3JXcmFwcGVyID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuZnMtZm9ybS1lcnJvci10YXJnZXQnKTtcbiAgICAgIGlmIChlcnJvcldyYXBwZXIpIHtcbiAgICAgICAgZXJyb3JXcmFwcGVyLnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICB3cmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ25nLWludmFsaWQnKTtcblxuICAgICAgY29uc3Qgc2hvdWxkRXJyb3JCZVJlbmRlcmVkID0gdGhpcy5uZ0NvbnRyb2wuaW52YWxpZFxuICAgICAgICAmJiAodGhpcy5uZ0NvbnRyb2wuZGlydHkgfHwgdGhpcy5mb3JtRGlyZWN0aXZlLm5nRm9ybT8uc3VibWl0dGVkKTtcblxuICAgICAgaWYgKCFzaG91bGRFcnJvckJlUmVuZGVyZWQgfHwgIWVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCduZy1pbnZhbGlkJyk7XG5cbiAgICAgIGVycm9yV3JhcHBlciA9IHJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCAnZnMtZm9ybS1lcnJvci10YXJnZXQnKTtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgdGhpcy5hcHBlbmRFcnJvckNsYXNzKTtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgdGhpcy5hcHBlbmRFcnJvckNsYXNzICsgJy0nICsgZXJyb3IubmFtZSk7XG5cbiAgICAgIGNvbnN0IGVycm9yVGV4dCA9IHJlbmRlcmVyLmNyZWF0ZVRleHQoZXJyb3IubWVzc2FnZSk7XG5cbiAgICAgIHJlbmRlcmVyLmFwcGVuZENoaWxkKGVycm9yV3JhcHBlciwgZXJyb3JUZXh0KTtcbiAgICAgIG1lc3NhZ2VXcmFwcGVyLmFwcGVuZENoaWxkKGVycm9yV3JhcHBlcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFdyYXBwZXIobm9kZSwgY291bnQgPSAwKSB7XG5cbiAgICBpZiAoIW5vZGUgfHwgY291bnQgPiAxMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSAmJiBub2RlLnBhcmVudE5vZGUucXVlcnlTZWxlY3Rvcih0aGlzLmdldFdyYXBwZXJTZWxlY3RvcigpKSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0V3JhcHBlcihub2RlLnBhcmVudE5vZGUsICsrY291bnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGFyZ3MpOiBzdHJpbmcge1xuICAgIHZhbHVlcyhhcmdzKVxuICAgICAgLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXCRcXChcXGRcXCkvLCBuYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RXJyb3IoY29udHJvbFJlZik6IHsgbmFtZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB7XG5cbiAgICBjb25zdCBuYW1lID0ga2V5cyhjb250cm9sUmVmLmNvbnRyb2wuZXJyb3JzKVswXTtcblxuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1lc3NhZ2UgPSBjb250cm9sUmVmLmNvbnRyb2wuZXJyb3JzW25hbWVdO1xuXG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXNbbmFtZV0pIHtcbiAgICAgIG1lc3NhZ2UgPSB0aGlzLnBhcnNlRXJyb3JNZXNzYWdlKHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXNbbmFtZV0sIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG5hbWU6IG5hbWUsIG1lc3NhZ2U6IG1lc3NhZ2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5fY29udHJvbDtcblxuICAgIGlmICh0aGlzLnZhbGlkYXRlKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gY29udHJvbC52YWxpZGF0b3JcbiAgICAgICAgPyBbIGNvbnRyb2wudmFsaWRhdG9yLCB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyldXG4gICAgICAgIDogdGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsaWRhdGVBc3luYykge1xuICAgICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzID0gY29udHJvbC5hc3luY1ZhbGlkYXRvclxuICAgICAgICA/IFsgY29udHJvbC5hc3luY1ZhbGlkYXRvciwgdGhpcy52YWxpZGF0ZUFzeW5jLmJpbmQodGhpcyldXG4gICAgICAgIDogdGhpcy52YWxpZGF0ZUFzeW5jLmJpbmQodGhpcyk7XG5cbiAgICAgIGNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxufVxuIl19
@@ -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==