@3kles/kles-material-dynamicforms 22.0.3 → 22.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { signal, InjectionToken, inject, Component, Injector, Input, Directive,
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule, AsyncPipe } from '@angular/common';
5
5
  import * as i2 from '@angular/forms';
6
- import { Validators, FormControl, ReactiveFormsModule, FormsModule, FormArray, UntypedFormGroup, UntypedFormBuilder, NG_VALUE_ACCESSOR, FormGroup } from '@angular/forms';
6
+ import { Validators, FormControl, ReactiveFormsModule, FormsModule, UntypedFormGroup, FormArray, NG_VALUE_ACCESSOR, FormGroup } from '@angular/forms';
7
7
  import { concat, of, combineLatest, startWith, map as map$1, switchMap, Subject, Observable, defer, ReplaySubject, isObservable, takeUntil as takeUntil$1, timer, distinctUntilChanged as distinctUntilChanged$1, shareReplay as shareReplay$1 } from 'rxjs';
8
8
  import { tap, take, catchError, map, takeUntil, distinctUntilChanged, filter, switchMap as switchMap$1, startWith as startWith$1, shareReplay, debounceTime, debounce } from 'rxjs/operators';
9
9
  import * as i3 from '@angular/material/form-field';
@@ -11,7 +11,7 @@ import { MatError, MatFormFieldModule, MatFormField, MatHint, MatLabel, MatSuffi
11
11
  import { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS, ErrorStateMatcher, MatNativeDateModule, MatOptionModule, MatOption as MatOption$1 } from '@angular/material/core';
12
12
  import * as i2$1 from '@angular/material/icon';
13
13
  import { MatIcon, MatIconModule } from '@angular/material/icon';
14
- import * as i4$2 from '@angular/material/button';
14
+ import * as i2$2 from '@angular/material/button';
15
15
  import { MatIconButton, MatButtonModule, MatButton } from '@angular/material/button';
16
16
  import { toSignal, toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
17
17
  import { MatSliderModule } from '@angular/material/slider';
@@ -64,7 +64,7 @@ import { parseColor, toCssRgba, readableTextColor, MaterialColorPickerTriggerCom
64
64
  import * as i3$3 from '@angular/cdk/text-field';
65
65
  import { TextFieldModule } from '@angular/cdk/text-field';
66
66
  import { getMultipleValuesInSingleSelectionError } from '@angular/cdk/collections';
67
- import * as i4$3 from '@3kles/kles-material-datepicker';
67
+ import * as i4$2 from '@3kles/kles-material-datepicker';
68
68
  import { KlesMaterialDatepickerModule } from '@3kles/kles-material-datepicker';
69
69
  import { Clipboard, ClipboardModule } from '@angular/cdk/clipboard';
70
70
  import { MatDividerModule } from '@angular/material/divider';
@@ -534,9 +534,9 @@ class MatErrorFormDirective {
534
534
  ...(ngDevMode ? [{ debugName: "validations" }] : /* istanbul ignore next */ []));
535
535
  this.asyncValidations = input([], /* @ts-ignore */
536
536
  ...(ngDevMode ? [{ debugName: "asyncValidations" }] : /* istanbul ignore next */ []));
537
- this.validationsKeys = computed(() => flattenValidators(this.validations()), /* @ts-ignore */
537
+ this.validationsKeys = computed(() => flattenValidators(this.validations() ?? []), /* @ts-ignore */
538
538
  ...(ngDevMode ? [{ debugName: "validationsKeys" }] : /* istanbul ignore next */ []));
539
- this.asyncValidationsKeys = computed(() => flattenValidators(this.asyncValidations()), /* @ts-ignore */
539
+ this.asyncValidationsKeys = computed(() => flattenValidators(this.asyncValidations() ?? []), /* @ts-ignore */
540
540
  ...(ngDevMode ? [{ debugName: "asyncValidationsKeys" }] : /* istanbul ignore next */ []));
541
541
  this.formErrors = toSignal(toObservable(this.form).pipe(switchMap((form) => form.statusChanges.pipe(startWith(form.status), map$1(() => form.errors)))), { initialValue: null });
542
542
  }
@@ -555,13 +555,11 @@ class MatErrorFormDirective {
555
555
  }
556
556
  }
557
557
  }
558
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }] }); }
558
+ `, isInline: true, styles: [":host{overflow-wrap:break-word}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }] }); }
559
559
  }
560
560
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: MatErrorFormDirective, decorators: [{
561
561
  type: Component,
562
- args: [{
563
- selector: '[matErrorForm]',
564
- template: `
562
+ args: [{ selector: '[matErrorForm]', template: `
565
563
  @if (formErrors()) {
566
564
  @for (validation of validationsKeys(); track validation.name) {
567
565
  @if (form().hasError(validation.name) && validation.message) {
@@ -575,10 +573,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
575
573
  }
576
574
  }
577
575
  }
578
- `,
579
- standalone: true,
580
- imports: [ReactiveFormsModule, FormsModule],
581
- }]
576
+ `, standalone: true, imports: [ReactiveFormsModule, FormsModule], styles: [":host{overflow-wrap:break-word}\n"] }]
582
577
  }], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }], validations: [{ type: i0.Input, args: [{ isSignal: true, alias: "validations", required: false }] }], asyncValidations: [{ type: i0.Input, args: [{ isSignal: true, alias: "asyncValidations", required: false }] }] } });
583
578
 
584
579
  class KlesFormErrorStateMatcher {
@@ -1622,13 +1617,11 @@ class MatErrorMessageDirective {
1622
1617
  }
1623
1618
  }
1624
1619
  }
1625
- `, isInline: true }); }
1620
+ `, isInline: true, styles: [":host{overflow-wrap:break-word}\n"] }); }
1626
1621
  }
1627
1622
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: MatErrorMessageDirective, decorators: [{
1628
1623
  type: Component,
1629
- args: [{
1630
- selector: '[matErrorMessage]',
1631
- template: `
1624
+ args: [{ selector: '[matErrorMessage]', template: `
1632
1625
  @if (errors(); as errors) {
1633
1626
  @for (validation of validationsKeys(); track validation.name) {
1634
1627
  @if (errors[validation.name] && validation.message) {
@@ -1642,9 +1635,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
1642
1635
  }
1643
1636
  }
1644
1637
  }
1645
- `,
1646
- standalone: true,
1647
- }]
1638
+ `, standalone: true, styles: [":host{overflow-wrap:break-word}\n"] }]
1648
1639
  }], propDecorators: { validations: [{ type: i0.Input, args: [{ isSignal: true, alias: "validations", required: false }] }], asyncValidations: [{ type: i0.Input, args: [{ isSignal: true, alias: "asyncValidations", required: false }] }] } });
1649
1640
 
1650
1641
  class KlesDynamicFormIntl {
@@ -1653,7 +1644,10 @@ class KlesDynamicFormIntl {
1653
1644
  this.selectAll = 'Select all';
1654
1645
  this.clearSearch = 'Clear';
1655
1646
  this.search = 'Search';
1647
+ this.add = 'Add';
1648
+ this.delete = 'Delete';
1656
1649
  this.copy = 'Copied value';
1650
+ this.empty = 'No items';
1657
1651
  this.imageUploadChange = 'Change image';
1658
1652
  this.imageUploadDelete = 'Delete';
1659
1653
  this.imageUploadInvalidType = 'Unsupported image format.';
@@ -2089,198 +2083,395 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
2089
2083
  `, standalone: true, imports: [CommonModule, ReactiveFormsModule, MatCheckbox, MatTooltip, KlesFocusTargetDirective] }]
