@six-group/ui-library-angular 0.0.0-insider.d16ec8e → 0.0.0-insider.d82aaa2

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 (41) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +6 -22
  3. package/esm2020/lib/control-value-accessors/checkbox-value-accessor.mjs +41 -0
  4. package/esm2020/lib/control-value-accessors/datepicker-value-accessor.mjs +37 -0
  5. package/esm2020/lib/control-value-accessors/numeric-value-accessor.mjs +42 -0
  6. package/esm2020/lib/control-value-accessors/radio-value-accessor.mjs +62 -0
  7. package/esm2020/lib/control-value-accessors/range-value-accessor.mjs +42 -0
  8. package/esm2020/lib/control-value-accessors/select-value-accessor.mjs +37 -0
  9. package/esm2020/lib/control-value-accessors/switch-value-accessor.mjs +41 -0
  10. package/esm2020/lib/control-value-accessors/text-value-accessor.mjs +37 -0
  11. package/esm2020/lib/control-value-accessors/timepicker-value-accessor.mjs +37 -0
  12. package/esm2020/lib/control-value-accessors/value-accessor.mjs +143 -0
  13. package/esm2020/lib/form/six-form.directive.mjs +134 -0
  14. package/esm2020/lib/services/validation-messages.service.mjs +15 -0
  15. package/esm2020/lib/stencil-generated/components.mjs +34 -61
  16. package/esm2020/lib/stencil-generated/index.mjs +1 -2
  17. package/esm2020/lib/ui-library-angular.module.mjs +112 -19
  18. package/esm2020/lib/validators/six-ui-library-validators.mjs +116 -0
  19. package/esm2020/public-api.mjs +19 -1
  20. package/fesm2015/six-group-ui-library-angular.mjs +874 -80
  21. package/fesm2015/six-group-ui-library-angular.mjs.map +1 -1
  22. package/fesm2020/six-group-ui-library-angular.mjs +871 -80
  23. package/fesm2020/six-group-ui-library-angular.mjs.map +1 -1
  24. package/lib/control-value-accessors/checkbox-value-accessor.d.ts +10 -0
  25. package/lib/control-value-accessors/datepicker-value-accessor.d.ts +9 -0
  26. package/lib/control-value-accessors/numeric-value-accessor.d.ts +10 -0
  27. package/lib/control-value-accessors/radio-value-accessor.d.ts +15 -0
  28. package/lib/control-value-accessors/range-value-accessor.d.ts +10 -0
  29. package/lib/control-value-accessors/select-value-accessor.d.ts +9 -0
  30. package/lib/control-value-accessors/switch-value-accessor.d.ts +10 -0
  31. package/lib/control-value-accessors/text-value-accessor.d.ts +9 -0
  32. package/lib/control-value-accessors/timepicker-value-accessor.d.ts +9 -0
  33. package/lib/control-value-accessors/value-accessor.d.ts +39 -0
  34. package/lib/form/six-form.directive.d.ts +71 -0
  35. package/lib/services/validation-messages.service.d.ts +7 -0
  36. package/lib/stencil-generated/components.d.ts +8 -35
  37. package/lib/stencil-generated/index.d.ts +1 -1
  38. package/lib/ui-library-angular.module.d.ts +15 -1
  39. package/lib/validators/six-ui-library-validators.d.ts +47 -0
  40. package/package.json +4 -3
  41. package/public-api.d.ts +13 -0
