@kms-ngx-ui/presentational 20.0.12 → 20.1.2

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.
@@ -1,66 +1,72 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Pipe, NgModule, EventEmitter, Output, Input, Directive, HostListener, PLATFORM_ID, DOCUMENT, Inject, Injectable, input, VERSION, forwardRef, inject, Injector, ViewChild, effect, HostBinding, output, computed, model, signal, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { Component, Pipe, NgModule, EventEmitter, Output, Input, Directive, HostListener, PLATFORM_ID, DOCUMENT, Inject, Injectable, input, VERSION, forwardRef, inject, Injector, ViewChild, computed, HostBinding, output, signal, effect, ChangeDetectionStrategy, model, ViewContainerRef, untracked, DestroyRef, ElementRef, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
- import { CommonModule, CurrencyPipe, isPlatformBrowser } from '@angular/common';
4
+ import { CommonModule, CurrencyPipe, isPlatformBrowser, NgClass, NgStyle } from '@angular/common';
5
5
  import * as i2 from '@angular/forms';
6
- import { NG_VALUE_ACCESSOR, NgControl, UntypedFormGroup, UntypedFormControl, NG_VALIDATORS, FormsModule, ReactiveFormsModule } from '@angular/forms';
6
+ import { NG_VALUE_ACCESSOR, NgControl, FormControl, UntypedFormGroup, UntypedFormControl, FormGroup, ReactiveFormsModule, NG_VALIDATORS, FormsModule } from '@angular/forms';
7
7
  import * as i1$2 from '@angular/material/checkbox';
8
8
  import { MatCheckboxModule } from '@angular/material/checkbox';
9
- import * as i1$6 from '@angular/material/radio';
9
+ import * as i1$5 from '@angular/material/radio';
10
10
  import { MatRadioModule } from '@angular/material/radio';
11
11
  import * as i3$1 from '@angular/material/slide-toggle';
12
12
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
13
13
  import * as i1$1 from '@angular/platform-browser';
14
- import * as i1$7 from '@angular-slider/ngx-slider';
14
+ import * as i1$6 from '@angular-slider/ngx-slider';
15
15
  import { NgxSliderModule } from '@angular-slider/ngx-slider';
16
16
  export { ChangeContext as KmsSliderChange, Options as KmsSliderOptions } from '@angular-slider/ngx-slider';
17
- import * as i1$9 from '@angular/cdk/drag-drop';
17
+ import * as i1$8 from '@angular/cdk/drag-drop';
18
18
  import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
19
- import * as i1$5 from '@angular/google-maps';
19
+ import * as i1$4 from '@angular/google-maps';
20
20
  import { GoogleMapsModule } from '@angular/google-maps';
21
- import * as i5 from '@angular/material/autocomplete';
21
+ import * as i5$1 from '@angular/material/autocomplete';
22
22
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
23
- import * as i2$1 from '@angular/material/button';
23
+ import * as i2$2 from '@angular/material/button';
24
24
  import { MatButtonModule } from '@angular/material/button';
25
- import * as i4$1 from '@angular/material/card';
25
+ import * as i4$2 from '@angular/material/card';
26
26
  import { MatCardModule } from '@angular/material/card';
27
- import * as i1$8 from '@angular/material/dialog';
27
+ import { MatNativeDateModule } from '@angular/material/core';
28
+ import * as i4 from '@angular/material/datepicker';
29
+ import { MatDatepickerModule } from '@angular/material/datepicker';
30
+ import * as i1$7 from '@angular/material/dialog';
28
31
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
29
- import * as i3$2 from '@angular/material/expansion';
32
+ import * as i3$3 from '@angular/material/expansion';
30
33
  import { MatExpansionModule } from '@angular/material/expansion';
31
- import * as i1$3 from '@angular/material/form-field';
34
+ import * as i2$1 from '@angular/material/form-field';
32
35
  import { MatFormFieldModule } from '@angular/material/form-field';
33
- import * as i2$2 from '@angular/material/input';
36
+ import * as i3$2 from '@angular/material/input';
34
37
  import { MatInputModule } from '@angular/material/input';
35
- import * as i3$3 from '@angular/material/list';
38
+ import * as i3$4 from '@angular/material/list';
36
39
  import { MatListModule } from '@angular/material/list';
37
40
  import * as i2$3 from '@angular/material/menu';
38
41
  import { MatMenuModule } from '@angular/material/menu';
39
- import * as i1$4 from '@angular/material/progress-spinner';
42
+ import * as i1$3 from '@angular/material/progress-spinner';
40
43
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
41
44
  import * as i3 from '@angular/material/select';
42
45
  import { MatSelectModule } from '@angular/material/select';
46
+ import * as i5 from 'ngx-mat-select-search';
47
+ import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
43
48
  import { MatTooltipModule } from '@angular/material/tooltip';
44
- import * as i4 from '@ngx-translate/core';
49
+ import * as i4$1 from '@ngx-translate/core';
45
50
  import { TranslateModule } from '@ngx-translate/core';
46
51
  import { autoUpdate, computePosition, shift, offset, arrow, flip } from '@floating-ui/dom';
47
- import { Subject } from 'rxjs';
52
+ import { Subject, takeUntil as takeUntil$1, isObservable, merge } from 'rxjs';
48
53
  import { trigger, state, style } from '@angular/animations';
49
54
  import { register } from 'swiper/element/bundle';
50
55
  import { isEmpty } from 'lodash';
51
56
  import moment from 'moment';
57
+ import { takeUntil } from 'rxjs/operators';
52
58
 
53
59
  class KmsUiPresentationalComponent {
54
60
  constructor() { }
55
61
  ngOnInit() { }
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
57
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: KmsUiPresentationalComponent, isStandalone: false, selector: "lib-kms-ngx-ui-presentational", ngImport: i0, template: `
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
63
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: KmsUiPresentationalComponent, isStandalone: false, selector: "lib-kms-ngx-ui-presentational", ngImport: i0, template: `
58
64
  <p>
59
65
  kms-ngx-ui-presentational works!
60
66
  </p>
61
67
  `, isInline: true }); }
62
68
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalComponent, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalComponent, decorators: [{
64
70
  type: Component,
65
71
  args: [{ standalone: false, selector: 'lib-kms-ngx-ui-presentational', template: `
66
72
  <p>
@@ -86,10 +92,10 @@ class IntegerCurrency {
86
92
  throw new Error('No value provided');
87
93
  }
88
94
  }
89
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: IntegerCurrency, deps: [{ token: i1.CurrencyPipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
90
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: IntegerCurrency, isStandalone: false, name: "kmsIntegerCurrency" }); }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IntegerCurrency, deps: [{ token: i1.CurrencyPipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
96
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: IntegerCurrency, isStandalone: false, name: "kmsIntegerCurrency" }); }
91
97
  }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: IntegerCurrency, decorators: [{
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IntegerCurrency, decorators: [{
93
99
  type: Pipe,
94
100
  args: [{
95
101
  name: 'kmsIntegerCurrency',
@@ -107,10 +113,10 @@ class SafeHtmlPipe {
107
113
  transform(html) {
108
114
  return this.sanitizer.bypassSecurityTrustHtml(html);
109
115
  }
110
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
111
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: SafeHtmlPipe, isStandalone: false, name: "kmsSafeHtml" }); }
116
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
117
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, isStandalone: false, name: "kmsSafeHtml" }); }
112
118
  }
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SafeHtmlPipe, decorators: [{
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, decorators: [{
114
120
  type: Pipe,
115
121
  args: [{
116
122
  name: 'kmsSafeHtml',
@@ -128,10 +134,10 @@ class SafeResourceUrlPipe {
128
134
  transform(url) {
129
135
  return this.sanitizer.bypassSecurityTrustResourceUrl(url);
130
136
  }
131
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SafeResourceUrlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
132
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: SafeResourceUrlPipe, isStandalone: false, name: "kmsSafeResourceSUrl" }); }
137
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeResourceUrlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
138
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SafeResourceUrlPipe, isStandalone: false, name: "kmsSafeResourceSUrl" }); }
133
139
  }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SafeResourceUrlPipe, decorators: [{
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeResourceUrlPipe, decorators: [{
135
141
  type: Pipe,
136
142
  args: [{
137
143
  name: 'kmsSafeResourceSUrl',
@@ -149,10 +155,10 @@ class SafeUrlPipe {
149
155
  transform(url) {
150
156
  return this.sanitizer.bypassSecurityTrustUrl(url);
151
157
  }
152
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
153
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: SafeUrlPipe, isStandalone: false, name: "kmsSafeSUrl" }); }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
159
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SafeUrlPipe, isStandalone: false, name: "kmsSafeSUrl" }); }
154
160
  }
155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SafeUrlPipe, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeUrlPipe, decorators: [{
156
162
  type: Pipe,
157
163
  args: [{
158
164
  name: 'kmsSafeSUrl',
@@ -164,10 +170,10 @@ class SanitizeNullPipe {
164
170
  transform(value) {
165
171
  return value === 'null' || value == null ? '' : value;
166
172
  }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SanitizeNullPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
168
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: SanitizeNullPipe, isStandalone: false, name: "sanitizeNull" }); }
173
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SanitizeNullPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
174
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SanitizeNullPipe, isStandalone: false, name: "sanitizeNull" }); }
169
175
  }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SanitizeNullPipe, decorators: [{
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SanitizeNullPipe, decorators: [{
171
177
  type: Pipe,
172
178
  args: [{ name: 'sanitizeNull', standalone: false }]
173
179
  }] });
@@ -182,10 +188,10 @@ class TrimPipe {
182
188
  }
183
189
  return value.trim();
184
190
  }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TrimPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
186
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: TrimPipe, isStandalone: false, name: "kmsTrim" }); }
191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TrimPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
192
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: TrimPipe, isStandalone: false, name: "kmsTrim" }); }
187
193
  }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TrimPipe, decorators: [{
194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TrimPipe, decorators: [{
189
195
  type: Pipe,
190
196
  args: [{ name: 'kmsTrim', standalone: false }]
191
197
  }] });
@@ -194,10 +200,10 @@ class TypeofPipe {
194
200
  transform(value) {
195
201
  return typeof value;
196
202
  }
197
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TypeofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
198
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: TypeofPipe, isStandalone: false, name: "kmsTypeOf" }); }
203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TypeofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
204
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: TypeofPipe, isStandalone: false, name: "kmsTypeOf" }); }
199
205
  }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TypeofPipe, decorators: [{
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TypeofPipe, decorators: [{
201
207
  type: Pipe,
202
208
  args: [{
203
209
  name: 'kmsTypeOf',
@@ -209,8 +215,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
209
215
  * @copyright KMS GmbH
210
216
  */
211
217
  class CustomPipesModule {
212
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CustomPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
213
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: CustomPipesModule, declarations: [IntegerCurrency,
218
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
219
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: CustomPipesModule, declarations: [IntegerCurrency,
214
220
  SafeHtmlPipe,
215
221
  SanitizeNullPipe,
216
222
  SafeUrlPipe,
@@ -223,9 +229,9 @@ class CustomPipesModule {
223
229
  TrimPipe,
224
230
  SafeResourceUrlPipe,
225
231
  TypeofPipe] }); }
226
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CustomPipesModule, providers: [CurrencyPipe], imports: [CommonModule] }); }
232
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomPipesModule, providers: [CurrencyPipe], imports: [CommonModule] }); }
227
233
  }
228
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CustomPipesModule, decorators: [{
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomPipesModule, decorators: [{
229
235
  type: NgModule,
230
236
  args: [{
231
237
  declarations: [
@@ -306,10 +312,10 @@ class GetMaxHeightDirective {
306
312
  this.maxHeightChanged.emit(maxHeight);
307
313
  this.sumOfHeight.emit(sumOfHeight);
308
314
  }
309
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GetMaxHeightDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
310
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: GetMaxHeightDirective, isStandalone: false, selector: "[getMaxHeight]", inputs: { cssClassName: ["getMaxHeight", "cssClassName"] }, outputs: { maxHeightChanged: "maxHeightChanged", sumOfHeight: "sumOfHeight" }, ngImport: i0 }); }
315
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetMaxHeightDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
316
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: GetMaxHeightDirective, isStandalone: false, selector: "[getMaxHeight]", inputs: { cssClassName: ["getMaxHeight", "cssClassName"] }, outputs: { maxHeightChanged: "maxHeightChanged", sumOfHeight: "sumOfHeight" }, ngImport: i0 }); }
311
317
  }
312
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GetMaxHeightDirective, decorators: [{
318
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetMaxHeightDirective, decorators: [{
313
319
  type: Directive,
314
320
  args: [{
315
321
  selector: '[getMaxHeight]',
@@ -478,10 +484,10 @@ class SwipeDirective {
478
484
  this._moveEventData = undefined;
479
485
  }
480
486
  }
481
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
482
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: SwipeDirective, isStandalone: false, selector: "[swipeDirective]", inputs: { config: ["swipeDirective", "config"] }, outputs: { moveEvent: "moveEvent", releaseEvent: "releaseEvent" }, host: { listeners: { "mousedown": "onMouseDown($event)", "touchstart": "onMouseDown($event)", "mousemove": "onMove($event)", "touchmove": "onMove($event)", "mouseup": "onRelease($event)", "mouseleave": "onRelease($event)", "touchend": "onRelease($event)" } }, ngImport: i0 }); }
487
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
488
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: SwipeDirective, isStandalone: false, selector: "[swipeDirective]", inputs: { config: ["swipeDirective", "config"] }, outputs: { moveEvent: "moveEvent", releaseEvent: "releaseEvent" }, host: { listeners: { "mousedown": "onMouseDown($event)", "touchstart": "onMouseDown($event)", "mousemove": "onMove($event)", "touchmove": "onMove($event)", "mouseup": "onRelease($event)", "mouseleave": "onRelease($event)", "touchend": "onRelease($event)" } }, ngImport: i0 }); }
483
489
  }
484
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SwipeDirective, decorators: [{
490
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SwipeDirective, decorators: [{
485
491
  type: Directive,
486
492
  args: [{
487
493
  selector: '[swipeDirective]',
@@ -545,10 +551,10 @@ class TimeDirective {
545
551
  inputElement.dispatchEvent(new Event('input'));
546
552
  }
547
553
  }
548
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TimeDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
549
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: TimeDirective, isStandalone: false, selector: "[kmsTime]", host: { listeners: { "input": "onInputChange($event)", "beforeinput": "onBeforeInput($event)" } }, ngImport: i0 }); }
554
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TimeDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
555
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: TimeDirective, isStandalone: false, selector: "[kmsTime]", host: { listeners: { "input": "onInputChange($event)", "beforeinput": "onBeforeInput($event)" } }, ngImport: i0 }); }
550
556
  }