2090
2084
  }], propDecorators: { checkbox: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatCheckbox), { isSignal: true }] }] } });
2091
2085
 
2086
+ function createKlesFormArrayGroup(field, ref, value) {
2087
+ const line = {
2088
+ ...(value ?? {}),
2089
+ _id: value?._id ?? v4(),
2090
+ };
2091
+ const group = new UntypedFormGroup({
2092
+ _id: new FormControl(line._id),
2093
+ });
2094
+ for (const subfield of field.collections ?? []) {
2095
+ const data = line[subfield.name];
2096
+ const childField = {
2097
+ ...subfield,
2098
+ ...(data !== undefined ? { value: data } : {}),
2099
+ };
2100
+ let control;
2101
+ if (subfield.type) {
2102
+ control = componentMapper.find((c) => c.type === subfield.type)?.factory(childField, ref) ?? klesFieldControlFactory(childField, ref);
2103
+ }
2104
+ else {
2105
+ control = componentMapper.find((c) => c.component === subfield.component)?.factory(childField, ref) ?? klesFieldControlFactory(childField, ref);
2106
+ }
2107
+ group.addControl(subfield.name, control);
2108
+ }
2109
+ return group;
2110
+ }
2111
+
2092
2112
  class KlesFormArray extends KlesFormControl {
2093
2113
  create() {
2094
2114
  const array = new FormArray([], {
2095
2115
  validators: this.bindValidations(this.field.validations || []),
2096
2116
  asyncValidators: this.bindAsyncValidations(this.field.asyncValidations || []),
2097
- updateOn: this.field.updateOn || 'change'
2117
+ updateOn: this.field.updateOn || 'change',
2118
+ });
2119
+ if (Array.isArray(this.field.value)) {
2120
+ for (const value of this.field.value) {
2121
+ array.push(createKlesFormArrayGroup(this.field, this.ref, value));
2122
+ }
2123
+ }
2124
+ else {
2125
+ array.push(createKlesFormArrayGroup(this.field, this.ref));
2126
+ }
2127
+ if (this.field.disabled) {
2128
+ array.disable();
2129
+ }
2130
+ return array;
2131
+ }
2132
+ }
2133
+
2134
+ class ArrayUiState extends AbstractUiState {
2135
+ constructor(states) {
2136
+ super();
2137
+ this.states = [];
2138
+ this.states = states ?? [];
2139
+ this.states.forEach((state, index) => {
2140
+ state.setParent(this, index);
2141
+ });
2142
+ this._value.set(this.states.map((state) => state.value()));
2143
+ }
2144
+ setValue(value) {
2145
+ if (!Array.isArray(value)) {
2146
+ return;
2147
+ }
2148
+ value.forEach((newValue, index) => {
2149
+ this.at(index)?.setValue(newValue);
2150
+ });
2151
+ this._value.set(value);
2152
+ this.notifyParent();
2153
+ }
2154
+ patchValue(value) {
2155
+ if (value == null) {
2156
+ return;
2157
+ }
2158
+ value.forEach((newValue, index) => {
2159
+ const st = this.at(index);
2160
+ if (st) {
2161
+ st.patchValue(newValue);
2162
+ }
2098
2163
  });
2164
+ const curr = this._value() ?? [];
2165
+ const next = [...curr];
2166
+ value.forEach((newValue, index) => {
2167
+ next[index] = {
2168
+ ...(next[index] ?? {}),
2169
+ ...newValue,
2170
+ };
2171
+ });
2172
+ this._value.set(next);
2173
+ this.notifyParent();
2174
+ }
2175
+ childValueChanged(key, value) {
2176
+ const index = typeof key === 'number' ? key : Number(key);
2177
+ if (!Number.isInteger(index) || index < 0)
2178
+ return;
2179
+ const curr = this._value() ?? [];
2180
+ const next = [...curr];
2181
+ next[index] = value;
2182
+ this._value.set(next);
2183
+ this.notifyParent();
2184
+ }
2185
+ at(index) {
2186
+ return this.states?.[index] ?? null;
2187
+ }
2188
+ _find(name) {
2189
+ const idx = typeof name === 'number' ? name : Number(name);
2190
+ return Number.isFinite(idx) ? this.at(idx) : null;
2191
+ }
2192
+ push(control) {
2193
+ const items = Array.isArray(control) ? control : [control];
2194
+ if (items.length === 0) {
2195
+ return;
2196
+ }
2197
+ for (const item of items) {
2198
+ const index = this.states.length;
2199
+ this.states.push(item);
2200
+ item.setParent(this, index);
2201
+ }
2202
+ this._value.set(this.states.map((s) => s.value()));
2203
+ this.notifyParent();
2204
+ }
2205
+ insert(index, state) {
2206
+ const items = Array.isArray(state) ? state : [state];
2207
+ if (items.length === 0) {
2208
+ return;
2209
+ }
2210
+ const safeIndex = Math.max(0, Math.min(index, this.states.length));
2211
+ this.states.splice(safeIndex, 0, ...items);
2212
+ for (let i = safeIndex; i < this.states.length; i++) {
2213
+ this.states[i]?.setParent(this, i);
2214
+ }
2215
+ const curr = this._value();
2216
+ const next = [...curr];
2217
+ next.splice(safeIndex, 0, ...items.map((item) => item.value()));
2218
+ this._value.set(next);
2219
+ this.notifyParent();
2220
+ }
2221
+ removeAt(index) {
2222
+ if (index < 0 || index >= this.states.length)
2223
+ return;
2224
+ this.states.splice(index, 1);
2225
+ this.states.forEach((state, i) => {
2226
+ state.setParent(this, i);
2227
+ });
2228
+ const curr = this._value() ?? [];
2229
+ const next = [...curr];
2230
+ next.splice(index, 1);
2231
+ this._value.set(next);
2232
+ this.notifyParent();
2233
+ }
2234
+ clear() {
2235
+ this.states.length = 0;
2236
+ this._value.set([]);
2237
+ this.notifyParent();
2238
+ }
2239
+ }
2240
+
2241
+ class KlesFormUiArray extends KlesFormUiControl {
2242
+ create() {
2243
+ const array = new ArrayUiState();
2099
2244
  if (this.field.value && Array.isArray(this.field.value)) {
2100
2245
  if (this.field.collections && Array.isArray(this.field.collections)) {
2101
- this.field.value.forEach(val => {
2102
- const line = { ...val, _id: val?._id || v4() };
2103
- const group = new UntypedFormGroup({ _id: new FormControl(line._id) });
2104
- this.field.collections?.forEach(subfield => {
2105
- const data = line[subfield.name] || null;
2246
+ this.field.value.forEach(() => {
2247
+ const group = new GroupUiState();
2248
+ this.field.collections?.forEach((subfield) => {
2106
2249
  let control;
2107
2250
  if (subfield.type) {
2108
- control = componentMapper.find(c => c.type === subfield.type)?.factory({ ...subfield, ...(data && { value: data }) }, this.ref)
2109
- || klesFieldControlFactory({ ...subfield, ...(data && { value: data }) }, this.ref);
2251
+ control = componentMapper.find((c) => c.type === subfield.type)?.ui(subfield) || klesFieldUiFactory(subfield);
2110
2252
  }
2111
2253
  else {
2112
- control = componentMapper.find(c => c.component === subfield.component)?.factory({ ...subfield, ...(data && { value: data }) }, this.ref)
2113
- || klesFieldControlFactory({ ...subfield, ...(data && { value: data }) }, this.ref);
2254
+ control = componentMapper.find((c) => c.component === subfield.component)?.ui(subfield) || klesFieldUiFactory(subfield);
2114
2255
  }
2115
- group.addControl(subfield.name, control);
2256
+ group.addUiState(subfield.name, control);
2116
2257
  });
2117
2258
  array.push(group);
2118
2259
  });
2119
2260
  }
2120
2261
  }
2121
2262
  else {
2122
- const group = new UntypedFormGroup({ _id: new FormControl(v4()) });
2123
- this.field.collections?.forEach(subfield => {
2263
+ const group = new GroupUiState();
2264
+ this.field.collections?.forEach((subfield) => {
2124
2265
  let control;
2125
2266
  if (subfield.type) {
2126
- control = componentMapper.find(c => c.type === subfield.type)?.factory({ ...subfield }, this.ref)
2127
- || klesFieldControlFactory({ ...subfield }, this.ref);
2267
+ control = componentMapper.find((c) => c.type === subfield.type)?.ui(subfield) || klesFieldUiFactory(subfield);
2128
2268
  }
2129
2269
  else {
2130
- control = componentMapper.find(c => c.component === subfield.component)?.factory({ ...subfield }, this.ref)
2131
- || klesFieldControlFactory({ ...subfield }, this.ref);
2270
+ control = componentMapper.find((c) => c.component === subfield.component)?.ui(subfield) || klesFieldUiFactory(subfield);
2132
2271
  }
2133
- group.addControl(subfield.name, control);
2272
+ group.addUiState(subfield.name, control);
2134
2273
  });
2135
2274
  array.push(group);
2136
2275
  }
2137
- if (this.field.disabled) {
2138
- array.disable();
2139
- }
2140
2276
  return array;
2141
2277
  }
2142
2278
  }
2143
2279
 
2280
+ class KlesFormUiGroup extends KlesFormUiControl {
2281
+ create() {
2282
+ const subGroup = new GroupUiState();
2283
+ if (this.field.collections && Array.isArray(this.field.collections)) {
2284
+ this.field.collections.forEach((subfield) => {
2285
+ let ui;
2286
+ if (subfield.type) {
2287
+ ui =
2288
+ componentMapper.find((c) => c.type === subfield.type)?.ui({ ...subfield, value: subfield.value || this.field.value?.[subfield.name] }) ||
2289
+ klesFieldUiFactory({ ...subfield, value: subfield.value || this.field.value?.[subfield.name] });
2290
+ }
2291
+ else {
2292
+ ui =
2293
+ componentMapper.find((c) => c.component === subfield.component)?.ui({ ...subfield, value: subfield.value || this.field.value?.[subfield.name] }) ||
2294
+ klesFieldUiFactory({ ...subfield, value: subfield.value || this.field.value?.[subfield.name] });
2295
+ }
2296
+ subGroup.addUiState(subfield.name, ui);
2297
+ });
2298
+ }
2299
+ return subGroup;
2300
+ }
2301
+ }
2302
+
2144
2303
  let KlesFormListFieldComponent = class KlesFormListFieldComponent extends KlesFieldAbstract {
2145
2304
  constructor() {
2146
- super(...arguments);
2305
+ super();
2306
+ this.intl = inject(KlesDynamicFormIntl);
2147
2307
  this.collections = signal([], /* @ts-ignore */
2148
2308
  ...(ngDevMode ? [{ debugName: "collections" }] : /* istanbul ignore next */ []));
2149
- this.fb = inject(UntypedFormBuilder);
2150
- }
2151
- ngOnInit() {
2152
2309
  this.formArray = this.group.controls[this.field.name];
2153
2310
  this.collections.set(this.formArray.controls.map(() => {
2154
- return this.field.collections ? cloneDeep(this.field.collections) : [];
2311
+ return cloneDeep(this.field.collections ?? []);
2155
2312
  }));
2313
+ }
2314
+ ngOnInit() {
2315
+ this.subUi = this.ui?.get(this.field.name);
2156
2316
  super.ngOnInit();
2157
2317
  }
2158
- createFormGroup() {
2159
- const group = this.fb.group({});
2160
- this.field.collections?.forEach((item) => {
2161
- const control = this.fb.control(null, this.bindValidations(item.validations || []), this.bindAsyncValidations(item.asyncValidations || []));
2162
- group.addControl(item.name, control);
2163
- });
2164
- return group;
2318
+ getRowUi(index) {
2319
+ return this.subUi.at(index);
2320
+ }
2321
+ get hasLayout() {
2322
+ return (this.field.collections ?? []).some((subfield) => subfield.layout != null);
2323
+ }
2324
+ get fieldsDirection() {
2325
+ if (this.hasLayout) {
2326
+ return this.field.direction === 'inline-grid' ? 'inline-grid' : 'grid';
2327
+ }
2328
+ return this.field.direction ?? 'row';
2165
2329
  }
2166
2330
  deleteField(index) {
2167
- this.collections.update((collections) => collections.filter((_, currentIndex) => currentIndex !== index));
2331
+ this.subUi.removeAt(index);
2168
2332
  this.formArray.removeAt(index);
2333
+ this.collections.update((collections) => collections.filter((_, currentIndex) => currentIndex !== index));
2169
2334
  }
2170
2335
  addField() {
2171
- const collection = this.field.collections ? cloneDeep(this.field.collections) : [];
2172
- this.collections.update((collections) => [...collections, collection]);
2173
- this.formArray.push(this.createFormGroup());
2336
+ this.subUi.push(new KlesFormUiGroup({ ...this.field, value: undefined }).create());
2337
+ this.formArray.push(createKlesFormArrayGroup(this.field));
2338
+ this.collections.update((collections) => [...collections, cloneDeep(this.field.collections ?? [])]);
2174
2339
  }
2175
- bindValidations(validations) {
2176
- if (validations.length > 0) {
2177
- const validList = [];
2178
- validations.forEach((valid) => {
2179
- validList.push(valid.validator);
2180
- });
2181
- return Validators.compose(validList);
2182
- }
2183
- return null;
2340
+ ngOnDestroy() {
2341
+ super.ngOnDestroy();
2184
2342
  }
2185
- bindAsyncValidations(validations) {
2186
- if (validations.length > 0) {
2187
- const validList = [];
2188
- validations.forEach((valid) => {
2189
- validList.push(valid.validator);
2190
- });
2191
- return Validators.composeAsync(validList);
2343
+ getGridColumn(field) {
2344
+ const colSpan = field.layout?.colSpan ?? 12;
2345
+ const colStart = field.layout?.colStart;
2346
+ if (colStart) {
2347
+ return `${colStart} / span ${colSpan}`;
2192
2348
  }
2193
- return null;
2349
+ return `span ${colSpan}`;
2194
2350
  }
2195
- ngOnDestroy() {
2196
- super.ngOnDestroy();
2351
+ getGridRow(field) {
2352
+ const rowSpan = field.layout?.rowSpan;
2353
+ const rowStart = field.layout?.rowStart;
2354
+ if (rowStart && rowSpan) {
2355
+ return `${rowStart} / span ${rowSpan}`;
2356
+ }
2357
+ if (rowStart) {
2358
+ return `${rowStart}`;
2359
+ }
2360
+ if (rowSpan) {
2361
+ return `span ${rowSpan}`;
2362
+ }
2363
+ return undefined;
2197
2364
  }
2198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesFormListFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2365
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesFormListFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2199
2366
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: KlesFormListFieldComponent, isStandalone: true, selector: "kles-form-listfield", usesInheritance: true, ngImport: i0, template: `
2200
- <div [formGroup]="group" class="form-element">
2201
- <div class="label">
2202
- {{ label() }}
2203
- <button matIconButton color="primary" (click)="addField()">
2367
+ <div [formGroup]="group" class="form-element list-field">
2368
+ <div class="list-field__header">
2369
+ @if (label()) {
2370
+ <span class="list-field__label">
2371
+ {{ label() }}
2372
+ </span>
2373
+ }
2374
+
2375
+ <button type="button" matButton class="list-field__add" (click)="addField()">
2204
2376
  <mat-icon>add</mat-icon>
2377
+ {{ intl.add }}
2205
2378
  </button>
2206
2379
  </div>
2207
2380
 
2208
- <div class="dynamic-form" [formGroupName]="field.name">
2209
- @for (subGroup of formArray.controls; track subGroup.value._id; let idx = $index) {
2210
- <div class="subfields">
2211
- @for (subfield of collections()[idx]; track subfield.name) {
2212
- <ng-container klesDynamicField [field]="subfield" [group]="$any(subGroup)" [siblingFields]="collections()[idx]" [context]="context"> </ng-container>
2213
- }
2214
- @if (collections()[idx]) {
2215
- <button matIconButton (click)="deleteField(idx)" color="primary">
2216
- <mat-icon>delete_outlined</mat-icon>
2217
- </button>
2218
- }
2381
+ <div class="list-field__content" [formArrayName]="field.name">
2382
+ @for (subGroup of formArray.controls; track subGroup; let idx = $index) {
2383
+ <div class="list-field__row">
2384
+ <div
2385
+ class="list-field__fields"
2386
+ [class.list-field__fields--column]="fieldsDirection === 'column'"
2387
+ [class.list-field__fields--row]="fieldsDirection === 'row'"
2388
+ [class.list-field__fields--grid]="fieldsDirection === 'grid'"
2389
+ [class.list-field__fields--inline-grid]="fieldsDirection === 'inline-grid'"
2390
+ [class.list-field__fields--nowrap]="fieldsDirection === 'row' && field.wrap === false"
2391
+ >
2392
+ @for (subfield of collections()[idx]; track subfield.name) {
2393
+ <div class="list-field__field" [style.grid-column]="getGridColumn(subfield)" [style.grid-row]="getGridRow(subfield)">
2394
+ <ng-container klesDynamicField [field]="subfield" [group]="subGroup" [siblingFields]="collections()[idx]" [ui]="getRowUi(idx)" [context]="context" />
2395
+ </div>
2396
+ }
2397
+ </div>
2398
+
2399
+ <button type="button" matIconButton class="list-field__delete" [attr.aria-label]="intl.delete" (click)="deleteField(idx)">
2400
+ <mat-icon>delete_outline</mat-icon>
2401
+ </button>
2219
2402
  </div>
2220
2403
  }
2221
- @for (validation of field.validations; track validation.name) {
2222
- <ng-container ngProjectAs="mat-error">
2223
- @if (validation.name && group.controls[field.name].hasError(validation.name)) {
2224
- <mat-error>{{ validation.message }}</mat-error>
2225
- }
2226
- </ng-container>
2227
- }
2228
- @for (validation of field.asyncValidations; track validation.name) {
2229
- <ng-container ngProjectAs="mat-error">
2230
- @if (validation.name && group.controls[field.name].hasError(validation.name)) {
2231
- <mat-error>{{ validation.message }}</mat-error>
2232
- }
2233
- </ng-container>
2404
+
2405
+ @if (formArray.length === 0) {
2406
+ <div class="list-field__empty">
2407
+ {{ intl.empty }}
2408
+ </div>
2234
2409
  }
2235
2410
  </div>
2411
+
2412
+ <div class="list-field__errors">
2413
+ <mat-error matErrorForm [form]="formArray" [validations]="field.validations" [asyncValidations]="field.asyncValidations" />
2414
+ </div>
2236
2415
  </div>
2237
- `, isInline: true, styles: [".subfields{display:flex;flex-direction:row;gap:5px}\n", ".label{display:flex;align-items:center;flex-direction:row;gap:5px}\n"], dependencies: [{ kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: KlesDynamicFieldDirective, selector: "[klesDynamicField]", inputs: ["field", "group", "ui", "siblingFields", "context"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }] }); }
2416
+ `, isInline: true, styles: [":host{display:block;width:100%;min-width:0}.list-field{display:flex;flex-direction:column;gap:8px;width:100%;min-width:0}.list-field__header{display:flex;align-items:center;gap:8px;min-height:36px}.list-field__label{min-width:0;font-weight:500}.list-field__add{margin-left:auto;flex-shrink:0}.list-field__content{display:flex;flex-direction:column;gap:10px;width:100%;min-width:0}.list-field__row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:8px;width:100%;min-width:0}.list-field__fields{width:100%;min-width:0}.list-field__fields--column{display:flex;flex-direction:column;gap:10px}.list-field__fields--column>.list-field__field{width:100%}.list-field__fields--row{display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:10px}.list-field__fields--row>.list-field__field{flex:1 1 0;width:auto;min-width:0}.list-field__fields--row.list-field__fields--nowrap{flex-wrap:nowrap}.list-field__fields--grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:12px}.list-field__fields--inline-grid{display:inline-grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:12px}.list-field__field{width:100%;min-width:0}.list-field__delete{align-self:start;margin-top:4px;flex-shrink:0}.list-field__empty{padding:16px;text-align:center;opacity:.7}.list-field__errors{display:flex;flex-direction:column;gap:4px;min-width:0}\n"], dependencies: [{ kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: KlesDynamicFieldDirective, selector: "[klesDynamicField]", inputs: ["field", "group", "ui", "siblingFields", "context"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: MatButtonModule }, { 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: MatErrorFormDirective, selector: "[matErrorForm]", inputs: ["form", "validations", "asyncValidations"] }] }); }
2238
2417
  };
2239
2418
  KlesFormListFieldComponent = __decorate([
2240
- FieldMapper({ type: 'listfield', factory: (field) => new KlesFormArray(field).create() })
2419
+ FieldMapper({ type: 'listfield', factory: (field) => new KlesFormArray(field).create(), ui: (field) => new KlesFormUiArray(field).create() })
2241
2420
  ], KlesFormListFieldComponent);
2242
2421
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesFormListFieldComponent, decorators: [{
2243
2422
  type: Component,
2244
2423
  args: [{ selector: 'kles-form-listfield', template: `
2245
- <div [formGroup]="group" class="form-element">
2246
- <div class="label">
2247
- {{ label() }}
2248
- <button matIconButton color="primary" (click)="addField()">
2424
+ <div [formGroup]="group" class="form-element list-field">
2425
+ <div class="list-field__header">
2426
+ @if (label()) {
2427
+ <span class="list-field__label">
2428
+ {{ label() }}
2429
+ </span>
2430
+ }
2431
+
2432
+ <button type="button" matButton class="list-field__add" (click)="addField()">
2249
2433
  <mat-icon>add</mat-icon>
2434
+ {{ intl.add }}
2250
2435
  </button>
2251
2436
  </div>
2252
2437
 
2253
- <div class="dynamic-form" [formGroupName]="field.name">
2254
- @for (subGroup of formArray.controls; track subGroup.value._id; let idx = $index) {
2255
- <div class="subfields">
2256
- @for (subfield of collections()[idx]; track subfield.name) {
2257
- <ng-container klesDynamicField [field]="subfield" [group]="$any(subGroup)" [siblingFields]="collections()[idx]" [context]="context"> </ng-container>
2258
- }
2259
- @if (collections()[idx]) {
2260
- <button matIconButton (click)="deleteField(idx)" color="primary">
2261
- <mat-icon>delete_outlined</mat-icon>
2262
- </button>
2263
- }
2438
+ <div class="list-field__content" [formArrayName]="field.name">
2439
+ @for (subGroup of formArray.controls; track subGroup; let idx = $index) {
2440
+ <div class="list-field__row">
2441
+ <div
2442
+ class="list-field__fields"
2443
+ [class.list-field__fields--column]="fieldsDirection === 'column'"
2444
+ [class.list-field__fields--row]="fieldsDirection === 'row'"
2445
+ [class.list-field__fields--grid]="fieldsDirection === 'grid'"
2446
+ [class.list-field__fields--inline-grid]="fieldsDirection === 'inline-grid'"
2447
+ [class.list-field__fields--nowrap]="fieldsDirection === 'row' && field.wrap === false"
2448
+ >
2449
+ @for (subfield of collections()[idx]; track subfield.name) {
2450
+ <div class="list-field__field" [style.grid-column]="getGridColumn(subfield)" [style.grid-row]="getGridRow(subfield)">
2451
+ <ng-container klesDynamicField [field]="subfield" [group]="subGroup" [siblingFields]="collections()[idx]" [ui]="getRowUi(idx)" [context]="context" />
2452
+ </div>
2453
+ }
2454
+ </div>
2455
+
2456
+ <button type="button" matIconButton class="list-field__delete" [attr.aria-label]="intl.delete" (click)="deleteField(idx)">
2457
+ <mat-icon>delete_outline</mat-icon>
2458
+ </button>
2264
2459
  </div>
2265
2460
  }
2266
- @for (validation of field.validations; track validation.name) {
2267
- <ng-container ngProjectAs="mat-error">
2268
- @if (validation.name && group.controls[field.name].hasError(validation.name)) {
2269
- <mat-error>{{ validation.message }}</mat-error>
2270
- }
2271
- </ng-container>
2272
- }
2273
- @for (validation of field.asyncValidations; track validation.name) {
2274
- <ng-container ngProjectAs="mat-error">
2275
- @if (validation.name && group.controls[field.name].hasError(validation.name)) {
2276
- <mat-error>{{ validation.message }}</mat-error>
2277
- }
2278
- </ng-container>
2461
+
2462
+ @if (formArray.length === 0) {
2463
+ <div class="list-field__empty">
2464
+ {{ intl.empty }}
2465
+ </div>
2279
2466
  }
2280
2467
  </div>
2468
+
2469
+ <div class="list-field__errors">
2470
+ <mat-error matErrorForm [form]="formArray" [validations]="field.validations" [asyncValidations]="field.asyncValidations" />
2471
+ </div>
2281
2472
  </div>
2282
- `, standalone: true, imports: [MatError, MatIcon, MatIconButton, KlesDynamicFieldDirective, ReactiveFormsModule], styles: [".subfields{display:flex;flex-direction:row;gap:5px}\n", ".label{display:flex;align-items:center;flex-direction:row;gap:5px}\n"] }]
2283
- }] });
2473
+ `, standalone: true, imports: [MatError, MatIcon, MatIconButton, KlesDynamicFieldDirective, ReactiveFormsModule, MatButtonModule, MatErrorFormDirective], styles: [":host{display:block;width:100%;min-width:0}.list-field{display:flex;flex-direction:column;gap:8px;width:100%;min-width:0}.list-field__header{display:flex;align-items:center;gap:8px;min-height:36px}.list-field__label{min-width:0;font-weight:500}.list-field__add{margin-left:auto;flex-shrink:0}.list-field__content{display:flex;flex-direction:column;gap:10px;width:100%;min-width:0}.list-field__row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:8px;width:100%;min-width:0}.list-field__fields{width:100%;min-width:0}.list-field__fields--column{display:flex;flex-direction:column;gap:10px}.list-field__fields--column>.list-field__field{width:100%}.list-field__fields--row{display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:10px}.list-field__fields--row>.list-field__field{flex:1 1 0;width:auto;min-width:0}.list-field__fields--row.list-field__fields--nowrap{flex-wrap:nowrap}.list-field__fields--grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:12px}.list-field__fields--inline-grid{display:inline-grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:12px}.list-field__field{width:100%;min-width:0}.list-field__delete{align-self:start;margin-top:4px;flex-shrink:0}.list-field__empty{padding:16px;text-align:center;opacity:.7}.list-field__errors{display:flex;flex-direction:column;gap:4px;min-width:0}\n"] }]
2474
+ }], ctorParameters: () => [] });
2284
2475
 
2285
2476
  class KlesFormColorComponent extends KlesFieldAbstract {
2286
2477
  constructor() {
@@ -3117,29 +3308,6 @@ class KlesFormGroup extends KlesFormControl {
3117
3308
  }
3118
3309
  }
3119
3310
 
3120
- class KlesFormUiGroup extends KlesFormUiControl {
3121
- create() {
3122
- const subGroup = new GroupUiState();
3123
- if (this.field.collections && Array.isArray(this.field.collections)) {
3124
- this.field.collections.forEach((subfield) => {
3125
- let ui;
3126
- if (subfield.type) {
3127
- ui =
3128
- componentMapper.find((c) => c.type === subfield.type)?.ui({ ...subfield, value: subfield.value || this.field.value?.[subfield.name] }) ||
3129
- klesFieldUiFactory({ ...subfield, value: subfield.value || this.field.value?.[subfield.name] });
3130
- }
3131
- else {
3132
- ui =
3133
- componentMapper.find((c) => c.component === subfield.component)?.ui({ ...subfield, value: subfield.value || this.field.value?.[subfield.name] }) ||
3134
- klesFieldUiFactory({ ...subfield, value: subfield.value || this.field.value?.[subfield.name] });
3135
- }
3136
- subGroup.addUiState(subfield.name, ui);
3137
- });
3138
- }
3139
- return subGroup;
3140
- }
3141
- }
3142
-
3143
3311
  let KlesFormGroupComponent = class KlesFormGroupComponent extends KlesFieldAbstract {
3144
3312
  constructor() {
3145
3313
  super(...arguments);
@@ -3953,152 +4121,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
3953
4121
  }]
3954
4122
  }], propDecorators: { buttonToggles: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => MatButtonToggle), { isSignal: true }] }] } });
