@onemrvapublic/design-system 18.2.10-develop.1 → 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.
Files changed (30) hide show
  1. package/assets/i18n/de.json +10 -4
  2. package/assets/i18n/en.json +10 -4
  3. package/assets/i18n/fr.json +10 -4
  4. package/assets/i18n/nl.json +10 -4
  5. package/esm2022/layout/src/components/layout/layout.component.mjs +3 -3
  6. package/esm2022/layout/src/components/layout-route/layout-route.component.mjs +3 -3
  7. package/esm2022/layout/src/components/layout-subroute/layout-subroute.component.mjs +1 -1
  8. package/esm2022/mat-carousel/src/onemrva-mat-carousel.component.mjs +4 -1
  9. package/esm2022/mat-input-bank-account/index.mjs +2 -2
  10. package/esm2022/mat-input-bank-account/src/onemrva-mat-input-iban.component.mjs +288 -0
  11. package/esm2022/shared/src/lib/services/country-cdn.service.mjs +5 -2
  12. package/fesm2022/onemrvapublic-design-system-layout.mjs +4 -4
  13. package/fesm2022/onemrvapublic-design-system-layout.mjs.map +1 -1
  14. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs +3 -0
  15. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs.map +1 -1
  16. package/fesm2022/onemrvapublic-design-system-mat-input-bank-account.mjs +173 -160
  17. package/fesm2022/onemrvapublic-design-system-mat-input-bank-account.mjs.map +1 -1
  18. package/fesm2022/onemrvapublic-design-system-shared.mjs +4 -1
  19. package/fesm2022/onemrvapublic-design-system-shared.mjs.map +1 -1
  20. package/layout/src/components/layout/layout.component.scss +11 -0
  21. package/mat-input-bank-account/index.d.ts +1 -1
  22. package/mat-input-bank-account/src/{bank-account.component.d.ts → onemrva-mat-input-iban.component.d.ts} +41 -28
  23. package/mat-input-bank-account/src/onemrva-mat-input-iban.component.scss +10 -0
  24. package/package.json +1 -1
  25. package/shared/src/lib/services/country-cdn.service.d.ts +5 -65
  26. package/esm2022/mat-input-bank-account/src/bank-account.component.mjs +0 -223
  27. package/esm2022/mat-input-bank-account/src/onemrva-mat-input-bank-account.component.mjs +0 -66
  28. package/mat-input-bank-account/src/bank-account.component.scss +0 -42
  29. package/mat-input-bank-account/src/onemrva-mat-input-bank-account.component.d.ts +0 -15
  30. package/mat-input-bank-account/src/onemrva-mat-input-bank-account.component.scss +0 -14
@@ -1,72 +1,33 @@
1
1
  import * as i3 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Component, Optional, Inject, Self, ViewChild, Input, ViewEncapsulation } from '@angular/core';
4
+ import { EventEmitter, Component, ViewEncapsulation, Optional, Inject, Self, ViewChild, Input, Output } from '@angular/core';
5
5
  import * as i1 from '@angular/forms';
