@gerandon/ngx-widgets 20.0.2 → 20.1.1

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.
@@ -2,17 +2,16 @@ import * as i0 from '@angular/core';
2
2
  import { input, inject, Injector, ChangeDetectorRef, ViewChild, Directive, InjectionToken, signal, Input, Optional, Inject, isDevMode, output, forwardRef, ViewEncapsulation, Component, ViewChildren, viewChild } from '@angular/core';
3
3
  import * as i1 from '@angular/forms';
4
4
  import { FormControl, NgControl, ReactiveFormsModule, NG_VALUE_ACCESSOR, NG_ASYNC_VALIDATORS, FormsModule } from '@angular/forms';
5
- import { of, Subject, Observable, takeUntil, debounceTime, tap, switchMap, map } from 'rxjs';
5
+ import { of, Subject, startWith, takeUntil, debounceTime, Observable, tap, switchMap, map } from 'rxjs';
6
+ import * as i3 from '@angular/material/form-field';
7
+ import { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldModule, MatFormField, MatLabel, MatError } from '@angular/material/form-field';
6
8
  import { isEmpty, keys, isEqual, find } from 'lodash-es';
7
9
  import { LiveAnnouncer } from '@angular/cdk/a11y';
8
10
  import { SafeSubscriber } from 'rxjs/internal/Subscriber';
9
- import * as i3 from '@angular/material/form-field';
10
- import { MatFormFieldModule, MatFormField, MatLabel, MatError } from '@angular/material/form-field';
11
11
  import * as i2 from '@angular/material/icon';
12
12
  import { MatIconModule } from '@angular/material/icon';
13
13
  import * as i4 from '@angular/material/input';
14
14
  import { MatInputModule, MatInput } from '@angular/material/input';
15
- import { NgIf, AsyncPipe } from '@angular/common';
16
15
  import { NgxMaskDirective } from 'ngx-mask';
17
16
  import * as i2$1 from '@angular/material/select';
18
17
  import { MatSelectModule } from '@angular/material/select';
@@ -20,6 +19,7 @@ import { MatTooltipModule } from '@angular/material/tooltip';
20
19
  import { takeUntil as takeUntil$1 } from 'rxjs/operators';
21
20
  import * as i5 from '@angular/cdk/text-field';
22
21
  import { ENTER, COMMA } from '@angular/cdk/keycodes';
22
+ import { AsyncPipe } from '@angular/common';
23
23
  import * as i4$1 from '@angular/material/autocomplete';
24
24
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
25
25
  import * as i1$1 from '@angular/material/chips';
@@ -83,15 +83,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
83
83
  }] } });
84
84
 
85
85
  const NGX_WIDGETS_VALIDATION_TRANSLATIONS = new InjectionToken('NGX_WIDGETS_VALIDATION_TRANSLATIONS');
86
+ /**
87
+ * @deprecated
88
+ * This token is deprecated and will be removed in Angular v21. Use MAT_FORM_FIELD_DEFAULT_OPTIONS instead.
89
+ */
86
90
  const NGX_WIDGETS_FORM_FIELD_APPEARANCE = new InjectionToken('NGX_WIDGETS_FORM_FIELD_APPEARANCE');