3955
4123
 
3956
- class ArrayUiState extends AbstractUiState {
3957
- constructor(states) {
3958
- super();
3959
- this.states = [];
3960
- this.states = states ?? [];
3961
- this.states.forEach((state, index) => {
3962
- state.setParent(this, index);
3963
- });
3964
- this._value.set(this.states.map((state) => state.value()));
3965
- }
3966
- setValue(value) {
3967
- if (!Array.isArray(value)) {
3968
- return;
3969
- }
3970
- value.forEach((newValue, index) => {
3971
- this.at(index)?.setValue(newValue);
3972
- });
3973
- this._value.set(value);
3974
- this.notifyParent();
3975
- }
3976
- patchValue(value) {
3977
- if (value == null) {
3978
- return;
3979
- }
3980
- value.forEach((newValue, index) => {
3981
- const st = this.at(index);
3982
- if (st) {
3983
- st.patchValue(newValue);
3984
- }
3985
- });
3986
- const curr = this._value() ?? [];
3987
- const next = [...curr];
3988
- value.forEach((newValue, index) => {
3989
- next[index] = {
3990
- ...(next[index] ?? {}),
3991
- ...newValue,
3992
- };
3993
- });
3994
- this._value.set(next);
3995
- this.notifyParent();
3996
- }
3997
- childValueChanged(key, value) {
3998
- const index = typeof key === 'number' ? key : Number(key);
3999
- if (!Number.isInteger(index) || index < 0)
4000
- return;
4001
- const curr = this._value() ?? [];
4002
- const next = [...curr];
4003
- next[index] = value;
4004
- this._value.set(next);
4005
- this.notifyParent();
4006
- }
4007
- at(index) {
4008
- return this.states?.[index] ?? null;
4009
- }
4010
- _find(name) {
4011
- const idx = typeof name === 'number' ? name : Number(name);
4012
- return Number.isFinite(idx) ? this.at(idx) : null;
4013
- }
4014
- push(control) {
4015
- const items = Array.isArray(control) ? control : [control];
4016
- if (items.length === 0) {
4017
- return;
4018
- }
4019
- for (const item of items) {
4020
- const index = this.states.length;
4021
- this.states.push(item);
4022
- item.setParent(this, index);
4023
- }
4024
- this._value.set(this.states.map((s) => s.value()));
4025
- this.notifyParent();
4026
- }
4027
- insert(index, state) {
4028
- const items = Array.isArray(state) ? state : [state];
4029
- if (items.length === 0) {
4030
- return;
4031
- }
4032
- const safeIndex = Math.max(0, Math.min(index, this.states.length));
4033
- this.states.splice(safeIndex, 0, ...items);
4034
- for (let i = safeIndex; i < this.states.length; i++) {
4035
- this.states[i]?.setParent(this, i);
4036
- }
4037
- const curr = this._value();
4038
- const next = [...curr];
4039
- next.splice(safeIndex, 0, ...items.map((item) => item.value()));
4040
- this._value.set(next);
4041
- this.notifyParent();
4042
- }
4043
- removeAt(index) {
4044
- if (index < 0 || index >= this.states.length)
4045
- return;
4046
- this.states.splice(index, 1);
4047
- this.states.forEach((state, i) => {
4048
- state.setParent(this, i);
4049
- });
4050
- const curr = this._value() ?? [];
4051
- const next = [...curr];
4052
- next.splice(index, 1);
4053
- this._value.set(next);
4054
- this.notifyParent();
4055
- }
4056
- clear() {
4057
- this.states.length = 0;
4058
- this._value.set([]);
4059
- this.notifyParent();
4060
- }
4061
- }
4062
-
4063
- class KlesFormUiArray extends KlesFormUiControl {
4064
- create() {
4065
- const array = new ArrayUiState();
4066
- if (this.field.value && Array.isArray(this.field.value)) {
4067
- if (this.field.collections && Array.isArray(this.field.collections)) {
4068
- this.field.value.forEach(() => {
4069
- const group = new GroupUiState();
4070
- this.field.collections?.forEach((subfield) => {
4071
- let control;
4072
- if (subfield.type) {
4073
- control = componentMapper.find((c) => c.type === subfield.type)?.ui(subfield) || klesFieldUiFactory(subfield);
4074
- }
4075
- else {
4076
- control = componentMapper.find((c) => c.component === subfield.component)?.ui(subfield) || klesFieldUiFactory(subfield);
4077
- }
4078
- group.addUiState(subfield.name, control);
4079
- });
4080
- array.push(group);
4081
- });
4082
- }
4083
- }
4084
- else {
4085
- const group = new GroupUiState();
4086
- this.field.collections?.forEach((subfield) => {
4087
- let control;
4088
- if (subfield.type) {
4089
- control = componentMapper.find((c) => c.type === subfield.type)?.ui(subfield) || klesFieldUiFactory(subfield);
4090
- }
4091
- else {
4092
- control = componentMapper.find((c) => c.component === subfield.component)?.ui(subfield) || klesFieldUiFactory(subfield);
4093
- }
4094
- group.addUiState(subfield.name, control);
4095
- });
4096
- array.push(group);
4097
- }
4098
- return array;
4099
- }
4100
- }
4101
-
4102
4124
  let KlesFormArrayComponent = class KlesFormArrayComponent extends KlesFieldAbstract {
4103
4125
  constructor() {
4104
4126
  super();
@@ -4253,7 +4275,7 @@ class KlesFabComponent extends KlesButtonBase {
4253
4275
  <mat-icon [svgIcon]="iconSvg"></mat-icon>
4254
4276
  }
4255
4277
  </button>
4256
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$2.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }] }); }
4278
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }] }); }
4257
4279
  }
