@lagoshny/ngx-validation-messages 3.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 (30) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +427 -426
  3. package/{esm2020 → esm2022}/lagoshny-ngx-validation-messages.mjs +4 -4
  4. package/esm2022/lib/components/ngx-custom-message/ngx-custom-message.component.mjs +40 -0
  5. package/esm2022/lib/components/ngx-validation-messages/ngx-validation-messages.component.mjs +112 -0
  6. package/esm2022/lib/directivies/ngx-validator-name.directive.mjs +38 -0
  7. package/esm2022/lib/interface/ngx-validation-messages.config.mjs +3 -0
  8. package/esm2022/lib/ngx-validation-messages.module.mjs +56 -0
  9. package/esm2022/lib/service/ngx-validation-messages.service.mjs +73 -0
  10. package/{esm2020 → esm2022}/public-api.mjs +5 -5
  11. package/{fesm2020 → fesm2022}/lagoshny-ngx-validation-messages.mjs +284 -253
  12. package/fesm2022/lagoshny-ngx-validation-messages.mjs.map +1 -0
  13. package/{lagoshny-ngx-validation-messages.d.ts → index.d.ts} +5 -5
  14. package/lib/components/ngx-custom-message/ngx-custom-message.component.d.ts +20 -20
  15. package/lib/components/ngx-validation-messages/ngx-validation-messages.component.d.ts +40 -40
  16. package/lib/directivies/ngx-validator-name.directive.d.ts +25 -25
  17. package/lib/interface/ngx-validation-messages.config.d.ts +17 -17
  18. package/lib/ngx-validation-messages.module.d.ts +18 -18
  19. package/lib/service/ngx-validation-messages.service.d.ts +37 -37
  20. package/package.json +8 -13
  21. package/public-api.d.ts +1 -1
  22. package/esm2020/lib/components/ngx-custom-message/ngx-custom-message.component.mjs +0 -32
  23. package/esm2020/lib/components/ngx-validation-messages/ngx-validation-messages.component.mjs +0 -97
  24. package/esm2020/lib/directivies/ngx-validator-name.directive.mjs +0 -29
  25. package/esm2020/lib/interface/ngx-validation-messages.config.mjs +0 -3
  26. package/esm2020/lib/ngx-validation-messages.module.mjs +0 -58
  27. package/esm2020/lib/service/ngx-validation-messages.service.mjs +0 -72
  28. package/fesm2015/lagoshny-ngx-validation-messages.mjs +0 -282
  29. package/fesm2015/lagoshny-ngx-validation-messages.mjs.map +0 -1
  30. package/fesm2020/lagoshny-ngx-validation-messages.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFnb3Nobnktbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmFsaWRhdGlvbi1tZXNzYWdlcy9zcmMvbGFnb3Nobnktbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { Component, ElementRef, Input, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Component allows specifying custom validation message for the specified
5
+ * validator to override default message.
6
+ *
7
+ * Use this component as child in {@link NgxValidationMessagesComponent}.
8
+ */
9
+ export class NgxCustomMessageComponent {
10
+ /**
11
+ * The name of the validator for which you want to override the message.
12
+ */
13
+ validatorName;
14
+ /**
15
+ * Contains overridden message for validator.
16
+ */
17
+ message;
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxCustomMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgxCustomMessageComponent, selector: "ngx-custom-message", inputs: { validatorName: ["forValidator", "validatorName"] }, viewQueries: [{ propertyName: "message", first: true, predicate: ["message"], descendants: true }], ngImport: i0, template: `
20
+ <div #message>
21
+ <ng-content></ng-content>
22
+ </div>`, isInline: true });
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxCustomMessageComponent, decorators: [{
25
+ type: Component,
26
+ args: [{
27
+ selector: 'ngx-custom-message',
28
+ template: `
29
+ <div #message>
30
+ <ng-content></ng-content>
31
+ </div>`
32
+ }]
33
+ }], propDecorators: { validatorName: [{
34
+ type: Input,
35
+ args: ['forValidator']
36
+ }], message: [{
37
+ type: ViewChild,
38
+ args: ['message']
39
+ }] } });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWN1c3RvbS1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzL3NyYy9saWIvY29tcG9uZW50cy9uZ3gtY3VzdG9tLW1lc3NhZ2Uvbmd4LWN1c3RvbS1tZXNzYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUV4RTs7Ozs7R0FLRztBQVFILE1BQU0sT0FBTyx5QkFBeUI7SUFFcEM7O09BRUc7SUFFSSxhQUFhLENBQVM7SUFFN0I7O09BRUc7SUFFSSxPQUFPLENBQWE7d0dBWmhCLHlCQUF5Qjs0RkFBekIseUJBQXlCLDROQUwxQjs7O1dBR0Q7OzRGQUVFLHlCQUF5QjtrQkFQckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUU7OztXQUdEO2lCQUNWOzhCQU9RLGFBQWE7c0JBRG5CLEtBQUs7dUJBQUMsY0FBYztnQkFPZCxPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIENvbXBvbmVudCBhbGxvd3Mgc3BlY2lmeWluZyBjdXN0b20gdmFsaWRhdGlvbiBtZXNzYWdlIGZvciB0aGUgc3BlY2lmaWVkXG4gKiB2YWxpZGF0b3IgdG8gb3ZlcnJpZGUgZGVmYXVsdCBtZXNzYWdlLlxuICpcbiAqIFVzZSB0aGlzIGNvbXBvbmVudCBhcyBjaGlsZCBpbiB7QGxpbmsgTmd4VmFsaWRhdGlvbk1lc3NhZ2VzQ29tcG9uZW50fS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWN1c3RvbS1tZXNzYWdlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICNtZXNzYWdlPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PmBcbn0pXG5leHBvcnQgY2xhc3MgTmd4Q3VzdG9tTWVzc2FnZUNvbXBvbmVudCB7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB2YWxpZGF0b3IgZm9yIHdoaWNoIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgQElucHV0KCdmb3JWYWxpZGF0b3InKVxuICBwdWJsaWMgdmFsaWRhdG9yTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBvdmVycmlkZGVuIG1lc3NhZ2UgZm9yIHZhbGlkYXRvci5cbiAgICovXG4gIEBWaWV3Q2hpbGQoJ21lc3NhZ2UnKVxuICBwdWJsaWMgbWVzc2FnZTogRWxlbWVudFJlZjtcblxufVxuIl19
@@ -0,0 +1,112 @@
1
+ import { Component, ContentChildren, ElementRef, Inject, Input } from '@angular/core';
2
+ import { NgxValidatorNameDirective } from '../../directivies/ngx-validator-name.directive';
3
+ import { NGX_VALIDATION_MESSAGES_CONFIG } from '../../interface/ngx-validation-messages.config';
4
+ import { NgxValidationMessagesService } from '../../service/ngx-validation-messages.service';
5
+ import { NgxCustomMessageComponent } from '../ngx-custom-message/ngx-custom-message.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../service/ngx-validation-messages.service";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "@angular/material/form-field";
10
+ /**
11
+ * Component for displaying validation messages, supports child components of type {@link NgxCustomMessageComponent}
12
+ * and html elements with directive {@link NgxValidatorNameDirective} to override validation messages.
13
+ */
14
+ export class NgxValidationMessagesComponent {
15
+ ngxValidationConfig;
16
+ ngxValidationMessagesService;
17
+ directiveElementRef;
18
+ /**
19
+ * Form control for which need to show validation messages.
20
+ */
21
+ formControl;
22
+ /**
23
+ * Contains {@link NgxCustomMessageComponent} if present.
24
+ */
25
+ customMsgComponent;
26
+ /**
27
+ * Contains {@link NgxValidatorNameDirective} if present.
28
+ */
29
+ customMsgDirective;
30
+ isMaterialError = false;
31
+ /**
32
+ * Key to get default validation message.
33
+ */
34
+ defaultError = 'error';
35
+ materialErrorElement = 'MAT-ERROR';
36
+ constructor(ngxValidationConfig, ngxValidationMessagesService, directiveElementRef) {
37
+ this.ngxValidationConfig = ngxValidationConfig;
38
+ this.ngxValidationMessagesService = ngxValidationMessagesService;
39
+ this.directiveElementRef = directiveElementRef;
40
+ }
41
+ ngAfterViewInit() {
42
+ if (this.directiveElementRef && this.directiveElementRef.nativeElement
43
+ && this.directiveElementRef.nativeElement.nodeName) {
44
+ this.isMaterialError = this.materialErrorElement.toLocaleUpperCase()
45
+ === this.directiveElementRef.nativeElement.nodeName.toLocaleUpperCase();
46
+ }
47
+ }
48
+ /**
49
+ * Get all validation messages for specified form control.
50
+ */
51
+ get errorMessages() {
52
+ const result = [];
53
+ if (!this.formControl || !this.formControl.errors) {
54
+ return result;
55
+ }
56
+ if (this.customMsgComponent && this.customMsgComponent.length > 0) {
57
+ this.processingCustomMessages(this.customMsgComponent);
58
+ }
59
+ if (this.customMsgDirective && this.customMsgDirective.length > 0) {
60
+ this.processingCustomMessages(this.customMsgDirective);
61
+ }
62
+ for (const property in this.formControl.errors) {
63
+ if (this.formControl.errors.hasOwnProperty(property)
64
+ && (this.formControl.touched || this.formControl.dirty)) {
65
+ if (this.formControl.errors[property].customMessages instanceof Array) {
66
+ result.push(...this.formControl.errors[property].customMessages);
67
+ continue;
68
+ }
69
+ if (this.formControl.errors[property].customMessage) {
70
+ result.push(this.formControl.errors[property].customMessage);
71
+ continue;
72
+ }
73
+ const validationMessage = this.ngxValidationMessagesService.getValidatorErrorMessages(property, this.formControl.errors[property]);
74
+ result.push(validationMessage || this.formControl.errors[property].message
75
+ || this.ngxValidationMessagesService.getValidatorErrorMessages(this.defaultError));
76
+ }
77
+ }
78
+ return result;
79
+ }
80
+ processingCustomMessages(customMessage) {
81
+ customMessage.forEach((msg) => {
82
+ if (!this.formControl.errors[msg.validatorName]) {
83
+ return;
84
+ }
85
+ let message = (msg instanceof NgxCustomMessageComponent)
86
+ ? msg.message.nativeElement.innerText : msg.message;
87
+ message = this.ngxValidationMessagesService.expandParameterizedTemplateMessage(message, this.formControl.errors[msg.validatorName]);
88
+ typeof this.formControl.errors[msg.validatorName] === 'object'
89
+ ? this.formControl.errors[msg.validatorName].customMessage = message
90
+ : this.formControl.errors[msg.validatorName] = { customMessage: message };
91
+ });
92
+ }
93
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesComponent, deps: [{ token: NGX_VALIDATION_MESSAGES_CONFIG }, { token: i1.NgxValidationMessagesService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
94
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgxValidationMessagesComponent, selector: "ngx-validation-messages, [ngxValidationMessages]", inputs: { formControl: ["for", "formControl"] }, queries: [{ propertyName: "customMsgComponent", predicate: NgxCustomMessageComponent }, { propertyName: "customMsgDirective", predicate: NgxValidatorNameDirective }], ngImport: i0, template: "<!--To show error messages standalone without component-->\n<div *ngIf=\"!formControl && customMsgComponent.length == 0 && customMsgDirective.length == 0\"\n [ngClass]=\"ngxValidationConfig?.validationMessagesStyle?.blockClassNames || 'ngx_vm__def_error_block'\">\n <span [ngClass]=\"ngxValidationConfig?.validationMessagesStyle?.textClassNames || 'ngx_vm__def_error_text'\">\n <ng-content></ng-content>\n </span>\n</div>\n\n<ng-container *ngIf=\"errorMessages.length > 0\">\n\n <!--To show error messages in material ui style-->\n <ng-container *ngIf=\"isMaterialError; else withoutMaterial\">\n <ng-container *ngFor=\"let message of errorMessages\">\n <mat-error>{{ message }}</mat-error>\n </ng-container>\n </ng-container>\n\n <!--To show error messages in user style-->\n <ng-template #withoutMaterial>\n <div [ngClass]=\"ngxValidationConfig?.validationMessagesStyle?.blockClassNames || 'ngx_vm__def_error_block'\">\n <div *ngFor=\"let message of errorMessages\">\n <span [ngClass]=\"ngxValidationConfig?.validationMessagesStyle?.textClassNames || 'ngx_vm__def_error_text'\">\n {{ message }}\n </span>\n </div>\n </div>\n </ng-template>\n\n</ng-container>\n", styles: [".ngx_vm__def_error_block{position:relative;display:inline-block;width:100%;margin-bottom:10px;margin-top:2px;padding:8px;border-radius:0;background:#c51244;box-shadow:1px 1px 1px #aaa;opacity:.8}.ngx_vm__def_error_text{color:#fff}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }] });
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesComponent, decorators: [{
97
+ type: Component,
98
+ args: [{ selector: 'ngx-validation-messages, [ngxValidationMessages]', template: "<!--To show error messages standalone without component-->\n<div *ngIf=\"!formControl && customMsgComponent.length == 0 && customMsgDirective.length == 0\"\n [ngClass]=\"ngxValidationConfig?.validationMessagesStyle?.blockClassNames || 'ngx_vm__def_error_block'\">\n <span [ngClass]=\"ngxValidationConfig?.validationMessagesStyle?.textClassNames || 'ngx_vm__def_error_text'\">\n <ng-content></ng-content>\n </span>\n</div>\n\n<ng-container *ngIf=\"errorMessages.length > 0\">\n\n <!--To show error messages in material ui style-->\n <ng-container *ngIf=\"isMaterialError; else withoutMaterial\">\n <ng-container *ngFor=\"let message of errorMessages\">\n <mat-error>{{ message }}</mat-error>\n </ng-container>\n </ng-container>\n\n <!--To show error messages in user style-->\n <ng-template #withoutMaterial>\n <div [ngClass]=\"ngxValidationConfig?.validationMessagesStyle?.blockClassNames || 'ngx_vm__def_error_block'\">\n <div *ngFor=\"let message of errorMessages\">\n <span [ngClass]=\"ngxValidationConfig?.validationMessagesStyle?.textClassNames || 'ngx_vm__def_error_text'\">\n {{ message }}\n </span>\n </div>\n </div>\n </ng-template>\n\n</ng-container>\n", styles: [".ngx_vm__def_error_block{position:relative;display:inline-block;width:100%;margin-bottom:10px;margin-top:2px;padding:8px;border-radius:0;background:#c51244;box-shadow:1px 1px 1px #aaa;opacity:.8}.ngx_vm__def_error_text{color:#fff}\n"] }]
99
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
100
+ type: Inject,
101
+ args: [NGX_VALIDATION_MESSAGES_CONFIG]
102
+ }] }, { type: i1.NgxValidationMessagesService }, { type: i0.ElementRef }]; }, propDecorators: { formControl: [{
103
+ type: Input,
104
+ args: ['for']
105
+ }], customMsgComponent: [{
106
+ type: ContentChildren,
107
+ args: [NgxCustomMessageComponent]
108
+ }], customMsgDirective: [{
109
+ type: ContentChildren,
110
+ args: [NgxValidatorNameDirective]
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMvc3JjL2xpYi9jb21wb25lbnRzL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzL3NyYy9saWIvY29tcG9uZW50cy9uZ3gtdmFsaWRhdGlvbi1tZXNzYWdlcy9uZ3gtdmFsaWRhdGlvbi1tZXNzYWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDM0YsT0FBTyxFQUNMLDhCQUE4QixFQUUvQixNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7OztBQUUvRjs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sOEJBQThCO0lBNkJrQjtJQUN2QztJQUNBO0lBN0JwQjs7T0FFRztJQUVJLFdBQVcsQ0FBTTtJQUV4Qjs7T0FFRztJQUVJLGtCQUFrQixDQUFDO0lBRTFCOztPQUVHO0lBRUksa0JBQWtCLENBQUM7SUFFbkIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUUvQjs7T0FFRztJQUNLLFlBQVksR0FBRyxPQUFPLENBQUM7SUFFdkIsb0JBQW9CLEdBQUcsV0FBVyxDQUFDO0lBRTNDLFlBQTJELG1CQUFnRCxFQUN2Riw0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bnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hWYWxpZGF0b3JOYW1lRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZpZXMvbmd4LXZhbGlkYXRvci1uYW1lLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBOR1hfVkFMSURBVElPTl9NRVNTQUdFU19DT05GSUcsXG4gIE5neFZhbGlkYXRpb25NZXNzYWdlc0NvbmZpZ1xufSBmcm9tICcuLi8uLi9pbnRlcmZhY2Uvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuY29uZmlnJztcbmltcG9ydCB7IE5neFZhbGlkYXRpb25NZXNzYWdlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd4Q3VzdG9tTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uL25neC1jdXN0b20tbWVzc2FnZS9uZ3gtY3VzdG9tLW1lc3NhZ2UuY29tcG9uZW50JztcblxuLyoqXG4gKiBDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgdmFsaWRhdGlvbiBtZXNzYWdlcywgc3VwcG9ydHMgY2hpbGQgY29tcG9uZW50cyBvZiB0eXBlIHtAbGluayBOZ3hDdXN0b21NZXNzYWdlQ29tcG9uZW50fVxuICogYW5kIGh0bWwgZWxlbWVudHMgd2l0aCBkaXJlY3RpdmUge0BsaW5rIE5neFZhbGlkYXRvck5hbWVEaXJlY3RpdmV9IHRvIG92ZXJyaWRlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC12YWxpZGF0aW9uLW1lc3NhZ2VzLCBbbmd4VmFsaWRhdGlvbk1lc3NhZ2VzXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtdmFsaWRhdGlvbi1tZXNzYWdlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmd4VmFsaWRhdGlvbk1lc3NhZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyoqXG4gICAqIEZvcm0gY29udHJvbCBmb3Igd2hpY2ggbmVlZCB0byBzaG93IHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gICAqL1xuICBASW5wdXQoJ2ZvcicpXG4gIHB1YmxpYyBmb3JtQ29udHJvbDogYW55O1xuXG4gIC8qKlxuICAgKiBDb250YWlucyB7QGxpbmsgTmd4Q3VzdG9tTWVzc2FnZUNvbXBvbmVudH0gaWYgcHJlc2VudC5cbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oTmd4Q3VzdG9tTWVzc2FnZUNvbXBvbmVudClcbiAgcHVibGljIGN1c3RvbU1zZ0NvbXBvbmVudDtcblxuICAvKipcbiAgICogQ29udGFpbnMge0BsaW5rIE5neFZhbGlkYXRvck5hbWVEaXJlY3RpdmV9IGlmIHByZXNlbnQuXG4gICAqL1xuICBAQ29udGVudENoaWxkcmVuKE5neFZhbGlkYXRvck5hbWVEaXJlY3RpdmUpXG4gIHB1YmxpYyBjdXN0b21Nc2dEaXJlY3RpdmU7XG5cbiAgcHVibGljIGlzTWF0ZXJpYWxFcnJvciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBLZXkgdG8gZ2V0IGRlZmF1bHQgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RXJyb3IgPSAnZXJyb3InO1xuXG4gIHByaXZhdGUgbWF0ZXJpYWxFcnJvckVsZW1lbnQgPSAnTUFULUVSUk9SJztcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5HWF9WQUxJREFUSU9OX01FU1NBR0VTX0NPTkZJRykgcHVibGljIG5neFZhbGlkYXRpb25Db25maWc6IE5neFZhbGlkYXRpb25NZXNzYWdlc0NvbmZpZyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBuZ3hWYWxpZGF0aW9uTWVzc2FnZXNTZXJ2aWNlOiBOZ3hWYWxpZGF0aW9uTWVzc2FnZXNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGRpcmVjdGl2ZUVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZiAmJiB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgJiYgdGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUpIHtcbiAgICAgIHRoaXMuaXNNYXRlcmlhbEVycm9yID0gdGhpcy5tYXRlcmlhbEVycm9yRWxlbWVudC50b0xvY2FsZVVwcGVyQ2FzZSgpXG4gICAgICAgID09PSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHZhbGlkYXRpb24gbWVzc2FnZXMgZm9yIHNwZWNpZmllZCBmb3JtIGNvbnRyb2wuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVycm9yTWVzc2FnZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wgfHwgIXRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAodGhpcy5jdXN0b21Nc2dDb21wb25lbnQgJiYgdGhpcy5jdXN0b21Nc2dDb21wb25lbnQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nQ3VzdG9tTWVzc2FnZXModGhpcy5jdXN0b21Nc2dDb21wb25lbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jdXN0b21Nc2dEaXJlY3RpdmUgJiYgdGhpcy5jdXN0b21Nc2dEaXJlY3RpdmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nQ3VzdG9tTWVzc2FnZXModGhpcy5jdXN0b21Nc2dEaXJlY3RpdmUpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5mb3JtQ29udHJvbC5lcnJvcnMpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLmVycm9ycy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSlcbiAgICAgICAgJiYgKHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLmZvcm1Db250cm9sLmRpcnR5KSkge1xuICAgICAgICBpZiAodGhpcy5mb3JtQ29udHJvbC5lcnJvcnNbcHJvcGVydHldLmN1c3RvbU1lc3NhZ2VzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZvcm1Db250cm9sLmVycm9yc1twcm9wZXJ0eV0uY3VzdG9tTWVzc2FnZXMpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLmVycm9yc1twcm9wZXJ0eV0uY3VzdG9tTWVzc2FnZSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzW3Byb3BlcnR5XS5jdXN0b21NZXNzYWdlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nID1cbiAgICAgICAgICB0aGlzLm5neFZhbGlkYXRpb25NZXNzYWdlc1NlcnZpY2UuZ2V0VmFsaWRhdG9yRXJyb3JNZXNzYWdlcyhwcm9wZXJ0eSwgdGhpcy5mb3JtQ29udHJvbC5lcnJvcnNbcHJvcGVydHldKTtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsaWRhdGlvbk1lc3NhZ2UgfHwgdGhpcy5mb3JtQ29udHJvbC5lcnJvcnNbcHJvcGVydHldLm1lc3NhZ2VcbiAgICAgICAgICB8fCB0aGlzLm5neFZhbGlkYXRpb25NZXNzYWdlc1NlcnZpY2UuZ2V0VmFsaWRhdG9yRXJyb3JNZXNzYWdlcyh0aGlzLmRlZmF1bHRFcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzaW5nQ3VzdG9tTWVzc2FnZXMoY3VzdG9tTWVzc2FnZTogUXVlcnlMaXN0PGFueT4pOiB2b2lkIHtcbiAgICBjdXN0b21NZXNzYWdlLmZvckVhY2goKG1zZzogYW55KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzW21zZy52YWxpZGF0b3JOYW1lXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgbWVzc2FnZSA9IChtc2cgaW5zdGFuY2VvZiBOZ3hDdXN0b21NZXNzYWdlQ29tcG9uZW50KVxuICAgICAgICA/IG1zZy5tZXNzYWdlLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0IDogbXNnLm1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0gdGhpcy5uZ3hWYWxpZGF0aW9uTWVzc2FnZXNTZXJ2aWNlLmV4cGFuZFBhcmFtZXRlcml6ZWRUZW1wbGF0ZU1lc3NhZ2UobWVzc2FnZSwgdGhpcy5mb3JtQ29udHJvbC5lcnJvcnNbbXNnLnZhbGlkYXRvck5hbWVdKTtcblxuICAgICAgdHlwZW9mIHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzW21zZy52YWxpZGF0b3JOYW1lXSA9PT0gJ29iamVjdCdcbiAgICAgICAgPyB0aGlzLmZvcm1Db250cm9sLmVycm9yc1ttc2cudmFsaWRhdG9yTmFtZV0uY3VzdG9tTWVzc2FnZSA9IG1lc3NhZ2VcbiAgICAgICAgOiB0aGlzLmZvcm1Db250cm9sLmVycm9yc1ttc2cudmFsaWRhdG9yTmFtZV0gPSB7Y3VzdG9tTWVzc2FnZTogbWVzc2FnZX07XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPCEtLVRvIHNob3cgZXJyb3IgbWVzc2FnZXMgc3RhbmRhbG9uZSB3aXRob3V0IGNvbXBvbmVudC0tPlxuPGRpdiAqbmdJZj1cIiFmb3JtQ29udHJvbCAmJiBjdXN0b21Nc2dDb21wb25lbnQubGVuZ3RoID09IDAgJiYgY3VzdG9tTXNnRGlyZWN0aXZlLmxlbmd0aCA9PSAwXCJcbiAgICAgW25nQ2xhc3NdPVwibmd4VmFsaWRhdGlvbkNvbmZpZz8udmFsaWRhdGlvbk1lc3NhZ2VzU3R5bGU/LmJsb2NrQ2xhc3NOYW1lcyB8fCAnbmd4X3ZtX19kZWZfZXJyb3JfYmxvY2snXCI+XG4gPHNwYW4gW25nQ2xhc3NdPVwibmd4VmFsaWRhdGlvbkNvbmZpZz8udmFsaWRhdGlvbk1lc3NhZ2VzU3R5bGU/LnRleHRDbGFzc05hbWVzIHx8ICduZ3hfdm1fX2RlZl9lcnJvcl90ZXh0J1wiPlxuICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIDwvc3Bhbj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCI+XG5cbiAgPCEtLVRvIHNob3cgZXJyb3IgbWVzc2FnZXMgaW4gbWF0ZXJpYWwgdWkgc3R5bGUtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTWF0ZXJpYWxFcnJvcjsgZWxzZSB3aXRob3V0TWF0ZXJpYWxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIj5cbiAgICAgIDxtYXQtZXJyb3I+e3sgbWVzc2FnZSB9fTwvbWF0LWVycm9yPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tVG8gc2hvdyBlcnJvciBtZXNzYWdlcyBpbiB1c2VyIHN0eWxlLS0+XG4gIDxuZy10ZW1wbGF0ZSAjd2l0aG91dE1hdGVyaWFsPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwibmd4VmFsaWRhdGlvbkNvbmZpZz8udmFsaWRhdGlvbk1lc3NhZ2VzU3R5bGU/LmJsb2NrQ2xhc3NOYW1lcyB8fCAnbmd4X3ZtX19kZWZfZXJyb3JfYmxvY2snXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIj5cbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwibmd4VmFsaWRhdGlvbkNvbmZpZz8udmFsaWRhdGlvbk1lc3NhZ2VzU3R5bGU/LnRleHRDbGFzc05hbWVzIHx8ICduZ3hfdm1fX2RlZl9lcnJvcl90ZXh0J1wiPlxuICAgICAgICAgIHt7IG1lc3NhZ2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -0,0 +1,38 @@
1
+ import { Directive, ElementRef, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Allows to specify custom validator message to override default message.
5
+ *
6
+ * It's alternative for {@link NgxCustomMessageComponent}.
7
+ * If you want to use standard html tags to define custom message, use this directive on html tag within
8
+ * {@link NgxValidationMessagesComponent} specifying validator name as directive parameter,
9
+ * otherwise use {@link NgxCustomMessageComponent}.
10
+ */
11
+ export class NgxValidatorNameDirective {
12
+ elem;
13
+ /**
14
+ * The name of the validator for which you want to override the message.
15
+ */
16
+ validatorName;
17
+ /**
18
+ * Contains overridden message for validator.
19
+ */
20
+ message;
21
+ constructor(elem) {
22
+ this.elem = elem;
23
+ }
24
+ ngAfterViewInit() {
25
+ this.message = this.elem.nativeElement.innerText;
26
+ }
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidatorNameDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
28
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NgxValidatorNameDirective, selector: "[ngxValidatorName]", inputs: { validatorName: "validatorName" }, ngImport: i0 });
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidatorNameDirective, decorators: [{
31
+ type: Directive,
32
+ args: [{
33
+ selector: '[ngxValidatorName]'
34
+ }]
35
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { validatorName: [{
36
+ type: Input
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXZhbGlkYXRvci1uYW1lLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzL3NyYy9saWIvZGlyZWN0aXZpZXMvbmd4LXZhbGlkYXRvci1uYW1lLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUU1RTs7Ozs7OztHQU9HO0FBSUgsTUFBTSxPQUFPLHlCQUF5QjtJQWFoQjtJQVhwQjs7T0FFRztJQUVJLGFBQWEsQ0FBUztJQUU3Qjs7T0FFRztJQUNJLE9BQU8sQ0FBUztJQUV2QixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3BDLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQ25ELENBQUM7d0dBbEJVLHlCQUF5Qjs0RkFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUhyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7aUJBQy9CO2lHQU9RLGFBQWE7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQWxsb3dzIHRvIHNwZWNpZnkgY3VzdG9tIHZhbGlkYXRvciBtZXNzYWdlIHRvIG92ZXJyaWRlIGRlZmF1bHQgbWVzc2FnZS5cbiAqXG4gKiBJdCdzIGFsdGVybmF0aXZlIGZvciB7QGxpbmsgTmd4Q3VzdG9tTWVzc2FnZUNvbXBvbmVudH0uXG4gKiBJZiB5b3Ugd2FudCB0byB1c2Ugc3RhbmRhcmQgaHRtbCB0YWdzIHRvIGRlZmluZSBjdXN0b20gbWVzc2FnZSwgdXNlIHRoaXMgZGlyZWN0aXZlIG9uIGh0bWwgdGFnIHdpdGhpblxuICoge0BsaW5rIE5neFZhbGlkYXRpb25NZXNzYWdlc0NvbXBvbmVudH0gc3BlY2lmeWluZyB2YWxpZGF0b3IgbmFtZSBhcyBkaXJlY3RpdmUgcGFyYW1ldGVyLFxuICogb3RoZXJ3aXNlIHVzZSB7QGxpbmsgTmd4Q3VzdG9tTWVzc2FnZUNvbXBvbmVudH0uXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ3hWYWxpZGF0b3JOYW1lXSdcbn0pXG5leHBvcnQgY2xhc3MgTmd4VmFsaWRhdG9yTmFtZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGZvciB3aGljaCB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgbWVzc2FnZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWxpZGF0b3JOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIG92ZXJyaWRkZW4gbWVzc2FnZSBmb3IgdmFsaWRhdG9yLlxuICAgKi9cbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW06IEVsZW1lbnRSZWYpIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlID0gdGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0O1xuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const NGX_VALIDATION_MESSAGES_CONFIG = new InjectionToken('NgxValidationMessagesConfig');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMvc3JjL2xpYi9pbnRlcmZhY2Uvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQ3ZDLElBQUksY0FBYyxDQUE4Qiw2QkFBNkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IE5HWF9WQUxJREFUSU9OX01FU1NBR0VTX0NPTkZJRzogSW5qZWN0aW9uVG9rZW48Tmd4VmFsaWRhdGlvbk1lc3NhZ2VzQ29uZmlnPlxuICA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3hWYWxpZGF0aW9uTWVzc2FnZXNDb25maWc+KCdOZ3hWYWxpZGF0aW9uTWVzc2FnZXNDb25maWcnKTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3hWYWxpZGF0aW9uTWVzc2FnZXNDb25maWcge1xuXG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbnMgdmFsaWRhdGlvbiBtZXNzYWdlcyBpbiB2YWxpZGF0b3JOYW1lOiB2YWxpZGF0b3JNZXNzYWdlIGZvcm1hdC5cbiAgICovXG4gIG1lc3NhZ2VzOiB7XG4gICAgW3ZhbGlkYXRvck5hbWU6IHN0cmluZ106IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogRGVmaW5lIGN1c3RvbSBzdHlsZXMgdG8gZGlzcGxheSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICAgKi9cbiAgdmFsaWRhdGlvbk1lc3NhZ2VzU3R5bGU/OiB7XG4gICAgYmxvY2tDbGFzc05hbWVzPzogc3RyaW5nO1xuICAgIHRleHRDbGFzc05hbWVzPzogc3RyaW5nO1xuICB9O1xuXG59XG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { NgxCustomMessageComponent } from './components/ngx-custom-message/ngx-custom-message.component';
4
+ import { NgxValidationMessagesComponent } from './components/ngx-validation-messages/ngx-validation-messages.component';
5
+ import { NgxValidatorNameDirective } from './directivies/ngx-validator-name.directive';
6
+ import { NGX_VALIDATION_MESSAGES_CONFIG } from './interface/ngx-validation-messages.config';
7
+ import { NgxValidationMessagesService } from './service/ngx-validation-messages.service';
8
+ import { MatFormFieldModule } from '@angular/material/form-field';
9
+ import * as i0 from "@angular/core";
10
+ export { NGX_VALIDATION_MESSAGES_CONFIG } from './interface/ngx-validation-messages.config';
11
+ export { NgxCustomMessageComponent } from './components/ngx-custom-message/ngx-custom-message.component';
12
+ export { NgxValidationMessagesComponent } from './components/ngx-validation-messages/ngx-validation-messages.component';
13
+ export { NgxValidatorNameDirective } from './directivies/ngx-validator-name.directive';
14
+ export class NgxValidationMessagesModule {
15
+ static forRoot(config) {
16
+ return {
17
+ ngModule: NgxValidationMessagesModule,
18
+ providers: [
19
+ NgxValidationMessagesService,
20
+ {
21
+ provide: NGX_VALIDATION_MESSAGES_CONFIG,
22
+ useValue: config
23
+ }
24
+ ]
25
+ };
26
+ }
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
28
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesModule, declarations: [NgxValidationMessagesComponent,
29
+ NgxCustomMessageComponent,
30
+ NgxValidatorNameDirective], imports: [CommonModule,
31
+ MatFormFieldModule], exports: [NgxValidationMessagesComponent,
32
+ NgxCustomMessageComponent,
33
+ NgxValidatorNameDirective] });
34
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesModule, imports: [CommonModule,
35
+ MatFormFieldModule] });
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesModule, decorators: [{
38
+ type: NgModule,
39
+ args: [{
40
+ imports: [
41
+ CommonModule,
42
+ MatFormFieldModule,
43
+ ],
44
+ declarations: [
45
+ NgxValidationMessagesComponent,
46
+ NgxCustomMessageComponent,
47
+ NgxValidatorNameDirective
48
+ ],
49
+ exports: [
50
+ NgxValidationMessagesComponent,
51
+ NgxCustomMessageComponent,
52
+ NgxValidatorNameDirective
53
+ ]
54
+ }]
55
+ }] });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXZhbGlkYXRpb24tbWVzc2FnZXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMvc3JjL2xpYi9uZ3gtdmFsaWRhdGlvbi1tZXNzYWdlcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBc0IsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHdFQUF3RSxDQUFDO0FBQ3RILE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyw4QkFBOEIsRUFBOEIsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2SCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7QUFFaEUsT0FBTyxFQUFDLDhCQUE4QixFQUE4QixNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZILE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHdFQUF3RSxDQUFDO0FBQ3RILE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBa0JyRixNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBbUM7UUFDaEQsT0FBTztZQUNMLFFBQVEsRUFBRSwyQkFBMkI7WUFDckMsU0FBUyxFQUFFO2dCQUNULDRCQUE0QjtnQkFDNUI7b0JBQ0UsT0FBTyxFQUFFLDhCQUE4QjtvQkFDdkMsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzt3R0FaVSwyQkFBMkI7eUdBQTNCLDJCQUEyQixpQkFWcEMsOEJBQThCO1lBQzlCLHlCQUF5QjtZQUN6Qix5QkFBeUIsYUFOekIsWUFBWTtZQUNaLGtCQUFrQixhQVFsQiw4QkFBOEI7WUFDOUIseUJBQXlCO1lBQ3pCLHlCQUF5Qjt5R0FHaEIsMkJBQTJCLFlBZHBDLFlBQVk7WUFDWixrQkFBa0I7OzRGQWFULDJCQUEyQjtrQkFoQnZDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osa0JBQWtCO3FCQUNuQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osOEJBQThCO3dCQUM5Qix5QkFBeUI7d0JBQ3pCLHlCQUF5QjtxQkFDMUI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDhCQUE4Qjt3QkFDOUIseUJBQXlCO3dCQUN6Qix5QkFBeUI7cUJBQzFCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Tmd4Q3VzdG9tTWVzc2FnZUNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL25neC1jdXN0b20tbWVzc2FnZS9uZ3gtY3VzdG9tLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7Tmd4VmFsaWRhdGlvbk1lc3NhZ2VzQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuY29tcG9uZW50JztcbmltcG9ydCB7Tmd4VmFsaWRhdG9yTmFtZURpcmVjdGl2ZX0gZnJvbSAnLi9kaXJlY3Rpdmllcy9uZ3gtdmFsaWRhdG9yLW5hbWUuZGlyZWN0aXZlJztcbmltcG9ydCB7TkdYX1ZBTElEQVRJT05fTUVTU0FHRVNfQ09ORklHLCBOZ3hWYWxpZGF0aW9uTWVzc2FnZXNDb25maWd9IGZyb20gJy4vaW50ZXJmYWNlL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzLmNvbmZpZyc7XG5pbXBvcnQge05neFZhbGlkYXRpb25NZXNzYWdlc1NlcnZpY2V9IGZyb20gJy4vc2VydmljZS9uZ3gtdmFsaWRhdGlvbi1tZXNzYWdlcy5zZXJ2aWNlJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuZXhwb3J0IHtOR1hfVkFMSURBVElPTl9NRVNTQUdFU19DT05GSUcsIE5neFZhbGlkYXRpb25NZXNzYWdlc0NvbmZpZ30gZnJvbSAnLi9pbnRlcmZhY2Uvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuY29uZmlnJztcbmV4cG9ydCB7Tmd4Q3VzdG9tTWVzc2FnZUNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL25neC1jdXN0b20tbWVzc2FnZS9uZ3gtY3VzdG9tLW1lc3NhZ2UuY29tcG9uZW50JztcbmV4cG9ydCB7Tmd4VmFsaWRhdGlvbk1lc3NhZ2VzQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuY29tcG9uZW50JztcbmV4cG9ydCB7Tmd4VmFsaWRhdG9yTmFtZURpcmVjdGl2ZX0gZnJvbSAnLi9kaXJlY3Rpdmllcy9uZ3gtdmFsaWRhdG9yLW5hbWUuZGlyZWN0aXZlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIE5neFZhbGlkYXRpb25NZXNzYWdlc0NvbXBvbmVudCxcbiAgICBOZ3hDdXN0b21NZXNzYWdlQ29tcG9uZW50LFxuICAgIE5neFZhbGlkYXRvck5hbWVEaXJlY3RpdmVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIE5neFZhbGlkYXRpb25NZXNzYWdlc0NvbXBvbmVudCxcbiAgICBOZ3hDdXN0b21NZXNzYWdlQ29tcG9uZW50LFxuICAgIE5neFZhbGlkYXRvck5hbWVEaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hWYWxpZGF0aW9uTWVzc2FnZXNNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE5neFZhbGlkYXRpb25NZXNzYWdlc0NvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Tmd4VmFsaWRhdGlvbk1lc3NhZ2VzTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBOZ3hWYWxpZGF0aW9uTWVzc2FnZXNNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgTmd4VmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE5HWF9WQUxJREFUSU9OX01FU1NBR0VTX0NPTkZJRyxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,73 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { NGX_VALIDATION_MESSAGES_CONFIG } from '../interface/ngx-validation-messages.config';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Service allows getting validation messages from client's settings.
6
+ * Injecting {@link NgxValidationMessagesConfig} to get client's configuration with validation messages.
7
+ */
8
+ export class NgxValidationMessagesService {
9
+ messagesConfig;
10
+ static SERVER_ERRORS = 'serverErrors';
11
+ /**
12
+ * Regular expression to find params placeholder '#[paramName]'.
13
+ */
14
+ paramsRegExp = new RegExp(/#[[a-zA-Z_\\-]*]/);
15
+ constructor(messagesConfig) {
16
+ this.messagesConfig = messagesConfig;
17
+ }
18
+ /**
19
+ * Get validation message for specified validator.
20
+ *
21
+ * @param validatorName for which to get message
22
+ * @param params passed from validator for more detailed validation message
23
+ *
24
+ * @returns string validation message
25
+ */
26
+ getValidatorErrorMessages(validatorName, params) {
27
+ const validationMessages = this.messagesConfig.messages;
28
+ const validationMessage = validationMessages[validatorName];
29
+ if (!validationMessage) {
30
+ throw new Error('Validation message for validator: ' + validatorName
31
+ + ' cannot be found, please check validation message key for validator it is case sensitive.');
32
+ }
33
+ if (params) {
34
+ return this.expandParameterizedTemplateMessage(validationMessage, params);
35
+ }
36
+ return validationMessage;
37
+ }
38
+ expandParameterizedTemplateMessage(msg, params) {
39
+ while (this.paramsRegExp.test(msg)) {
40
+ const foundParams = this.paramsRegExp.exec(msg);
41
+ foundParams.forEach(value => {
42
+ const paramPlaceholder = value;
43
+ value = value.replace('#[', '').replace(']', '');
44
+ msg = msg.replace(paramPlaceholder, this.getParameter(params, value));
45
+ });
46
+ }
47
+ return msg;
48
+ }
49
+ /**
50
+ * A utilitarian method to get a property from an object.
51
+ * if there is no property, an empty string is returned.
52
+ *
53
+ * @param obj from which the property must be obtained
54
+ * @param prop property name
55
+ *
56
+ * @return property value or empty string
57
+ */
58
+ getParameter(obj, prop) {
59
+ return prop.split('.')
60
+ .reduce((m, i) => {
61
+ return m && typeof m === 'object' ? m[i] : '';
62
+ }, obj);
63
+ }
64
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesService, deps: [{ token: NGX_VALIDATION_MESSAGES_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
65
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesService });
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxValidationMessagesService, decorators: [{
68
+ type: Injectable
69
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
70
+ type: Inject,
71
+ args: [NGX_VALIDATION_MESSAGES_CONFIG]
72
+ }] }]; } });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXZhbGlkYXRpb24tbWVzc2FnZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzL3NyYy9saWIvc2VydmljZS9uZ3gtdmFsaWRhdGlvbi1tZXNzYWdlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSw4QkFBOEIsRUFBK0IsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFFMUg7OztHQUdHO0FBRUgsTUFBTSxPQUFPLDRCQUE0QjtJQVNxQjtJQVByRCxNQUFNLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQztJQUU3Qzs7T0FFRztJQUNLLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRXRELFlBQTRELGNBQTJDO1FBQTNDLG1CQUFjLEdBQWQsY0FBYyxDQUE2QjtJQUN2RyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLHlCQUF5QixDQUFDLGFBQXFCLEVBQUUsTUFBZTtRQUNyRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQ3hELE1BQU0saUJBQWlCLEdBQVcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLEdBQUcsYUFBYTtrQkFDaEUsMkZBQTJGLENBQUMsQ0FBQztTQUNsRztRQUVELElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUMsa0NBQWtDLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDM0U7UUFFRCxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFFTSxrQ0FBa0MsQ0FBQyxHQUFXLEVBQUUsTUFBYztRQUNuRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RSxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxZQUFZLENBQUMsR0FBVyxFQUFFLElBQVk7UUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNuQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDZixPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7d0dBL0RVLDRCQUE0QixrQkFTbkIsOEJBQThCOzRHQVR2Qyw0QkFBNEI7OzRGQUE1Qiw0QkFBNEI7a0JBRHhDLFVBQVU7OzBCQVVJLE1BQU07MkJBQUMsOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1hfVkFMSURBVElPTl9NRVNTQUdFU19DT05GSUcsIE5neFZhbGlkYXRpb25NZXNzYWdlc0NvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZS9uZ3gtdmFsaWRhdGlvbi1tZXNzYWdlcy5jb25maWcnO1xuXG4vKipcbiAqIFNlcnZpY2UgYWxsb3dzIGdldHRpbmcgdmFsaWRhdGlvbiBtZXNzYWdlcyBmcm9tIGNsaWVudCdzIHNldHRpbmdzLlxuICogSW5qZWN0aW5nIHtAbGluayBOZ3hWYWxpZGF0aW9uTWVzc2FnZXNDb25maWd9IHRvIGdldCBjbGllbnQncyBjb25maWd1cmF0aW9uIHdpdGggdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5neFZhbGlkYXRpb25NZXNzYWdlc1NlcnZpY2Uge1xuXG4gIHB1YmxpYyBzdGF0aWMgU0VSVkVSX0VSUk9SUyA9ICdzZXJ2ZXJFcnJvcnMnO1xuXG4gIC8qKlxuICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gZmluZCBwYXJhbXMgcGxhY2Vob2xkZXIgJyNbcGFyYW1OYW1lXScuXG4gICAqL1xuICBwcml2YXRlIHBhcmFtc1JlZ0V4cCA9IG5ldyBSZWdFeHAoLyNbW2EtekEtWl9cXFxcLV0qXS8pO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTkdYX1ZBTElEQVRJT05fTUVTU0FHRVNfQ09ORklHKSBwcml2YXRlIG1lc3NhZ2VzQ29uZmlnOiBOZ3hWYWxpZGF0aW9uTWVzc2FnZXNDb25maWcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmFsaWRhdGlvbiBtZXNzYWdlIGZvciBzcGVjaWZpZWQgdmFsaWRhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yTmFtZSBmb3Igd2hpY2ggdG8gZ2V0IG1lc3NhZ2VcbiAgICogQHBhcmFtIHBhcmFtcyBwYXNzZWQgZnJvbSB2YWxpZGF0b3IgZm9yIG1vcmUgZGV0YWlsZWQgdmFsaWRhdGlvbiBtZXNzYWdlXG4gICAqXG4gICAqIEByZXR1cm5zIHN0cmluZyB2YWxpZGF0aW9uIG1lc3NhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRWYWxpZGF0b3JFcnJvck1lc3NhZ2VzKHZhbGlkYXRvck5hbWU6IHN0cmluZywgcGFyYW1zPzogb2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzQ29uZmlnLm1lc3NhZ2VzO1xuICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSB2YWxpZGF0aW9uTWVzc2FnZXNbdmFsaWRhdG9yTmFtZV07XG5cbiAgICBpZiAoIXZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gbWVzc2FnZSBmb3IgdmFsaWRhdG9yOiAnICsgdmFsaWRhdG9yTmFtZVxuICAgICAgICArICcgY2Fubm90IGJlIGZvdW5kLCBwbGVhc2UgY2hlY2sgdmFsaWRhdGlvbiBtZXNzYWdlIGtleSBmb3IgdmFsaWRhdG9yIGl0IGlzIGNhc2Ugc2Vuc2l0aXZlLicpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4cGFuZFBhcmFtZXRlcml6ZWRUZW1wbGF0ZU1lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlO1xuICB9XG5cbiAgcHVibGljIGV4cGFuZFBhcmFtZXRlcml6ZWRUZW1wbGF0ZU1lc3NhZ2UobXNnOiBzdHJpbmcsIHBhcmFtczogb2JqZWN0KTogc3RyaW5nIHtcbiAgICB3aGlsZSAodGhpcy5wYXJhbXNSZWdFeHAudGVzdChtc2cpKSB7XG4gICAgICBjb25zdCBmb3VuZFBhcmFtcyA9IHRoaXMucGFyYW1zUmVnRXhwLmV4ZWMobXNnKTtcbiAgICAgIGZvdW5kUGFyYW1zLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbVBsYWNlaG9sZGVyID0gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnI1snLCAnJykucmVwbGFjZSgnXScsICcnKTtcbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UocGFyYW1QbGFjZWhvbGRlciwgdGhpcy5nZXRQYXJhbWV0ZXIocGFyYW1zLCB2YWx1ZSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1zZztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHV0aWxpdGFyaWFuIG1ldGhvZCB0byBnZXQgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdC5cbiAgICogaWYgdGhlcmUgaXMgbm8gcHJvcGVydHksIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHBhcmFtIG9iaiBmcm9tIHdoaWNoIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIG9idGFpbmVkXG4gICAqIEBwYXJhbSBwcm9wIHByb3BlcnR5IG5hbWVcbiAgICpcbiAgICogQHJldHVybiBwcm9wZXJ0eSB2YWx1ZSBvciBlbXB0eSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZ2V0UGFyYW1ldGVyKG9iajogb2JqZWN0LCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9wLnNwbGl0KCcuJylcbiAgICAgIC5yZWR1Y2UoKG0sIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIG0gJiYgdHlwZW9mIG0gPT09ICdvYmplY3QnID8gbVtpXSA6ICcnO1xuICAgICAgfSwgb2JqKTtcbiAgfVxuXG4gIC8vIHB1YmxpYyBzdGF0aWMgYXBwbHlTZXJ2ZXJFcnJvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsLCBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3IpOiB2b2lkIHtcbiAgLy8gICBpZiAoIWNvbnRyb2wpIHtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgaWYgKGNvbnRyb2wuZ2V0RXJyb3IoTmd4VmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZS5TRVJWRVJfRVJST1JTKSkge1xuICAvLyAgICAgY29uc3QgZXhpc3RpbmdFcnJvck1lc3NhZ2VzID0gY29udHJvbC5nZXRFcnJvcihOZ3hWYWxpZGF0aW9uTWVzc2FnZXNTZXJ2aWNlLlNFUlZFUl9FUlJPUlMpO1xuICAvLyAgICAgaWYgKF8uaXNBcnJheShleGlzdGluZ0Vycm9yTWVzc2FnZXMuY3VzdG9tTWVzc2FnZXMpICYmXG4gIC8vICAgICAgIGV4aXN0aW5nRXJyb3JNZXNzYWdlcy5jdXN0b21NZXNzYWdlcy5pbmRleE9mKHNlcnZlckVycm9yLm1lc3NhZ2UpID09PSAtMSkge1xuICAvLyAgICAgICBleGlzdGluZ0Vycm9yTWVzc2FnZXMuY3VzdG9tTWVzc2FnZXMucHVzaChzZXJ2ZXJFcnJvci5tZXNzYWdlKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgY29udHJvbC5zZXRFcnJvcnMoe1tOZ3hWYWxpZGF0aW9uTWVzc2FnZXNTZXJ2aWNlLlNFUlZFUl9FUlJPUlNdOiB7Y3VzdG9tTWVzc2FnZXM6IFtzZXJ2ZXJFcnJvci5tZXNzYWdlXX19KTtcbiAgLy8gICB9XG4gIC8vICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gIC8vIH1cblxufVxuIl19
@@ -1,5 +1,5 @@
1
- /*
2
- * Public API Surface of ngx-validation-messages
3
- */
4
- export * from './lib/ngx-validation-messages.module';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtdmFsaWRhdGlvbi1tZXNzYWdlc1xyXG4gKi9cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMubW9kdWxlJztcclxuIl19
1
+ /*
2
+ * Public API Surface of ngx-validation-messages
3
+ */
4
+ export * from './lib/ngx-validation-messages.module';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC12YWxpZGF0aW9uLW1lc3NhZ2VzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LXZhbGlkYXRpb24tbWVzc2FnZXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LXZhbGlkYXRpb24tbWVzc2FnZXMubW9kdWxlJztcbiJdfQ==