87
91
  class BaseInput extends BaseValueAccessor {
88
- constructor(validationTranslations = {}, formFieldAppearance) {
92
+ constructor(validationTranslations = {}) {
89
93
  super();
90
94
  this.validationTranslations = validationTranslations;
91
- this.formFieldAppearance = formFieldAppearance;
92
95
  this.appearance = input();
93
- // Used on Template
94
- this._appearance = signal('outline');
96
+ this.color = input();
95
97
  this.translateParams = input();
96
98
  this.isDisabled = input(false);
97
99
  this.floatLabel = input('auto');
@@ -103,9 +105,13 @@ class BaseInput extends BaseValueAccessor {
103
105
  this.ariaPlaceholder = input('', { alias: 'aria-placeholder' });
104
106
  this.ariaDescribedBy = input('', { alias: 'aria-describedby' });
105
107
  this.ariaDescription = input('', { alias: 'aria-description' });
108
+ this.controlErrorKeys = [];
106
109
  this.liveAnnouncer = inject(LiveAnnouncer);
110
+ this.matFormFieldConfig = inject(MAT_FORM_FIELD_DEFAULT_OPTIONS);
107
111
  this.announcerTranslations = input();
108
112
  this.validatorMessagesArray = [];
113
+ this._appearance = signal(this.matFormFieldConfig.appearance ?? 'fill');
114
+ this._color = signal(this.matFormFieldConfig.color ?? 'primary');
109
115
  }
110
116
  ngOnInit() {
111
117
  this.placeholder = this.placeholder === undefined ? this.label : this.placeholder;
@@ -118,9 +124,6 @@ class BaseInput extends BaseValueAccessor {
118
124
  }
119
125
  // *ngIf seems like does not re-render component when label is used with dynamic value (e.g.: translate pipe). Strange
120
126
  this.label = this.label || ' ';
121
- if (this.formFieldAppearance && !this.appearance()) {
122
- this._appearance.set(this.formFieldAppearance);
123
- }
124
127
  }
125
128
  ngOnChanges(changes) {
126
129
  if (changes['validatorMessages']) {
@@ -136,6 +139,12 @@ class BaseInput extends BaseValueAccessor {
136
139
  ngAfterViewInit() {
137
140
  super.ngAfterViewInit();
138
141
  this.cdr.detectChanges();
142
+ this.control.statusChanges.pipe(startWith(this.control.status), takeUntil(this.destroy$), debounceTime(100)).subscribe(() => {
143
+ if (!this.control.hasError('server')) {
144
+ this.controlErrorKeys = keys(this.control.errors).map((key) => key);
145
+ this.cdr.detectChanges();
146
+ }
147
+ });
139
148
  }
140
149
  announce(key) {
141
150
  if (this._defaultAnnouncerTranslations?.[key]) {
@@ -152,8 +161,8 @@ class BaseInput extends BaseValueAccessor {
152
161
  return this.liveAnnouncer.announce(key, 'assertive');
153
162
  }
154
163
  }
155
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BaseInput, deps: [{ token: NGX_WIDGETS_VALIDATION_TRANSLATIONS, optional: true }, { token: NGX_WIDGETS_FORM_FIELD_APPEARANCE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
156
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.3", type: BaseInput, isStandalone: true, inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, translateParams: { classPropertyName: "translateParams", publicName: "translateParams", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, floatLabel: { classPropertyName: "floatLabel", publicName: "floatLabel", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: false, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: false, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: false, isRequired: false, transformFunction: null }, formControlName: { classPropertyName: "formControlName", publicName: "formControlName", isSignal: true, isRequired: false, transformFunction: null }, validatorMessages: { classPropertyName: "validatorMessages", publicName: "validatorMessages", isSignal: true, isRequired: false, transformFunction: null }, subscriptSizing: { classPropertyName: "subscriptSizing", publicName: "subscriptSizing", isSignal: true, isRequired: false, transformFunction: null }, hintLabel: { classPropertyName: "hintLabel", publicName: "hintLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaPlaceholder: { classPropertyName: "ariaPlaceholder", publicName: "aria-placeholder", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescription: { classPropertyName: "ariaDescription", publicName: "aria-description", isSignal: true, isRequired: false, transformFunction: null }, announcerTranslations: { classPropertyName: "announcerTranslations", publicName: "announcerTranslations", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
164
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BaseInput, deps: [{ token: NGX_WIDGETS_VALIDATION_TRANSLATIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
165
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.3", type: BaseInput, isStandalone: true, inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, translateParams: { classPropertyName: "translateParams", publicName: "translateParams", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, floatLabel: { classPropertyName: "floatLabel", publicName: "floatLabel", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: false, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: false, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: false, isRequired: false, transformFunction: null }, formControlName: { classPropertyName: "formControlName", publicName: "formControlName", isSignal: true, isRequired: false, transformFunction: null }, validatorMessages: { classPropertyName: "validatorMessages", publicName: "validatorMessages", isSignal: true, isRequired: false, transformFunction: null }, subscriptSizing: { classPropertyName: "subscriptSizing", publicName: "subscriptSizing", isSignal: true, isRequired: false, transformFunction: null }, hintLabel: { classPropertyName: "hintLabel", publicName: "hintLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaPlaceholder: { classPropertyName: "ariaPlaceholder", publicName: "aria-placeholder", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescription: { classPropertyName: "ariaDescription", publicName: "aria-description", isSignal: true, isRequired: false, transformFunction: null }, announcerTranslations: { classPropertyName: "announcerTranslations", publicName: "announcerTranslations", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
157
166
  }
158
167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BaseInput, decorators: [{
159
168
  type: Directive
@@ -162,11 +171,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
162
171
  }, {
163
172
  type: Inject,
164
173
  args: [NGX_WIDGETS_VALIDATION_TRANSLATIONS]
165
- }] }, { type: undefined, decorators: [{
166
- type: Optional
167
- }, {
168
- type: Inject,
169
- args: [NGX_WIDGETS_FORM_FIELD_APPEARANCE]
170
174
  }] }], propDecorators: { id: [{
171
175
  type: Input
172
176
  }], name: [{
@@ -288,7 +292,7 @@ class BasicInputComponent extends BaseMaskInput {
288
292
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.3", type: BasicInputComponent, isStandalone: true, selector: "gerandon-basic-input", outputs: { iconClick: "iconClick" }, providers: [
289
293
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BasicInputComponent), multi: true },
290
294
  { provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => BasicInputComponent), multi: true },
291
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"basic-input cva-input\">\r\n <mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [hintLabel]=\"hintLabel()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{label}}</mat-label>\r\n }\r\n @if(mask()) {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #maskInput=\"ngxMask\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n [mask]=\"mask()\"\r\n [triggerOnMaskChange]=\"true\"\r\n [showMaskTyped]=\"showMaskTyped()\"\r\n [specialCharacters]=\"specialCharacters()!\"\r\n [placeHolderCharacter]=\"placeHolderCharacter()!\"\r\n [prefix]=\"maskPrefix()\"\r\n [suffix]=\"maskSuffix()\"\r\n />\r\n } @else {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n />\r\n }\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix style=\"margin-right: 10px\">{{suffix}}</span>\r\n }\r\n\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n\r\n }\r\n @for (error of validatorMessagesArray; track error.key) {\r\n <!--\r\n this @if makes the mat-error to be placed out of subscript-wrapper\r\n that way the error message will be inside the input, not under the field as the others....\r\n\r\n @if (control.errors?.[error.key]) {\r\n }\r\n -->\r\n <mat-error *ngIf=\"control.errors?.[error.key]\">\r\n @if(!!validatorMessages()?.[error.key]) {\r\n {{ error.value }}\r\n } @else if (!!validationTranslations?.[error.key]) {\r\n {{ validationTranslations[error.key] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n", styles: ["gerandon-basic-input{display:block}gerandon-basic-input .basic-input{height:inherit}gerandon-basic-input .basic-input .disabled{color:#ced4da}gerandon-basic-input .basic-input mat-form-field{width:100%}gerandon-basic-input .basic-input mat-form-field .mat-icon{padding:unset;margin-left:10px;margin-right:10px}gerandon-basic-input .basic-input mat-form-field input::placeholder{color:#adb5bd;font-style:italic}gerandon-basic-input .basic-input mat-form-field input:disabled{cursor:not-allowed}\n"], dependencies: [{ 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { 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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions", "instantPrefix"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
295
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"basic-input cva-input\">\r\n <mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [hintLabel]=\"hintLabel()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{label}}</mat-label>\r\n }\r\n @if(mask()) {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #maskInput=\"ngxMask\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n [mask]=\"mask()\"\r\n [triggerOnMaskChange]=\"true\"\r\n [showMaskTyped]=\"showMaskTyped()\"\r\n [specialCharacters]=\"specialCharacters()!\"\r\n [placeHolderCharacter]=\"placeHolderCharacter()!\"\r\n [prefix]=\"maskPrefix()\"\r\n [suffix]=\"maskSuffix()\"\r\n />\r\n } @else {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n />\r\n }\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix style=\"margin-right: 10px\">{{suffix}}</span>\r\n }\r\n\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n", styles: ["gerandon-basic-input{display:block}gerandon-basic-input .basic-input{height:inherit}gerandon-basic-input .basic-input .disabled{color:#ced4da}gerandon-basic-input .basic-input mat-form-field{width:100%}gerandon-basic-input .basic-input mat-form-field .mat-icon{padding:unset;margin-left:10px;margin-right:10px}gerandon-basic-input .basic-input mat-form-field input::placeholder{color:#adb5bd;font-style:italic}gerandon-basic-input .basic-input mat-form-field input:disabled{cursor:not-allowed}\n"], dependencies: [{ 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { 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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions", "instantPrefix"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
292
296
  }
293
297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BasicInputComponent, decorators: [{
294
298
  type: Component,
@@ -297,12 +301,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
297
301
  MatIconModule,
298
302
  MatFormFieldModule,
299
303
  MatInputModule,
300
- NgIf,
301
304
  NgxMaskDirective,
302
305
  ], providers: [
303
306
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BasicInputComponent), multi: true },
304
307
  { provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => BasicInputComponent), multi: true },
305
- ], template: "<div class=\"basic-input cva-input\">\r\n <mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [hintLabel]=\"hintLabel()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{label}}</mat-label>\r\n }\r\n @if(mask()) {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #maskInput=\"ngxMask\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n [mask]=\"mask()\"\r\n [triggerOnMaskChange]=\"true\"\r\n [showMaskTyped]=\"showMaskTyped()\"\r\n [specialCharacters]=\"specialCharacters()!\"\r\n [placeHolderCharacter]=\"placeHolderCharacter()!\"\r\n [prefix]=\"maskPrefix()\"\r\n [suffix]=\"maskSuffix()\"\r\n />\r\n } @else {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n />\r\n }\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix style=\"margin-right: 10px\">{{suffix}}</span>\r\n }\r\n\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n\r\n }\r\n @for (error of validatorMessagesArray; track error.key) {\r\n <!--\r\n this @if makes the mat-error to be placed out of subscript-wrapper\r\n that way the error message will be inside the input, not under the field as the others....\r\n\r\n @if (control.errors?.[error.key]) {\r\n }\r\n -->\r\n <mat-error *ngIf=\"control.errors?.[error.key]\">\r\n @if(!!validatorMessages()?.[error.key]) {\r\n {{ error.value }}\r\n } @else if (!!validationTranslations?.[error.key]) {\r\n {{ validationTranslations[error.key] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n", styles: ["gerandon-basic-input{display:block}gerandon-basic-input .basic-input{height:inherit}gerandon-basic-input .basic-input .disabled{color:#ced4da}gerandon-basic-input .basic-input mat-form-field{width:100%}gerandon-basic-input .basic-input mat-form-field .mat-icon{padding:unset;margin-left:10px;margin-right:10px}gerandon-basic-input .basic-input mat-form-field input::placeholder{color:#adb5bd;font-style:italic}gerandon-basic-input .basic-input mat-form-field input:disabled{cursor:not-allowed}\n"] }]
308
+ ], template: "<div class=\"basic-input cva-input\">\r\n <mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [hintLabel]=\"hintLabel()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{label}}</mat-label>\r\n }\r\n @if(mask()) {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #maskInput=\"ngxMask\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n [mask]=\"mask()\"\r\n [triggerOnMaskChange]=\"true\"\r\n [showMaskTyped]=\"showMaskTyped()\"\r\n [specialCharacters]=\"specialCharacters()!\"\r\n [placeHolderCharacter]=\"placeHolderCharacter()!\"\r\n [prefix]=\"maskPrefix()\"\r\n [suffix]=\"maskSuffix()\"\r\n />\r\n } @else {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n />\r\n }\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix style=\"margin-right: 10px\">{{suffix}}</span>\r\n }\r\n\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n", styles: ["gerandon-basic-input{display:block}gerandon-basic-input .basic-input{height:inherit}gerandon-basic-input .basic-input .disabled{color:#ced4da}gerandon-basic-input .basic-input mat-form-field{width:100%}gerandon-basic-input .basic-input mat-form-field .mat-icon{padding:unset;margin-left:10px;margin-right:10px}gerandon-basic-input .basic-input mat-form-field input::placeholder{color:#adb5bd;font-style:italic}gerandon-basic-input .basic-input mat-form-field input:disabled{cursor:not-allowed}\n"] }]
306
309
  }] });
307
310
 
308
311
  class SelectComponent extends BaseInput {
@@ -339,7 +342,7 @@ class SelectComponent extends BaseInput {
339
342
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
340
343
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.3", type: SelectComponent, isStandalone: true, selector: "gerandon-select", inputs: { emptyOptionLabel: { classPropertyName: "emptyOptionLabel", publicName: "emptyOptionLabel", isSignal: false, isRequired: false, transformFunction: null }, emptyOptionAriaLabel: { classPropertyName: "emptyOptionAriaLabel", publicName: "emptyOptionAriaLabel", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null }, asyncOptions: { classPropertyName: "asyncOptions", publicName: "asyncOptions", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
341
344
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectComponent), multi: true }
342
- ], viewQueries: [{ propertyName: "optionElements", predicate: ["optionElements"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label>{{ label }}</mat-label>\r\n }\r\n <mat-select #inputElement\r\n #input=\"ngForm\"\r\n [multiple]=\"multiple()\"\r\n [placeholder]=\"!floatLabel() ? label : placeholder\"\r\n [formControl]=\"control\"\r\n [id]=\"id\"\r\n [class.input-disabled]=\"isDisabled() || control.disabled\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [compareWith]=\"_isEqual\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\">\r\n @if (emptyOptionLabel) {\r\n <mat-option (click)=\"reset()\" [attr.aria-label]=\"emptyOptionAriaLabel\">\r\n {{ emptyOptionLabel }}\r\n </mat-option>\r\n }\r\n @for(option of options; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n</mat-form-field>\r\n", styles: ["gerandon-select mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.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", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { 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: MatTooltipModule }], encapsulation: i0.ViewEncapsulation.None }); }
345
+ ], viewQueries: [{ propertyName: "optionElements", predicate: ["optionElements"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label>{{ label }}</mat-label>\r\n }\r\n <mat-select #inputElement\r\n #input=\"ngForm\"\r\n [multiple]=\"multiple()\"\r\n [placeholder]=\"!floatLabel() ? label : placeholder\"\r\n [formControl]=\"control\"\r\n [id]=\"id\"\r\n [class.input-disabled]=\"isDisabled() || control.disabled\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [compareWith]=\"_isEqual\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\">\r\n @if (emptyOptionLabel) {\r\n <mat-option (click)=\"reset()\" [attr.aria-label]=\"emptyOptionAriaLabel\">\r\n {{ emptyOptionLabel }}\r\n </mat-option>\r\n }\r\n @for(option of options; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n</mat-form-field>\r\n", styles: ["gerandon-select mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.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", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { 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: MatTooltipModule }], encapsulation: i0.ViewEncapsulation.None }); }
343
346
  }
344
347
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SelectComponent, decorators: [{
345
348
  type: Component,
@@ -350,7 +353,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
350
353
  MatSelectModule,
351
354
  ReactiveFormsModule,
352
355
  MatTooltipModule,
353
- ], template: "<mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label>{{ label }}</mat-label>\r\n }\r\n <mat-select #inputElement\r\n #input=\"ngForm\"\r\n [multiple]=\"multiple()\"\r\n [placeholder]=\"!floatLabel() ? label : placeholder\"\r\n [formControl]=\"control\"\r\n [id]=\"id\"\r\n [class.input-disabled]=\"isDisabled() || control.disabled\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [compareWith]=\"_isEqual\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\">\r\n @if (emptyOptionLabel) {\r\n <mat-option (click)=\"reset()\" [attr.aria-label]=\"emptyOptionAriaLabel\">\r\n {{ emptyOptionLabel }}\r\n </mat-option>\r\n }\r\n @for(option of options; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n</mat-form-field>\r\n", styles: ["gerandon-select mat-form-field{width:100%}\n"] }]
356
+ ], template: "<mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label>{{ label }}</mat-label>\r\n }\r\n <mat-select #inputElement\r\n #input=\"ngForm\"\r\n [multiple]=\"multiple()\"\r\n [placeholder]=\"!floatLabel() ? label : placeholder\"\r\n [formControl]=\"control\"\r\n [id]=\"id\"\r\n [class.input-disabled]=\"isDisabled() || control.disabled\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [compareWith]=\"_isEqual\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\">\r\n @if (emptyOptionLabel) {\r\n <mat-option (click)=\"reset()\" [attr.aria-label]=\"emptyOptionAriaLabel\">\r\n {{ emptyOptionLabel }}\r\n </mat-option>\r\n }\r\n @for(option of options; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n</mat-form-field>\r\n", styles: ["gerandon-select mat-form-field{width:100%}\n"] }]
354
357
  }], propDecorators: { emptyOptionLabel: [{
355
358
  type: Input
356
359
  }], emptyOptionAriaLabel: [{
@@ -382,7 +385,7 @@ class TextareaInputComponent extends BaseTextInput {
382
385
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.3", type: TextareaInputComponent, isStandalone: true, selector: "gerandon-textarea-input", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
383
386
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TextareaInputComponent), multi: true },
384
387
  { provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => TextareaInputComponent), multi: true },
385
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"textarea-input cva-input\">\r\n <mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <textarea\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n matInput\r\n cdkTextareaAutosize\r\n [cdkAutosizeMinRows]=\"rows()\"\r\n class=\"w-100 cva-control\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\">\r\n </textarea>\r\n <span class=\"counter\">{{control.value?.length || 0}} / {{ maxLength() }}</span>\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n </mat-form-field>\r\n</div>\r\n", styles: ["gerandon-textarea-input{display:block}gerandon-textarea-input .counter{right:20px;bottom:0;position:absolute;font-size:10px}gerandon-textarea-input .textarea-input .disabled{color:#ced4da}gerandon-textarea-input .textarea-input mat-form-field{width:100%}gerandon-textarea-input .textarea-input mat-form-field textarea{padding-top:10px}gerandon-textarea-input .textarea-input mat-form-field textarea::placeholder{color:#adb5bd;font-style:italic}gerandon-textarea-input .textarea-input mat-form-field textarea:disabled{cursor:not-allowed}\n"], dependencies: [{ 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: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i5.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], encapsulation: i0.ViewEncapsulation.None }); }
388
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"textarea-input cva-input\">\r\n <mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <textarea\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n matInput\r\n cdkTextareaAutosize\r\n [cdkAutosizeMinRows]=\"rows()\"\r\n class=\"w-100 cva-control\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\">\r\n </textarea>\r\n <span class=\"counter\">{{control.value?.length || 0}} / {{ maxLength() }}</span>\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n", styles: ["gerandon-textarea-input{display:block}gerandon-textarea-input .counter{right:20px;bottom:0;position:absolute;font-size:10px}gerandon-textarea-input .textarea-input .disabled{color:#ced4da}gerandon-textarea-input .textarea-input mat-form-field{width:100%}gerandon-textarea-input .textarea-input mat-form-field textarea{padding-top:10px}gerandon-textarea-input .textarea-input mat-form-field textarea::placeholder{color:#adb5bd;font-style:italic}gerandon-textarea-input .textarea-input mat-form-field textarea:disabled{cursor:not-allowed}\n"], dependencies: [{ 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: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i5.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], encapsulation: i0.ViewEncapsulation.None }); }
386
389
  }
387
390
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: TextareaInputComponent, decorators: [{
388
391
  type: Component,
@@ -395,7 +398,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
395
398
  ], providers: [
396
399
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TextareaInputComponent), multi: true },
397
400
  { provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => TextareaInputComponent), multi: true },