4258
4280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesFabComponent, decorators: [{
4259
4281
  type: Component,
@@ -4357,7 +4379,7 @@ class KlesMiniFabComponent extends KlesButtonBase {
4357
4379
  <mat-icon [svgIcon]="iconSvg"></mat-icon>
4358
4380
  }
4359
4381
  </button>
4360
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$2.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }] }); }
4382
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }] }); }
4361
4383
  }
4362
4384
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesMiniFabComponent, decorators: [{
4363
4385
  type: Component,
@@ -4450,7 +4472,7 @@ class KlesIconButtonComponent extends KlesButtonBase {
4450
4472
  <mat-icon [svgIcon]="iconSvg"></mat-icon>
4451
4473
  }
4452
4474
  </button>
4453
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
4475
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
4454
4476
  }
4455
4477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesIconButtonComponent, decorators: [{
4456
4478
  type: Component,
@@ -4647,7 +4669,7 @@ class KlesFormSelectionListSearchComponent extends KlesFieldAbstract {
4647
4669
  }
4648
4670
  </mat-selection-list>
4649
4671
  </div>
4650
- `, isInline: true, styles: [".selection-list{display:flex;flex-direction:column;gap:5px}\n", "mat-selection-list{width:100%;height:250px;overflow:auto;flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { 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: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i4$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i4$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i4$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: KlesComponentDirective, selector: "[klesComponent]", inputs: ["component", "value", "field"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$4.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i3$4.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: KlesFocusTargetDirective, selector: "[klesFocusTarget]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: KlesTransformPipe, name: "klesTransform" }] }); }
4672
+ `, isInline: true, styles: [".selection-list{display:flex;flex-direction:column;gap:5px}\n", "mat-selection-list{width:100%;height:250px;overflow:auto;flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { 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: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i4$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i4$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i4$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: KlesComponentDirective, selector: "[klesComponent]", inputs: ["component", "value", "field"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$4.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i3$4.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: KlesFocusTargetDirective, selector: "[klesFocusTarget]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: KlesTransformPipe, name: "klesTransform" }] }); }
4651
4673
  }