551
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TimeDirective, decorators: [{
557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TimeDirective, decorators: [{
552
558
  type: Directive,
553
559
  args: [{
554
560
  selector: '[kmsTime]',
@@ -655,10 +661,10 @@ class TooltipDirective {
655
661
  this.renderer.removeClass(this.arrow, 'kms-tooltip__arrow--top');
656
662
  this.renderer.addClass(this.arrow, 'kms-tooltip__arrow--' + side);
657
663
  }
658
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
659
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: TooltipDirective, isStandalone: false, selector: "[kmsTooltip]", inputs: { kmsTooltip: "kmsTooltip", placement: "placement", delay: "delay", alwaysVisible: "alwaysVisible" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseout": "onMouseOut()" } }, usesOnChanges: true, ngImport: i0 }); }
664
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
665
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: TooltipDirective, isStandalone: false, selector: "[kmsTooltip]", inputs: { kmsTooltip: "kmsTooltip", placement: "placement", delay: "delay", alwaysVisible: "alwaysVisible" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseout": "onMouseOut()" } }, usesOnChanges: true, ngImport: i0 }); }
660
666
  }
661
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TooltipDirective, decorators: [{
667
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipDirective, decorators: [{
662
668
  type: Directive,
663
669
  args: [{ selector: '[kmsTooltip]', standalone: false }]
664
670
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { kmsTooltip: [{
@@ -681,17 +687,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
681
687
  * @copyright KMS GmbH
682
688
  */
683
689
  class DirectivesModule {
684
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
685
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: DirectivesModule, declarations: [SwipeDirective,
690
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
691
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: DirectivesModule, declarations: [SwipeDirective,
686
692
  GetMaxHeightDirective,
687
693
  TooltipDirective,
688
694
  TimeDirective], exports: [SwipeDirective,
689
695
  GetMaxHeightDirective,
690
696
  TooltipDirective,
691
697
  TimeDirective] }); }
692
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DirectivesModule }); }
698
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DirectivesModule }); }
693
699
  }
694
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DirectivesModule, decorators: [{
700
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DirectivesModule, decorators: [{
695
701
  type: NgModule,
696
702
  args: [{
697
703
  declarations: [
@@ -1047,10 +1053,10 @@ class ViewportService {
1047
1053
  window.removeEventListener('resize', this.documentSizeChanged);
1048
1054
  }
1049
1055
  }
1050
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ViewportService, deps: [{ token: PLATFORM_ID }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
1051
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ViewportService }); }
1056
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ViewportService, deps: [{ token: PLATFORM_ID }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
1057
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ViewportService }); }
1052
1058
  }
1053
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ViewportService, decorators: [{
1059
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ViewportService, decorators: [{
1054
1060
  type: Injectable
1055
1061
  }], ctorParameters: () => [{ type: Object, decorators: [{
1056
1062
  type: Inject,
@@ -1122,12 +1128,12 @@ class IconComponent {
1122
1128
  this.color = input(Color.BLACK, ...(ngDevMode ? [{ debugName: "color" }] : []));
1123
1129
  this.Version = VERSION.full;
1124
1130
  }
1125
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: IconComponent, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
1126
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: IconComponent, isStandalone: false, selector: "kms-icon", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconClass: { classPropertyName: "iconClass", publicName: "iconClass", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, dontUseSprite: { classPropertyName: "dontUseSprite", publicName: "dontUseSprite", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (icon() !== 'none' && dontUseSprite() === false) {\n <span\n class=\"icon\"\n [ngClass]=\"iconClass()\"\n [ngStyle]=\"{\n color: 'var(' + color() + ')'\n }\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <svg [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <use\n [attr.xlink:href]=\"\n 'assets/sprite.svg?Version=' + Version + '#' + icon()\n \"\n ></use>\n </svg>\n </span>\n}\n@if (icon() !== 'none' && dontUseSprite() === true) {\n <object\n [data]=\"\n sanitizer.bypassSecurityTrustResourceUrl('assets/icons/' + icon() + '')\n \"\n type=\"image/svg+xml\"\n class=\"icon\"\n [ngClass]=\"iconClass()\"\n ></object>\n}\n", styles: [":root{--kms-primary: #162f43;--kms-primary-50: #0f2334;--kms-primary-100: #162f43;--kms-primary-200: #26415e;--kms-primary-300: #375e79;--kms-primary-400: #4b7a94;--kms-primary-500: #5f97af;--kms-primary-600: #7cb3ca;--kms-primary-700: #9acfe5;--kms-primary-800: #b8ebff;--kms-primary-900: #d6f7ff;--kms-secondary: #48acd1;--kms-tertiary: #43403e;--kms-tertiary-50: #1e1d1c;--kms-tertiary-100: #43403e;--kms-tertiary-200: #54524f;--kms-tertiary-300: #6c6a67;--kms-tertiary-400: #97938f;--kms-tertiary-500: #c2beb9;--kms-tertiary-600: #e3e1df;--kms-tertiary-700: #eeedec;--kms-tertiary-800: #f4f3f2;--kms-tertiary-900: #ffffff;--kms-success: #39b948;--kms-alert: #e5c936;--kms-error: #c3293b;--kms-disabled: #a6a6a6;--kms-background: #fafafa;--kms-white: #ffffff;--kms-black: #000000;--kms-border-grey: #101423;--kms-green: #008000;--kms-light-green: #00c800;--kms-font-green: #27ae60}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IconComponent, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
1132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IconComponent, isStandalone: true, selector: "kms-icon", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconClass: { classPropertyName: "iconClass", publicName: "iconClass", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, dontUseSprite: { classPropertyName: "dontUseSprite", publicName: "dontUseSprite", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (icon() !== 'none' && dontUseSprite() === false) {\n <span\n class=\"icon\"\n [ngClass]=\"iconClass()\"\n [ngStyle]=\"{\n color: 'var(' + color() + ')'\n }\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <svg [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <use\n [attr.xlink:href]=\"\n 'assets/sprite.svg?Version=' + Version + '#' + icon()\n \"\n ></use>\n </svg>\n </span>\n}\n@if (icon() !== 'none' && dontUseSprite() === true) {\n <object\n [data]=\"\n sanitizer.bypassSecurityTrustResourceUrl('assets/icons/' + icon() + '')\n \"\n type=\"image/svg+xml\"\n class=\"icon\"\n [ngClass]=\"iconClass()\"\n ></object>\n}\n", styles: [":root{--kms-primary: #162f43;--kms-primary-50: #0f2334;--kms-primary-100: #162f43;--kms-primary-200: #26415e;--kms-primary-300: #375e79;--kms-primary-400: #4b7a94;--kms-primary-500: #5f97af;--kms-primary-600: #7cb3ca;--kms-primary-700: #9acfe5;--kms-primary-800: #b8ebff;--kms-primary-900: #d6f7ff;--kms-secondary: #48acd1;--kms-tertiary: #43403e;--kms-tertiary-50: #1e1d1c;--kms-tertiary-100: #43403e;--kms-tertiary-200: #54524f;--kms-tertiary-300: #6c6a67;--kms-tertiary-400: #97938f;--kms-tertiary-500: #c2beb9;--kms-tertiary-600: #e3e1df;--kms-tertiary-700: #eeedec;--kms-tertiary-800: #f4f3f2;--kms-tertiary-900: #ffffff;--kms-success: #39b948;--kms-alert: #e5c936;--kms-error: #c3293b;--kms-disabled: #a6a6a6;--kms-background: #fafafa;--kms-white: #ffffff;--kms-black: #000000;--kms-border-grey: #101423;--kms-green: #008000;--kms-light-green: #00c800;--kms-font-green: #27ae60}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1127
1133
  }
1128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: IconComponent, decorators: [{
1134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IconComponent, decorators: [{
1129
1135
  type: Component,
1130
- args: [{ selector: 'kms-icon', standalone: false, template: "@if (icon() !== 'none' && dontUseSprite() === false) {\n <span\n class=\"icon\"\n [ngClass]=\"iconClass()\"\n [ngStyle]=\"{\n color: 'var(' + color() + ')'\n }\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <svg [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <use\n [attr.xlink:href]=\"\n 'assets/sprite.svg?Version=' + Version + '#' + icon()\n \"\n ></use>\n </svg>\n </span>\n}\n@if (icon() !== 'none' && dontUseSprite() === true) {\n <object\n [data]=\"\n sanitizer.bypassSecurityTrustResourceUrl('assets/icons/' + icon() + '')\n \"\n type=\"image/svg+xml\"\n class=\"icon\"\n [ngClass]=\"iconClass()\"\n ></object>\n}\n", styles: [":root{--kms-primary: #162f43;--kms-primary-50: #0f2334;--kms-primary-100: #162f43;--kms-primary-200: #26415e;--kms-primary-300: #375e79;--kms-primary-400: #4b7a94;--kms-primary-500: #5f97af;--kms-primary-600: #7cb3ca;--kms-primary-700: #9acfe5;--kms-primary-800: #b8ebff;--kms-primary-900: #d6f7ff;--kms-secondary: #48acd1;--kms-tertiary: #43403e;--kms-tertiary-50: #1e1d1c;--kms-tertiary-100: #43403e;--kms-tertiary-200: #54524f;--kms-tertiary-300: #6c6a67;--kms-tertiary-400: #97938f;--kms-tertiary-500: #c2beb9;--kms-tertiary-600: #e3e1df;--kms-tertiary-700: #eeedec;--kms-tertiary-800: #f4f3f2;--kms-tertiary-900: #ffffff;--kms-success: #39b948;--kms-alert: #e5c936;--kms-error: #c3293b;--kms-disabled: #a6a6a6;--kms-background: #fafafa;--kms-white: #ffffff;--kms-black: #000000;--kms-border-grey: #101423;--kms-green: #008000;--kms-light-green: #00c800;--kms-font-green: #27ae60}\n"] }]
1136
+ args: [{ selector: 'kms-icon', standalone: true, imports: [NgClass, NgStyle], template: "@if (icon() !== 'none' && dontUseSprite() === false) {\n <span\n class=\"icon\"\n [ngClass]=\"iconClass()\"\n [ngStyle]=\"{\n color: 'var(' + color() + ')'\n }\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <svg [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <use\n [attr.xlink:href]=\"\n 'assets/sprite.svg?Version=' + Version + '#' + icon()\n \"\n ></use>\n </svg>\n </span>\n}\n@if (icon() !== 'none' && dontUseSprite() === true) {\n <object\n [data]=\"\n sanitizer.bypassSecurityTrustResourceUrl('assets/icons/' + icon() + '')\n \"\n type=\"image/svg+xml\"\n class=\"icon\"\n [ngClass]=\"iconClass()\"\n ></object>\n}\n", styles: [":root{--kms-primary: #162f43;--kms-primary-50: #0f2334;--kms-primary-100: #162f43;--kms-primary-200: #26415e;--kms-primary-300: #375e79;--kms-primary-400: #4b7a94;--kms-primary-500: #5f97af;--kms-primary-600: #7cb3ca;--kms-primary-700: #9acfe5;--kms-primary-800: #b8ebff;--kms-primary-900: #d6f7ff;--kms-secondary: #48acd1;--kms-tertiary: #43403e;--kms-tertiary-50: #1e1d1c;--kms-tertiary-100: #43403e;--kms-tertiary-200: #54524f;--kms-tertiary-300: #6c6a67;--kms-tertiary-400: #97938f;--kms-tertiary-500: #c2beb9;--kms-tertiary-600: #e3e1df;--kms-tertiary-700: #eeedec;--kms-tertiary-800: #f4f3f2;--kms-tertiary-900: #ffffff;--kms-success: #39b948;--kms-alert: #e5c936;--kms-error: #c3293b;--kms-disabled: #a6a6a6;--kms-background: #fafafa;--kms-white: #ffffff;--kms-black: #000000;--kms-border-grey: #101423;--kms-green: #008000;--kms-light-green: #00c800;--kms-font-green: #27ae60}\n"] }]
1131
1137
  }], ctorParameters: () => [{ type: i1$1.DomSanitizer }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconClass", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], dontUseSprite: [{ type: i0.Input, args: [{ isSignal: true, alias: "dontUseSprite", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }] } });
1132
1138
 
1133
1139
  /**
@@ -1158,10 +1164,10 @@ class BackToTopComponent {
1158
1164
  window.scrollTo({ top: 0, behavior: 'smooth' });
1159
1165
  }
1160
1166
  }
1161
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BackToTopComponent, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
1162
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: BackToTopComponent, isStandalone: false, selector: "kms-back-to-top", host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<div\n class=\"scrollToTop\"\n [ngClass]=\"{ show: windowScrolled }\"\n (click)=\"scrollToTop()\"\n>\n <div class=\"scrollToTop-inner\">\n <kms-icon\n icon=\"floating_button_clear\"\n [color]=\"Color.WHITE\"\n [size]=\"IconSizePx.SM\"\n ></kms-icon>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
1167
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BackToTopComponent, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
1168
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: BackToTopComponent, isStandalone: false, selector: "kms-back-to-top", host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<div\n class=\"scrollToTop\"\n [ngClass]=\"{ show: windowScrolled }\"\n (click)=\"scrollToTop()\"\n>\n <div class=\"scrollToTop-inner\">\n <kms-icon\n icon=\"floating_button_clear\"\n [color]=\"Color.WHITE\"\n [size]=\"IconSizePx.SM\"\n ></kms-icon>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
1163
1169
  }
1164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BackToTopComponent, decorators: [{
1170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BackToTopComponent, decorators: [{
1165
1171
  type: Component,
1166
1172
  args: [{ selector: 'kms-back-to-top', standalone: false, template: "<div\n class=\"scrollToTop\"\n [ngClass]=\"{ show: windowScrolled }\"\n (click)=\"scrollToTop()\"\n>\n <div class=\"scrollToTop-inner\">\n <kms-icon\n icon=\"floating_button_clear\"\n [color]=\"Color.WHITE\"\n [size]=\"IconSizePx.SM\"\n ></kms-icon>\n </div>\n</div>\n" }]
1167
1173
  }], ctorParameters: () => [{ type: Object, decorators: [{
@@ -1177,10 +1183,10 @@ class CardComponent {
1177
1183
  this.imageUrl = input('', ...(ngDevMode ? [{ debugName: "imageUrl" }] : []));
1178
1184
  this.hoverEffect = input(false, ...(ngDevMode ? [{ debugName: "hoverEffect" }] : []));
1179
1185
  }
1180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1181
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CardComponent, isStandalone: false, selector: "kms-card", inputs: { imageUrl: { classPropertyName: "imageUrl", publicName: "imageUrl", isSignal: true, isRequired: false, transformFunction: null }, hoverEffect: { classPropertyName: "hoverEffect", publicName: "hoverEffect", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"card\" [ngClass]=\"{ hoverEffect: hoverEffect() }\">\n @if(imageUrl() !== '') {\n <div\n class=\"card-image\"\n [ngStyle]=\"{ 'background-image': 'url(' + imageUrl() + ')' }\"\n ></div>\n }\n <div class=\"card-content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: CardComponent, isStandalone: false, selector: "kms-card", inputs: { imageUrl: { classPropertyName: "imageUrl", publicName: "imageUrl", isSignal: true, isRequired: false, transformFunction: null }, hoverEffect: { classPropertyName: "hoverEffect", publicName: "hoverEffect", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"card\" [ngClass]=\"{ hoverEffect: hoverEffect() }\">\n @if(imageUrl() !== '') {\n <div\n class=\"card-image\"\n [ngStyle]=\"{ 'background-image': 'url(' + imageUrl() + ')' }\"\n ></div>\n }\n <div class=\"card-content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1182
1188
  }
1183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CardComponent, decorators: [{
1189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CardComponent, decorators: [{
1184
1190
  type: Component,
1185
1191
  args: [{ selector: 'kms-card', standalone: false, template: "<div class=\"card\" [ngClass]=\"{ hoverEffect: hoverEffect() }\">\n @if(imageUrl() !== '') {\n <div\n class=\"card-image\"\n [ngStyle]=\"{ 'background-image': 'url(' + imageUrl() + ')' }\"\n ></div>\n }\n <div class=\"card-content\">\n <ng-content></ng-content>\n </div>\n</div>\n" }]
1186
1192
  }], propDecorators: { imageUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageUrl", required: false }] }], hoverEffect: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverEffect", required: false }] }] } });
@@ -1217,16 +1223,16 @@ class CheckboxComponent {
1217
1223
  registerOnTouched(fn) {
1218
1224
  this.onTouched = fn;
1219
1225
  }
1220
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1221
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CheckboxComponent, isStandalone: false, selector: "kms-checkbox", inputs: { infoText: "infoText", checked: "checked", disabled: "disabled", name: "name" }, outputs: { change: "change" }, providers: [
1226
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1227
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: CheckboxComponent, isStandalone: false, selector: "kms-checkbox", inputs: { infoText: "infoText", checked: "checked", disabled: "disabled", name: "name" }, outputs: { change: "change" }, providers: [
1222
1228
  {
1223
1229
  provide: NG_VALUE_ACCESSOR,
1224
1230
  useExisting: forwardRef(() => CheckboxComponent),
1225
1231
  multi: true,
1226
1232
  },
1227
- ], ngImport: i0, template: "<div class=\"checkbox-container\" [class.disabled]=\"disabled\">\n <mat-checkbox\n [disabled]=\"disabled\"\n [name]=\"name\"\n [(ngModel)]=\"checked\"\n (change)=\"valueChanged($event.checked)\"\n color=\"primary\"\n >\n {{ infoText }}\n </mat-checkbox>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
1233
+ ], ngImport: i0, template: "<div class=\"checkbox-container\" [class.disabled]=\"disabled\">\n <mat-checkbox\n [disabled]=\"disabled\"\n [name]=\"name\"\n [(ngModel)]=\"checked\"\n (change)=\"valueChanged($event.checked)\"\n color=\"primary\"\n >\n <span [innerHTML]=\"infoText | kmsSafeHtml\"></span>\n </mat-checkbox>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SafeHtmlPipe, name: "kmsSafeHtml" }] }); }
1228
1234
  }
1229
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CheckboxComponent, decorators: [{
1235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CheckboxComponent, decorators: [{
1230
1236
  type: Component,
1231
1237
  args: [{ selector: 'kms-checkbox', providers: [
1232
1238
  {
@@ -1234,7 +1240,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1234
1240
  useExisting: forwardRef(() => CheckboxComponent),
1235
1241
  multi: true,
1236
1242
  },
1237
- ], standalone: false, template: "<div class=\"checkbox-container\" [class.disabled]=\"disabled\">\n <mat-checkbox\n [disabled]=\"disabled\"\n [name]=\"name\"\n [(ngModel)]=\"checked\"\n (change)=\"valueChanged($event.checked)\"\n color=\"primary\"\n >\n {{ infoText }}\n </mat-checkbox>\n</div>\n" }]
1243
+ ], standalone: false, template: "<div class=\"checkbox-container\" [class.disabled]=\"disabled\">\n <mat-checkbox\n [disabled]=\"disabled\"\n [name]=\"name\"\n [(ngModel)]=\"checked\"\n (change)=\"valueChanged($event.checked)\"\n color=\"primary\"\n >\n <span [innerHTML]=\"infoText | kmsSafeHtml\"></span>\n </mat-checkbox>\n</div>\n" }]
1238
1244
  }], propDecorators: { infoText: [{
1239
1245
  type: Input
1240
1246
  }], checked: [{
@@ -1253,69 +1259,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1253
1259
  class FormParentComponent {
1254
1260
  constructor() {
1255
1261
  this.formInitialized = false;
1256
- this.allowedCharsOnlyNumbers = new Set('0123456789'.split('').map((c) => c.charCodeAt(0)));
1257
1262
  this.formDataChanged = new EventEmitter();
1258
1263
  this.disabled = false;
1259
1264
  }
1260
- // TODO make a service or make own compoennt etc.
1261
- /**
1262
- * Returns if a number was pressed
1263
- * @param e
1264
- * @returns
1265
- */
1266
- checkIfKeyWasNumber(e, allowDelete = true, allowArrows = true, allowCutCopyPaste = true) {
1267
- // returns if keycode of numbers-row or numberpad. Or if parameter set, allow delete/backspace key
1268
- const isNumberRow = e.keyCode >= 48 && e.keyCode <= 57;
1269
- const isNumberPad = e.keyCode >= 96 && e.keyCode <= 105;
1270
- const isArrows = e.keyCode >= 37 && e.keyCode <= 40;
1271
- const isDelete = e.keyCode == 8 || e.keyCode == 46;
1272
- const isCutCopyOrPaste = (e.ctrlKey || e.metaKey) &&
1273
- (e.keyCode == 86 || e.keyCode == 88 || e.keyCode == 67);
1274
- return (isNumberRow ||
1275
- isNumberPad ||
1276
- (allowDelete && isDelete) ||
1277
- (allowArrows && isArrows) ||
1278
- (allowCutCopyPaste && isCutCopyOrPaste));
1279
- }
1280
- // TODO make a service or make own compoennt etc.
1281
- /**
1282
- * Prevents to input other chars than numbers in input
1283
- * @param event
1284
- */
1285
- removeNumbersOnType(event) {
1286
- // only allow keydown from numbers-row or numberpad of keybard and block other chars than numbers
1287
- if (!this.checkIfKeyWasNumber(event) &&
1288
- !this.allowedCharsOnlyNumbers.has(event.keyCode)) {
1289
- event.preventDefault();
1290
- }
1291
- }
1292
- // TODO make a service or make own compoennt etc.
1293
- /**
1294
- * Prevents input when pasting which is not number
1295
- * @param event
1296
- */
1297
- removeNumbersOnPaste(event) {
1298
- const clipboardData = event.clipboardData;
1299
- if (clipboardData) {
1300
- const pastedText = clipboardData.getData('text');
1301
- if (pastedText) {
1302
- const isnum = /^\d+$/.test(pastedText);
1303
- if (!isnum) {
1304
- event.preventDefault();
1305
- }
1306
- }
1307
- }
1308
- }
1309
1265
  ngOnInit() {
1310
1266
  this.formDataChanged.emit(this.form);
1311
1267
  this.form.valueChanges.subscribe(() => {
1312
1268
  this.formDataChanged.emit(this.form);
1313
1269
  });
1314
1270
  }
1315
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormParentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1316
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: FormParentComponent, isStandalone: false, selector: "kms-form", inputs: { disabled: "disabled" }, outputs: { formDataChanged: "formDataChanged" }, ngImport: i0, template: '', isInline: true }); }
1271
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormParentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1272
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: FormParentComponent, isStandalone: false, selector: "kms-form", inputs: { disabled: "disabled" }, outputs: { formDataChanged: "formDataChanged" }, ngImport: i0, template: '', isInline: true }); }
1317
1273
  }
1318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormParentComponent, decorators: [{
1274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormParentComponent, decorators: [{
1319
1275
  type: Component,
1320
1276
  args: [{
1321
1277
  standalone: false,
@@ -1391,19 +1347,19 @@ class FormControlParentComponent extends FormParentComponent {
1391
1347
  }
1392
1348
  this.disabled = isDisabled;
1393
1349
  if (isDisabled) {
1394
- this.form.disable();
1350
+ this.form.disable({ emitEvent: false });
1395
1351
  }
1396
1352
  else {
1397
- this.form.enable();
1353
+ this.form.enable({ emitEvent: false });
1398
1354
  }
1399
1355
  }
1400
1356
  validate(_) {
1401
1357
  return this.form.valid ? null : false;
1402
1358
  }
1403
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormControlParentComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
1404
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: FormControlParentComponent, isStandalone: false, selector: "kms-formControlParent", inputs: { defaultDataOverride: "defaultDataOverride" }, outputs: { onSelectItemEmitter: "onSelectItemEmitter" }, viewQueries: [{ propertyName: "child", first: true, predicate: ["child"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
1359
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormControlParentComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
1360
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: FormControlParentComponent, isStandalone: false, selector: "kms-formControlParent", inputs: { defaultDataOverride: "defaultDataOverride" }, outputs: { onSelectItemEmitter: "onSelectItemEmitter" }, viewQueries: [{ propertyName: "child", first: true, predicate: ["child"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
1405
1361
  }
1406
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FormControlParentComponent, decorators: [{
1362
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormControlParentComponent, decorators: [{
1407
1363
  type: Component,
1408
1364
  args: [{
1409
1365
  standalone: false,
@@ -1423,6 +1379,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1423
1379
  * Dropdown from data component {@link https://leaseplan-dev.rentoffice.de/styleguide#ui-elements}
1424
1380
  */
1425
1381
  class DropdownFromDataComponent extends FormControlParentComponent {
1382
+ resolveBaseKeysAndValues() {
1383
+ const plainArray = this.optionsPlainArray();
1384
+ if (plainArray)
1385
+ return { keys: [...plainArray], values: [...plainArray] };
1386
+ const optionsObjArrayValue = this.optionsObjArray();
1387
+ const mapKeyValue = this.mapKey();
1388
+ const mapValueValue = this.mapValue();
1389
+ if (optionsObjArrayValue && mapKeyValue && mapValueValue) {
1390
+ return {
1391
+ keys: optionsObjArrayValue.map((obj) => obj[`${mapKeyValue}`]),
1392
+ values: optionsObjArrayValue.map((obj) => obj[`${mapValueValue}`]),
1393
+ };
1394
+ }
1395
+ if (optionsObjArrayValue && mapKeyValue) {
1396
+ const mapped = optionsObjArrayValue.map((obj) => obj[`${mapKeyValue}`]);
1397
+ return { keys: mapped, values: mapped };
1398
+ }
1399
+ return { keys: [], values: [] };
1400
+ }
1401
+ applyEnumOverrides(keys, values) {
1402
+ const optionsEnumValue = this.optionsEnum();
1403
+ if (!optionsEnumValue)
1404
+ return { keys, values };
1405
+ const enumObj = optionsEnumValue;
1406
+ const enumKeys = Object.keys(enumObj).filter((k) => Number.isNaN(Number(k)));
1407
+ const plainArray = this.optionsPlainArray();
1408
+ if (plainArray)
1409
+ return { keys: enumKeys, values: plainArray };
1410
+ const enumValues = enumKeys.map((k) => enumObj[k]);
1411
+ const isKeyValueEnum = enumKeys.some((_, i) => i !== enumValues[i]);
1412
+ return {
1413
+ keys: enumKeys,
1414
+ values: isKeyValueEnum || this.useEnumIndexAsValue() ? enumValues : [...enumKeys],
1415
+ };
1416
+ }
1417
+ get keys() {
1418
+ return this._keysAndValues().keys;
1419
+ }
1420
+ get values() {
1421
+ return this._keysAndValues().values;
1422
+ }
1423
+ get filteredKeys() {
1424
+ if (!this.searchTerm)
1425
+ return this.keys;
1426
+ return this.keys.filter((_, i) => this.matchesSearch(i));
1427
+ }
1428
+ get filteredValues() {
1429
+ if (!this.searchTerm)
1430
+ return this.values;
1431
+ return this.values.filter((_, i) => this.matchesSearch(i));
1432
+ }
1433
+ matchesSearch(index) {
1434
+ const display = String(this.setDisplayKey(this.keys[index]) ?? '').toLowerCase();
1435
+ return display.includes(this.searchTerm);
1436
+ }
1426
1437
  constructor(renderer) {
1427
1438
  super(renderer);
1428
1439
  this.renderer = renderer;
@@ -1450,18 +1461,25 @@ class DropdownFromDataComponent extends FormControlParentComponent {
1450
1461
  this.multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : []));
1451
1462
  this.selectAllText = input(...(ngDevMode ? [undefined, { debugName: "selectAllText" }] : []));
1452
1463
  this.disableOptions = input(false, ...(ngDevMode ? [{ debugName: "disableOptions" }] : []));
1464
+ this.searchable = input(false, ...(ngDevMode ? [{ debugName: "searchable" }] : []));
1453
1465
  this.errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : []));
1454
- this.keys = [];
1455
- this.values = [];
1456
- // Effect to react to input changes (replaces ngOnChanges)
1457
- effect(() => {
1458
- const plainArray = this.optionsPlainArray();
1459
- if (plainArray) {
1460
- this.values = plainArray;
1461
- this.keys = plainArray;
1466
+ // prefix / suffix
1467
+ this.prefix = input('', ...(ngDevMode ? [{ debugName: "prefix" }] : []));
1468
+ this.prefixIcon = input('', ...(ngDevMode ? [{ debugName: "prefixIcon" }] : []));
1469
+ this.suffix = input('', ...(ngDevMode ? [{ debugName: "suffix" }] : []));
1470
+ this.suffixIcon = input('', ...(ngDevMode ? [{ debugName: "suffixIcon" }] : []));
1471
+ this._keysAndValues = computed(() => {
1472
+ let { keys, values } = this.resolveBaseKeysAndValues();
1473
+ ({ keys, values } = this.applyEnumOverrides(keys, values));
1474
+ if (this.hasNullOption()) {
1475
+ keys = [null, ...keys];
1476
+ values = [null, ...values];
1462
1477
  }
1463
- this.setKeyValues();
1464
- });
1478
+ return { keys, values };
1479
+ }, ...(ngDevMode ? [{ debugName: "_keysAndValues" }] : []));
1480
+ this.searchControl = new FormControl('');
1481
+ this.searchTerm = '';
1482
+ this.pendingValue = undefined;
1465
1483
  }
1466
1484
  ngOnInit() {
1467
1485
  this.form = new UntypedFormGroup({
@@ -1472,6 +1490,13 @@ class DropdownFromDataComponent extends FormControlParentComponent {
1472
1490
  this.internalValue = value.dropdownData;
1473
1491
  this.onChange(value.dropdownData);
1474
1492
  });
1493
+ this.searchControl.valueChanges.subscribe((term) => {
1494
+ this.searchTerm = (term ?? '').toLowerCase();
1495
+ });
1496
+ if (this.pendingValue !== undefined) {
1497
+ this.form.patchValue({ dropdownData: this.pendingValue }, { emitEvent: false });
1498
+ this.pendingValue = undefined;
1499
+ }
1475
1500
  const preselected = this.preselectedKeys();
1476
1501
  if (preselected)
1477
1502
  this.form.patchValue({
@@ -1479,55 +1504,6 @@ class DropdownFromDataComponent extends FormControlParentComponent {
1479
1504
  });
1480
1505
  super.ngOnInit();
1481
1506
  }
1482
- /**
1483
- * transofrms the data values to the correct format for be used by the template
1484
- * @param value
1485
- */
1486
- setKeyValues() {
1487
- const optionsObjArrayValue = this.optionsObjArray();
1488
- const mapKeyValue = this.mapKey();
1489
- const mapValueValue = this.mapValue();
1490
- const optionsEnumValue = this.optionsEnum();
1491
- const optionsPlainArrayValue = this.optionsPlainArray();
1492
- const useEnumIndexAsValueValue = this.useEnumIndexAsValue();
1493
- const hasNullOptionValue = this.hasNullOption();
1494
- if (optionsObjArrayValue && mapKeyValue && mapValueValue) {
1495
- this.keys = optionsObjArrayValue.map((obj) => obj[`${mapKeyValue}`]);
1496
- this.values = optionsObjArrayValue.map((obj) => obj[`${mapValueValue}`]);
1497
- }
1498
- else if (optionsObjArrayValue && mapKeyValue) {
1499
- this.keys = optionsObjArrayValue.map((obj) => obj[`${mapKeyValue}`]);
1500
- this.values = optionsObjArrayValue.map((obj) => obj[`${mapKeyValue}`]);
1501
- }
1502
- if (optionsEnumValue) {
1503
- const enumObj = optionsEnumValue;
1504
- // Get enum keys (excluding reverse mappings for numeric enums)
1505
- this.keys = Object.keys(enumObj).filter((k) => isNaN(Number(k)));
1506
- if (optionsPlainArrayValue) {
1507
- this.values = optionsPlainArrayValue;
1508
- }
1509
- else {
1510
- const values = this.keys.map((k) => enumObj[k]);
1511
- let keyValueEnum = false;
1512
- for (let i = 0; i < this.keys.length; i++) {
1513
- if (i !== values[i]) {
1514
- keyValueEnum = true;
1515
- break;
1516
- }
1517
- }
1518
- if (keyValueEnum || useEnumIndexAsValueValue) {
1519
- this.values = values;
1520
- }
1521
- else {
1522
- this.values = [...this.keys];
1523
- }
1524
- }
1525
- }
1526
- if (hasNullOptionValue === true) {
1527
- this.keys.unshift(null);
1528
- this.values.unshift(null);
1529
- }
1530
- }
1531
1507
  /**
1532
1508
  * set the value of the dropdown based if translation is set
1533
1509
  * @param key
@@ -1583,20 +1559,23 @@ class DropdownFromDataComponent extends FormControlParentComponent {
1583
1559
  super.writeValue(value);
1584
1560
  if (value !== undefined) {
1585
1561
  if (this.formInitialized) {
1586
- this.form.patchValue({ dropdownData: value });
1562
+ this.form.patchValue({ dropdownData: value }, { emitEvent: false });
1563
+ }
1564
+ else {
1565
+ this.pendingValue = value;
1587
1566
  }
1588
1567
  }
1589
1568
  }
1590
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownFromDataComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
1591
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DropdownFromDataComponent, isStandalone: false, selector: "kms-dropdown-from-data", inputs: { optionsEnum: { classPropertyName: "optionsEnum", publicName: "optionsEnum", isSignal: true, isRequired: false, transformFunction: null }, optionsPlainArray: { classPropertyName: "optionsPlainArray", publicName: "optionsPlainArray", isSignal: true, isRequired: false, transformFunction: null }, optionsObjArray: { classPropertyName: "optionsObjArray", publicName: "optionsObjArray", isSignal: true, isRequired: false, transformFunction: null }, mapKey: { classPropertyName: "mapKey", publicName: "mapKey", isSignal: true, isRequired: false, transformFunction: null }, mapValue: { classPropertyName: "mapValue", publicName: "mapValue", isSignal: true, isRequired: false, transformFunction: null }, hasNullOption: { classPropertyName: "hasNullOption", publicName: "hasNullOption", isSignal: true, isRequired: false, transformFunction: null }, preselectedKeys: { classPropertyName: "preselectedKeys", publicName: "preselectedKeys", isSignal: true, isRequired: false, transformFunction: null }, translation: { classPropertyName: "translation", publicName: "translation", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, useEnumIndexAsValue: { classPropertyName: "useEnumIndexAsValue", publicName: "useEnumIndexAsValue", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, selectAllText: { classPropertyName: "selectAllText", publicName: "selectAllText", isSignal: true, isRequired: false, transformFunction: null }, disableOptions: { classPropertyName: "disableOptions", publicName: "disableOptions", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
1569
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DropdownFromDataComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
1570
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DropdownFromDataComponent, isStandalone: false, selector: "kms-dropdown-from-data", inputs: { optionsEnum: { classPropertyName: "optionsEnum", publicName: "optionsEnum", isSignal: true, isRequired: false, transformFunction: null }, optionsPlainArray: { classPropertyName: "optionsPlainArray", publicName: "optionsPlainArray", isSignal: true, isRequired: false, transformFunction: null }, optionsObjArray: { classPropertyName: "optionsObjArray", publicName: "optionsObjArray", isSignal: true, isRequired: false, transformFunction: null }, mapKey: { classPropertyName: "mapKey", publicName: "mapKey", isSignal: true, isRequired: false, transformFunction: null }, mapValue: { classPropertyName: "mapValue", publicName: "mapValue", isSignal: true, isRequired: false, transformFunction: null }, hasNullOption: { classPropertyName: "hasNullOption", publicName: "hasNullOption", isSignal: true, isRequired: false, transformFunction: null }, preselectedKeys: { classPropertyName: "preselectedKeys", publicName: "preselectedKeys", isSignal: true, isRequired: false, transformFunction: null }, translation: { classPropertyName: "translation", publicName: "translation", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, useEnumIndexAsValue: { classPropertyName: "useEnumIndexAsValue", publicName: "useEnumIndexAsValue", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, selectAllText: { classPropertyName: "selectAllText", publicName: "selectAllText", isSignal: true, isRequired: false, transformFunction: null }, disableOptions: { classPropertyName: "disableOptions", publicName: "disableOptions", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
1592
1571
  {
1593
1572
  provide: NG_VALUE_ACCESSOR,
1594
1573
  useExisting: forwardRef(() => DropdownFromDataComponent),
1595
1574
  multi: true,
1596
1575
  },
1597
- ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-form-field\n [attr.required]=\"required()\"\n [floatLabel]=\"placeholder() ? 'always' : 'auto'\"\n >\n <mat-label>{{ label() }}</mat-label>\n <mat-select\n [placeholder]=\"placeholder()\"\n disableOptionCentering\n (selectionChange)=\"valueChanged($event?.value)\"\n [value]=\"value\"\n #child\n [multiple]=\"multiple()\"\n [required]=\"required()\"\n formControlName=\"dropdownData\"\n >\n @if (selectAllText() && multiple() && !disableOptions()) {\n <mat-checkbox\n color=\"accent\"\n class=\"dropdown-from-data__checkbox\"\n [indeterminate]=\"isCheckboxIndeterminate()\"\n [checked]=\"allElementsChecked()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAllSelection($event)\"\n >\n {{ selectAllText() }}\n </mat-checkbox>\n } @for (key of keys; track key; let i = $index) {\n <mat-option [value]=\"values[i]\" [disabled]=\"disableOptions()\">\n {{ setDisplayKey(key) || '\u2014' }}\n </mat-option>\n }\n </mat-select>\n @if (errorMessage()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n </mat-form-field>\n</form>\n", dependencies: [{ kind: "component", type: i1$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i3.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: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }] }); }
1576
+ ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-form-field\n [attr.required]=\"required()\"\n [floatLabel]=\"placeholder() ? 'always' : 'auto'\"\n >\n <mat-label>{{ label() }}</mat-label>\n <mat-select\n [placeholder]=\"placeholder()\"\n disableOptionCentering\n (selectionChange)=\"valueChanged($event?.value)\"\n [value]=\"value\"\n #child\n [multiple]=\"multiple()\"\n [required]=\"required()\"\n formControlName=\"dropdownData\"\n >\n @if (searchable()) {\n <mat-option>\n <ngx-mat-select-search\n [formControl]=\"searchControl\"\n [placeholderLabel]=\"'Search...'\"\n [noEntriesFoundLabel]=\"'No matches found'\">\n </ngx-mat-select-search>\n </mat-option>\n }\n @if (selectAllText() && multiple() && !disableOptions()) {\n <mat-checkbox\n color=\"accent\"\n class=\"dropdown-from-data__checkbox\"\n [indeterminate]=\"isCheckboxIndeterminate()\"\n [checked]=\"allElementsChecked()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAllSelection($event)\"\n >\n {{ selectAllText() }}\n </mat-checkbox>\n } @for (key of filteredKeys; track key; let i = $index) {\n <mat-option [value]=\"filteredValues[i]\" [disabled]=\"disableOptions()\">\n {{ setDisplayKey(key) || '\u2014' }}\n </mat-option>\n }\n </mat-select>\n @if (prefix()) {\n <span matTextPrefix>{{ prefix() }}&nbsp;</span>\n } @else if (prefixIcon()) {\n <kms-icon matPrefix [icon]=\"prefixIcon()\" aria-hidden=\"true\"></kms-icon>\n }\n @if (suffix()) {\n <span matTextSuffix>&nbsp;{{ suffix() }}</span>\n } @else if (suffixIcon()) {\n <kms-icon matSuffix [icon]=\"suffixIcon()\" aria-hidden=\"true\"></kms-icon>\n }\n @if (errorMessage()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n </mat-form-field>\n</form>\n", dependencies: [{ kind: "component", type: i1$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3.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: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
1598
1577
  }
1599
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownFromDataComponent, decorators: [{
1578
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DropdownFromDataComponent, decorators: [{
1600
1579
  type: Component,
1601
1580
  args: [{ selector: 'kms-dropdown-from-data', providers: [
1602
1581
  {
@@ -1604,17 +1583,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1604
1583
  useExisting: forwardRef(() => DropdownFromDataComponent),
1605
1584
  multi: true,
1606
1585
  },
1607
- ], standalone: false, template: "<form [formGroup]=\"form\">\n <mat-form-field\n [attr.required]=\"required()\"\n [floatLabel]=\"placeholder() ? 'always' : 'auto'\"\n >\n <mat-label>{{ label() }}</mat-label>\n <mat-select\n [placeholder]=\"placeholder()\"\n disableOptionCentering\n (selectionChange)=\"valueChanged($event?.value)\"\n [value]=\"value\"\n #child\n [multiple]=\"multiple()\"\n [required]=\"required()\"\n formControlName=\"dropdownData\"\n >\n @if (selectAllText() && multiple() && !disableOptions()) {\n <mat-checkbox\n color=\"accent\"\n class=\"dropdown-from-data__checkbox\"\n [indeterminate]=\"isCheckboxIndeterminate()\"\n [checked]=\"allElementsChecked()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAllSelection($event)\"\n >\n {{ selectAllText() }}\n </mat-checkbox>\n } @for (key of keys; track key; let i = $index) {\n <mat-option [value]=\"values[i]\" [disabled]=\"disableOptions()\">\n {{ setDisplayKey(key) || '\u2014' }}\n </mat-option>\n }\n </mat-select>\n @if (errorMessage()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n </mat-form-field>\n</form>\n" }]
1608
- }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { optionsEnum: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsEnum", required: false }] }], optionsPlainArray: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsPlainArray", required: false }] }], optionsObjArray: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsObjArray", required: false }] }], mapKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "mapKey", required: false }] }], mapValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "mapValue", required: false }] }], hasNullOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasNullOption", required: false }] }], preselectedKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "preselectedKeys", required: false }] }], translation: [{ type: i0.Input, args: [{ isSignal: true, alias: "translation", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], useEnumIndexAsValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "useEnumIndexAsValue", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], selectAllText: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAllText", required: false }] }], disableOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableOptions", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }] } });
1586
+ ], standalone: false, template: "<form [formGroup]=\"form\">\n <mat-form-field\n [attr.required]=\"required()\"\n [floatLabel]=\"placeholder() ? 'always' : 'auto'\"\n >\n <mat-label>{{ label() }}</mat-label>\n <mat-select\n [placeholder]=\"placeholder()\"\n disableOptionCentering\n (selectionChange)=\"valueChanged($event?.value)\"\n [value]=\"value\"\n #child\n [multiple]=\"multiple()\"\n [required]=\"required()\"\n formControlName=\"dropdownData\"\n >\n @if (searchable()) {\n <mat-option>\n <ngx-mat-select-search\n [formControl]=\"searchControl\"\n [placeholderLabel]=\"'Search...'\"\n [noEntriesFoundLabel]=\"'No matches found'\">\n </ngx-mat-select-search>\n </mat-option>\n }\n @if (selectAllText() && multiple() && !disableOptions()) {\n <mat-checkbox\n color=\"accent\"\n class=\"dropdown-from-data__checkbox\"\n [indeterminate]=\"isCheckboxIndeterminate()\"\n [checked]=\"allElementsChecked()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAllSelection($event)\"\n >\n {{ selectAllText() }}\n </mat-checkbox>\n } @for (key of filteredKeys; track key; let i = $index) {\n <mat-option [value]=\"filteredValues[i]\" [disabled]=\"disableOptions()\">\n {{ setDisplayKey(key) || '\u2014' }}\n </mat-option>\n }\n </mat-select>\n @if (prefix()) {\n <span matTextPrefix>{{ prefix() }}&nbsp;</span>\n } @else if (prefixIcon()) {\n <kms-icon matPrefix [icon]=\"prefixIcon()\" aria-hidden=\"true\"></kms-icon>\n }\n @if (suffix()) {\n <span matTextSuffix>&nbsp;{{ suffix() }}</span>\n } @else if (suffixIcon()) {\n <kms-icon matSuffix [icon]=\"suffixIcon()\" aria-hidden=\"true\"></kms-icon>\n }\n @if (errorMessage()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n </mat-form-field>\n</form>\n" }]
1587
+ }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { optionsEnum: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsEnum", required: false }] }], optionsPlainArray: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsPlainArray", required: false }] }], optionsObjArray: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsObjArray", required: false }] }], mapKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "mapKey", required: false }] }], mapValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "mapValue", required: false }] }], hasNullOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasNullOption", required: false }] }], preselectedKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "preselectedKeys", required: false }] }], translation: [{ type: i0.Input, args: [{ isSignal: true, alias: "translation", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], useEnumIndexAsValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "useEnumIndexAsValue", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], selectAllText: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAllText", required: false }] }], disableOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableOptions", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], prefixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefixIcon", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], suffixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffixIcon", required: false }] }] } });
1609
1588
 
1610
1589
  class LoaderComponent {
1611
1590
  constructor() {
1612
1591
  this.loading = false;
1613
1592
  }
1614
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1615
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: LoaderComponent, isStandalone: false, selector: "kms-loader", inputs: { loading: "loading" }, ngImport: i0, template: "@if (loading) {\n <div class=\"loading-spinner-shade\">\n <mat-spinner class=\"spinnerMargin\" color=\"accent\" diameter=\"44\"></mat-spinner>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: i1$4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
1593
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1594
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: LoaderComponent, isStandalone: false, selector: "kms-loader", inputs: { loading: "loading" }, ngImport: i0, template: "@if (loading) {\n <div class=\"loading-spinner-shade\">\n <mat-spinner class=\"spinnerMargin\" color=\"accent\" diameter=\"44\"></mat-spinner>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: i1$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
1616
1595
  }
1617
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: LoaderComponent, decorators: [{
1596
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoaderComponent, decorators: [{
1618
1597
  type: Component,
1619
1598
  args: [{ selector: 'kms-loader', standalone: false, template: "@if (loading) {\n <div class=\"loading-spinner-shade\">\n <mat-spinner class=\"spinnerMargin\" color=\"accent\" diameter=\"44\"></mat-spinner>\n </div>\n}\n" }]
1620
1599
  }], propDecorators: { loading: [{
@@ -1726,10 +1705,10 @@ class MapComponent {
1726
1705
  this.zoom--;
1727
1706
  }
1728
1707
  }
1729
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1730
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MapComponent, isStandalone: false, selector: "kms-map", inputs: { data: "data" }, ngImport: i0, template: "@if (geoDataFoundForAddress) {\n <div>\n <google-map\n height=\"415px\"\n [width]=\"width\"\n [zoom]=\"zoom\"\n [center]=\"center\"\n [options]=\"options\"\n >\n @for (marker of markers; track marker) {\n <map-marker\n [position]=\"marker.position\"\n [label]=\"marker.label\"\n [title]=\"marker.title\"\n [options]=\"marker.options\"\n >\n </map-marker>\n }\n </google-map>\n </div>\n}", styles: [""], dependencies: [{ kind: "component", type: i1$5.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i1$5.MapMarker, selector: "map-marker", inputs: ["title", "position", "label", "clickable", "options", "icon", "visible"], outputs: ["animationChanged", "mapClick", "clickableChanged", "cursorChanged", "mapDblclick", "mapDrag", "mapDragend", "draggableChanged", "mapDragstart", "flatChanged", "iconChanged", "mapMousedown", "mapMouseout", "mapMouseover", "mapMouseup", "positionChanged", "mapRightclick", "shapeChanged", "titleChanged", "visibleChanged", "zindexChanged", "markerInitialized"], exportAs: ["mapMarker"] }] }); }
1708
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1709
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MapComponent, isStandalone: false, selector: "kms-map", inputs: { data: "data" }, ngImport: i0, template: "@if (geoDataFoundForAddress) {\n <div>\n <google-map\n height=\"415px\"\n [width]=\"width\"\n [zoom]=\"zoom\"\n [center]=\"center\"\n [options]=\"options\"\n >\n @for (marker of markers; track marker) {\n <map-marker\n [position]=\"marker.position\"\n [label]=\"marker.label\"\n [title]=\"marker.title\"\n [options]=\"marker.options\"\n >\n </map-marker>\n }\n </google-map>\n </div>\n}", styles: [""], dependencies: [{ kind: "component", type: i1$4.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i1$4.MapMarker, selector: "map-marker", inputs: ["title", "position", "label", "clickable", "options", "icon", "visible"], outputs: ["animationChanged", "mapClick", "clickableChanged", "cursorChanged", "mapDblclick", "mapDrag", "mapDragend", "draggableChanged", "mapDragstart", "flatChanged", "iconChanged", "mapMousedown", "mapMouseout", "mapMouseover", "mapMouseup", "positionChanged", "mapRightclick", "shapeChanged", "titleChanged", "visibleChanged", "zindexChanged", "markerInitialized"], exportAs: ["mapMarker"] }] }); }
1731
1710
  }
1732
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MapComponent, decorators: [{
1711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MapComponent, decorators: [{
1733
1712
  type: Component,
1734
1713
  args: [{ selector: 'kms-map', standalone: false, template: "@if (geoDataFoundForAddress) {\n <div>\n <google-map\n height=\"415px\"\n [width]=\"width\"\n [zoom]=\"zoom\"\n [center]=\"center\"\n [options]=\"options\"\n >\n @for (marker of markers; track marker) {\n <map-marker\n [position]=\"marker.position\"\n [label]=\"marker.label\"\n [title]=\"marker.title\"\n [options]=\"marker.options\"\n >\n </map-marker>\n }\n </google-map>\n </div>\n}" }]
1735
1714
  }], ctorParameters: () => [], propDecorators: { data: [{
@@ -1771,16 +1750,16 @@ class RadioButtonComponent {
1771
1750
  setDisabledState(isDisabled) {
1772
1751
  this.disabled = isDisabled;
1773
1752
  }
1774
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: RadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1775
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: RadioButtonComponent, isStandalone: false, selector: "kms-radiobutton", inputs: { label: "label", checked: "checked", disabled: "disabled", value: "value", size: "size", color: "color" }, outputs: { onChange: "onChange" }, providers: [
1753
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1754
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: RadioButtonComponent, isStandalone: false, selector: "kms-radiobutton", inputs: { label: "label", checked: "checked", disabled: "disabled", value: "value", size: "size", color: "color" }, outputs: { onChange: "onChange" }, providers: [
1776
1755
  {
1777
1756
  provide: NG_VALUE_ACCESSOR,
1778
1757
  useExisting: forwardRef(() => RadioButtonComponent),
1779
1758
  multi: true,
1780
1759
  },
1781
- ], ngImport: i0, template: "<mat-radio-button\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n [ngClass]=\"size\"\n [color]=\"color\"\n [value]=\"value\"\n (change)=\"onChange.emit()\"\n ngDefaultControl\n>\n {{ label }}\n</mat-radio-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i1$6.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }] }); }
1760
+ ], ngImport: i0, template: "<mat-radio-button\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n [ngClass]=\"size\"\n [color]=\"color\"\n [value]=\"value\"\n (change)=\"onChange.emit()\"\n ngDefaultControl\n>\n {{ label }}\n</mat-radio-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i1$5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }] }); }
1782
1761
  }
1783
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: RadioButtonComponent, decorators: [{
1762
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RadioButtonComponent, decorators: [{
1784
1763
  type: Component,
1785
1764
  args: [{ selector: 'kms-radiobutton', providers: [
1786
1765
  {
@@ -1840,16 +1819,16 @@ class SlideToggleComponent {
1840
1819
  setDisabledState(isDisabled) {
1841
1820
  this.disabled = isDisabled;
1842
1821
  }
1843
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SlideToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1844
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SlideToggleComponent, isStandalone: false, selector: "kms-slide-toggle", inputs: { leftLabel: "leftLabel", rightLabel: "rightLabel", checked: "checked", disabled: "disabled", name: "name" }, outputs: { change: "change" }, providers: [
1822
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SlideToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1823
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SlideToggleComponent, isStandalone: false, selector: "kms-slide-toggle", inputs: { leftLabel: "leftLabel", rightLabel: "rightLabel", checked: "checked", disabled: "disabled", name: "name" }, outputs: { change: "change" }, providers: [
1845
1824
  {
1846
1825
  provide: NG_VALUE_ACCESSOR,
1847
1826
  useExisting: forwardRef(() => SlideToggleComponent),
1848
1827
  multi: true,
1849
1828
  },
1850
- ], ngImport: i0, template: "<div class=\"kms-slide-toggle\">\n @if (leftLabel) {\n <mat-label\n class=\"kms-slide-toggle__label\"\n [class.kms-slide-toggle__label--bold]=\"rightLabel && !checked\"\n >{{ leftLabel }}</mat-label\n >\n }\n <mat-slide-toggle\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [hideIcon]=\"true\"\n (change)=\"emitOnChange($event)\"\n />\n @if (rightLabel) {\n <mat-label\n class=\"kms-slide-toggle__label\"\n [class.kms-slide-toggle__label--bold]=\"leftLabel && checked\"\n >{{ rightLabel }}</mat-label\n >\n }\n </div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "component", type: i3$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }] }); }
1829
+ ], ngImport: i0, template: "<div class=\"kms-slide-toggle\">\n @if (leftLabel) {\n <mat-label\n class=\"kms-slide-toggle__label\"\n [class.kms-slide-toggle__label--bold]=\"rightLabel && !checked\"\n >{{ leftLabel }}</mat-label\n >\n }\n <mat-slide-toggle\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [hideIcon]=\"true\"\n (change)=\"emitOnChange($event)\"\n />\n @if (rightLabel) {\n <mat-label\n class=\"kms-slide-toggle__label\"\n [class.kms-slide-toggle__label--bold]=\"leftLabel && checked\"\n >{{ rightLabel }}</mat-label\n >\n }\n </div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "component", type: i3$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }] }); }
1851
1830
  }
1852
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SlideToggleComponent, decorators: [{
1831
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SlideToggleComponent, decorators: [{
1853
1832
  type: Component,
1854
1833
  args: [{ selector: 'kms-slide-toggle', providers: [
1855
1834
  {
@@ -1911,16 +1890,16 @@ class SliderComponent {
1911
1890
  setDisabledState(isDisabled) {
1912
1891
  this.disabled = isDisabled;
1913
1892
  }
1914
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1915
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: SliderComponent, isStandalone: false, selector: "kms-slider", inputs: { disabled: "disabled", options: "options", max: "max" }, outputs: { change: "change" }, host: { properties: { "class.kms-slider": "this.kmsSliderClass", "class.kms-slider--disabled": "this.disabledClass" } }, providers: [
1893
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1894
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SliderComponent, isStandalone: false, selector: "kms-slider", inputs: { disabled: "disabled", options: "options", max: "max" }, outputs: { change: "change" }, host: { properties: { "class.kms-slider": "this.kmsSliderClass", "class.kms-slider--disabled": "this.disabledClass" } }, providers: [
1916
1895
  {
1917
1896
  provide: NG_VALUE_ACCESSOR,
1918
1897
  useExisting: forwardRef(() => SliderComponent),
1919
1898
  multi: true,
1920
1899
  },
1921
- ], ngImport: i0, template: "<ngx-slider\n [(value)]=\"value\"\n [options]=\"options\"\n [highValue]=\"max\"\n (userChangeEnd)=\"change.emit($event)\"\n></ngx-slider>\n", styles: [""], dependencies: [{ kind: "component", type: i1$7.SliderComponent, selector: "ngx-slider", inputs: ["value", "highValue", "options", "manualRefresh", "triggerFocus", "cancelUserChange"], outputs: ["valueChange", "highValueChange", "userChangeStart", "userChange", "userChangeEnd"] }] }); }
1900
+ ], ngImport: i0, template: "<ngx-slider\n [(value)]=\"value\"\n [options]=\"options\"\n [highValue]=\"max\"\n (userChangeEnd)=\"change.emit($event)\"\n></ngx-slider>\n", styles: [""], dependencies: [{ kind: "component", type: i1$6.SliderComponent, selector: "ngx-slider", inputs: ["value", "highValue", "options", "manualRefresh", "triggerFocus", "cancelUserChange"], outputs: ["valueChange", "highValueChange", "userChangeStart", "userChange", "userChangeEnd"] }] }); }
1922
1901
  }
1923
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SliderComponent, decorators: [{
1902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SliderComponent, decorators: [{
1924
1903
  type: Component,
1925
1904
  args: [{ selector: 'kms-slider', providers: [
1926
1905
  {
@@ -1986,10 +1965,10 @@ class ButtonComponent {
1986
1965
  }
1987
1966
  }, ...(ngDevMode ? [{ debugName: "iconColor" }] : []));
1988
1967
  }
1989
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1990
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ButtonComponent, isStandalone: false, selector: "kms-button", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<!-- Basic -->\n@if (appearance() == ButtonAppearance.BASIC) {\n<button\n mat-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--basic-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--basic-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--basic-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<!-- Flat -->\n@else if (appearance() == ButtonAppearance.FLAT) {\n<button\n mat-flat-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--flat-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--flat-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--flat-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<!-- Raised -->\n@else if (appearance() == ButtonAppearance.RAISED) {\n<button\n mat-raised-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--raised-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--raised-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--raised-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<ng-template #buttonTemplate>\n @if (loading()) {\n <mat-spinner class=\"kms-button__spinner\" diameter=\"22\"></mat-spinner>\n } @if (icon()) {\n <kms-icon\n class=\"kms-button__icon\"\n [color]=\"iconColor()\"\n [size]=\"IconSize.XXS\"\n [icon]=\"icon()\"\n ></kms-icon>\n }\n {{ label() }}\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
1968
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1969
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ButtonComponent, isStandalone: false, selector: "kms-button", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<!-- Basic -->\n@if (appearance() == ButtonAppearance.BASIC) {\n<button\n mat-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--basic-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--basic-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--basic-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<!-- Flat -->\n@else if (appearance() == ButtonAppearance.FLAT) {\n<button\n mat-flat-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--flat-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--flat-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--flat-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<!-- Raised -->\n@else if (appearance() == ButtonAppearance.RAISED) {\n<button\n mat-raised-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--raised-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--raised-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--raised-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<ng-template #buttonTemplate>\n @if (loading()) {\n <mat-spinner class=\"kms-button__spinner\" diameter=\"22\"></mat-spinner>\n } @if (icon()) {\n <kms-icon\n class=\"kms-button__icon\"\n [color]=\"iconColor()\"\n [size]=\"IconSize.XXS\"\n [icon]=\"icon()\"\n ></kms-icon>\n }\n {{ label() }}\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
1991
1970
  }
1992
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ButtonComponent, decorators: [{
1971
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ButtonComponent, decorators: [{
1993
1972
  type: Component,
1994
1973
  args: [{ selector: 'kms-button', standalone: false, template: "<!-- Basic -->\n@if (appearance() == ButtonAppearance.BASIC) {\n<button\n mat-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--basic-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--basic-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--basic-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<!-- Flat -->\n@else if (appearance() == ButtonAppearance.FLAT) {\n<button\n mat-flat-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--flat-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--flat-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--flat-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<!-- Raised -->\n@else if (appearance() == ButtonAppearance.RAISED) {\n<button\n mat-raised-button\n [color]=\"color()\"\n class=\"kms-button\"\n [ngClass]=\"{\n 'kms-button--loading': loading(),\n 'kms-button--raised-primary': color() === StylingTheme.PRIMARY,\n 'kms-button--raised-accent': color() === StylingTheme.SECONDARY,\n 'kms-button--raised-warn': color() === StylingTheme.WARN,\n 'kms-button--rounded': rounded()\n }\"\n [disabled]=\"disabled() || loading()\"\n (click)=\"buttonClick.emit($event)\"\n [type]=\"type()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') &&\n buttonClick.emit($event)\n \"\n>\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n}\n\n<ng-template #buttonTemplate>\n @if (loading()) {\n <mat-spinner class=\"kms-button__spinner\" diameter=\"22\"></mat-spinner>\n } @if (icon()) {\n <kms-icon\n class=\"kms-button__icon\"\n [color]=\"iconColor()\"\n [size]=\"IconSize.XXS\"\n [icon]=\"icon()\"\n ></kms-icon>\n }\n {{ label() }}\n</ng-template>\n" }]
1995
1974
  }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], buttonClick: [{ type: i0.Output, args: ["buttonClick"] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }] } });
@@ -2003,10 +1982,10 @@ class TooltipIconComponent {
2003
1982
  this.tooltipAlwaysVisible = input(false, ...(ngDevMode ? [{ debugName: "tooltipAlwaysVisible" }] : []));
2004
1983
  this.icon = input('ic_info', ...(ngDevMode ? [{ debugName: "icon" }] : []));
2005
1984
  }
2006
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TooltipIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2007
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: TooltipIconComponent, isStandalone: false, selector: "kms-tooltip-icon", inputs: { tooltipText: { classPropertyName: "tooltipText", publicName: "tooltipText", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, tooltipAlwaysVisible: { classPropertyName: "tooltipAlwaysVisible", publicName: "tooltipAlwaysVisible", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "button", first: true, predicate: ["button"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<div #tooltipContent>\n @if (tooltipText()) {\n {{ tooltipText() }}\n } @else {\n <ng-content></ng-content>\n }\n</div>\n\n<kms-icon\n [icon]=\"icon()\"\n [size]=\"iconSize()\"\n [kmsTooltip]=\"tooltipContent\"\n [placement]=\"placement()\"\n [delay]=\"delay()\"\n [alwaysVisible]=\"tooltipAlwaysVisible()\"\n></kms-icon>\n", styles: [""], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[kmsTooltip]", inputs: ["kmsTooltip", "placement", "delay", "alwaysVisible"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
1985
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1986
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: TooltipIconComponent, isStandalone: false, selector: "kms-tooltip-icon", inputs: { tooltipText: { classPropertyName: "tooltipText", publicName: "tooltipText", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, tooltipAlwaysVisible: { classPropertyName: "tooltipAlwaysVisible", publicName: "tooltipAlwaysVisible", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "button", first: true, predicate: ["button"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<div #tooltipContent>\n @if (tooltipText()) {\n {{ tooltipText() }}\n } @else {\n <ng-content></ng-content>\n }\n</div>\n\n<kms-icon\n [icon]=\"icon()\"\n [size]=\"iconSize()\"\n [kmsTooltip]=\"tooltipContent\"\n [placement]=\"placement()\"\n [delay]=\"delay()\"\n [alwaysVisible]=\"tooltipAlwaysVisible()\"\n></kms-icon>\n", styles: [""], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[kmsTooltip]", inputs: ["kmsTooltip", "placement", "delay", "alwaysVisible"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
2008
1987
  }
2009
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TooltipIconComponent, decorators: [{
1988
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipIconComponent, decorators: [{
2010
1989
  type: Component,
2011
1990
  args: [{ standalone: false, selector: 'kms-tooltip-icon', template: "<div #tooltipContent>\n @if (tooltipText()) {\n {{ tooltipText() }}\n } @else {\n <ng-content></ng-content>\n }\n</div>\n\n<kms-icon\n [icon]=\"icon()\"\n [size]=\"iconSize()\"\n [kmsTooltip]=\"tooltipContent\"\n [placement]=\"placement()\"\n [delay]=\"delay()\"\n [alwaysVisible]=\"tooltipAlwaysVisible()\"\n></kms-icon>\n" }]
2012
1991
  }], propDecorators: { button: [{
@@ -2057,16 +2036,16 @@ class ColorInputComponent extends FormControlParentComponent {
2057
2036
  this.internalValue = color;
2058
2037
  this.change(color);
2059
2038
  }
2060
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ColorInputComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
2061
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ColorInputComponent, isStandalone: false, selector: "kms-color-input", inputs: { label: "label", tooltipText: "tooltipText", placeholder: "placeholder" }, providers: [
2039
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ColorInputComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
2040
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ColorInputComponent, isStandalone: false, selector: "kms-color-input", inputs: { label: "label", tooltipText: "tooltipText", placeholder: "placeholder" }, providers: [
2062
2041
  {
2063
2042
  provide: NG_VALUE_ACCESSOR,
2064
2043
  useExisting: forwardRef(() => ColorInputComponent),
2065
2044
  multi: true,
2066
2045
  },
2067
- ], usesInheritance: true, ngImport: i0, template: "\n@if (formInitialized) {\n <form [formGroup]=\"form\">\n <div>\n <mat-form-field class=\"colorInput\">\n @if (tooltipText) {\n <kms-tooltip-icon [tooltipText]=\"tooltipText\"></kms-tooltip-icon>\n }\n <mat-label>{{ label }}</mat-label>\n <input type=\"text\" [(ngModel)]=\"value\" matInput formControlName=\"color\" [placeholder]=\"placeholder\" [ngClass]=\"{'my-inValid': !matchesHex(value)}\" />\n <input type=\"color\" [value]=\"value && matchesHex(value) ? value : '#ffffff'\" (change)=\"updateSelectedColor($event)\" [ngClass]=\"{'my-inValid': !matchesHex(value)}\" />\n </mat-form-field>\n </div>\n </form>\n}", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$2.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: "component", type: TooltipIconComponent, selector: "kms-tooltip-icon", inputs: ["tooltipText", "placement", "delay", "iconSize", "tooltipAlwaysVisible", "icon"] }] }); }
2046
+ ], usesInheritance: true, ngImport: i0, template: "\n@if (formInitialized) {\n <form [formGroup]=\"form\">\n <div>\n <mat-form-field class=\"colorInput\">\n @if (tooltipText) {\n <kms-tooltip-icon [tooltipText]=\"tooltipText\"></kms-tooltip-icon>\n }\n <mat-label>{{ label }}</mat-label>\n <input type=\"text\" [(ngModel)]=\"value\" matInput formControlName=\"color\" [placeholder]=\"placeholder\" [ngClass]=\"{'my-inValid': !matchesHex(value)}\" />\n <input type=\"color\" [value]=\"value && matchesHex(value) ? value : '#ffffff'\" (change)=\"updateSelectedColor($event)\" [ngClass]=\"{'my-inValid': !matchesHex(value)}\" />\n </mat-form-field>\n </div>\n </form>\n}", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$2.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: "component", type: TooltipIconComponent, selector: "kms-tooltip-icon", inputs: ["tooltipText", "placement", "delay", "iconSize", "tooltipAlwaysVisible", "icon"] }] }); }
2068
2047
  }
2069
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ColorInputComponent, decorators: [{
2048
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ColorInputComponent, decorators: [{
2070
2049
  type: Component,
2071
2050
  args: [{ standalone: false, selector: 'kms-color-input', providers: [
2072
2051
  {
@@ -2122,17 +2101,130 @@ class ConfirmationDialogComponent {
2122
2101
  });
2123
2102
  });
2124
2103
  }
2125
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ConfirmationDialogComponent, deps: [{ token: i1$8.MatDialogRef }, { token: i0.NgZone }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
2126
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: ConfirmationDialogComponent, isStandalone: false, selector: "kms-confirmation-dialog", ngImport: i0, template: "<div class=\"dialog-container\">\n <div class=\"dialog-header\">\n <h4>{{ data.title }}</h4>\n </div>\n <div class=\"dialog-content\">\n {{ data.message }}\n </div>\n <div class=\"dialog-footer\">\n <button\n mat-flat-button\n color=\"accent\"\n (click)=\"onClickAction(ButtonDialogType.secondary)\"\n >\n {{ data.buttons.secondary }}\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"onClickAction(ButtonDialogType.primary)\"\n >\n {{ data.buttons.primary }}\n </button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] }); }
2104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfirmationDialogComponent, deps: [{ token: i1$7.MatDialogRef }, { token: i0.NgZone }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
2105
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ConfirmationDialogComponent, isStandalone: false, selector: "kms-confirmation-dialog", ngImport: i0, template: "<div class=\"dialog-container\">\n <div class=\"dialog-header\">\n <h4>{{ data.title }}</h4>\n </div>\n <div class=\"dialog-content\">\n {{ data.message }}\n </div>\n <div class=\"dialog-footer\">\n <button\n mat-flat-button\n color=\"accent\"\n (click)=\"onClickAction(ButtonDialogType.secondary)\"\n >\n {{ data.buttons.secondary }}\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"onClickAction(ButtonDialogType.primary)\"\n >\n {{ data.buttons.primary }}\n </button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] }); }
2127
2106
  }
2128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
2107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
2129
2108
  type: Component,
2130
2109
  args: [{ standalone: false, selector: 'kms-confirmation-dialog', template: "<div class=\"dialog-container\">\n <div class=\"dialog-header\">\n <h4>{{ data.title }}</h4>\n </div>\n <div class=\"dialog-content\">\n {{ data.message }}\n </div>\n <div class=\"dialog-footer\">\n <button\n mat-flat-button\n color=\"accent\"\n (click)=\"onClickAction(ButtonDialogType.secondary)\"\n >\n {{ data.buttons.secondary }}\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"onClickAction(ButtonDialogType.primary)\"\n >\n {{ data.buttons.primary }}\n </button>\n </div>\n</div>\n" }]
2131
- }], ctorParameters: () => [{ type: i1$8.MatDialogRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
2110
+ }], ctorParameters: () => [{ type: i1$7.MatDialogRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
2132
2111
  type: Inject,
2133
2112
  args: [MAT_DIALOG_DATA]
2134
2113
  }] }] });
2135
2114
 
2115
+ let nextId$1 = 0;
2116
+ class DateInputComponent {
2117
+ constructor() {
2118
+ this.Color = Color;
2119
+ this.IconSizePx = IconSizePx;
2120
+ this.dateChange = output();
2121
+ this.rangeChange = output();
2122
+ this.mode = input('date', ...(ngDevMode ? [{ debugName: "mode" }] : []));
2123
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
2124
+ this.label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
2125
+ this.placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
2126
+ this.required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
2127
+ this.hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : []));
2128
+ this.errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : []));
2129
+ this.minDate = input(null, ...(ngDevMode ? [{ debugName: "minDate" }] : []));
2130
+ this.maxDate = input(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : []));
2131
+ this.monthPicker = input(false, ...(ngDevMode ? [{ debugName: "monthPicker" }] : []));
2132
+ this.startView = input('month', ...(ngDevMode ? [{ debugName: "startView" }] : []));
2133
+ this.value = signal(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
2134
+ this.disabledByForm = signal(false, ...(ngDevMode ? [{ debugName: "disabledByForm" }] : []));
2135
+ this.isDisabled = computed(() => this.disabled() || this.disabledByForm(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
2136
+ this.innerControl = new FormControl(null);
2137
+ this.rangeGroup = new FormGroup({
2138
+ start: new FormControl(null),
2139
+ end: new FormControl(null),
2140
+ });
2141
+ this.computedStartView = computed(() => this.monthPicker() ? 'year' : this.startView(), ...(ngDevMode ? [{ debugName: "computedStartView" }] : []));
2142
+ this.disabledEffect = effect(() => {
2143
+ const disabled = this.isDisabled();
2144
+ if (disabled) {
2145
+ this.innerControl.disable({ emitEvent: false });
2146
+ this.rangeGroup.disable({ emitEvent: false });
2147
+ }
2148
+ else {
2149
+ this.innerControl.enable({ emitEvent: false });
2150
+ this.rangeGroup.enable({ emitEvent: false });
2151
+ }
2152
+ }, ...(ngDevMode ? [{ debugName: "disabledEffect" }] : []));
2153
+ this.inputId = `kms-date-input-${nextId$1++}`;
2154
+ this.hintId = `${this.inputId}-hint`;
2155
+ this.errorId = `${this.inputId}-error`;
2156
+ this.errorStateMatcher = {
2157
+ isErrorState: () => !!this.errorMessage(),
2158
+ };
2159
+ this.onChange = () => { };
2160
+ this.onTouched = () => { };
2161
+ }
2162
+ onDateChanged(date) {
2163
+ this.value.set(date);
2164
+ this.innerControl.setValue(date, { emitEvent: false });
2165
+ this.onChange(date);
2166
+ this.dateChange.emit(date);
2167
+ }
2168
+ onMonthSelected(date, picker) {
2169
+ if (this.monthPicker()) {
2170
+ this.onDateChanged(date);
2171
+ picker.close();
2172
+ }
2173
+ }
2174
+ onRangeChanged() {
2175
+ const rangeValue = {
2176
+ start: this.rangeGroup.value.start ?? null,
2177
+ end: this.rangeGroup.value.end ?? null,
2178
+ };
2179
+ this.onChange(rangeValue);
2180
+ this.rangeChange.emit(rangeValue);
2181
+ }
2182
+ writeValue(value) {
2183
+ if (this.mode() === 'range') {
2184
+ const range = value ?? { start: null, end: null };
2185
+ this.rangeGroup.setValue({ start: range.start, end: range.end }, { emitEvent: false });
2186
+ }
2187
+ else {
2188
+ const date = value ?? null;
2189
+ this.value.set(date);
2190
+ this.innerControl.setValue(date, { emitEvent: false });
2191
+ }
2192
+ }
2193
+ registerOnChange(fn) {
2194
+ this.onChange = fn;
2195
+ }
2196
+ registerOnTouched(fn) {
2197
+ this.onTouched = fn;
2198
+ }
2199
+ setDisabledState(isDisabled) {
2200
+ this.disabledByForm.set(isDisabled);
2201
+ }
2202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DateInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DateInputComponent, isStandalone: true, selector: "kms-date-input", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, monthPicker: { classPropertyName: "monthPicker", publicName: "monthPicker", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateChange: "dateChange", rangeChange: "rangeChange" }, providers: [
2204
+ {
2205
+ provide: NG_VALUE_ACCESSOR,
2206
+ useExisting: forwardRef(() => DateInputComponent),
2207
+ multi: true,
2208
+ },
2209
+ ], ngImport: i0, template: "@if (mode() === 'date') {\n<mat-form-field class=\"kms-date-input__form-field\">\n <mat-label>{{ label() }}</mat-label>\n <input\n [id]=\"inputId\"\n matInput\n [matDatepicker]=\"picker\"\n [formControl]=\"innerControl\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"\n (hint() ? hintId : '') + (errorMessage() ? ' ' + errorId : '') || null\n \"\n (dateChange)=\"onDateChanged($event.value)\"\n (blur)=\"onTouched()\"\n (click)=\"picker.open()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') && picker.open()\n \"\n />\n <mat-datepicker\n #picker\n [startView]=\"computedStartView()\"\n (monthSelected)=\"onMonthSelected($event, picker)\"\n ></mat-datepicker>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n <kms-icon\n class=\"kms-date-input__icon\"\n icon=\"calendar\"\n [color]=\"Color.SECONDARY\"\n [size]=\"IconSizePx.XS\"\n matDatepickerToggleIcon\n ></kms-icon>\n </mat-datepicker-toggle>\n @if (hint()) {\n <mat-hint [id]=\"hintId\">{{ hint() }}</mat-hint>\n }\n <mat-error [id]=\"errorId\" role=\"alert\">{{ errorMessage() }}</mat-error>\n</mat-form-field>\n} @if (mode() === 'range') {\n<mat-form-field class=\"kms-date-input__form-field\">\n <mat-label>{{ label() }}</mat-label>\n <mat-date-range-input\n [rangePicker]=\"rangePicker\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n (click)=\"rangePicker.open()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') && rangePicker.open()\n \"\n >\n <input\n matStartDate\n [formControl]=\"rangeGroup.controls.start\"\n [placeholder]=\"placeholder() || 'Start date'\"\n [required]=\"required()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"\n (hint() ? hintId : '') + (errorMessage() ? ' ' + errorId : '') || null\n \"\n (dateChange)=\"onRangeChanged()\"\n (blur)=\"onTouched()\"\n />\n <input\n matEndDate\n [formControl]=\"rangeGroup.controls.end\"\n placeholder=\"End date\"\n (dateChange)=\"onRangeChanged()\"\n (blur)=\"onTouched()\"\n />\n </mat-date-range-input>\n <mat-date-range-picker #rangePicker></mat-date-range-picker>\n <mat-datepicker-toggle matIconSuffix [for]=\"rangePicker\">\n <kms-icon\n class=\"kms-date-input__icon\"\n icon=\"calendar\"\n [color]=\"Color.SECONDARY\"\n [size]=\"IconSizePx.XS\"\n matDatepickerToggleIcon\n ></kms-icon>\n </mat-datepicker-toggle>\n @if (hint()) {\n <mat-hint [id]=\"hintId\">{{ hint() }}</mat-hint>\n }\n <mat-error [id]=\"errorId\" role=\"alert\">{{ errorMessage() }}</mat-error>\n</mat-form-field>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$2.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: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i4.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: i4.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i4.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i4.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i4.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2210
+ }
2211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DateInputComponent, decorators: [{
2212
+ type: Component,
2213
+ args: [{ selector: 'kms-date-input', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2214
+ ReactiveFormsModule,
2215
+ MatFormFieldModule,
2216
+ MatInputModule,
2217
+ MatDatepickerModule,
2218
+ IconComponent,
2219
+ ], providers: [
2220
+ {
2221
+ provide: NG_VALUE_ACCESSOR,
2222
+ useExisting: forwardRef(() => DateInputComponent),
2223
+ multi: true,
2224
+ },
2225
+ ], template: "@if (mode() === 'date') {\n<mat-form-field class=\"kms-date-input__form-field\">\n <mat-label>{{ label() }}</mat-label>\n <input\n [id]=\"inputId\"\n matInput\n [matDatepicker]=\"picker\"\n [formControl]=\"innerControl\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"\n (hint() ? hintId : '') + (errorMessage() ? ' ' + errorId : '') || null\n \"\n (dateChange)=\"onDateChanged($event.value)\"\n (blur)=\"onTouched()\"\n (click)=\"picker.open()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') && picker.open()\n \"\n />\n <mat-datepicker\n #picker\n [startView]=\"computedStartView()\"\n (monthSelected)=\"onMonthSelected($event, picker)\"\n ></mat-datepicker>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n <kms-icon\n class=\"kms-date-input__icon\"\n icon=\"calendar\"\n [color]=\"Color.SECONDARY\"\n [size]=\"IconSizePx.XS\"\n matDatepickerToggleIcon\n ></kms-icon>\n </mat-datepicker-toggle>\n @if (hint()) {\n <mat-hint [id]=\"hintId\">{{ hint() }}</mat-hint>\n }\n <mat-error [id]=\"errorId\" role=\"alert\">{{ errorMessage() }}</mat-error>\n</mat-form-field>\n} @if (mode() === 'range') {\n<mat-form-field class=\"kms-date-input__form-field\">\n <mat-label>{{ label() }}</mat-label>\n <mat-date-range-input\n [rangePicker]=\"rangePicker\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n (click)=\"rangePicker.open()\"\n (keyup)=\"\n ($event.key === 'Enter' || $event.key === 'Space') && rangePicker.open()\n \"\n >\n <input\n matStartDate\n [formControl]=\"rangeGroup.controls.start\"\n [placeholder]=\"placeholder() || 'Start date'\"\n [required]=\"required()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"\n (hint() ? hintId : '') + (errorMessage() ? ' ' + errorId : '') || null\n \"\n (dateChange)=\"onRangeChanged()\"\n (blur)=\"onTouched()\"\n />\n <input\n matEndDate\n [formControl]=\"rangeGroup.controls.end\"\n placeholder=\"End date\"\n (dateChange)=\"onRangeChanged()\"\n (blur)=\"onTouched()\"\n />\n </mat-date-range-input>\n <mat-date-range-picker #rangePicker></mat-date-range-picker>\n <mat-datepicker-toggle matIconSuffix [for]=\"rangePicker\">\n <kms-icon\n class=\"kms-date-input__icon\"\n icon=\"calendar\"\n [color]=\"Color.SECONDARY\"\n [size]=\"IconSizePx.XS\"\n matDatepickerToggleIcon\n ></kms-icon>\n </mat-datepicker-toggle>\n @if (hint()) {\n <mat-hint [id]=\"hintId\">{{ hint() }}</mat-hint>\n }\n <mat-error [id]=\"errorId\" role=\"alert\">{{ errorMessage() }}</mat-error>\n</mat-form-field>\n}\n" }]
2226
+ }], propDecorators: { dateChange: [{ type: i0.Output, args: ["dateChange"] }], rangeChange: [{ type: i0.Output, args: ["rangeChange"] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], monthPicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "monthPicker", required: false }] }], startView: [{ type: i0.Input, args: [{ isSignal: true, alias: "startView", required: false }] }] } });
2227
+
2136
2228
  class EnumRadiogroupComponent extends FormControlParentComponent {
2137
2229
  constructor(renderer) {
2138
2230
  super(renderer);
@@ -2151,16 +2243,16 @@ class EnumRadiogroupComponent extends FormControlParentComponent {
2151
2243
  });
2152
2244
  super.ngOnInit();
2153
2245
  }
2154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnumRadiogroupComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
2155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: EnumRadiogroupComponent, isStandalone: false, selector: "kms-enum-radiogroup", inputs: { header: "header", optionsEnum: "optionsEnum", translationPrefix: "translationPrefix" }, providers: [
2246
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EnumRadiogroupComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
2247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: EnumRadiogroupComponent, isStandalone: false, selector: "kms-enum-radiogroup", inputs: { header: "header", optionsEnum: "optionsEnum", translationPrefix: "translationPrefix" }, providers: [
2156
2248
  {
2157
2249
  provide: NG_VALUE_ACCESSOR,
2158
2250
  useExisting: forwardRef(() => EnumRadiogroupComponent),
2159
2251
  multi: true,
2160
2252
  },
2161
- ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <div>{{ header }}</div>\n <mat-radio-group formControlName=\"enumData\" [disabled]=\"disabled\" #child>\n @for (choice of optionValues; track choice) {\n <mat-radio-button\n [value]=\"choice\"\n [checked]=\"value === choice\"\n >{{ translationPrefix + '.' + choice | translate }}</mat-radio-button\n >\n }\n </mat-radio-group>\n </form>\n", dependencies: [{ kind: "directive", type: i1$6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$6.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
2253
+ ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <div>{{ header }}</div>\n <mat-radio-group formControlName=\"enumData\" [disabled]=\"disabled\" #child>\n @for (choice of optionValues; track choice) {\n <mat-radio-button\n [value]=\"choice\"\n [checked]=\"value === choice\"\n >{{ translationPrefix + '.' + choice | translate }}</mat-radio-button\n >\n }\n </mat-radio-group>\n </form>\n", dependencies: [{ kind: "directive", type: i1$5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i4$1.TranslatePipe, name: "translate" }] }); }
2162
2254
  }
2163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnumRadiogroupComponent, decorators: [{
2255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EnumRadiogroupComponent, decorators: [{
2164
2256
  type: Component,
2165
2257
  args: [{ standalone: false, selector: 'kms-enum-radiogroup', providers: [
2166
2258
  {
@@ -2361,8 +2453,8 @@ class FileInputComponent {
2361
2453
  const element = ev.target;
2362
2454
  element.value = '';
2363
2455
  }
2364
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileInputComponent, deps: [{ token: i0.ApplicationRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
2365
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: FileInputComponent, isStandalone: false, selector: "kms-file-input", inputs: { label: "label", previewImage: "previewImage", allowRemove: "allowRemove", previewImageText: "previewImageText", maxSizeBytes: "maxSizeBytes", resizePixels: "resizePixels", acceptedFileMimetypes: "acceptedFileMimetypes" }, outputs: { formDataChanged: "formDataChanged" }, providers: [
2456
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FileInputComponent, deps: [{ token: i0.ApplicationRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
2457
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: FileInputComponent, isStandalone: false, selector: "kms-file-input", inputs: { label: "label", previewImage: "previewImage", allowRemove: "allowRemove", previewImageText: "previewImageText", maxSizeBytes: "maxSizeBytes", resizePixels: "resizePixels", acceptedFileMimetypes: "acceptedFileMimetypes" }, outputs: { formDataChanged: "formDataChanged" }, providers: [
2366
2458
  {
2367
2459
  provide: NG_VALUE_ACCESSOR,
2368
2460
  useExisting: forwardRef(() => FileInputComponent),
@@ -2373,9 +2465,9 @@ class FileInputComponent {
2373
2465
  useExisting: forwardRef(() => FileInputComponent),
2374
2466
  multi: true,
2375
2467
  },
2376
- ], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\" (change)=\"newImageLoading = true\" class=\"fileInput\">\n @if (form.value.Filename && previewImage) {\n <div>\n @if (newImageLoading) {\n <div>\n {{ 'file-input.loading' | translate }}\n </div>\n }\n @if (!newImageLoading) {\n <div>\n <div class=\"\">\n <div class=\"\">\n @if (\n form.value.ImageLink &&\n form.value.ImageLink !== '' &&\n !(form.value.ImageAsDataURL && form.value.ImageAsDataURL !== '')\n ) {\n <img\n [src]=\"form.value.ImageAsDataURL\"\n [src]=\"form.value.ImageLink\"\n style=\"height: 40px; width: fit-content\"\n />\n }\n @if (\n form.value.ImageAsDataURL && form.value.ImageAsDataURL !== ''\n ) {\n <img\n [src]=\"form.value.ImageAsDataURL\"\n style=\"height: 40px; width: fit-content\"\n />\n }\n </div>\n <div class=\"\">{{ form.value.Filename }}</div>\n <div class=\"\">\n @if (allowRemove) {\n <div (click)=\"removeFromList()\">\n <kms-icon\n icon=\"trash\"\n [size]=\"IconSizePx.XS\"\n iconClass=\"color-black\"\n ></kms-icon>\n {{ 'file-input.remove' }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (!previewImage) {\n <div>\n <div class=\"\">{{ form.value.Filename }}</div>\n </div>\n }\n\n <button\n (click)=\"selectImageOverlay()\"\n class=\"button-primary-font-color\"\n mat-stroked-button\n >\n <span>{{ label }}</span>\n </button>\n <input\n type=\"file\"\n [accept]=\"acceptedFileMimetypes\"\n style=\"display: none\"\n #fileInput\n (click)=\"clearInputValue($event)\"\n (change)=\"selectImage($event)\"\n />\n\n <input type=\"hidden\" formControlName=\"ImageIdent\" />\n <input type=\"hidden\" formControlName=\"ImageLink\" />\n <input type=\"hidden\" formControlName=\"Filename\" />\n <input type=\"hidden\" formControlName=\"ImageAsDataURL\" />\n <input type=\"hidden\" formControlName=\"Text\" />\n</form>\n", styles: [""], dependencies: [{ kind: "component", type: i2$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
2468
+ ], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\" (change)=\"newImageLoading = true\" class=\"fileInput\">\n @if (form.value.Filename && previewImage) {\n <div>\n @if (newImageLoading) {\n <div>\n {{ 'file-input.loading' | translate }}\n </div>\n }\n @if (!newImageLoading) {\n <div>\n <div class=\"\">\n <div class=\"\">\n @if (\n form.value.ImageLink &&\n form.value.ImageLink !== '' &&\n !(form.value.ImageAsDataURL && form.value.ImageAsDataURL !== '')\n ) {\n <img\n [src]=\"form.value.ImageAsDataURL\"\n [src]=\"form.value.ImageLink\"\n style=\"height: 40px; width: fit-content\"\n />\n }\n @if (\n form.value.ImageAsDataURL && form.value.ImageAsDataURL !== ''\n ) {\n <img\n [src]=\"form.value.ImageAsDataURL\"\n style=\"height: 40px; width: fit-content\"\n />\n }\n </div>\n <div class=\"\">{{ form.value.Filename }}</div>\n <div class=\"\">\n @if (allowRemove) {\n <div (click)=\"removeFromList()\">\n <kms-icon\n icon=\"trash\"\n [size]=\"IconSizePx.XS\"\n iconClass=\"color-black\"\n ></kms-icon>\n {{ 'file-input.remove' }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (!previewImage) {\n <div>\n <div class=\"\">{{ form.value.Filename }}</div>\n </div>\n }\n\n <button\n (click)=\"selectImageOverlay()\"\n class=\"button-primary-font-color\"\n mat-stroked-button\n >\n <span>{{ label }}</span>\n </button>\n <input\n type=\"file\"\n [accept]=\"acceptedFileMimetypes\"\n style=\"display: none\"\n #fileInput\n (click)=\"clearInputValue($event)\"\n (change)=\"selectImage($event)\"\n />\n\n <input type=\"hidden\" formControlName=\"ImageIdent\" />\n <input type=\"hidden\" formControlName=\"ImageLink\" />\n <input type=\"hidden\" formControlName=\"Filename\" />\n <input type=\"hidden\" formControlName=\"ImageAsDataURL\" />\n <input type=\"hidden\" formControlName=\"Text\" />\n</form>\n", styles: [""], dependencies: [{ kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }, { kind: "pipe", type: i4$1.TranslatePipe, name: "translate" }] }); }
2377
2469
  }
2378
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FileInputComponent, decorators: [{
2470
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FileInputComponent, decorators: [{
2379
2471
  type: Component,
2380
2472
  args: [{ standalone: false, selector: 'kms-file-input', providers: [
2381
2473
  {
@@ -2448,8 +2540,8 @@ class FlyoutComponent {
2448
2540
  setDropdownListHeight(contentHeight) {
2449
2541
  this.targetHeight = `${contentHeight}px`;
2450
2542
  }
2451
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FlyoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2452
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: FlyoutComponent, isStandalone: false, selector: "kms-flyout", inputs: { icon: "icon", headerCssClass: "headerCssClass", bodyCssClass: "bodyCssClass", headerTitle: "headerTitle", headerText: "headerText", hasButtonForMore: "hasButtonForMore", moreText: "moreText", lessText: "lessText" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }, { propertyName: "flyoutHeader", first: true, predicate: ["flyoutHeader"], descendants: true }], ngImport: i0, template: "<div class=\"flyout\" [ngClass]=\"{ 'is-active': isDropdownOpened }\">\n <div\n class=\"flyout-header\"\n (click)=\"toggleDropdownHeader()\"\n [ngClass]=\"headerCssClass\"\n >\n <span [innerHtml]=\"headerTitle | kmsSafeHtml\"></span>\n <span [innerHtml]=\"headerText | kmsSafeHtml\"></span>\n\n <ng-content select=\"[header]\"></ng-content>\n\n @if (hasButtonForMore) {\n <div\n (click)=\"toggleDropdown()\"\n class=\"flyout-header-more\"\n >\n @if (!isDropdownOpened) {\n <span>\n {{ moreText }}\n <kms-icon [icon]=\"'chevron-down'\" [size]=\"16\"> </kms-icon>\n </span>\n }\n @if (isDropdownOpened) {\n <span>\n {{ lessText }}\n <kms-icon [icon]=\"'chevron-top'\" [size]=\"16\"> </kms-icon>\n </span>\n }\n </div>\n }\n </div>\n <div\n class=\"flyout-body\"\n [ngClass]=\"bodyCssClass\"\n tabindex=\"0\"\n [@dropdownAnimation]=\"{\n value: isDropdownOpened,\n params: { targetHeight: targetHeight, animationTime: '500' }\n }\"\n getMaxHeight=\"inner\"\n (sumOfHeight)=\"setDropdownListHeight($event)\"\n #flyoutHeader\n >\n @if (isDropdownOpened || !hasButtonForMore) {\n <div class=\"inner\" #content>\n <ng-content></ng-content>\n </div>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: GetMaxHeightDirective, selector: "[getMaxHeight]", inputs: ["getMaxHeight"], outputs: ["maxHeightChanged", "sumOfHeight"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }, { kind: "pipe", type: SafeHtmlPipe, name: "kmsSafeHtml" }], animations: [
2543
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FlyoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2544
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: FlyoutComponent, isStandalone: false, selector: "kms-flyout", inputs: { icon: "icon", headerCssClass: "headerCssClass", bodyCssClass: "bodyCssClass", headerTitle: "headerTitle", headerText: "headerText", hasButtonForMore: "hasButtonForMore", moreText: "moreText", lessText: "lessText" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }, { propertyName: "flyoutHeader", first: true, predicate: ["flyoutHeader"], descendants: true }], ngImport: i0, template: "<div class=\"flyout\" [ngClass]=\"{ 'is-active': isDropdownOpened }\">\n <div\n class=\"flyout-header\"\n (click)=\"toggleDropdownHeader()\"\n [ngClass]=\"headerCssClass\"\n >\n <span [innerHtml]=\"headerTitle | kmsSafeHtml\"></span>\n <span [innerHtml]=\"headerText | kmsSafeHtml\"></span>\n\n <ng-content select=\"[header]\"></ng-content>\n\n @if (hasButtonForMore) {\n <div\n (click)=\"toggleDropdown()\"\n class=\"flyout-header-more\"\n >\n @if (!isDropdownOpened) {\n <span>\n {{ moreText }}\n <kms-icon [icon]=\"'chevron-down'\" [size]=\"16\"> </kms-icon>\n </span>\n }\n @if (isDropdownOpened) {\n <span>\n {{ lessText }}\n <kms-icon [icon]=\"'chevron-top'\" [size]=\"16\"> </kms-icon>\n </span>\n }\n </div>\n }\n </div>\n <div\n class=\"flyout-body\"\n [ngClass]=\"bodyCssClass\"\n tabindex=\"0\"\n [@dropdownAnimation]=\"{\n value: isDropdownOpened,\n params: { targetHeight: targetHeight, animationTime: '500' }\n }\"\n getMaxHeight=\"inner\"\n (sumOfHeight)=\"setDropdownListHeight($event)\"\n #flyoutHeader\n >\n @if (isDropdownOpened || !hasButtonForMore) {\n <div class=\"inner\" #content>\n <ng-content></ng-content>\n </div>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: GetMaxHeightDirective, selector: "[getMaxHeight]", inputs: ["getMaxHeight"], outputs: ["maxHeightChanged", "sumOfHeight"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }, { kind: "pipe", type: SafeHtmlPipe, name: "kmsSafeHtml" }], animations: [
2453
2545
  trigger('dropdownAnimation', [
2454
2546
  state('true', style({
2455
2547
  height: '{{targetHeight}}',
@@ -2473,7 +2565,7 @@ class FlyoutComponent {
2473
2565
  ]),
2474
2566
  ] }); }
2475
2567
  }
2476
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FlyoutComponent, decorators: [{
2568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FlyoutComponent, decorators: [{
2477
2569
  type: Component,
2478
2570
  args: [{ standalone: false, selector: 'kms-flyout', animations: [
2479
2571
  trigger('dropdownAnimation', [
@@ -2586,10 +2678,10 @@ class ImageSliderComponent {
2586
2678
  this.updateSwipers();
2587
2679
  }
2588
2680
  }
2589
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ImageSliderComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
2590
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ImageSliderComponent, isStandalone: false, selector: "kms-image-slider", inputs: { slides: "slides", editMode: "editMode", imagesToSave: "imagesToSave" }, outputs: { deleteImageEvent: "deleteImageEvent", orderChanged: "orderChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"image-slider-container\">\n <swiper-container\n class=\"swiper-main-view-container\"\n thumbs-swiper=\".swiper-carousel-container\"\n >\n @for (slide of slides; track slide) {\n <swiper-slide>\n <img [src]=\"slide\" loading=\"lazy\" />\n </swiper-slide>\n }\n </swiper-container>\n\n <swiper-container\n class=\"swiper-carousel-container\"\n thumbsSlider=\"\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onOrderChanged($event)\"\n >\n @for (slide of slides; track slide; let index = $index) {\n <swiper-slide\n [class.swiper-slide-default]=\"index === 0 && editMode\"\n >\n @if (editMode) {\n <div>\n <button cdkDrag class=\"drag-button\" mat-menu-item></button>\n <button\n class=\"delete-button\"\n mat-menu-item\n (click)=\"deleteImage(index)\"\n >\n <kms-icon icon=\"trash\" [size]=\"15\"></kms-icon>\n </button>\n </div>\n }\n <img [src]=\"slide\" loading=\"lazy\" />\n @if (index === 0 && editMode) {\n <div class=\"swiper-slide-default-text\">\n {{ 'common.defaultImage' | translate }}\n </div>\n }\n </swiper-slide>\n }\n </swiper-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1$9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1$9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i2$3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
2681
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageSliderComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
2682
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ImageSliderComponent, isStandalone: false, selector: "kms-image-slider", inputs: { slides: "slides", editMode: "editMode", imagesToSave: "imagesToSave" }, outputs: { deleteImageEvent: "deleteImageEvent", orderChanged: "orderChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"image-slider-container\">\n <swiper-container\n class=\"swiper-main-view-container\"\n thumbs-swiper=\".swiper-carousel-container\"\n >\n @for (slide of slides; track slide) {\n <swiper-slide>\n <img [src]=\"slide\" loading=\"lazy\" />\n </swiper-slide>\n }\n </swiper-container>\n\n <swiper-container\n class=\"swiper-carousel-container\"\n thumbsSlider=\"\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onOrderChanged($event)\"\n >\n @for (slide of slides; track slide; let index = $index) {\n <swiper-slide\n [class.swiper-slide-default]=\"index === 0 && editMode\"\n >\n @if (editMode) {\n <div>\n <button cdkDrag class=\"drag-button\" mat-menu-item></button>\n <button\n class=\"delete-button\"\n mat-menu-item\n (click)=\"deleteImage(index)\"\n >\n <kms-icon icon=\"trash\" [size]=\"15\"></kms-icon>\n </button>\n </div>\n }\n <img [src]=\"slide\" loading=\"lazy\" />\n @if (index === 0 && editMode) {\n <div class=\"swiper-slide-default-text\">\n {{ 'common.defaultImage' | translate }}\n </div>\n }\n </swiper-slide>\n }\n </swiper-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1$8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1$8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i2$3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }, { kind: "pipe", type: i4$1.TranslatePipe, name: "translate" }] }); }
2591
2683
  }
2592
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ImageSliderComponent, decorators: [{
2684
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageSliderComponent, decorators: [{
2593
2685
  type: Component,
2594
2686
  args: [{ standalone: false, selector: 'kms-image-slider', template: "<div class=\"image-slider-container\">\n <swiper-container\n class=\"swiper-main-view-container\"\n thumbs-swiper=\".swiper-carousel-container\"\n >\n @for (slide of slides; track slide) {\n <swiper-slide>\n <img [src]=\"slide\" loading=\"lazy\" />\n </swiper-slide>\n }\n </swiper-container>\n\n <swiper-container\n class=\"swiper-carousel-container\"\n thumbsSlider=\"\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onOrderChanged($event)\"\n >\n @for (slide of slides; track slide; let index = $index) {\n <swiper-slide\n [class.swiper-slide-default]=\"index === 0 && editMode\"\n >\n @if (editMode) {\n <div>\n <button cdkDrag class=\"drag-button\" mat-menu-item></button>\n <button\n class=\"delete-button\"\n mat-menu-item\n (click)=\"deleteImage(index)\"\n >\n <kms-icon icon=\"trash\" [size]=\"15\"></kms-icon>\n </button>\n </div>\n }\n <img [src]=\"slide\" loading=\"lazy\" />\n @if (index === 0 && editMode) {\n <div class=\"swiper-slide-default-text\">\n {{ 'common.defaultImage' | translate }}\n </div>\n }\n </swiper-slide>\n }\n </swiper-container>\n</div>\n" }]
2595
2687
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { slides: [{
@@ -2623,10 +2715,10 @@ class KMSAccordionItemComponent {
2623
2715
  this.panelOpenState = false;
2624
2716
  }
2625
2717
  ngOnInit() { }
2626
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KMSAccordionItemComponent, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
2627
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: KMSAccordionItemComponent, isStandalone: false, selector: "kms-accordion-item", inputs: { showAsCard: "showAsCard", isSmall: "isSmall", expanded: "expanded", itemTitle: "itemTitle" }, ngImport: i0, template: "<mat-expansion-panel\n class=\"kms-accordion\"\n [ngClass]=\"{\n 'kms-accordion--flat': !showAsCard,\n 'kms-accordion--small': isSmall\n }\"\n (opened)=\"panelOpenState = true\"\n (closed)=\"panelOpenState = false\"\n [expanded]=\"expanded\"\n hideToggle=\"true\"\n >\n <mat-expansion-panel-header class=\"kms-accordion__header\">\n <mat-panel-title class=\"mat-subheading-2 kms-accordion__title\">\n <div [innerHtml]=\"itemTitleTrustHtml\"></div>\n <ng-content select=\"[itemTitleElement]\"></ng-content>\n </mat-panel-title>\n <div class=\"kms-accordion__header-icon-wrapper\">\n @if (!panelOpenState) {\n <kms-icon\n icon=\"ic_plus\"\n [color]=\"Color.PRIMARY\"\n [size]=\"isSmall ? 16 : 22\"\n ></kms-icon>\n }\n @if (panelOpenState) {\n <kms-icon\n icon=\"ic_minus\"\n [color]=\"Color.PRIMARY\"\n [size]=\"isSmall ? 16 : 22\"\n ></kms-icon>\n }\n </div>\n </mat-expansion-panel-header>\n <ng-content></ng-content>\n</mat-expansion-panel>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3$2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3$2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3$2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
2718
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KMSAccordionItemComponent, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
2719
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: KMSAccordionItemComponent, isStandalone: false, selector: "kms-accordion-item", inputs: { showAsCard: "showAsCard", isSmall: "isSmall", expanded: "expanded", itemTitle: "itemTitle" }, ngImport: i0, template: "<mat-expansion-panel\n class=\"kms-accordion\"\n [ngClass]=\"{\n 'kms-accordion--flat': !showAsCard,\n 'kms-accordion--small': isSmall\n }\"\n (opened)=\"panelOpenState = true\"\n (closed)=\"panelOpenState = false\"\n [expanded]=\"expanded\"\n hideToggle=\"true\"\n >\n <mat-expansion-panel-header class=\"kms-accordion__header\">\n <mat-panel-title class=\"mat-subheading-2 kms-accordion__title\">\n <div [innerHtml]=\"itemTitleTrustHtml\"></div>\n <ng-content select=\"[itemTitleElement]\"></ng-content>\n </mat-panel-title>\n <div class=\"kms-accordion__header-icon-wrapper\">\n @if (!panelOpenState) {\n <kms-icon\n icon=\"ic_plus\"\n [color]=\"Color.PRIMARY\"\n [size]=\"isSmall ? 16 : 22\"\n ></kms-icon>\n }\n @if (panelOpenState) {\n <kms-icon\n icon=\"ic_minus\"\n [color]=\"Color.PRIMARY\"\n [size]=\"isSmall ? 16 : 22\"\n ></kms-icon>\n }\n </div>\n </mat-expansion-panel-header>\n <ng-content></ng-content>\n</mat-expansion-panel>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3$3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3$3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3$3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
2628
2720
  }
2629
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KMSAccordionItemComponent, decorators: [{
2721
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KMSAccordionItemComponent, decorators: [{
2630
2722
  type: Component,
2631
2723
  args: [{ standalone: false, selector: 'kms-accordion-item', template: "<mat-expansion-panel\n class=\"kms-accordion\"\n [ngClass]=\"{\n 'kms-accordion--flat': !showAsCard,\n 'kms-accordion--small': isSmall\n }\"\n (opened)=\"panelOpenState = true\"\n (closed)=\"panelOpenState = false\"\n [expanded]=\"expanded\"\n hideToggle=\"true\"\n >\n <mat-expansion-panel-header class=\"kms-accordion__header\">\n <mat-panel-title class=\"mat-subheading-2 kms-accordion__title\">\n <div [innerHtml]=\"itemTitleTrustHtml\"></div>\n <ng-content select=\"[itemTitleElement]\"></ng-content>\n </mat-panel-title>\n <div class=\"kms-accordion__header-icon-wrapper\">\n @if (!panelOpenState) {\n <kms-icon\n icon=\"ic_plus\"\n [color]=\"Color.PRIMARY\"\n [size]=\"isSmall ? 16 : 22\"\n ></kms-icon>\n }\n @if (panelOpenState) {\n <kms-icon\n icon=\"ic_minus\"\n [color]=\"Color.PRIMARY\"\n [size]=\"isSmall ? 16 : 22\"\n ></kms-icon>\n }\n </div>\n </mat-expansion-panel-header>\n <ng-content></ng-content>\n</mat-expansion-panel>\n" }]
2632
2724
  }], ctorParameters: () => [{ type: i1$1.DomSanitizer }], propDecorators: { showAsCard: [{
@@ -2646,6 +2738,7 @@ class NumericInputComponent {
2646
2738
  constructor() {
2647
2739
  this.disabled = model(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
2648
2740
  this.min = input(0, ...(ngDevMode ? [{ debugName: "min" }] : []));
2741
+ this.label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
2649
2742
  this.numericValue = signal(0, ...(ngDevMode ? [{ debugName: "numericValue" }] : []));
2650
2743
  this.touched = signal(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
2651
2744
  this.Color = Color;
@@ -2695,16 +2788,16 @@ class NumericInputComponent {
2695
2788
  registerOnTouched(onTouched) {
2696
2789
  this.onTouched = onTouched;
2697
2790
  }
2698
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NumericInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2699
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.15", type: NumericInputComponent, isStandalone: false, selector: "kms-numeric-input", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange" }, providers: [
2791
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NumericInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2792
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: NumericInputComponent, isStandalone: false, selector: "kms-numeric-input", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange" }, providers: [
2700
2793
  {
2701
2794
  provide: NG_VALUE_ACCESSOR,
2702
2795
  useExisting: forwardRef(() => NumericInputComponent),
2703
2796
  multi: true,
2704
2797
  },
2705
- ], ngImport: i0, template: "<div class=\"numeric-input\" [ngClass]=\"{ disabled: disabled() }\">\n <kms-icon\n id=\"numeric-input-minus\"\n class=\"numeric-input__icon\"\n aria-hidden=\"true\"\n icon=\"ic_minus\"\n [color]=\"disabled() ? Color.DISABLED : Color.SECONDARY\"\n [size]=\"10\"\n (click)=\"minus()\"\n (keyup)=\"($event.key === 'Enter' || $event.key === 'Space') && minus()\"\n >\n </kms-icon>\n <strong>{{ numericValue() }}</strong>\n <kms-icon\n id=\"numeric-input-plus\"\n class=\"numeric-input__icon\"\n aria-hidden=\"true\"\n icon=\"ic_plus\"\n [color]=\"disabled() ? Color.DISABLED : Color.SECONDARY\"\n [size]=\"10\"\n (click)=\"add()\"\n (keyup)=\"($event.key === 'Enter' || $event.key === 'Space') && add()\"\n >\n </kms-icon>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
2798
+ ], ngImport: i0, template: "@if (label()) {\n <mat-label>{{ label() }}</mat-label>\n}\n<div class=\"numeric-input\" [ngClass]=\"{ disabled: disabled() }\">\n <kms-icon\n id=\"numeric-input-minus\"\n class=\"numeric-input__icon\"\n aria-hidden=\"true\"\n icon=\"ic_minus\"\n [color]=\"disabled() ? Color.DISABLED : Color.SECONDARY\"\n [size]=\"10\"\n (click)=\"minus()\"\n (keyup)=\"($event.key === 'Enter' || $event.key === 'Space') && minus()\"\n >\n </kms-icon>\n <strong>{{ numericValue() }}</strong>\n <kms-icon\n id=\"numeric-input-plus\"\n class=\"numeric-input__icon\"\n aria-hidden=\"true\"\n icon=\"ic_plus\"\n [color]=\"disabled() ? Color.DISABLED : Color.SECONDARY\"\n [size]=\"10\"\n (click)=\"add()\"\n (keyup)=\"($event.key === 'Enter' || $event.key === 'Space') && add()\"\n >\n </kms-icon>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
2706
2799
  }
2707
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: NumericInputComponent, decorators: [{
2800
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NumericInputComponent, decorators: [{
2708
2801
  type: Component,
2709
2802
  args: [{ standalone: false, selector: 'kms-numeric-input', providers: [
2710
2803
  {
@@ -2712,8 +2805,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
2712
2805
  useExisting: forwardRef(() => NumericInputComponent),
2713
2806
  multi: true,
2714
2807
  },
2715
- ], template: "<div class=\"numeric-input\" [ngClass]=\"{ disabled: disabled() }\">\n <kms-icon\n id=\"numeric-input-minus\"\n class=\"numeric-input__icon\"\n aria-hidden=\"true\"\n icon=\"ic_minus\"\n [color]=\"disabled() ? Color.DISABLED : Color.SECONDARY\"\n [size]=\"10\"\n (click)=\"minus()\"\n (keyup)=\"($event.key === 'Enter' || $event.key === 'Space') && minus()\"\n >\n </kms-icon>\n <strong>{{ numericValue() }}</strong>\n <kms-icon\n id=\"numeric-input-plus\"\n class=\"numeric-input__icon\"\n aria-hidden=\"true\"\n icon=\"ic_plus\"\n [color]=\"disabled() ? Color.DISABLED : Color.SECONDARY\"\n [size]=\"10\"\n (click)=\"add()\"\n (keyup)=\"($event.key === 'Enter' || $event.key === 'Space') && add()\"\n >\n </kms-icon>\n</div>\n" }]
2716
- }], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }] } });
2808
+ ], template: "@if (label()) {\n <mat-label>{{ label() }}</mat-label>\n}\n<div class=\"numeric-input\" [ngClass]=\"{ disabled: disabled() }\">\n <kms-icon\n id=\"numeric-input-minus\"\n class=\"numeric-input__icon\"\n aria-hidden=\"true\"\n icon=\"ic_minus\"\n [color]=\"disabled() ? Color.DISABLED : Color.SECONDARY\"\n [size]=\"10\"\n (click)=\"minus()\"\n (keyup)=\"($event.key === 'Enter' || $event.key === 'Space') && minus()\"\n >\n </kms-icon>\n <strong>{{ numericValue() }}</strong>\n <kms-icon\n id=\"numeric-input-plus\"\n class=\"numeric-input__icon\"\n aria-hidden=\"true\"\n icon=\"ic_plus\"\n [color]=\"disabled() ? Color.DISABLED : Color.SECONDARY\"\n [size]=\"10\"\n (click)=\"add()\"\n (keyup)=\"($event.key === 'Enter' || $event.key === 'Space') && add()\"\n >\n </kms-icon>\n</div>\n" }]
2809
+ }], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
2717
2810
 
2718
2811
  /**
2719
2812
  * @copyright KMS GmbH
@@ -2817,8 +2910,8 @@ class PasswordComponent {
2817
2910
  }
2818
2911
  return isEmpty(result) ? null : result;
2819
2912
  }
2820
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2821
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PasswordComponent, isStandalone: false, selector: "kms-password", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, withStrength: { classPropertyName: "withStrength", publicName: "withStrength", isSignal: true, isRequired: false, transformFunction: null }, lowerCaseCriteriaMsg: { classPropertyName: "lowerCaseCriteriaMsg", publicName: "lowerCaseCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, upperCaseCriteriaMsg: { classPropertyName: "upperCaseCriteriaMsg", publicName: "upperCaseCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, numberCriteriaMsg: { classPropertyName: "numberCriteriaMsg", publicName: "numberCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, specialCharCriteriaMsg: { classPropertyName: "specialCharCriteriaMsg", publicName: "specialCharCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, minCharsCriteriaMsg: { classPropertyName: "minCharsCriteriaMsg", publicName: "minCharsCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change", submit: "submit" }, providers: [
2913
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2914
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: PasswordComponent, isStandalone: false, selector: "kms-password", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, withStrength: { classPropertyName: "withStrength", publicName: "withStrength", isSignal: true, isRequired: false, transformFunction: null }, lowerCaseCriteriaMsg: { classPropertyName: "lowerCaseCriteriaMsg", publicName: "lowerCaseCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, upperCaseCriteriaMsg: { classPropertyName: "upperCaseCriteriaMsg", publicName: "upperCaseCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, numberCriteriaMsg: { classPropertyName: "numberCriteriaMsg", publicName: "numberCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, specialCharCriteriaMsg: { classPropertyName: "specialCharCriteriaMsg", publicName: "specialCharCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null }, minCharsCriteriaMsg: { classPropertyName: "minCharsCriteriaMsg", publicName: "minCharsCriteriaMsg", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change", submit: "submit" }, providers: [
2822
2915
  {
2823
2916
  provide: NG_VALUE_ACCESSOR,
2824
2917
  useExisting: forwardRef(() => PasswordComponent),
@@ -2829,9 +2922,9 @@ class PasswordComponent {
2829
2922
  useExisting: forwardRef(() => PasswordComponent),
2830
2923
  multi: true,
2831
2924
  },
2832
- ], ngImport: i0, template: "<mat-form-field class=\"kms-password__form-field\">\n <mat-label>{{ label() }}</mat-label>\n <input\n [type]=\"showPassword() ? 'text' : 'password'\"\n matInput\n (input)=\"valueChanged($event)\"\n [disabled]=\"disabled()\"\n (keypress)=\"keypress($event)\"\n #password=\"matInput\"\n />\n @if (showPassword()) {\n <kms-icon\n class=\"kms-time-input__suffix\"\n matSuffix\n icon=\"ic_eye\"\n [size]=\"IconSizePx.XS\"\n (click)=\"showPassword.set(false)\"\n (mousedown)=\"eyeIconIsBeingPressed.set(true)\"\n (mouseup)=\"eyeIconIsBeingPressed.set(false)\"\n ></kms-icon>\n } @else {\n <kms-icon\n class=\"kms-time-input__suffix\"\n matSuffix\n icon=\"ic_eye_active\"\n [size]=\"IconSizePx.XS\"\n (click)=\"showPassword.set(true)\"\n (mousedown)=\"eyeIconIsBeingPressed.set(true)\"\n (mouseup)=\"eyeIconIsBeingPressed.set(false)\"\n ></kms-icon>\n }\n</mat-form-field>\n\n@if ((eyeIconIsBeingPressed() || password.focused) && withStrength()) {\n<mat-card appearance=\"outlined\">\n <mat-card-content class=\"kms-password__card\">\n <mat-list role=\"list\">\n @for (validation of validations(); track validation) {\n <mat-list-item role=\"listitem\">\n <div class=\"kms-password__strength-item\">\n @if(validation.isValid()) {\n <kms-icon\n [size]=\"IconSizePx.XS\"\n icon=\"ic_check\"\n iconClass=\"color-success\"\n ></kms-icon>\n }@else {\n <kms-icon\n [size]=\"IconSizePx.XS\"\n icon=\"ic_abbrechen\"\n iconClass=\"color-warn\"\n ></kms-icon>\n } {{ validation.text() }}\n </div></mat-list-item\n >\n }\n </mat-list>\n </mat-card-content>\n</mat-card>\n}\n", dependencies: [{ kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i2$2.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: "component", type: i3$3.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i3$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i4$1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4$1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
2925
+ ], ngImport: i0, template: "<mat-form-field class=\"kms-password__form-field\">\n <mat-label>{{ label() }}</mat-label>\n <input\n [type]=\"showPassword() ? 'text' : 'password'\"\n matInput\n (input)=\"valueChanged($event)\"\n [disabled]=\"disabled()\"\n (keypress)=\"keypress($event)\"\n #password=\"matInput\"\n />\n @if (showPassword()) {\n <kms-icon\n class=\"kms-time-input__suffix\"\n matSuffix\n icon=\"ic_eye\"\n [size]=\"IconSizePx.XS\"\n (click)=\"showPassword.set(false)\"\n (mousedown)=\"eyeIconIsBeingPressed.set(true)\"\n (mouseup)=\"eyeIconIsBeingPressed.set(false)\"\n ></kms-icon>\n } @else {\n <kms-icon\n class=\"kms-time-input__suffix\"\n matSuffix\n icon=\"ic_eye_active\"\n [size]=\"IconSizePx.XS\"\n (click)=\"showPassword.set(true)\"\n (mousedown)=\"eyeIconIsBeingPressed.set(true)\"\n (mouseup)=\"eyeIconIsBeingPressed.set(false)\"\n ></kms-icon>\n }\n</mat-form-field>\n\n@if ((eyeIconIsBeingPressed() || password.focused) && withStrength()) {\n<mat-card appearance=\"outlined\">\n <mat-card-content class=\"kms-password__card\">\n <mat-list role=\"list\">\n @for (validation of validations(); track validation) {\n <mat-list-item role=\"listitem\">\n <div class=\"kms-password__strength-item\">\n @if(validation.isValid()) {\n <kms-icon\n [size]=\"IconSizePx.XS\"\n icon=\"ic_check\"\n iconClass=\"color-success\"\n ></kms-icon>\n }@else {\n <kms-icon\n [size]=\"IconSizePx.XS\"\n icon=\"ic_abbrechen\"\n iconClass=\"color-warn\"\n ></kms-icon>\n } {{ validation.text() }}\n </div></mat-list-item\n >\n }\n </mat-list>\n </mat-card-content>\n</mat-card>\n}\n", dependencies: [{ kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i3$2.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: "component", type: i3$4.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i3$4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i4$2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4$2.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
2833
2926
  }
2834
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PasswordComponent, decorators: [{
2927
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PasswordComponent, decorators: [{
2835
2928
  type: Component,
2836
2929
  args: [{ standalone: false, selector: 'kms-password', providers: [
2837
2930
  {
@@ -2878,16 +2971,16 @@ class RadioGroupComponent {
2878
2971
  this.onChange(value);
2879
2972
  this.onTouched();
2880
2973
  }
2881
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2882
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: RadioGroupComponent, isStandalone: false, selector: "kms-radiogroup", inputs: { options: "options", disabled: "disabled", value: "value", infoText: "infoText", color: "color", size: "size", direction: "direction" }, providers: [
2974
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2975
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: RadioGroupComponent, isStandalone: false, selector: "kms-radiogroup", inputs: { options: "options", disabled: "disabled", value: "value", infoText: "infoText", color: "color", size: "size", direction: "direction" }, providers: [
2883
2976
  {
2884
2977
  provide: NG_VALUE_ACCESSOR,
2885
2978
  useExisting: forwardRef(() => RadioGroupComponent),
2886
2979
  multi: true,
2887
2980
  },
2888
- ], ngImport: i0, template: "@if (options && options.length > 0) {\n<mat-radio-group\n class=\"radiogroup\"\n [value]=\"value\"\n (change)=\"handleChange($event.value)\"\n [disabled]=\"disabled\"\n [ngStyle]=\"{ 'flex-direction': direction }\"\n>\n @if (infoText) {\n <kms-tooltip-icon\n [class.margin-left]=\"direction == 'column'\"\n [tooltipText]=\"infoText\"\n ></kms-tooltip-icon>\n } @for (option of options; track $index) {\n <div class=\"radiobutton-container\">\n <kms-radiobutton\n [label]=\"option.Text\"\n [value]=\"option.Value\"\n [checked]=\"value === option.Value\"\n [disabled]=\"disabled || option.Disabled\"\n [size]=\"size\"\n [color]=\"color\"\n ></kms-radiobutton>\n @if (option.InfoText) {\n <kms-tooltip-icon [tooltipText]=\"option.InfoText\"></kms-tooltip-icon>\n }\n </div>\n }\n</mat-radio-group>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: RadioButtonComponent, selector: "kms-radiobutton", inputs: ["label", "checked", "disabled", "value", "size", "color"], outputs: ["onChange"] }, { kind: "component", type: TooltipIconComponent, selector: "kms-tooltip-icon", inputs: ["tooltipText", "placement", "delay", "iconSize", "tooltipAlwaysVisible", "icon"] }] }); }
2981
+ ], ngImport: i0, template: "@if (options && options.length > 0) {\n<mat-radio-group\n class=\"radiogroup\"\n [value]=\"value\"\n (change)=\"handleChange($event.value)\"\n [disabled]=\"disabled\"\n [ngStyle]=\"{ 'flex-direction': direction }\"\n>\n @if (infoText) {\n <kms-tooltip-icon\n [class.margin-left]=\"direction == 'column'\"\n [tooltipText]=\"infoText\"\n ></kms-tooltip-icon>\n } @for (option of options; track $index) {\n <div class=\"radiobutton-container\">\n <kms-radiobutton\n [label]=\"option.Text\"\n [value]=\"option.Value\"\n [checked]=\"value === option.Value\"\n [disabled]=\"disabled || option.Disabled\"\n [size]=\"size\"\n [color]=\"color\"\n ></kms-radiobutton>\n @if (option.InfoText) {\n <kms-tooltip-icon [tooltipText]=\"option.InfoText\"></kms-tooltip-icon>\n }\n </div>\n }\n</mat-radio-group>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: RadioButtonComponent, selector: "kms-radiobutton", inputs: ["label", "checked", "disabled", "value", "size", "color"], outputs: ["onChange"] }, { kind: "component", type: TooltipIconComponent, selector: "kms-tooltip-icon", inputs: ["tooltipText", "placement", "delay", "iconSize", "tooltipAlwaysVisible", "icon"] }] }); }
2889
2982
  }
2890
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: RadioGroupComponent, decorators: [{
2983
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RadioGroupComponent, decorators: [{
2891
2984
  type: Component,
2892
2985
  args: [{ standalone: false, selector: 'kms-radiogroup', providers: [
2893
2986
  {
@@ -2941,16 +3034,16 @@ class SalutationDropdownComponent extends FormControlParentComponent {
2941
3034
  });
2942
3035
  super.ngOnInit();
2943
3036
  }
2944
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SalutationDropdownComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
2945
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: SalutationDropdownComponent, isStandalone: false, selector: "kms-salutation-dropdown", inputs: { placeholder: "placeholder" }, providers: [
3037
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SalutationDropdownComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
3038
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SalutationDropdownComponent, isStandalone: false, selector: "kms-salutation-dropdown", inputs: { placeholder: "placeholder" }, providers: [
2946
3039
  {
2947
3040
  provide: NG_VALUE_ACCESSOR,
2948
3041
  useExisting: forwardRef(() => SalutationDropdownComponent),
2949
3042
  multi: true,
2950
3043
  },
2951
- ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"row\">\n <mat-form-field class=\"col\">\n <mat-select\n disableOptionCentering\n formControlName=\"salut\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n #child\n >\n <mat-option [value]=\"SalutationEnum.NOT_SPECIFIED\">{{\n 'general.salutation.' + Object.keys(SalutationEnum)[0]?.toLowerCase()\n | translate\n }}</mat-option>\n <mat-option [value]=\"SalutationEnum.MALE\">{{\n 'general.salutation.' + Object.keys(SalutationEnum)[1]?.toLowerCase()\n | translate\n }}</mat-option>\n <mat-option [value]=\"SalutationEnum.FEMALE\">{{\n 'general.salutation.' + Object.keys(SalutationEnum)[2]?.toLowerCase()\n | translate\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n</form>\n", dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i3.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: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
3044
+ ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"row\">\n <mat-form-field class=\"col\">\n <mat-select\n disableOptionCentering\n formControlName=\"salut\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n #child\n >\n <mat-option [value]=\"SalutationEnum.NOT_SPECIFIED\">{{\n 'general.salutation.' + Object.keys(SalutationEnum)[0]?.toLowerCase()\n | translate\n }}</mat-option>\n <mat-option [value]=\"SalutationEnum.MALE\">{{\n 'general.salutation.' + Object.keys(SalutationEnum)[1]?.toLowerCase()\n | translate\n }}</mat-option>\n <mat-option [value]=\"SalutationEnum.FEMALE\">{{\n 'general.salutation.' + Object.keys(SalutationEnum)[2]?.toLowerCase()\n | translate\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n</form>\n", dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i3.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: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: i4$1.TranslatePipe, name: "translate" }] }); }
2952
3045
  }
2953
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SalutationDropdownComponent, decorators: [{
3046
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SalutationDropdownComponent, decorators: [{
2954
3047
  type: Component,
2955
3048
  args: [{ standalone: false, selector: 'kms-salutation-dropdown', providers: [
2956
3049
  {
@@ -3031,16 +3124,16 @@ class SalutationRadiogroupComponent extends FormControlParentComponent {
3031
3124
  });
3032
3125
  super.ngOnInit();
3033
3126
  }
3034
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SalutationRadiogroupComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
3035
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: SalutationRadiogroupComponent, isStandalone: false, selector: "kms-salutation-radiogroup", providers: [
3127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SalutationRadiogroupComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
3128
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SalutationRadiogroupComponent, isStandalone: false, selector: "kms-salutation-radiogroup", providers: [
3036
3129
  {
3037
3130
  provide: NG_VALUE_ACCESSOR,
3038
3131
  useExisting: forwardRef(() => SalutationRadiogroupComponent),
3039
3132
  multi: true,
3040
3133
  },
3041
- ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-radio-group formControlName=\"salut\" [disabled]=\"disabled\" #radioGroup>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.NOT_SPECIFIED\"\n [checked]=\"value === SalutationEnum.NOT_SPECIFIED\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[0]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.MALE\"\n [checked]=\"value === SalutationEnum.MALE\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[1]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.FEMALE\"\n [checked]=\"value === SalutationEnum.FEMALE\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[2]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n </mat-radio-group>\n</form>\n", dependencies: [{ kind: "directive", type: i1$6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$6.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
3134
+ ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-radio-group formControlName=\"salut\" [disabled]=\"disabled\" #radioGroup>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.NOT_SPECIFIED\"\n [checked]=\"value === SalutationEnum.NOT_SPECIFIED\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[0]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.MALE\"\n [checked]=\"value === SalutationEnum.MALE\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[1]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.FEMALE\"\n [checked]=\"value === SalutationEnum.FEMALE\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[2]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n </mat-radio-group>\n</form>\n", dependencies: [{ kind: "directive", type: i1$5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i4$1.TranslatePipe, name: "translate" }] }); }
3042
3135
  }
3043
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SalutationRadiogroupComponent, decorators: [{
3136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SalutationRadiogroupComponent, decorators: [{
3044
3137
  type: Component,
3045
3138
  args: [{ standalone: false, selector: 'kms-salutation-radiogroup', providers: [
3046
3139
  {
@@ -3051,6 +3144,85 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3051
3144
  ], template: "<form [formGroup]=\"form\">\n <mat-radio-group formControlName=\"salut\" [disabled]=\"disabled\" #radioGroup>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.NOT_SPECIFIED\"\n [checked]=\"value === SalutationEnum.NOT_SPECIFIED\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[0]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.MALE\"\n [checked]=\"value === SalutationEnum.MALE\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[1]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n <mat-radio-button\n color=\"primary\"\n [value]=\"SalutationEnum.FEMALE\"\n [checked]=\"value === SalutationEnum.FEMALE\"\n >\n {{\n 'general.salutation.' + Object.keys(SalutationEnum)[2]?.toLowerCase()\n | translate\n }}\n </mat-radio-button>\n </mat-radio-group>\n</form>\n" }]
3052
3145
  }], ctorParameters: () => [{ type: i0.Renderer2 }] });
3053
3146
 
3147
+ let nextId = 0;
3148
+ class TextInputComponent {
3149
+ constructor() {
3150
+ this.valueChange = output();
3151
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
3152
+ this.label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
3153
+ this.placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
3154
+ this.type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : []));
3155
+ this.required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
3156
+ this.hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : []));
3157
+ this.errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : []));
3158
+ this.autocomplete = input('', ...(ngDevMode ? [{ debugName: "autocomplete" }] : []));
3159
+ this.prefix = input('', ...(ngDevMode ? [{ debugName: "prefix" }] : []));
3160
+ this.suffix = input('', ...(ngDevMode ? [{ debugName: "suffix" }] : []));
3161
+ this.prefixIcon = input('', ...(ngDevMode ? [{ debugName: "prefixIcon" }] : []));
3162
+ this.suffixIcon = input('', ...(ngDevMode ? [{ debugName: "suffixIcon" }] : []));
3163
+ this.IconSizePx = IconSizePx;
3164
+ this.value = signal('', ...(ngDevMode ? [{ debugName: "value" }] : []));
3165
+ this.innerControl = new FormControl('');
3166
+ this.disabledByForm = signal(false, ...(ngDevMode ? [{ debugName: "disabledByForm" }] : []));
3167
+ this.isDisabled = computed(() => this.disabled() || this.disabledByForm(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
3168
+ this.disabledEffect = effect(() => {
3169
+ if (this.isDisabled()) {
3170
+ this.innerControl.disable({ emitEvent: false });
3171
+ }
3172
+ else {
3173
+ this.innerControl.enable({ emitEvent: false });
3174
+ }
3175
+ }, ...(ngDevMode ? [{ debugName: "disabledEffect" }] : []));
3176
+ this.inputId = `kms-text-input-${nextId++}`;
3177
+ this.hintId = `${this.inputId}-hint`;
3178
+ this.errorId = `${this.inputId}-error`;
3179
+ this.errorStateMatcher = {
3180
+ isErrorState: () => !!this.errorMessage(),
3181
+ };
3182
+ this.onChange = () => { };
3183
+ this.onTouched = () => { };
3184
+ }
3185
+ valueChanged(event) {
3186
+ const { value } = event.target;
3187
+ this.value.set(value);
3188
+ this.innerControl.setValue(value, { emitEvent: false });
3189
+ this.onChange(value);
3190
+ this.valueChange.emit(value);
3191
+ }
3192
+ writeValue(value) {
3193
+ const val = value ?? '';
3194
+ this.value.set(val);
3195
+ this.innerControl.setValue(val, { emitEvent: false });
3196
+ }
3197
+ registerOnChange(fn) {
3198
+ this.onChange = fn;
3199
+ }
3200
+ registerOnTouched(fn) {
3201
+ this.onTouched = fn;
3202
+ }
3203
+ setDisabledState(isDisabled) {
3204
+ this.disabledByForm.set(isDisabled);
3205
+ }
3206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: TextInputComponent, isStandalone: false, selector: "kms-text-input", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, providers: [
3208
+ {
3209
+ provide: NG_VALUE_ACCESSOR,
3210
+ useExisting: forwardRef(() => TextInputComponent),
3211
+ multi: true,
3212
+ },
3213
+ ], ngImport: i0, template: "<mat-form-field class=\"kms-text-input__form-field\">\n <mat-label>{{ label() }}</mat-label>\n @if (prefixIcon()) {\n <kms-icon\n class=\"kms-text-input__prefix\"\n matIconPrefix\n [icon]=\"prefixIcon()\"\n [size]=\"IconSizePx.XS\"\n ></kms-icon>\n } @else if (prefix()) {\n <span matTextPrefix>{{ prefix() }}&nbsp;</span>\n }\n <input\n [id]=\"inputId\"\n [type]=\"type()\"\n matInput\n [formControl]=\"innerControl\"\n (input)=\"valueChanged($event)\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [attr.autocomplete]=\"autocomplete() || null\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"\n (hint() ? hintId : '') + (errorMessage() ? ' ' + errorId : '') || null\n \"\n (blur)=\"onTouched()\"\n />\n @if (suffixIcon()) {\n <kms-icon\n class=\"kms-text-input__suffix\"\n matIconSuffix\n [icon]=\"suffixIcon()\"\n [size]=\"IconSizePx.XS\"\n ></kms-icon>\n } @else if (suffix()) {\n <span matTextSuffix>&nbsp;{{ suffix() }}</span>\n } @if (hint()) {\n <mat-hint [id]=\"hintId\">{{ hint() }}</mat-hint>\n }\n <mat-error [id]=\"errorId\" role=\"alert\">{{ errorMessage() }}</mat-error>\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i3$2.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: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3214
+ }
3215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TextInputComponent, decorators: [{
3216
+ type: Component,
3217
+ args: [{ standalone: false, selector: 'kms-text-input', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
3218
+ {
3219
+ provide: NG_VALUE_ACCESSOR,
3220
+ useExisting: forwardRef(() => TextInputComponent),
3221
+ multi: true,
3222
+ },
3223
+ ], template: "<mat-form-field class=\"kms-text-input__form-field\">\n <mat-label>{{ label() }}</mat-label>\n @if (prefixIcon()) {\n <kms-icon\n class=\"kms-text-input__prefix\"\n matIconPrefix\n [icon]=\"prefixIcon()\"\n [size]=\"IconSizePx.XS\"\n ></kms-icon>\n } @else if (prefix()) {\n <span matTextPrefix>{{ prefix() }}&nbsp;</span>\n }\n <input\n [id]=\"inputId\"\n [type]=\"type()\"\n matInput\n [formControl]=\"innerControl\"\n (input)=\"valueChanged($event)\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [attr.autocomplete]=\"autocomplete() || null\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"\n (hint() ? hintId : '') + (errorMessage() ? ' ' + errorId : '') || null\n \"\n (blur)=\"onTouched()\"\n />\n @if (suffixIcon()) {\n <kms-icon\n class=\"kms-text-input__suffix\"\n matIconSuffix\n [icon]=\"suffixIcon()\"\n [size]=\"IconSizePx.XS\"\n ></kms-icon>\n } @else if (suffix()) {\n <span matTextSuffix>&nbsp;{{ suffix() }}</span>\n } @if (hint()) {\n <mat-hint [id]=\"hintId\">{{ hint() }}</mat-hint>\n }\n <mat-error [id]=\"errorId\" role=\"alert\">{{ errorMessage() }}</mat-error>\n</mat-form-field>\n" }]
3224
+ }], propDecorators: { valueChange: [{ type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], prefixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefixIcon", required: false }] }], suffixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffixIcon", required: false }] }] } });
3225
+
3054
3226
  class TimeInputComponent {
3055
3227
  constructor() {
3056
3228
  this.label = '';
@@ -3119,8 +3291,8 @@ class TimeInputComponent {
3119
3291
  invalid: true,
3120
3292
  };
3121
3293
  }
3122
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TimeInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3123
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: TimeInputComponent, isStandalone: false, selector: "kms-time-input", inputs: { label: "label", value: "value", interval: "interval", allowEmpty: "allowEmpty" }, providers: [
3294
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TimeInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3295
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: TimeInputComponent, isStandalone: false, selector: "kms-time-input", inputs: { label: "label", value: "value", interval: "interval", allowEmpty: "allowEmpty" }, providers: [
3124
3296
  {
3125
3297
  provide: NG_VALUE_ACCESSOR,
3126
3298
  useExisting: forwardRef(() => TimeInputComponent),
@@ -3131,9 +3303,9 @@ class TimeInputComponent {
3131
3303
  useExisting: TimeInputComponent,
3132
3304
  multi: true,
3133
3305
  },
3134
- ], usesOnChanges: true, ngImport: i0, template: "<mat-form-field class=\"kms-time-input\">\n <mat-label>{{ label }}</mat-label>\n <input\n type=\"text\"\n aria-label=\"time\"\n matInput\n kmsTime\n [matAutocomplete]=\"auto\"\n [value]=\"_value()\"\n (input)=\"inputValueChanged($event)\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"valueChanged($event.option.value)\"\n (closed)=\"autocompleteClosed()\"\n >\n @for (option of filteredOptions(); track option) {\n <mat-option [value]=\"option\">\n {{ option }}\n </mat-option>\n }\n </mat-autocomplete>\n <kms-icon\n class=\"kms-time-input__suffix\"\n matSuffix\n icon=\"clock\"\n [size]=\"IconSizePx.XS\"\n ></kms-icon>\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i2$2.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: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: TimeDirective, selector: "[kmsTime]" }, { kind: "component", type: i5.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: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
3306
+ ], usesOnChanges: true, ngImport: i0, template: "<mat-form-field class=\"kms-time-input\">\n <mat-label>{{ label }}</mat-label>\n <input\n type=\"text\"\n aria-label=\"time\"\n matInput\n kmsTime\n [matAutocomplete]=\"auto\"\n [value]=\"_value()\"\n (input)=\"inputValueChanged($event)\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"valueChanged($event.option.value)\"\n (closed)=\"autocompleteClosed()\"\n >\n @for (option of filteredOptions(); track option) {\n <mat-option [value]=\"option\">\n {{ option }}\n </mat-option>\n }\n </mat-autocomplete>\n <kms-icon\n class=\"kms-time-input__suffix\"\n matSuffix\n icon=\"clock\"\n [size]=\"IconSizePx.XS\"\n ></kms-icon>\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i3$2.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: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: TimeDirective, selector: "[kmsTime]" }, { kind: "component", type: i5$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: "directive", type: i5$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }] }); }
3135
3307
  }
3136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TimeInputComponent, decorators: [{
3308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TimeInputComponent, decorators: [{
3137
3309
  type: Component,
3138
3310
  args: [{ standalone: false, selector: 'kms-time-input', providers: [
3139
3311
  {
@@ -3202,16 +3374,16 @@ class YesNoRadiogroupComponent {
3202
3374
  this.onChange(value.yesno);
3203
3375
  });
3204
3376
  }
3205
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: YesNoRadiogroupComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
3206
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: YesNoRadiogroupComponent, isStandalone: false, selector: "kms-yesno-radiogroup", inputs: { header: "header", disabled: "disabled", textYes: "textYes", textNo: "textNo" }, providers: [
3377
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: YesNoRadiogroupComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
3378
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: YesNoRadiogroupComponent, isStandalone: false, selector: "kms-yesno-radiogroup", inputs: { header: "header", disabled: "disabled", textYes: "textYes", textNo: "textNo" }, providers: [
3207
3379
  {
3208
3380
  provide: NG_VALUE_ACCESSOR,
3209
3381
  useExisting: forwardRef(() => YesNoRadiogroupComponent),
3210
3382
  multi: true,
3211
3383
  },
3212
- ], viewQueries: [{ propertyName: "child", first: true, predicate: ["child"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\n <div>{{ header }}</div>\n <mat-radio-group formControlName=\"yesno\" [disabled]=\"disabled\" #child>\n <mat-radio-button [value]=\"true\" [checked]=\"internalValue === true\">\n {{ textYes }}</mat-radio-button\n >\n <mat-radio-button [value]=\"false\" [checked]=\"internalValue === false\">\n {{ textNo }}</mat-radio-button\n >\n </mat-radio-group>\n</form>\n", dependencies: [{ kind: "directive", type: i1$6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$6.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
3384
+ ], viewQueries: [{ propertyName: "child", first: true, predicate: ["child"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\n <div>{{ header }}</div>\n <mat-radio-group formControlName=\"yesno\" [disabled]=\"disabled\" #child>\n <mat-radio-button [value]=\"true\" [checked]=\"internalValue === true\">\n {{ textYes }}</mat-radio-button\n >\n <mat-radio-button [value]=\"false\" [checked]=\"internalValue === false\">\n {{ textNo }}</mat-radio-button\n >\n </mat-radio-group>\n</form>\n", dependencies: [{ kind: "directive", type: i1$5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
3213
3385
  }
3214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: YesNoRadiogroupComponent, decorators: [{
3386
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: YesNoRadiogroupComponent, decorators: [{
3215
3387
  type: Component,
3216
3388
  args: [{ standalone: false, selector: 'kms-yesno-radiogroup', providers: [
3217
3389
  {
@@ -3233,9 +3405,1096 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3233
3405
  args: ['child']
3234
3406
  }] } });
3235
3407
 
3408
+ class FormActionsComponent {
3409
+ constructor() {
3410
+ this.actionsConfig = input.required(...(ngDevMode ? [{ debugName: "actionsConfig" }] : []));
3411
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
3412
+ this.submitClick = output();
3413
+ this.submitLabel = computed(() => this.actionsConfig().submitLabel ?? 'Submit', ...(ngDevMode ? [{ debugName: "submitLabel" }] : []));
3414
+ }
3415
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3416
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: FormActionsComponent, isStandalone: false, selector: "kms-form-actions", inputs: { actionsConfig: { classPropertyName: "actionsConfig", publicName: "actionsConfig", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { submitClick: "submitClick" }, ngImport: i0, template: "<div class=\"kms-form-actions\">\n <kms-button\n [label]=\"submitLabel()\"\n type=\"submit\"\n [disabled]=\"disabled()\"\n (buttonClick)=\"submitClick.emit()\">\n </kms-button>\n</div>\n", styles: [":host{display:block}.kms-form-actions{display:flex;justify-content:flex-end;padding:8px 0}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "kms-button", inputs: ["color", "type", "appearance", "loading", "label", "icon", "disabled", "rounded"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3417
+ }
3418
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormActionsComponent, decorators: [{
3419
+ type: Component,
3420
+ args: [{ selector: 'kms-form-actions', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"kms-form-actions\">\n <kms-button\n [label]=\"submitLabel()\"\n type=\"submit\"\n [disabled]=\"disabled()\"\n (buttonClick)=\"submitClick.emit()\">\n </kms-button>\n</div>\n", styles: [":host{display:block}.kms-form-actions{display:flex;justify-content:flex-end;padding:8px 0}\n"] }]
3421
+ }], propDecorators: { actionsConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionsConfig", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], submitClick: [{ type: i0.Output, args: ["submitClick"] }] } });
3422
+
3423
+ /** Supported field types. Native types render inside `<mat-form-field>`; library types render via DynamicFieldDirective. */
3424
+ var FieldType;
3425
+ (function (FieldType) {
3426
+ FieldType["TEXT"] = "text";
3427
+ FieldType["TEXTAREA"] = "textarea";
3428
+ FieldType["PASSWORD"] = "password";
3429
+ FieldType["NUMBER"] = "number";
3430
+ FieldType["DATE"] = "date";
3431
+ FieldType["DATE_RANGE"] = "dateRange";
3432
+ FieldType["TIME"] = "time";
3433
+ FieldType["SELECT"] = "select";
3434
+ FieldType["AUTOCOMPLETE"] = "autocomplete";
3435
+ FieldType["CHECKBOX"] = "checkbox";
3436
+ FieldType["RADIO"] = "radio";
3437
+ FieldType["RADIO_GROUP"] = "radioGroup";
3438
+ FieldType["SLIDE_TOGGLE"] = "slideToggle";
3439
+ FieldType["MULTI_SELECT"] = "multiSelect";
3440
+ FieldType["COLOR"] = "color";
3441
+ FieldType["MONTH_PICKER"] = "monthPicker";
3442
+ FieldType["TEMPLATE"] = "template";
3443
+ FieldType["OFFSET"] = "offset";
3444
+ })(FieldType || (FieldType = {}));
3445
+
3446
+ /** Component-scoped service managing the full internal form lifecycle. No UI. */
3447
+ class GenericFormService {
3448
+ constructor(translate) {
3449
+ this.translate = translate;
3450
+ this.fieldConfigs = new Map(); // key → FieldConfig
3451
+ this.asyncValidatorMap = new Map(); // key → async validators
3452
+ this.destroy$ = new Subject();
3453
+ this._submitted = false;
3454
+ }
3455
+ // --- Build ---
3456
+ buildForm(config) {
3457
+ this.cleanup();
3458
+ this.config = config;
3459
+ this.fieldConfigs.clear();
3460
+ this.asyncValidatorMap.clear();
3461
+ this._submitted = false;
3462
+ const controls = {};
3463
+ for (const section of config.sections) {
3464
+ for (const field of section.fields) {
3465
+ this.buildFieldControl(field, controls);
3466
+ }
3467
+ }
3468
+ this.form = new FormGroup(controls);
3469
+ return this.form;
3470
+ }
3471
+ buildFieldControl(field, controls) {
3472
+ if (field.type === FieldType.OFFSET || !field.key)
3473
+ return;
3474
+ this.fieldConfigs.set(field.key, field);
3475
+ const asyncFns = (field.asyncValidators ?? []).map((a) => a.validator);
3476
+ if (field.asyncValidators?.length) {
3477
+ this.asyncValidatorMap.set(field.key, field.asyncValidators);
3478
+ }
3479
+ const initial = this.resolveInitialValue(field.type);
3480
+ const control = new FormControl(initial, {
3481
+ validators: field.validators ?? [],
3482
+ asyncValidators: asyncFns.length ? asyncFns : undefined,
3483
+ });
3484
+ if (field.hidden || field.disabled) {
3485
+ control.disable();
3486
+ }
3487
+ controls[field.key] = control;
3488
+ if (field.type === FieldType.DATE_RANGE && field.options) {
3489
+ const opts = field.options;
3490
+ if (opts.startKey && !controls[opts.startKey]) {
3491
+ controls[opts.startKey] = new FormControl(null);
3492
+ }
3493
+ if (opts.endKey && !controls[opts.endKey]) {
3494
+ controls[opts.endKey] = new FormControl(null);
3495
+ }
3496
+ }
3497
+ }
3498
+ resolveInitialValue(type) {
3499
+ switch (type) {
3500
+ case FieldType.TEXT:
3501
+ case FieldType.TEXTAREA:
3502
+ case FieldType.PASSWORD:
3503
+ return '';
3504
+ default:
3505
+ return null;
3506
+ }
3507
+ }
3508
+ // --- Patch ---
3509
+ patchValue(value, options) {
3510
+ if (!this.form)
3511
+ return;
3512
+ const emitEvent = !(options?.silent);
3513
+ this.form.patchValue(value, { emitEvent });
3514
+ }
3515
+ // --- Validate ---
3516
+ validateAll() {
3517
+ if (!this.form)
3518
+ return false;
3519
+ this._submitted = true;
3520
+ this.form.markAllAsTouched();
3521
+ this.form.updateValueAndValidity();
3522
+ return this.form.valid;
3523
+ }
3524
+ get submitted() {
3525
+ return this._submitted;
3526
+ }
3527
+ // --- Values ---
3528
+ getRawValue() {
3529
+ return this.form?.getRawValue() ?? {};
3530
+ }
3531
+ getValue() {
3532
+ return this.form?.value ?? {};
3533
+ }
3534
+ // --- Errors ---
3535
+ getErrors() {
3536
+ if (!this.form)
3537
+ return null;
3538
+ const errors = {};
3539
+ let hasErrors = false;
3540
+ for (const [key, control] of Object.entries(this.form.controls)) {
3541
+ if (control.errors) {
3542
+ errors[key] = control.errors;
3543
+ hasErrors = true;
3544
+ }
3545
+ }
3546
+ return hasErrors ? errors : null;
3547
+ }
3548
+ // --- State ---
3549
+ getState() {
3550
+ return {
3551
+ pristine: this.form?.pristine ?? true,
3552
+ dirty: this.form?.dirty ?? false,
3553
+ touched: this.form?.touched ?? false,
3554
+ untouched: this.form?.untouched ?? true,
3555
+ valid: this.form?.valid ?? false,
3556
+ invalid: this.form?.invalid ?? true,
3557
+ submitted: this._submitted,
3558
+ errors: this.getErrors(),
3559
+ };
3560
+ }
3561
+ // --- Field observables ---
3562
+ fieldValueChanges$(key) {
3563
+ const control = this.form?.get(key);
3564
+ if (!control) {
3565
+ throw new Error(`[GenericFormService] Control "${key}" not found`);
3566
+ }
3567
+ return control.valueChanges.pipe(takeUntil(this.destroy$));
3568
+ }
3569
+ // --- Field operations ---
3570
+ setFieldDisabled(key, disabled) {
3571
+ const control = this.form?.get(key);
3572
+ if (!control)
3573
+ return;
3574
+ if (disabled) {
3575
+ control.disable({ emitEvent: false });
3576
+ }
3577
+ else {
3578
+ control.enable({ emitEvent: false });
3579
+ }
3580
+ }
3581
+ updateFieldOptions(key, options) {
3582
+ const fieldConfig = this.fieldConfigs.get(key);
3583
+ if (!fieldConfig)
3584
+ return;
3585
+ fieldConfig.options = { ...fieldConfig.options, ...options };
3586
+ }
3587
+ getFieldConfig(key) {
3588
+ return this.fieldConfigs.get(key);
3589
+ }
3590
+ getFormGroup() {
3591
+ return this.form;
3592
+ }
3593
+ // --- Visibility engine ---
3594
+ applyVisibility(config) {
3595
+ for (const section of config.sections) {
3596
+ for (const field of section.fields) {
3597
+ if (!field.key)
3598
+ continue;
3599
+ const control = this.form?.get(field.key);
3600
+ if (!control)
3601
+ continue;
3602
+ if (field.hidden || field.disabled) {
3603
+ control.disable({ emitEvent: false });
3604
+ }
3605
+ else {
3606
+ control.enable({ emitEvent: false });
3607
+ }
3608
+ }
3609
+ }
3610
+ }
3611
+ // --- Error message resolution ---
3612
+ resolveErrorMessage(key, validatorName, validatorMeta) {
3613
+ // 1. Custom validator with `message` property
3614
+ if (validatorMeta?.message) {
3615
+ return validatorMeta.message;
3616
+ }
3617
+ // 2. Async validator with pre-translated errorMessage
3618
+ const asyncConfigs = this.asyncValidatorMap.get(key);
3619
+ if (asyncConfigs) {
3620
+ for (const ac of asyncConfigs) {
3621
+ // Match async validator by checking if the validator name is in the error keys
3622
+ // Async validators typically set the error key matching their name
3623
+ if (ac.errorMessage) {
3624
+ // If there's only one async validator, use its message
3625
+ // Otherwise, we can't disambiguate — return the first
3626
+ return ac.errorMessage;
3627
+ }
3628
+ }
3629
+ }
3630
+ // 3. Translate via @ngx-translate
3631
+ const translationKey = `uiPresentational.validatorMessages.${validatorName}`;
3632
+ const translated = this.translate.instant(translationKey, validatorMeta);
3633
+ if (translated !== translationKey) {
3634
+ return translated;
3635
+ }
3636
+ // 4. Fallback — validator key
3637
+ return validatorName;
3638
+ }
3639
+ // --- Cleanup ---
3640
+ cleanup() {
3641
+ this.destroy$.next();
3642
+ this.destroy$.complete();
3643
+ this.destroy$ = new Subject();
3644
+ }
3645
+ ngOnDestroy() {
3646
+ this.destroy$.next();
3647
+ this.destroy$.complete();
3648
+ }
3649
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GenericFormService, deps: [{ token: i4$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3650
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GenericFormService }); }
3651
+ }
3652
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GenericFormService, decorators: [{
3653
+ type: Injectable
3654
+ }], ctorParameters: () => [{ type: i4$1.TranslateService }] });
3655
+
3656
+ const DEFAULT_REGISTRY = new Map([
3657
+ [FieldType.PASSWORD, PasswordComponent],
3658
+ [FieldType.NUMBER, NumericInputComponent],
3659
+ [FieldType.TIME, TimeInputComponent],
3660
+ [FieldType.SELECT, DropdownFromDataComponent],
3661
+ [FieldType.MULTI_SELECT, DropdownFromDataComponent],
3662
+ [FieldType.CHECKBOX, CheckboxComponent],
3663
+ [FieldType.RADIO, RadioButtonComponent],
3664
+ [FieldType.RADIO_GROUP, RadioGroupComponent],
3665
+ [FieldType.SLIDE_TOGGLE, SlideToggleComponent],
3666
+ [FieldType.COLOR, ColorInputComponent],
3667
+ ]);
3668
+ class FieldRegistryService {
3669
+ constructor() {
3670
+ this.registry = new Map(DEFAULT_REGISTRY);
3671
+ }
3672
+ resolve(type) {
3673
+ return this.registry.get(type) ?? null;
3674
+ }
3675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FieldRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3676
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FieldRegistryService }); }
3677
+ }
3678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FieldRegistryService, decorators: [{
3679
+ type: Injectable
3680
+ }] });
3681
+
3682
+ /** Creates a library component dynamically and bridges ControlValueAccessor to a FormControl. */
3683
+ class DynamicFieldDirective {
3684
+ constructor() {
3685
+ this.fieldConfig = input.required(...(ngDevMode ? [{ debugName: "fieldConfig" }] : []));
3686
+ this.control = input.required(...(ngDevMode ? [{ debugName: "control" }] : []));
3687
+ this.fieldTouched = output(); // emitted when the library component reports a touch
3688
+ this.vcr = inject(ViewContainerRef);
3689
+ this.registry = inject(FieldRegistryService);
3690
+ this.componentRef = null;
3691
+ this.destroy$ = new Subject();
3692
+ effect(() => {
3693
+ const config = this.fieldConfig();
3694
+ const control = this.control();
3695
+ untracked(() => this.create(config, control));
3696
+ });
3697
+ }
3698
+ create(config, control) {
3699
+ this.teardown();
3700
+ const componentType = this.registry.resolve(config.type);
3701
+ if (!componentType)
3702
+ return;
3703
+ this.vcr.clear();
3704
+ this.componentRef = this.vcr.createComponent(componentType);
3705
+ this.bridgeCVA(control);
3706
+ this.mapInputs(config);
3707
+ }
3708
+ // --- CVA bridge ---
3709
+ bridgeCVA(control) {
3710
+ const ref = this.componentRef;
3711
+ if (!ref)
3712
+ return;
3713
+ const inst = ref.instance;
3714
+ let syncing = false;
3715
+ if (typeof inst.writeValue === 'function') {
3716
+ inst.writeValue(control.value);
3717
+ }
3718
+ if (typeof inst.registerOnChange === 'function') {
3719
+ inst.registerOnChange((val) => {
3720
+ if (syncing)
3721
+ return;
3722
+ syncing = true;
3723
+ control.setValue(val);
3724
+ control.markAsDirty();
3725
+ syncing = false;
3726
+ });
3727
+ }
3728
+ if (typeof inst.registerOnTouched === 'function') {
3729
+ inst.registerOnTouched(() => {
3730
+ control.markAsTouched();
3731
+ this.fieldTouched.emit();
3732
+ });
3733
+ }
3734
+ // Sync control → component on external value changes
3735
+ control.valueChanges.pipe(takeUntil$1(this.destroy$)).subscribe((val) => {
3736
+ if (syncing)
3737
+ return;
3738
+ syncing = true;
3739
+ if (typeof inst.writeValue === 'function')
3740
+ inst.writeValue(val);
3741
+ // Reset after microtask to cover async onChange triggers (e.g. ngModel two-way binding)
3742
+ Promise.resolve().then(() => { syncing = false; });
3743
+ });
3744
+ // Disabled state — defer initial call until after ngOnInit (form may not exist yet)
3745
+ if (typeof inst.setDisabledState === 'function') {
3746
+ control.statusChanges.pipe(takeUntil$1(this.destroy$)).subscribe(() => {
3747
+ inst.setDisabledState(control.disabled);
3748
+ });
3749
+ // Schedule initial sync after ngOnInit has run
3750
+ queueMicrotask(() => {
3751
+ if (typeof inst.setDisabledState === 'function') {
3752
+ inst.setDisabledState(control.disabled);
3753
+ }
3754
+ });
3755
+ }
3756
+ }
3757
+ // --- Input mapping ---
3758
+ mapInputs(config) {
3759
+ const ref = this.componentRef;
3760
+ if (!ref)
3761
+ return;
3762
+ switch (config.type) {
3763
+ case FieldType.CHECKBOX:
3764
+ ref.setInput('infoText', config.label ?? '');
3765
+ break;
3766
+ case FieldType.SLIDE_TOGGLE:
3767
+ ref.setInput('leftLabel', config.label ?? '');
3768
+ break;
3769
+ case FieldType.RADIO:
3770
+ ref.setInput('label', config.label ?? '');
3771
+ break;
3772
+ case FieldType.RADIO_GROUP:
3773
+ this.mapRadioGroup(config, ref);
3774
+ break;
3775
+ case FieldType.SELECT:
3776
+ case FieldType.MULTI_SELECT:
3777
+ this.mapSelect(config, ref);
3778
+ break;
3779
+ case FieldType.NUMBER:
3780
+ this.mapNumber(config, ref);
3781
+ break;
3782
+ case FieldType.PASSWORD:
3783
+ this.mapPassword(config, ref);
3784
+ break;
3785
+ default: // TIME, COLOR
3786
+ this.trySetInput(ref, 'label', config.label ?? '');
3787
+ break;
3788
+ }
3789
+ if (config.placeholder)
3790
+ this.trySetInput(ref, 'placeholder', config.placeholder);
3791
+ }
3792
+ mapRadioGroup(config, ref) {
3793
+ const opts = config.options;
3794
+ if (opts?.items) {
3795
+ ref.setInput('options', opts.items.map((item) => {
3796
+ if (typeof item === 'string')
3797
+ return { Text: item, Value: item };
3798
+ const obj = item;
3799
+ return { Text: obj['Label'] ?? obj['label'], Value: obj['Value'] ?? obj['value'] };
3800
+ }));
3801
+ }
3802
+ if (opts?.layout)
3803
+ ref.setInput('direction', opts.layout === 'horizontal' ? 'row' : 'column');
3804
+ if (opts?.size)
3805
+ ref.setInput('size', opts.size);
3806
+ }
3807
+ mapSelect(config, ref) {
3808
+ ref.setInput('label', config.label ?? '');
3809
+ if (config.type === FieldType.MULTI_SELECT)
3810
+ ref.setInput('multiple', true);
3811
+ const opts = config.options;
3812
+ if (!opts)
3813
+ return;
3814
+ this.mapSelectDataSource(opts, ref);
3815
+ this.mapSelectBehaviour(opts, ref);
3816
+ this.mapPrefixSuffix(config, ref);
3817
+ }
3818
+ mapSelectDataSource(opts, ref) {
3819
+ if (opts.plainItems) {
3820
+ ref.setInput('optionsPlainArray', opts.plainItems);
3821
+ }
3822
+ else if (opts.enumItems) {
3823
+ ref.setInput('optionsEnum', opts.enumItems);
3824
+ if (opts.useEnumIndexAsValue)
3825
+ ref.setInput('useEnumIndexAsValue', true);
3826
+ }
3827
+ else if (opts.objItems) {
3828
+ ref.setInput('optionsObjArray', opts.objItems.data);
3829
+ ref.setInput('mapKey', opts.objItems.mapKey);
3830
+ if (opts.objItems.mapValue)
3831
+ ref.setInput('mapValue', opts.objItems.mapValue);
3832
+ }
3833
+ else if (opts.items) {
3834
+ this.mapSelectItems(opts, ref);
3835
+ }
3836
+ }
3837
+ mapSelectItems(opts, ref) {
3838
+ if (Array.isArray(opts.items)) {
3839
+ ref.setInput('optionsObjArray', opts.items);
3840
+ ref.setInput('mapKey', 'Label');
3841
+ ref.setInput('mapValue', 'Value');
3842
+ }
3843
+ else if (isObservable(opts.items)) {
3844
+ opts.items.pipe(takeUntil$1(this.destroy$)).subscribe((items) => {
3845
+ ref.setInput('optionsObjArray', items);
3846
+ ref.setInput('mapKey', 'Label');
3847
+ ref.setInput('mapValue', 'Value');
3848
+ });
3849
+ }
3850
+ }
3851
+ mapSelectBehaviour(opts, ref) {
3852
+ if (opts.hasNullOption)
3853
+ ref.setInput('hasNullOption', true);
3854
+ if (opts.selectAllText)
3855
+ ref.setInput('selectAllText', opts.selectAllText);
3856
+ if (opts.disableOptions)
3857
+ ref.setInput('disableOptions', true);
3858
+ if (opts.preselectedKeys !== undefined)
3859
+ ref.setInput('preselectedKeys', opts.preselectedKeys);
3860
+ if (opts.searchable)
3861
+ ref.setInput('searchable', true);
3862
+ if (opts.translation)
3863
+ ref.setInput('translation', opts.translation);
3864
+ }
3865
+ mapPrefixSuffix(config, ref) {
3866
+ if (config.prefix?.type === 'text')
3867
+ ref.setInput('prefix', config.prefix.value);
3868
+ if (config.prefix?.type === 'icon')
3869
+ ref.setInput('prefixIcon', config.prefix.value);
3870
+ if (config.suffix?.type === 'text')
3871
+ ref.setInput('suffix', config.suffix.value);
3872
+ if (config.suffix?.type === 'icon')
3873
+ ref.setInput('suffixIcon', config.suffix.value);
3874
+ }
3875
+ mapPassword(config, ref) {
3876
+ this.trySetInput(ref, 'label', config.label ?? '');
3877
+ const opts = config.options;
3878
+ if (opts?.withStrength)
3879
+ ref.setInput('withStrength', true);
3880
+ }
3881
+ mapNumber(config, ref) {
3882
+ this.trySetInput(ref, 'label', config.label ?? '');
3883
+ const opts = config.options;
3884
+ if (opts?.min !== undefined)
3885
+ ref.setInput('min', opts.min);
3886
+ }
3887
+ trySetInput(ref, name, value) {
3888
+ try {
3889
+ ref.setInput(name, value);
3890
+ }
3891
+ catch {
3892
+ // Component may not have this input
3893
+ }
3894
+ }
3895
+ teardown() {
3896
+ this.destroy$.next();
3897
+ this.destroy$.complete();
3898
+ this.destroy$ = new Subject();
3899
+ }
3900
+ ngOnDestroy() {
3901
+ this.destroy$.next();
3902
+ this.destroy$.complete();
3903
+ }
3904
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DynamicFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3905
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: DynamicFieldDirective, isStandalone: false, selector: "[kmsDynamicField]", inputs: { fieldConfig: { classPropertyName: "fieldConfig", publicName: "fieldConfig", isSignal: true, isRequired: true, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { fieldTouched: "fieldTouched" }, ngImport: i0 }); }
3906
+ }
3907
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DynamicFieldDirective, decorators: [{
3908
+ type: Directive,
3909
+ args: [{ selector: '[kmsDynamicField]', standalone: false }]
3910
+ }], ctorParameters: () => [], propDecorators: { fieldConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldConfig", required: true }] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: true }] }], fieldTouched: [{ type: i0.Output, args: ["fieldTouched"] }] } });
3911
+
3912
+ const NATIVE_TYPES = new Set([
3913
+ FieldType.TEXT,
3914
+ FieldType.TEXTAREA,
3915
+ FieldType.DATE,
3916
+ FieldType.DATE_RANGE,
3917
+ FieldType.MONTH_PICKER,
3918
+ FieldType.AUTOCOMPLETE,
3919
+ FieldType.OFFSET,
3920
+ ]);
3921
+ const GROUP_TYPES = new Set([FieldType.RADIO_GROUP]);
3922
+ const AUTOCOMPLETE_FALLBACK = {
3923
+ firstname: 'given-name',
3924
+ givenname: 'given-name',
3925
+ lastname: 'family-name',
3926
+ familyname: 'family-name',
3927
+ surname: 'family-name',
3928
+ email: 'email',
3929
+ emailaddress: 'email',
3930
+ phone: 'tel',
3931
+ telephone: 'tel',
3932
+ phonenumber: 'tel',
3933
+ street: 'address-line1',
3934
+ streetaddress: 'address-line1',
3935
+ addressline1: 'address-line1',
3936
+ addressline2: 'address-line2',
3937
+ city: 'address-level2',
3938
+ locality: 'address-level2',
3939
+ state: 'address-level1',
3940
+ region: 'address-level1',
3941
+ province: 'address-level1',
3942
+ zip: 'postal-code',
3943
+ postalcode: 'postal-code',
3944
+ zipcode: 'postal-code',
3945
+ country: 'country',
3946
+ countrycode: 'country',
3947
+ company: 'organization',
3948
+ organization: 'organization',
3949
+ companyname: 'organization',
3950
+ username: 'username',
3951
+ login: 'username',
3952
+ password: 'current-password',
3953
+ newpassword: 'new-password',
3954
+ creditcard: 'cc-number',
3955
+ cardnumber: 'cc-number',
3956
+ birthdate: 'bday',
3957
+ dateofbirth: 'bday',
3958
+ };
3959
+ class FormFieldComponent {
3960
+ constructor() {
3961
+ // --- Inputs ---
3962
+ this.fieldConfig = input.required(...(ngDevMode ? [{ debugName: "fieldConfig" }] : []));
3963
+ this.control = input.required(...(ngDevMode ? [{ debugName: "control" }] : []));
3964
+ this.formId = input('', ...(ngDevMode ? [{ debugName: "formId" }] : []));
3965
+ this.formErrorDisplay = input(...(ngDevMode ? [undefined, { debugName: "formErrorDisplay" }] : []));
3966
+ this.formDisabledConfig = input(...(ngDevMode ? [undefined, { debugName: "formDisabledConfig" }] : []));
3967
+ this.submitted = input(false, ...(ngDevMode ? [{ debugName: "submitted" }] : []));
3968
+ this.FieldType = FieldType;
3969
+ // --- Injections ---
3970
+ this.formService = inject(GenericFormService);
3971
+ this.destroyRef = inject(DestroyRef);
3972
+ // --- OnPush reactivity for control state ---
3973
+ this.controlTick = signal(0, ...(ngDevMode ? [{ debugName: "controlTick" }] : []));
3974
+ this.dateRangeDestroy$ = new Subject();
3975
+ // --- Computed: type classification ---
3976
+ this.isNativeType = computed(() => NATIVE_TYPES.has(this.fieldConfig().type), ...(ngDevMode ? [{ debugName: "isNativeType" }] : []));
3977
+ this.isGroupType = computed(() => GROUP_TYPES.has(this.fieldConfig().type), ...(ngDevMode ? [{ debugName: "isGroupType" }] : []));
3978
+ this.isTextInputType = computed(() => this.fieldConfig().type === FieldType.TEXT, ...(ngDevMode ? [{ debugName: "isTextInputType" }] : []));
3979
+ this.isDateType = computed(() => {
3980
+ const type = this.fieldConfig().type;
3981
+ return type === FieldType.DATE || type === FieldType.DATE_RANGE || type === FieldType.MONTH_PICKER;
3982
+ }, ...(ngDevMode ? [{ debugName: "isDateType" }] : []));
3983
+ this.dateMode = computed(() => this.fieldConfig().type === FieldType.DATE_RANGE ? 'range' : 'date', ...(ngDevMode ? [{ debugName: "dateMode" }] : []));
3984
+ this.isMonthPicker = computed(() => this.fieldConfig().type === FieldType.MONTH_PICKER, ...(ngDevMode ? [{ debugName: "isMonthPicker" }] : []));
3985
+ // --- Computed: error display ---
3986
+ this.resolvedErrorDisplay = computed(() => ({
3987
+ strategy: 'onTouched',
3988
+ showMultiple: false,
3989
+ showOnSubmit: true,
3990
+ ...this.formErrorDisplay(),
3991
+ ...this.fieldConfig().errorDisplay,
3992
+ }), ...(ngDevMode ? [{ debugName: "resolvedErrorDisplay" }] : []));
3993
+ this.errorMatcher = computed(() => {
3994
+ const config = this.resolvedErrorDisplay();
3995
+ const submitted = this.submitted;
3996
+ if (config.strategy === 'custom' && config.matcher)
3997
+ return config.matcher;
3998
+ return {
3999
+ isErrorState: (control) => {
4000
+ if (!control?.errors)
4001
+ return false;
4002
+ if (config.showOnSubmit !== false && submitted())
4003
+ return true;
4004
+ switch (config.strategy) {
4005
+ case 'onDirty':
4006
+ return control.dirty;
4007
+ case 'onSubmit':
4008
+ return false;
4009
+ case 'immediate':
4010
+ return true;
4011
+ case 'onTouched':
4012
+ default:
4013
+ return control.touched;
4014
+ }
4015
+ },
4016
+ };
4017
+ }, ...(ngDevMode ? [{ debugName: "errorMatcher" }] : []));
4018
+ this.shouldShowErrors = computed(() => {
4019
+ this.controlTick();
4020
+ const control = this.control();
4021
+ if (!control.errors)
4022
+ return false;
4023
+ const config = this.resolvedErrorDisplay();
4024
+ if (config.showOnSubmit !== false && this.submitted())
4025
+ return true;
4026
+ switch (config.strategy) {
4027
+ case 'onDirty':
4028
+ return control.dirty;
4029
+ case 'onSubmit':
4030
+ return false;
4031
+ case 'immediate':
4032
+ return true;
4033
+ case 'onTouched':
4034
+ default:
4035
+ return control.touched;
4036
+ }
4037
+ }, ...(ngDevMode ? [{ debugName: "shouldShowErrors" }] : []));
4038
+ this.errorMessages = computed(() => {
4039
+ this.controlTick();
4040
+ const control = this.control();
4041
+ if (!control.errors)
4042
+ return [];
4043
+ const config = this.resolvedErrorDisplay();
4044
+ const messages = [];
4045
+ for (const [validatorName, meta] of Object.entries(control.errors)) {
4046
+ messages.push(this.formService.resolveErrorMessage(this.fieldConfig().key, validatorName, meta));
4047
+ if (!config.showMultiple)
4048
+ break;
4049
+ }
4050
+ return messages;
4051
+ }, ...(ngDevMode ? [{ debugName: "errorMessages" }] : []));
4052
+ this.displayErrorMessage = computed(() => this.shouldShowErrors() ? this.errorMessages().join(', ') : '', ...(ngDevMode ? [{ debugName: "displayErrorMessage" }] : []));
4053
+ // --- Computed: autocomplete ---
4054
+ this.resolvedAutocomplete = computed(() => {
4055
+ const config = this.fieldConfig();
4056
+ if (config.autocomplete)
4057
+ return config.autocomplete;
4058
+ return AUTOCOMPLETE_FALLBACK[config.key.toLowerCase()] ?? null;
4059
+ }, ...(ngDevMode ? [{ debugName: "resolvedAutocomplete" }] : []));
4060
+ // --- Computed: disabled background ---
4061
+ this.disabledBackground = computed(() => {
4062
+ const enabled = this.fieldConfig().disabledConfig?.showDisabledBackground ?? this.formDisabledConfig()?.showDisabledBackground ?? false;
4063
+ return enabled ? 'rgba(0, 0, 0, 0.04)' : 'transparent';
4064
+ }, ...(ngDevMode ? [{ debugName: "disabledBackground" }] : []));
4065
+ this.disabledLine = computed(() => {
4066
+ const enabled = this.fieldConfig().disabledConfig?.showDisabledBackground ?? this.formDisabledConfig()?.showDisabledBackground ?? false;
4067
+ return enabled ? 'block' : 'none';
4068
+ }, ...(ngDevMode ? [{ debugName: "disabledLine" }] : []));
4069
+ // --- Computed: textarea ---
4070
+ this.textareaRows = computed(() => {
4071
+ return this.fieldConfig().options?.rows ?? 3;
4072
+ }, ...(ngDevMode ? [{ debugName: "textareaRows" }] : []));
4073
+ // --- Computed: date / date-range ---
4074
+ this.dateMin = computed(() => {
4075
+ const min = this.fieldConfig().options?.min;
4076
+ if (!min)
4077
+ return null;
4078
+ return min instanceof Date ? min : new Date(min);
4079
+ }, ...(ngDevMode ? [{ debugName: "dateMin" }] : []));
4080
+ this.dateMax = computed(() => {
4081
+ const max = this.fieldConfig().options?.max;
4082
+ if (!max)
4083
+ return null;
4084
+ return max instanceof Date ? max : new Date(max);
4085
+ }, ...(ngDevMode ? [{ debugName: "dateMax" }] : []));
4086
+ // --- Computed: autocomplete options ---
4087
+ this.autocompleteSelectFirst = computed(() => {
4088
+ return this.fieldConfig().options?.selectFirst ?? false;
4089
+ }, ...(ngDevMode ? [{ debugName: "autocompleteSelectFirst" }] : []));
4090
+ this.filteredAutoOptions = computed(() => {
4091
+ this.controlTick();
4092
+ if (this.fieldConfig().type !== FieldType.AUTOCOMPLETE)
4093
+ return [];
4094
+ const opts = this.fieldConfig().options;
4095
+ if (!opts?.items || !Array.isArray(opts.items))
4096
+ return [];
4097
+ const value = (this.control().value ?? '').toString().toLowerCase();
4098
+ if (!value || value.length < (opts.minChars ?? 0))
4099
+ return opts.items;
4100
+ return opts.items.filter((item) => item.Label?.toLowerCase().includes(value));
4101
+ }, ...(ngDevMode ? [{ debugName: "filteredAutoOptions" }] : []));
4102
+ // --- Computed: required ---
4103
+ this.isRequired = computed(() => {
4104
+ const validator = this.control().validator;
4105
+ if (!validator)
4106
+ return false;
4107
+ const result = validator({ value: null });
4108
+ return !!result?.['required'];
4109
+ }, ...(ngDevMode ? [{ debugName: "isRequired" }] : []));
4110
+ // --- Computed: a11y IDs ---
4111
+ this.idPrefix = computed(() => {
4112
+ const fid = this.formId();
4113
+ return fid ? `${fid}-field` : 'field';
4114
+ }, ...(ngDevMode ? [{ debugName: "idPrefix" }] : []));
4115
+ this.tooltipId = computed(() => {
4116
+ return this.fieldConfig().tooltip ? `${this.idPrefix()}-${this.fieldConfig().key}-tooltip` : null;
4117
+ }, ...(ngDevMode ? [{ debugName: "tooltipId" }] : []));
4118
+ this.errorsId = computed(() => {
4119
+ return `${this.idPrefix()}-${this.fieldConfig().key}-errors`;
4120
+ }, ...(ngDevMode ? [{ debugName: "errorsId" }] : []));
4121
+ this.groupLabelId = computed(() => {
4122
+ return `${this.idPrefix()}-${this.fieldConfig().key}-label`;
4123
+ }, ...(ngDevMode ? [{ debugName: "groupLabelId" }] : []));
4124
+ this.ariaDescribedBy = computed(() => {
4125
+ const parts = [];
4126
+ const tipId = this.tooltipId();
4127
+ if (tipId)
4128
+ parts.push(tipId);
4129
+ if (this.shouldShowErrors() && this.errorMessages().length)
4130
+ parts.push(this.errorsId());
4131
+ return parts.length ? parts.join(' ') : null;
4132
+ }, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
4133
+ effect(() => {
4134
+ const control = this.control();
4135
+ untracked(() => this.subscribeToControl(control));
4136
+ });
4137
+ // DATE_RANGE: bidirectional sync between main control and start/end controls
4138
+ effect(() => {
4139
+ const config = this.fieldConfig();
4140
+ const control = this.control();
4141
+ untracked(() => {
4142
+ this.dateRangeDestroy$.next();
4143
+ if (config.type !== FieldType.DATE_RANGE)
4144
+ return;
4145
+ const opts = config.options;
4146
+ if (!opts?.startKey || !opts?.endKey)
4147
+ return;
4148
+ const fg = this.formService.getFormGroup();
4149
+ if (!fg)
4150
+ return;
4151
+ const startCtrl = fg.get(opts.startKey);
4152
+ const endCtrl = fg.get(opts.endKey);
4153
+ if (!startCtrl || !endCtrl)
4154
+ return;
4155
+ // main control → start/end controls (when user picks from date picker)
4156
+ control.valueChanges.pipe(takeUntil$1(this.dateRangeDestroy$)).subscribe((val) => {
4157
+ startCtrl.setValue(val?.start ?? null, { emitEvent: false });
4158
+ endCtrl.setValue(val?.end ?? null, { emitEvent: false });
4159
+ });
4160
+ // start/end controls → main control (when consumer patches values)
4161
+ merge(startCtrl.valueChanges, endCtrl.valueChanges)
4162
+ .pipe(takeUntil$1(this.dateRangeDestroy$))
4163
+ .subscribe(() => {
4164
+ control.setValue({ start: startCtrl.value, end: endCtrl.value }, { emitEvent: false });
4165
+ });
4166
+ });
4167
+ });
4168
+ this.destroyRef.onDestroy(() => {
4169
+ this.controlSub?.unsubscribe();
4170
+ this.dateRangeDestroy$.next();
4171
+ this.dateRangeDestroy$.complete();
4172
+ });
4173
+ }
4174
+ onFieldTouched() {
4175
+ this.controlTick.update((v) => v + 1);
4176
+ }
4177
+ subscribeToControl(control) {
4178
+ this.controlSub?.unsubscribe();
4179
+ this.controlSub = merge(control.statusChanges, control.valueChanges).subscribe(() => {
4180
+ this.controlTick.update((v) => v + 1);
4181
+ });
4182
+ }
4183
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4184
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: FormFieldComponent, isStandalone: false, selector: "kms-form-field", inputs: { fieldConfig: { classPropertyName: "fieldConfig", publicName: "fieldConfig", isSignal: true, isRequired: true, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: true, transformFunction: null }, formId: { classPropertyName: "formId", publicName: "formId", isSignal: true, isRequired: false, transformFunction: null }, formErrorDisplay: { classPropertyName: "formErrorDisplay", publicName: "formErrorDisplay", isSignal: true, isRequired: false, transformFunction: null }, formDisabledConfig: { classPropertyName: "formDisabledConfig", publicName: "formDisabledConfig", isSignal: true, isRequired: false, transformFunction: null }, submitted: { classPropertyName: "submitted", publicName: "submitted", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"kms-form-field\"\n [attr.data-field-key]=\"fieldConfig().key\"\n [style.--kms-field-disabled-bg]=\"disabledBackground()\"\n [style.--kms-field-disabled-line]=\"disabledLine()\">\n\n @if (fieldConfig().type === FieldType.OFFSET) {\n <!-- \u2550\u2550\u2550 OFFSET \u2014 empty spacer \u2550\u2550\u2550 -->\n } @else if (isNativeType()) {\n <!-- \u2550\u2550\u2550 NATIVE TYPES \u2550\u2550\u2550 -->\n <div class=\"kms-form-field__row\">\n <div class=\"kms-form-field__control\">\n @if (isTextInputType()) {\n <!-- TEXT \u2014 delegates to kms-text-input CVA -->\n <kms-text-input\n [formControl]=\"control()\"\n [label]=\"fieldConfig().label ?? ''\"\n [placeholder]=\"fieldConfig().placeholder ?? ''\"\n [required]=\"isRequired()\"\n [autocomplete]=\"resolvedAutocomplete() ?? ''\"\n [prefix]=\"fieldConfig().prefix?.type === 'text' ? fieldConfig().prefix!.value : ''\"\n [prefixIcon]=\"fieldConfig().prefix?.type === 'icon' ? fieldConfig().prefix!.value : ''\"\n [suffix]=\"fieldConfig().suffix?.type === 'text' ? fieldConfig().suffix!.value : ''\"\n [suffixIcon]=\"fieldConfig().suffix?.type === 'icon' ? fieldConfig().suffix!.value : ''\"\n [errorMessage]=\"displayErrorMessage()\">\n </kms-text-input>\n } @else if (isDateType()) {\n <!-- DATE / DATE_RANGE / MONTH_PICKER \u2014 delegates to kms-date-input CVA -->\n <kms-date-input\n [formControl]=\"control()\"\n [mode]=\"dateMode()\"\n [label]=\"fieldConfig().label ?? ''\"\n [placeholder]=\"fieldConfig().placeholder ?? ''\"\n [required]=\"isRequired()\"\n [minDate]=\"dateMin()\"\n [maxDate]=\"dateMax()\"\n [monthPicker]=\"isMonthPicker()\"\n [errorMessage]=\"displayErrorMessage()\">\n </kms-date-input>\n } @else {\n <!-- TEXTAREA, AUTOCOMPLETE \u2014 keep existing mat-form-field -->\n <mat-form-field class=\"kms-form-field__mat-field\">\n @if (fieldConfig().label) {\n <mat-label>{{ fieldConfig().label }}</mat-label>\n }\n\n @switch (fieldConfig().type) {\n @case (FieldType.TEXTAREA) {\n <textarea matInput\n [formControl]=\"control()\"\n [placeholder]=\"fieldConfig().placeholder ?? ''\"\n [rows]=\"textareaRows()\"\n [attr.autocomplete]=\"resolvedAutocomplete()\"\n [attr.aria-required]=\"isRequired() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [errorStateMatcher]=\"errorMatcher()\">\n </textarea>\n }\n @case (FieldType.AUTOCOMPLETE) {\n <input matInput\n [formControl]=\"control()\"\n [matAutocomplete]=\"autoPanel\"\n [placeholder]=\"fieldConfig().placeholder ?? ''\"\n [attr.autocomplete]=\"resolvedAutocomplete()\"\n [attr.aria-required]=\"isRequired() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [errorStateMatcher]=\"errorMatcher()\">\n <mat-autocomplete #autoPanel=\"matAutocomplete\" [autoActiveFirstOption]=\"autocompleteSelectFirst()\">\n @for (opt of filteredAutoOptions(); track opt.Value) {\n <mat-option [value]=\"opt.Value\">{{ opt.Label }}</mat-option>\n }\n </mat-autocomplete>\n }\n }\n\n <!-- Prefix -->\n @if (fieldConfig().prefix) {\n @if (fieldConfig().prefix!.type === 'text') {\n <span matTextPrefix>{{ fieldConfig().prefix!.value }}&nbsp;</span>\n } @else {\n <kms-icon matPrefix [icon]=\"fieldConfig().prefix!.value\" aria-hidden=\"true\"></kms-icon>\n }\n }\n\n <!-- Suffix -->\n @if (fieldConfig().suffix) {\n @if (fieldConfig().suffix!.type === 'text') {\n <span matTextSuffix>&nbsp;{{ fieldConfig().suffix!.value }}</span>\n } @else {\n <kms-icon matSuffix [icon]=\"fieldConfig().suffix!.value\" aria-hidden=\"true\"></kms-icon>\n }\n }\n\n <!-- Errors -->\n @for (msg of errorMessages(); track msg) {\n <mat-error>{{ msg }}</mat-error>\n }\n </mat-form-field>\n }\n </div>\n\n @if (fieldConfig().tooltip) {\n <kms-tooltip-icon\n class=\"kms-form-field__tooltip\"\n [tooltipText]=\"fieldConfig().tooltip!\"\n [attr.id]=\"tooltipId()\">\n </kms-tooltip-icon>\n }\n </div>\n\n } @else if (fieldConfig().type === FieldType.TEMPLATE && fieldConfig().templateRef) {\n <!-- \u2550\u2550\u2550 TEMPLATE \u2014 consumer-provided template \u2550\u2550\u2550 -->\n <div class=\"kms-form-field__row\">\n <div class=\"kms-form-field__control\">\n <ng-container\n *ngTemplateOutlet=\"fieldConfig().templateRef!; context: { control: control(), $implicit: control() }\">\n </ng-container>\n </div>\n @if (fieldConfig().tooltip) {\n <kms-tooltip-icon\n class=\"kms-form-field__tooltip\"\n [tooltipText]=\"fieldConfig().tooltip!\"\n [attr.id]=\"tooltipId()\">\n </kms-tooltip-icon>\n }\n </div>\n @if (shouldShowErrors() && errorMessages().length) {\n <div class=\"kms-form-field__errors\" role=\"alert\" [attr.id]=\"errorsId()\">\n @for (msg of errorMessages(); track msg) {\n <div class=\"kms-form-field__error\">{{ msg }}</div>\n }\n </div>\n }\n } @else {\n <!-- \u2550\u2550\u2550 LIBRARY TYPES \u2014 dynamic component \u2550\u2550\u2550 -->\n @if (isGroupType()) {\n <div class=\"kms-form-field__label-row\">\n <span class=\"kms-form-field__group-label\" [attr.id]=\"groupLabelId()\">{{ fieldConfig().label }}</span>\n @if (fieldConfig().tooltip) {\n <kms-tooltip-icon [tooltipText]=\"fieldConfig().tooltip!\" [attr.id]=\"tooltipId()\"></kms-tooltip-icon>\n }\n </div>\n }\n\n <div class=\"kms-form-field__row\">\n <div class=\"kms-form-field__control\">\n <ng-container kmsDynamicField\n [fieldConfig]=\"fieldConfig()\"\n [control]=\"control()\"\n (fieldTouched)=\"onFieldTouched()\">\n </ng-container>\n </div>\n\n @if (!isGroupType() && fieldConfig().tooltip) {\n <kms-tooltip-icon\n class=\"kms-form-field__tooltip\"\n [tooltipText]=\"fieldConfig().tooltip!\"\n [attr.id]=\"tooltipId()\">\n </kms-tooltip-icon>\n }\n </div>\n\n @if (shouldShowErrors() && errorMessages().length) {\n <div class=\"kms-form-field__errors\" role=\"alert\" [attr.id]=\"errorsId()\">\n @for (msg of errorMessages(); track msg) {\n <div class=\"kms-form-field__error\">{{ msg }}</div>\n }\n </div>\n }\n }\n</div>\n", styles: [":host{display:block}.kms-form-field__mat-field{width:100%}.kms-form-field__label-row{display:flex;align-items:center;gap:4px;margin-bottom:4px}.kms-form-field__group-label{font-size:14px;font-weight:500;color:var(--mat-form-field-label-text-color, rgba(0, 0, 0, .6))}.kms-form-field__row{display:flex;align-items:flex-start;gap:4px}.kms-form-field__control{flex:1;min-width:0}.kms-form-field__tooltip{flex-shrink:0;cursor:help;padding-top:16px}.kms-form-field__errors{padding:0 16px;margin-top:4px}.kms-form-field__error{font-size:12px;line-height:1.2;color:var(--mat-form-field-error-text-color, #f44336)}:host ::ng-deep kms-dropdown-from-data,:host ::ng-deep kms-date-input,:host ::ng-deep kms-time-input,:host ::ng-deep kms-color-input{display:block;width:100%}:host ::ng-deep kms-dropdown-from-data .mat-mdc-form-field,:host ::ng-deep kms-date-input .mat-mdc-form-field,:host ::ng-deep kms-time-input .mat-mdc-form-field,:host ::ng-deep kms-color-input .mat-mdc-form-field{width:100%}:host ::ng-deep kms-numeric-input{display:flex;align-items:center;gap:12px}:host ::ng-deep .mat-mdc-form-field.mat-form-field-disabled .mdc-text-field{background-color:var(--kms-field-disabled-bg, transparent)}:host ::ng-deep .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple{display:var(--kms-field-disabled-line, none)}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i2$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i3$2.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: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5$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: "directive", type: i5$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: IconComponent, selector: "kms-icon", inputs: ["icon", "iconClass", "size", "dontUseSprite", "color"] }, { kind: "component", type: DateInputComponent, selector: "kms-date-input", inputs: ["mode", "disabled", "label", "placeholder", "required", "hint", "errorMessage", "minDate", "maxDate", "monthPicker", "startView"], outputs: ["dateChange", "rangeChange"] }, { kind: "component", type: TooltipIconComponent, selector: "kms-tooltip-icon", inputs: ["tooltipText", "placement", "delay", "iconSize", "tooltipAlwaysVisible", "icon"] }, { kind: "directive", type: DynamicFieldDirective, selector: "[kmsDynamicField]", inputs: ["fieldConfig", "control"], outputs: ["fieldTouched"] }, { kind: "component", type: TextInputComponent, selector: "kms-text-input", inputs: ["disabled", "label", "placeholder", "type", "required", "hint", "errorMessage", "autocomplete", "prefix", "suffix", "prefixIcon", "suffixIcon"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4185
+ }
4186
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormFieldComponent, decorators: [{
4187
+ type: Component,
4188
+ args: [{ selector: 'kms-form-field', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"kms-form-field\"\n [attr.data-field-key]=\"fieldConfig().key\"\n [style.--kms-field-disabled-bg]=\"disabledBackground()\"\n [style.--kms-field-disabled-line]=\"disabledLine()\">\n\n @if (fieldConfig().type === FieldType.OFFSET) {\n <!-- \u2550\u2550\u2550 OFFSET \u2014 empty spacer \u2550\u2550\u2550 -->\n } @else if (isNativeType()) {\n <!-- \u2550\u2550\u2550 NATIVE TYPES \u2550\u2550\u2550 -->\n <div class=\"kms-form-field__row\">\n <div class=\"kms-form-field__control\">\n @if (isTextInputType()) {\n <!-- TEXT \u2014 delegates to kms-text-input CVA -->\n <kms-text-input\n [formControl]=\"control()\"\n [label]=\"fieldConfig().label ?? ''\"\n [placeholder]=\"fieldConfig().placeholder ?? ''\"\n [required]=\"isRequired()\"\n [autocomplete]=\"resolvedAutocomplete() ?? ''\"\n [prefix]=\"fieldConfig().prefix?.type === 'text' ? fieldConfig().prefix!.value : ''\"\n [prefixIcon]=\"fieldConfig().prefix?.type === 'icon' ? fieldConfig().prefix!.value : ''\"\n [suffix]=\"fieldConfig().suffix?.type === 'text' ? fieldConfig().suffix!.value : ''\"\n [suffixIcon]=\"fieldConfig().suffix?.type === 'icon' ? fieldConfig().suffix!.value : ''\"\n [errorMessage]=\"displayErrorMessage()\">\n </kms-text-input>\n } @else if (isDateType()) {\n <!-- DATE / DATE_RANGE / MONTH_PICKER \u2014 delegates to kms-date-input CVA -->\n <kms-date-input\n [formControl]=\"control()\"\n [mode]=\"dateMode()\"\n [label]=\"fieldConfig().label ?? ''\"\n [placeholder]=\"fieldConfig().placeholder ?? ''\"\n [required]=\"isRequired()\"\n [minDate]=\"dateMin()\"\n [maxDate]=\"dateMax()\"\n [monthPicker]=\"isMonthPicker()\"\n [errorMessage]=\"displayErrorMessage()\">\n </kms-date-input>\n } @else {\n <!-- TEXTAREA, AUTOCOMPLETE \u2014 keep existing mat-form-field -->\n <mat-form-field class=\"kms-form-field__mat-field\">\n @if (fieldConfig().label) {\n <mat-label>{{ fieldConfig().label }}</mat-label>\n }\n\n @switch (fieldConfig().type) {\n @case (FieldType.TEXTAREA) {\n <textarea matInput\n [formControl]=\"control()\"\n [placeholder]=\"fieldConfig().placeholder ?? ''\"\n [rows]=\"textareaRows()\"\n [attr.autocomplete]=\"resolvedAutocomplete()\"\n [attr.aria-required]=\"isRequired() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [errorStateMatcher]=\"errorMatcher()\">\n </textarea>\n }\n @case (FieldType.AUTOCOMPLETE) {\n <input matInput\n [formControl]=\"control()\"\n [matAutocomplete]=\"autoPanel\"\n [placeholder]=\"fieldConfig().placeholder ?? ''\"\n [attr.autocomplete]=\"resolvedAutocomplete()\"\n [attr.aria-required]=\"isRequired() ? true : null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [errorStateMatcher]=\"errorMatcher()\">\n <mat-autocomplete #autoPanel=\"matAutocomplete\" [autoActiveFirstOption]=\"autocompleteSelectFirst()\">\n @for (opt of filteredAutoOptions(); track opt.Value) {\n <mat-option [value]=\"opt.Value\">{{ opt.Label }}</mat-option>\n }\n </mat-autocomplete>\n }\n }\n\n <!-- Prefix -->\n @if (fieldConfig().prefix) {\n @if (fieldConfig().prefix!.type === 'text') {\n <span matTextPrefix>{{ fieldConfig().prefix!.value }}&nbsp;</span>\n } @else {\n <kms-icon matPrefix [icon]=\"fieldConfig().prefix!.value\" aria-hidden=\"true\"></kms-icon>\n }\n }\n\n <!-- Suffix -->\n @if (fieldConfig().suffix) {\n @if (fieldConfig().suffix!.type === 'text') {\n <span matTextSuffix>&nbsp;{{ fieldConfig().suffix!.value }}</span>\n } @else {\n <kms-icon matSuffix [icon]=\"fieldConfig().suffix!.value\" aria-hidden=\"true\"></kms-icon>\n }\n }\n\n <!-- Errors -->\n @for (msg of errorMessages(); track msg) {\n <mat-error>{{ msg }}</mat-error>\n }\n </mat-form-field>\n }\n </div>\n\n @if (fieldConfig().tooltip) {\n <kms-tooltip-icon\n class=\"kms-form-field__tooltip\"\n [tooltipText]=\"fieldConfig().tooltip!\"\n [attr.id]=\"tooltipId()\">\n </kms-tooltip-icon>\n }\n </div>\n\n } @else if (fieldConfig().type === FieldType.TEMPLATE && fieldConfig().templateRef) {\n <!-- \u2550\u2550\u2550 TEMPLATE \u2014 consumer-provided template \u2550\u2550\u2550 -->\n <div class=\"kms-form-field__row\">\n <div class=\"kms-form-field__control\">\n <ng-container\n *ngTemplateOutlet=\"fieldConfig().templateRef!; context: { control: control(), $implicit: control() }\">\n </ng-container>\n </div>\n @if (fieldConfig().tooltip) {\n <kms-tooltip-icon\n class=\"kms-form-field__tooltip\"\n [tooltipText]=\"fieldConfig().tooltip!\"\n [attr.id]=\"tooltipId()\">\n </kms-tooltip-icon>\n }\n </div>\n @if (shouldShowErrors() && errorMessages().length) {\n <div class=\"kms-form-field__errors\" role=\"alert\" [attr.id]=\"errorsId()\">\n @for (msg of errorMessages(); track msg) {\n <div class=\"kms-form-field__error\">{{ msg }}</div>\n }\n </div>\n }\n } @else {\n <!-- \u2550\u2550\u2550 LIBRARY TYPES \u2014 dynamic component \u2550\u2550\u2550 -->\n @if (isGroupType()) {\n <div class=\"kms-form-field__label-row\">\n <span class=\"kms-form-field__group-label\" [attr.id]=\"groupLabelId()\">{{ fieldConfig().label }}</span>\n @if (fieldConfig().tooltip) {\n <kms-tooltip-icon [tooltipText]=\"fieldConfig().tooltip!\" [attr.id]=\"tooltipId()\"></kms-tooltip-icon>\n }\n </div>\n }\n\n <div class=\"kms-form-field__row\">\n <div class=\"kms-form-field__control\">\n <ng-container kmsDynamicField\n [fieldConfig]=\"fieldConfig()\"\n [control]=\"control()\"\n (fieldTouched)=\"onFieldTouched()\">\n </ng-container>\n </div>\n\n @if (!isGroupType() && fieldConfig().tooltip) {\n <kms-tooltip-icon\n class=\"kms-form-field__tooltip\"\n [tooltipText]=\"fieldConfig().tooltip!\"\n [attr.id]=\"tooltipId()\">\n </kms-tooltip-icon>\n }\n </div>\n\n @if (shouldShowErrors() && errorMessages().length) {\n <div class=\"kms-form-field__errors\" role=\"alert\" [attr.id]=\"errorsId()\">\n @for (msg of errorMessages(); track msg) {\n <div class=\"kms-form-field__error\">{{ msg }}</div>\n }\n </div>\n }\n }\n</div>\n", styles: [":host{display:block}.kms-form-field__mat-field{width:100%}.kms-form-field__label-row{display:flex;align-items:center;gap:4px;margin-bottom:4px}.kms-form-field__group-label{font-size:14px;font-weight:500;color:var(--mat-form-field-label-text-color, rgba(0, 0, 0, .6))}.kms-form-field__row{display:flex;align-items:flex-start;gap:4px}.kms-form-field__control{flex:1;min-width:0}.kms-form-field__tooltip{flex-shrink:0;cursor:help;padding-top:16px}.kms-form-field__errors{padding:0 16px;margin-top:4px}.kms-form-field__error{font-size:12px;line-height:1.2;color:var(--mat-form-field-error-text-color, #f44336)}:host ::ng-deep kms-dropdown-from-data,:host ::ng-deep kms-date-input,:host ::ng-deep kms-time-input,:host ::ng-deep kms-color-input{display:block;width:100%}:host ::ng-deep kms-dropdown-from-data .mat-mdc-form-field,:host ::ng-deep kms-date-input .mat-mdc-form-field,:host ::ng-deep kms-time-input .mat-mdc-form-field,:host ::ng-deep kms-color-input .mat-mdc-form-field{width:100%}:host ::ng-deep kms-numeric-input{display:flex;align-items:center;gap:12px}:host ::ng-deep .mat-mdc-form-field.mat-form-field-disabled .mdc-text-field{background-color:var(--kms-field-disabled-bg, transparent)}:host ::ng-deep .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple{display:var(--kms-field-disabled-line, none)}\n"] }]
4189
+ }], ctorParameters: () => [], propDecorators: { fieldConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldConfig", required: true }] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: true }] }], formId: [{ type: i0.Input, args: [{ isSignal: true, alias: "formId", required: false }] }], formErrorDisplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "formErrorDisplay", required: false }] }], formDisabledConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "formDisabledConfig", required: false }] }], submitted: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitted", required: false }] }] } });
4190
+
4191
+ const ALIGN_MAP = { left: 'start', center: 'center', right: 'end', stretch: 'stretch' };
4192
+ const VALIGN_MAP = { top: 'start', center: 'center', bottom: 'end', stretch: 'stretch' };
4193
+ class FormSectionComponent {
4194
+ constructor() {
4195
+ this.sectionConfig = input.required(...(ngDevMode ? [{ debugName: "sectionConfig" }] : []));
4196
+ this.formGroup = input.required(...(ngDevMode ? [{ debugName: "formGroup" }] : []));
4197
+ this.formId = input('', ...(ngDevMode ? [{ debugName: "formId" }] : []));
4198
+ this.formErrorDisplay = input(...(ngDevMode ? [undefined, { debugName: "formErrorDisplay" }] : []));
4199
+ this.formDisabledConfig = input(...(ngDevMode ? [undefined, { debugName: "formDisabledConfig" }] : []));
4200
+ this.submitted = input(false, ...(ngDevMode ? [{ debugName: "submitted" }] : []));
4201
+ this.viewportService = inject(ViewportService);
4202
+ this.destroyRef = inject(DestroyRef);
4203
+ this.viewportWidth = signal(this.viewportService.getCurrentViewPortWidth(), ...(ngDevMode ? [{ debugName: "viewportWidth" }] : []));
4204
+ // --- Responsive columns ---
4205
+ this.activeColumns = computed(() => {
4206
+ const c = this.sectionConfig();
4207
+ const w = this.viewportWidth();
4208
+ if (w <= 768)
4209
+ return c.gridColumnsSm ?? 1;
4210
+ if (w <= 1024)
4211
+ return c.gridColumnsMd ?? c.gridColumns ?? 1;
4212
+ return c.gridColumns ?? 1;
4213
+ }, ...(ngDevMode ? [{ debugName: "activeColumns" }] : []));
4214
+ // --- Visible fields ---
4215
+ this.visibleFields = computed(() => {
4216
+ return this.sectionConfig().fields.filter((f) => !f.hidden);
4217
+ }, ...(ngDevMode ? [{ debugName: "visibleFields" }] : []));
4218
+ this.isVisible = computed(() => {
4219
+ if (this.sectionConfig().hidden)
4220
+ return false;
4221
+ return this.visibleFields().length > 0;
4222
+ }, ...(ngDevMode ? [{ debugName: "isVisible" }] : []));
4223
+ // --- Grid styles ---
4224
+ this.gridStyles = computed(() => {
4225
+ const c = this.sectionConfig();
4226
+ return {
4227
+ 'grid-template-columns': `repeat(${this.activeColumns()}, 1fr)`,
4228
+ gap: c.gap ?? '16px',
4229
+ padding: c.padding ?? '0',
4230
+ 'justify-items': ALIGN_MAP[c.align ?? 'stretch'],
4231
+ 'align-items': VALIGN_MAP[c.verticalAlign ?? 'top'],
4232
+ };
4233
+ }, ...(ngDevMode ? [{ debugName: "gridStyles" }] : []));
4234
+ const sub = this.viewportService.getViewportResizedObserver().subscribe((w) => this.viewportWidth.set(w));
4235
+ this.destroyRef.onDestroy(() => sub.unsubscribe());
4236
+ }
4237
+ // --- Per-field cell styles ---
4238
+ cellStyles(field) {
4239
+ const cols = this.activeColumns();
4240
+ const span = Math.min(field.columnSize ?? 1, cols);
4241
+ const styles = { 'grid-column': `span ${span}` };
4242
+ if (field.align) {
4243
+ styles['justify-self'] = ALIGN_MAP[field.align];
4244
+ }
4245
+ return styles;
4246
+ }
4247
+ // --- Control accessor ---
4248
+ static { this.DUMMY_CONTROL = new FormControl(); }
4249
+ getControl(key) {
4250
+ if (!key)
4251
+ return FormSectionComponent.DUMMY_CONTROL;
4252
+ return this.formGroup().get(key) ?? FormSectionComponent.DUMMY_CONTROL;
4253
+ }
4254
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4255
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: FormSectionComponent, isStandalone: false, selector: "kms-form-section", inputs: { sectionConfig: { classPropertyName: "sectionConfig", publicName: "sectionConfig", isSignal: true, isRequired: true, transformFunction: null }, formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, formId: { classPropertyName: "formId", publicName: "formId", isSignal: true, isRequired: false, transformFunction: null }, formErrorDisplay: { classPropertyName: "formErrorDisplay", publicName: "formErrorDisplay", isSignal: true, isRequired: false, transformFunction: null }, formDisabledConfig: { classPropertyName: "formDisabledConfig", publicName: "formDisabledConfig", isSignal: true, isRequired: false, transformFunction: null }, submitted: { classPropertyName: "submitted", publicName: "submitted", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isVisible()) {\n <fieldset class=\"kms-form-section\">\n @if (sectionConfig().title) {\n <legend class=\"kms-form-section__legend\">\n {{ sectionConfig().title }}\n @if (sectionConfig().tooltip) {\n <kms-tooltip-icon [tooltipText]=\"sectionConfig().tooltip!\"></kms-tooltip-icon>\n }\n </legend>\n }\n\n <div class=\"kms-form-section__grid\" [ngStyle]=\"gridStyles()\">\n @for (field of visibleFields(); track field.key ?? $index) {\n <div class=\"kms-form-section__cell\" [ngStyle]=\"cellStyles(field)\">\n <kms-form-field\n [fieldConfig]=\"field\"\n [control]=\"getControl(field.key)\"\n [formId]=\"formId()\"\n [formErrorDisplay]=\"formErrorDisplay()\"\n [formDisabledConfig]=\"formDisabledConfig()\"\n [submitted]=\"submitted()\">\n </kms-form-field>\n </div>\n }\n </div>\n </fieldset>\n}\n", styles: [":host{display:block}.kms-form-section{border:none;margin:0;padding:0;min-inline-size:auto}.kms-form-section__legend{display:flex;align-items:center;gap:4px;font-size:16px;font-weight:500;padding:0 0 8px;width:100%}.kms-form-section__grid{display:grid}.kms-form-section__cell{min-width:0}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: TooltipIconComponent, selector: "kms-tooltip-icon", inputs: ["tooltipText", "placement", "delay", "iconSize", "tooltipAlwaysVisible", "icon"] }, { kind: "component", type: FormFieldComponent, selector: "kms-form-field", inputs: ["fieldConfig", "control", "formId", "formErrorDisplay", "formDisabledConfig", "submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4256
+ }
4257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormSectionComponent, decorators: [{
4258
+ type: Component,
4259
+ args: [{ selector: 'kms-form-section', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (isVisible()) {\n <fieldset class=\"kms-form-section\">\n @if (sectionConfig().title) {\n <legend class=\"kms-form-section__legend\">\n {{ sectionConfig().title }}\n @if (sectionConfig().tooltip) {\n <kms-tooltip-icon [tooltipText]=\"sectionConfig().tooltip!\"></kms-tooltip-icon>\n }\n </legend>\n }\n\n <div class=\"kms-form-section__grid\" [ngStyle]=\"gridStyles()\">\n @for (field of visibleFields(); track field.key ?? $index) {\n <div class=\"kms-form-section__cell\" [ngStyle]=\"cellStyles(field)\">\n <kms-form-field\n [fieldConfig]=\"field\"\n [control]=\"getControl(field.key)\"\n [formId]=\"formId()\"\n [formErrorDisplay]=\"formErrorDisplay()\"\n [formDisabledConfig]=\"formDisabledConfig()\"\n [submitted]=\"submitted()\">\n </kms-form-field>\n </div>\n }\n </div>\n </fieldset>\n}\n", styles: [":host{display:block}.kms-form-section{border:none;margin:0;padding:0;min-inline-size:auto}.kms-form-section__legend{display:flex;align-items:center;gap:4px;font-size:16px;font-weight:500;padding:0 0 8px;width:100%}.kms-form-section__grid{display:grid}.kms-form-section__cell{min-width:0}\n"] }]
4260
+ }], ctorParameters: () => [], propDecorators: { sectionConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionConfig", required: true }] }], formGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "formGroup", required: true }] }], formId: [{ type: i0.Input, args: [{ isSignal: true, alias: "formId", required: false }] }], formErrorDisplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "formErrorDisplay", required: false }] }], formDisabledConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "formDisabledConfig", required: false }] }], submitted: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitted", required: false }] }] } });
4261
+
4262
+ class GenericFormComponent {
4263
+ constructor() {
4264
+ // --- Signal inputs ---
4265
+ this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
4266
+ this.value = model({}, ...(ngDevMode ? [{ debugName: "value" }] : []));
4267
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
4268
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
4269
+ // --- Signal outputs ---
4270
+ this.formSubmit = output();
4271
+ this.formStateChange = output();
4272
+ this.formReady = output();
4273
+ this.fieldValueChange = output();
4274
+ // --- Internal state ---
4275
+ this.formService = inject(GenericFormService);
4276
+ this.elementRef = inject(ElementRef);
4277
+ this.destroyRef = inject(DestroyRef);
4278
+ this.formSub$ = new Subject();
4279
+ this.lastEmittedValue = {};
4280
+ this.form = signal(new FormGroup({}), ...(ngDevMode ? [{ debugName: "form" }] : []));
4281
+ this.submitted = signal(false, ...(ngDevMode ? [{ debugName: "submitted" }] : []));
4282
+ this.errorAnnouncement = signal('', ...(ngDevMode ? [{ debugName: "errorAnnouncement" }] : []));
4283
+ // --- Computed ---
4284
+ this.visibleSections = computed(() => {
4285
+ return this.config().sections.filter((s) => {
4286
+ if (s.hidden)
4287
+ return false;
4288
+ return s.fields.some((f) => !f.hidden);
4289
+ });
4290
+ }, ...(ngDevMode ? [{ debugName: "visibleSections" }] : []));
4291
+ this.showActionsTop = computed(() => {
4292
+ const actions = this.config().submitAction;
4293
+ if (!actions)
4294
+ return false;
4295
+ const pos = actions.position ?? 'bottom';
4296
+ return pos === 'top' || pos === 'both';
4297
+ }, ...(ngDevMode ? [{ debugName: "showActionsTop" }] : []));
4298
+ this.showActionsBottom = computed(() => {
4299
+ const actions = this.config().submitAction;
4300
+ if (!actions)
4301
+ return false;
4302
+ const pos = actions.position ?? 'bottom';
4303
+ return pos === 'bottom' || pos === 'both';
4304
+ }, ...(ngDevMode ? [{ debugName: "showActionsBottom" }] : []));
4305
+ // Config effect — build form when config changes
4306
+ effect(() => {
4307
+ const config = this.config();
4308
+ untracked(() => this.onConfigChange(config));
4309
+ });
4310
+ // Value effect — patch form when external value changes
4311
+ effect(() => {
4312
+ const val = this.value();
4313
+ untracked(() => {
4314
+ if (val !== this.lastEmittedValue) {
4315
+ const fg = this.formService.getFormGroup();
4316
+ if (fg) {
4317
+ this.formService.patchValue(val, { silent: true });
4318
+ }
4319
+ }
4320
+ });
4321
+ });
4322
+ // Disabled effect — enable/disable entire form
4323
+ effect(() => {
4324
+ const disabled = this.disabled();
4325
+ untracked(() => {
4326
+ const fg = this.formService.getFormGroup();
4327
+ if (!fg)
4328
+ return;
4329
+ // Disable/enable individual controls (not the group) so that statusChanges
4330
+ // fires on each — DynamicFieldDirective listens to statusChanges to sync
4331
+ // the disabled state to the child CVA component.
4332
+ const controls = Object.values(fg.controls);
4333
+ if (disabled) {
4334
+ controls.forEach((c) => c.disable({ onlySelf: true }));
4335
+ }
4336
+ else {
4337
+ controls.forEach((c) => c.enable({ onlySelf: true }));
4338
+ this.formService.applyVisibility(this.config());
4339
+ }
4340
+ });
4341
+ });
4342
+ this.destroyRef.onDestroy(() => {
4343
+ this.formSub$.next();
4344
+ this.formSub$.complete();
4345
+ });
4346
+ }
4347
+ onConfigChange(config) {
4348
+ this.formSub$.next();
4349
+ this.submitted.set(false);
4350
+ const fg = this.formService.buildForm(config);
4351
+ this.form.set(fg);
4352
+ // Apply initial value if present
4353
+ const initialValue = this.value();
4354
+ if (Object.keys(initialValue).length > 0) {
4355
+ this.formService.patchValue(initialValue, { silent: true });
4356
+ }
4357
+ // Apply overall disabled state
4358
+ if (this.disabled()) {
4359
+ fg.disable({ emitEvent: false });
4360
+ }
4361
+ // Form value changes → update model, emit state, CVA
4362
+ fg.valueChanges.pipe(takeUntil(this.formSub$)).subscribe(() => {
4363
+ const rawValue = this.formService.getRawValue();
4364
+ this.lastEmittedValue = rawValue;
4365
+ this.value.set(rawValue);
4366
+ this.formStateChange.emit(this.formService.getState());
4367
+ this.cvaOnChange?.(rawValue);
4368
+ });
4369
+ // Field-level value changes
4370
+ for (const section of config.sections) {
4371
+ for (const field of section.fields) {
4372
+ if (!field.key)
4373
+ continue;
4374
+ this.formService
4375
+ .fieldValueChanges$(field.key)
4376
+ .pipe(takeUntil(this.formSub$))
4377
+ .subscribe((fieldValue) => {
4378
+ this.fieldValueChange.emit({ key: field.key, value: fieldValue });
4379
+ });
4380
+ }
4381
+ }
4382
+ this.formReady.emit(fg);
4383
+ this.formStateChange.emit(this.formService.getState());
4384
+ }
4385
+ // --- Public methods ---
4386
+ onFormSubmit(event) {
4387
+ event.preventDefault();
4388
+ }
4389
+ onEnterKey(event) {
4390
+ const target = event.target;
4391
+ if (target.tagName === 'TEXTAREA')
4392
+ return;
4393
+ event.preventDefault();
4394
+ this.submit();
4395
+ }
4396
+ submit() {
4397
+ const valid = this.formService.validateAll();
4398
+ this.submitted.set(true);
4399
+ if (valid) {
4400
+ this.formSubmit.emit(this.formService.getRawValue());
4401
+ this.errorAnnouncement.set('');
4402
+ }
4403
+ else {
4404
+ this.announceErrors();
4405
+ this.focusFirstInvalidField();
4406
+ }
4407
+ this.formStateChange.emit(this.formService.getState());
4408
+ return valid;
4409
+ }
4410
+ validate() {
4411
+ const valid = this.formService.validateAll();
4412
+ this.submitted.set(true);
4413
+ this.formStateChange.emit(this.formService.getState());
4414
+ return valid;
4415
+ }
4416
+ getFormGroup() {
4417
+ return this.formService.getFormGroup();
4418
+ }
4419
+ // --- A11y ---
4420
+ announceErrors() {
4421
+ const errors = this.formService.getErrors();
4422
+ if (!errors)
4423
+ return;
4424
+ const count = Object.keys(errors).length;
4425
+ this.errorAnnouncement.set(count === 1
4426
+ ? '1 field has a validation error.'
4427
+ : `${count} fields have validation errors.`);
4428
+ }
4429
+ focusFirstInvalidField() {
4430
+ const fg = this.formService.getFormGroup();
4431
+ for (const section of this.config().sections) {
4432
+ for (const field of section.fields) {
4433
+ if (!field.key || field.hidden)
4434
+ continue;
4435
+ const control = fg.get(field.key);
4436
+ if (control?.invalid && control.enabled) {
4437
+ const escapedKey = field.key.replace(/["\\]/g, '\\$&');
4438
+ const fieldEl = this.elementRef.nativeElement.querySelector(`[data-field-key="${escapedKey}"]`);
4439
+ const focusable = fieldEl?.querySelector('input, textarea, select, [tabindex]');
4440
+ if (focusable) {
4441
+ focusable.focus();
4442
+ return;
4443
+ }
4444
+ }
4445
+ }
4446
+ }
4447
+ }
4448
+ // --- CVA ---
4449
+ writeValue(value) {
4450
+ if (value) {
4451
+ this.formService.patchValue(value, { silent: true });
4452
+ }
4453
+ }
4454
+ registerOnChange(fn) {
4455
+ this.cvaOnChange = fn;
4456
+ }
4457
+ registerOnTouched(fn) {
4458
+ this.cvaOnTouched = fn;
4459
+ }
4460
+ setDisabledState(isDisabled) {
4461
+ const fg = this.formService.getFormGroup();
4462
+ if (!fg)
4463
+ return;
4464
+ const controls = Object.values(fg.controls);
4465
+ if (isDisabled) {
4466
+ controls.forEach((c) => c.disable({ onlySelf: true }));
4467
+ }
4468
+ else {
4469
+ controls.forEach((c) => c.enable({ onlySelf: true }));
4470
+ this.formService.applyVisibility(this.config());
4471
+ }
4472
+ }
4473
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GenericFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4474
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: GenericFormComponent, isStandalone: false, selector: "kms-generic-form", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", formSubmit: "formSubmit", formStateChange: "formStateChange", formReady: "formReady", fieldValueChange: "fieldValueChange" }, providers: [
4475
+ GenericFormService,
4476
+ {
4477
+ provide: NG_VALUE_ACCESSOR,
4478
+ useExisting: forwardRef(() => GenericFormComponent),
4479
+ multi: true,
4480
+ },
4481
+ ], ngImport: i0, template: "<form class=\"kms-generic-form\"\n [class.kms-generic-form--loading]=\"loading()\"\n [class.kms-generic-form--disabled]=\"disabled()\"\n [attr.aria-busy]=\"loading() || null\"\n [attr.aria-disabled]=\"disabled() || null\"\n (submit)=\"onFormSubmit($event)\"\n (keydown.enter)=\"onEnterKey($event)\">\n\n @if (showActionsTop()) {\n <kms-form-actions\n [actionsConfig]=\"config().submitAction!\"\n [disabled]=\"loading()\"\n (submitClick)=\"submit()\">\n </kms-form-actions>\n }\n\n @for (section of visibleSections(); track section.key) {\n <kms-form-section\n [sectionConfig]=\"section\"\n [formGroup]=\"form()\"\n [formId]=\"config().formId\"\n [formErrorDisplay]=\"config().errorDisplay\"\n [formDisabledConfig]=\"config().disabledConfig\"\n [submitted]=\"submitted()\">\n </kms-form-section>\n }\n\n @if (showActionsBottom()) {\n <kms-form-actions\n [actionsConfig]=\"config().submitAction!\"\n [disabled]=\"loading()\"\n (submitClick)=\"submit()\">\n </kms-form-actions>\n }\n\n @if (loading()) {\n <div class=\"kms-generic-form__loading-overlay\"></div>\n }\n\n <output class=\"kms-generic-form__sr-only\" aria-live=\"polite\">\n {{ errorAnnouncement() }}\n </output>\n</form>\n", styles: [":host{display:block}.kms-generic-form{position:relative}.kms-generic-form--loading{pointer-events:none}.kms-generic-form__loading-overlay{position:absolute;inset:0;background:#fff9;z-index:1}.kms-generic-form__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormSectionComponent, selector: "kms-form-section", inputs: ["sectionConfig", "formGroup", "formId", "formErrorDisplay", "formDisabledConfig", "submitted"] }, { kind: "component", type: FormActionsComponent, selector: "kms-form-actions", inputs: ["actionsConfig", "disabled"], outputs: ["submitClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4482
+ }
4483
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GenericFormComponent, decorators: [{
4484
+ type: Component,
4485
+ args: [{ selector: 'kms-generic-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, providers: [
4486
+ GenericFormService,
4487
+ {
4488
+ provide: NG_VALUE_ACCESSOR,
4489
+ useExisting: forwardRef(() => GenericFormComponent),
4490
+ multi: true,
4491
+ },
4492
+ ], template: "<form class=\"kms-generic-form\"\n [class.kms-generic-form--loading]=\"loading()\"\n [class.kms-generic-form--disabled]=\"disabled()\"\n [attr.aria-busy]=\"loading() || null\"\n [attr.aria-disabled]=\"disabled() || null\"\n (submit)=\"onFormSubmit($event)\"\n (keydown.enter)=\"onEnterKey($event)\">\n\n @if (showActionsTop()) {\n <kms-form-actions\n [actionsConfig]=\"config().submitAction!\"\n [disabled]=\"loading()\"\n (submitClick)=\"submit()\">\n </kms-form-actions>\n }\n\n @for (section of visibleSections(); track section.key) {\n <kms-form-section\n [sectionConfig]=\"section\"\n [formGroup]=\"form()\"\n [formId]=\"config().formId\"\n [formErrorDisplay]=\"config().errorDisplay\"\n [formDisabledConfig]=\"config().disabledConfig\"\n [submitted]=\"submitted()\">\n </kms-form-section>\n }\n\n @if (showActionsBottom()) {\n <kms-form-actions\n [actionsConfig]=\"config().submitAction!\"\n [disabled]=\"loading()\"\n (submitClick)=\"submit()\">\n </kms-form-actions>\n }\n\n @if (loading()) {\n <div class=\"kms-generic-form__loading-overlay\"></div>\n }\n\n <output class=\"kms-generic-form__sr-only\" aria-live=\"polite\">\n {{ errorAnnouncement() }}\n </output>\n</form>\n", styles: [":host{display:block}.kms-generic-form{position:relative}.kms-generic-form--loading{pointer-events:none}.kms-generic-form__loading-overlay{position:absolute;inset:0;background:#fff9;z-index:1}.kms-generic-form__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
4493
+ }], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], formSubmit: [{ type: i0.Output, args: ["formSubmit"] }], formStateChange: [{ type: i0.Output, args: ["formStateChange"] }], formReady: [{ type: i0.Output, args: ["formReady"] }], fieldValueChange: [{ type: i0.Output, args: ["fieldValueChange"] }] } });
4494
+
3236
4495
  class KmsUiPresentationalModule {
3237
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3238
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalModule, declarations: [BackToTopComponent,
4496
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4497
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalModule, declarations: [BackToTopComponent,
3239
4498
  CheckboxComponent,
3240
4499
  ColorInputComponent,
3241
4500
  DropdownFromDataComponent,
@@ -3243,7 +4502,6 @@ class KmsUiPresentationalModule {
3243
4502
  FileInputComponent,
3244
4503
  FlyoutComponent,
3245
4504
  ConfirmationDialogComponent,
3246
- IconComponent,
3247
4505
  ImageSliderComponent,
3248
4506
  KMSAccordionItemComponent,
3249
4507
  KmsUiPresentationalComponent,
@@ -3261,7 +4519,13 @@ class KmsUiPresentationalModule {
3261
4519
  SliderComponent,
3262
4520
  CardComponent,
3263
4521
  ButtonComponent,
3264
- NumericInputComponent], imports: [CommonModule,
4522
+ NumericInputComponent,
4523
+ GenericFormComponent,
4524
+ FormSectionComponent,
4525
+ FormFieldComponent,
4526
+ FormActionsComponent,
4527
+ DynamicFieldDirective,
4528
+ TextInputComponent], imports: [CommonModule,
3265
4529
  DragDropModule,
3266
4530
  MatCheckboxModule,
3267
4531
  MatButtonModule,
@@ -3276,6 +4540,7 @@ class KmsUiPresentationalModule {
3276
4540
  GoogleMapsModule,
3277
4541
  MatExpansionModule,
3278
4542
  MatSelectModule,
4543
+ NgxMatSelectSearchModule,
3279
4544
  MatProgressSpinnerModule,
3280
4545
  DirectivesModule,
3281
4546
  MatSlideToggleModule,
@@ -3284,7 +4549,11 @@ class KmsUiPresentationalModule {
3284
4549
  NgxSliderModule,
3285
4550
  MatAutocompleteModule,
3286
4551
  MatListModule,
3287
- MatCardModule], exports: [BackToTopComponent,
4552
+ MatCardModule,
4553
+ MatDatepickerModule,
4554
+ MatNativeDateModule,
4555
+ IconComponent,
4556
+ DateInputComponent], exports: [BackToTopComponent,
3288
4557
  CheckboxComponent,
3289
4558
  ColorInputComponent,
3290
4559
  DropdownFromDataComponent,
@@ -3310,8 +4579,14 @@ class KmsUiPresentationalModule {
3310
4579
  SliderComponent,
3311
4580
  CardComponent,
3312
4581
  ButtonComponent,
3313
- NumericInputComponent] }); }
3314
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalModule, providers: [ViewportService], imports: [CommonModule,
4582
+ NumericInputComponent,
4583
+ GenericFormComponent,
4584
+ FormSectionComponent,
4585
+ FormActionsComponent,
4586
+ DynamicFieldDirective,
4587
+ DateInputComponent,
4588
+ TextInputComponent] }); }
4589
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalModule, providers: [ViewportService], imports: [CommonModule,
3315
4590
  DragDropModule,
3316
4591
  MatCheckboxModule,
3317
4592
  MatButtonModule,
@@ -3326,6 +4601,7 @@ class KmsUiPresentationalModule {
3326
4601
  GoogleMapsModule,
3327
4602
  MatExpansionModule,
3328
4603
  MatSelectModule,
4604
+ NgxMatSelectSearchModule,
3329
4605
  MatProgressSpinnerModule,
3330
4606
  DirectivesModule,
3331
4607
  MatSlideToggleModule,
@@ -3334,9 +4610,12 @@ class KmsUiPresentationalModule {
3334
4610
  NgxSliderModule,
3335
4611
  MatAutocompleteModule,
3336
4612
  MatListModule,
3337
- MatCardModule] }); }
4613
+ MatCardModule,
4614
+ MatDatepickerModule,
4615
+ MatNativeDateModule,
4616
+ DateInputComponent] }); }
3338
4617
  }
3339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalModule, decorators: [{
4618
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalModule, decorators: [{
3340
4619
  type: NgModule,
3341
4620
  args: [{
3342
4621
  declarations: [
@@ -3348,7 +4627,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3348
4627
  FileInputComponent,
3349
4628
  FlyoutComponent,
3350
4629
  ConfirmationDialogComponent,
3351
- IconComponent,
3352
4630
  ImageSliderComponent,
3353
4631
  KMSAccordionItemComponent,
3354
4632
  KmsUiPresentationalComponent,
@@ -3367,6 +4645,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3367
4645
  CardComponent,
3368
4646
  ButtonComponent,
3369
4647
  NumericInputComponent,
4648
+ GenericFormComponent,
4649
+ FormSectionComponent,
4650
+ FormFieldComponent,
4651
+ FormActionsComponent,
4652
+ DynamicFieldDirective,
4653
+ TextInputComponent,
3370
4654
  ],
3371
4655
  imports: [
3372
4656
  CommonModule,
@@ -3384,6 +4668,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3384
4668
  GoogleMapsModule,
3385
4669
  MatExpansionModule,
3386
4670
  MatSelectModule,
4671
+ NgxMatSelectSearchModule,
3387
4672
  MatProgressSpinnerModule,
3388
4673
  DirectivesModule,
3389
4674
  MatSlideToggleModule,
@@ -3393,6 +4678,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3393
4678
  MatAutocompleteModule,
3394
4679
  MatListModule,
3395
4680
  MatCardModule,
4681
+ MatDatepickerModule,
4682
+ MatNativeDateModule,
4683
+ IconComponent,
4684
+ DateInputComponent,
3396
4685
  ],
3397
4686
  exports: [
3398
4687
  BackToTopComponent,
@@ -3422,6 +4711,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3422
4711
  CardComponent,
3423
4712
  ButtonComponent,
3424
4713
  NumericInputComponent,
4714
+ GenericFormComponent,
4715
+ FormSectionComponent,
4716
+ FormActionsComponent,
4717
+ DynamicFieldDirective,
4718
+ DateInputComponent,
4719
+ TextInputComponent,
3425
4720
  ],
3426
4721
  providers: [ViewportService],
3427
4722
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
@@ -3430,10 +4725,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3430
4725
 
3431
4726
  class KmsUiPresentationalService {
3432
4727
  constructor() { }
3433
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3434
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalService, providedIn: 'root' }); }
4728
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4729
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalService, providedIn: 'root' }); }
3435
4730
  }
3436
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KmsUiPresentationalService, decorators: [{
4731
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: KmsUiPresentationalService, decorators: [{
3437
4732
  type: Injectable,
3438
4733
  args: [{
3439
4734
  providedIn: 'root'
@@ -3467,14 +4762,49 @@ function noSpecialCharsOnly() {
3467
4762
  };
3468
4763
  }
3469
4764
 
4765
+ /**
4766
+ * Lightweight facade module for the generic-form feature.
4767
+ *
4768
+ * - Provides `FieldRegistryService` (maps FieldType → library component classes).
4769
+ * - Merges pre-translated validation error messages into `@ngx-translate`
4770
+ * so that `GenericFormService.resolveErrorMessage()` can look them up.
4771
+ *
4772
+ * **Does NOT declare any components** — those live in `KmsUiPresentationalModule`
4773
+ * to avoid circular AOT imports.
4774
+ *
4775
+ * Consuming apps import both modules:
4776
+ * ```ts
4777
+ * imports: [KmsUiPresentationalModule, GenericFormModule]
4778
+ * ```
4779
+ */
4780
+ class GenericFormModule {
4781
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GenericFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4782
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: GenericFormModule, imports: [TranslateModule] }); }
4783
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GenericFormModule, providers: [FieldRegistryService], imports: [TranslateModule] }); }
4784
+ }
4785
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GenericFormModule, decorators: [{
4786
+ type: NgModule,
4787
+ args: [{
4788
+ imports: [TranslateModule],
4789
+ providers: [FieldRegistryService],
4790
+ }]
4791
+ }] });
4792
+
4793
+ /** Form layout mode. Currently only GRID is implemented. */
4794
+ var FormLayout;
4795
+ (function (FormLayout) {
4796
+ FormLayout["VERTICAL"] = "vertical";
4797
+ FormLayout["GRID"] = "grid";
4798
+ FormLayout["INLINE"] = "inline";
4799
+ })(FormLayout || (FormLayout = {}));
4800
+
3470
4801
  /*
3471
4802
  * Public API Surface of kms-ngx-ui-presentational
3472
4803
  */
3473
- // Organisms
3474
4804
 
3475
4805
  /**
3476
4806
  * Generated bundle index. Do not edit.
3477
4807
  */
3478
4808
 
3479
- export { BackToTopComponent, Breakpoint, ButtonAppearance, ButtonComponent, ButtonResponseType, CardComponent, CheckboxComponent, Color, ColorInputComponent, ConfirmationDialogComponent, CustomPipesModule, DirectivesModule, DropdownFromDataComponent, EnumRadiogroupComponent, FileInputComponent, FlyoutComponent, FormParentComponent, GetMaxHeightDirective, IconComponent, IconSizePx, IconSizesArr, ImageSliderComponent, ImageSnippet, ImageSourceType, IntegerCurrency, KMSAccordionItemComponent, KeyValuePair, KmsUiPresentationalComponent, KmsUiPresentationalModule, KmsUiPresentationalService, LabelValuePair, LoaderComponent, MapComponent, Marker, MarkerLabel, MarkerOptions, NumericInputComponent, PasswordComponent, RadioButtonComponent, RadioButtonSize, RadioGroupComponent, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, SalutationDropdownComponent, SalutationEnum, SalutationRadiogroupComponent, SanitizeNullPipe, SimpleBreakpoint, SlideToggleComponent, SliderComponent, StylingTheme, SwipeDirective, TextValuePair, TextValuePairArray, TimeDirective, TimeInputComponent, TooltipDirective, TooltipIconComponent, TrimPipe, TypeofPipe, ViewportService, WindowDimensions, YesNoRadiogroupComponent, noSpecialCharsOnly, noWhitespaceOnly };
4809
+ export { BackToTopComponent, Breakpoint, ButtonAppearance, ButtonComponent, ButtonResponseType, CardComponent, CheckboxComponent, Color, ColorInputComponent, ConfirmationDialogComponent, CustomPipesModule, DateInputComponent, DirectivesModule, DropdownFromDataComponent, DynamicFieldDirective, EnumRadiogroupComponent, FieldRegistryService, FieldType, FileInputComponent, FlyoutComponent, FormActionsComponent, FormFieldComponent, FormLayout, FormParentComponent, FormSectionComponent, GenericFormComponent, GenericFormModule, GenericFormService, GetMaxHeightDirective, IconComponent, IconSizePx, IconSizesArr, ImageSliderComponent, ImageSnippet, ImageSourceType, IntegerCurrency, KMSAccordionItemComponent, KeyValuePair, KmsUiPresentationalComponent, KmsUiPresentationalModule, KmsUiPresentationalService, LabelValuePair, LoaderComponent, MapComponent, Marker, MarkerLabel, MarkerOptions, NumericInputComponent, PasswordComponent, RadioButtonComponent, RadioButtonSize, RadioGroupComponent, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, SalutationDropdownComponent, SalutationEnum, SalutationRadiogroupComponent, SanitizeNullPipe, SimpleBreakpoint, SlideToggleComponent, SliderComponent, StylingTheme, SwipeDirective, TextInputComponent, TextValuePair, TextValuePairArray, TimeDirective, TimeInputComponent, TooltipDirective, TooltipIconComponent, TrimPipe, TypeofPipe, ViewportService, WindowDimensions, YesNoRadiogroupComponent, noSpecialCharsOnly, noWhitespaceOnly };
3480
4810
  //# sourceMappingURL=kms-ngx-ui-presentational.mjs.map