398
- ], template: "<div class=\"textarea-input cva-input\">\r\n <mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <textarea\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n matInput\r\n cdkTextareaAutosize\r\n [cdkAutosizeMinRows]=\"rows()\"\r\n class=\"w-100 cva-control\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\">\r\n </textarea>\r\n <span class=\"counter\">{{control.value?.length || 0}} / {{ maxLength() }}</span>\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n </mat-form-field>\r\n</div>\r\n", styles: ["gerandon-textarea-input{display:block}gerandon-textarea-input .counter{right:20px;bottom:0;position:absolute;font-size:10px}gerandon-textarea-input .textarea-input .disabled{color:#ced4da}gerandon-textarea-input .textarea-input mat-form-field{width:100%}gerandon-textarea-input .textarea-input mat-form-field textarea{padding-top:10px}gerandon-textarea-input .textarea-input mat-form-field textarea::placeholder{color:#adb5bd;font-style:italic}gerandon-textarea-input .textarea-input mat-form-field textarea:disabled{cursor:not-allowed}\n"] }]
401
+ ], template: "<div class=\"textarea-input cva-input\">\r\n <mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <textarea\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n matInput\r\n cdkTextareaAutosize\r\n [cdkAutosizeMinRows]=\"rows()\"\r\n class=\"w-100 cva-control\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\">\r\n </textarea>\r\n <span class=\"counter\">{{control.value?.length || 0}} / {{ maxLength() }}</span>\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n", styles: ["gerandon-textarea-input{display:block}gerandon-textarea-input .counter{right:20px;bottom:0;position:absolute;font-size:10px}gerandon-textarea-input .textarea-input .disabled{color:#ced4da}gerandon-textarea-input .textarea-input mat-form-field{width:100%}gerandon-textarea-input .textarea-input mat-form-field textarea{padding-top:10px}gerandon-textarea-input .textarea-input mat-form-field textarea::placeholder{color:#adb5bd;font-style:italic}gerandon-textarea-input .textarea-input mat-form-field textarea:disabled{cursor:not-allowed}\n"] }]
399
402
  }] });
400
403
 
401
404
  class BasicChipsComponent extends BaseInput {
@@ -493,7 +496,7 @@ class BasicChipsComponent extends BaseInput {
493
496
  }
494
497
  }