4652
4674
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesFormSelectionListSearchComponent, decorators: [{
4653
4675
  type: Component,
@@ -4831,7 +4853,7 @@ class KlesFormDateTimeComponent extends KlesFieldAbstract {
4831
4853
 
4832
4854
  <mat-error matErrorMessage [validations]="field.validations" [asyncValidations]="field.asyncValidations"></mat-error>
4833
4855
  </mat-form-field>
4834
- `, isInline: true, styles: ["mat-form-field{width:100%}\n", ".suffix{display:flex;flex-direction:row}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],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: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "directive", type: i3$2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i3$2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatErrorMessageDirective, selector: "[matErrorMessage]", inputs: ["validations", "asyncValidations"] }, { kind: "ngmodule", type: KlesMaterialDatepickerModule }, { kind: "component", type: i4$3.KlesMatDatepicker, selector: "kles-mat-datepicker", outputs: ["timeSelected"], exportAs: ["klesMatDatepicker"] }, { kind: "directive", type: KlesFocusTargetDirective, selector: "[klesFocusTarget]" }] }); }
4856
+ `, isInline: true, styles: ["mat-form-field{width:100%}\n", ".suffix{display:flex;flex-direction:row}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],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: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "directive", type: i3$2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i3$2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatErrorMessageDirective, selector: "[matErrorMessage]", inputs: ["validations", "asyncValidations"] }, { kind: "ngmodule", type: KlesMaterialDatepickerModule }, { kind: "component", type: i4$2.KlesMatDatepicker, selector: "kles-mat-datepicker", outputs: ["timeSelected"], exportAs: ["klesMatDatepicker"] }, { kind: "directive", type: KlesFocusTargetDirective, selector: "[klesFocusTarget]" }] }); }
4835
4857
  }
4836
4858
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesFormDateTimeComponent, decorators: [{
4837
4859
  type: Component,
@@ -4900,7 +4922,7 @@ class KlesFormCopyComponent {
4900
4922
  <button #tooltip="matTooltip" matIconButton color="primary" type="button" (click)="copy($event)" [matTooltipDisabled]="true" [matTooltip]="tooltipText" matTooltipPosition="above">
4901
4923
  <mat-icon>content_copy</mat-icon>
4902
4924
  </button>
4903
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ClipboardModule }] }); }
4925
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ClipboardModule }] }); }
4904
4926
  }
4905
4927
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: KlesFormCopyComponent, decorators: [{
4906
4928
  type: Component,
@@ -5017,7 +5039,7 @@ let KlesFormActionMenuComponent = class KlesFormActionMenuComponent extends Kles
5017
5039
  </button>
5018
5040
  }
5019
5041
  </mat-menu>
5020
- `, isInline: true, styles: [".kles-action-menu__warn{color:var(--mat-sys-error)}.kles-action-menu__warn mat-icon{color:var(--mat-sys-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5042
+ `, isInline: true, styles: [".kles-action-menu__warn{color:var(--mat-sys-error)}.kles-action-menu__warn mat-icon{color:var(--mat-sys-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5021
5043
  };
5022
5044
  KlesFormActionMenuComponent = __decorate([
5023
5045
  FieldMapper({