@onemrvapublic/design-system 18.2.10-develop.2 → 18.2.10
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.
- package/assets/i18n/de.json +10 -4
- package/assets/i18n/en.json +10 -4
- package/assets/i18n/fr.json +10 -4
- package/assets/i18n/nl.json +10 -4
- package/esm2022/layout/src/components/layout/layout.component.mjs +3 -3
- package/esm2022/layout/src/components/layout-route/layout-route.component.mjs +3 -3
- package/esm2022/layout/src/components/layout-subroute/layout-subroute.component.mjs +1 -1
- package/esm2022/mat-carousel/src/onemrva-mat-carousel.component.mjs +4 -1
- package/esm2022/mat-input-bank-account/index.mjs +2 -2
- package/esm2022/mat-input-bank-account/src/onemrva-mat-input-iban.component.mjs +288 -0
- package/esm2022/shared/src/lib/services/country-cdn.service.mjs +5 -2
- package/fesm2022/onemrvapublic-design-system-layout.mjs +4 -4
- package/fesm2022/onemrvapublic-design-system-layout.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs +3 -0
- package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-bank-account.mjs +173 -160
- package/fesm2022/onemrvapublic-design-system-mat-input-bank-account.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-shared.mjs +4 -1
- package/fesm2022/onemrvapublic-design-system-shared.mjs.map +1 -1
- package/layout/src/components/layout/layout.component.scss +11 -0
- package/mat-input-bank-account/index.d.ts +1 -1
- package/mat-input-bank-account/src/{bank-account.component.d.ts → onemrva-mat-input-iban.component.d.ts} +41 -28
- package/mat-input-bank-account/src/onemrva-mat-input-iban.component.scss +10 -0
- package/package.json +1 -1
- package/shared/src/lib/services/country-cdn.service.d.ts +5 -65
- package/esm2022/mat-input-bank-account/src/bank-account.component.mjs +0 -223
- package/esm2022/mat-input-bank-account/src/onemrva-mat-input-bank-account.component.mjs +0 -66
- package/mat-input-bank-account/src/bank-account.component.scss +0 -42
- package/mat-input-bank-account/src/onemrva-mat-input-bank-account.component.d.ts +0 -15
- package/mat-input-bank-account/src/onemrva-mat-input-bank-account.component.scss +0 -14
|
@@ -18,72 +18,12 @@ export declare class OnemRvaCDNCountryService {
|
|
|
18
18
|
private cdnService;
|
|
19
19
|
private translateService;
|
|
20
20
|
constructor(cdnService: OnemRvaCDNService, translateService: TranslateService);
|
|
21
|
-
getCountries(): import("rxjs").Observable<
|
|
22
|
-
|
|
23
|
-
code: string;
|
|
24
|
-
dial_code: string;
|
|
25
|
-
zone: string;
|
|
26
|
-
pattern: string;
|
|
27
|
-
placeholder: string;
|
|
28
|
-
translations: {
|
|
29
|
-
fr: string;
|
|
30
|
-
nl: string;
|
|
31
|
-
de: string;
|
|
32
|
-
};
|
|
33
|
-
}[]>;
|
|
34
|
-
getCountriesByZone(zone: string): import("rxjs").Observable<{
|
|
35
|
-
name: string;
|
|
36
|
-
code: string;
|
|
37
|
-
dial_code: string;
|
|
38
|
-
zone: string;
|
|
39
|
-
pattern: string;
|
|
40
|
-
placeholder: string;
|
|
41
|
-
translations: {
|
|
42
|
-
fr: string;
|
|
43
|
-
nl: string;
|
|
44
|
-
de: string;
|
|
45
|
-
};
|
|
46
|
-
}[]>;
|
|
21
|
+
getCountries(): import("rxjs").Observable<OnemrvaMaterialCountry[]>;
|
|
22
|
+
getCountriesByZone(zone: string): import("rxjs").Observable<OnemrvaMaterialCountry[]>;
|
|
47
23
|
getTranslatedCountryName(country: OnemrvaMaterialCountry, languageCode?: string): string;
|
|
48
|
-
findCountryFromCode(code: any): import("rxjs").Observable<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
dial_code: string;
|
|
52
|
-
zone: string;
|
|
53
|
-
pattern: string;
|
|
54
|
-
placeholder: string;
|
|
55
|
-
translations: {
|
|
56
|
-
fr: string;
|
|
57
|
-
nl: string;
|
|
58
|
-
de: string;
|
|
59
|
-
};
|
|
60
|
-
} | undefined>;
|
|
61
|
-
findCountryFromVIESCode(code: any): import("rxjs").Observable<{
|
|
62
|
-
name: string;
|
|
63
|
-
code: string;
|
|
64
|
-
dial_code: string;
|
|
65
|
-
zone: string;
|
|
66
|
-
pattern: string;
|
|
67
|
-
placeholder: string;
|
|
68
|
-
translations: {
|
|
69
|
-
fr: string;
|
|
70
|
-
nl: string;
|
|
71
|
-
de: string;
|
|
72
|
-
};
|
|
73
|
-
} | undefined>;
|
|
74
|
-
findCountryFromPrefix(number: any): import("rxjs").Observable<{
|
|
75
|
-
name: string;
|
|
76
|
-
code: string;
|
|
77
|
-
dial_code: string;
|
|
78
|
-
zone: string;
|
|
79
|
-
pattern: string;
|
|
80
|
-
placeholder: string;
|
|
81
|
-
translations: {
|
|
82
|
-
fr: string;
|
|
83
|
-
nl: string;
|
|
84
|
-
de: string;
|
|
85
|
-
};
|
|
86
|
-
} | undefined>;
|
|
24
|
+
findCountryFromCode(code: any): import("rxjs").Observable<OnemrvaMaterialCountry | undefined>;
|
|
25
|
+
findCountryFromVIESCode(code: any): import("rxjs").Observable<OnemrvaMaterialCountry | undefined>;
|
|
26
|
+
findCountryFromPrefix(number: any): import("rxjs").Observable<OnemrvaMaterialCountry | undefined>;
|
|
87
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<OnemRvaCDNCountryService, never>;
|
|
88
28
|
static ɵprov: i0.ɵɵInjectableDeclaration<OnemRvaCDNCountryService>;
|
|
89
29
|
}
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
2
|
-
import { Component, Inject, Input, Optional, Self, ViewChild, } from '@angular/core';
|
|
3
|
-
import { FormControl, FormsModule, ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
4
|
-
import { MAT_FORM_FIELD, MatFormFieldControl, } from '@angular/material/form-field';
|
|
5
|
-
import { combineLatestWith, distinctUntilChanged, map, of, pairwise, startWith, Subject, takeUntil, } from 'rxjs';
|
|
6
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
7
|
-
import { MatSelectSearchModule } from '@onemrvapublic/design-system/mat-select-search';
|
|
8
|
-
import { bankAccountValidator, IBAN_SUPPORTED_COUNTRIES, } from '@onemrvapublic/design-system/shared';
|
|
9
|
-
import { CommonModule } from '@angular/common';
|
|
10
|
-
import { extractIBAN, friendlyFormatIBAN } from 'ibantools';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/forms";
|
|
13
|
-
import * as i2 from "@angular/cdk/a11y";
|
|
14
|
-
import * as i3 from "@angular/common";
|
|
15
|
-
import * as i4 from "@angular/material/form-field";
|
|
16
|
-
import * as i5 from "@angular/material/select";
|
|
17
|
-
import * as i6 from "@angular/material/core";
|
|
18
|
-
import * as i7 from "@onemrvapublic/design-system/mat-select-search";
|
|
19
|
-
/** Custom `MatFormFieldControl` for bank account number input. */
|
|
20
|
-
export class BankAccountComponent {
|
|
21
|
-
static { this.nextId = 0; }
|
|
22
|
-
get empty() {
|
|
23
|
-
const { value: { countryCode, bban }, } = this.parts;
|
|
24
|
-
return !countryCode && !bban;
|
|
25
|
-
}
|
|
26
|
-
get shouldLabelFloat() {
|
|
27
|
-
return this.focused || !this.empty;
|
|
28
|
-
}
|
|
29
|
-
get placeholder() {
|
|
30
|
-
return this._placeholder;
|
|
31
|
-
}
|
|
32
|
-
set placeholder(value) {
|
|
33
|
-
this._placeholder = value;
|
|
34
|
-
this.stateChanges.next();
|
|
35
|
-
}
|
|
36
|
-
get required() {
|
|
37
|
-
return this._required;
|
|
38
|
-
}
|
|
39
|
-
set required(value) {
|
|
40
|
-
this._required = coerceBooleanProperty(value);
|
|
41
|
-
this.stateChanges.next();
|
|
42
|
-
}
|
|
43
|
-
get disabled() {
|
|
44
|
-
return this._disabled;
|
|
45
|
-
}
|
|
46
|
-
set disabled(value) {
|
|
47
|
-
this._disabled = coerceBooleanProperty(value);
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
49
|
-
this._disabled ? this.parts.disable() : this.parts.enable();
|
|
50
|
-
this.stateChanges.next();
|
|
51
|
-
}
|
|
52
|
-
get value() {
|
|
53
|
-
const { value: { countryCode, bban }, } = this.parts;
|
|
54
|
-
return `${countryCode ?? ''}${bban ?? ''}`;
|
|
55
|
-
}
|
|
56
|
-
set value(iban) {
|
|
57
|
-
const { countryCode, bban } = extractIBAN(iban || '');
|
|
58
|
-
this.parts.setValue({
|
|
59
|
-
countryCode: countryCode || null,
|
|
60
|
-
bban: bban || null,
|
|
61
|
-
});
|
|
62
|
-
this.stateChanges.next();
|
|
63
|
-
}
|
|
64
|
-
get errorState() {
|
|
65
|
-
return this.parts.invalid && this.touched;
|
|
66
|
-
}
|
|
67
|
-
constructor(formBuilder, _focusMonitor, _elementRef, _cd, _formField, ngControl) {
|
|
68
|
-
this._focusMonitor = _focusMonitor;
|
|
69
|
-
this._elementRef = _elementRef;
|
|
70
|
-
this._cd = _cd;
|
|
71
|
-
this._formField = _formField;
|
|
72
|
-
this.ngControl = ngControl;
|
|
73
|
-
this.filterCtrl = new FormControl('');
|
|
74
|
-
this.countryCodes$ = of([]);
|
|
75
|
-
this.stateChanges = new Subject();
|
|
76
|
-
this.destroyNotifier$ = new Subject();
|
|
77
|
-
this.focused = false;
|
|
78
|
-
this.touched = false;
|
|
79
|
-
this.controlType = 'bank-account-input';
|
|
80
|
-
this.id = `bank-account-input-${BankAccountComponent.nextId++}`;
|
|
81
|
-
this.onChange = (_) => {
|
|
82
|
-
//
|
|
83
|
-
};
|
|
84
|
-
this.onTouched = () => {
|
|
85
|
-
//
|
|
86
|
-
};
|
|
87
|
-
this._placeholder = '';
|
|
88
|
-
this._required = false;
|
|
89
|
-
this._disabled = false;
|
|
90
|
-
if (this.ngControl != null) {
|
|
91
|
-
this.ngControl.valueAccessor = this;
|
|
92
|
-
}
|
|
93
|
-
this.parts = formBuilder.group({
|
|
94
|
-
countryCode: ['', [Validators.maxLength(2)]],
|
|
95
|
-
bban: ['', [Validators.required]],
|
|
96
|
-
}, {
|
|
97
|
-
validators: [bankAccountValidator()],
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
ngOnInit() {
|
|
101
|
-
this.countryCodes$ = this.getCountryCodes();
|
|
102
|
-
this.parts.valueChanges
|
|
103
|
-
.pipe(startWith({ countryCode: '', bban: '' }), pairwise(), distinctUntilChanged(), takeUntil(this.destroyNotifier$))
|
|
104
|
-
.subscribe(([_prevIban, { countryCode, bban }]) => {
|
|
105
|
-
this.touched = true;
|
|
106
|
-
if (!bban || bban.length <= 2) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
const potentialCountryCode = bban?.substring(0, 2);
|
|
110
|
-
if (potentialCountryCode?.match(/^[A-Za-z]{2}/)) {
|
|
111
|
-
const restOfTheBankNumber = bban?.substring(2);
|
|
112
|
-
return this.parts.setValue({
|
|
113
|
-
countryCode: potentialCountryCode,
|
|
114
|
-
...getBban(potentialCountryCode, restOfTheBankNumber),
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
return this.parts.patchValue({
|
|
118
|
-
...getBban(countryCode, bban),
|
|
119
|
-
}, { emitEvent: false });
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
ngOnDestroy() {
|
|
123
|
-
this.destroyNotifier$.next();
|
|
124
|
-
this.destroyNotifier$.complete();
|
|
125
|
-
this.stateChanges.complete();
|
|
126
|
-
this._focusMonitor.stopMonitoring(this._elementRef);
|
|
127
|
-
}
|
|
128
|
-
getCountryCodes() {
|
|
129
|
-
return this.filterCtrl.valueChanges.pipe(startWith(''), combineLatestWith(of(IBAN_SUPPORTED_COUNTRIES)), map(([filterVal, countryCodes]) => {
|
|
130
|
-
return countryCodes.filter(code => {
|
|
131
|
-
if (!filterVal) {
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
return code.toLowerCase().includes(filterVal.toLowerCase());
|
|
135
|
-
});
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
138
|
-
autoFocusNext(control, nextElement) {
|
|
139
|
-
if (!control.errors && nextElement) {
|
|
140
|
-
this._focusMonitor.focusVia(nextElement, 'program');
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
//
|
|
144
|
-
// autoFocusPrev(control: AbstractControl, prevElement: HTMLInputElement): void {
|
|
145
|
-
// if (control.value.length < 1) {
|
|
146
|
-
// this._focusMonitor.focusVia(prevElement, 'program');
|
|
147
|
-
// }
|
|
148
|
-
// }
|
|
149
|
-
setDescribedByIds(ids) {
|
|
150
|
-
const controlElement = this._elementRef.nativeElement.querySelector('.bank-account-input-group');
|
|
151
|
-
controlElement.setAttribute('aria-describedby', ids.join(' '));
|
|
152
|
-
}
|
|
153
|
-
onContainerClick() {
|
|
154
|
-
//
|
|
155
|
-
}
|
|
156
|
-
writeValue(iban) {
|
|
157
|
-
this.value = iban;
|
|
158
|
-
}
|
|
159
|
-
registerOnChange(fn) {
|
|
160
|
-
this.onChange = fn;
|
|
161
|
-
}
|
|
162
|
-
registerOnTouched(fn) {
|
|
163
|
-
this.onTouched = fn;
|
|
164
|
-
}
|
|
165
|
-
setDisabledState(isDisabled) {
|
|
166
|
-
this.disabled = isDisabled;
|
|
167
|
-
}
|
|
168
|
-
_handleInput(control, nextElement) {
|
|
169
|
-
this.autoFocusNext(control, nextElement);
|
|
170
|
-
this.onChange(this.value);
|
|
171
|
-
}
|
|
172
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: BankAccountComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FocusMonitor }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MAT_FORM_FIELD, optional: true }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
173
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: BankAccountComponent, isStandalone: true, selector: "bank-account", inputs: { userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], placeholder: "placeholder", required: "required", disabled: "disabled", value: "value" }, host: { properties: { "class.example-floating": "shouldLabelFloat", "id": "id" } }, providers: [
|
|
174
|
-
{ provide: MatFormFieldControl, useExisting: BankAccountComponent },
|
|
175
|
-
], viewQueries: [{ propertyName: "countryCode", first: true, predicate: ["countryCode "], descendants: true }, { propertyName: "bban", first: true, predicate: ["bban"], descendants: true }], ngImport: i0, template: "<div\n role=\"group\"\n class=\"bank-account-input-group\"\n [formGroup]=\"parts\"\n [attr.aria-labelledby]=\"_formField.getLabelId()\"\n>\n <mat-select\n class=\"country-code-select\"\n matTextPrefix\n formControlName=\"countryCode\"\n placeholder=\"XX\"\n (selectionChange)=\"_handleInput(parts.controls.countryCode)\"\n #countryCode\n >\n <mat-option>\n <mat-select-search\n [formControl]=\"filterCtrl\"\n noEntriesFoundLabel=\"no-entries-label\"\n placeholderLabel=\"placeholderLabel\"\n ></mat-select-search>\n </mat-option>\n\n <mat-option *ngFor=\"let country of countryCodes$ | async\" [value]=\"country\">\n <span>{{ country }}</span>\n </mat-option>\n </mat-select>\n\n <input\n id=\"bban-input\"\n name=\"bban-input\"\n class=\"bban-input\"\n formControlName=\"bban\"\n (input)=\"_handleInput(parts.controls.bban)\"\n #bban\n />\n</div>\n", styles: [".bank-account-input-group{display:flex;width:100%}.bank-account-input-group .country-code-input,.bank-account-input-group .bban-input{border:none;background:none;padding:0;outline:none;font:inherit;text-align:left;color:currentcolor}.bank-account-input-group .bban-input{padding-left:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSelectSearchModule }, { kind: "component", type: i7.MatSelectSearchComponent, selector: "mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }] }); }
|
|
176
|
-
}
|
|
177
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: BankAccountComponent, decorators: [{
|
|
178
|
-
type: Component,
|
|
179
|
-
args: [{ selector: 'bank-account', providers: [
|
|
180
|
-
{ provide: MatFormFieldControl, useExisting: BankAccountComponent },
|
|
181
|
-
], host: {
|
|
182
|
-
'[class.example-floating]': 'shouldLabelFloat',
|
|
183
|
-
'[id]': 'id',
|
|
184
|
-
}, standalone: true, imports: [
|
|
185
|
-
CommonModule,
|
|
186
|
-
FormsModule,
|
|
187
|
-
ReactiveFormsModule,
|
|
188
|
-
MatSelectModule,
|
|
189
|
-
MatSelectSearchModule,
|
|
190
|
-
], template: "<div\n role=\"group\"\n class=\"bank-account-input-group\"\n [formGroup]=\"parts\"\n [attr.aria-labelledby]=\"_formField.getLabelId()\"\n>\n <mat-select\n class=\"country-code-select\"\n matTextPrefix\n formControlName=\"countryCode\"\n placeholder=\"XX\"\n (selectionChange)=\"_handleInput(parts.controls.countryCode)\"\n #countryCode\n >\n <mat-option>\n <mat-select-search\n [formControl]=\"filterCtrl\"\n noEntriesFoundLabel=\"no-entries-label\"\n placeholderLabel=\"placeholderLabel\"\n ></mat-select-search>\n </mat-option>\n\n <mat-option *ngFor=\"let country of countryCodes$ | async\" [value]=\"country\">\n <span>{{ country }}</span>\n </mat-option>\n </mat-select>\n\n <input\n id=\"bban-input\"\n name=\"bban-input\"\n class=\"bban-input\"\n formControlName=\"bban\"\n (input)=\"_handleInput(parts.controls.bban)\"\n #bban\n />\n</div>\n", styles: [".bank-account-input-group{display:flex;width:100%}.bank-account-input-group .country-code-input,.bank-account-input-group .bban-input{border:none;background:none;padding:0;outline:none;font:inherit;text-align:left;color:currentcolor}.bank-account-input-group .bban-input{padding-left:4px}\n"] }]
|
|
191
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i4.MatFormField, decorators: [{
|
|
192
|
-
type: Optional
|
|
193
|
-
}, {
|
|
194
|
-
type: Inject,
|
|
195
|
-
args: [MAT_FORM_FIELD]
|
|
196
|
-
}] }, { type: i1.NgControl, decorators: [{
|
|
197
|
-
type: Optional
|
|
198
|
-
}, {
|
|
199
|
-
type: Self
|
|
200
|
-
}] }], propDecorators: { countryCode: [{
|
|
201
|
-
type: ViewChild,
|
|
202
|
-
args: ['countryCode ']
|
|
203
|
-
}], bban: [{
|
|
204
|
-
type: ViewChild,
|
|
205
|
-
args: ['bban']
|
|
206
|
-
}], userAriaDescribedBy: [{
|
|
207
|
-
type: Input,
|
|
208
|
-
args: ['aria-describedby']
|
|
209
|
-
}], placeholder: [{
|
|
210
|
-
type: Input
|
|
211
|
-
}], required: [{
|
|
212
|
-
type: Input
|
|
213
|
-
}], disabled: [{
|
|
214
|
-
type: Input
|
|
215
|
-
}], value: [{
|
|
216
|
-
type: Input
|
|
217
|
-
}] } });
|
|
218
|
-
const getBban = (countryCode = '', bban) => {
|
|
219
|
-
return {
|
|
220
|
-
bban: friendlyFormatIBAN(`${countryCode}${bban}`)?.substring(2) || null,
|
|
221
|
-
};
|
|
222
|
-
};
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuay1hY2NvdW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZW1ydmEvZGVzaWduLXN5c3RlbS9tYXQtaW5wdXQtYmFuay1hY2NvdW50L3NyYy9iYW5rLWFjY291bnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lbXJ2YS9kZXNpZ24tc3lzdGVtL21hdC1pbnB1dC1iYW5rLWFjY291bnQvc3JjL2JhbmstYWNjb3VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBR1gsV0FBVyxFQUNYLG1CQUFtQixFQUVuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsY0FBYyxFQUVkLG1CQUFtQixHQUNwQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLEdBQUcsRUFFSCxFQUFFLEVBQ0YsUUFBUSxFQUNSLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsd0JBQXdCLEdBQ3pCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxX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V0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YscUJBQXFCO3FCQUN0Qjs7MEJBbUhFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs7MEJBQ2pDLFFBQVE7OzBCQUFJLElBQUk7eUNBekdRLFdBQVc7c0JBQXJDLFNBQVM7dUJBQUMsY0FBYztnQkFDTixJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU07Z0JBb0NVLG1CQUFtQjtzQkFBN0MsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBR3JCLFdBQVc7c0JBRGQsS0FBSztnQkFhRixRQUFRO3NCQURYLEtBQUs7Z0JBYUYsUUFBUTtzQkFEWCxLQUFLO2dCQWVGLEtBQUs7c0JBRFIsS0FBSzs7QUF3SlIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxjQUF5QyxFQUFFLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDNUUsT0FBTztRQUNMLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLFdBQVcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJO0tBQ3hFLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIE5nQ29udHJvbCxcbiAgRm9ybXNNb2R1bGUsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIEFic3RyYWN0Q29udHJvbCxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgTUFUX0ZPUk1fRklFTEQsXG4gIE1hdEZvcm1GaWVsZCxcbiAgTWF0Rm9ybUZpZWxkQ29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge1xuICBjb21iaW5lTGF0ZXN0V2l0aCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHBhaXJ3aXNlLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U2VsZWN0U2VhcmNoTW9kdWxlIH0gZnJvbSAnQG9uZW1ydmFwdWJsaWMvZGVzaWduLXN5c3RlbS9tYXQtc2VsZWN0LXNlYXJjaCc7XG5pbXBvcnQge1xuICBiYW5rQWNjb3VudFZhbGlkYXRvcixcbiAgSUJBTl9TVVBQT1JURURfQ09VTlRSSUVTLFxufSBmcm9tICdAb25lbXJ2YXB1YmxpYy9kZXNpZ24tc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZXh0cmFjdElCQU4sIGZyaWVuZGx5Rm9ybWF0SUJBTiB9IGZyb20gJ2liYW50b29scyc7XG5cbi8qKiBDdXN0b20gYE1hdEZvcm1GaWVsZENvbnRyb2xgIGZvciBiYW5rIGFjY291bnQgbnVtYmVyIGlucHV0LiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFuay1hY2NvdW50JyxcbiAgdGVtcGxhdGVVcmw6ICdiYW5rLWFjY291bnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJ2JhbmstYWNjb3VudC5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEJhbmtBY2NvdW50Q29tcG9uZW50IH0sXG4gIF0sXG5cbiAgaG9zdDoge1xuICAgICdbY2xhc3MuZXhhbXBsZS1mbG9hdGluZ10nOiAnc2hvdWxkTGFiZWxGbG9hdCcsXG4gICAgJ1tpZF0nOiAnaWQnLFxuICB9LFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdFNlbGVjdFNlYXJjaE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFua0FjY291bnRDb21wb25lbnRcbiAgaW1wbGVtZW50c1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIE1hdEZvcm1GaWVsZENvbnRyb2w8c3RyaW5nPixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0XG57XG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvdW50cnlDb2RlICcpIGNvdW50cnlDb2RlITogSFRNTElucHV0RWxlbWVudDtcbiAgQFZpZXdDaGlsZCgnYmJhbicpIGJiYW4hOiBIVE1MSW5wdXRFbGVtZW50O1xuXG4gIGZpbHRlckN0cmw6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuICBwYXJ0czogRm9ybUdyb3VwPHtcbiAgICBjb3VudHJ5Q29kZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gICAgYmJhbjogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gIH0+O1xuXG4gIGNvdW50cnlDb2RlcyQ6IE9ic2VydmFibGU8YW55PiA9IG9mKFtdKTtcbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgZGVzdHJveU5vdGlmaWVyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGZvY3VzZWQgPSBmYWxzZTtcbiAgdG91Y2hlZCA9IGZhbHNlO1xuICBjb250cm9sVHlwZSA9ICdiYW5rLWFjY291bnQtaW5wdXQnO1xuICBpZCA9IGBiYW5rLWFjY291bnQtaW5wdXQtJHtCYW5rQWNjb3VudENvbXBvbmVudC5uZXh0SWQrK31gO1xuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgICAvL1xuICB9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7XG4gICAgLy9cbiAgfTtcblxuICBnZXQgZW1wdHkoKSB7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWU6IHsgY291bnRyeUNvZGUsIGJiYW4gfSxcbiAgICB9ID0gdGhpcy5wYXJ0cztcblxuICAgIHJldHVybiAhY291bnRyeUNvZGUgJiYgIWJiYW47XG4gIH1cblxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0ZXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBASW5wdXQoJ2FyaWEtZGVzY3JpYmVkYnknKSB1c2VyQXJpYURlc2NyaWJlZEJ5OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG5cbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyID0gJyc7XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnBhcnRzLmRpc2FibGUoKSA6IHRoaXMucGFydHMuZW5hYmxlKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZTogeyBjb3VudHJ5Q29kZSwgYmJhbiB9LFxuICAgIH0gPSB0aGlzLnBhcnRzO1xuICAgIHJldHVybiBgJHtjb3VudHJ5Q29kZSA/PyAnJ30ke2JiYW4gPz8gJyd9YDtcbiAgfVxuXG4gIHNldCB2YWx1ZShpYmFuOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgY29uc3QgeyBjb3VudHJ5Q29kZSwgYmJhbiB9ID0gZXh0cmFjdElCQU4oaWJhbiB8fCAnJyk7XG5cbiAgICB0aGlzLnBhcnRzLnNldFZhbHVlKHtcbiAgICAgIGNvdW50cnlDb2RlOiBjb3VudHJ5Q29kZSB8fCBudWxsLFxuICAgICAgYmJhbjogYmJhbiB8fCBudWxsLFxuICAgIH0pO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIGdldCBlcnJvclN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmludmFsaWQgJiYgdGhpcy50b3VjaGVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9GT1JNX0ZJRUxEKSBwdWJsaWMgX2Zvcm1GaWVsZDogTWF0Rm9ybUZpZWxkLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICApIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5wYXJ0cyA9IGZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAge1xuICAgICAgICBjb3VudHJ5Q29kZTogWycnLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMildXSxcbiAgICAgICAgYmJhbjogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdG9yczogW2JhbmtBY2NvdW50VmFsaWRhdG9yKCldLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb3VudHJ5Q29kZXMkID0gdGhpcy5nZXRDb3VudHJ5Q29kZXMoKTtcblxuICAgIHRoaXMucGFydHMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHsgY291bnRyeUNvZGU6ICcnLCBiYmFuOiAnJyB9KSxcbiAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveU5vdGlmaWVyJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbX3ByZXZJYmFuLCB7IGNvdW50cnlDb2RlLCBiYmFuIH1dKSA9PiB7XG4gICAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICAgIGlmICghYmJhbiB8fCBiYmFuLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG90ZW50aWFsQ291bnRyeUNvZGUgPSBiYmFuPy5zdWJzdHJpbmcoMCwgMik7XG5cbiAgICAgICAgaWYgKHBvdGVudGlhbENvdW50cnlDb2RlPy5tYXRjaCgvXltBLVphLXpdezJ9LykpIHtcbiAgICAgICAgICBjb25zdCByZXN0T2ZUaGVCYW5rTnVtYmVyID0gYmJhbj8uc3Vic3RyaW5nKDIpO1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRzLnNldFZhbHVlKHtcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiBwb3RlbnRpYWxDb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIC4uLmdldEJiYW4ocG90ZW50aWFsQ291bnRyeUNvZGUsIHJlc3RPZlRoZUJhbmtOdW1iZXIpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGFydHMucGF0Y2hWYWx1ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5nZXRCYmFuKGNvdW50cnlDb2RlLCBiYmFuKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3lOb3RpZmllciQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveU5vdGlmaWVyJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpO1xuICB9XG5cbiAgZ2V0Q291bnRyeUNvZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgY29tYmluZUxhdGVzdFdpdGgob2YoSUJBTl9TVVBQT1JURURfQ09VTlRSSUVTKSksXG4gICAgICBtYXAoKFtmaWx0ZXJWYWwsIGNvdW50cnlDb2Rlc10pID0+IHtcbiAgICAgICAgcmV0dXJuIGNvdW50cnlDb2Rlcy5maWx0ZXIoY29kZSA9PiB7XG4gICAgICAgICAgaWYgKCFmaWx0ZXJWYWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2RlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBhdXRvRm9jdXNOZXh0KFxuICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICBuZXh0RWxlbWVudD86IEhUTUxJbnB1dEVsZW1lbnQsXG4gICk6IHZvaWQge1xuICAgIGlmICghY29udHJvbC5lcnJvcnMgJiYgbmV4dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYShuZXh0RWxlbWVudCwgJ3Byb2dyYW0nKTtcbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBhdXRvRm9jdXNQcmV2KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcHJldkVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgLy8gICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggPCAxKSB7XG4gIC8vICAgICB0aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEocHJldkVsZW1lbnQsICdwcm9ncmFtJyk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGNvbnRyb2xFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLmJhbmstYWNjb3VudC1pbnB1dC1ncm91cCcsXG4gICAgKSE7XG4gICAgY29udHJvbEVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgaWRzLmpvaW4oJyAnKSk7XG4gIH1cblxuICBvbkNvbnRhaW5lckNsaWNrKCkge1xuICAgIC8vXG4gIH1cblxuICB3cml0ZVZhbHVlKGliYW46IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gaWJhbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBfaGFuZGxlSW5wdXQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBuZXh0RWxlbWVudD86IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9Gb2N1c05leHQoY29udHJvbCwgbmV4dEVsZW1lbnQpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cbn1cblxuY29uc3QgZ2V0QmJhbiA9IChjb3VudHJ5Q29kZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9ICcnLCBiYmFuOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBiYmFuOiBmcmllbmRseUZvcm1hdElCQU4oYCR7Y291bnRyeUNvZGV9JHtiYmFufWApPy5zdWJzdHJpbmcoMikgfHwgbnVsbCxcbiAgfTtcbn07XG4iLCI8ZGl2XG4gIHJvbGU9XCJncm91cFwiXG4gIGNsYXNzPVwiYmFuay1hY2NvdW50LWlucHV0LWdyb3VwXCJcbiAgW2Zvcm1Hcm91cF09XCJwYXJ0c1wiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJfZm9ybUZpZWxkLmdldExhYmVsSWQoKVwiXG4+XG4gIDxtYXQtc2VsZWN0XG4gICAgY2xhc3M9XCJjb3VudHJ5LWNvZGUtc2VsZWN0XCJcbiAgICBtYXRUZXh0UHJlZml4XG4gICAgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeUNvZGVcIlxuICAgIHBsYWNlaG9sZGVyPVwiWFhcIlxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiX2hhbmRsZUlucHV0KHBhcnRzLmNvbnRyb2xzLmNvdW50cnlDb2RlKVwiXG4gICAgI2NvdW50cnlDb2RlXG4gID5cbiAgICA8bWF0LW9wdGlvbj5cbiAgICAgIDxtYXQtc2VsZWN0LXNlYXJjaFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZmlsdGVyQ3RybFwiXG4gICAgICAgIG5vRW50cmllc0ZvdW5kTGFiZWw9XCJuby1lbnRyaWVzLWxhYmVsXCJcbiAgICAgICAgcGxhY2Vob2xkZXJMYWJlbD1cInBsYWNlaG9sZGVyTGFiZWxcIlxuICAgICAgPjwvbWF0LXNlbGVjdC1zZWFyY2g+XG4gICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvdW50cnkgb2YgY291bnRyeUNvZGVzJCB8IGFzeW5jXCIgW3ZhbHVlXT1cImNvdW50cnlcIj5cbiAgICAgIDxzcGFuPnt7IGNvdW50cnkgfX08L3NwYW4+XG4gICAgPC9tYXQtb3B0aW9uPlxuICA8L21hdC1zZWxlY3Q+XG5cbiAgPGlucHV0XG4gICAgaWQ9XCJiYmFuLWlucHV0XCJcbiAgICBuYW1lPVwiYmJhbi1pbnB1dFwiXG4gICAgY2xhc3M9XCJiYmFuLWlucHV0XCJcbiAgICBmb3JtQ29udHJvbE5hbWU9XCJiYmFuXCJcbiAgICAoaW5wdXQpPVwiX2hhbmRsZUlucHV0KHBhcnRzLmNvbnRyb2xzLmJiYW4pXCJcbiAgICAjYmJhblxuICAvPlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, Input, ViewEncapsulation, } from '@angular/core';
|
|
3
|
-
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
5
|
-
import { MatInputModule } from '@angular/material/input';
|
|
6
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
7
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
8
|
-
import { Subject } from 'rxjs';
|
|
9
|
-
import { MatSelectSearchModule } from '@onemrvapublic/design-system/mat-select-search';
|
|
10
|
-
import { BankAccountComponent } from './bank-account.component';
|
|
11
|
-
import { bankAccountValidator } from '@onemrvapublic/design-system/shared';
|
|
12
|
-
import { ValidationErrorsIBAN } from 'ibantools';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "@angular/common";
|
|
15
|
-
import * as i2 from "@angular/material/form-field";
|
|
16
|
-
import * as i3 from "@angular/forms";
|
|
17
|
-
import * as i4 from "@ngx-translate/core";
|
|
18
|
-
export class OnemrvaMatInputBankAccountComponent {
|
|
19
|
-
constructor() {
|
|
20
|
-
this.key = 'accountNumber';
|
|
21
|
-
this.hint = '';
|
|
22
|
-
this.destroyNotifier$ = new Subject();
|
|
23
|
-
}
|
|
24
|
-
ngOnInit() {
|
|
25
|
-
this.accountNumber.addValidators(bankAccountValidator());
|
|
26
|
-
}
|
|
27
|
-
errors() {
|
|
28
|
-
const bankNumberErrors = this.accountNumber.errors;
|
|
29
|
-
if (!bankNumberErrors) {
|
|
30
|
-
return '';
|
|
31
|
-
}
|
|
32
|
-
if (bankNumberErrors[ValidationErrorsIBAN[ValidationErrorsIBAN.WrongBBANLength]]) {
|
|
33
|
-
return 'input.bank.length';
|
|
34
|
-
}
|
|
35
|
-
if (bankNumberErrors[ValidationErrorsIBAN[ValidationErrorsIBAN.WrongIBANChecksum]]) {
|
|
36
|
-
return 'input.bank.checksum';
|
|
37
|
-
}
|
|
38
|
-
return 'input.bank.invalid';
|
|
39
|
-
}
|
|
40
|
-
ngOnDestroy() {
|
|
41
|
-
this.destroyNotifier$.next();
|
|
42
|
-
this.destroyNotifier$.complete();
|
|
43
|
-
}
|
|
44
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: OnemrvaMatInputBankAccountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: OnemrvaMatInputBankAccountComponent, isStandalone: true, selector: "onemrva-mat-input-bank-account", inputs: { accountNumber: "accountNumber", key: "key", hint: "hint" }, ngImport: i0, template: "<mat-form-field class=\"onemrva-bank-account-input\">\n <mat-label>{{ key | translate }}</mat-label>\n\n <bank-account [formControl]=\"accountNumber\" />\n\n <mat-hint *ngIf=\"hint !== ''\">{{ hint }}</mat-hint>\n\n <mat-error>\n {{ errors() | translate }}\n </mat-error>\n</mat-form-field>\n", styles: [".onemrva-bank-account-input .mat-mdc-select-arrow-wrapper{margin-left:4px}.onemrva-bank-account-input .mat-mdc-form-field-infix{min-width:320px!important}.onemrva-bank-account-input .mat-mdc-form-field-infix .onemrva-bank-account-text{padding-left:4px;vertical-align:middle}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectSearchModule }, { kind: "component", type: BankAccountComponent, selector: "bank-account", inputs: ["aria-describedby", "placeholder", "required", "disabled", "value"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
46
|
-
}
|
|
47
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: OnemrvaMatInputBankAccountComponent, decorators: [{
|
|
48
|
-
type: Component,
|
|
49
|
-
args: [{ selector: 'onemrva-mat-input-bank-account', standalone: true, imports: [
|
|
50
|
-
CommonModule,
|
|
51
|
-
MatInputModule,
|
|
52
|
-
MatFormFieldModule,
|
|
53
|
-
MatSelectModule,
|
|
54
|
-
ReactiveFormsModule,
|
|
55
|
-
TranslateModule,
|
|
56
|
-
MatSelectSearchModule,
|
|
57
|
-
BankAccountComponent,
|
|
58
|
-
], encapsulation: ViewEncapsulation.None, template: "<mat-form-field class=\"onemrva-bank-account-input\">\n <mat-label>{{ key | translate }}</mat-label>\n\n <bank-account [formControl]=\"accountNumber\" />\n\n <mat-hint *ngIf=\"hint !== ''\">{{ hint }}</mat-hint>\n\n <mat-error>\n {{ errors() | translate }}\n </mat-error>\n</mat-form-field>\n", styles: [".onemrva-bank-account-input .mat-mdc-select-arrow-wrapper{margin-left:4px}.onemrva-bank-account-input .mat-mdc-form-field-infix{min-width:320px!important}.onemrva-bank-account-input .mat-mdc-form-field-infix .onemrva-bank-account-text{padding-left:4px;vertical-align:middle}\n"] }]
|
|
59
|
-
}], propDecorators: { accountNumber: [{
|
|
60
|
-
type: Input
|
|
61
|
-
}], key: [{
|
|
62
|
-
type: Input
|
|
63
|
-
}], hint: [{
|
|
64
|
-
type: Input
|
|
65
|
-
}] } });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lbXJ2YS1tYXQtaW5wdXQtYmFuay1hY2NvdW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZW1ydmEvZGVzaWduLXN5c3RlbS9tYXQtaW5wdXQtYmFuay1hY2NvdW50L3NyYy9vbmVtcnZhLW1hdC1pbnB1dC1iYW5rLWFjY291bnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lbXJ2YS9kZXNpZ24tc3lzdGVtL21hdC1pbnB1dC1iYW5rLWFjY291bnQvc3JjL29uZW1ydmEtbWF0LWlucHV0LWJhbmstYWNjb3VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFtQmpELE1BQU0sT0FBTyxtQ0FBbUM7SUFqQmhEO1FBbUJXLFFBQUcsR0FBRyxlQUFlLENBQUM7UUFDdEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVuQixxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0tBb0N4QztJQWxDQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUVuRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUNFLGdCQUFnQixDQUNkLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUMzRCxFQUNELENBQUM7WUFDRCxPQUFPLG1CQUFtQixDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUNFLGdCQUFnQixDQUNkLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQzdELEVBQ0QsQ0FBQztZQUNELE9BQU8scUJBQXFCLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7OEdBeENVLG1DQUFtQztrR0FBbkMsbUNBQW1DLGdLQ3RDaEQsOFNBV0EsNlVEZ0JJLFlBQVksa0lBQ1osY0FBYywrZEFDZCxrQkFBa0IsOEJBQ2xCLGVBQWUsOEJBQ2YsbUJBQW1CLHlUQUNuQixlQUFlLDJGQUNmLHFCQUFxQiwrQkFDckIsb0JBQW9COzsyRkFJWCxtQ0FBbUM7a0JBakIvQyxTQUFTOytCQUNFLGdDQUFnQyxjQUc5QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQixvQkFBb0I7cUJBQ3JCLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7OEJBRzVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE1hdFNlbGVjdFNlYXJjaE1vZHVsZSB9IGZyb20gJ0BvbmVtcnZhcHVibGljL2Rlc2lnbi1zeXN0ZW0vbWF0LXNlbGVjdC1zZWFyY2gnO1xuaW1wb3J0IHsgQmFua0FjY291bnRDb21wb25lbnQgfSBmcm9tICcuL2JhbmstYWNjb3VudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgYmFua0FjY291bnRWYWxpZGF0b3IgfSBmcm9tICdAb25lbXJ2YXB1YmxpYy9kZXNpZ24tc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JzSUJBTiB9IGZyb20gJ2liYW50b29scyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29uZW1ydmEtbWF0LWlucHV0LWJhbmstYWNjb3VudCcsXG4gIHN0eWxlVXJsczogWydvbmVtcnZhLW1hdC1pbnB1dC1iYW5rLWFjY291bnQuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICdvbmVtcnZhLW1hdC1pbnB1dC1iYW5rLWFjY291bnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTWF0U2VsZWN0U2VhcmNoTW9kdWxlLFxuICAgIEJhbmtBY2NvdW50Q29tcG9uZW50LFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBPbmVtcnZhTWF0SW5wdXRCYW5rQWNjb3VudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgYWNjb3VudE51bWJlciE6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xuICBASW5wdXQoKSBrZXkgPSAnYWNjb3VudE51bWJlcic7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcblxuICBkZXN0cm95Tm90aWZpZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFjY291bnROdW1iZXIuYWRkVmFsaWRhdG9ycyhiYW5rQWNjb3VudFZhbGlkYXRvcigpKTtcbiAgfVxuXG4gIGVycm9ycygpIHtcbiAgICBjb25zdCBiYW5rTnVtYmVyRXJyb3JzID0gdGhpcy5hY2NvdW50TnVtYmVyLmVycm9ycztcblxuICAgIGlmICghYmFua051bWJlckVycm9ycykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGJhbmtOdW1iZXJFcnJvcnNbXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcnNJQkFOW1ZhbGlkYXRpb25FcnJvcnNJQkFOLldyb25nQkJBTkxlbmd0aF1cbiAgICAgIF1cbiAgICApIHtcbiAgICAgIHJldHVybiAnaW5wdXQuYmFuay5sZW5ndGgnO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGJhbmtOdW1iZXJFcnJvcnNbXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcnNJQkFOW1ZhbGlkYXRpb25FcnJvcnNJQkFOLldyb25nSUJBTkNoZWNrc3VtXVxuICAgICAgXVxuICAgICkge1xuICAgICAgcmV0dXJuICdpbnB1dC5iYW5rLmNoZWNrc3VtJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ2lucHV0LmJhbmsuaW52YWxpZCc7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3lOb3RpZmllciQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveU5vdGlmaWVyJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJvbmVtcnZhLWJhbmstYWNjb3VudC1pbnB1dFwiPlxuICA8bWF0LWxhYmVsPnt7IGtleSB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuXG4gIDxiYW5rLWFjY291bnQgW2Zvcm1Db250cm9sXT1cImFjY291bnROdW1iZXJcIiAvPlxuXG4gIDxtYXQtaGludCAqbmdJZj1cImhpbnQgIT09ICcnXCI+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG5cbiAgPG1hdC1lcnJvcj5cbiAgICB7eyBlcnJvcnMoKSB8IHRyYW5zbGF0ZSB9fVxuICA8L21hdC1lcnJvcj5cbjwvbWF0LWZvcm0tZmllbGQ+XG4iXX0=
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
.bank-account-input-group {
|
|
2
|
-
display: flex;
|
|
3
|
-
width: 100%;
|
|
4
|
-
|
|
5
|
-
.country-code-input,
|
|
6
|
-
.bban-input {
|
|
7
|
-
border: none;
|
|
8
|
-
background: none;
|
|
9
|
-
padding: 0;
|
|
10
|
-
outline: none;
|
|
11
|
-
font: inherit;
|
|
12
|
-
text-align: left;
|
|
13
|
-
color: currentcolor;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
.bban-input {
|
|
17
|
-
padding-left: 4px;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
//.example-tel-input-container {
|
|
22
|
-
// display: flex;
|
|
23
|
-
//}
|
|
24
|
-
//
|
|
25
|
-
//.example-tel-input-element {
|
|
26
|
-
// border: none;
|
|
27
|
-
// background: none;
|
|
28
|
-
// padding: 0;
|
|
29
|
-
// outline: none;
|
|
30
|
-
// font: inherit;
|
|
31
|
-
// text-align: center;
|
|
32
|
-
// color: currentcolor;
|
|
33
|
-
//}
|
|
34
|
-
//
|
|
35
|
-
//.example-tel-input-spacer {
|
|
36
|
-
// opacity: 0;
|
|
37
|
-
// transition: opacity 200ms;
|
|
38
|
-
//}
|
|
39
|
-
|
|
40
|
-
//:host.example-floating .example-tel-input-spacer {
|
|
41
|
-
// opacity: 1;
|
|
42
|
-
//}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
|
-
import { FormControl } from '@angular/forms';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class OnemrvaMatInputBankAccountComponent implements OnInit, OnDestroy {
|
|
6
|
-
accountNumber: FormControl<string | null>;
|
|
7
|
-
key: string;
|
|
8
|
-
hint: string;
|
|
9
|
-
destroyNotifier$: Subject<void>;
|
|
10
|
-
ngOnInit(): void;
|
|
11
|
-
errors(): "" | "input.bank.length" | "input.bank.checksum" | "input.bank.invalid";
|
|
12
|
-
ngOnDestroy(): void;
|
|
13
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<OnemrvaMatInputBankAccountComponent, never>;
|
|
14
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<OnemrvaMatInputBankAccountComponent, "onemrva-mat-input-bank-account", never, { "accountNumber": { "alias": "accountNumber"; "required": false; }; "key": { "alias": "key"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; }, {}, never, never, true, never>;
|
|
15
|
-
}
|