@@ -0,0 +1,37 @@
1
+ import { Directive, HostListener } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { ValueAccessor } from './value-accessor';
4
+ import * as i0 from "@angular/core";
5
+ export class TimepickerValueAccessor extends ValueAccessor {
6
+ constructor(injector, el) {
7
+ super(injector, el);
8
+ }
9
+ handleChangeEvent(el) {
10
+ this.handleValueChange(el, el.value);
11
+ }
12
+ }
13
+ TimepickerValueAccessor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TimepickerValueAccessor, deps: [{ token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
14
+ TimepickerValueAccessor.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: TimepickerValueAccessor, selector: "six-timepicker", host: { listeners: { "change": "handleChangeEvent($event.target)" } }, providers: [
15
+ {
16
+ provide: NG_VALUE_ACCESSOR,
17
+ useExisting: TimepickerValueAccessor,
18
+ multi: true,
19
+ },
20
+ ], usesInheritance: true, ngImport: i0 });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TimepickerValueAccessor, decorators: [{
22
+ type: Directive,
23
+ args: [{
24
+ selector: 'six-timepicker',
25
+ providers: [
26
+ {
27
+ provide: NG_VALUE_ACCESSOR,
28
+ useExisting: TimepickerValueAccessor,
29
+ multi: true,
30
+ },
31
+ ],
32
+ }]
33
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }]; }, propDecorators: { handleChangeEvent: [{
34
+ type: HostListener,
35
+ args: ['change', ['$event.target']]
36
+ }] } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci12YWx1ZS1hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJvbC12YWx1ZS1hY2Nlc3NvcnMvdGltZXBpY2tlci12YWx1ZS1hY2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBWWpELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxhQUFhO0lBQ3hELFlBQVksUUFBa0IsRUFBRSxFQUFjO1FBQzVDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUdELGlCQUFpQixDQUFDLEVBQTRCO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7O29IQVJVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLGdIQVJ2QjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRjsyRkFFVSx1QkFBdUI7a0JBVm5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcseUJBQXlCOzRCQUNwQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRjt3SEFPQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFZhbHVlQWNjZXNzb3IgfSBmcm9tICcuL3ZhbHVlLWFjY2Vzc29yJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnc2l4LXRpbWVwaWNrZXInLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBUaW1lcGlja2VyVmFsdWVBY2Nlc3NvcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVwaWNrZXJWYWx1ZUFjY2Vzc29yIGV4dGVuZHMgVmFsdWVBY2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvciwgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWwpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIGhhbmRsZUNoYW5nZUV2ZW50KGVsOiBIVE1MU2l4VGltZXBpY2tlckVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKGVsLCBlbC52YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,143 @@
1
+ import { Directive, HostListener, inject } from '@angular/core';
2
+ import { NgControl } from '@angular/forms';
3
+ import { ValidationMessagesService } from '../services/validation-messages.service';
4
+ import * as i0 from "@angular/core";
5
+ export class ValueAccessor {
6
+ constructor(injector, el) {
7
+ this.injector = injector;
8
+ this.el = el;
9
+ this.validationMessagesService = inject(ValidationMessagesService);
10
+ this.onChange = () => { };
11
+ this.onTouched = () => { };
12
+ }
13
+ registerOnChange(fn) {
14
+ this.onChange = fn;
15
+ }
16
+ registerOnTouched(fn) {
17
+ this.onTouched = fn;
18
+ }
19
+ writeValue(value) {
20
+ this.el.nativeElement.value = value;
21
+ this.updateValidation();
22
+ }
23
+ /**
24
+ * Notifies the ControlValueAccessor of a change in the value of the control.
25
+ *
26
+ * This is called by each of the ValueAccessor directives when we want to update
27
+ * the status and validity of the form control. For example with text components this
28
+ * is called when the input event is fired. For select components this is called
29
+ * when the change event is fired.
30
+ *
31
+ * This also updates the form status on the element by setting the 'invalid' property to true/false.
32
+ *
33
+ * @param el The component element.
34
+ * @param value The new value of the control.
35
+ */
36
+ handleValueChange(el, value) {
37
+ if (el === this.el.nativeElement) {
38
+ this.onChange(value);
39
+ this.updateValidation();
40
+ }
41
+ }
42
+ _handleBlurEvent(el) {
43
+ if (el === this.el.nativeElement) {
44
+ this.onTouched();
45
+ this.updateValidation();
46
+ }
47
+ }
48
+ updateValidation() {
49
+ nextTick(() => {
50
+ if (this.ngControl?.control == null)
51
+ return;
52
+ const element = this.el.nativeElement;
53
+ const control = this.ngControl?.control;
54
+ const invalid = !control.valid && control.dirty && control.touched;
55
+ let errorText;
56
+ if (invalid) {
57
+ errorText = this.initialErrorText || this.getErrorText(control);
58
+ }
59
+ element.invalid = invalid;
60
+ element.errorText = errorText ?? '';
61
+ });
62
+ }
63
+ setDisabledState(isDisabled) {
64
+ this.el.nativeElement.disabled = isDisabled;
65
+ }
66
+ ngOnDestroy() {
67
+ if (this.statusChanges) {
68
+ this.statusChanges.unsubscribe();
69
+ }
70
+ }
71
+ ngAfterViewInit() {
72
+ this.initialErrorText = this.el.nativeElement?.errorText?.trim() || undefined;
73
+ try {
74
+ this.ngControl = this.injector.get(NgControl);
75
+ }
76
+ catch {
77
+ /* No FormControl or ngModel binding */
78
+ }
79
+ if (!this.ngControl) {
80
+ return;
81
+ }
82
+ // Listen for changes in validity, disabled, or pending states
83
+ if (this.ngControl.statusChanges) {
84
+ this.statusChanges = this.ngControl.statusChanges.subscribe(() => this.updateValidation());
85
+ }
86
+ /**
87
+ * TODO FW-2787: Remove this in favor of https://github.com/angular/angular/issues/10887
88
+ * whenever it is implemented.
89
+ */
90
+ const formControl = this.ngControl.control;
91
+ if (formControl) {
92
+ const methodsToPatch = ['markAsTouched', 'markAllAsTouched', 'markAsUntouched', 'markAsDirty', 'markAsPristine'];
93
+ methodsToPatch.forEach((method) => {
94
+ if (typeof formControl[method] !== 'undefined') {
95
+ const oldFn = formControl[method].bind(formControl);
96
+ formControl[method] = (...params) => {
97
+ oldFn(...params);
98
+ this.updateValidation();
99
+ };
100
+ }
101
+ });
102
+ }
103
+ }
104
+ getErrorText(control) {
105
+ if (control.errors == null) {
106
+ console.warn('no errors for invalid control', control);
107
+ return '';
108
+ }
109
+ const firstError = Object.entries(control.errors).at(0);
110
+ if (firstError == null) {
111
+ console.warn('no errors for invalid control', control);
112
+ return '';
113
+ }
114
+ const [key, value] = firstError;
115
+ return (this.validationMessagesService.getErrorMessage(getLanguage(), { key: key, ...value }) ?? key);
116
+ }
117
+ }
118
+ ValueAccessor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValueAccessor, deps: [{ token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
119
+ ValueAccessor.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: ValueAccessor, host: { listeners: { "blur": "_handleBlurEvent($event.target)" } }, ngImport: i0 });
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValueAccessor, decorators: [{
121
+ type: Directive
122
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }]; }, propDecorators: { _handleBlurEvent: [{
123
+ type: HostListener,
124
+ args: ['blur', ['$event.target']]
125
+ }] } });
126
+ function getLanguage() {
127
+ const languages = ['de', 'fr', 'it', 'en'];
128
+ const documentLang = document.documentElement.lang;
129
+ if (languages.includes(documentLang)) {
130
+ return documentLang;
131
+ }
132
+ return 'de';
133
+ }
134
+ const nextTick = (h) => {
135
+ if (typeof __zone_symbol__requestAnimationFrame === 'function') {
136
+ return __zone_symbol__requestAnimationFrame(h);
137
+ }
138
+ if (typeof requestAnimationFrame === 'function') {
139
+ return requestAnimationFrame(h);
140
+ }
141
+ return setTimeout(h);
142
+ };
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtYWNjZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2wtdmFsdWUtYWNjZXNzb3JzL3ZhbHVlLWFjY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBeUMsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBR3BGLE1BQU0sT0FBTyxhQUFhO0lBTXhCLFlBQXNCLFFBQWtCLEVBQVksRUFBYztRQUE1QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVksT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUYxRCw4QkFBeUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUk5RCxhQUFRLEdBQXlCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUMxQyxjQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBSDRCLENBQUM7SUFJdEUsZ0JBQWdCLENBQUMsRUFBd0I7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGlCQUFpQixDQUFDLEVBQWUsRUFBRSxLQUFVO1FBQzNDLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENB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L0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ3BDLE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBSUQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQU8sRUFBRTtJQUMvQixJQUFJLE9BQU8sb0NBQW9DLEtBQUssVUFBVSxFQUFFO1FBQzlELE9BQU8sb0NBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEQ7SUFDRCxJQUFJLE9BQU8scUJBQXFCLEtBQUssVUFBVSxFQUFFO1FBQy9DLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakM7SUFDRCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExhbmd1YWdlLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdAc2l4LWdyb3VwL3VpLWxpYnJhcnknO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24tbWVzc2FnZXMuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdGF0dXNDaGFuZ2VzPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG5nQ29udHJvbD86IE5nQ29udHJvbDtcbiAgcHJpdmF0ZSBpbml0aWFsRXJyb3JUZXh0Pzogc3RyaW5nO1xuICBwcml2YXRlIHZhbGlkYXRpb25NZXNzYWdlc1NlcnZpY2UgPSBpbmplY3QoVmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvciwgcHJvdGVjdGVkIGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBvZiBhIGNoYW5nZSBpbiB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG4gICAqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGJ5IGVhY2ggb2YgdGhlIFZhbHVlQWNjZXNzb3IgZGlyZWN0aXZlcyB3aGVuIHdlIHdhbnQgdG8gdXBkYXRlXG4gICAqIHRoZSBzdGF0dXMgYW5kIHZhbGlkaXR5IG9mIHRoZSBmb3JtIGNvbnRyb2wuIEZvciBleGFtcGxlIHdpdGggdGV4dCBjb21wb25lbnRzIHRoaXNcbiAgICogaXMgY2FsbGVkIHdoZW4gdGhlIGlucHV0IGV2ZW50IGlzIGZpcmVkLiBGb3Igc2VsZWN0IGNvbXBvbmVudHMgdGhpcyBpcyBjYWxsZWRcbiAgICogd2hlbiB0aGUgY2hhbmdlIGV2ZW50IGlzIGZpcmVkLlxuICAgKlxuICAgKiBUaGlzIGFsc28gdXBkYXRlcyB0aGUgZm9ybSBzdGF0dXMgb24gdGhlIGVsZW1lbnQgYnkgc2V0dGluZyB0aGUgJ2ludmFsaWQnIHByb3BlcnR5IHRvIHRydWUvZmFsc2UuXG4gICAqXG4gICAqIEBwYXJhbSBlbCBUaGUgY29tcG9uZW50IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBjb250cm9sLlxuICAgKi9cbiAgaGFuZGxlVmFsdWVDaGFuZ2UoZWw6IEhUTUxFbGVtZW50LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKGVsID09PSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50LnRhcmdldCddKVxuICBfaGFuZGxlQmx1ckV2ZW50KGVsOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZWwgPT09IHRoaXMuZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbGlkYXRpb24oKSB7XG4gICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubmdDb250cm9sPy5jb250cm9sID09IG51bGwpIHJldHVybjtcblxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MU2l4SW5wdXRFbGVtZW50O1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sPy5jb250cm9sO1xuXG4gICAgICBjb25zdCBpbnZhbGlkID0gIWNvbnRyb2wudmFsaWQgJiYgY29udHJvbC5kaXJ0eSAmJiBjb250cm9sLnRvdWNoZWQ7XG4gICAgICBsZXQgZXJyb3JUZXh0O1xuICAgICAgaWYgKGludmFsaWQpIHtcbiAgICAgICAgZXJyb3JUZXh0ID0gdGhpcy5pbml0aWFsRXJyb3JUZXh0IHx8IHRoaXMuZ2V0RXJyb3JUZXh0KGNvbnRyb2wpO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5pbnZhbGlkID0gaW52YWxpZDtcbiAgICAgIGVsZW1lbnQuZXJyb3JUZXh0ID0gZXJyb3JUZXh0ID8/ICcnO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXR1c0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxFcnJvclRleHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ/LmVycm9yVGV4dD8udHJpbSgpIHx8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldDxOZ0NvbnRyb2w+KE5nQ29udHJvbCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBObyBGb3JtQ29udHJvbCBvciBuZ01vZGVsIGJpbmRpbmcgKi9cbiAgICB9XG4gICAgaWYgKCF0aGlzLm5nQ29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIExpc3RlbiBmb3IgY2hhbmdlcyBpbiB2YWxpZGl0eSwgZGlzYWJsZWQsIG9yIHBlbmRpbmcgc3RhdGVzXG4gICAgaWYgKHRoaXMubmdDb250cm9sLnN0YXR1c0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlcyA9IHRoaXMubmdDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlVmFsaWRhdGlvbigpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUT0RPIEZXLTI3ODc6IFJlbW92ZSB0aGlzIGluIGZhdm9yIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEwODg3XG4gICAgICogd2hlbmV2ZXIgaXQgaXMgaW1wbGVtZW50ZWQuXG4gICAgICovXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sIGFzIGFueTtcbiAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IG1ldGhvZHNUb1BhdGNoID0gWydtYXJrQXNUb3VjaGVkJywgJ21hcmtBbGxBc1RvdWNoZWQnLCAnbWFya0FzVW50b3VjaGVkJywgJ21hcmtBc0RpcnR5JywgJ21hcmtBc1ByaXN0aW5lJ107XG4gICAgICBtZXRob2RzVG9QYXRjaC5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtQ29udHJvbFttZXRob2RdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnN0IG9sZEZuID0gZm9ybUNvbnRyb2xbbWV0aG9kXS5iaW5kKGZvcm1Db250cm9sKTtcbiAgICAgICAgICBmb3JtQ29udHJvbFttZXRob2RdID0gKC4uLnBhcmFtczogYW55W10pID0+IHtcbiAgICAgICAgICAgIG9sZEZuKC4uLnBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb24oKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRFcnJvclRleHQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogc3RyaW5nIHtcbiAgICBpZiAoY29udHJvbC5lcnJvcnMgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKCdubyBlcnJvcnMgZm9yIGludmFsaWQgY29udHJvbCcsIGNvbnRyb2wpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBPYmplY3QuZW50cmllcyhjb250cm9sLmVycm9ycykuYXQoMCk7XG4gICAgaWYgKGZpcnN0RXJyb3IgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS53YXJuKCdubyBlcnJvcnMgZm9yIGludmFsaWQgY29udHJvbCcsIGNvbnRyb2wpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGZpcnN0RXJyb3I7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZS5nZXRFcnJvck1lc3NhZ2UoZ2V0TGFuZ3VhZ2UoKSwgeyBrZXk6IGtleSwgLi4udmFsdWUgfSBhcyBWYWxpZGF0aW9uRXJyb3IpID8/IGtleVxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TGFuZ3VhZ2UoKTogTGFuZ3VhZ2Uge1xuICBjb25zdCBsYW5ndWFnZXM6IExhbmd1YWdlW10gPSBbJ2RlJywgJ2ZyJywgJ2l0JywgJ2VuJ107XG4gIGNvbnN0IGRvY3VtZW50TGFuZyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5sYW5nIGFzIExhbmd1YWdlO1xuICBpZiAobGFuZ3VhZ2VzLmluY2x1ZGVzKGRvY3VtZW50TGFuZykpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRMYW5nO1xuICB9XG4gIHJldHVybiAnZGUnO1xufVxuXG5kZWNsYXJlIGNvbnN0IF9fem9uZV9zeW1ib2xfX3JlcXVlc3RBbmltYXRpb25GcmFtZTogYW55O1xuZGVjbGFyZSBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGFueTtcbmNvbnN0IG5leHRUaWNrID0gKGg6IGFueSk6IGFueSA9PiB7XG4gIGlmICh0eXBlb2YgX196b25lX3N5bWJvbF9fcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9fem9uZV9zeW1ib2xfX3JlcXVlc3RBbmltYXRpb25GcmFtZShoKTtcbiAgfVxuICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaCk7XG4gIH1cbiAgcmV0dXJuIHNldFRpbWVvdXQoaCk7XG59O1xuIl19
@@ -0,0 +1,134 @@
1
+ import { Directive, EventEmitter, HostListener, Output } from '@angular/core';
2
+ import { FormArray, FormControl, FormGroup } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ /**
6
+ * This directive intercepts the ngSubmit event of an Angular form and introduces
7
+ * a supplementary event named sixSubmit. The sixSubmit event is triggered exclusively
8
+ * when the form is valid. In cases where the form is considered invalid, this directive
9
+ * takes proactive actions by marking all form controls as touched and dirty. Additionally,
10
+ * it shifts the focus to the initial invalid form element, facilitating quick error
11
+ * resolution.
12
+ *
13
+ * To utilize this directive, apply it to an Angular form.
14
+ * ```html
15
+ * <form [formGroup]="form" sixForm (sixSubmit)="onSubmit($event)">
16
+ * <!-- form content -->
17
+ * </form>
18
+ * ```
19
+ *
20
+ * For users needing greater flexibility in determining when error messages are displayed,
21
+ * or for those who prefer not to rely solely on the form submission event,
22
+ * an alternative is to use the SixFormUtilDirective.
23
+ */
24
+ export class SixFormDirective {
25
+ onNgSubmit(event) {
26
+ if (this.formGroupDirective.invalid) {
27
+ focusInvalidField(this.formGroupDirective, this.elementRef);
28
+ }
29
+ else {
30
+ this.sixSubmit.emit(event);
31
+ }
32
+ }
33
+ constructor(elementRef, formGroupDirective) {
34
+ this.elementRef = elementRef;
35
+ this.formGroupDirective = formGroupDirective;
36
+ /**
37
+ * Emits an event when the form is valid and the form submission has been triggered.
38
+ */
39
+ this.sixSubmit = new EventEmitter();
40
+ }
41
+ }
42
+ SixFormDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SixFormDirective, deps: [{ token: i0.ElementRef }, { token: i1.FormGroupDirective }], target: i0.ɵɵFactoryTarget.Directive });
43
+ SixFormDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SixFormDirective, selector: "form[sixForm]", outputs: { sixSubmit: "sixSubmit" }, host: { listeners: { "ngSubmit": "onNgSubmit($event)" } }, ngImport: i0 });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SixFormDirective, decorators: [{
45
+ type: Directive,
46
+ args: [{
47
+ selector: 'form[sixForm]',
48
+ }]
49
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FormGroupDirective }]; }, propDecorators: { sixSubmit: [{
50
+ type: Output
51
+ }], onNgSubmit: [{
52
+ type: HostListener,
53
+ args: ['ngSubmit', ['$event']]
54
+ }] } });
55
+ /**
56
+ * This directive provides a utility method, that marks all form controls
57
+ * as touched and dirty, and focuses the first invalid form element.
58
+ *
59
+ * To utilize this directive, apply it to an Angular form.
60
+ * ```html
61
+ * <form [formGroup]="form" sixFormUtil (ngSubmit)="onSubmit($event)">
62
+ * <!-- form content -->
63
+ * </form>
64
+ * ```
65
+ *
66
+ * Then, get a reference to the directive and invoke `focusInvalidField()` if the
67
+ * form is invalid:
68
+ * ```ts
69
+ * @ViewChild(SixFormUtilDirective) sixFormUtil!: SixFormUtilDirective;
70
+ * // ...
71
+ * onSubmit() {
72
+ * if (this.form.invalid) {
73
+ * this.sixFormUtil.focusInvalidField();
74
+ * } else {
75
+ * // ...
76
+ * }
77
+ * }
78
+ * ```
79
+ */
80
+ export class SixFormUtilDirective {
81
+ constructor(elementRef, formGroupDirective) {
82
+ this.elementRef = elementRef;
83
+ this.formGroupDirective = formGroupDirective;
84
+ }
85
+ /** markAllControlsAsDirty(Object.values(formGroup.controls));
86
+ * Marks all form controls as touched and dirty, and focuses the first
87
+ * invalid form element.
88
+ */
89
+ focusInvalidField() {
90
+ focusInvalidField(this.formGroupDirective, this.elementRef);
91
+ }
92
+ }
93
+ SixFormUtilDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SixFormUtilDirective, deps: [{ token: i0.ElementRef }, { token: i1.FormGroupDirective }], target: i0.ɵɵFactoryTarget.Directive });
94
+ SixFormUtilDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SixFormUtilDirective, selector: "[sixFormUtil]", ngImport: i0 });
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SixFormUtilDirective, decorators: [{
96
+ type: Directive,
97
+ args: [{
98
+ selector: '[sixFormUtil]',
99
+ }]
100
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FormGroupDirective }]; } });
101
+ function focusInvalidField(formGroupDirective, formElement) {
102
+ formGroupDirective.form.markAllAsTouched();
103
+ markAllAsDirty([formGroupDirective.form]);
104
+ const invalidElement = getInvalidElement(formElement.nativeElement);
105
+ if ('setFocus' in invalidElement && typeof invalidElement?.setFocus === 'function') {
106
+ invalidElement.setFocus();
107
+ }
108
+ if ('focus' in invalidElement && typeof invalidElement?.focus === 'function') {
109
+ invalidElement.focus();
110
+ }
111
+ }
112
+ function getInvalidElement(parent) {
113
+ const invalidElement = parent.querySelector('.ng-invalid');
114
+ if (invalidElement == null) {
115
+ return parent;
116
+ }
117
+ return getInvalidElement(invalidElement);
118
+ }
119
+ function markAllAsDirty(controls) {
120
+ controls.forEach((control) => {
121
+ if (control instanceof FormControl) {
122
+ control.markAsDirty({ onlySelf: true });
123
+ }
124
+ else if (control instanceof FormGroup) {
125
+ control.markAsDirty({ onlySelf: true });
126
+ markAllAsDirty(Object.values(control.controls));
127
+ }
128
+ else if (control instanceof FormArray) {
129
+ control.markAsDirty({ onlySelf: true });
130
+ markAllAsDirty(control.controls);
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l4LWZvcm0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9mb3JtL3NpeC1mb3JtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQXNCLE1BQU0sZ0JBQWdCLENBQUM7OztBQUV4Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBSUgsTUFBTSxPQUFPLGdCQUFnQjtJQU8zQixVQUFVLENBQUMsS0FBa0I7UUFDM0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO1lBQ25DLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELFlBQW9CLFVBQW1DLEVBQVUsa0JBQXNDO1FBQW5GLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQWR2Rzs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO0lBV29ELENBQUM7OzZHQWZoRyxnQkFBZ0I7aUdBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUg1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO2lCQUMxQjtrSUFLVyxTQUFTO3NCQUFsQixNQUFNO2dCQUdQLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBWXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQW9CLFVBQW1DLEVBQVUsa0JBQXNDO1FBQW5GLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFHLENBQUM7SUFFM0c7OztPQUdHO0lBQ0ksaUJBQWlCO1FBQ3RCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7aUhBVFUsb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFIaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtpQkFDMUI7O0FBYUQsU0FBUyxpQkFBaUIsQ0FBQyxrQkFBc0MsRUFBRSxXQUFvQztJQUNyRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxjQUFjLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTFDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRSxJQUFJLFVBQVUsSUFBSSxjQUFjLElBQUksT0FBTyxjQUFjLEVBQUUsUUFBUSxLQUFLLFVBQVUsRUFBRTtRQUNsRixjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDM0I7SUFDRCxJQUFJLE9BQU8sSUFBSSxjQUFjLElBQUksT0FBTyxjQUFjLEVBQUUsS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUM1RSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDeEI7QUFDSCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFlO0lBQ3hDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFO1FBQzFCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFDRCxPQUFPLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxRQUEyQjtJQUNqRCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDM0IsSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRTtZQUN2QyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDakQ7YUFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7WUFDdkMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgaW50ZXJjZXB0cyB0aGUgbmdTdWJtaXQgZXZlbnQgb2YgYW4gQW5ndWxhciBmb3JtIGFuZCBpbnRyb2R1Y2VzXG4gKiBhIHN1cHBsZW1lbnRhcnkgZXZlbnQgbmFtZWQgc2l4U3VibWl0LiBUaGUgc2l4U3VibWl0IGV2ZW50IGlzIHRyaWdnZXJlZCBleGNsdXNpdmVseVxuICogd2hlbiB0aGUgZm9ybSBpcyB2YWxpZC4gSW4gY2FzZXMgd2hlcmUgdGhlIGZvcm0gaXMgY29uc2lkZXJlZCBpbnZhbGlkLCB0aGlzIGRpcmVjdGl2ZVxuICogdGFrZXMgcHJvYWN0aXZlIGFjdGlvbnMgYnkgbWFya2luZyBhbGwgZm9ybSBjb250cm9scyBhcyB0b3VjaGVkIGFuZCBkaXJ0eS4gQWRkaXRpb25hbGx5LFxuICogaXQgc2hpZnRzIHRoZSBmb2N1cyB0byB0aGUgaW5pdGlhbCBpbnZhbGlkIGZvcm0gZWxlbWVudCwgZmFjaWxpdGF0aW5nIHF1aWNrIGVycm9yXG4gKiByZXNvbHV0aW9uLlxuICpcbiAqIFRvIHV0aWxpemUgdGhpcyBkaXJlY3RpdmUsIGFwcGx5IGl0IHRvIGFuIEFuZ3VsYXIgZm9ybS5cbiAqIGBgYGh0bWxcbiAqIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIHNpeEZvcm0gKHNpeFN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCI+XG4gKiAgIDwhLS0gZm9ybSBjb250ZW50IC0tPlxuICogPC9mb3JtPlxuICogYGBgXG4gKlxuICogRm9yIHVzZXJzIG5lZWRpbmcgZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBkZXRlcm1pbmluZyB3aGVuIGVycm9yIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQsXG4gKiBvciBmb3IgdGhvc2Ugd2hvIHByZWZlciBub3QgdG8gcmVseSBzb2xlbHkgb24gdGhlIGZvcm0gc3VibWlzc2lvbiBldmVudCxcbiAqIGFuIGFsdGVybmF0aXZlIGlzIHRvIHVzZSB0aGUgU2l4Rm9ybVV0aWxEaXJlY3RpdmUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2Zvcm1bc2l4Rm9ybV0nLFxufSlcbmV4cG9ydCBjbGFzcyBTaXhGb3JtRGlyZWN0aXZlIHtcbiAgLyoqXG4gICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGZvcm0gaXMgdmFsaWQgYW5kIHRoZSBmb3JtIHN1Ym1pc3Npb24gaGFzIGJlZW4gdHJpZ2dlcmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIHNpeFN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8U3VibWl0RXZlbnQ+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignbmdTdWJtaXQnLCBbJyRldmVudCddKVxuICBvbk5nU3VibWl0KGV2ZW50OiBTdWJtaXRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cERpcmVjdGl2ZS5pbnZhbGlkKSB7XG4gICAgICBmb2N1c0ludmFsaWRGaWVsZCh0aGlzLmZvcm1Hcm91cERpcmVjdGl2ZSwgdGhpcy5lbGVtZW50UmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaXhTdWJtaXQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSBmb3JtR3JvdXBEaXJlY3RpdmU6IEZvcm1Hcm91cERpcmVjdGl2ZSkge31cbn1cblxuLyoqXG4gKiBUaGlzIGRpcmVjdGl2ZSBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kLCB0aGF0IG1hcmtzIGFsbCBmb3JtIGNvbnRyb2xzXG4gKiBhcyB0b3VjaGVkIGFuZCBkaXJ0eSwgYW5kIGZvY3VzZXMgdGhlIGZpcnN0IGludmFsaWQgZm9ybSBlbGVtZW50LlxuICpcbiAqIFRvIHV0aWxpemUgdGhpcyBkaXJlY3RpdmUsIGFwcGx5IGl0IHRvIGFuIEFuZ3VsYXIgZm9ybS5cbiAqIGBgYGh0bWxcbiAqIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIHNpeEZvcm1VdGlsIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCI+XG4gKiAgIDwhLS0gZm9ybSBjb250ZW50IC0tPlxuICogPC9mb3JtPlxuICogYGBgXG4gKlxuICogVGhlbiwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBkaXJlY3RpdmUgYW5kIGludm9rZSBgZm9jdXNJbnZhbGlkRmllbGQoKWAgaWYgdGhlXG4gKiBmb3JtIGlzIGludmFsaWQ6XG4gKiBgYGB0c1xuICogQFZpZXdDaGlsZChTaXhGb3JtVXRpbERpcmVjdGl2ZSkgc2l4Rm9ybVV0aWwhOiBTaXhGb3JtVXRpbERpcmVjdGl2ZTtcbiAqIC8vIC4uLlxuICogb25TdWJtaXQoKSB7XG4gKiAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICogICAgIHRoaXMuc2l4Rm9ybVV0aWwuZm9jdXNJbnZhbGlkRmllbGQoKTtcbiAqICAgfSBlbHNlIHtcbiAqICAgICAgLy8gLi4uXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2l4Rm9ybVV0aWxdJyxcbn0pXG5leHBvcnQgY2xhc3MgU2l4Rm9ybVV0aWxEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIGZvcm1Hcm91cERpcmVjdGl2ZTogRm9ybUdyb3VwRGlyZWN0aXZlKSB7fVxuXG4gIC8qKiBtYXJrQWxsQ29udHJvbHNBc0RpcnR5KE9iamVjdC52YWx1ZXMoZm9ybUdyb3VwLmNvbnRyb2xzKSk7XG4gICAqIE1hcmtzIGFsbCBmb3JtIGNvbnRyb2xzIGFzIHRvdWNoZWQgYW5kIGRpcnR5LCBhbmQgZm9jdXNlcyB0aGUgZmlyc3RcbiAgICogaW52YWxpZCBmb3JtIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNJbnZhbGlkRmllbGQoKSB7XG4gICAgZm9jdXNJbnZhbGlkRmllbGQodGhpcy5mb3JtR3JvdXBEaXJlY3RpdmUsIHRoaXMuZWxlbWVudFJlZik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9jdXNJbnZhbGlkRmllbGQoZm9ybUdyb3VwRGlyZWN0aXZlOiBGb3JtR3JvdXBEaXJlY3RpdmUsIGZvcm1FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICBmb3JtR3JvdXBEaXJlY3RpdmUuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gIG1hcmtBbGxBc0RpcnR5KFtmb3JtR3JvdXBEaXJlY3RpdmUuZm9ybV0pO1xuXG4gIGNvbnN0IGludmFsaWRFbGVtZW50ID0gZ2V0SW52YWxpZEVsZW1lbnQoZm9ybUVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gIGlmICgnc2V0Rm9jdXMnIGluIGludmFsaWRFbGVtZW50ICYmIHR5cGVvZiBpbnZhbGlkRWxlbWVudD8uc2V0Rm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnZhbGlkRWxlbWVudC5zZXRGb2N1cygpO1xuICB9XG4gIGlmICgnZm9jdXMnIGluIGludmFsaWRFbGVtZW50ICYmIHR5cGVvZiBpbnZhbGlkRWxlbWVudD8uZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnZhbGlkRWxlbWVudC5mb2N1cygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRFbGVtZW50KHBhcmVudDogRWxlbWVudCk6IEVsZW1lbnQge1xuICBjb25zdCBpbnZhbGlkRWxlbWVudCA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKCcubmctaW52YWxpZCcpO1xuICBpZiAoaW52YWxpZEVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIGdldEludmFsaWRFbGVtZW50KGludmFsaWRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gbWFya0FsbEFzRGlydHkoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKTogdm9pZCB7XG4gIGNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG4gICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICBtYXJrQWxsQXNEaXJ0eShPYmplY3QudmFsdWVzKGNvbnRyb2wuY29udHJvbHMpKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgIG1hcmtBbGxBc0RpcnR5KGNvbnRyb2wuY29udHJvbHMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,15 @@
1
+ import { getErrorMessage } from '@six-group/ui-library';
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class ValidationMessagesService {
5
+ getErrorMessage(language, error) {
6
+ return getErrorMessage(language, error);
7
+ }
8
+ }
9
+ ValidationMessagesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValidationMessagesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ ValidationMessagesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValidationMessagesService, providedIn: 'root' });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValidationMessagesService, decorators: [{
12
+ type: Injectable,
13
+ args: [{ providedIn: 'root' }]
14
+ }] });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy92YWxpZGF0aW9uLW1lc3NhZ2VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBNkIsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8seUJBQXlCO0lBQzdCLGVBQWUsQ0FBQyxRQUFrQixFQUFFLEtBQXNCO1FBQy9ELE9BQU8sZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDOztzSEFIVSx5QkFBeUI7MEhBQXpCLHlCQUF5QixjQURaLE1BQU07MkZBQ25CLHlCQUF5QjtrQkFEckMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2UsIExhbmd1YWdlLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdAc2l4LWdyb3VwL3VpLWxpYnJhcnknO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25NZXNzYWdlc1NlcnZpY2Uge1xuICBwdWJsaWMgZ2V0RXJyb3JNZXNzYWdlKGxhbmd1YWdlOiBMYW5ndWFnZSwgZXJyb3I6IFZhbGlkYXRpb25FcnJvcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGdldEVycm9yTWVzc2FnZShsYW5ndWFnZSwgZXJyb3IpO1xuICB9XG59XG4iXX0=