495
498
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BasicChipsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
496
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.3", type: BasicChipsComponent, isStandalone: true, selector: "gerandon-basic-chips", inputs: { asyncFilterFn: { classPropertyName: "asyncFilterFn", publicName: "asyncFilterFn", isSignal: true, isRequired: false, transformFunction: null }, asyncOptions: { classPropertyName: "asyncOptions", publicName: "asyncOptions", isSignal: true, isRequired: false, transformFunction: null }, startTypingLabel: { classPropertyName: "startTypingLabel", publicName: "startTypingLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyListLabel: { classPropertyName: "emptyListLabel", publicName: "emptyListLabel", isSignal: true, isRequired: false, transformFunction: null }, startAsyncFnAt: { classPropertyName: "startAsyncFnAt", publicName: "startAsyncFnAt", isSignal: true, isRequired: false, transformFunction: null }, labelProperty: { classPropertyName: "labelProperty", publicName: "labelProperty", isSignal: false, isRequired: false, transformFunction: null } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BasicChipsComponent), multi: true }], viewQueries: [{ propertyName: "tsFilterInput", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [hintLabel]=\"_hintLabel\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <mat-chip-grid #chipGrid class=\"w-100\">\r\n @for(item of control.value; track item) {\r\n <mat-chip-row (removed)=\"remove(item)\" color=\"primary\" highlighted>\r\n {{ labelProperty ? item[labelProperty] : item}}\r\n <button matChipRemove [attr.aria-label]=\"(labelProperty ? item[labelProperty] : item) + ' elt\u00E1vol\u00EDt\u00E1sa'\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input #inputElement\r\n matInput\r\n [placeholder]=\"placeholder || label\"\r\n [matAutocomplete]=\"auto\"\r\n (input)=\"filter()\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"!labelProperty && add($event)\"/>\r\n <mat-autocomplete #auto=\"matAutocomplete\"\r\n (optionSelected)=\"selected($event)\">\r\n @for (filterItem of filterOptions$ | async; track filterItem) {\r\n <mat-option [value]=\"filterItem\" [attr.aria-label]=\"labelProperty ? filterItem[labelProperty] : filterItem\">\r\n {{labelProperty ? filterItem[labelProperty] : filterItem}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-chip-grid>\r\n <input #input=\"ngForm\" [style.display]=\"'none'\" [formControl]=\"control\" />\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n</mat-form-field>\r\n", styles: ["gerandon-basic-chips{display:block}gerandon-basic-chips .mat-mdc-standard-chip{height:28px!important}gerandon-basic-chips mat-form-field{width:100%}gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden!important}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$1.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i1$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i1$1.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i1$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }], encapsulation: i0.ViewEncapsulation.None }); }
499
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.3", type: BasicChipsComponent, isStandalone: true, selector: "gerandon-basic-chips", inputs: { asyncFilterFn: { classPropertyName: "asyncFilterFn", publicName: "asyncFilterFn", isSignal: true, isRequired: false, transformFunction: null }, asyncOptions: { classPropertyName: "asyncOptions", publicName: "asyncOptions", isSignal: true, isRequired: false, transformFunction: null }, startTypingLabel: { classPropertyName: "startTypingLabel", publicName: "startTypingLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyListLabel: { classPropertyName: "emptyListLabel", publicName: "emptyListLabel", isSignal: true, isRequired: false, transformFunction: null }, startAsyncFnAt: { classPropertyName: "startAsyncFnAt", publicName: "startAsyncFnAt", isSignal: true, isRequired: false, transformFunction: null }, labelProperty: { classPropertyName: "labelProperty", publicName: "labelProperty", isSignal: false, isRequired: false, transformFunction: null } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BasicChipsComponent), multi: true }], viewQueries: [{ propertyName: "tsFilterInput", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [hintLabel]=\"_hintLabel\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <mat-chip-grid #chipGrid class=\"w-100\">\r\n @for(item of control.value; track item) {\r\n <mat-chip-row (removed)=\"remove(item)\" color=\"primary\" highlighted>\r\n {{ labelProperty ? item[labelProperty] : item}}\r\n <button matChipRemove [attr.aria-label]=\"(labelProperty ? item[labelProperty] : item) + ' elt\u00E1vol\u00EDt\u00E1sa'\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input #inputElement\r\n matInput\r\n [placeholder]=\"placeholder || label\"\r\n [matAutocomplete]=\"auto\"\r\n (input)=\"filter()\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"!labelProperty && add($event)\"/>\r\n <mat-autocomplete #auto=\"matAutocomplete\"\r\n (optionSelected)=\"selected($event)\">\r\n @for (filterItem of filterOptions$ | async; track filterItem) {\r\n <mat-option [value]=\"filterItem\" [attr.aria-label]=\"labelProperty ? filterItem[labelProperty] : filterItem\">\r\n {{labelProperty ? filterItem[labelProperty] : filterItem}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-chip-grid>\r\n <input #input=\"ngForm\" [style.display]=\"'none'\" [formControl]=\"control\" />\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n</mat-form-field>\r\n", styles: ["gerandon-basic-chips{display:block}gerandon-basic-chips .mat-mdc-standard-chip{height:28px!important}gerandon-basic-chips mat-form-field{width:100%}gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden!important}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$1.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i1$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i1$1.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i1$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }], encapsulation: i0.ViewEncapsulation.None }); }
497
500
  }
498
501
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BasicChipsComponent, decorators: [{
499
502
  type: Component,
@@ -507,7 +510,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
507
510
  MatInput,
508
511
  MatLabel,
509
512
  MatError,
510
- ], template: "<mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [hintLabel]=\"_hintLabel\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <mat-chip-grid #chipGrid class=\"w-100\">\r\n @for(item of control.value; track item) {\r\n <mat-chip-row (removed)=\"remove(item)\" color=\"primary\" highlighted>\r\n {{ labelProperty ? item[labelProperty] : item}}\r\n <button matChipRemove [attr.aria-label]=\"(labelProperty ? item[labelProperty] : item) + ' elt\u00E1vol\u00EDt\u00E1sa'\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input #inputElement\r\n matInput\r\n [placeholder]=\"placeholder || label\"\r\n [matAutocomplete]=\"auto\"\r\n (input)=\"filter()\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"!labelProperty && add($event)\"/>\r\n <mat-autocomplete #auto=\"matAutocomplete\"\r\n (optionSelected)=\"selected($event)\">\r\n @for (filterItem of filterOptions$ | async; track filterItem) {\r\n <mat-option [value]=\"filterItem\" [attr.aria-label]=\"labelProperty ? filterItem[labelProperty] : filterItem\">\r\n {{labelProperty ? filterItem[labelProperty] : filterItem}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-chip-grid>\r\n <input #input=\"ngForm\" [style.display]=\"'none'\" [formControl]=\"control\" />\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n</mat-form-field>\r\n", styles: ["gerandon-basic-chips{display:block}gerandon-basic-chips .mat-mdc-standard-chip{height:28px!important}gerandon-basic-chips mat-form-field{width:100%}gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden!important}\n"] }]
513
+ ], template: "<mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [hintLabel]=\"_hintLabel\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <mat-chip-grid #chipGrid class=\"w-100\">\r\n @for(item of control.value; track item) {\r\n <mat-chip-row (removed)=\"remove(item)\" color=\"primary\" highlighted>\r\n {{ labelProperty ? item[labelProperty] : item}}\r\n <button matChipRemove [attr.aria-label]=\"(labelProperty ? item[labelProperty] : item) + ' elt\u00E1vol\u00EDt\u00E1sa'\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input #inputElement\r\n matInput\r\n [placeholder]=\"placeholder || label\"\r\n [matAutocomplete]=\"auto\"\r\n (input)=\"filter()\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"!labelProperty && add($event)\"/>\r\n <mat-autocomplete #auto=\"matAutocomplete\"\r\n (optionSelected)=\"selected($event)\">\r\n @for (filterItem of filterOptions$ | async; track filterItem) {\r\n <mat-option [value]=\"filterItem\" [attr.aria-label]=\"labelProperty ? filterItem[labelProperty] : filterItem\">\r\n {{labelProperty ? filterItem[labelProperty] : filterItem}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-chip-grid>\r\n <input #input=\"ngForm\" [style.display]=\"'none'\" [formControl]=\"control\" />\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n</mat-form-field>\r\n", styles: ["gerandon-basic-chips{display:block}gerandon-basic-chips .mat-mdc-standard-chip{height:28px!important}gerandon-basic-chips mat-form-field{width:100%}gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,gerandon-basic-chips mat-form-field .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden!important}\n"] }]
511
514
  }], propDecorators: { labelProperty: [{
512
515
  type: Input
513
516
  }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"gerandon-ngx-widgets.mjs","sources":["../../../projects/ngx-widgets/src/lib/core/base-value-accessor.ts","../../../projects/ngx-widgets/src/lib/core/base-input.ts","../../../projects/ngx-widgets/src/lib/core/base-text-input.ts","../../../projects/ngx-widgets/src/lib/core/base-mask-input.ts","../../../projects/ngx-widgets/src/lib/core/component-unsubscribe.ts","../../../projects/ngx-widgets/src/lib/basic-input/basic-input.component.ts","../../../projects/ngx-widgets/src/lib/basic-input/basic-input.component.html","../../../projects/ngx-widgets/src/lib/select/select.component.ts","../../../projects/ngx-widgets/src/lib/select/select.component.html","../../../projects/ngx-widgets/src/lib/textarea-input/textarea-input.component.ts","../../../projects/ngx-widgets/src/lib/textarea-input/textarea-input.component.html","../../../projects/ngx-widgets/src/lib/basic-chips/basic-chips.component.ts","../../../projects/ngx-widgets/src/lib/basic-chips/basic-chips.component.html","../../../projects/ngx-widgets/src/public-api.ts","../../../projects/ngx-widgets/src/gerandon-ngx-widgets.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectorRef, Directive,\n ElementRef, inject,\n Injector, OnDestroy, Type,\n ViewChild,\n input\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor, FormControl,\r\n NgControl,\r\n ValidationErrors,\r\n Validator, ValidatorFn,\r\n} from '@angular/forms';\r\n\r\nimport {Observable, of, Subject} from 'rxjs';\r\n\r\n@Directive()\r\nexport class BaseValueAccessor<T> implements ControlValueAccessor, AfterViewInit, Validator, OnDestroy {\r\n\r\n public readonly validator = input<Observable<ValidationErrors>>(of({}));\r\n @ViewChild('inputElement') inputElement!: ElementRef;\r\n @ViewChild('input') input!: NgControl;\r\n\r\n public control: FormControl;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private onChange = (value: T) => {\r\n };\r\n private onTouched = () => {\r\n };\r\n private readonly injector: Injector = inject(Injector);\r\n protected controlDir!: NgControl;\r\n protected readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n protected _validate: ValidatorFn;\r\n protected readonly _defaultValidate: ValidatorFn = () => null;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n\r\n constructor() {\r\n this._validate = this._defaultValidate;\r\n // Temporarily, AfterViewInit will handle the correct setting\r\n this.control = new FormControl();\r\n }\r\n\r\n validate(control: AbstractControl): Observable<ValidationErrors> {\r\n control.setErrors({ ...control.errors, pending: true });\r\n return this.validator();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.controlDir = this.injector.get<NgControl>(NgControl as Type<NgControl>);\r\n this.control = <FormControl>this.controlDir.control;\r\n // For ng-valid expression changed error workaround purposes\r\n this.cdr.detectChanges();\r\n }\r\n\r\n writeValue(obj: T): void {\r\n this.valueAccessor?.writeValue(obj);\r\n }\r\n\r\n registerOnChange(fn: (value: T) => unknown): void {\r\n this.onChange = fn;\r\n this.valueAccessor?.registerOnChange(fn);\r\n }\r\n\r\n registerOnTouched(fn: () => unknown) {\r\n this.onTouched = fn;\r\n this.valueAccessor?.registerOnTouched(fn);\r\n }\r\n\r\n protected get valueAccessor(): ControlValueAccessor | null {\r\n return this.input ? this.input.valueAccessor : null;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive, Inject, inject, InjectionToken,\r\n Input, OnChanges,\r\n OnInit, Optional, SimpleChanges,\r\n input, signal\r\n} from '@angular/core';\r\nimport {FloatLabelType, MatFormFieldAppearance, SubscriptSizing} from '@angular/material/form-field';\r\n\r\nimport {BaseValueAccessor} from './base-value-accessor';\r\nimport {isEmpty, keys} from 'lodash-es';\r\nimport {LiveAnnouncer} from \"@angular/cdk/a11y\";\r\n\r\nexport interface NgxWidgetsValidationErrorTypes {\r\n required?: string;\r\n selectGlobalPlaceholder?: string;\r\n}\r\n\r\nexport const NGX_WIDGETS_VALIDATION_TRANSLATIONS = new InjectionToken<NgxWidgetsValidationErrorTypes>('NGX_WIDGETS_VALIDATION_TRANSLATIONS');\r\nexport const NGX_WIDGETS_FORM_FIELD_APPEARANCE = new InjectionToken<MatFormFieldAppearance>('NGX_WIDGETS_FORM_FIELD_APPEARANCE');\r\n\r\n@Directive()\r\nexport class BaseInput<T, ANNOUNCER_TYPE = object> extends BaseValueAccessor<T> implements OnInit, AfterViewInit, OnChanges {\r\n\r\n public readonly appearance = input<MatFormFieldAppearance>();\r\n // Used on Template\r\n protected readonly _appearance = signal<MatFormFieldAppearance>('outline');\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public id!: string;\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public name!: string;\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public label!: string;\r\n public readonly translateParams = input<unknown>();\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public placeholder!: string;\r\n public readonly isDisabled = input<boolean | undefined>(false);\r\n public readonly floatLabel = input<FloatLabelType>('auto');\r\n // TODO: Skipped for migration because:\r\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\r\n // and migrating would break narrowing currently.\r\n @Input() public prefixIcon?: string;\r\n // TODO: Skipped for migration because:\r\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\r\n // and migrating would break narrowing currently.\r\n @Input() public suffixIcon?: string;\r\n // TODO: Skipped for migration because:\r\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\r\n // and migrating would break narrowing currently.\r\n @Input() public suffix?: string;\r\n public readonly formControlName = input<string>();\r\n public readonly validatorMessages = input<{\r\n [key: string]: string;\r\n }>();\r\n public readonly subscriptSizing = input<SubscriptSizing>('fixed');\r\n public readonly hintLabel = input('');\r\n public readonly ariaLabel = input('', { alias: 'aria-label' });\r\n public readonly ariaPlaceholder = input('', { alias: 'aria-placeholder' });\r\n public readonly ariaDescribedBy = input('', { alias: 'aria-describedby' });\r\n public readonly ariaDescription = input('', { alias: 'aria-description' });\r\n private readonly liveAnnouncer = inject(LiveAnnouncer);\r\n public readonly announcerTranslations = input<ANNOUNCER_TYPE>();\r\n public validatorMessagesArray: { key: string, value: unknown }[] = [];\r\n protected _defaultAnnouncerTranslations?: { [P in keyof ANNOUNCER_TYPE]-?: ANNOUNCER_TYPE[P] };\r\n\r\n constructor(@Optional() @Inject(NGX_WIDGETS_VALIDATION_TRANSLATIONS) protected readonly validationTranslations: NgxWidgetsValidationErrorTypes | any = {},\r\n @Optional() @Inject(NGX_WIDGETS_FORM_FIELD_APPEARANCE) protected readonly formFieldAppearance: MatFormFieldAppearance) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.placeholder = this.placeholder === undefined ? this.label : this.placeholder;\r\n if (!this.name) {\r\n this.name = this.formControlName()!;\r\n /*\r\n console.warn(`name attribute is not defined for ${this.formControlName}! Please beware, that using this control multiple\r\n times with the same control name could result in wrong focus, clicking on the label!`);\r\n */\r\n }\r\n // *ngIf seems like does not re-render component when label is used with dynamic value (e.g.: translate pipe). Strange\r\n this.label = this.label || ' ';\r\n\r\n if (this.formFieldAppearance && !this.appearance()) {\r\n this._appearance.set(this.formFieldAppearance);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['validatorMessages']) {\r\n const validatorMessages = this.validatorMessages();\r\n if (!isEmpty(validatorMessages)) {\r\n this.validatorMessagesArray = keys(validatorMessages).map((key) => ({\r\n key,\r\n value: this.validatorMessages()![key],\r\n }));\r\n }\r\n }\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n protected announce(key: keyof ANNOUNCER_TYPE | string) {\r\n if (this._defaultAnnouncerTranslations?.[key as keyof ANNOUNCER_TYPE]) {\r\n const _key = key as keyof ANNOUNCER_TYPE\r\n const inputTranslation = this.announcerTranslations()?.[_key] as string;\r\n if (inputTranslation) {\r\n return this.liveAnnouncer.announce(inputTranslation, 'assertive');\r\n } else {\r\n return this.liveAnnouncer.announce(this._defaultAnnouncerTranslations![_key] as string, 'assertive');\r\n }\r\n } else {\r\n return this.liveAnnouncer.announce(key as string, 'assertive');\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n input\r\n} from '@angular/core';\r\n\r\nimport { BaseInput } from './base-input';\r\n\r\n@Directive()\r\nexport class BaseTextInput<T, ANNOUNCER_TYPE = object> extends BaseInput<T, ANNOUNCER_TYPE> {\r\n\r\n public readonly type = input<('text' | 'password' | 'number' | 'email' | 'tel')>('text');\r\n public readonly maxLength = input<number | undefined>(512);\r\n}\r\n","import {BaseTextInput} from \"./base-text-input\";\nimport {AfterViewInit, Directive, ViewChild, input} from \"@angular/core\";\nimport {NgxMaskDirective} from \"ngx-mask\";\n\n@Directive()\nexport class BaseMaskInput extends BaseTextInput<string> implements AfterViewInit {\n\n public readonly mask = input<string>();\n public readonly showMaskTyped = input(false);\n public readonly dropSpecialCharacters = input<string[] | boolean | readonly string[] | null>();\n public readonly specialCharacters = input<string[]>();\n public readonly placeHolderCharacter = input<string>('_');\n public readonly maskPrefix = input<string>('');\n public readonly maskSuffix = input<string>('');\n\n @ViewChild('maskInput') maskInput!: NgxMaskDirective;\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n if (this.maskInput) {\n this.maskInput._maskService.dropSpecialCharacters = this.dropSpecialCharacters()!;\n this.maskInput['_applyMask']();\n }\n }\n}\n","import { isDevMode } from '@angular/core';\n\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { SafeSubscriber } from 'rxjs/internal/Subscriber';\n\n/**\n * Automatically unsubscribe from an Observable when the view is destroyed\n * Tested with checking the \"complete\" event of a subscribe method\n * @description\n * An Annotation that should be used with an Observable typed variable to handle its subscriptions\n * @author gergo.asztalos\n */\nexport function UnsubscribeOnDestroy<ObservableType>(): PropertyDecorator {\n return function (target: any, propertyKey: string | symbol) {\n const ngOnDestroy = target.ngOnDestroy;\n\n const secretKey = `_${<string>propertyKey}$`;\n // Probably with function we could use own context\n const destroyKey = (_this: any) =>\n _this.hasOwnProperty('destroy$') ? 'destroy$' : `${_this.constructor.name}_destroy$`;\n Object.defineProperty(target, secretKey, { enumerable: false, writable: true });\n Object.defineProperty(target, propertyKey, {\n configurable: true,\n enumerable: true,\n get: function() {\n return this[secretKey];\n },\n set: function(newValue: Observable<ObservableType> | SafeSubscriber<ObservableType>) {\n if (!this[destroyKey(this)]) {\n this[destroyKey(this)] = new Subject();\n }\n if (newValue instanceof Observable) {\n this[secretKey] = newValue.pipe(\n takeUntil(this[destroyKey(this)]),\n );\n } else {\n this[secretKey] = newValue;\n }\n },\n });\n\n target.ngOnDestroy = function () {\n if (this[propertyKey] instanceof SafeSubscriber) {\n this[propertyKey].unsubscribe();\n this[secretKey].unsubscribe();\n } else if (this.hasOwnProperty(destroyKey(this))) {\n this[destroyKey(this)].next();\n this[destroyKey(this)].complete();\n }\n delete this[secretKey];\n if (isDevMode()) {\n // eslint-disable-next-line no-console,max-len\n console.debug(`<UnsubscribeOnDestroy> - Observable/Subscription <${<string>propertyKey}> completed in class: ${this.constructor.name}`);\n }\n ngOnDestroy && ngOnDestroy.call(this);\n };\n };\n}\n","import {\n Component,\n forwardRef,\n OnInit,\n ViewEncapsulation,\n output\n} from '@angular/core';\r\nimport { NG_ASYNC_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\nimport {NgIf} from \"@angular/common\";\r\nimport {NgxMaskDirective} from \"ngx-mask\";\r\nimport {BaseMaskInput} from \"../core/base-mask-input\";\r\n\r\n@Component({\r\n selector: 'gerandon-basic-input',\r\n templateUrl: './basic-input.component.html',\r\n styleUrls: ['./basic-input.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n NgIf,\r\n NgxMaskDirective,\r\n ],\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BasicInputComponent), multi: true },\r\n { provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => BasicInputComponent), multi: true },\r\n ],\r\n})\r\nexport class BasicInputComponent extends BaseMaskInput implements OnInit {\r\n\r\n readonly iconClick = output();\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n this.id = this.id || this.name;\r\n }\r\n}\r\n","<div class=\"basic-input cva-input\">\r\n <mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [hintLabel]=\"hintLabel()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{label}}</mat-label>\r\n }\r\n @if(mask()) {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #maskInput=\"ngxMask\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n [mask]=\"mask()\"\r\n [triggerOnMaskChange]=\"true\"\r\n [showMaskTyped]=\"showMaskTyped()\"\r\n [specialCharacters]=\"specialCharacters()!\"\r\n [placeHolderCharacter]=\"placeHolderCharacter()!\"\r\n [prefix]=\"maskPrefix()\"\r\n [suffix]=\"maskSuffix()\"\r\n />\r\n } @else {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n />\r\n }\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix style=\"margin-right: 10px\">{{suffix}}</span>\r\n }\r\n\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n\r\n }\r\n @for (error of validatorMessagesArray; track error.key) {\r\n <!--\r\n this @if makes the mat-error to be placed out of subscript-wrapper\r\n that way the error message will be inside the input, not under the field as the others....\r\n\r\n @if (control.errors?.[error.key]) {\r\n }\r\n -->\r\n <mat-error *ngIf=\"control.errors?.[error.key]\">\r\n @if(!!validatorMessages()?.[error.key]) {\r\n {{ error.value }}\r\n } @else if (!!validationTranslations?.[error.key]) {\r\n {{ validationTranslations[error.key] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n","import {\r\n Component,\r\n ElementRef,\r\n forwardRef,\r\n Input,\r\n OnInit,\r\n QueryList,\r\n ViewChildren,\r\n ViewEncapsulation,\r\n input\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport {BaseInput} from '../core/base-input';\r\nimport { isEqual } from 'lodash-es';\r\nimport { Observable } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nexport interface SelectOptionType {\r\n label: string;\r\n value: string | number | null | unknown;\r\n}\r\n\r\ninterface SelectAnnouncerTranslations {\r\n inputReset?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'gerandon-select',\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true,\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectComponent), multi: true }\r\n ],\r\n imports: [\r\n MatInputModule,\r\n MatSelectModule,\r\n ReactiveFormsModule,\r\n MatTooltipModule,\r\n ],\r\n})\r\nexport class SelectComponent extends BaseInput<unknown, SelectAnnouncerTranslations> implements OnInit {\r\n\r\n /**\r\n * In this case, an empty option appears that resets the control, to an empty value state\r\n */\r\n // TODO: Skipped for migration because:\r\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\r\n // and migrating would break narrowing currently.\r\n @Input() public emptyOptionLabel?: string;\r\n @Input() public emptyOptionAriaLabel?: string = 'Üres';\r\n public readonly multiple = input<boolean>();\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public options!: SelectOptionType[];\r\n public readonly asyncOptions = input<Observable<SelectOptionType[]>>();\r\n @ViewChildren('optionElements') public optionElements!: QueryList<ElementRef>;\r\n protected override _defaultAnnouncerTranslations: { [P in keyof SelectAnnouncerTranslations]-?: SelectAnnouncerTranslations[P] } = {\r\n inputReset: 'Lenyíló mező törölve!'\r\n }\r\n\r\n /**\r\n * Angular Material - Select component comparsion is only '===', does not work with Array values\r\n * https://github.com/angular/components/blob/a07c0758a5ec2eb4de1bb822354be08178c66aa4/src/lib/select/select.ts#L242C48-L242C58\r\n */\r\n public readonly _isEqual = isEqual;\r\n\r\n override ngOnInit() {\r\n this.placeholder = !this.placeholder ? (this.validationTranslations?.selectGlobalPlaceholder || this.label) : this.placeholder;\r\n super.ngOnInit();\r\n this.id = this.id || this.formControlName() || this.name;\r\n const asyncOptions = this.asyncOptions();\r\n if (asyncOptions) {\r\n asyncOptions.pipe(takeUntil(this.destroy$)).subscribe((resp) => {\r\n this.options = resp;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n reset() {\r\n this.control.reset();\r\n this.announce('inputReset');\r\n }\r\n}\r\n","<mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label>{{ label }}</mat-label>\r\n }\r\n <mat-select #inputElement\r\n #input=\"ngForm\"\r\n [multiple]=\"multiple()\"\r\n [placeholder]=\"!floatLabel() ? label : placeholder\"\r\n [formControl]=\"control\"\r\n [id]=\"id\"\r\n [class.input-disabled]=\"isDisabled() || control.disabled\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [compareWith]=\"_isEqual\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\">\r\n @if (emptyOptionLabel) {\r\n <mat-option (click)=\"reset()\" [attr.aria-label]=\"emptyOptionAriaLabel\">\r\n {{ emptyOptionLabel }}\r\n </mat-option>\r\n }\r\n @for(option of options; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n</mat-form-field>\r\n","import {Component, forwardRef, ViewEncapsulation, input, AfterViewInit, inject} from '@angular/core';\r\nimport { FormsModule, NG_ASYNC_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport {BaseTextInput} from \"../core/base-text-input\";\r\nimport {takeUntil} from \"rxjs\";\r\nimport {LiveAnnouncer} from \"@angular/cdk/a11y\";\r\n\r\ninterface TextareaAnnouncerTranslations {\r\n maxLengthReached?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'gerandon-textarea-input',\r\n templateUrl: 'textarea-input.component.html',\r\n styleUrls: ['textarea-input.component.scss'],\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n ReactiveFormsModule,\r\n ],\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TextareaInputComponent), multi: true },\r\n { provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => TextareaInputComponent), multi: true },\r\n ],\r\n})\r\nexport class TextareaInputComponent extends BaseTextInput<string> implements AfterViewInit {\r\n\r\n public readonly rows = input(10);\r\n protected override _defaultAnnouncerTranslations: { [P in keyof TextareaAnnouncerTranslations]-?: TextareaAnnouncerTranslations[P] } = {\r\n maxLengthReached: 'Elérte a maximális karakter számot!',\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n this.control.valueChanges.pipe(\r\n takeUntil(this.destroy$)\r\n ).subscribe((value) => {\r\n if (value.length !== 0 && value.length >= (this.maxLength() ?? 0)) {\r\n this.announce('maxLengthReached');\r\n }\r\n })\r\n }\r\n}\r\n","<div class=\"textarea-input cva-input\">\r\n <mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <textarea\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n matInput\r\n cdkTextareaAutosize\r\n [cdkAutosizeMinRows]=\"rows()\"\r\n class=\"w-100 cva-control\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\">\r\n </textarea>\r\n <span class=\"counter\">{{control.value?.length || 0}} / {{ maxLength() }}</span>\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n </mat-form-field>\r\n</div>\r\n","import {COMMA, ENTER} from '@angular/cdk/keycodes';\nimport {AsyncPipe} from '@angular/common';\nimport {\n Component,\n forwardRef,\n Input,\n ViewEncapsulation,\n input,\n viewChild,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\nimport {MatAutocompleteModule, MatAutocompleteSelectedEvent} from '@angular/material/autocomplete';\nimport {MatChipInputEvent, MatChipsModule} from '@angular/material/chips';\nimport {MatIconModule} from '@angular/material/icon';\n\nimport {debounceTime, map, Observable, of, Subject, switchMap, tap} from 'rxjs';\nimport {BaseInput} from \"../core/base-input\";\nimport {MatError, MatFormField, MatLabel} from \"@angular/material/form-field\";\nimport {MatInput} from \"@angular/material/input\";\nimport {find, isEqual} from \"lodash-es\";\n\ninterface ChipsAnnouncerTranslations {\n asyncFilterStart?: string;\n asyncFilterEnd?: string;\n itemRemoved?: string;\n itemAdded?: string;\n selectableItems?: string;\n}\n\n@Component({\n selector: 'gerandon-basic-chips',\n templateUrl: 'basic-chips.component.html',\n styleUrls: ['basic-chips.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n providers: [{provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BasicChipsComponent), multi: true}],\n imports: [\n MatChipsModule,\n MatIconModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n AsyncPipe,\n MatFormField,\n MatInput,\n MatLabel,\n MatError,\n ],\n})\nexport class BasicChipsComponent<T> extends BaseInput<T[], ChipsAnnouncerTranslations> implements OnInit {\n\n public readonly tsFilterInput = viewChild<ElementRef>('inputElement');\n public readonly asyncFilterFn = input<(value: string) => Observable<T[]>>();\n public readonly asyncOptions = input<Observable<T[]>>();\n public readonly startTypingLabel = input('Kezdjen el gépelni...');\n public readonly emptyListLabel = input('Nincs megjeleníthető elem!');\n /**\n * How much character you need to type before triggering search\n */\n public readonly startAsyncFnAt = input<number>(1);\n // TODO: Skipped for migration because:\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\n // and migrating would break narrowing currently.\n @Input() public labelProperty?: keyof T;\n public readonly separatorKeysCodes = [ENTER, COMMA] as const;\n public filterOptions$?: Observable<T[]>;\n protected _hintLabel!: string;\n private readonly inputChange = new Subject<string>();\n protected override _defaultAnnouncerTranslations: { [P in keyof ChipsAnnouncerTranslations]-?: ChipsAnnouncerTranslations[P] } = {\n asyncFilterStart: 'Szerver keresés elindítva',\n asyncFilterEnd: 'A szerver keresés lefutott',\n selectableItems: 'Választható elemek:',\n itemRemoved: 'Elem sikeresen eltávolítva',\n itemAdded: 'Elem hozzáadva'\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this._hintLabel = this.hintLabel();\n if (this.asyncFilterFn()) {\n this.filterOptions$ = this.inputChange.pipe(\n debounceTime(300),\n tap(() => this.announce('asyncFilterStart')),\n switchMap((value) => {\n if (value && value.length >= this.startAsyncFnAt()) {\n return this.asyncFilterFn()!(value).pipe(\n map((responseList) => {\n this.announce('asyncFilterEnd');\n return responseList.filter((responseListItem) => {\n return !find(this.control.value, (controlAct) => isEqual(controlAct, responseListItem));\n })\n })\n );\n }\n return of([]);\n }),\n tap((responseList) => {\n this.announce('selectableItems').then(() => {\n this.announce(responseList.map((act) => this.labelProperty ? act[this.labelProperty] : act).join(','))\n });\n if (!this.tsFilterInput()?.nativeElement.value && !this.control.value) {\n this._hintLabel = this.hintLabel() ?? 'Kezdjen el gépelni...';\n } else {\n this._hintLabel = !responseList.length ? this.emptyListLabel() : '';\n }\n })\n )\n } else {\n this.filterOptions$ = this.asyncOptions();\n }\n }\n\n filter() {\n const filterValue = this.tsFilterInput()!.nativeElement.value;\n this.inputChange.next(filterValue);\n }\n\n remove(item: T) {\n const values: T[] = this.control.value;\n const index = values.indexOf(item);\n if (index >= 0) {\n values.splice(index, 1);\n this.control.setValue(values);\n }\n\n this.mark();\n this.announce('itemRemoved');\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n this.updateValue(value as T);\n }\n event.chipInput!.clear();\n\n this.mark();\n this.announce('itemAdded');\n }\n\n selected(event: MatAutocompleteSelectedEvent): void {\n if (!this.control.value?.includes(event.option.value)) {\n this.updateValue(<T>event.option.value);\n }\n this.inputElement.nativeElement.value = '';\n\n this.mark();\n }\n\n private updateValue(value: T) {\n this.control.setValue([\n ...(this.control.value || []),\n value,\n ]);\n }\n\n private mark() {\n if (!this.control.touched) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n }\n }\n}\n","<mat-form-field [appearance]=\"_appearance()\" [subscriptSizing]=\"subscriptSizing()\" [hintLabel]=\"_hintLabel\" [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <mat-chip-grid #chipGrid class=\"w-100\">\r\n @for(item of control.value; track item) {\r\n <mat-chip-row (removed)=\"remove(item)\" color=\"primary\" highlighted>\r\n {{ labelProperty ? item[labelProperty] : item}}\r\n <button matChipRemove [attr.aria-label]=\"(labelProperty ? item[labelProperty] : item) + ' eltávolítása'\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input #inputElement\r\n matInput\r\n [placeholder]=\"placeholder || label\"\r\n [matAutocomplete]=\"auto\"\r\n (input)=\"filter()\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"!labelProperty && add($event)\"/>\r\n <mat-autocomplete #auto=\"matAutocomplete\"\r\n (optionSelected)=\"selected($event)\">\r\n @for (filterItem of filterOptions$ | async; track filterItem) {\r\n <mat-option [value]=\"filterItem\" [attr.aria-label]=\"labelProperty ? filterItem[labelProperty] : filterItem\">\r\n {{labelProperty ? filterItem[labelProperty] : filterItem}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-chip-grid>\r\n <input #input=\"ngForm\" [style.display]=\"'none'\" [formControl]=\"control\" />\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n } @else if (control.errors?.['required'] && validationTranslations.required) {\r\n <mat-error>{{ validationTranslations.required }}</mat-error>\r\n } @else {\r\n @for (error of validatorMessagesArray; track error) {\r\n <mat-error>{{ error.value }}</mat-error>\r\n }\r\n }\r\n</mat-form-field>\r\n","/*\n * Public API Surface of ngx-widgets\n */\n\nexport * from './lib/core/base-value-accessor';\nexport * from './lib/core/base-input';\nexport * from './lib/core/base-text-input';\nexport * from './lib/core/base-mask-input';\nexport * from './lib/core/component-unsubscribe';\n\nexport * from './lib/basic-input/basic-input.component';\nexport * from './lib/select/select.component';\nexport * from './lib/textarea-input/textarea-input.component';\nexport * from './lib/basic-chips/basic-chips.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["takeUntil","i1","i2","i3","i4","i5"],"mappings":"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"}
1
+ {"version":3,"file":"gerandon-ngx-widgets.mjs","sources":["../../../projects/ngx-widgets/src/lib/core/base-value-accessor.ts","../../../projects/ngx-widgets/src/lib/core/base-input.ts","../../../projects/ngx-widgets/src/lib/core/base-text-input.ts","../../../projects/ngx-widgets/src/lib/core/base-mask-input.ts","../../../projects/ngx-widgets/src/lib/core/component-unsubscribe.ts","../../../projects/ngx-widgets/src/lib/basic-input/basic-input.component.ts","../../../projects/ngx-widgets/src/lib/basic-input/basic-input.component.html","../../../projects/ngx-widgets/src/lib/select/select.component.ts","../../../projects/ngx-widgets/src/lib/select/select.component.html","../../../projects/ngx-widgets/src/lib/textarea-input/textarea-input.component.ts","../../../projects/ngx-widgets/src/lib/textarea-input/textarea-input.component.html","../../../projects/ngx-widgets/src/lib/basic-chips/basic-chips.component.ts","../../../projects/ngx-widgets/src/lib/basic-chips/basic-chips.component.html","../../../projects/ngx-widgets/src/public-api.ts","../../../projects/ngx-widgets/src/gerandon-ngx-widgets.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectorRef, Directive,\n ElementRef, inject,\n Injector, OnDestroy, Type,\n ViewChild,\n input\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor, FormControl,\r\n NgControl,\r\n ValidationErrors,\r\n Validator, ValidatorFn,\r\n} from '@angular/forms';\r\n\r\nimport {Observable, of, Subject} from 'rxjs';\r\n\r\n@Directive()\r\nexport class BaseValueAccessor<T> implements ControlValueAccessor, AfterViewInit, Validator, OnDestroy {\r\n\r\n public readonly validator = input<Observable<ValidationErrors>>(of({}));\r\n @ViewChild('inputElement') inputElement!: ElementRef;\r\n @ViewChild('input') input!: NgControl;\r\n\r\n public control: FormControl;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private onChange = (value: T) => {\r\n };\r\n private onTouched = () => {\r\n };\r\n private readonly injector: Injector = inject(Injector);\r\n protected controlDir!: NgControl;\r\n protected readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n protected _validate: ValidatorFn;\r\n protected readonly _defaultValidate: ValidatorFn = () => null;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n\r\n constructor() {\r\n this._validate = this._defaultValidate;\r\n // Temporarily, AfterViewInit will handle the correct setting\r\n this.control = new FormControl();\r\n }\r\n\r\n validate(control: AbstractControl): Observable<ValidationErrors> {\r\n control.setErrors({ ...control.errors, pending: true });\r\n return this.validator();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.controlDir = this.injector.get<NgControl>(NgControl as Type<NgControl>);\r\n this.control = <FormControl>this.controlDir.control;\r\n // For ng-valid expression changed error workaround purposes\r\n this.cdr.detectChanges();\r\n }\r\n\r\n writeValue(obj: T): void {\r\n this.valueAccessor?.writeValue(obj);\r\n }\r\n\r\n registerOnChange(fn: (value: T) => unknown): void {\r\n this.onChange = fn;\r\n this.valueAccessor?.registerOnChange(fn);\r\n }\r\n\r\n registerOnTouched(fn: () => unknown) {\r\n this.onTouched = fn;\r\n this.valueAccessor?.registerOnTouched(fn);\r\n }\r\n\r\n protected get valueAccessor(): ControlValueAccessor | null {\r\n return this.input ? this.input.valueAccessor : null;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive, Inject, inject, InjectionToken,\r\n Input, OnChanges,\r\n OnInit, Optional, SimpleChanges,\r\n input, signal, WritableSignal\r\n} from '@angular/core';\r\nimport {\r\n FloatLabelType,\r\n MAT_FORM_FIELD_DEFAULT_OPTIONS,\r\n MatFormFieldAppearance,\r\n SubscriptSizing\r\n} from '@angular/material/form-field';\r\n\r\nimport {BaseValueAccessor} from './base-value-accessor';\r\nimport {isEmpty, keys} from 'lodash-es';\r\nimport {LiveAnnouncer} from \"@angular/cdk/a11y\";\r\nimport {ThemePalette} from \"@angular/material/core\";\r\nimport {debounceTime, startWith, takeUntil} from \"rxjs\";\r\n\r\nexport interface NgxWidgetsValidationErrorTypes {\r\n required?: string;\r\n selectGlobalPlaceholder?: string;\r\n}\r\n\r\nexport const NGX_WIDGETS_VALIDATION_TRANSLATIONS = new InjectionToken<NgxWidgetsValidationErrorTypes>('NGX_WIDGETS_VALIDATION_TRANSLATIONS');\r\n/**\r\n * @deprecated\r\n * This token is deprecated and will be removed in Angular v21. Use MAT_FORM_FIELD_DEFAULT_OPTIONS instead.\r\n */\r\nexport const NGX_WIDGETS_FORM_FIELD_APPEARANCE = new InjectionToken<MatFormFieldAppearance>('NGX_WIDGETS_FORM_FIELD_APPEARANCE');\r\n\r\n@Directive()\r\nexport class BaseInput<T, ANNOUNCER_TYPE = object> extends BaseValueAccessor<T> implements OnInit, AfterViewInit, OnChanges {\r\n\r\n public readonly appearance = input<MatFormFieldAppearance>();\r\n protected readonly _appearance: WritableSignal<MatFormFieldAppearance>;\r\n public readonly color = input<ThemePalette>();\r\n protected readonly _color: WritableSignal<ThemePalette>;\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public id!: string;\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public name!: string;\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public label!: string;\r\n public readonly translateParams = input<unknown>();\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public placeholder!: string;\r\n public readonly isDisabled = input<boolean | undefined>(false);\r\n public readonly floatLabel = input<FloatLabelType>('auto');\r\n // TODO: Skipped for migration because:\r\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\r\n // and migrating would break narrowing currently.\r\n @Input() public prefixIcon?: string;\r\n // TODO: Skipped for migration because:\r\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\r\n // and migrating would break narrowing currently.\r\n @Input() public suffixIcon?: string;\r\n // TODO: Skipped for migration because:\r\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\r\n // and migrating would break narrowing currently.\r\n @Input() public suffix?: string;\r\n public readonly formControlName = input<string>();\r\n public readonly validatorMessages = input<{\r\n [key: string]: string;\r\n }>();\r\n public readonly subscriptSizing = input<SubscriptSizing>('fixed');\r\n public readonly hintLabel = input('');\r\n public readonly ariaLabel = input('', { alias: 'aria-label' });\r\n public readonly ariaPlaceholder = input('', { alias: 'aria-placeholder' });\r\n public readonly ariaDescribedBy = input('', { alias: 'aria-describedby' });\r\n public readonly ariaDescription = input('', { alias: 'aria-description' });\r\n protected controlErrorKeys: string[] = [];\r\n private readonly liveAnnouncer = inject(LiveAnnouncer);\r\n private readonly matFormFieldConfig = inject(MAT_FORM_FIELD_DEFAULT_OPTIONS);\r\n public readonly announcerTranslations = input<ANNOUNCER_TYPE>();\r\n public validatorMessagesArray: { key: string, value: unknown }[] = [];\r\n protected _defaultAnnouncerTranslations?: { [P in keyof ANNOUNCER_TYPE]-?: ANNOUNCER_TYPE[P] };\r\n\r\n constructor(@Optional() @Inject(NGX_WIDGETS_VALIDATION_TRANSLATIONS) protected readonly validationTranslations: NgxWidgetsValidationErrorTypes | any = {}) {\r\n super();\r\n this._appearance = signal<MatFormFieldAppearance>(this.matFormFieldConfig.appearance ?? 'fill');\r\n this._color = signal<ThemePalette>(this.matFormFieldConfig.color ?? 'primary');\r\n }\r\n\r\n ngOnInit() {\r\n this.placeholder = this.placeholder === undefined ? this.label : this.placeholder;\r\n if (!this.name) {\r\n this.name = this.formControlName()!;\r\n /*\r\n console.warn(`name attribute is not defined for ${this.formControlName}! Please beware, that using this control multiple\r\n times with the same control name could result in wrong focus, clicking on the label!`);\r\n */\r\n }\r\n // *ngIf seems like does not re-render component when label is used with dynamic value (e.g.: translate pipe). Strange\r\n this.label = this.label || ' ';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['validatorMessages']) {\r\n const validatorMessages = this.validatorMessages();\r\n if (!isEmpty(validatorMessages)) {\r\n this.validatorMessagesArray = keys(validatorMessages).map((key) => ({\r\n key,\r\n value: this.validatorMessages()![key],\r\n }));\r\n }\r\n }\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n this.cdr.detectChanges();\r\n this.control.statusChanges.pipe(\r\n startWith(this.control.status),\r\n takeUntil(this.destroy$),\r\n debounceTime(100),\r\n ).subscribe(() => {\r\n if (!this.control.hasError('server')) {\r\n this.controlErrorKeys = keys(this.control.errors).map((key) => key);\r\n this.cdr.detectChanges();\r\n }\r\n });\r\n }\r\n\r\n protected announce(key: keyof ANNOUNCER_TYPE | string) {\r\n if (this._defaultAnnouncerTranslations?.[key as keyof ANNOUNCER_TYPE]) {\r\n const _key = key as keyof ANNOUNCER_TYPE\r\n const inputTranslation = this.announcerTranslations()?.[_key] as string;\r\n if (inputTranslation) {\r\n return this.liveAnnouncer.announce(inputTranslation, 'assertive');\r\n } else {\r\n return this.liveAnnouncer.announce(this._defaultAnnouncerTranslations![_key] as string, 'assertive');\r\n }\r\n } else {\r\n return this.liveAnnouncer.announce(key as string, 'assertive');\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n input\r\n} from '@angular/core';\r\n\r\nimport { BaseInput } from './base-input';\r\n\r\n@Directive()\r\nexport class BaseTextInput<T, ANNOUNCER_TYPE = object> extends BaseInput<T, ANNOUNCER_TYPE> {\r\n\r\n public readonly type = input<('text' | 'password' | 'number' | 'email' | 'tel')>('text');\r\n public readonly maxLength = input<number | undefined>(512);\r\n}\r\n","import {BaseTextInput} from \"./base-text-input\";\nimport {AfterViewInit, Directive, ViewChild, input} from \"@angular/core\";\nimport {NgxMaskDirective} from \"ngx-mask\";\n\n@Directive()\nexport class BaseMaskInput extends BaseTextInput<string> implements AfterViewInit {\n\n public readonly mask = input<string>();\n public readonly showMaskTyped = input(false);\n public readonly dropSpecialCharacters = input<string[] | boolean | readonly string[] | null>();\n public readonly specialCharacters = input<string[]>();\n public readonly placeHolderCharacter = input<string>('_');\n public readonly maskPrefix = input<string>('');\n public readonly maskSuffix = input<string>('');\n\n @ViewChild('maskInput') maskInput!: NgxMaskDirective;\n\n override ngAfterViewInit() {\n super.ngAfterViewInit();\n\n if (this.maskInput) {\n this.maskInput._maskService.dropSpecialCharacters = this.dropSpecialCharacters()!;\n this.maskInput['_applyMask']();\n }\n }\n}\n","import { isDevMode } from '@angular/core';\n\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { SafeSubscriber } from 'rxjs/internal/Subscriber';\n\n/**\n * Automatically unsubscribe from an Observable when the view is destroyed\n * Tested with checking the \"complete\" event of a subscribe method\n * @description\n * An Annotation that should be used with an Observable typed variable to handle its subscriptions\n * @author gergo.asztalos\n */\nexport function UnsubscribeOnDestroy<ObservableType>(): PropertyDecorator {\n return function (target: any, propertyKey: string | symbol) {\n const ngOnDestroy = target.ngOnDestroy;\n\n const secretKey = `_${<string>propertyKey}$`;\n // Probably with function we could use own context\n const destroyKey = (_this: any) =>\n _this.hasOwnProperty('destroy$') ? 'destroy$' : `${_this.constructor.name}_destroy$`;\n Object.defineProperty(target, secretKey, { enumerable: false, writable: true });\n Object.defineProperty(target, propertyKey, {\n configurable: true,\n enumerable: true,\n get: function() {\n return this[secretKey];\n },\n set: function(newValue: Observable<ObservableType> | SafeSubscriber<ObservableType>) {\n if (!this[destroyKey(this)]) {\n this[destroyKey(this)] = new Subject();\n }\n if (newValue instanceof Observable) {\n this[secretKey] = newValue.pipe(\n takeUntil(this[destroyKey(this)]),\n );\n } else {\n this[secretKey] = newValue;\n }\n },\n });\n\n target.ngOnDestroy = function () {\n if (this[propertyKey] instanceof SafeSubscriber) {\n this[propertyKey].unsubscribe();\n this[secretKey].unsubscribe();\n } else if (this.hasOwnProperty(destroyKey(this))) {\n this[destroyKey(this)].next();\n this[destroyKey(this)].complete();\n }\n delete this[secretKey];\n if (isDevMode()) {\n // eslint-disable-next-line no-console,max-len\n console.debug(`<UnsubscribeOnDestroy> - Observable/Subscription <${<string>propertyKey}> completed in class: ${this.constructor.name}`);\n }\n ngOnDestroy && ngOnDestroy.call(this);\n };\n };\n}\n","import {\r\n Component,\r\n forwardRef,\r\n OnInit,\r\n ViewEncapsulation,\r\n output\r\n} from '@angular/core';\r\nimport { NG_ASYNC_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\nimport {NgxMaskDirective} from \"ngx-mask\";\r\nimport {BaseMaskInput} from \"../core/base-mask-input\";\r\n\r\n@Component({\r\n selector: 'gerandon-basic-input',\r\n templateUrl: './basic-input.component.html',\r\n styleUrls: ['./basic-input.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n NgxMaskDirective,\r\n ],\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BasicInputComponent), multi: true },\r\n { provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => BasicInputComponent), multi: true },\r\n ],\r\n})\r\nexport class BasicInputComponent extends BaseMaskInput implements OnInit {\r\n\r\n readonly iconClick = output();\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n this.id = this.id || this.name;\r\n }\r\n}\r\n","<div class=\"basic-input cva-input\">\r\n <mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [hintLabel]=\"hintLabel()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{label}}</mat-label>\r\n }\r\n @if(mask()) {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #maskInput=\"ngxMask\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n [mask]=\"mask()\"\r\n [triggerOnMaskChange]=\"true\"\r\n [showMaskTyped]=\"showMaskTyped()\"\r\n [specialCharacters]=\"specialCharacters()!\"\r\n [placeHolderCharacter]=\"placeHolderCharacter()!\"\r\n [prefix]=\"maskPrefix()\"\r\n [suffix]=\"maskSuffix()\"\r\n />\r\n } @else {\r\n <input\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n matInput\r\n [style.padding-right]=\"(suffix || prefixIcon) && '35px'\"\r\n [type]=\"type()\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\"\r\n />\r\n }\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix style=\"margin-right: 10px\">{{suffix}}</span>\r\n }\r\n\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n","import {\r\n Component,\r\n ElementRef,\r\n forwardRef,\r\n Input,\r\n OnInit,\r\n QueryList,\r\n ViewChildren,\r\n ViewEncapsulation,\r\n input\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport {BaseInput} from '../core/base-input';\r\nimport { isEqual } from 'lodash-es';\r\nimport { Observable } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nexport interface SelectOptionType {\r\n label: string;\r\n value: string | number | null | unknown;\r\n}\r\n\r\ninterface SelectAnnouncerTranslations {\r\n inputReset?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'gerandon-select',\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true,\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectComponent), multi: true }\r\n ],\r\n imports: [\r\n MatInputModule,\r\n MatSelectModule,\r\n ReactiveFormsModule,\r\n MatTooltipModule,\r\n ],\r\n})\r\nexport class SelectComponent extends BaseInput<unknown, SelectAnnouncerTranslations> implements OnInit {\r\n\r\n /**\r\n * In this case, an empty option appears that resets the control, to an empty value state\r\n */\r\n // TODO: Skipped for migration because:\r\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\r\n // and migrating would break narrowing currently.\r\n @Input() public emptyOptionLabel?: string;\r\n @Input() public emptyOptionAriaLabel?: string = 'Üres';\r\n public readonly multiple = input<boolean>();\r\n // TODO: Skipped for migration because:\r\n // Your application code writes to the input. This prevents migration.\r\n @Input() public options!: SelectOptionType[];\r\n public readonly asyncOptions = input<Observable<SelectOptionType[]>>();\r\n @ViewChildren('optionElements') public optionElements!: QueryList<ElementRef>;\r\n protected override _defaultAnnouncerTranslations: { [P in keyof SelectAnnouncerTranslations]-?: SelectAnnouncerTranslations[P] } = {\r\n inputReset: 'Lenyíló mező törölve!'\r\n }\r\n\r\n /**\r\n * Angular Material - Select component comparsion is only '===', does not work with Array values\r\n * https://github.com/angular/components/blob/a07c0758a5ec2eb4de1bb822354be08178c66aa4/src/lib/select/select.ts#L242C48-L242C58\r\n */\r\n public readonly _isEqual = isEqual;\r\n\r\n override ngOnInit() {\r\n this.placeholder = !this.placeholder ? (this.validationTranslations?.selectGlobalPlaceholder || this.label) : this.placeholder;\r\n super.ngOnInit();\r\n this.id = this.id || this.formControlName() || this.name;\r\n const asyncOptions = this.asyncOptions();\r\n if (asyncOptions) {\r\n asyncOptions.pipe(takeUntil(this.destroy$)).subscribe((resp) => {\r\n this.options = resp;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n reset() {\r\n this.control.reset();\r\n this.announce('inputReset');\r\n }\r\n}\r\n","<mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label>{{ label }}</mat-label>\r\n }\r\n <mat-select #inputElement\r\n #input=\"ngForm\"\r\n [multiple]=\"multiple()\"\r\n [placeholder]=\"!floatLabel() ? label : placeholder\"\r\n [formControl]=\"control\"\r\n [id]=\"id\"\r\n [class.input-disabled]=\"isDisabled() || control.disabled\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [compareWith]=\"_isEqual\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\">\r\n @if (emptyOptionLabel) {\r\n <mat-option (click)=\"reset()\" [attr.aria-label]=\"emptyOptionAriaLabel\">\r\n {{ emptyOptionLabel }}\r\n </mat-option>\r\n }\r\n @for(option of options; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n</mat-form-field>\r\n","import {Component, forwardRef, ViewEncapsulation, input, AfterViewInit, inject} from '@angular/core';\r\nimport { FormsModule, NG_ASYNC_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport {BaseTextInput} from \"../core/base-text-input\";\r\nimport {takeUntil} from \"rxjs\";\r\nimport {LiveAnnouncer} from \"@angular/cdk/a11y\";\r\n\r\ninterface TextareaAnnouncerTranslations {\r\n maxLengthReached?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'gerandon-textarea-input',\r\n templateUrl: 'textarea-input.component.html',\r\n styleUrls: ['textarea-input.component.scss'],\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n ReactiveFormsModule,\r\n ],\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TextareaInputComponent), multi: true },\r\n { provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => TextareaInputComponent), multi: true },\r\n ],\r\n})\r\nexport class TextareaInputComponent extends BaseTextInput<string> implements AfterViewInit {\r\n\r\n public readonly rows = input(10);\r\n protected override _defaultAnnouncerTranslations: { [P in keyof TextareaAnnouncerTranslations]-?: TextareaAnnouncerTranslations[P] } = {\r\n maxLengthReached: 'Elérte a maximális karakter számot!',\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n this.control.valueChanges.pipe(\r\n takeUntil(this.destroy$)\r\n ).subscribe((value) => {\r\n if (value.length !== 0 && value.length >= (this.maxLength() ?? 0)) {\r\n this.announce('maxLengthReached');\r\n }\r\n })\r\n }\r\n}\r\n","<div class=\"textarea-input cva-input\">\r\n <mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <textarea\r\n [id]=\"id\"\r\n #inputElement\r\n #input=\"ngForm\"\r\n #autosize=\"cdkTextareaAutosize\"\r\n matInput\r\n cdkTextareaAutosize\r\n [cdkAutosizeMinRows]=\"rows()\"\r\n class=\"w-100 cva-control\"\r\n [attr.disabled]=\"isDisabled() || control.disabled ? '' : null\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [readonly]=\"isDisabled()\"\r\n [placeholder]=\"placeholder\"\r\n [formControl]=\"control\"\r\n [maxLength]=\"maxLength()\"\r\n [name]=\"name\">\r\n </textarea>\r\n <span class=\"counter\">{{control.value?.length || 0}} / {{ maxLength() }}</span>\r\n @if (prefixIcon) {\r\n <mat-icon matPrefix color=\"accent\">\r\n {{prefixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffixIcon) {\r\n <mat-icon matSuffix color=\"accent\">\r\n {{suffixIcon}}\r\n </mat-icon>\r\n }\r\n @if (suffix) {\r\n <span matSuffix>{{suffix}}</span>\r\n }\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n</div>\r\n","import {COMMA, ENTER} from '@angular/cdk/keycodes';\nimport {AsyncPipe} from '@angular/common';\nimport {\n Component,\n forwardRef,\n Input,\n ViewEncapsulation,\n input,\n viewChild,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\nimport {MatAutocompleteModule, MatAutocompleteSelectedEvent} from '@angular/material/autocomplete';\nimport {MatChipInputEvent, MatChipsModule} from '@angular/material/chips';\nimport {MatIconModule} from '@angular/material/icon';\n\nimport {debounceTime, map, Observable, of, Subject, switchMap, tap} from 'rxjs';\nimport {BaseInput} from \"../core/base-input\";\nimport {MatError, MatFormField, MatLabel} from \"@angular/material/form-field\";\nimport {MatInput} from \"@angular/material/input\";\nimport {find, isEqual} from \"lodash-es\";\n\ninterface ChipsAnnouncerTranslations {\n asyncFilterStart?: string;\n asyncFilterEnd?: string;\n itemRemoved?: string;\n itemAdded?: string;\n selectableItems?: string;\n}\n\n@Component({\n selector: 'gerandon-basic-chips',\n templateUrl: 'basic-chips.component.html',\n styleUrls: ['basic-chips.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n providers: [{provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BasicChipsComponent), multi: true}],\n imports: [\n MatChipsModule,\n MatIconModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n AsyncPipe,\n MatFormField,\n MatInput,\n MatLabel,\n MatError,\n ],\n})\nexport class BasicChipsComponent<T> extends BaseInput<T[], ChipsAnnouncerTranslations> implements OnInit {\n\n public readonly tsFilterInput = viewChild<ElementRef>('inputElement');\n public readonly asyncFilterFn = input<(value: string) => Observable<T[]>>();\n public readonly asyncOptions = input<Observable<T[]>>();\n public readonly startTypingLabel = input('Kezdjen el gépelni...');\n public readonly emptyListLabel = input('Nincs megjeleníthető elem!');\n /**\n * How much character you need to type before triggering search\n */\n public readonly startAsyncFnAt = input<number>(1);\n // TODO: Skipped for migration because:\n // This input is used in a control flow expression (e.g. `@if` or `*ngIf`)\n // and migrating would break narrowing currently.\n @Input() public labelProperty?: keyof T;\n public readonly separatorKeysCodes = [ENTER, COMMA] as const;\n public filterOptions$?: Observable<T[]>;\n protected _hintLabel!: string;\n private readonly inputChange = new Subject<string>();\n protected override _defaultAnnouncerTranslations: { [P in keyof ChipsAnnouncerTranslations]-?: ChipsAnnouncerTranslations[P] } = {\n asyncFilterStart: 'Szerver keresés elindítva',\n asyncFilterEnd: 'A szerver keresés lefutott',\n selectableItems: 'Választható elemek:',\n itemRemoved: 'Elem sikeresen eltávolítva',\n itemAdded: 'Elem hozzáadva'\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this._hintLabel = this.hintLabel();\n if (this.asyncFilterFn()) {\n this.filterOptions$ = this.inputChange.pipe(\n debounceTime(300),\n tap(() => this.announce('asyncFilterStart')),\n switchMap((value) => {\n if (value && value.length >= this.startAsyncFnAt()) {\n return this.asyncFilterFn()!(value).pipe(\n map((responseList) => {\n this.announce('asyncFilterEnd');\n return responseList.filter((responseListItem) => {\n return !find(this.control.value, (controlAct) => isEqual(controlAct, responseListItem));\n })\n })\n );\n }\n return of([]);\n }),\n tap((responseList) => {\n this.announce('selectableItems').then(() => {\n this.announce(responseList.map((act) => this.labelProperty ? act[this.labelProperty] : act).join(','))\n });\n if (!this.tsFilterInput()?.nativeElement.value && !this.control.value) {\n this._hintLabel = this.hintLabel() ?? 'Kezdjen el gépelni...';\n } else {\n this._hintLabel = !responseList.length ? this.emptyListLabel() : '';\n }\n })\n )\n } else {\n this.filterOptions$ = this.asyncOptions();\n }\n }\n\n filter() {\n const filterValue = this.tsFilterInput()!.nativeElement.value;\n this.inputChange.next(filterValue);\n }\n\n remove(item: T) {\n const values: T[] = this.control.value;\n const index = values.indexOf(item);\n if (index >= 0) {\n values.splice(index, 1);\n this.control.setValue(values);\n }\n\n this.mark();\n this.announce('itemRemoved');\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n this.updateValue(value as T);\n }\n event.chipInput!.clear();\n\n this.mark();\n this.announce('itemAdded');\n }\n\n selected(event: MatAutocompleteSelectedEvent): void {\n if (!this.control.value?.includes(event.option.value)) {\n this.updateValue(<T>event.option.value);\n }\n this.inputElement.nativeElement.value = '';\n\n this.mark();\n }\n\n private updateValue(value: T) {\n this.control.setValue([\n ...(this.control.value || []),\n value,\n ]);\n }\n\n private mark() {\n if (!this.control.touched) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n }\n }\n}\n","<mat-form-field [appearance]=\"appearance() ?? _appearance()\"\r\n [color]=\"color() ?? _color()\"\r\n [subscriptSizing]=\"subscriptSizing()\"\r\n [hintLabel]=\"_hintLabel\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (label) {\r\n <mat-label [class.disabled]=\"isDisabled()\">{{ label }}</mat-label>\r\n }\r\n <mat-chip-grid #chipGrid class=\"w-100\">\r\n @for(item of control.value; track item) {\r\n <mat-chip-row (removed)=\"remove(item)\" color=\"primary\" highlighted>\r\n {{ labelProperty ? item[labelProperty] : item}}\r\n <button matChipRemove [attr.aria-label]=\"(labelProperty ? item[labelProperty] : item) + ' eltávolítása'\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input #inputElement\r\n matInput\r\n [placeholder]=\"placeholder || label\"\r\n [matAutocomplete]=\"auto\"\r\n (input)=\"filter()\"\r\n [attr.aria-placeholder]=\"ariaPlaceholder() || placeholder\"\r\n [attr.aria-label]=\"ariaLabel() || label\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n [attr.aria-description]=\"ariaDescription()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"!labelProperty && add($event)\"/>\r\n <mat-autocomplete #auto=\"matAutocomplete\"\r\n (optionSelected)=\"selected($event)\">\r\n @for (filterItem of filterOptions$ | async; track filterItem) {\r\n <mat-option [value]=\"filterItem\" [attr.aria-label]=\"labelProperty ? filterItem[labelProperty] : filterItem\">\r\n {{labelProperty ? filterItem[labelProperty] : filterItem}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-chip-grid>\r\n <input #input=\"ngForm\" [style.display]=\"'none'\" [formControl]=\"control\" />\r\n @if (control.errors?.['server']) {\r\n <mat-error>{{ control.errors?.['server'] }}</mat-error>\r\n }\r\n @for (errorKey of controlErrorKeys; track errorKey) {\r\n <mat-error>\r\n @if(validatorMessages()?.[errorKey]) {\r\n {{ validatorMessages()![errorKey] }}\r\n } @else if (!!validationTranslations?.[errorKey]) {\r\n {{ validationTranslations[errorKey] }}\r\n }\r\n </mat-error>\r\n }\r\n</mat-form-field>\r\n","/*\n * Public API Surface of ngx-widgets\n */\n\nexport * from './lib/core/base-value-accessor';\nexport * from './lib/core/base-input';\nexport * from './lib/core/base-text-input';\nexport * from './lib/core/base-mask-input';\nexport * from './lib/core/component-unsubscribe';\n\nexport * from './lib/basic-input/basic-input.component';\nexport * from './lib/select/select.component';\nexport * from './lib/textarea-input/textarea-input.component';\nexport * from './lib/basic-chips/basic-chips.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["takeUntil","i1","i2","i3","i4","i5"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { AfterViewInit, OnDestroy, ElementRef, ChangeDetectorRef, InjectionToken, OnInit, OnChanges, SimpleChanges, QueryList } from '@angular/core';
2
+ import { AfterViewInit, OnDestroy, ElementRef, ChangeDetectorRef, InjectionToken, OnInit, OnChanges, WritableSignal, SimpleChanges, QueryList } from '@angular/core';
3
3
  import { ControlValueAccessor, Validator, ValidationErrors, NgControl, FormControl, ValidatorFn, AbstractControl } from '@angular/forms';
4
4
  import { Observable, Subject } from 'rxjs';
5
5
  import { MatFormFieldAppearance, FloatLabelType, SubscriptSizing } from '@angular/material/form-field';
6
+ import { ThemePalette } from '@angular/material/core';
6
7
  import { NgxMaskDirective } from 'ngx-mask';
7
8
  import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
8
9
  import { MatChipInputEvent } from '@angular/material/chips';
@@ -37,12 +38,17 @@ interface NgxWidgetsValidationErrorTypes {
37
38
  selectGlobalPlaceholder?: string;
38
39
  }
39
40
  declare const NGX_WIDGETS_VALIDATION_TRANSLATIONS: InjectionToken<NgxWidgetsValidationErrorTypes>;
41
+ /**
42
+ * @deprecated
43
+ * This token is deprecated and will be removed in Angular v21. Use MAT_FORM_FIELD_DEFAULT_OPTIONS instead.
44
+ */
40
45
  declare const NGX_WIDGETS_FORM_FIELD_APPEARANCE: InjectionToken<MatFormFieldAppearance>;
41
46
  declare class BaseInput<T, ANNOUNCER_TYPE = object> extends BaseValueAccessor<T> implements OnInit, AfterViewInit, OnChanges {
42
47
  protected readonly validationTranslations: NgxWidgetsValidationErrorTypes | any;
43
- protected readonly formFieldAppearance: MatFormFieldAppearance;
44
48
  readonly appearance: _angular_core.InputSignal<MatFormFieldAppearance | undefined>;
45
- protected readonly _appearance: _angular_core.WritableSignal<MatFormFieldAppearance>;
49
+ protected readonly _appearance: WritableSignal<MatFormFieldAppearance>;
50
+ readonly color: _angular_core.InputSignal<ThemePalette>;
51
+ protected readonly _color: WritableSignal<ThemePalette>;
46
52
  id: string;
47
53
  name: string;
48
54
  label: string;
@@ -63,7 +69,9 @@ declare class BaseInput<T, ANNOUNCER_TYPE = object> extends BaseValueAccessor<T>
63
69
  readonly ariaPlaceholder: _angular_core.InputSignal<string>;
64
70
  readonly ariaDescribedBy: _angular_core.InputSignal<string>;
65
71
  readonly ariaDescription: _angular_core.InputSignal<string>;
72
+ protected controlErrorKeys: string[];
66
73
  private readonly liveAnnouncer;
74
+ private readonly matFormFieldConfig;
67
75
  readonly announcerTranslations: _angular_core.InputSignal<ANNOUNCER_TYPE | undefined>;
68
76
  validatorMessagesArray: {
69
77
  key: string;
@@ -72,13 +80,13 @@ declare class BaseInput<T, ANNOUNCER_TYPE = object> extends BaseValueAccessor<T>
72
80
  protected _defaultAnnouncerTranslations?: {
73
81
  [P in keyof ANNOUNCER_TYPE]-?: ANNOUNCER_TYPE[P];
74
82
  };
75
- constructor(validationTranslations: (NgxWidgetsValidationErrorTypes | any) | undefined, formFieldAppearance: MatFormFieldAppearance);
83
+ constructor(validationTranslations?: NgxWidgetsValidationErrorTypes | any);
76
84
  ngOnInit(): void;
77
85
  ngOnChanges(changes: SimpleChanges): void;
78
86
  ngAfterViewInit(): void;
79
87
  protected announce(key: keyof ANNOUNCER_TYPE | string): Promise<void>;
80
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseInput<any, any>, [{ optional: true; }, { optional: true; }]>;
81
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BaseInput<any, any>, never, never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; }; "name": { "alias": "name"; "required": false; }; "label": { "alias": "label"; "required": false; }; "translateParams": { "alias": "translateParams"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "suffix": { "alias": "suffix"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; "isSignal": true; }; "validatorMessages": { "alias": "validatorMessages"; "required": false; "isSignal": true; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; "isSignal": true; }; "hintLabel": { "alias": "hintLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaPlaceholder": { "alias": "aria-placeholder"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "ariaDescription": { "alias": "aria-description"; "required": false; "isSignal": true; }; "announcerTranslations": { "alias": "announcerTranslations"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
88
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseInput<any, any>, [{ optional: true; }]>;
89
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BaseInput<any, any>, never, never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; }; "name": { "alias": "name"; "required": false; }; "label": { "alias": "label"; "required": false; }; "translateParams": { "alias": "translateParams"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "suffix": { "alias": "suffix"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; "isSignal": true; }; "validatorMessages": { "alias": "validatorMessages"; "required": false; "isSignal": true; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; "isSignal": true; }; "hintLabel": { "alias": "hintLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaPlaceholder": { "alias": "aria-placeholder"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "ariaDescription": { "alias": "aria-description"; "required": false; "isSignal": true; }; "announcerTranslations": { "alias": "announcerTranslations"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
82
90
  }
83
91
 
84
92
  declare class BaseTextInput<T, ANNOUNCER_TYPE = object> extends BaseInput<T, ANNOUNCER_TYPE> {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gerandon/ngx-widgets",
3
- "version": "20.0.2",
3
+ "version": "20.1.1",
4
4
  "description": "Angular widget (components) collection using CVA (ControlValueAccessor)",
5
5
  "keywords": [
6
6
  "CVA",