6
- import { FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
7
- import * as i2$1 from '@angular/material/form-field';
8
- import { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';
6
+ import { FormControl, Validators, ReactiveFormsModule } from '@angular/forms';
7
+ import * as i8 from '@angular/material/form-field';
8
+ import { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule, MatPrefix } from '@angular/material/form-field';
9
+ import * as i4 from '@angular/material/input';
9
10
  import { MatInputModule } from '@angular/material/input';
10
11
  import * as i5 from '@angular/material/select';
11
12
  import { MatSelectModule } from '@angular/material/select';
12
- import * as i4 from '@ngx-translate/core';
13
13
  import { TranslateModule } from '@ngx-translate/core';
14
- import { of, Subject, startWith, pairwise, distinctUntilChanged, takeUntil, combineLatestWith, map } from 'rxjs';
14
+ import { of, Subject, startWith, takeUntil, pairwise, distinctUntilChanged, combineLatestWith } from 'rxjs';
15
15
  import * as i7 from '@onemrvapublic/design-system/mat-select-search';
16
16
  import { MatSelectSearchModule } from '@onemrvapublic/design-system/mat-select-search';
17
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
18
17
  import { bankAccountValidator, IBAN_SUPPORTED_COUNTRIES } from '@onemrvapublic/design-system/shared';
19
- import { extractIBAN, friendlyFormatIBAN, ValidationErrorsIBAN } from 'ibantools';
18
+ import { map } from 'rxjs/operators';
19
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
20
+ import { extractIBAN, isValidIBAN, friendlyFormatIBAN, countrySpecs } from 'ibantools';
20
21
  import * as i2 from '@angular/cdk/a11y';
21
22
  import * as i6 from '@angular/material/core';
22
23
 
23
- /** Custom `MatFormFieldControl` for bank account number input. */
24
- class BankAccountComponent {
24
+ class OnemrvaMatInputIbanComponent {
25
25
  static { this.nextId = 0; }
26
- get empty() {
27
- const { value: { countryCode, bban }, } = this.parts;
28
- return !countryCode && !bban;
29
- }
30
- get shouldLabelFloat() {
31
- return this.focused || !this.empty;
32
- }
33
- get placeholder() {
34
- return this._placeholder;
35
- }
36
- set placeholder(value) {
37
- this._placeholder = value;
38
- this.stateChanges.next();
39
- }
40
- get required() {
41
- return this._required;
42
- }
43
- set required(value) {
44
- this._required = coerceBooleanProperty(value);
45
- this.stateChanges.next();
46
- }
47
- get disabled() {
48
- return this._disabled;
49
- }
50
- set disabled(value) {
51
- this._disabled = coerceBooleanProperty(value);
52
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
53
- this._disabled ? this.parts.disable() : this.parts.enable();
54
- this.stateChanges.next();
55
- }
56
- get value() {
57
- const { value: { countryCode, bban }, } = this.parts;
58
- return `${countryCode ?? ''}${bban ?? ''}`;
59
- }
60
- set value(iban) {
61
- const { countryCode, bban } = extractIBAN(iban || '');
62
- this.parts.setValue({
63
- countryCode: countryCode || null,
64
- bban: bban || null,
65
- });
66
- this.stateChanges.next();
26
+ get bbanField() {
27
+ return this.parts.get('bban');
67
28
  }
68
- get errorState() {
69
- return this.parts.invalid && this.touched;
29
+ get countryCodeField() {
30
+ return this.parts.get('countryCode');
70
31
  }
71
32
  constructor(formBuilder, _focusMonitor, _elementRef, _cd, _formField, ngControl) {
72
33
  this._focusMonitor = _focusMonitor;
@@ -74,23 +35,31 @@ class BankAccountComponent {
74
35
  this._cd = _cd;
75
36
  this._formField = _formField;
76
37
  this.ngControl = ngControl;
77
- this.filterCtrl = new FormControl('');
38
+ this.label = 'IBAN';
39
+ this.noEntriesFoundLabel = 'Not found';
40
+ this.placeholderLabel = 'Search';
41
+ this.searchAriaLabel = 'Search';
42
+ this.hint = '';
43
+ this.getCountry = new EventEmitter();
78
44
  this.countryCodes$ = of([]);
79
- this.stateChanges = new Subject();
45
+ this.filterCtrl = new FormControl('');
80
46
  this.destroyNotifier$ = new Subject();
47
+ this.placeholderIban = '';
48
+ this.controlType = 'bank-account-input';
49
+ this.stateChanges = new Subject();
81
50
  this.focused = false;
51
+ this.id = `bank-account-input-${OnemrvaMatInputIbanComponent.nextId++}`;
82
52
  this.touched = false;
83
- this.controlType = 'bank-account-input';
84
- this.id = `bank-account-input-${BankAccountComponent.nextId++}`;
85
53
  this.onChange = (_) => {
86
54
  //
87
55
  };
88
56
  this.onTouched = () => {
89
57
  //
90
58
  };
59
+ this.readonly = false;
60
+ this._disabled = false;
91
61
  this._placeholder = '';
92
62
  this._required = false;
93
- this._disabled = false;
94
63
  if (this.ngControl != null) {
95
64
  this.ngControl.valueAccessor = this;
96
65
  }
@@ -101,33 +70,105 @@ class BankAccountComponent {
101
70
  validators: [bankAccountValidator()],
102
71
  });
103
72
  }
73
+ errors() {
74
+ return this.parts.errors;
75
+ }
76
+ get errorState() {
77
+ return this.parts.invalid && this.touched;
78
+ }
79
+ get shouldLabelFloat() {
80
+ return this.focused || !this.empty;
81
+ }
82
+ get empty() {
83
+ const { value: { countryCode, bban }, } = this.parts;
84
+ return !countryCode && !bban;
85
+ }
86
+ get value() {
87
+ const { value: { countryCode, bban }, } = this.parts;
88
+ return `${countryCode ?? ''}${bban ?? ''}`;
89
+ }
90
+ set value(iban) {
91
+ const { countryCode, bban } = extractIBAN(iban || '');
92
+ this.parts.setValue({
93
+ countryCode: countryCode || null,
94
+ bban: bban || null,
95
+ });
96
+ this.stateChanges.next();
97
+ }
98
+ get disabled() {
99
+ return this._disabled;
100
+ }
101
+ set disabled(value) {
102
+ this._disabled = coerceBooleanProperty(value);
103
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
104
+ this._disabled ? this.parts.disable() : this.parts.enable();
105
+ this.stateChanges.next();
106
+ }
107
+ get placeholder() {
108
+ return this._placeholder;
109
+ }
110
+ set placeholder(value) {
111
+ this._placeholder = value;
112
+ this.stateChanges.next();
113
+ }
114
+ get required() {
115
+ return this._required;
116
+ }
117
+ set required(value) {
118
+ this._required = coerceBooleanProperty(value);
119
+ this.stateChanges.next();
120
+ }
121
+ updateNumber(number) {
122
+ let shownValue = number.replace(/[^a-zA-Z0-9]/g, '');
123
+ // BE45063712751789
124
+ const fullNumber = this.countryCodeField.value + number;
125
+ if (isValidIBAN(fullNumber)) {
126
+ const formattedValue = friendlyFormatIBAN(fullNumber);
127
+ if (formattedValue !== null) {
128
+ shownValue = formattedValue.substring(2);
129
+ }
130
+ }
131
+ this.bbanField.patchValue(shownValue, { emitEvent: false });
132
+ }
104
133
  ngOnInit() {
105
134
  this.countryCodes$ = this.getCountryCodes();
106
- this.parts.valueChanges
107
- .pipe(startWith({ countryCode: '', bban: '' }), pairwise(), distinctUntilChanged(), takeUntil(this.destroyNotifier$))
108
- .subscribe(([_prevIban, { countryCode, bban }]) => {
135
+ this.bbanField.valueChanges
136
+ .pipe(startWith(this.bbanField.getRawValue()), takeUntil(this.destroyNotifier$))
137
+ .subscribe(number => {
138
+ if (number !== null && number !== '') {
139
+ if (this.firstTwoCharsAreLetters(number)) {
140
+ const code = number?.substring(0, 2).toUpperCase();
141
+ const country = IBAN_SUPPORTED_COUNTRIES.find(country => country == code);
142
+ this.countryCodeField.setValue(country);
143
+ number = number.substring(2);
144
+ }
145
+ this.updateNumber(number);
146
+ }
147
+ });
148
+ this.countryCodeField.valueChanges
149
+ .pipe(startWith(''), pairwise(), distinctUntilChanged(), takeUntil(this.destroyNotifier$))
150
+ .subscribe(([_prevIban, countryCode]) => {
151
+ this.placeholderIban = '';
109
152
  this.touched = true;
110
- if (!bban || bban.length <= 2) {
153
+ if (!countryCode || countryCode.length < 2) {
111
154
  return;
112
155
  }
113
- const potentialCountryCode = bban?.substring(0, 2);
114
- if (potentialCountryCode?.match(/^[A-Za-z]{2}/)) {
115
- const restOfTheBankNumber = bban?.substring(2);
116
- return this.parts.setValue({
117
- countryCode: potentialCountryCode,
118
- ...getBban(potentialCountryCode, restOfTheBankNumber),
119
- });
156
+ if (this.firstTwoCharsAreLetters(countryCode)) {
157
+ const r = countrySpecs[countryCode]?.chars;
158
+ if (r !== undefined)
159
+ this.placeholderIban = this.generatePlaceholder(r);
160
+ }
161
+ if (this.bbanField.value !== null) {
162
+ this.updateNumber(this.bbanField.value);
120
163
  }
121
- return this.parts.patchValue({
122
- ...getBban(countryCode, bban),
123
- }, { emitEvent: false });
124
164
  });
125
165
  }
166
+ handleClick(e) {
167
+ e.stopPropagation();
168
+ }
126
169
  ngOnDestroy() {
127
170
  this.destroyNotifier$.next();
128
171
  this.destroyNotifier$.complete();
129
- this.stateChanges.complete();
130
- this._focusMonitor.stopMonitoring(this._elementRef);
131
172
  }
132
173
  getCountryCodes() {
133
174
  return this.filterCtrl.valueChanges.pipe(startWith(''), combineLatestWith(of(IBAN_SUPPORTED_COUNTRIES)), map(([filterVal, countryCodes]) => {
@@ -144,55 +185,62 @@ class BankAccountComponent {
144
185
  this._focusMonitor.focusVia(nextElement, 'program');
145
186
  }
146
187
  }
147
- //
148
- // autoFocusPrev(control: AbstractControl, prevElement: HTMLInputElement): void {
149
- // if (control.value.length < 1) {
150
- // this._focusMonitor.focusVia(prevElement, 'program');
151
- // }
152
- // }
188
+ onContainerClick(event) {
189
+ if (event.target.tagName.toLowerCase() != 'input') {
190
+ this._elementRef.nativeElement.querySelector('input')?.focus();
191
+ }
192
+ }
153
193
  setDescribedByIds(ids) {
154
- const controlElement = this._elementRef.nativeElement.querySelector('.bank-account-input-group');
194
+ const controlElement = this._elementRef.nativeElement.querySelector('.iban-fields');
155
195
  controlElement.setAttribute('aria-describedby', ids.join(' '));
156
196
  }
157
- onContainerClick() {
158
- //
159
- }
160
- writeValue(iban) {
161
- this.value = iban;
162
- }
163
197
  registerOnChange(fn) {
164
198
  this.onChange = fn;
165
199
  }
166
200
  registerOnTouched(fn) {
167
201
  this.onTouched = fn;
168
202
  }
169
- setDisabledState(isDisabled) {
170
- this.disabled = isDisabled;
203
+ writeValue(iban) {
204
+ this.value = iban;
171
205
  }
172
206
  _handleInput(control, nextElement) {
173
207
  this.autoFocusNext(control, nextElement);
174
208
  this.onChange(this.value);
175
209
  }
176
- 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 }); }
177
- 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: [
178
- { provide: MatFormFieldControl, useExisting: BankAccountComponent },
179
- ], 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: i2$1.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"] }] }); }
210
+ firstTwoCharsAreLetters(input) {
211
+ const regex = /^[a-zA-Z]{2}/;
212
+ return regex.test(input);
213
+ }
214
+ generatePlaceholder(chars) {
215
+ let placeholder = '';
216
+ for (let i = 0; i < chars; i++) {
217
+ placeholder += '0';
218
+ }
219
+ const ph = friendlyFormatIBAN(placeholder)?.substring(2);
220
+ if (ph !== undefined)
221
+ return ph;
222
+ return placeholder.substring(2);
223
+ }
224
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: OnemrvaMatInputIbanComponent, 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 }); }
225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: OnemrvaMatInputIbanComponent, isStandalone: true, selector: "onemrva-mat-input-iban", inputs: { label: "label", noEntriesFoundLabel: "noEntriesFoundLabel", placeholderLabel: "placeholderLabel", searchAriaLabel: "searchAriaLabel", hint: "hint", value: "value", readonly: "readonly", disabled: "disabled", placeholder: "placeholder", required: "required" }, outputs: { getCountry: "getCountry" }, providers: [
226
+ { provide: MatFormFieldControl, useExisting: OnemrvaMatInputIbanComponent },
227
+ ], viewQueries: [{ propertyName: "countryCode", first: true, predicate: ["countryCode "], descendants: true }, { propertyName: "bban", first: true, predicate: ["bban"], descendants: true }, { propertyName: "numberInput", first: true, predicate: ["numberInput"], descendants: true }], ngImport: i0, template: "<ng-container [formGroup]=\"parts\">\n <!-- <mat-form-field class=\"onemrva-input-iban\">-->\n <!-- <mat-label>{{ label }}</mat-label>-->\n <div class=\"iban-fields\">\n <div class=\"iban-prefix\">\n <mat-select\n class=\"onemrva-iban-select\"\n formControlName=\"countryCode\"\n (selectionChange)=\"_handleInput(parts.controls.countryCode)\"\n #countryCode\n >\n <mat-option>\n <mat-select-search\n [formControl]=\"filterCtrl\"\n [ariaLabel]=\"searchAriaLabel\"\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\n [placeholderLabel]=\"placeholderLabel\"\n ></mat-select-search>\n </mat-option>\n\n <mat-option\n *ngFor=\"let country of countryCodes$ | async\"\n [value]=\"country\"\n >\n <span>{{ country }}</span>\n </mat-option>\n </mat-select>\n </div>\n <input\n (click)=\"handleClick($event)\"\n matInput\n [placeholder]=\"placeholderIban\"\n formControlName=\"bban\"\n class=\"onemrva-text-number\"\n [readOnly]=\"readonly\"\n (input)=\"_handleInput(parts.controls.bban)\"\n #bban\n />\n </div>\n <!-- <mat-hint *ngIf=\"hint !== ''\">{{ hint }}</mat-hint>-->\n <!-- <mat-error >{{ 'error' | translate }}</mat-error>-->\n <!-- </mat-form-field>-->\n\n <!-- {{ parts.errors |json }}-->\n</ng-container>\n", styles: ["onemrva-mat-input-iban{width:100%}onemrva-mat-input-iban .iban-fields{display:flex}onemrva-mat-input-iban .iban-fields .iban-prefix{width:40px;margin-right:8px}\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: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { 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"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: "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: TranslateModule }], encapsulation: i0.ViewEncapsulation.None }); }
180
228
  }
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: BankAccountComponent, decorators: [{
229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: OnemrvaMatInputIbanComponent, decorators: [{
182
230
  type: Component,
183
- args: [{ selector: 'bank-account', providers: [
184
- { provide: MatFormFieldControl, useExisting: BankAccountComponent },
185
- ], host: {
186
- '[class.example-floating]': 'shouldLabelFloat',
187
- '[id]': 'id',
188
- }, standalone: true, imports: [
231
+ args: [{ selector: 'onemrva-mat-input-iban', standalone: true, imports: [
189
232
  CommonModule,
190
- FormsModule,
191
- ReactiveFormsModule,
233
+ MatInputModule,
234
+ MatFormFieldModule,
192
235
  MatSelectModule,
193
236
  MatSelectSearchModule,
194
- ], 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"] }]
195
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i2$1.MatFormField, decorators: [{
237
+ ReactiveFormsModule,
238
+ TranslateModule,
239
+ MatPrefix,
240
+ ], encapsulation: ViewEncapsulation.None, providers: [
241
+ { provide: MatFormFieldControl, useExisting: OnemrvaMatInputIbanComponent },
242
+ ], template: "<ng-container [formGroup]=\"parts\">\n <!-- <mat-form-field class=\"onemrva-input-iban\">-->\n <!-- <mat-label>{{ label }}</mat-label>-->\n <div class=\"iban-fields\">\n <div class=\"iban-prefix\">\n <mat-select\n class=\"onemrva-iban-select\"\n formControlName=\"countryCode\"\n (selectionChange)=\"_handleInput(parts.controls.countryCode)\"\n #countryCode\n >\n <mat-option>\n <mat-select-search\n [formControl]=\"filterCtrl\"\n [ariaLabel]=\"searchAriaLabel\"\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\n [placeholderLabel]=\"placeholderLabel\"\n ></mat-select-search>\n </mat-option>\n\n <mat-option\n *ngFor=\"let country of countryCodes$ | async\"\n [value]=\"country\"\n >\n <span>{{ country }}</span>\n </mat-option>\n </mat-select>\n </div>\n <input\n (click)=\"handleClick($event)\"\n matInput\n [placeholder]=\"placeholderIban\"\n formControlName=\"bban\"\n class=\"onemrva-text-number\"\n [readOnly]=\"readonly\"\n (input)=\"_handleInput(parts.controls.bban)\"\n #bban\n />\n </div>\n <!-- <mat-hint *ngIf=\"hint !== ''\">{{ hint }}</mat-hint>-->\n <!-- <mat-error >{{ 'error' | translate }}</mat-error>-->\n <!-- </mat-form-field>-->\n\n <!-- {{ parts.errors |json }}-->\n</ng-container>\n", styles: ["onemrva-mat-input-iban{width:100%}onemrva-mat-input-iban .iban-fields{display:flex}onemrva-mat-input-iban .iban-fields .iban-prefix{width:40px;margin-right:8px}\n"] }]
243
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i8.MatFormField, decorators: [{
196
244
  type: Optional
197
245
  }, {
198
246
  type: Inject,
@@ -207,17 +255,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
207
255
  }], bban: [{
208
256
  type: ViewChild,
209
257
  args: ['bban']
210
- }], userAriaDescribedBy: [{
211
- type: Input,
212
- args: ['aria-describedby']
213
- }], placeholder: [{
258
+ }], label: [{
214
259
  type: Input
215
- }], required: [{
260
+ }], noEntriesFoundLabel: [{
216
261
  type: Input
217
- }], disabled: [{
262
+ }], placeholderLabel: [{
263
+ type: Input
264
+ }], searchAriaLabel: [{
218
265
  type: Input
266
+ }], hint: [{
267
+ type: Input
268
+ }], getCountry: [{
269
+ type: Output
270
+ }], numberInput: [{
271
+ type: ViewChild,
272
+ args: ['numberInput']
219
273
  }], value: [{
220
274
  type: Input
275
+ }], readonly: [{
276
+ type: Input
277
+ }], disabled: [{
278
+ type: Input
279
+ }], placeholder: [{
280
+ type: Input
281
+ }], required: [{
282
+ type: Input
221
283
  }] } });
222
284
  const getBban = (countryCode = '', bban) => {
223
285
  return {
@@ -225,55 +287,6 @@ const getBban = (countryCode = '', bban) => {
225
287
  };
226
288
  };
227
289
 
228
- class OnemrvaMatInputBankAccountComponent {
229
- constructor() {
230
- this.key = 'accountNumber';
231
- this.hint = '';
232
- this.destroyNotifier$ = new Subject();
233
- }
234
- ngOnInit() {
235
- this.accountNumber.addValidators([bankAccountValidator]);
236
- }
237
- errors() {
238
- const bankNumberErrors = this.accountNumber.errors;
239
- if (!bankNumberErrors) {
240
- return '';
241
- }
242
- if (bankNumberErrors[ValidationErrorsIBAN[ValidationErrorsIBAN.WrongBBANLength]]) {
243
- return 'input.bank.length';
244
- }
245
- if (bankNumberErrors[ValidationErrorsIBAN[ValidationErrorsIBAN.WrongIBANChecksum]]) {
246
- return 'input.bank.checksum';
247
- }
248
- return 'input.bank.invalid';
249
- }
250
- ngOnDestroy() {
251
- this.destroyNotifier$.next();
252
- this.destroyNotifier$.complete();
253
- }
254
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: OnemrvaMatInputBankAccountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
255
- 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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.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 }); }
256
- }
257
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: OnemrvaMatInputBankAccountComponent, decorators: [{
258
- type: Component,
259
- args: [{ selector: 'onemrva-mat-input-bank-account', standalone: true, imports: [
260
- CommonModule,
261
- MatInputModule,
262
- MatFormFieldModule,
263
- MatSelectModule,
264
- ReactiveFormsModule,
265
- TranslateModule,
266
- MatSelectSearchModule,
267
- BankAccountComponent,
268
- ], 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"] }]
269
- }], propDecorators: { accountNumber: [{
270
- type: Input
271
- }], key: [{
272
- type: Input
273
- }], hint: [{
274
- type: Input
275
- }] } });
276
-
277
290
  /*
278
291
  * Public API Surface of mat-bank-account-input
279
292
  */
@@ -282,5 +295,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
282
295
  * Generated bundle index. Do not edit.
283
296
  */
284
297
 
285
- export { OnemrvaMatInputBankAccountComponent };
298
+ export { OnemrvaMatInputIbanComponent };
286
299
  //# sourceMappingURL=onemrvapublic-design-system-mat-input-bank-account.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"onemrvapublic-design-system-mat-input-bank-account.mjs","sources":["../../../../projects/onemrva/design-system/mat-input-bank-account/src/bank-account.component.ts","../../../../projects/onemrva/design-system/mat-input-bank-account/src/bank-account.component.html","../../../../projects/onemrva/design-system/mat-input-bank-account/src/onemrva-mat-input-bank-account.component.ts","../../../../projects/onemrva/design-system/mat-input-bank-account/src/onemrva-mat-input-bank-account.component.html","../../../../projects/onemrva/design-system/mat-input-bank-account/index.ts","../../../../projects/onemrva/design-system/mat-input-bank-account/onemrvapublic-design-system-mat-input-bank-account.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n ViewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n NgControl,\n FormsModule,\n ReactiveFormsModule,\n AbstractControl,\n Validators,\n} from '@angular/forms';\nimport {\n MAT_FORM_FIELD,\n MatFormField,\n MatFormFieldControl,\n} from '@angular/material/form-field';\nimport {\n combineLatestWith,\n distinctUntilChanged,\n map,\n Observable,\n of,\n pairwise,\n startWith,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSelectSearchModule } from '@onemrvapublic/design-system/mat-select-search';\nimport {\n bankAccountValidator,\n IBAN_SUPPORTED_COUNTRIES,\n} from '@onemrvapublic/design-system/shared';\nimport { CommonModule } from '@angular/common';\nimport { extractIBAN, friendlyFormatIBAN } from 'ibantools';\n\n/** Custom `MatFormFieldControl` for bank account number input. */\n@Component({\n selector: 'bank-account',\n templateUrl: 'bank-account.component.html',\n styleUrl: 'bank-account.component.scss',\n providers: [\n { provide: MatFormFieldControl, useExisting: BankAccountComponent },\n ],\n\n host: {\n '[class.example-floating]': 'shouldLabelFloat',\n '[id]': 'id',\n },\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatSelectModule,\n MatSelectSearchModule,\n ],\n})\nexport class BankAccountComponent\n implements\n ControlValueAccessor,\n MatFormFieldControl<string>,\n OnDestroy,\n OnInit\n{\n static nextId = 0;\n\n @ViewChild('countryCode ') countryCode!: HTMLInputElement;\n @ViewChild('bban') bban!: HTMLInputElement;\n\n filterCtrl: FormControl<string | null> = new FormControl<string>('');\n parts: FormGroup<{\n countryCode: FormControl<string | null>;\n bban: FormControl<string | null>;\n }>;\n\n countryCodes$: Observable<any> = of([]);\n stateChanges = new Subject<void>();\n destroyNotifier$ = new Subject<void>();\n focused = false;\n touched = false;\n controlType = 'bank-account-input';\n id = `bank-account-input-${BankAccountComponent.nextId++}`;\n onChange = (_: any) => {\n //\n };\n onTouched = () => {\n //\n };\n\n get empty() {\n const {\n value: { countryCode, bban },\n } = this.parts;\n\n return !countryCode && !bban;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n // @ts-expect-error test\n // eslint-disable-next-line\n @Input('aria-describedby') userAriaDescribedBy: string;\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n\n private _placeholder = '';\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: BooleanInput) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this._disabled ? this.parts.disable() : this.parts.enable();\n this.stateChanges.next();\n }\n\n private _disabled = false;\n\n @Input()\n get value(): string {\n const {\n value: { countryCode, bban },\n } = this.parts;\n return `${countryCode ?? ''}${bban ?? ''}`;\n }\n\n set value(iban: string | null) {\n const { countryCode, bban } = extractIBAN(iban || '');\n\n this.parts.setValue({\n countryCode: countryCode || null,\n bban: bban || null,\n });\n this.stateChanges.next();\n }\n\n get errorState(): boolean {\n return this.parts.invalid && this.touched;\n }\n\n constructor(\n formBuilder: FormBuilder,\n private _focusMonitor: FocusMonitor,\n private _elementRef: ElementRef<HTMLElement>,\n private _cd: ChangeDetectorRef,\n @Optional() @Inject(MAT_FORM_FIELD) public _formField: MatFormField,\n @Optional() @Self() public ngControl: NgControl,\n ) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n this.parts = formBuilder.group(\n {\n countryCode: ['', [Validators.maxLength(2)]],\n bban: ['', [Validators.required]],\n },\n {\n validators: [bankAccountValidator()],\n },\n );\n }\n\n ngOnInit() {\n this.countryCodes$ = this.getCountryCodes();\n\n this.parts.valueChanges\n .pipe(\n startWith({ countryCode: '', bban: '' }),\n pairwise(),\n distinctUntilChanged(),\n takeUntil(this.destroyNotifier$),\n )\n .subscribe(([_prevIban, { countryCode, bban }]) => {\n this.touched = true;\n if (!bban || bban.length <= 2) {\n return;\n }\n\n const potentialCountryCode = bban?.substring(0, 2);\n\n if (potentialCountryCode?.match(/^[A-Za-z]{2}/)) {\n const restOfTheBankNumber = bban?.substring(2);\n return this.parts.setValue({\n countryCode: potentialCountryCode,\n ...getBban(potentialCountryCode, restOfTheBankNumber),\n });\n }\n\n return this.parts.patchValue(\n {\n ...getBban(countryCode, bban),\n },\n { emitEvent: false },\n );\n });\n }\n\n ngOnDestroy() {\n this.destroyNotifier$.next();\n this.destroyNotifier$.complete();\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n getCountryCodes() {\n return this.filterCtrl.valueChanges.pipe(\n startWith(''),\n combineLatestWith(of(IBAN_SUPPORTED_COUNTRIES)),\n map(([filterVal, countryCodes]) => {\n return countryCodes.filter(code => {\n if (!filterVal) {\n return true;\n }\n\n return code.toLowerCase().includes(filterVal.toLowerCase());\n });\n }),\n );\n }\n\n autoFocusNext(\n control: AbstractControl,\n nextElement?: HTMLInputElement,\n ): void {\n if (!control.errors && nextElement) {\n this._focusMonitor.focusVia(nextElement, 'program');\n }\n }\n\n //\n // autoFocusPrev(control: AbstractControl, prevElement: HTMLInputElement): void {\n // if (control.value.length < 1) {\n // this._focusMonitor.focusVia(prevElement, 'program');\n // }\n // }\n\n setDescribedByIds(ids: string[]) {\n const controlElement = this._elementRef.nativeElement.querySelector(\n '.bank-account-input-group',\n )!;\n controlElement.setAttribute('aria-describedby', ids.join(' '));\n }\n\n onContainerClick() {\n //\n }\n\n writeValue(iban: string | null): void {\n this.value = iban;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n _handleInput(control: AbstractControl, nextElement?: HTMLInputElement): void {\n this.autoFocusNext(control, nextElement);\n this.onChange(this.value);\n }\n}\n\nconst getBban = (countryCode: string | null | undefined = '', bban: string) => {\n return {\n bban: friendlyFormatIBAN(`${countryCode}${bban}`)?.substring(2) || null,\n };\n};\n","<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","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { Subject } from 'rxjs';\n\nimport { MatSelectSearchModule } from '@onemrvapublic/design-system/mat-select-search';\nimport { BankAccountComponent } from './bank-account.component';\nimport { bankAccountValidator } from '@onemrvapublic/design-system/shared';\nimport { ValidationErrorsIBAN } from 'ibantools';\n\n@Component({\n selector: 'onemrva-mat-input-bank-account',\n styleUrls: ['onemrva-mat-input-bank-account.component.scss'],\n templateUrl: 'onemrva-mat-input-bank-account.component.html',\n standalone: true,\n imports: [\n CommonModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n ReactiveFormsModule,\n TranslateModule,\n MatSelectSearchModule,\n BankAccountComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n})\nexport class OnemrvaMatInputBankAccountComponent implements OnInit, OnDestroy {\n @Input() accountNumber!: FormControl<string | null>;\n @Input() key = 'accountNumber';\n @Input() hint = '';\n\n destroyNotifier$ = new Subject<void>();\n\n ngOnInit() {\n this.accountNumber.addValidators([bankAccountValidator]);\n }\n\n errors() {\n const bankNumberErrors = this.accountNumber.errors;\n\n if (!bankNumberErrors) {\n return '';\n }\n\n if (\n bankNumberErrors[\n ValidationErrorsIBAN[ValidationErrorsIBAN.WrongBBANLength]\n ]\n ) {\n return 'input.bank.length';\n }\n\n if (\n bankNumberErrors[\n ValidationErrorsIBAN[ValidationErrorsIBAN.WrongIBANChecksum]\n ]\n ) {\n return 'input.bank.checksum';\n }\n\n return 'input.bank.invalid';\n }\n\n ngOnDestroy() {\n this.destroyNotifier$.next();\n this.destroyNotifier$.complete();\n }\n}\n","<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","/*\n * Public API Surface of mat-bank-account-input\n */\n\nexport * from './src/onemrva-mat-input-bank-account.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i1","i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"onemrvapublic-design-system-mat-input-bank-account.mjs","sources":["../../../../projects/onemrva/design-system/mat-input-bank-account/src/onemrva-mat-input-iban.component.ts","../../../../projects/onemrva/design-system/mat-input-bank-account/src/onemrva-mat-input-iban.component.html","../../../../projects/onemrva/design-system/mat-input-bank-account/index.ts","../../../../projects/onemrva/design-system/mat-input-bank-account/onemrvapublic-design-system-mat-input-bank-account.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n NgControl,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport {\n MAT_FORM_FIELD,\n MatFormField,\n MatFormFieldControl,\n MatFormFieldModule,\n MatPrefix,\n} from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule } from '@ngx-translate/core';\nimport {\n combineLatestWith,\n distinctUntilChanged,\n Observable,\n of,\n pairwise,\n startWith,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { MatSelectSearchModule } from '@onemrvapublic/design-system/mat-select-search';\nimport {\n bankAccountValidator,\n IBAN_SUPPORTED_COUNTRIES,\n} from '@onemrvapublic/design-system/shared';\nimport { map } from 'rxjs/operators';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n countrySpecs,\n extractIBAN,\n friendlyFormatIBAN,\n isValidBBAN,\n isValidIBAN,\n} from 'ibantools';\nimport { FocusMonitor } from '@angular/cdk/a11y';\n\n@Component({\n selector: 'onemrva-mat-input-iban',\n styleUrls: ['onemrva-mat-input-iban.component.scss'],\n templateUrl: 'onemrva-mat-input-iban.component.html',\n standalone: true,\n imports: [\n CommonModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatSelectSearchModule,\n ReactiveFormsModule,\n TranslateModule,\n MatPrefix,\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: MatFormFieldControl, useExisting: OnemrvaMatInputIbanComponent },\n ],\n})\nexport class OnemrvaMatInputIbanComponent\n implements\n ControlValueAccessor,\n MatFormFieldControl<string>,\n OnInit,\n OnDestroy\n{\n @ViewChild('countryCode ') countryCode!: HTMLInputElement;\n @ViewChild('bban') bban!: HTMLInputElement;\n\n static nextId = 0;\n\n @Input() label = 'IBAN';\n @Input() noEntriesFoundLabel = 'Not found';\n @Input() placeholderLabel = 'Search';\n @Input() searchAriaLabel = 'Search';\n @Input() hint = '';\n @Output() getCountry = new EventEmitter<any>();\n @ViewChild('numberInput') numberInput!: ElementRef;\n\n countryCodes$: Observable<any> = of([]);\n\n public filterCtrl: FormControl<string | null> = new FormControl<string>('');\n\n destroyNotifier$ = new Subject<void>();\n placeholderIban = '';\n\n controlType = 'bank-account-input';\n stateChanges = new Subject<void>();\n focused = false;\n id = `bank-account-input-${OnemrvaMatInputIbanComponent.nextId++}`;\n touched = false;\n\n parts: FormGroup<{\n countryCode: FormControl<string | null>;\n bban: FormControl<string | null>;\n }>;\n\n get bbanField() {\n return this.parts.get('bban') as FormControl;\n }\n get countryCodeField() {\n return this.parts.get('countryCode') as FormControl;\n }\n\n constructor(\n formBuilder: FormBuilder,\n private _focusMonitor: FocusMonitor,\n private _elementRef: ElementRef<HTMLElement>,\n private _cd: ChangeDetectorRef,\n @Optional() @Inject(MAT_FORM_FIELD) public _formField: MatFormField,\n @Optional() @Self() public ngControl: NgControl,\n ) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n this.parts = formBuilder.group(\n {\n countryCode: ['', [Validators.maxLength(2)]],\n bban: ['', [Validators.required]],\n },\n {\n validators: [bankAccountValidator()],\n },\n );\n }\n\n errors(): ValidationErrors | null {\n return this.parts.errors;\n }\n\n onChange = (_: any) => {\n //\n };\n onTouched = () => {\n //\n };\n\n get errorState(): boolean {\n return this.parts.invalid && this.touched;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n get empty() {\n const {\n value: { countryCode, bban },\n } = this.parts;\n\n return !countryCode && !bban;\n }\n\n @Input()\n get value(): string {\n const {\n value: { countryCode, bban },\n } = this.parts;\n return `${countryCode ?? ''}${bban ?? ''}`;\n }\n\n set value(iban: string | null) {\n const { countryCode, bban } = extractIBAN(iban || '');\n\n this.parts.setValue({\n countryCode: countryCode || null,\n bban: bban || null,\n });\n this.stateChanges.next();\n }\n\n @Input()\n readonly = false;\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this._disabled ? this.parts.disable() : this.parts.enable();\n this.stateChanges.next();\n }\n\n private _disabled = false;\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n\n private _placeholder = '';\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: BooleanInput) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n updateNumber(number: string) {\n let shownValue = number.replace(/[^a-zA-Z0-9]/g, '');\n // BE45063712751789\n const fullNumber = this.countryCodeField.value + number;\n if (isValidIBAN(fullNumber)) {\n const formattedValue = friendlyFormatIBAN(fullNumber);\n if (formattedValue !== null) {\n shownValue = formattedValue.substring(2);\n }\n }\n this.bbanField.patchValue(shownValue, { emitEvent: false });\n }\n\n ngOnInit(): void {\n this.countryCodes$ = this.getCountryCodes();\n\n this.bbanField.valueChanges\n .pipe(\n startWith(this.bbanField.getRawValue()),\n takeUntil(this.destroyNotifier$),\n )\n .subscribe(number => {\n if (number !== null && number !== '') {\n if (this.firstTwoCharsAreLetters(number)) {\n const code = number?.substring(0, 2).toUpperCase();\n const country = IBAN_SUPPORTED_COUNTRIES.find(\n country => country == code,\n );\n this.countryCodeField.setValue(country);\n number = number.substring(2);\n }\n this.updateNumber(number);\n }\n });\n\n this.countryCodeField.valueChanges\n .pipe(\n startWith(''),\n pairwise(),\n distinctUntilChanged(),\n takeUntil(this.destroyNotifier$),\n )\n .subscribe(([_prevIban, countryCode]) => {\n this.placeholderIban = '';\n this.touched = true;\n if (!countryCode || countryCode.length < 2) {\n return;\n }\n\n if (this.firstTwoCharsAreLetters(countryCode)) {\n const r: number | undefined = countrySpecs[countryCode]?.chars;\n if (r !== undefined)\n this.placeholderIban = this.generatePlaceholder(r);\n }\n if (this.bbanField.value !== null) {\n this.updateNumber(this.bbanField.value);\n }\n });\n }\n\n handleClick(e: any) {\n e.stopPropagation();\n }\n\n ngOnDestroy() {\n this.destroyNotifier$.next();\n this.destroyNotifier$.complete();\n }\n\n getCountryCodes() {\n return this.filterCtrl.valueChanges.pipe(\n startWith(''),\n combineLatestWith(of(IBAN_SUPPORTED_COUNTRIES)),\n map(([filterVal, countryCodes]) => {\n return countryCodes.filter(code => {\n if (!filterVal) {\n return true;\n }\n\n return code.toLowerCase().includes(filterVal.toLowerCase());\n });\n }),\n );\n }\n\n autoFocusNext(\n control: AbstractControl,\n nextElement?: HTMLInputElement,\n ): void {\n if (!control.errors && nextElement) {\n this._focusMonitor.focusVia(nextElement, 'program');\n }\n }\n\n onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() != 'input') {\n this._elementRef.nativeElement.querySelector('input')?.focus();\n }\n }\n\n setDescribedByIds(ids: string[]) {\n const controlElement =\n this._elementRef.nativeElement.querySelector('.iban-fields')!;\n controlElement.setAttribute('aria-describedby', ids.join(' '));\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n writeValue(iban: string | null): void {\n this.value = iban;\n }\n\n _handleInput(control: AbstractControl, nextElement?: HTMLInputElement): void {\n this.autoFocusNext(control, nextElement);\n this.onChange(this.value);\n }\n\n firstTwoCharsAreLetters(input: string): boolean {\n const regex = /^[a-zA-Z]{2}/;\n return regex.test(input);\n }\n\n generatePlaceholder(chars: number): string {\n let placeholder = '';\n\n for (let i = 0; i < chars; i++) {\n placeholder += '0';\n }\n const ph = friendlyFormatIBAN(placeholder)?.substring(2);\n if (ph !== undefined) return ph;\n\n return placeholder.substring(2);\n }\n}\n\nconst getBban = (countryCode: string | null | undefined = '', bban: string) => {\n return {\n bban: friendlyFormatIBAN(`${countryCode}${bban}`)?.substring(2) || null,\n };\n};\n","<ng-container [formGroup]=\"parts\">\n <!-- <mat-form-field class=\"onemrva-input-iban\">-->\n <!-- <mat-label>{{ label }}</mat-label>-->\n <div class=\"iban-fields\">\n <div class=\"iban-prefix\">\n <mat-select\n class=\"onemrva-iban-select\"\n formControlName=\"countryCode\"\n (selectionChange)=\"_handleInput(parts.controls.countryCode)\"\n #countryCode\n >\n <mat-option>\n <mat-select-search\n [formControl]=\"filterCtrl\"\n [ariaLabel]=\"searchAriaLabel\"\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\n [placeholderLabel]=\"placeholderLabel\"\n ></mat-select-search>\n </mat-option>\n\n <mat-option\n *ngFor=\"let country of countryCodes$ | async\"\n [value]=\"country\"\n >\n <span>{{ country }}</span>\n </mat-option>\n </mat-select>\n </div>\n <input\n (click)=\"handleClick($event)\"\n matInput\n [placeholder]=\"placeholderIban\"\n formControlName=\"bban\"\n class=\"onemrva-text-number\"\n [readOnly]=\"readonly\"\n (input)=\"_handleInput(parts.controls.bban)\"\n #bban\n />\n </div>\n <!-- <mat-hint *ngIf=\"hint !== ''\">{{ hint }}</mat-hint>-->\n <!-- <mat-error >{{ 'error' | translate }}</mat-error>-->\n <!-- </mat-form-field>-->\n\n <!-- {{ parts.errors |json }}-->\n</ng-container>\n","/*\n * Public API Surface of mat-bank-account-input\n */\n\nexport * from './src/onemrva-mat-input-iban.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1066,7 +1066,10 @@ class OnemRvaCDNCountryService {
1066
1066
  .slice()
1067
1067
  .map(country => {
1068
1068
  const translatedName = this.getTranslatedCountryName(country, this.translateService.currentLang);
1069
- return { ...country, name: translatedName };
1069
+ return {
1070
+ ...country,
1071
+ name: translatedName,
1072
+ };
1070
1073
  })
1071
1074
  .sort((a, b) => {
1072
1075
  const fa = a.name.toLowerCase(), fb = b.name.toLowerCase();