iss-ctrl 0.0.19 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/fesm2022/{iss-ctrl-iss-ctrl-Cy9p_PEj.mjs → iss-ctrl-iss-ctrl-BKu6a5HF.mjs} +976 -766
  2. package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs.map +1 -0
  3. package/fesm2022/{iss-ctrl-load-event-DbAc-Wqq.mjs → iss-ctrl-load-event-bOt6IlIo.mjs} +3 -3
  4. package/fesm2022/{iss-ctrl-load-event-DbAc-Wqq.mjs.map → iss-ctrl-load-event-bOt6IlIo.mjs.map} +1 -1
  5. package/fesm2022/{iss-ctrl-load-options-event-CmXkuQ5O.mjs → iss-ctrl-load-options-event-CxyAyNMe.mjs} +3 -3
  6. package/fesm2022/{iss-ctrl-load-options-event-CmXkuQ5O.mjs.map → iss-ctrl-load-options-event-CxyAyNMe.mjs.map} +1 -1
  7. package/fesm2022/{iss-ctrl-load-value-event-DmX9Pkzf.mjs → iss-ctrl-load-value-event-DJKJ5S3h.mjs} +3 -3
  8. package/fesm2022/{iss-ctrl-load-value-event-DmX9Pkzf.mjs.map → iss-ctrl-load-value-event-DJKJ5S3h.mjs.map} +1 -1
  9. package/fesm2022/{iss-ctrl-note.field-CbLlparb.mjs → iss-ctrl-note.field-B_Lbp28X.mjs} +2 -2
  10. package/fesm2022/{iss-ctrl-note.field-CbLlparb.mjs.map → iss-ctrl-note.field-B_Lbp28X.mjs.map} +1 -1
  11. package/fesm2022/{iss-ctrl-replace-api-keys-C_mYQdtP.mjs → iss-ctrl-replace-api-keys-C0XYQW4i.mjs} +2 -2
  12. package/fesm2022/{iss-ctrl-replace-api-keys-C_mYQdtP.mjs.map → iss-ctrl-replace-api-keys-C0XYQW4i.mjs.map} +1 -1
  13. package/fesm2022/{iss-ctrl-set-value-event-vKIrSRgu.mjs → iss-ctrl-set-value-event-CgXhi0Bv.mjs} +2 -2
  14. package/fesm2022/{iss-ctrl-set-value-event-vKIrSRgu.mjs.map → iss-ctrl-set-value-event-CgXhi0Bv.mjs.map} +1 -1
  15. package/fesm2022/{iss-ctrl-table.field-CvqXIE4q.mjs → iss-ctrl-table.field-B5FxF6hn.mjs} +4 -4
  16. package/fesm2022/{iss-ctrl-table.field-CvqXIE4q.mjs.map → iss-ctrl-table.field-B5FxF6hn.mjs.map} +1 -1
  17. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-wyn6AXWA.mjs → iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs} +2 -2
  18. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-wyn6AXWA.mjs.map → iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs.map} +1 -1
  19. package/fesm2022/{iss-ctrl-user-picker.field-BhjVNeqN.mjs → iss-ctrl-user-picker.field-BH63sZ-X.mjs} +13 -6
  20. package/fesm2022/iss-ctrl-user-picker.field-BH63sZ-X.mjs.map +1 -0
  21. package/fesm2022/iss-ctrl.mjs +1 -1
  22. package/package.json +1 -1
  23. package/types/iss-ctrl.d.ts +54 -12
  24. package/upgrade.scss +30 -18
  25. package/fesm2022/iss-ctrl-iss-ctrl-Cy9p_PEj.mjs.map +0 -1
  26. package/fesm2022/iss-ctrl-user-picker.field-BhjVNeqN.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Pipe, input, signal, output, Component, CUSTOM_ELEMENTS_SCHEMA, InjectionToken, inject, Injectable, effect, HostListener, Directive, computed, ChangeDetectionStrategy, ElementRef, contentChild, isSignal, Injector, DestroyRef } from '@angular/core';
2
+ import { Pipe, input, signal, output, inject, Injector, Component, CUSTOM_ELEMENTS_SCHEMA, InjectionToken, Injectable, effect, HostListener, Directive, computed, ChangeDetectionStrategy, ElementRef, contentChild, isSignal, DestroyRef } from '@angular/core';
3
3
  import * as i1$2 from '@angular/forms';
4
- import { FormControl, ReactiveFormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormGroup, FormsModule, Validators, ControlContainer } from '@angular/forms';
4
+ import { FormControl, NgControl, ReactiveFormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormGroup, FormsModule, Validators, ControlContainer } from '@angular/forms';
5
5
  import * as i1 from '@angular/material/checkbox';
6
6
  import { MatCheckboxModule } from '@angular/material/checkbox';
7
7
  import * as i4 from '@angular/material/chips';
@@ -145,6 +145,29 @@ class ControlBase {
145
145
  */
146
146
  onChange = output();
147
147
  ctrl = new FormControl(null);
148
+ /**
149
+ * Error state for the inner `mat-form-field`, derived from the **host** control.
150
+ *
151
+ * Material reads `errorState` off the `NgControl` bound to its own `matInput` — here that is
152
+ * {@link ControlBase.ctrl}, which carries no validators and is therefore always valid. Every
153
+ * error a consumer cares about (the field config's validators plus the control's own
154
+ * {@link ControlBase.validate}) lives on the host control instead, so without this matcher an
155
+ * invalid `iss-ctrl-*` would keep rendering the valid outline. Bind it on the `matInput` as
156
+ * `[errorStateMatcher]="errorStateMatcher"`.
157
+ */
158
+ errorStateMatcher = {
159
+ isErrorState: (_control, form) => {
160
+ const host = this.hostControl();
161
+ if (!host) {
162
+ return false;
163
+ }
164
+ return !!host.invalid && (!!host.touched || this.touched() || !!form?.submitted);
165
+ }
166
+ };
167
+ #injector = inject(Injector);
168
+ // Resolved lazily: injecting NgControl in the constructor would close the DI cycle through
169
+ // NG_VALUE_ACCESSOR, which every control provides with `useExisting`.
170
+ #hostControl = undefined;
148
171
  registerOnChange(fn) {
149
172
  this.onPropagateValue = fn;
150
173
  }
@@ -170,6 +193,16 @@ class ControlBase {
170
193
  validate(control) {
171
194
  return this.ctrl.errors;
172
195
  }
196
+ /**
197
+ * The `NgControl` this component is bound to from the outside (`formControlName`,
198
+ * `[formControl]` or `[ngModel]`), or `null` when it is used without one.
199
+ */
200
+ hostControl() {
201
+ if (this.#hostControl === undefined) {
202
+ this.#hostControl = this.#injector.get(NgControl, null, { self: true });
203
+ }
204
+ return this.#hostControl;
205
+ }
173
206
  /**
174
207
  * Whether the control currently holds no value.
175
208
  *
@@ -210,13 +243,13 @@ class ControlBase {
210
243
  this.onChange.emit(emissionValue);
211
244
  }
212
245
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ControlBase, deps: [], target: i0.ɵɵFactoryTarget.Component });
213
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: ControlBase, isStandalone: true, selector: "ng-component", inputs: { formControlName: { classPropertyName: "formControlName", publicName: "formControlName", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, hints: { classPropertyName: "hints", publicName: "hints", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onChange: "onChange" }, host: { properties: { "class.iss-ctrl-empty": "isEmpty()" } }, ngImport: i0, template: ``, isInline: true });
246
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: ControlBase, isStandalone: true, selector: "ng-component", inputs: { formControlName: { classPropertyName: "formControlName", publicName: "formControlName", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, hints: { classPropertyName: "hints", publicName: "hints", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onChange: "onChange" }, host: { properties: { "class.iss-ctrl-empty": "isEmpty()" }, classAttribute: "iss-ctrl" }, ngImport: i0, template: ``, isInline: true });
214
247
  }
215
248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ControlBase, decorators: [{
216
249
  type: Component,
217
250
  args: [{
218
251
  template: ``,
219
- host: { "[class.iss-ctrl-empty]": "isEmpty()" }
252
+ host: { "class": "iss-ctrl", "[class.iss-ctrl-empty]": "isEmpty()" }
220
253
  }]
221
254
  }], propDecorators: { formControlName: [{ type: i0.Input, args: [{ isSignal: true, alias: "formControlName", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], hints: [{ type: i0.Input, args: [{ isSignal: true, alias: "hints", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], onChange: [{ type: i0.Output, args: ["onChange"] }] } });
222
255
 
@@ -421,31 +454,32 @@ class ChipsControl extends ControlBase {
421
454
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ChipsControl, deps: null, target: i0.ɵɵFactoryTarget.Component });
422
455
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ChipsControl, isStandalone: true, selector: "iss-ctrl-chips", providers: [
423
456
  { provide: NG_VALUE_ACCESSOR, useExisting: ChipsControl, multi: true }
424
- ], usesInheritance: true, ngImport: i0, template: `
425
- <mat-form-field floatLabel="auto" class="">
426
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
427
- <mat-label class="fs-16 fc-dark-gray">
428
- <ng-content select="label"></ng-content>
429
- </mat-label>
430
- <input
431
- matInput
432
- [placeholder]="placeholder()"
433
- [matChipInputFor]="chipGrid"
434
- [disabled]="disabled()"
435
- [readonly]="readonly()"
436
- (matChipInputTokenEnd)="add($event)"
437
- />
438
- </mat-form-field>
439
- <mat-chip-grid #chipGrid>
440
- @for (keyword of keywords(); track keyword) {
441
- <mat-chip-row (removed)="remove(keyword)">
442
- {{ keyword }}
443
- <button matChipRemove [disabled]="disabled() || readonly()">
444
- <ds-icon icon="trash" class="fc-red"></ds-icon>
445
- </button>
446
- </mat-chip-row>
447
- }
448
- </mat-chip-grid>
457
+ ], usesInheritance: true, ngImport: i0, template: `
458
+ <mat-form-field floatLabel="auto" class="">
459
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
460
+ <mat-label class="fs-16 fc-dark-gray">
461
+ <ng-content select="label"></ng-content>
462
+ </mat-label>
463
+ <input
464
+ matInput
465
+ [errorStateMatcher]="errorStateMatcher"
466
+ [placeholder]="placeholder()"
467
+ [matChipInputFor]="chipGrid"
468
+ [disabled]="disabled()"
469
+ [readonly]="readonly()"
470
+ (matChipInputTokenEnd)="add($event)"
471
+ />
472
+ </mat-form-field>
473
+ <mat-chip-grid #chipGrid>
474
+ @for (keyword of keywords(); track keyword) {
475
+ <mat-chip-row (removed)="remove(keyword)">
476
+ {{ keyword }}
477
+ <button matChipRemove [disabled]="disabled() || readonly()">
478
+ <ds-icon icon="trash" class="fc-red"></ds-icon>
479
+ </button>
480
+ </mat-chip-row>
481
+ }
482
+ </mat-chip-grid>
449
483
  `, isInline: true, dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "component", type: MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { 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: MatChipRemove, selector: "[matChipRemove]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }] });
450
484
  }
451
485
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ChipsControl, decorators: [{
@@ -466,31 +500,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
466
500
  providers: [
467
501
  { provide: NG_VALUE_ACCESSOR, useExisting: ChipsControl, multi: true }
468
502
  ],
469
- template: `
470
- <mat-form-field floatLabel="auto" class="">
471
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
472
- <mat-label class="fs-16 fc-dark-gray">
473
- <ng-content select="label"></ng-content>
474
- </mat-label>
475
- <input
476
- matInput
477
- [placeholder]="placeholder()"
478
- [matChipInputFor]="chipGrid"
479
- [disabled]="disabled()"
480
- [readonly]="readonly()"
481
- (matChipInputTokenEnd)="add($event)"
482
- />
483
- </mat-form-field>
484
- <mat-chip-grid #chipGrid>
485
- @for (keyword of keywords(); track keyword) {
486
- <mat-chip-row (removed)="remove(keyword)">
487
- {{ keyword }}
488
- <button matChipRemove [disabled]="disabled() || readonly()">
489
- <ds-icon icon="trash" class="fc-red"></ds-icon>
490
- </button>
491
- </mat-chip-row>
492
- }
493
- </mat-chip-grid>
503
+ template: `
504
+ <mat-form-field floatLabel="auto" class="">
505
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
506
+ <mat-label class="fs-16 fc-dark-gray">
507
+ <ng-content select="label"></ng-content>
508
+ </mat-label>
509
+ <input
510
+ matInput
511
+ [errorStateMatcher]="errorStateMatcher"
512
+ [placeholder]="placeholder()"
513
+ [matChipInputFor]="chipGrid"
514
+ [disabled]="disabled()"
515
+ [readonly]="readonly()"
516
+ (matChipInputTokenEnd)="add($event)"
517
+ />
518
+ </mat-form-field>
519
+ <mat-chip-grid #chipGrid>
520
+ @for (keyword of keywords(); track keyword) {
521
+ <mat-chip-row (removed)="remove(keyword)">
522
+ {{ keyword }}
523
+ <button matChipRemove [disabled]="disabled() || readonly()">
524
+ <ds-icon icon="trash" class="fc-red"></ds-icon>
525
+ </button>
526
+ </mat-chip-row>
527
+ }
528
+ </mat-chip-grid>
494
529
  `
495
530
  }]
496
531
  }] });
@@ -956,32 +991,33 @@ class DatePickerControl extends ControlBase {
956
991
  provideIssDateAdapter(),
957
992
  { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerControl, multi: true },
958
993
  { provide: NG_VALIDATORS, useExisting: DatePickerControl, multi: true },
959
- ], usesInheritance: true, ngImport: i0, template: `
960
- <mat-form-field floatLabel="auto" class="">
961
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
962
- <mat-label class="fs-16 fc-dark-gray">
963
- <ng-content select="label"></ng-content>
964
- </mat-label>
965
- <input
966
- class="cursor-pointer"
967
- matInput
968
- readonly
969
- [matDatepicker]="picker"
970
- (click)="openPicker(picker)"
971
- [formControl]="ctrl"
972
- [readonly]="readonly()"
973
- [min]="minDate()"
974
- [max]="maxDate()"
975
- [matDatepickerFilter]="calendarDaysFilter"
976
- (dateChange)="emit($event)"
977
- />
978
- @if (ctrl.getRawValue()) {
979
- <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
980
- }
981
- <mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="readonly()"></mat-datepicker-toggle>
982
- <mat-datepicker #picker [panelClass]="isHijri() ? 'iss-hijri-calendar' : ''"></mat-datepicker>
983
-
984
- </mat-form-field>
994
+ ], usesInheritance: true, ngImport: i0, template: `
995
+ <mat-form-field floatLabel="auto" class="">
996
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
997
+ <mat-label class="fs-16 fc-dark-gray">
998
+ <ng-content select="label"></ng-content>
999
+ </mat-label>
1000
+ <input
1001
+ class="cursor-pointer"
1002
+ matInput
1003
+ [errorStateMatcher]="errorStateMatcher"
1004
+ readonly
1005
+ [matDatepicker]="picker"
1006
+ (click)="openPicker(picker)"
1007
+ [formControl]="ctrl"
1008
+ [readonly]="readonly()"
1009
+ [min]="minDate()"
1010
+ [max]="maxDate()"
1011
+ [matDatepickerFilter]="calendarDaysFilter"
1012
+ (dateChange)="emit($event)"
1013
+ />
1014
+ @if (ctrl.getRawValue()) {
1015
+ <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1016
+ }
1017
+ <mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="readonly()"></mat-datepicker-toggle>
1018
+ <mat-datepicker #picker [panelClass]="isHijri() ? 'iss-hijri-calendar' : ''"></mat-datepicker>
1019
+
1020
+ </mat-form-field>
985
1021
  `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: i2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
986
1022
  }
987
1023
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DatePickerControl, decorators: [{
@@ -991,32 +1027,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
991
1027
  provideIssDateAdapter(),
992
1028
  { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerControl, multi: true },
993
1029
  { provide: NG_VALIDATORS, useExisting: DatePickerControl, multi: true },
994
- ], template: `
995
- <mat-form-field floatLabel="auto" class="">
996
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
997
- <mat-label class="fs-16 fc-dark-gray">
998
- <ng-content select="label"></ng-content>
999
- </mat-label>
1000
- <input
1001
- class="cursor-pointer"
1002
- matInput
1003
- readonly
1004
- [matDatepicker]="picker"
1005
- (click)="openPicker(picker)"
1006
- [formControl]="ctrl"
1007
- [readonly]="readonly()"
1008
- [min]="minDate()"
1009
- [max]="maxDate()"
1010
- [matDatepickerFilter]="calendarDaysFilter"
1011
- (dateChange)="emit($event)"
1012
- />
1013
- @if (ctrl.getRawValue()) {
1014
- <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1015
- }
1016
- <mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="readonly()"></mat-datepicker-toggle>
1017
- <mat-datepicker #picker [panelClass]="isHijri() ? 'iss-hijri-calendar' : ''"></mat-datepicker>
1018
-
1019
- </mat-form-field>
1030
+ ], template: `
1031
+ <mat-form-field floatLabel="auto" class="">
1032
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1033
+ <mat-label class="fs-16 fc-dark-gray">
1034
+ <ng-content select="label"></ng-content>
1035
+ </mat-label>
1036
+ <input
1037
+ class="cursor-pointer"
1038
+ matInput
1039
+ [errorStateMatcher]="errorStateMatcher"
1040
+ readonly
1041
+ [matDatepicker]="picker"
1042
+ (click)="openPicker(picker)"
1043
+ [formControl]="ctrl"
1044
+ [readonly]="readonly()"
1045
+ [min]="minDate()"
1046
+ [max]="maxDate()"
1047
+ [matDatepickerFilter]="calendarDaysFilter"
1048
+ (dateChange)="emit($event)"
1049
+ />
1050
+ @if (ctrl.getRawValue()) {
1051
+ <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1052
+ }
1053
+ <mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="readonly()"></mat-datepicker-toggle>
1054
+ <mat-datepicker #picker [panelClass]="isHijri() ? 'iss-hijri-calendar' : ''"></mat-datepicker>
1055
+
1056
+ </mat-form-field>
1020
1057
  ` }]
1021
1058
  }], propDecorators: { disabledDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDays", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], hijriCalendar: [{ type: i0.Input, args: [{ isSignal: true, alias: "hijriCalendar", required: false }] }], emitHijri: [{ type: i0.Input, args: [{ isSignal: true, alias: "emitHijri", required: false }] }] } });
1022
1059
 
@@ -1208,42 +1245,44 @@ class DateRangePickerControl extends ControlBase {
1208
1245
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DateRangePickerControl, isStandalone: true, selector: "iss-ctrl-date-range-picker", inputs: { disabledDays: { classPropertyName: "disabledDays", publicName: "disabledDays", 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 }, hijriCalendar: { classPropertyName: "hijriCalendar", publicName: "hijriCalendar", isSignal: true, isRequired: false, transformFunction: null }, emitHijri: { classPropertyName: "emitHijri", publicName: "emitHijri", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDateRangeObjectChange: "onDateRangeObjectChange" }, providers: [
1209
1246
  provideIssDateAdapter(),
1210
1247
  { provide: NG_VALUE_ACCESSOR, useExisting: DateRangePickerControl, multi: true },
1211
- ], usesInheritance: true, ngImport: i0, template: `
1212
- <mat-form-field floatLabel="auto" class="">
1213
-
1214
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1215
- <mat-label class="fs-16 fc-dark-gray">
1216
- <ng-content select="label"></ng-content>
1217
- </mat-label>
1218
- <mat-date-range-input
1219
- [formGroup]="range"
1220
- [rangePicker]="picker"
1221
- [min]="minDate()"
1222
- [max]="maxDate()"
1223
- [dateFilter]="calendarDaysFilter"
1224
- >
1225
- <input
1226
- matStartDate
1227
- formControlName="start"
1228
- [readonly]="readonly()"
1229
- placeholder="dd/mm/yyyy"
1230
- (click)="openPicker(picker)"
1231
- />
1232
- <input
1233
- matEndDate
1234
- formControlName="end"
1235
- [readonly]="readonly()"
1236
- placeholder="dd/mm/yyyy"
1237
- (click)="openPicker(picker)"
1238
- />
1239
- </mat-date-range-input>
1240
- @if (range.getRawValue().start || range.getRawValue().end) {
1241
- <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1242
- }
1243
- <mat-datepicker-toggle matSuffix [for]="picker" [disabled]="readonly()"></mat-datepicker-toggle>
1244
- <mat-date-range-picker #picker [panelClass]="isHijri() ? 'iss-hijri-calendar' : ''"></mat-date-range-picker>
1245
-
1246
- </mat-form-field>
1248
+ ], usesInheritance: true, ngImport: i0, template: `
1249
+ <mat-form-field floatLabel="auto" class="">
1250
+
1251
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1252
+ <mat-label class="fs-16 fc-dark-gray">
1253
+ <ng-content select="label"></ng-content>
1254
+ </mat-label>
1255
+ <mat-date-range-input
1256
+ [formGroup]="range"
1257
+ [rangePicker]="picker"
1258
+ [min]="minDate()"
1259
+ [max]="maxDate()"
1260
+ [dateFilter]="calendarDaysFilter"
1261
+ >
1262
+ <input
1263
+ matStartDate
1264
+ [errorStateMatcher]="errorStateMatcher"
1265
+ formControlName="start"
1266
+ [readonly]="readonly()"
1267
+ placeholder="dd/mm/yyyy"
1268
+ (click)="openPicker(picker)"
1269
+ />
1270
+ <input
1271
+ matEndDate
1272
+ [errorStateMatcher]="errorStateMatcher"
1273
+ formControlName="end"
1274
+ [readonly]="readonly()"
1275
+ placeholder="dd/mm/yyyy"
1276
+ (click)="openPicker(picker)"
1277
+ />
1278
+ </mat-date-range-input>
1279
+ @if (range.getRawValue().start || range.getRawValue().end) {
1280
+ <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1281
+ }
1282
+ <mat-datepicker-toggle matSuffix [for]="picker" [disabled]="readonly()"></mat-datepicker-toggle>
1283
+ <mat-date-range-picker #picker [panelClass]="isHijri() ? 'iss-hijri-calendar' : ''"></mat-date-range-picker>
1284
+
1285
+ </mat-form-field>
1247
1286
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
1248
1287
  }
1249
1288
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DateRangePickerControl, decorators: [{
@@ -1260,42 +1299,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1260
1299
  provideIssDateAdapter(),
1261
1300
  { provide: NG_VALUE_ACCESSOR, useExisting: DateRangePickerControl, multi: true },
1262
1301
  ],
1263
- template: `
1264
- <mat-form-field floatLabel="auto" class="">
1265
-
1266
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1267
- <mat-label class="fs-16 fc-dark-gray">
1268
- <ng-content select="label"></ng-content>
1269
- </mat-label>
1270
- <mat-date-range-input
1271
- [formGroup]="range"
1272
- [rangePicker]="picker"
1273
- [min]="minDate()"
1274
- [max]="maxDate()"
1275
- [dateFilter]="calendarDaysFilter"
1276
- >
1277
- <input
1278
- matStartDate
1279
- formControlName="start"
1280
- [readonly]="readonly()"
1281
- placeholder="dd/mm/yyyy"
1282
- (click)="openPicker(picker)"
1283
- />
1284
- <input
1285
- matEndDate
1286
- formControlName="end"
1287
- [readonly]="readonly()"
1288
- placeholder="dd/mm/yyyy"
1289
- (click)="openPicker(picker)"
1290
- />
1291
- </mat-date-range-input>
1292
- @if (range.getRawValue().start || range.getRawValue().end) {
1293
- <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1294
- }
1295
- <mat-datepicker-toggle matSuffix [for]="picker" [disabled]="readonly()"></mat-datepicker-toggle>
1296
- <mat-date-range-picker #picker [panelClass]="isHijri() ? 'iss-hijri-calendar' : ''"></mat-date-range-picker>
1297
-
1298
- </mat-form-field>
1302
+ template: `
1303
+ <mat-form-field floatLabel="auto" class="">
1304
+
1305
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1306
+ <mat-label class="fs-16 fc-dark-gray">
1307
+ <ng-content select="label"></ng-content>
1308
+ </mat-label>
1309
+ <mat-date-range-input
1310
+ [formGroup]="range"
1311
+ [rangePicker]="picker"
1312
+ [min]="minDate()"
1313
+ [max]="maxDate()"
1314
+ [dateFilter]="calendarDaysFilter"
1315
+ >
1316
+ <input
1317
+ matStartDate
1318
+ [errorStateMatcher]="errorStateMatcher"
1319
+ formControlName="start"
1320
+ [readonly]="readonly()"
1321
+ placeholder="dd/mm/yyyy"
1322
+ (click)="openPicker(picker)"
1323
+ />
1324
+ <input
1325
+ matEndDate
1326
+ [errorStateMatcher]="errorStateMatcher"
1327
+ formControlName="end"
1328
+ [readonly]="readonly()"
1329
+ placeholder="dd/mm/yyyy"
1330
+ (click)="openPicker(picker)"
1331
+ />
1332
+ </mat-date-range-input>
1333
+ @if (range.getRawValue().start || range.getRawValue().end) {
1334
+ <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1335
+ }
1336
+ <mat-datepicker-toggle matSuffix [for]="picker" [disabled]="readonly()"></mat-datepicker-toggle>
1337
+ <mat-date-range-picker #picker [panelClass]="isHijri() ? 'iss-hijri-calendar' : ''"></mat-date-range-picker>
1338
+
1339
+ </mat-form-field>
1299
1340
  `
1300
1341
  }]
1301
1342
  }], propDecorators: { disabledDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDays", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], hijriCalendar: [{ type: i0.Input, args: [{ isSignal: true, alias: "hijriCalendar", required: false }] }], emitHijri: [{ type: i0.Input, args: [{ isSignal: true, alias: "emitHijri", required: false }] }], onDateRangeObjectChange: [{ type: i0.Output, args: ["onDateRangeObjectChange"] }] } });
@@ -1381,28 +1422,29 @@ class TimePickerControl extends ControlBase {
1381
1422
  provideNativeDateAdapter(),
1382
1423
  { provide: NG_VALUE_ACCESSOR, useExisting: TimePickerControl, multi: true },
1383
1424
  { provide: NG_VALIDATORS, useExisting: TimePickerControl, multi: true },
1384
- ], usesInheritance: true, ngImport: i0, template: `
1385
- <mat-form-field floatLabel="auto" class="">
1386
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1387
- <mat-label class="fs-16 fc-dark-gray">
1388
- <ng-content select="label"></ng-content>
1389
- </mat-label>
1390
- <input
1391
- matInput
1392
- [formControl]="ctrl"
1393
- [matTimepicker]="picker"
1394
- [matTimepickerMin]="minTime()"
1395
- [matTimepickerMax]="maxTime()"
1396
- [readonly]="readonly()"
1397
- readonly
1398
- />
1399
- @if (ctrl.getRawValue()) {
1400
- <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1401
- }
1402
- <mat-timepicker-toggle matIconSuffix [for]="picker" [disabled]="readonly()"/>
1403
- <mat-timepicker (selected)="emit($event)" [interval]="interval()" #picker/>
1404
-
1405
- </mat-form-field>
1425
+ ], usesInheritance: true, ngImport: i0, template: `
1426
+ <mat-form-field floatLabel="auto" class="">
1427
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1428
+ <mat-label class="fs-16 fc-dark-gray">
1429
+ <ng-content select="label"></ng-content>
1430
+ </mat-label>
1431
+ <input
1432
+ matInput
1433
+ [errorStateMatcher]="errorStateMatcher"
1434
+ [formControl]="ctrl"
1435
+ [matTimepicker]="picker"
1436
+ [matTimepickerMin]="minTime()"
1437
+ [matTimepickerMax]="maxTime()"
1438
+ [readonly]="readonly()"
1439
+ readonly
1440
+ />
1441
+ @if (ctrl.getRawValue()) {
1442
+ <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1443
+ }
1444
+ <mat-timepicker-toggle matIconSuffix [for]="picker" [disabled]="readonly()"/>
1445
+ <mat-timepicker (selected)="emit($event)" [interval]="interval()" #picker/>
1446
+
1447
+ </mat-form-field>
1406
1448
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: MatTimepickerModule }, { kind: "component", type: i2$1.MatTimepicker, selector: "mat-timepicker", inputs: ["interval", "options", "disableRipple", "aria-label", "aria-labelledby", "panelClass"], outputs: ["selected", "opened", "closed"], exportAs: ["matTimepicker"] }, { kind: "directive", type: i2$1.MatTimepickerInput, selector: "input[matTimepicker]", inputs: ["value", "matTimepicker", "matTimepickerMin", "matTimepickerMax", "matTimepickerOpenOnClick", "disabled"], outputs: ["valueChange"], exportAs: ["matTimepickerInput"] }, { kind: "component", type: i2$1.MatTimepickerToggle, selector: "mat-timepicker-toggle", inputs: ["for", "aria-label", "aria-labelledby", "disabled", "tabIndex", "disableRipple"], exportAs: ["matTimepickerToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
1407
1449
  }
1408
1450
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TimePickerControl, decorators: [{
@@ -1418,28 +1460,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1418
1460
  { provide: NG_VALUE_ACCESSOR, useExisting: TimePickerControl, multi: true },
1419
1461
  { provide: NG_VALIDATORS, useExisting: TimePickerControl, multi: true },
1420
1462
  ],
1421
- template: `
1422
- <mat-form-field floatLabel="auto" class="">
1423
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1424
- <mat-label class="fs-16 fc-dark-gray">
1425
- <ng-content select="label"></ng-content>
1426
- </mat-label>
1427
- <input
1428
- matInput
1429
- [formControl]="ctrl"
1430
- [matTimepicker]="picker"
1431
- [matTimepickerMin]="minTime()"
1432
- [matTimepickerMax]="maxTime()"
1433
- [readonly]="readonly()"
1434
- readonly
1435
- />
1436
- @if (ctrl.getRawValue()) {
1437
- <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1438
- }
1439
- <mat-timepicker-toggle matIconSuffix [for]="picker" [disabled]="readonly()"/>
1440
- <mat-timepicker (selected)="emit($event)" [interval]="interval()" #picker/>
1441
-
1442
- </mat-form-field>
1463
+ template: `
1464
+ <mat-form-field floatLabel="auto" class="">
1465
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
1466
+ <mat-label class="fs-16 fc-dark-gray">
1467
+ <ng-content select="label"></ng-content>
1468
+ </mat-label>
1469
+ <input
1470
+ matInput
1471
+ [errorStateMatcher]="errorStateMatcher"
1472
+ [formControl]="ctrl"
1473
+ [matTimepicker]="picker"
1474
+ [matTimepickerMin]="minTime()"
1475
+ [matTimepickerMax]="maxTime()"
1476
+ [readonly]="readonly()"
1477
+ readonly
1478
+ />
1479
+ @if (ctrl.getRawValue()) {
1480
+ <mat-icon matSuffix style="cursor: pointer" (click)="clear($event)">close</mat-icon>
1481
+ }
1482
+ <mat-timepicker-toggle matIconSuffix [for]="picker" [disabled]="readonly()"/>
1483
+ <mat-timepicker (selected)="emit($event)" [interval]="interval()" #picker/>
1484
+
1485
+ </mat-form-field>
1443
1486
  `,
1444
1487
  }]
1445
1488
  }], propDecorators: { interval: [{ type: i0.Input, args: [{ isSignal: true, alias: "interval", required: false }] }], minTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "minTime", required: false }] }], maxTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxTime", required: false }] }] } });
@@ -1648,11 +1691,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1648
1691
  }]
1649
1692
  }], propDecorators: { disabledDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDays", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], minTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "minTime", required: false }] }], maxTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxTime", required: false }] }], hijriCalendar: [{ type: i0.Input, args: [{ isSignal: true, alias: "hijriCalendar", required: false }] }], emitHijri: [{ type: i0.Input, args: [{ isSignal: true, alias: "emitHijri", required: false }] }] } });
1650
1693
 
1651
- class HintsComponent {
1694
+ class Hints {
1652
1695
  hints = input([], ...(ngDevMode ? [{ debugName: "hints" }] : /* istanbul ignore next */ []));
1653
1696
  touched = input(false, ...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
1654
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: HintsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1655
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: HintsComponent, isStandalone: true, selector: "iss-ctrl-hints", inputs: { hints: { classPropertyName: "hints", publicName: "hints", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1697
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Hints, deps: [], target: i0.ɵɵFactoryTarget.Component });
1698
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: Hints, isStandalone: true, selector: "iss-ctrl-hints", inputs: { hints: { classPropertyName: "hints", publicName: "hints", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1656
1699
  @if (hints().length) {
1657
1700
  <div class="d-flex align-items-center flex-wrap gap-2 mb-3">
1658
1701
  @for (hint of hints(); track $index) {
@@ -1678,7 +1721,7 @@ class HintsComponent {
1678
1721
  }
1679
1722
  `, isInline: true, dependencies: [{ kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }] });
1680
1723
  }
1681
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: HintsComponent, decorators: [{
1724
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Hints, decorators: [{
1682
1725
  type: Component,
1683
1726
  args: [{
1684
1727
  selector: "iss-ctrl-hints",
@@ -1939,14 +1982,14 @@ class FilePickerControl extends ControlBase {
1939
1982
 
1940
1983
  <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
1941
1984
  <!--<iss-viewer-attachment (deleteOut)="onDelete($event)" [field]="filesValue()" [uploading]="uploading()"/>-->
1942
- `, isInline: true, styles: [".file-uploader{--uploader-height: 150px;--uploader-width: 100%;--uploader-bg: var(--off-white);--uploader-border: 1px dashed var(--dark-gray);--uploader-radius: var(--box-radius);--uploader-padding: 1rem;height:var(--uploader-height);background-color:var(--uploader-bg);border:var(--uploader-border);border-radius:var(--uploader-radius);padding:var(--uploader-padding);text-align:center;cursor:pointer}.file-uploader --input{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: Droppable, selector: "[droppable]", outputs: ["onDrop"] }, { kind: "component", type: HintsComponent, selector: "iss-ctrl-hints", inputs: ["hints", "touched"] }] });
1985
+ `, isInline: true, styles: [".file-uploader{--uploader-height: 150px;--uploader-width: 100%;--uploader-bg: var(--off-white);--uploader-border: 1px dashed var(--dark-gray);--uploader-radius: var(--box-radius);--uploader-padding: 1rem;height:var(--uploader-height);background-color:var(--uploader-bg);border:var(--uploader-border);border-radius:var(--uploader-radius);padding:var(--uploader-padding);text-align:center;cursor:pointer}.file-uploader --input{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: Droppable, selector: "[droppable]", outputs: ["onDrop"] }, { kind: "component", type: Hints, selector: "iss-ctrl-hints", inputs: ["hints", "touched"] }] });
1943
1986
  }
1944
1987
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: FilePickerControl, decorators: [{
1945
1988
  type: Component,
1946
1989
  args: [{ selector: "iss-ctrl-file-picker", schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [
1947
1990
  ReactiveFormsModule,
1948
1991
  Droppable,
1949
- HintsComponent,
1992
+ Hints,
1950
1993
  ], providers: [
1951
1994
  { provide: NG_VALUE_ACCESSOR, useExisting: FilePickerControl, multi: true }
1952
1995
  ], template: `
@@ -2052,46 +2095,47 @@ class InputControl extends ControlBase {
2052
2095
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: InputControl, isStandalone: true, selector: "iss-ctrl-input", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, prefixText: { classPropertyName: "prefixText", publicName: "prefixText", isSignal: true, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: true, isRequired: false, transformFunction: null }, suffixText: { classPropertyName: "suffixText", publicName: "suffixText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onPrefixClick: "onPrefixClick", onSuffixClick: "onSuffixClick" }, providers: [
2053
2096
  { provide: NG_VALUE_ACCESSOR, useExisting: InputControl, multi: true },
2054
2097
  { provide: NG_VALIDATORS, useExisting: InputControl, multi: true }
2055
- ], usesInheritance: true, ngImport: i0, template: `
2056
- <mat-form-field floatLabel="auto" class="">
2057
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
2058
- <mat-label class="fs-16 fc-dark-gray">
2059
- <ng-content select="label"></ng-content>
2060
- </mat-label>
2061
- <ng-content select="[issPrefix]"></ng-content>
2062
- <div (click)="emitPrefixClick()" class="cursor-pointer">
2063
- @if (prefixText()) {
2064
- <span matTextPrefix>{{ prefixText() }}</span>
2065
- }
2066
- @if (prefixIcon()) {
2067
- <ds-icon matPrefix icon="{{prefixIcon()}}"></ds-icon>
2068
- }
2069
- </div>
2070
- <input
2071
- matInput
2072
- (blur)="markAsTouched()"
2073
- (input)="emitValue()"
2074
- [formControl]="ctrl"
2075
- [attr.maxlength]="maxLength()"
2076
- [attr.minlength]="minLength()"
2077
- [attr.max]="max()"
2078
- [attr.min]="min()"
2079
- [placeholder]="placeholder()"
2080
- [readonly]="readonly()"
2081
- [type]="type()"
2082
- />
2083
- <ng-content select="[issSuffix]"></ng-content>
2084
- <div (click)="emitSuffixClick()" class="cursor-pointer">
2085
- @if (suffixText()) {
2086
- <span matTextSuffix>{{ suffixText() }}</span>
2087
- }
2088
- @if (suffixIcon()) {
2089
- <ds-icon matSuffix icon="{{suffixIcon()}}"></ds-icon>
2090
- }
2091
- </div>
2092
- <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
2093
- </mat-form-field>
2094
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: HintsComponent, selector: "iss-ctrl-hints", inputs: ["hints", "touched"] }, { 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: "ngmodule", type: MatInputModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2098
+ ], usesInheritance: true, ngImport: i0, template: `
2099
+ <mat-form-field floatLabel="auto" class="">
2100
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
2101
+ <mat-label class="fs-16 fc-dark-gray">
2102
+ <ng-content select="label"></ng-content>
2103
+ </mat-label>
2104
+ <ng-content select="[issPrefix]"></ng-content>
2105
+ <div (click)="emitPrefixClick()" class="cursor-pointer">
2106
+ @if (prefixText()) {
2107
+ <span matTextPrefix>{{ prefixText() }}</span>
2108
+ }
2109
+ @if (prefixIcon()) {
2110
+ <ds-icon matPrefix icon="{{prefixIcon()}}"></ds-icon>
2111
+ }
2112
+ </div>
2113
+ <input
2114
+ matInput
2115
+ [errorStateMatcher]="errorStateMatcher"
2116
+ (blur)="markAsTouched()"
2117
+ (input)="emitValue()"
2118
+ [formControl]="ctrl"
2119
+ [attr.maxlength]="maxLength()"
2120
+ [attr.minlength]="minLength()"
2121
+ [attr.max]="max()"
2122
+ [attr.min]="min()"
2123
+ [placeholder]="placeholder()"
2124
+ [readonly]="readonly()"
2125
+ [type]="type()"
2126
+ />
2127
+ <ng-content select="[issSuffix]"></ng-content>
2128
+ <div (click)="emitSuffixClick()" class="cursor-pointer">
2129
+ @if (suffixText()) {
2130
+ <span matTextSuffix>{{ suffixText() }}</span>
2131
+ }
2132
+ @if (suffixIcon()) {
2133
+ <ds-icon matSuffix icon="{{suffixIcon()}}"></ds-icon>
2134
+ }
2135
+ </div>
2136
+ <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
2137
+ </mat-form-field>
2138
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: Hints, selector: "iss-ctrl-hints", inputs: ["hints", "touched"] }, { 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: "ngmodule", type: MatInputModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2095
2139
  }
2096
2140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: InputControl, decorators: [{
2097
2141
  type: Component,
@@ -2102,7 +2146,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2102
2146
  imports: [
2103
2147
  ReactiveFormsModule,
2104
2148
  MatFormFieldModule,
2105
- HintsComponent,
2149
+ Hints,
2106
2150
  MatInput,
2107
2151
  MatInputModule,
2108
2152
  ],
@@ -2110,45 +2154,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2110
2154
  { provide: NG_VALUE_ACCESSOR, useExisting: InputControl, multi: true },
2111
2155
  { provide: NG_VALIDATORS, useExisting: InputControl, multi: true }
2112
2156
  ],
2113
- template: `
2114
- <mat-form-field floatLabel="auto" class="">
2115
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
2116
- <mat-label class="fs-16 fc-dark-gray">
2117
- <ng-content select="label"></ng-content>
2118
- </mat-label>
2119
- <ng-content select="[issPrefix]"></ng-content>
2120
- <div (click)="emitPrefixClick()" class="cursor-pointer">
2121
- @if (prefixText()) {
2122
- <span matTextPrefix>{{ prefixText() }}</span>
2123
- }
2124
- @if (prefixIcon()) {
2125
- <ds-icon matPrefix icon="{{prefixIcon()}}"></ds-icon>
2126
- }
2127
- </div>
2128
- <input
2129
- matInput
2130
- (blur)="markAsTouched()"
2131
- (input)="emitValue()"
2132
- [formControl]="ctrl"
2133
- [attr.maxlength]="maxLength()"
2134
- [attr.minlength]="minLength()"
2135
- [attr.max]="max()"
2136
- [attr.min]="min()"
2137
- [placeholder]="placeholder()"
2138
- [readonly]="readonly()"
2139
- [type]="type()"
2140
- />
2141
- <ng-content select="[issSuffix]"></ng-content>
2142
- <div (click)="emitSuffixClick()" class="cursor-pointer">
2143
- @if (suffixText()) {
2144
- <span matTextSuffix>{{ suffixText() }}</span>
2145
- }
2146
- @if (suffixIcon()) {
2147
- <ds-icon matSuffix icon="{{suffixIcon()}}"></ds-icon>
2148
- }
2149
- </div>
2150
- <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
2151
- </mat-form-field>
2157
+ template: `
2158
+ <mat-form-field floatLabel="auto" class="">
2159
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
2160
+ <mat-label class="fs-16 fc-dark-gray">
2161
+ <ng-content select="label"></ng-content>
2162
+ </mat-label>
2163
+ <ng-content select="[issPrefix]"></ng-content>
2164
+ <div (click)="emitPrefixClick()" class="cursor-pointer">
2165
+ @if (prefixText()) {
2166
+ <span matTextPrefix>{{ prefixText() }}</span>
2167
+ }
2168
+ @if (prefixIcon()) {
2169
+ <ds-icon matPrefix icon="{{prefixIcon()}}"></ds-icon>
2170
+ }
2171
+ </div>
2172
+ <input
2173
+ matInput
2174
+ [errorStateMatcher]="errorStateMatcher"
2175
+ (blur)="markAsTouched()"
2176
+ (input)="emitValue()"
2177
+ [formControl]="ctrl"
2178
+ [attr.maxlength]="maxLength()"
2179
+ [attr.minlength]="minLength()"
2180
+ [attr.max]="max()"
2181
+ [attr.min]="min()"
2182
+ [placeholder]="placeholder()"
2183
+ [readonly]="readonly()"
2184
+ [type]="type()"
2185
+ />
2186
+ <ng-content select="[issSuffix]"></ng-content>
2187
+ <div (click)="emitSuffixClick()" class="cursor-pointer">
2188
+ @if (suffixText()) {
2189
+ <span matTextSuffix>{{ suffixText() }}</span>
2190
+ }
2191
+ @if (suffixIcon()) {
2192
+ <ds-icon matSuffix icon="{{suffixIcon()}}"></ds-icon>
2193
+ }
2194
+ </div>
2195
+ <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
2196
+ </mat-form-field>
2152
2197
  `
2153
2198
  }]
2154
2199
  }], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], prefixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefixIcon", required: false }] }], prefixText: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefixText", required: false }] }], suffixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffixIcon", required: false }] }], suffixText: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffixText", required: false }] }], onPrefixClick: [{ type: i0.Output, args: ["onPrefixClick"] }], onSuffixClick: [{ type: i0.Output, args: ["onSuffixClick"] }] } });
@@ -4446,67 +4491,68 @@ class MobileControl extends ControlBase {
4446
4491
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: MobileControl, isStandalone: true, selector: "iss-ctrl-mobile", inputs: { preferredCountries: { classPropertyName: "preferredCountries", publicName: "preferredCountries", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
4447
4492
  { provide: NG_VALUE_ACCESSOR, useExisting: MobileControl, multi: true },
4448
4493
  { provide: NG_VALIDATORS, useExisting: MobileControl, multi: true }
4449
- ], usesInheritance: true, ngImport: i0, template: `
4450
- <mat-form-field floatLabel="auto" cdkOverlayOrigin #trigger="cdkOverlayOrigin">
4451
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
4452
- <mat-label class="fs-16 fc-dark-gray">
4453
- <ng-content select="label"></ng-content>
4454
- </mat-label>
4455
- <div class="d-inline-flex align-items-center gap-1 country-flag" matPrefix (click)="toggleCountryCodeMenu()">
4456
- <img
4457
- ngSrc="./flags/{{selectedCountry().code.toLowerCase()}}.svg"
4458
- width="20"
4459
- height="20"
4460
- [alt]="selectedCountry().code.toLowerCase()"
4461
- class="country-flag--image"
4462
- [priority]="true"
4463
- >
4464
- <ds-icon icon="arrow-down" class="fs-12 fc-dark-gray"></ds-icon>
4465
- </div>
4466
- <input
4467
- matInput
4468
- type="tel"
4469
- autocomplete="off"
4470
- (blur)="markAsTouched()"
4471
- (keydown)="onInput($event)"
4472
- (input)="emit()"
4473
- [formControl]="ctrl"
4474
- [readonly]="readonly()"
4475
- [placeholder]="selectedCountry().placeholder"
4476
- />
4477
- </mat-form-field>
4478
- <ng-template
4479
- cdkConnectedOverlay
4480
- [cdkConnectedOverlayHasBackdrop]="true"
4481
- (backdropClick)="closeCountryCodeMenu()"
4482
- [cdkConnectedOverlayGrowAfterOpen]="true"
4483
- [cdkConnectedOverlayOrigin]="trigger"
4484
- [cdkConnectedOverlayOpen]="isOpen()"
4485
- >
4486
- <div class="country-dropdown bc-white box-shadow p-2">
4487
- <div class="search-container">
4488
- <mat-form-field>
4489
- <input matInput id="country-search-box" [formControl]="searchInput" (click)="$event.stopPropagation()"/>
4490
- </mat-form-field>
4491
- </div>
4492
- <ul class="country-list">
4493
- @for (country of filteredCountries(); track $index) {
4494
- <li
4495
- #countryEl
4496
- [ngClass]="country.order > 1 ? 'preferredCounty' : ''"
4497
- class="d-flex align-items-center gap-2 cursor-pointer p-2"
4498
- (click)="onSelectCountry(country)"
4499
- >
4500
- @defer (on viewport(countryEl)) {
4501
- <img ngSrc="./flags/{{country.code.toLowerCase()}}.svg" width="20" height="20" alt="" class="country-flag--image">
4502
- }
4503
- <span class="fs-12 fc-dark-gray">(+{{ country.dailCode }})</span>
4504
- <span class="fs-12 fc-black">{{ country.name }}</span>
4505
- </li>
4506
- }
4507
- </ul>
4508
- </div>
4509
- </ng-template>
4494
+ ], usesInheritance: true, ngImport: i0, template: `
4495
+ <mat-form-field floatLabel="auto" cdkOverlayOrigin #trigger="cdkOverlayOrigin">
4496
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
4497
+ <mat-label class="fs-16 fc-dark-gray">
4498
+ <ng-content select="label"></ng-content>
4499
+ </mat-label>
4500
+ <div class="d-inline-flex align-items-center gap-1 country-flag" matPrefix (click)="toggleCountryCodeMenu()">
4501
+ <img
4502
+ ngSrc="./flags/{{selectedCountry().code.toLowerCase()}}.svg"
4503
+ width="20"
4504
+ height="20"
4505
+ [alt]="selectedCountry().code.toLowerCase()"
4506
+ class="country-flag--image"
4507
+ [priority]="true"
4508
+ >
4509
+ <ds-icon icon="arrow-down" class="fs-12 fc-dark-gray"></ds-icon>
4510
+ </div>
4511
+ <input
4512
+ matInput
4513
+ type="tel"
4514
+ autocomplete="off"
4515
+ (blur)="markAsTouched()"
4516
+ (keydown)="onInput($event)"
4517
+ (input)="emit()"
4518
+ [formControl]="ctrl"
4519
+ [readonly]="readonly()"
4520
+ [placeholder]="selectedCountry().placeholder"
4521
+ [errorStateMatcher]="errorStateMatcher"
4522
+ />
4523
+ </mat-form-field>
4524
+ <ng-template
4525
+ cdkConnectedOverlay
4526
+ [cdkConnectedOverlayHasBackdrop]="true"
4527
+ (backdropClick)="closeCountryCodeMenu()"
4528
+ [cdkConnectedOverlayGrowAfterOpen]="true"
4529
+ [cdkConnectedOverlayOrigin]="trigger"
4530
+ [cdkConnectedOverlayOpen]="isOpen()"
4531
+ >
4532
+ <div class="country-dropdown bc-white box-shadow p-2">
4533
+ <div class="search-container">
4534
+ <mat-form-field>
4535
+ <input matInput id="country-search-box" [formControl]="searchInput" (click)="$event.stopPropagation()"/>
4536
+ </mat-form-field>
4537
+ </div>
4538
+ <ul class="country-list">
4539
+ @for (country of filteredCountries(); track $index) {
4540
+ <li
4541
+ #countryEl
4542
+ [ngClass]="country.order > 1 ? 'preferredCounty' : ''"
4543
+ class="d-flex align-items-center gap-2 cursor-pointer p-2"
4544
+ (click)="onSelectCountry(country)"
4545
+ >
4546
+ @defer (on viewport(countryEl)) {
4547
+ <img ngSrc="./flags/{{country.code.toLowerCase()}}.svg" width="20" height="20" alt="" class="country-flag--image">
4548
+ }
4549
+ <span class="fs-12 fc-dark-gray">(+{{ country.dailCode }})</span>
4550
+ <span class="fs-12 fc-black">{{ country.name }}</span>
4551
+ </li>
4552
+ }
4553
+ </ul>
4554
+ </div>
4555
+ </ng-template>
4510
4556
  `, isInline: true, styles: [".country-flag{border-inline-end:var(--input-border);padding-inline-end:.5rem;margin-inline-end:.5rem;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "decoding", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }], deferBlockDependencies: [() => [NgOptimizedImage]] });
4511
4557
  }
4512
4558
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MobileControl, decorators: [{
@@ -4524,67 +4570,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
4524
4570
  ], providers: [
4525
4571
  { provide: NG_VALUE_ACCESSOR, useExisting: MobileControl, multi: true },
4526
4572
  { provide: NG_VALIDATORS, useExisting: MobileControl, multi: true }
4527
- ], template: `
4528
- <mat-form-field floatLabel="auto" cdkOverlayOrigin #trigger="cdkOverlayOrigin">
4529
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
4530
- <mat-label class="fs-16 fc-dark-gray">
4531
- <ng-content select="label"></ng-content>
4532
- </mat-label>
4533
- <div class="d-inline-flex align-items-center gap-1 country-flag" matPrefix (click)="toggleCountryCodeMenu()">
4534
- <img
4535
- ngSrc="./flags/{{selectedCountry().code.toLowerCase()}}.svg"
4536
- width="20"
4537
- height="20"
4538
- [alt]="selectedCountry().code.toLowerCase()"
4539
- class="country-flag--image"
4540
- [priority]="true"
4541
- >
4542
- <ds-icon icon="arrow-down" class="fs-12 fc-dark-gray"></ds-icon>
4543
- </div>
4544
- <input
4545
- matInput
4546
- type="tel"
4547
- autocomplete="off"
4548
- (blur)="markAsTouched()"
4549
- (keydown)="onInput($event)"
4550
- (input)="emit()"
4551
- [formControl]="ctrl"
4552
- [readonly]="readonly()"
4553
- [placeholder]="selectedCountry().placeholder"
4554
- />
4555
- </mat-form-field>
4556
- <ng-template
4557
- cdkConnectedOverlay
4558
- [cdkConnectedOverlayHasBackdrop]="true"
4559
- (backdropClick)="closeCountryCodeMenu()"
4560
- [cdkConnectedOverlayGrowAfterOpen]="true"
4561
- [cdkConnectedOverlayOrigin]="trigger"
4562
- [cdkConnectedOverlayOpen]="isOpen()"
4563
- >
4564
- <div class="country-dropdown bc-white box-shadow p-2">
4565
- <div class="search-container">
4566
- <mat-form-field>
4567
- <input matInput id="country-search-box" [formControl]="searchInput" (click)="$event.stopPropagation()"/>
4568
- </mat-form-field>
4569
- </div>
4570
- <ul class="country-list">
4571
- @for (country of filteredCountries(); track $index) {
4572
- <li
4573
- #countryEl
4574
- [ngClass]="country.order > 1 ? 'preferredCounty' : ''"
4575
- class="d-flex align-items-center gap-2 cursor-pointer p-2"
4576
- (click)="onSelectCountry(country)"
4577
- >
4578
- @defer (on viewport(countryEl)) {
4579
- <img ngSrc="./flags/{{country.code.toLowerCase()}}.svg" width="20" height="20" alt="" class="country-flag--image">
4580
- }
4581
- <span class="fs-12 fc-dark-gray">(+{{ country.dailCode }})</span>
4582
- <span class="fs-12 fc-black">{{ country.name }}</span>
4583
- </li>
4584
- }
4585
- </ul>
4586
- </div>
4587
- </ng-template>
4573
+ ], template: `
4574
+ <mat-form-field floatLabel="auto" cdkOverlayOrigin #trigger="cdkOverlayOrigin">
4575
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
4576
+ <mat-label class="fs-16 fc-dark-gray">
4577
+ <ng-content select="label"></ng-content>
4578
+ </mat-label>
4579
+ <div class="d-inline-flex align-items-center gap-1 country-flag" matPrefix (click)="toggleCountryCodeMenu()">
4580
+ <img
4581
+ ngSrc="./flags/{{selectedCountry().code.toLowerCase()}}.svg"
4582
+ width="20"
4583
+ height="20"
4584
+ [alt]="selectedCountry().code.toLowerCase()"
4585
+ class="country-flag--image"
4586
+ [priority]="true"
4587
+ >
4588
+ <ds-icon icon="arrow-down" class="fs-12 fc-dark-gray"></ds-icon>
4589
+ </div>
4590
+ <input
4591
+ matInput
4592
+ type="tel"
4593
+ autocomplete="off"
4594
+ (blur)="markAsTouched()"
4595
+ (keydown)="onInput($event)"
4596
+ (input)="emit()"
4597
+ [formControl]="ctrl"
4598
+ [readonly]="readonly()"
4599
+ [placeholder]="selectedCountry().placeholder"
4600
+ [errorStateMatcher]="errorStateMatcher"
4601
+ />
4602
+ </mat-form-field>
4603
+ <ng-template
4604
+ cdkConnectedOverlay
4605
+ [cdkConnectedOverlayHasBackdrop]="true"
4606
+ (backdropClick)="closeCountryCodeMenu()"
4607
+ [cdkConnectedOverlayGrowAfterOpen]="true"
4608
+ [cdkConnectedOverlayOrigin]="trigger"
4609
+ [cdkConnectedOverlayOpen]="isOpen()"
4610
+ >
4611
+ <div class="country-dropdown bc-white box-shadow p-2">
4612
+ <div class="search-container">
4613
+ <mat-form-field>
4614
+ <input matInput id="country-search-box" [formControl]="searchInput" (click)="$event.stopPropagation()"/>
4615
+ </mat-form-field>
4616
+ </div>
4617
+ <ul class="country-list">
4618
+ @for (country of filteredCountries(); track $index) {
4619
+ <li
4620
+ #countryEl
4621
+ [ngClass]="country.order > 1 ? 'preferredCounty' : ''"
4622
+ class="d-flex align-items-center gap-2 cursor-pointer p-2"
4623
+ (click)="onSelectCountry(country)"
4624
+ >
4625
+ @defer (on viewport(countryEl)) {
4626
+ <img ngSrc="./flags/{{country.code.toLowerCase()}}.svg" width="20" height="20" alt="" class="country-flag--image">
4627
+ }
4628
+ <span class="fs-12 fc-dark-gray">(+{{ country.dailCode }})</span>
4629
+ <span class="fs-12 fc-black">{{ country.name }}</span>
4630
+ </li>
4631
+ }
4632
+ </ul>
4633
+ </div>
4634
+ </ng-template>
4588
4635
  `, styles: [".country-flag{border-inline-end:var(--input-border);padding-inline-end:.5rem;margin-inline-end:.5rem;cursor:pointer}\n"] }]
4589
4636
  }], propDecorators: { preferredCountries: [{ type: i0.Input, args: [{ isSignal: true, alias: "preferredCountries", required: false }] }] } });
4590
4637
 
@@ -5301,6 +5348,11 @@ class SelectControl extends ControlBase {
5301
5348
  this.#queryEffectRef.destroy();
5302
5349
  this.#disabledEffectRef.destroy();
5303
5350
  }
5351
+ // the selection is the value here; `ctrl` doubles as the autocomplete's search box, so while
5352
+ // the user is typing a query it holds that string rather than the chosen options.
5353
+ isEmpty() {
5354
+ return this.selectedOptions().size === 0;
5355
+ }
5304
5356
  #addToSelectedOptionsMap(option) {
5305
5357
  if (option) {
5306
5358
  const selectedOption = option;
@@ -5344,67 +5396,67 @@ class SelectControl extends ControlBase {
5344
5396
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SelectControl, deps: null, target: i0.ɵɵFactoryTarget.Component });
5345
5397
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SelectControl, isStandalone: true, selector: "iss-ctrl-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onQueryChange: "onQueryChange" }, providers: [
5346
5398
  { provide: NG_VALUE_ACCESSOR, useExisting: SelectControl, multi: true },
5347
- ], queries: [{ propertyName: "optionTemplate", first: true, predicate: ["optionTemplate"], descendants: true, isSignal: true }, { propertyName: "cardViewerTemplate", first: true, predicate: ["cardViewerTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
5348
- <mat-form-field floatLabel="auto" class="">
5349
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
5350
- <mat-label class="fs-16 fc-dark-gray">
5351
- <ng-content select="label"></ng-content>
5352
- </mat-label>
5353
- <input [formControl]="ctrl" [matAutocomplete]="auto" [matChipInputFor]="chipGrid" [placeholder]="placeholder()" [readonly]="readonly()" (blur)="markAsTouched()" class="m-0" matInput/>
5354
- @if (!disabled()) {
5355
- @if (selectedOptions().size) {
5356
- <span matSuffix class="sfi sfi-close fs-18 fc-black cursor-pointer" (click)="clearSelection()"></span>
5357
- } @else {
5358
- <span matSuffix class="sfi sfi-arrow-down fs-18 fc-black cursor-pointer"></span>
5359
- }
5360
- }
5361
-
5362
- <mat-autocomplete #auto="matAutocomplete" (optionSelected)="captureValue($event)" [displayWith]="displayFn" autoActiveFirstOption hideSingleSelectionIndicator>
5363
- @if (loading()) {
5364
- <mat-option disabled="true">
5365
- <ds-icon icon="spinner" class="spin fc-coral fs-20"></ds-icon>
5366
- </mat-option>
5367
- } @else {
5368
- @if (filteredOptions().length) {
5369
- @if (multiple()) {
5370
- <mat-option (click)="toggleAllSelection()" value="_SELECT_ALL_OPTIONS_">
5371
- {{ allSelected() ? "deselect all" : "Select All" }}
5372
- </mat-option>
5373
- }
5374
- <cdk-virtual-scroll-viewport itemSize="5" [ngStyle]="{'height': height()}">
5375
- <mat-option *cdkVirtualFor="let option of filteredOptions()" [value]="option" [ngClass]="{'mdc-list-item__selected': option | selectStatus: selectedOptions()}">
5376
- @if (optionTemplate()) {
5377
- <ng-container *ngTemplateOutlet="optionTemplate(); context: { $implicit: option}"/>
5378
- } @else {
5379
- {{ option.label }}
5380
- }
5381
- </mat-option>
5382
- </cdk-virtual-scroll-viewport>
5383
- } @else {
5384
- <mat-option disabled="true">No Result Found</mat-option>
5385
- }
5386
- }
5387
- </mat-autocomplete>
5388
- </mat-form-field>
5389
-
5390
- <mat-chip-grid #chipGrid>
5391
- @if (multiple()) {
5392
- @for (chip of selectedOptions(); track chip[0]) {
5393
- <mat-chip-row (removed)="removeFromSelectedOptionsMap(chip[1])">
5394
- @if (cardViewerTemplate()) {
5395
- <ng-container
5396
- *ngTemplateOutlet="cardViewerTemplate(); context: { $implicit: chip[1]}"
5397
- />
5398
- } @else {
5399
- {{ chip[1].label }}
5400
- }
5401
- <button matChipRemove [disabled]="readonly()" [attr.aria-label]="'remove ' + chip[1].label">
5402
- <ds-icon icon="trash" class="fc-red"></ds-icon>
5403
- </button>
5404
- </mat-chip-row>
5405
- }
5406
- }
5407
- </mat-chip-grid>
5399
+ ], queries: [{ propertyName: "optionTemplate", first: true, predicate: ["optionTemplate"], descendants: true, isSignal: true }, { propertyName: "cardViewerTemplate", first: true, predicate: ["cardViewerTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
5400
+ <mat-form-field floatLabel="auto" class="">
5401
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
5402
+ <mat-label class="fs-16 fc-dark-gray">
5403
+ <ng-content select="label"></ng-content>
5404
+ </mat-label>
5405
+ <input [formControl]="ctrl" [matAutocomplete]="auto" [matChipInputFor]="chipGrid" [placeholder]="placeholder()" [readonly]="readonly()" [errorStateMatcher]="errorStateMatcher" (blur)="markAsTouched()" class="m-0" matInput/>
5406
+ @if (!disabled()) {
5407
+ @if (selectedOptions().size) {
5408
+ <span matSuffix class="sfi sfi-close fs-18 fc-black cursor-pointer" (click)="clearSelection()"></span>
5409
+ } @else {
5410
+ <span matSuffix class="sfi sfi-arrow-down fs-18 fc-black cursor-pointer"></span>
5411
+ }
5412
+ }
5413
+
5414
+ <mat-autocomplete #auto="matAutocomplete" (optionSelected)="captureValue($event)" [displayWith]="displayFn" autoActiveFirstOption hideSingleSelectionIndicator>
5415
+ @if (loading()) {
5416
+ <mat-option disabled="true">
5417
+ <ds-icon icon="spinner" class="spin fc-coral fs-20"></ds-icon>
5418
+ </mat-option>
5419
+ } @else {
5420
+ @if (filteredOptions().length) {
5421
+ @if (multiple()) {
5422
+ <mat-option (click)="toggleAllSelection()" value="_SELECT_ALL_OPTIONS_">
5423
+ {{ allSelected() ? "deselect all" : "Select All" }}
5424
+ </mat-option>
5425
+ }
5426
+ <cdk-virtual-scroll-viewport itemSize="5" [ngStyle]="{'height': height()}">
5427
+ <mat-option *cdkVirtualFor="let option of filteredOptions()" [value]="option" [ngClass]="{'mdc-list-item__selected': option | selectStatus: selectedOptions()}">
5428
+ @if (optionTemplate()) {
5429
+ <ng-container *ngTemplateOutlet="optionTemplate(); context: { $implicit: option}"/>
5430
+ } @else {
5431
+ {{ option.label }}
5432
+ }
5433
+ </mat-option>
5434
+ </cdk-virtual-scroll-viewport>
5435
+ } @else {
5436
+ <mat-option disabled="true">No Result Found</mat-option>
5437
+ }
5438
+ }
5439
+ </mat-autocomplete>
5440
+ </mat-form-field>
5441
+
5442
+ <mat-chip-grid #chipGrid>
5443
+ @if (multiple()) {
5444
+ @for (chip of selectedOptions(); track chip[0]) {
5445
+ <mat-chip-row (removed)="removeFromSelectedOptionsMap(chip[1])">
5446
+ @if (cardViewerTemplate()) {
5447
+ <ng-container
5448
+ *ngTemplateOutlet="cardViewerTemplate(); context: { $implicit: chip[1]}"
5449
+ />
5450
+ } @else {
5451
+ {{ chip[1].label }}
5452
+ }
5453
+ <button matChipRemove [disabled]="readonly()" [attr.aria-label]="'remove ' + chip[1].label">
5454
+ <ds-icon icon="trash" class="fc-red"></ds-icon>
5455
+ </button>
5456
+ </mat-chip-row>
5457
+ }
5458
+ }
5459
+ </mat-chip-grid>
5408
5460
  `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i2$2.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.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: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: SelectStatusPipe, name: "selectStatus" }] });
5409
5461
  }
5410
5462
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SelectControl, decorators: [{
@@ -5424,67 +5476,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5424
5476
  NgTemplateOutlet,
5425
5477
  ], providers: [
5426
5478
  { provide: NG_VALUE_ACCESSOR, useExisting: SelectControl, multi: true },
5427
- ], template: `
5428
- <mat-form-field floatLabel="auto" class="">
5429
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
5430
- <mat-label class="fs-16 fc-dark-gray">
5431
- <ng-content select="label"></ng-content>
5432
- </mat-label>
5433
- <input [formControl]="ctrl" [matAutocomplete]="auto" [matChipInputFor]="chipGrid" [placeholder]="placeholder()" [readonly]="readonly()" (blur)="markAsTouched()" class="m-0" matInput/>
5434
- @if (!disabled()) {
5435
- @if (selectedOptions().size) {
5436
- <span matSuffix class="sfi sfi-close fs-18 fc-black cursor-pointer" (click)="clearSelection()"></span>
5437
- } @else {
5438
- <span matSuffix class="sfi sfi-arrow-down fs-18 fc-black cursor-pointer"></span>
5439
- }
5440
- }
5441
-
5442
- <mat-autocomplete #auto="matAutocomplete" (optionSelected)="captureValue($event)" [displayWith]="displayFn" autoActiveFirstOption hideSingleSelectionIndicator>
5443
- @if (loading()) {
5444
- <mat-option disabled="true">
5445
- <ds-icon icon="spinner" class="spin fc-coral fs-20"></ds-icon>
5446
- </mat-option>
5447
- } @else {
5448
- @if (filteredOptions().length) {
5449
- @if (multiple()) {
5450
- <mat-option (click)="toggleAllSelection()" value="_SELECT_ALL_OPTIONS_">
5451
- {{ allSelected() ? "deselect all" : "Select All" }}
5452
- </mat-option>
5453
- }
5454
- <cdk-virtual-scroll-viewport itemSize="5" [ngStyle]="{'height': height()}">
5455
- <mat-option *cdkVirtualFor="let option of filteredOptions()" [value]="option" [ngClass]="{'mdc-list-item__selected': option | selectStatus: selectedOptions()}">
5456
- @if (optionTemplate()) {
5457
- <ng-container *ngTemplateOutlet="optionTemplate(); context: { $implicit: option}"/>
5458
- } @else {
5459
- {{ option.label }}
5460
- }
5461
- </mat-option>
5462
- </cdk-virtual-scroll-viewport>
5463
- } @else {
5464
- <mat-option disabled="true">No Result Found</mat-option>
5465
- }
5466
- }
5467
- </mat-autocomplete>
5468
- </mat-form-field>
5469
-
5470
- <mat-chip-grid #chipGrid>
5471
- @if (multiple()) {
5472
- @for (chip of selectedOptions(); track chip[0]) {
5473
- <mat-chip-row (removed)="removeFromSelectedOptionsMap(chip[1])">
5474
- @if (cardViewerTemplate()) {
5475
- <ng-container
5476
- *ngTemplateOutlet="cardViewerTemplate(); context: { $implicit: chip[1]}"
5477
- />
5478
- } @else {
5479
- {{ chip[1].label }}
5480
- }
5481
- <button matChipRemove [disabled]="readonly()" [attr.aria-label]="'remove ' + chip[1].label">
5482
- <ds-icon icon="trash" class="fc-red"></ds-icon>
5483
- </button>
5484
- </mat-chip-row>
5485
- }
5486
- }
5487
- </mat-chip-grid>
5479
+ ], template: `
5480
+ <mat-form-field floatLabel="auto" class="">
5481
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
5482
+ <mat-label class="fs-16 fc-dark-gray">
5483
+ <ng-content select="label"></ng-content>
5484
+ </mat-label>
5485
+ <input [formControl]="ctrl" [matAutocomplete]="auto" [matChipInputFor]="chipGrid" [placeholder]="placeholder()" [readonly]="readonly()" [errorStateMatcher]="errorStateMatcher" (blur)="markAsTouched()" class="m-0" matInput/>
5486
+ @if (!disabled()) {
5487
+ @if (selectedOptions().size) {
5488
+ <span matSuffix class="sfi sfi-close fs-18 fc-black cursor-pointer" (click)="clearSelection()"></span>
5489
+ } @else {
5490
+ <span matSuffix class="sfi sfi-arrow-down fs-18 fc-black cursor-pointer"></span>
5491
+ }
5492
+ }
5493
+
5494
+ <mat-autocomplete #auto="matAutocomplete" (optionSelected)="captureValue($event)" [displayWith]="displayFn" autoActiveFirstOption hideSingleSelectionIndicator>
5495
+ @if (loading()) {
5496
+ <mat-option disabled="true">
5497
+ <ds-icon icon="spinner" class="spin fc-coral fs-20"></ds-icon>
5498
+ </mat-option>
5499
+ } @else {
5500
+ @if (filteredOptions().length) {
5501
+ @if (multiple()) {
5502
+ <mat-option (click)="toggleAllSelection()" value="_SELECT_ALL_OPTIONS_">
5503
+ {{ allSelected() ? "deselect all" : "Select All" }}
5504
+ </mat-option>
5505
+ }
5506
+ <cdk-virtual-scroll-viewport itemSize="5" [ngStyle]="{'height': height()}">
5507
+ <mat-option *cdkVirtualFor="let option of filteredOptions()" [value]="option" [ngClass]="{'mdc-list-item__selected': option | selectStatus: selectedOptions()}">
5508
+ @if (optionTemplate()) {
5509
+ <ng-container *ngTemplateOutlet="optionTemplate(); context: { $implicit: option}"/>
5510
+ } @else {
5511
+ {{ option.label }}
5512
+ }
5513
+ </mat-option>
5514
+ </cdk-virtual-scroll-viewport>
5515
+ } @else {
5516
+ <mat-option disabled="true">No Result Found</mat-option>
5517
+ }
5518
+ }
5519
+ </mat-autocomplete>
5520
+ </mat-form-field>
5521
+
5522
+ <mat-chip-grid #chipGrid>
5523
+ @if (multiple()) {
5524
+ @for (chip of selectedOptions(); track chip[0]) {
5525
+ <mat-chip-row (removed)="removeFromSelectedOptionsMap(chip[1])">
5526
+ @if (cardViewerTemplate()) {
5527
+ <ng-container
5528
+ *ngTemplateOutlet="cardViewerTemplate(); context: { $implicit: chip[1]}"
5529
+ />
5530
+ } @else {
5531
+ {{ chip[1].label }}
5532
+ }
5533
+ <button matChipRemove [disabled]="readonly()" [attr.aria-label]="'remove ' + chip[1].label">
5534
+ <ds-icon icon="trash" class="fc-red"></ds-icon>
5535
+ </button>
5536
+ </mat-chip-row>
5537
+ }
5538
+ }
5539
+ </mat-chip-grid>
5488
5540
  `, schemas: [CUSTOM_ELEMENTS_SCHEMA] }]
5489
5541
  }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], onQueryChange: [{ type: i0.Output, args: ["onQueryChange"] }], optionTemplate: [{ type: i0.ContentChild, args: ["optionTemplate", { isSignal: true }] }], cardViewerTemplate: [{ type: i0.ContentChild, args: ["cardViewerTemplate", { isSignal: true }] }] } });
5490
5542
 
@@ -5577,26 +5629,27 @@ class TextareaControl extends ControlBase {
5577
5629
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: TextareaControl, isStandalone: true, selector: "iss-ctrl-textarea", providers: [
5578
5630
  { provide: NG_VALUE_ACCESSOR, useExisting: TextareaControl, multi: true },
5579
5631
  { provide: NG_VALIDATORS, useExisting: TextareaControl, multi: true }
5580
- ], usesInheritance: true, ngImport: i0, template: `
5581
- <mat-form-field floatLabel="auto" class="custom-textarea">
5582
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
5583
- <mat-label class="fs-16 fc-dark-gray">
5584
- <ng-content select="label"></ng-content>
5585
- </mat-label>
5586
- <textarea
5587
- matInput
5588
- [placeholder]="placeholder()"
5589
- [formControl]="ctrl"
5590
- [attr.maxlength]="maxLength()"
5591
- [attr.minlength]="minLength()"
5592
- [readonly]="readonly()"
5593
- (input)="emitValue()"
5594
- (focusout)="markAsTouched()"
5595
- >
5596
- </textarea>
5597
- <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
5598
- </mat-form-field>
5599
- `, isInline: true, dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: HintsComponent, selector: "iss-ctrl-hints", inputs: ["hints", "touched"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }] });
5632
+ ], usesInheritance: true, ngImport: i0, template: `
5633
+ <mat-form-field floatLabel="auto" class="custom-textarea">
5634
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
5635
+ <mat-label class="fs-16 fc-dark-gray">
5636
+ <ng-content select="label"></ng-content>
5637
+ </mat-label>
5638
+ <textarea
5639
+ matInput
5640
+ [errorStateMatcher]="errorStateMatcher"
5641
+ [placeholder]="placeholder()"
5642
+ [formControl]="ctrl"
5643
+ [attr.maxlength]="maxLength()"
5644
+ [attr.minlength]="minLength()"
5645
+ [readonly]="readonly()"
5646
+ (input)="emitValue()"
5647
+ (focusout)="markAsTouched()"
5648
+ >
5649
+ </textarea>
5650
+ <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
5651
+ </mat-form-field>
5652
+ `, isInline: true, dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: Hints, selector: "iss-ctrl-hints", inputs: ["hints", "touched"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }] });
5600
5653
  }
5601
5654
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TextareaControl, decorators: [{
5602
5655
  type: Component,
@@ -5605,7 +5658,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5605
5658
  imports: [
5606
5659
  MatFormField,
5607
5660
  MatInput,
5608
- HintsComponent,
5661
+ Hints,
5609
5662
  FormsModule,
5610
5663
  ReactiveFormsModule,
5611
5664
  MatFormFieldModule,
@@ -5615,25 +5668,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5615
5668
  { provide: NG_VALIDATORS, useExisting: TextareaControl, multi: true }
5616
5669
  ],
5617
5670
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
5618
- template: `
5619
- <mat-form-field floatLabel="auto" class="custom-textarea">
5620
- <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
5621
- <mat-label class="fs-16 fc-dark-gray">
5622
- <ng-content select="label"></ng-content>
5623
- </mat-label>
5624
- <textarea
5625
- matInput
5626
- [placeholder]="placeholder()"
5627
- [formControl]="ctrl"
5628
- [attr.maxlength]="maxLength()"
5629
- [attr.minlength]="minLength()"
5630
- [readonly]="readonly()"
5631
- (input)="emitValue()"
5632
- (focusout)="markAsTouched()"
5633
- >
5634
- </textarea>
5635
- <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
5636
- </mat-form-field>
5671
+ template: `
5672
+ <mat-form-field floatLabel="auto" class="custom-textarea">
5673
+ <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->
5674
+ <mat-label class="fs-16 fc-dark-gray">
5675
+ <ng-content select="label"></ng-content>
5676
+ </mat-label>
5677
+ <textarea
5678
+ matInput
5679
+ [errorStateMatcher]="errorStateMatcher"
5680
+ [placeholder]="placeholder()"
5681
+ [formControl]="ctrl"
5682
+ [attr.maxlength]="maxLength()"
5683
+ [attr.minlength]="minLength()"
5684
+ [readonly]="readonly()"
5685
+ (input)="emitValue()"
5686
+ (focusout)="markAsTouched()"
5687
+ >
5688
+ </textarea>
5689
+ <iss-ctrl-hints [hints]="hints()" [touched]="touched()"/>
5690
+ </mat-form-field>
5637
5691
  `
5638
5692
  }]
5639
5693
  }] });
@@ -6411,22 +6465,22 @@ const COMPONENTS = {
6411
6465
  datetime: () => Promise.resolve().then(function () { return datetimePicker_field; }).then((c) => c.DatetimePickerField),
6412
6466
  date_range: () => Promise.resolve().then(function () { return dateRangePicker_field; }).then((c) => c.DateRangePickerField),
6413
6467
  attachment: () => Promise.resolve().then(function () { return filePicker_field; }).then((c) => c.FilePickerField),
6414
- userPicker: () => import('./iss-ctrl-user-picker.field-BhjVNeqN.mjs').then((c) => c.UserPickerField),
6468
+ userPicker: () => import('./iss-ctrl-user-picker.field-BH63sZ-X.mjs').then((c) => c.UserPickerField),
6415
6469
  vehicle_plate: () => Promise.resolve().then(function () { return plate_field; }).then((c) => c.PlateField),
6416
- enrichment: () => import('./iss-ctrl-note.field-CbLlparb.mjs').then((c) => c.NoteField),
6470
+ enrichment: () => import('./iss-ctrl-note.field-B_Lbp28X.mjs').then((c) => c.NoteField),
6417
6471
  mobile: () => Promise.resolve().then(function () { return mobile_field; }).then((c) => c.MobileField),
6418
- table: () => import('./iss-ctrl-table.field-CvqXIE4q.mjs').then((c) => c.TableField),
6472
+ table: () => import('./iss-ctrl-table.field-B5FxF6hn.mjs').then((c) => c.TableField),
6419
6473
  chips: () => Promise.resolve().then(function () { return chips_field; }).then((c) => c.ChipsField),
6420
6474
  switch: () => Promise.resolve().then(function () { return slideToggle_field; }).then((c) => c.SlideToggleField),
6421
6475
  };
6422
6476
 
6423
6477
  const SERVICES = {
6424
- setValue: () => import('./iss-ctrl-set-value-event-vKIrSRgu.mjs').then((s) => s.SetValueEvent),
6478
+ setValue: () => import('./iss-ctrl-set-value-event-CgXhi0Bv.mjs').then((s) => s.SetValueEvent),
6425
6479
  show: () => import('./iss-ctrl-show-event-BcRCwAfo.mjs').then((s) => s.ShowEvent),
6426
- load: () => import('./iss-ctrl-load-value-event-DmX9Pkzf.mjs').then((s) => s.LoadValueEvent),
6427
- loadOptions: () => import('./iss-ctrl-load-options-event-CmXkuQ5O.mjs').then((s) => s.LoadOptionsEvent),
6428
- triggerBasedOnJsonValue: () => import('./iss-ctrl-trigger-based-on-json-value-wyn6AXWA.mjs').then((s) => s.TriggerBasedOnJsonValue),
6429
- replaceApiKeyDefaultImpl: () => import('./iss-ctrl-replace-api-keys-C_mYQdtP.mjs').then((s) => s.ReplaceApiKeys),
6480
+ load: () => import('./iss-ctrl-load-value-event-DJKJ5S3h.mjs').then((s) => s.LoadValueEvent),
6481
+ loadOptions: () => import('./iss-ctrl-load-options-event-CxyAyNMe.mjs').then((s) => s.LoadOptionsEvent),
6482
+ triggerBasedOnJsonValue: () => import('./iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs').then((s) => s.TriggerBasedOnJsonValue),
6483
+ replaceApiKeyDefaultImpl: () => import('./iss-ctrl-replace-api-keys-C0XYQW4i.mjs').then((s) => s.ReplaceApiKeys),
6430
6484
  };
6431
6485
 
6432
6486
  // Read-only counterpart of COMPONENTS: the component used to render a field's value
@@ -6809,7 +6863,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6809
6863
  args: [{ name: "translate" }]
6810
6864
  }] });
6811
6865
 
6812
- class ValidationMessageComponent {
6866
+ class ValidationMessage {
6813
6867
  errors = input.required(...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
6814
6868
  showMessage = input.required(...(ngDevMode ? [{ debugName: "showMessage" }] : /* istanbul ignore next */ []));
6815
6869
  getValidationMessage(error) {
@@ -6820,8 +6874,8 @@ class ValidationMessageComponent {
6820
6874
  }
6821
6875
  return errorMessageGenerator(error.value);
6822
6876
  }
6823
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ValidationMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6824
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ValidationMessageComponent, isStandalone: true, selector: "iss-validation-message-viewer", inputs: { errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: true, transformFunction: null }, showMessage: { classPropertyName: "showMessage", publicName: "showMessage", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
6877
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ValidationMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
6878
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ValidationMessage, isStandalone: true, selector: "iss-validation-message-viewer", inputs: { errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: true, transformFunction: null }, showMessage: { classPropertyName: "showMessage", publicName: "showMessage", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
6825
6879
  @if (errors() !== null && showMessage()) {
6826
6880
  <div class="messages">
6827
6881
  @for (error of errors() ?? {} | keyvalue; track error) {
@@ -6833,7 +6887,7 @@ class ValidationMessageComponent {
6833
6887
  }
6834
6888
  `, isInline: true, styles: [":host{display:block;position:relative}.messages{position:absolute;inset-inline:0;top:0;z-index:1}p{margin:0}\n"], dependencies: [{ kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
6835
6889
  }
6836
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ValidationMessageComponent, decorators: [{
6890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ValidationMessage, decorators: [{
6837
6891
  type: Component,
6838
6892
  args: [{ selector: "iss-validation-message-viewer", imports: [
6839
6893
  KeyValuePipe,
@@ -7115,6 +7169,44 @@ var input_viewer = /*#__PURE__*/Object.freeze({
7115
7169
  InputViewer: InputViewer
7116
7170
  });
7117
7171
 
7172
+ /**
7173
+ * `<iss-field-viewer>` — read-only presentation of a single field as a
7174
+ * label / value row.
7175
+ *
7176
+ * Project the caption into the `label` slot and the rendered value into any
7177
+ * element carrying a `value` attribute:
7178
+ *
7179
+ * ```html
7180
+ * <iss-field-viewer>
7181
+ * <label>Request Type</label>
7182
+ * <span>value</span>
7183
+ * </iss-field-viewer>
7184
+ * ```
7185
+ *
7186
+ * The label sits in a fixed-width column, so every value in a stack of viewers
7187
+ * starts on the same vertical line. Override that column with the
7188
+ * `--field-viewer-label-width` custom property on any ancestor.
7189
+ * When no label is projected, the value spans the full width of the row.
7190
+ */
7191
+ class FieldViewer {
7192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: FieldViewer, deps: [], target: i0.ɵɵFactoryTarget.Component });
7193
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: FieldViewer, isStandalone: true, selector: "iss-field-viewer", ngImport: i0, template: `
7194
+ <div class="field-viewer w-100">
7195
+ <span class="field-viewer__label"><ng-content select="label"></ng-content></span>
7196
+ <span class="field-viewer__value"><ng-content></ng-content></span>
7197
+ </div>
7198
+ `, isInline: true, styles: [":host{--field-viewer-label-width: 14rem;--field-viewer-gap: 1.5rem;--field-viewer-padding: .75rem 1rem;--field-viewer-label-fc: var(--dark-gray);--field-viewer-value-fc: var(--black);display:block;width:100%}.field-viewer{display:grid;grid-template-columns:var(--field-viewer-label-width) minmax(0,1fr);align-items:baseline;column-gap:var(--field-viewer-gap);padding:var(--field-viewer-padding);border-radius:var(--box-radius);font-size:.875rem;line-height:var(--default-line-height)}.field-viewer__label{color:var(--field-viewer-label-fc);font-weight:var(--font-regular);overflow-wrap:anywhere}.field-viewer__value{min-width:0;color:var(--field-viewer-value-fc);font-weight:var(--font-bold);overflow-wrap:anywhere}.field-viewer__label ::ng-deep label{display:block;margin:0;color:inherit;font:inherit}.field-viewer:not(:has(.field-viewer__label>*)){grid-template-columns:minmax(0,1fr)}.field-viewer:not(:has(.field-viewer__label>*)) .field-viewer__label{display:none}@media(max-width:575.98px){.field-viewer{grid-template-columns:minmax(0,1fr);row-gap:.25rem}}\n"] });
7199
+ }
7200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: FieldViewer, decorators: [{
7201
+ type: Component,
7202
+ args: [{ selector: "iss-field-viewer", imports: [], template: `
7203
+ <div class="field-viewer w-100">
7204
+ <span class="field-viewer__label"><ng-content select="label"></ng-content></span>
7205
+ <span class="field-viewer__value"><ng-content></ng-content></span>
7206
+ </div>
7207
+ `, styles: [":host{--field-viewer-label-width: 14rem;--field-viewer-gap: 1.5rem;--field-viewer-padding: .75rem 1rem;--field-viewer-label-fc: var(--dark-gray);--field-viewer-value-fc: var(--black);display:block;width:100%}.field-viewer{display:grid;grid-template-columns:var(--field-viewer-label-width) minmax(0,1fr);align-items:baseline;column-gap:var(--field-viewer-gap);padding:var(--field-viewer-padding);border-radius:var(--box-radius);font-size:.875rem;line-height:var(--default-line-height)}.field-viewer__label{color:var(--field-viewer-label-fc);font-weight:var(--font-regular);overflow-wrap:anywhere}.field-viewer__value{min-width:0;color:var(--field-viewer-value-fc);font-weight:var(--font-bold);overflow-wrap:anywhere}.field-viewer__label ::ng-deep label{display:block;margin:0;color:inherit;font:inherit}.field-viewer:not(:has(.field-viewer__label>*)){grid-template-columns:minmax(0,1fr)}.field-viewer:not(:has(.field-viewer__label>*)) .field-viewer__label{display:none}@media(max-width:575.98px){.field-viewer{grid-template-columns:minmax(0,1fr);row-gap:.25rem}}\n"] }]
7208
+ }] });
7209
+
7118
7210
  /**
7119
7211
  * `<iss-field-input>` — single line text, number, email or password entry.
7120
7212
  *
@@ -7162,10 +7254,13 @@ class InputField extends FieldBase {
7162
7254
  </iss-ctrl-input>
7163
7255
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7164
7256
  } @else {
7165
- <iss-viewer-input [field]="field"/>
7257
+ <iss-field-viewer>
7258
+ <label>{{ field.label() }}</label>
7259
+ <iss-viewer-input [field]="field"/>
7260
+ </iss-field-viewer>
7166
7261
  }
7167
7262
  }
7168
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: InputControl, selector: "iss-ctrl-input", inputs: ["type", "prefixIcon", "prefixText", "suffixIcon", "suffixText"], outputs: ["onPrefixClick", "onSuffixClick"] }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: InputViewer, selector: "iss-viewer-input" }], viewProviders: [VIEW_PROVIDER] });
7263
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: InputControl, selector: "iss-ctrl-input", inputs: ["type", "prefixIcon", "prefixText", "suffixIcon", "suffixText"], outputs: ["onPrefixClick", "onSuffixClick"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: InputViewer, selector: "iss-viewer-input" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7169
7264
  }
7170
7265
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: InputField, decorators: [{
7171
7266
  type: Component,
@@ -7175,8 +7270,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7175
7270
  imports: [
7176
7271
  ReactiveFormsModule,
7177
7272
  InputControl,
7178
- ValidationMessageComponent,
7179
- InputViewer
7273
+ ValidationMessage,
7274
+ InputViewer,
7275
+ FieldViewer
7180
7276
  ],
7181
7277
  template: `
7182
7278
  @if (field.visible()) {
@@ -7195,7 +7291,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7195
7291
  </iss-ctrl-input>
7196
7292
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7197
7293
  } @else {
7198
- <iss-viewer-input [field]="field"/>
7294
+ <iss-field-viewer>
7295
+ <label>{{ field.label() }}</label>
7296
+ <iss-viewer-input [field]="field"/>
7297
+ </iss-field-viewer>
7199
7298
  }
7200
7299
  }
7201
7300
  `
@@ -7262,10 +7361,13 @@ class TextareaField extends FieldBase {
7262
7361
  </iss-ctrl-textarea>
7263
7362
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7264
7363
  } @else {
7265
- <iss-viewer-textarea [field]="field"/>
7364
+ <iss-field-viewer>
7365
+ <label>{{ field.label() }}</label>
7366
+ <iss-viewer-textarea [field]="field"/>
7367
+ </iss-field-viewer>
7266
7368
  }
7267
7369
  }
7268
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TextareaControl, selector: "iss-ctrl-textarea" }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: TextareaViewer, selector: "iss-viewer-textarea" }], viewProviders: [VIEW_PROVIDER] });
7370
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TextareaControl, selector: "iss-ctrl-textarea" }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: TextareaViewer, selector: "iss-viewer-textarea" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7269
7371
  }
7270
7372
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TextareaField, decorators: [{
7271
7373
  type: Component,
@@ -7275,8 +7377,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7275
7377
  imports: [
7276
7378
  ReactiveFormsModule,
7277
7379
  TextareaControl,
7278
- ValidationMessageComponent,
7279
- TextareaViewer
7380
+ ValidationMessage,
7381
+ TextareaViewer,
7382
+ FieldViewer
7280
7383
  ],
7281
7384
  template: `
7282
7385
  @if (field.visible()) {
@@ -7286,7 +7389,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7286
7389
  </iss-ctrl-textarea>
7287
7390
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7288
7391
  } @else {
7289
- <iss-viewer-textarea [field]="field"/>
7392
+ <iss-field-viewer>
7393
+ <label>{{ field.label() }}</label>
7394
+ <iss-viewer-textarea [field]="field"/>
7395
+ </iss-field-viewer>
7290
7396
  }
7291
7397
  }
7292
7398
  `
@@ -7364,10 +7470,13 @@ class ChipsField extends FieldBase {
7364
7470
  <iss-ctrl-chips [formControlName]="field.name" [readonly]="field.config.readonly() ?? false"><label>{{ field.label() }}</label></iss-ctrl-chips>
7365
7471
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7366
7472
  } @else {
7367
- <iss-viewer-chips [field]="field"/>
7473
+ <iss-field-viewer>
7474
+ <label>{{ field.label() }}</label>
7475
+ <iss-viewer-chips [field]="field"/>
7476
+ </iss-field-viewer>
7368
7477
  }
7369
7478
  }
7370
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ChipsControl, selector: "iss-ctrl-chips" }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: ChipsViewer, selector: "iss-viewer-chips" }], viewProviders: [VIEW_PROVIDER] });
7479
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ChipsControl, selector: "iss-ctrl-chips" }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: ChipsViewer, selector: "iss-viewer-chips" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7371
7480
  }
7372
7481
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ChipsField, decorators: [{
7373
7482
  type: Component,
@@ -7377,8 +7486,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7377
7486
  imports: [
7378
7487
  ReactiveFormsModule,
7379
7488
  ChipsControl,
7380
- ValidationMessageComponent,
7381
- ChipsViewer
7489
+ ValidationMessage,
7490
+ ChipsViewer,
7491
+ FieldViewer
7382
7492
  ],
7383
7493
  template: `
7384
7494
  @if (field.visible()) {
@@ -7386,7 +7496,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7386
7496
  <iss-ctrl-chips [formControlName]="field.name" [readonly]="field.config.readonly() ?? false"><label>{{ field.label() }}</label></iss-ctrl-chips>
7387
7497
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7388
7498
  } @else {
7389
- <iss-viewer-chips [field]="field"/>
7499
+ <iss-field-viewer>
7500
+ <label>{{ field.label() }}</label>
7501
+ <iss-viewer-chips [field]="field"/>
7502
+ </iss-field-viewer>
7390
7503
  }
7391
7504
  }
7392
7505
  `
@@ -7458,19 +7571,23 @@ class RadioField extends FieldBase {
7458
7571
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: RadioField, isStandalone: true, selector: "iss-field-radio", usesInheritance: true, ngImport: i0, template: `
7459
7572
  @if (field.visible()) {
7460
7573
  <div style="display: flex; flex-direction: column">
7461
- @if (!field.config.hideLabel()) {
7462
- <mat-label>{{ field.label() }}</mat-label>
7463
- }
7464
-
7465
7574
  @if (field.mode() === "edit") {
7575
+ @if (!field.config.hideLabel()) {
7576
+ <mat-label>{{ field.label() }}</mat-label>
7577
+ }
7466
7578
  <iss-ctrl-radio [formControlName]="field.name" [options]="field.options()" [readonly]="field.config.readonly() ?? false" (onChange)="onChange($event)"/>
7467
7579
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7468
7580
  } @else {
7469
- <iss-viewer-radio [field]="field"/>
7581
+ <iss-field-viewer>
7582
+ @if (!field.config.hideLabel()) {
7583
+ <label>{{ field.label() }}</label>
7584
+ }
7585
+ <iss-viewer-radio [field]="field"/>
7586
+ </iss-field-viewer>
7470
7587
  }
7471
7588
  </div>
7472
7589
  }
7473
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: RadioControl, selector: "iss-ctrl-radio", inputs: ["options"] }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: RadioViewer, selector: "iss-viewer-radio" }], viewProviders: [VIEW_PROVIDER] });
7590
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: RadioControl, selector: "iss-ctrl-radio", inputs: ["options"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: RadioViewer, selector: "iss-viewer-radio" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7474
7591
  }
7475
7592
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RadioField, decorators: [{
7476
7593
  type: Component,
@@ -7481,21 +7598,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7481
7598
  ReactiveFormsModule,
7482
7599
  MatLabel,
7483
7600
  RadioControl,
7484
- ValidationMessageComponent,
7485
- RadioViewer
7601
+ ValidationMessage,
7602
+ RadioViewer,
7603
+ FieldViewer
7486
7604
  ],
7487
7605
  template: `
7488
7606
  @if (field.visible()) {
7489
7607
  <div style="display: flex; flex-direction: column">
7490
- @if (!field.config.hideLabel()) {
7491
- <mat-label>{{ field.label() }}</mat-label>
7492
- }
7493
-
7494
7608
  @if (field.mode() === "edit") {
7609
+ @if (!field.config.hideLabel()) {
7610
+ <mat-label>{{ field.label() }}</mat-label>
7611
+ }
7495
7612
  <iss-ctrl-radio [formControlName]="field.name" [options]="field.options()" [readonly]="field.config.readonly() ?? false" (onChange)="onChange($event)"/>
7496
7613
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7497
7614
  } @else {
7498
- <iss-viewer-radio [field]="field"/>
7615
+ <iss-field-viewer>
7616
+ @if (!field.config.hideLabel()) {
7617
+ <label>{{ field.label() }}</label>
7618
+ }
7619
+ <iss-viewer-radio [field]="field"/>
7620
+ </iss-field-viewer>
7499
7621
  }
7500
7622
  </div>
7501
7623
  }
@@ -7576,10 +7698,13 @@ class SelectField extends FieldBase {
7576
7698
  </iss-ctrl-select>
7577
7699
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7578
7700
  } @else {
7579
- <iss-viewer-select [field]="field"/>
7701
+ <iss-field-viewer>
7702
+ <label>{{ field.label() }}</label>
7703
+ <iss-viewer-select [field]="field"/>
7704
+ </iss-field-viewer>
7580
7705
  }
7581
7706
  }
7582
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: SelectControl, selector: "iss-ctrl-select", inputs: ["options", "height", "loading"], outputs: ["onQueryChange"] }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: SelectViewer, selector: "iss-viewer-select" }], viewProviders: [VIEW_PROVIDER] });
7707
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: SelectControl, selector: "iss-ctrl-select", inputs: ["options", "height", "loading"], outputs: ["onQueryChange"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: SelectViewer, selector: "iss-viewer-select" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7583
7708
  }
7584
7709
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SelectField, decorators: [{
7585
7710
  type: Component,
@@ -7589,8 +7714,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7589
7714
  imports: [
7590
7715
  ReactiveFormsModule,
7591
7716
  SelectControl,
7592
- ValidationMessageComponent,
7593
- SelectViewer
7717
+ ValidationMessage,
7718
+ SelectViewer,
7719
+ FieldViewer
7594
7720
  ],
7595
7721
  template: `
7596
7722
  @if (field.visible()) {
@@ -7600,7 +7726,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7600
7726
  </iss-ctrl-select>
7601
7727
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7602
7728
  } @else {
7603
- <iss-viewer-select [field]="field"/>
7729
+ <iss-field-viewer>
7730
+ <label>{{ field.label() }}</label>
7731
+ <iss-viewer-select [field]="field"/>
7732
+ </iss-field-viewer>
7604
7733
  }
7605
7734
  }
7606
7735
  `
@@ -7664,10 +7793,13 @@ class MobileField extends FieldBase {
7664
7793
  <label>{{ field.label() }}</label>
7665
7794
  </iss-ctrl-mobile>
7666
7795
  } @else {
7667
- <iss-viewer-mobile [field]="field"/>
7796
+ <iss-field-viewer>
7797
+ <label>{{ field.label() }}</label>
7798
+ <iss-viewer-mobile [field]="field"/>
7799
+ </iss-field-viewer>
7668
7800
  }
7669
7801
  }
7670
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MobileControl, selector: "iss-ctrl-mobile", inputs: ["preferredCountries"] }, { kind: "component", type: MobileViewer, selector: "iss-viewer-mobile" }], viewProviders: [VIEW_PROVIDER] });
7802
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MobileControl, selector: "iss-ctrl-mobile", inputs: ["preferredCountries"] }, { kind: "component", type: MobileViewer, selector: "iss-viewer-mobile" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7671
7803
  }
7672
7804
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MobileField, decorators: [{
7673
7805
  type: Component,
@@ -7677,7 +7809,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7677
7809
  imports: [
7678
7810
  ReactiveFormsModule,
7679
7811
  MobileControl,
7680
- MobileViewer
7812
+ MobileViewer,
7813
+ FieldViewer
7681
7814
  ],
7682
7815
  template: `
7683
7816
  @if (field.visible()) {
@@ -7686,7 +7819,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7686
7819
  <label>{{ field.label() }}</label>
7687
7820
  </iss-ctrl-mobile>
7688
7821
  } @else {
7689
- <iss-viewer-mobile [field]="field"/>
7822
+ <iss-field-viewer>
7823
+ <label>{{ field.label() }}</label>
7824
+ <iss-viewer-mobile [field]="field"/>
7825
+ </iss-field-viewer>
7690
7826
  }
7691
7827
  }
7692
7828
  `
@@ -7766,10 +7902,15 @@ class CheckboxField extends FieldBase {
7766
7902
  </iss-ctrl-checkbox>
7767
7903
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7768
7904
  } @else {
7769
- <iss-viewer-checkbox [field]="field"/>
7905
+ <iss-field-viewer>
7906
+ @if (!field.config.hideLabel()) {
7907
+ <label>{{ field.label() }}</label>
7908
+ }
7909
+ <iss-viewer-checkbox [field]="field"/>
7910
+ </iss-field-viewer>
7770
7911
  }
7771
7912
  }
7772
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CheckboxControl, selector: "iss-ctrl-checkbox", inputs: ["options"] }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: CheckboxViewer, selector: "iss-viewer-checkbox" }], viewProviders: [VIEW_PROVIDER] });
7913
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CheckboxControl, selector: "iss-ctrl-checkbox", inputs: ["options"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: CheckboxViewer, selector: "iss-viewer-checkbox" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7773
7914
  }
7774
7915
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CheckboxField, decorators: [{
7775
7916
  type: Component,
@@ -7779,8 +7920,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7779
7920
  imports: [
7780
7921
  ReactiveFormsModule,
7781
7922
  CheckboxControl,
7782
- ValidationMessageComponent,
7783
- CheckboxViewer
7923
+ ValidationMessage,
7924
+ CheckboxViewer,
7925
+ FieldViewer
7784
7926
  ],
7785
7927
  template: `
7786
7928
  @if (field.visible()) {
@@ -7792,7 +7934,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7792
7934
  </iss-ctrl-checkbox>
7793
7935
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7794
7936
  } @else {
7795
- <iss-viewer-checkbox [field]="field"/>
7937
+ <iss-field-viewer>
7938
+ @if (!field.config.hideLabel()) {
7939
+ <label>{{ field.label() }}</label>
7940
+ }
7941
+ <iss-viewer-checkbox [field]="field"/>
7942
+ </iss-field-viewer>
7796
7943
  }
7797
7944
  }
7798
7945
  `
@@ -7864,10 +8011,10 @@ class ToggleButtonField extends FieldBase {
7864
8011
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonField, deps: null, target: i0.ɵɵFactoryTarget.Component });
7865
8012
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ToggleButtonField, isStandalone: true, selector: "iss-field-toggle-button", usesInheritance: true, ngImport: i0, template: `
7866
8013
  @if (field.visible()) {
7867
- @if (!field.config.hideLabel()) {
7868
- <mat-label>{{ field.label() }}</mat-label>
7869
- }
7870
8014
  @if (field.mode() === "edit") {
8015
+ @if (!field.config.hideLabel()) {
8016
+ <mat-label>{{ field.label() }}</mat-label>
8017
+ }
7871
8018
  <iss-ctrl-toggle-button
7872
8019
  [formControlName]="field.name"
7873
8020
  [options]="field.options()"
@@ -7877,10 +8024,15 @@ class ToggleButtonField extends FieldBase {
7877
8024
  />
7878
8025
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7879
8026
  } @else {
7880
- <iss-viewer-toggle-button [field]="field"/>
8027
+ <iss-field-viewer>
8028
+ @if (!field.config.hideLabel()) {
8029
+ <label>{{ field.label() }}</label>
8030
+ }
8031
+ <iss-viewer-toggle-button [field]="field"/>
8032
+ </iss-field-viewer>
7881
8033
  }
7882
8034
  }
7883
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: ToggleButtonControl, selector: "iss-ctrl-toggle-button", inputs: ["options"] }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: ToggleButtonViewer, selector: "iss-viewer-toggle-button" }], viewProviders: [VIEW_PROVIDER] });
8035
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: ToggleButtonControl, selector: "iss-ctrl-toggle-button", inputs: ["options"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: ToggleButtonViewer, selector: "iss-viewer-toggle-button" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7884
8036
  }
7885
8037
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonField, decorators: [{
7886
8038
  type: Component,
@@ -7891,15 +8043,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7891
8043
  ReactiveFormsModule,
7892
8044
  MatLabel,
7893
8045
  ToggleButtonControl,
7894
- ValidationMessageComponent,
7895
- ToggleButtonViewer
8046
+ ValidationMessage,
8047
+ ToggleButtonViewer,
8048
+ FieldViewer
7896
8049
  ],
7897
8050
  template: `
7898
8051
  @if (field.visible()) {
7899
- @if (!field.config.hideLabel()) {
7900
- <mat-label>{{ field.label() }}</mat-label>
7901
- }
7902
8052
  @if (field.mode() === "edit") {
8053
+ @if (!field.config.hideLabel()) {
8054
+ <mat-label>{{ field.label() }}</mat-label>
8055
+ }
7903
8056
  <iss-ctrl-toggle-button
7904
8057
  [formControlName]="field.name"
7905
8058
  [options]="field.options()"
@@ -7909,7 +8062,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7909
8062
  />
7910
8063
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7911
8064
  } @else {
7912
- <iss-viewer-toggle-button [field]="field"/>
8065
+ <iss-field-viewer>
8066
+ @if (!field.config.hideLabel()) {
8067
+ <label>{{ field.label() }}</label>
8068
+ }
8069
+ <iss-viewer-toggle-button [field]="field"/>
8070
+ </iss-field-viewer>
7913
8071
  }
7914
8072
  }
7915
8073
  `
@@ -7984,36 +8142,44 @@ class SlideToggleField extends FieldBase {
7984
8142
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SlideToggleField, deps: null, target: i0.ɵɵFactoryTarget.Component });
7985
8143
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SlideToggleField, isStandalone: true, selector: "iss-field-slide-toggle", usesInheritance: true, ngImport: i0, template: `
7986
8144
  @if (field.visible()) {
7987
- @if (!field.config.hideLabel()) {
7988
- <mat-label>{{ field.label() }}</mat-label>
7989
- }
7990
-
7991
8145
  @if (field.mode() === "edit") {
8146
+ @if (!field.config.hideLabel()) {
8147
+ <mat-label>{{ field.label() }}</mat-label>
8148
+ }
7992
8149
  <iss-ctrl-slide-toggle [formControlName]="field.name" [readonly]="field.config.readonly() ?? false" (onChange)="onChange($event)"/>
7993
8150
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
7994
8151
  } @else {
7995
- <iss-viewer-slide-toggle [field]="field"/>
8152
+ <iss-field-viewer>
8153
+ @if (!field.config.hideLabel()) {
8154
+ <label>{{ field.label() }}</label>
8155
+ }
8156
+ <iss-viewer-slide-toggle [field]="field"/>
8157
+ </iss-field-viewer>
7996
8158
  }
7997
8159
  }
7998
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: SlideToggleControl, selector: "iss-ctrl-slide-toggle" }, { kind: "component", type: SlideToggleViewer, selector: "iss-viewer-slide-toggle" }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }], viewProviders: [VIEW_PROVIDER] });
8160
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: SlideToggleControl, selector: "iss-ctrl-slide-toggle" }, { kind: "component", type: SlideToggleViewer, selector: "iss-viewer-slide-toggle" }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
7999
8161
  }
8000
8162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SlideToggleField, decorators: [{
8001
8163
  type: Component,
8002
8164
  args: [{
8003
8165
  selector: "iss-field-slide-toggle",
8004
8166
  viewProviders: [VIEW_PROVIDER],
8005
- imports: [ReactiveFormsModule, MatLabel, SlideToggleControl, SlideToggleViewer, ValidationMessageComponent],
8167
+ imports: [ReactiveFormsModule, MatLabel, SlideToggleControl, SlideToggleViewer, ValidationMessage, FieldViewer],
8006
8168
  template: `
8007
8169
  @if (field.visible()) {
8008
- @if (!field.config.hideLabel()) {
8009
- <mat-label>{{ field.label() }}</mat-label>
8010
- }
8011
-
8012
8170
  @if (field.mode() === "edit") {
8171
+ @if (!field.config.hideLabel()) {
8172
+ <mat-label>{{ field.label() }}</mat-label>
8173
+ }
8013
8174
  <iss-ctrl-slide-toggle [formControlName]="field.name" [readonly]="field.config.readonly() ?? false" (onChange)="onChange($event)"/>
8014
8175
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
8015
8176
  } @else {
8016
- <iss-viewer-slide-toggle [field]="field"/>
8177
+ <iss-field-viewer>
8178
+ @if (!field.config.hideLabel()) {
8179
+ <label>{{ field.label() }}</label>
8180
+ }
8181
+ <iss-viewer-slide-toggle [field]="field"/>
8182
+ </iss-field-viewer>
8017
8183
  }
8018
8184
  }
8019
8185
  `
@@ -8232,18 +8398,22 @@ class PlateField extends FieldBase {
8232
8398
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PlateField, deps: null, target: i0.ɵɵFactoryTarget.Component });
8233
8399
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: PlateField, isStandalone: true, selector: "iss-field-plate-number", usesInheritance: true, ngImport: i0, template: `
8234
8400
  @if (field.visible()) {
8235
- @if (!field.config.hideLabel()) {
8236
- <mat-label>{{ field.label() }}</mat-label>
8237
- }
8238
-
8239
8401
  @if (field.mode() === "edit") {
8402
+ @if (!field.config.hideLabel()) {
8403
+ <mat-label>{{ field.label() }}</mat-label>
8404
+ }
8240
8405
  <iss-ctrl-plate-number [formControlName]="field.name" [readonly]="field.config.readonly() ?? false" (onChange)="updateField($event)"/>
8241
8406
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
8242
8407
  } @else {
8243
- <iss-viewer-plate [field]="field"/>
8408
+ <iss-field-viewer>
8409
+ @if (!field.config.hideLabel()) {
8410
+ <label>{{ field.label() }}</label>
8411
+ }
8412
+ <iss-viewer-plate [field]="field"/>
8413
+ </iss-field-viewer>
8244
8414
  }
8245
8415
  }
8246
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: PlateControl, selector: "iss-ctrl-plate-number" }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: PlateViewer, selector: "iss-viewer-plate" }], viewProviders: [VIEW_PROVIDER] });
8416
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: PlateControl, selector: "iss-ctrl-plate-number" }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: PlateViewer, selector: "iss-viewer-plate" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
8247
8417
  }
8248
8418
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PlateField, decorators: [{
8249
8419
  type: Component,
@@ -8253,21 +8423,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8253
8423
  imports: [
8254
8424
  ReactiveFormsModule,
8255
8425
  PlateControl,
8256
- ValidationMessageComponent,
8426
+ ValidationMessage,
8257
8427
  MatLabel,
8258
- PlateViewer
8428
+ PlateViewer,
8429
+ FieldViewer
8259
8430
  ],
8260
8431
  template: `
8261
8432
  @if (field.visible()) {
8262
- @if (!field.config.hideLabel()) {
8263
- <mat-label>{{ field.label() }}</mat-label>
8264
- }
8265
-
8266
8433
  @if (field.mode() === "edit") {
8434
+ @if (!field.config.hideLabel()) {
8435
+ <mat-label>{{ field.label() }}</mat-label>
8436
+ }
8267
8437
  <iss-ctrl-plate-number [formControlName]="field.name" [readonly]="field.config.readonly() ?? false" (onChange)="updateField($event)"/>
8268
8438
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
8269
8439
  } @else {
8270
- <iss-viewer-plate [field]="field"/>
8440
+ <iss-field-viewer>
8441
+ @if (!field.config.hideLabel()) {
8442
+ <label>{{ field.label() }}</label>
8443
+ }
8444
+ <iss-viewer-plate [field]="field"/>
8445
+ </iss-field-viewer>
8271
8446
  }
8272
8447
  }
8273
8448
  `
@@ -8630,8 +8805,8 @@ class FilePickerField extends FieldBase {
8630
8805
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: FilePickerField, deps: null, target: i0.ɵɵFactoryTarget.Component });
8631
8806
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: FilePickerField, isStandalone: true, selector: "iss-field-file-picker", usesInheritance: true, ngImport: i0, template: `
8632
8807
  @if (field.visible()) {
8633
- <mat-label>{{ field.label() }}</mat-label>
8634
8808
  @if (field.mode() === "edit") {
8809
+ <mat-label>{{ field.label() }}</mat-label>
8635
8810
  <input type="hidden" [formControlName]="field.name">
8636
8811
  <!-- [showDeleteButton]="field.config.showDeleteButton" [showDownloadButton]="field.config.showDownloadButton"-->
8637
8812
  <iss-ctrl-file-picker
@@ -8646,10 +8821,13 @@ class FilePickerField extends FieldBase {
8646
8821
  />
8647
8822
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="ctrl.touched"/>
8648
8823
  } @else {
8649
- <iss-viewer-attachment [uploading]="uploading()" [field]="viewField()"/>
8824
+ <iss-field-viewer>
8825
+ <label>{{ field.label() }}</label>
8826
+ <iss-viewer-attachment [uploading]="uploading()" [field]="viewField()"/>
8827
+ </iss-field-viewer>
8650
8828
  }
8651
8829
  }
8652
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FilePickerControl, selector: "iss-ctrl-file-picker", inputs: ["accept", "showDownloadButton", "showDeleteButton", "uploading", "uploadedFiles", "uploadingError"] }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: AttachmentViewer, selector: "iss-viewer-attachment", inputs: ["uploading", "uploadingError"], outputs: ["deleteOut"] }, { kind: "directive", type: MatLabel$1, selector: "mat-label" }], viewProviders: [VIEW_PROVIDER] });
8830
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FilePickerControl, selector: "iss-ctrl-file-picker", inputs: ["accept", "showDownloadButton", "showDeleteButton", "uploading", "uploadedFiles", "uploadingError"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: AttachmentViewer, selector: "iss-viewer-attachment", inputs: ["uploading", "uploadingError"], outputs: ["deleteOut"] }, { kind: "directive", type: MatLabel$1, selector: "mat-label" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
8653
8831
  }
8654
8832
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: FilePickerField, decorators: [{
8655
8833
  type: Component,
@@ -8659,14 +8837,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8659
8837
  imports: [
8660
8838
  ReactiveFormsModule,
8661
8839
  FilePickerControl,
8662
- ValidationMessageComponent,
8840
+ ValidationMessage,
8663
8841
  AttachmentViewer,
8664
- MatLabel$1
8842
+ MatLabel$1,
8843
+ FieldViewer
8665
8844
  ],
8666
8845
  template: `
8667
8846
  @if (field.visible()) {
8668
- <mat-label>{{ field.label() }}</mat-label>
8669
8847
  @if (field.mode() === "edit") {
8848
+ <mat-label>{{ field.label() }}</mat-label>
8670
8849
  <input type="hidden" [formControlName]="field.name">
8671
8850
  <!-- [showDeleteButton]="field.config.showDeleteButton" [showDownloadButton]="field.config.showDownloadButton"-->
8672
8851
  <iss-ctrl-file-picker
@@ -8681,7 +8860,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8681
8860
  />
8682
8861
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="ctrl.touched"/>
8683
8862
  } @else {
8684
- <iss-viewer-attachment [uploading]="uploading()" [field]="viewField()"/>
8863
+ <iss-field-viewer>
8864
+ <label>{{ field.label() }}</label>
8865
+ <iss-viewer-attachment [uploading]="uploading()" [field]="viewField()"/>
8866
+ </iss-field-viewer>
8685
8867
  }
8686
8868
  }
8687
8869
  `
@@ -8745,10 +8927,13 @@ class TimePickerField extends FieldBase {
8745
8927
  <label>{{ field.label() }}</label>
8746
8928
  </iss-ctrl-time-picker>
8747
8929
  } @else {
8748
- <iss-viewer-time-picker [field]="field"/>
8930
+ <iss-field-viewer>
8931
+ <label>{{ field.label() }}</label>
8932
+ <iss-viewer-time-picker [field]="field"/>
8933
+ </iss-field-viewer>
8749
8934
  }
8750
8935
  }
8751
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TimePickerControl, selector: "iss-ctrl-time-picker", inputs: ["interval", "minTime", "maxTime"] }, { kind: "component", type: TimePickerViewer, selector: "iss-viewer-time-picker" }], viewProviders: [VIEW_PROVIDER] });
8936
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TimePickerControl, selector: "iss-ctrl-time-picker", inputs: ["interval", "minTime", "maxTime"] }, { kind: "component", type: TimePickerViewer, selector: "iss-viewer-time-picker" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
8752
8937
  }
8753
8938
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TimePickerField, decorators: [{
8754
8939
  type: Component,
@@ -8758,7 +8943,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8758
8943
  imports: [
8759
8944
  ReactiveFormsModule,
8760
8945
  TimePickerControl,
8761
- TimePickerViewer
8946
+ TimePickerViewer,
8947
+ FieldViewer
8762
8948
  ],
8763
8949
  template: `
8764
8950
  @if (field.visible()) {
@@ -8767,7 +8953,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8767
8953
  <label>{{ field.label() }}</label>
8768
8954
  </iss-ctrl-time-picker>
8769
8955
  } @else {
8770
- <iss-viewer-time-picker [field]="field"/>
8956
+ <iss-field-viewer>
8957
+ <label>{{ field.label() }}</label>
8958
+ <iss-viewer-time-picker [field]="field"/>
8959
+ </iss-field-viewer>
8771
8960
  }
8772
8961
  }
8773
8962
  `
@@ -8845,9 +9034,9 @@ var datePicker_viewer = /*#__PURE__*/Object.freeze({
8845
9034
  */
8846
9035
  class DatePickerField extends FieldBase {
8847
9036
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DatePickerField, deps: null, target: i0.ɵɵFactoryTarget.Component });
8848
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DatePickerField, isStandalone: true, selector: "iss-field-date-picker", usesInheritance: true, ngImport: i0, template: `
8849
- @if (field.visible()) {
8850
- @if (field.mode() === "edit") {
9037
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DatePickerField, isStandalone: true, selector: "iss-field-date-picker", usesInheritance: true, ngImport: i0, template: `
9038
+ @if (field.visible()) {
9039
+ @if (field.mode() === "edit") {
8851
9040
  <iss-ctrl-date-picker
8852
9041
  [formControlName]="field.name"
8853
9042
  [minDate]="field.config.minDate() ?? null"
@@ -8855,15 +9044,18 @@ class DatePickerField extends FieldBase {
8855
9044
  [readonly]="field.config.readonly() ?? false"
8856
9045
  [hijriCalendar]="field.config.hijriCalendar() ?? false"
8857
9046
  [emitHijri]="field.config.emitHijri() ?? false"
8858
- >
8859
- <label>{{ field.label() }}</label>
8860
- </iss-ctrl-date-picker>
8861
- <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
8862
- } @else {
8863
- <iss-viewer-date-picker [field]="field"/>
8864
- }
8865
- }
8866
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DatePickerControl, selector: "iss-ctrl-date-picker", inputs: ["disabledDays", "minDate", "maxDate", "hijriCalendar", "emitHijri"] }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: DatePickerViewer, selector: "iss-viewer-date-picker" }], viewProviders: [VIEW_PROVIDER] });
9047
+ >
9048
+ <label>{{ field.label() }}</label>
9049
+ </iss-ctrl-date-picker>
9050
+ <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
9051
+ } @else {
9052
+ <iss-field-viewer>
9053
+ <label>{{ field.label() }}</label>
9054
+ <iss-viewer-date-picker [field]="field"/>
9055
+ </iss-field-viewer>
9056
+ }
9057
+ }
9058
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DatePickerControl, selector: "iss-ctrl-date-picker", inputs: ["disabledDays", "minDate", "maxDate", "hijriCalendar", "emitHijri"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: DatePickerViewer, selector: "iss-viewer-date-picker" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
8867
9059
  }
8868
9060
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DatePickerField, decorators: [{
8869
9061
  type: Component,
@@ -8873,12 +9065,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8873
9065
  imports: [
8874
9066
  ReactiveFormsModule,
8875
9067
  DatePickerControl,
8876
- ValidationMessageComponent,
8877
- DatePickerViewer
9068
+ ValidationMessage,
9069
+ DatePickerViewer,
9070
+ FieldViewer
8878
9071
  ],
8879
- template: `
8880
- @if (field.visible()) {
8881
- @if (field.mode() === "edit") {
9072
+ template: `
9073
+ @if (field.visible()) {
9074
+ @if (field.mode() === "edit") {
8882
9075
  <iss-ctrl-date-picker
8883
9076
  [formControlName]="field.name"
8884
9077
  [minDate]="field.config.minDate() ?? null"
@@ -8886,14 +9079,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8886
9079
  [readonly]="field.config.readonly() ?? false"
8887
9080
  [hijriCalendar]="field.config.hijriCalendar() ?? false"
8888
9081
  [emitHijri]="field.config.emitHijri() ?? false"
8889
- >
8890
- <label>{{ field.label() }}</label>
8891
- </iss-ctrl-date-picker>
8892
- <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
8893
- } @else {
8894
- <iss-viewer-date-picker [field]="field"/>
8895
- }
8896
- }
9082
+ >
9083
+ <label>{{ field.label() }}</label>
9084
+ </iss-ctrl-date-picker>
9085
+ <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
9086
+ } @else {
9087
+ <iss-field-viewer>
9088
+ <label>{{ field.label() }}</label>
9089
+ <iss-viewer-date-picker [field]="field"/>
9090
+ </iss-field-viewer>
9091
+ }
9092
+ }
8897
9093
  `
8898
9094
  }]
8899
9095
  }] });
@@ -8971,9 +9167,9 @@ var datetimePicker_viewer = /*#__PURE__*/Object.freeze({
8971
9167
  */
8972
9168
  class DatetimePickerField extends FieldBase {
8973
9169
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DatetimePickerField, deps: null, target: i0.ɵɵFactoryTarget.Component });
8974
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DatetimePickerField, isStandalone: true, selector: "iss-field-datetime-picker", usesInheritance: true, ngImport: i0, template: `
8975
- @if (field.visible()) {
8976
- @if (field.mode() === "edit") {
9170
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DatetimePickerField, isStandalone: true, selector: "iss-field-datetime-picker", usesInheritance: true, ngImport: i0, template: `
9171
+ @if (field.visible()) {
9172
+ @if (field.mode() === "edit") {
8977
9173
  <iss-ctrl-datetime-picker
8978
9174
  [formControlName]="field.name"
8979
9175
  [minDate]="field.config.minDate() ?? null"
@@ -8981,15 +9177,18 @@ class DatetimePickerField extends FieldBase {
8981
9177
  [readonly]="field.config.readonly() ?? false"
8982
9178
  [hijriCalendar]="field.config.hijriCalendar() ?? false"
8983
9179
  [emitHijri]="field.config.emitHijri() ?? false"
8984
- >
8985
- <label>{{ field.label() }}</label>
8986
- </iss-ctrl-datetime-picker>
8987
- <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
8988
- } @else {
8989
- <iss-viewer-datetime-picker [field]="field"/>
8990
- }
8991
- }
8992
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DatetimePickerControl, selector: "iss-ctrl-datetime-picker", inputs: ["disabledDays", "minDate", "maxDate", "minTime", "maxTime", "hijriCalendar", "emitHijri"] }, { kind: "component", type: ValidationMessageComponent, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: DatePickerTimeViewer, selector: "iss-viewer-datetime-picker" }], viewProviders: [VIEW_PROVIDER] });
9180
+ >
9181
+ <label>{{ field.label() }}</label>
9182
+ </iss-ctrl-datetime-picker>
9183
+ <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
9184
+ } @else {
9185
+ <iss-field-viewer>
9186
+ <label>{{ field.label() }}</label>
9187
+ <iss-viewer-datetime-picker [field]="field"/>
9188
+ </iss-field-viewer>
9189
+ }
9190
+ }
9191
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DatetimePickerControl, selector: "iss-ctrl-datetime-picker", inputs: ["disabledDays", "minDate", "maxDate", "minTime", "maxTime", "hijriCalendar", "emitHijri"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: DatePickerTimeViewer, selector: "iss-viewer-datetime-picker" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
8993
9192
  }
8994
9193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DatetimePickerField, decorators: [{
8995
9194
  type: Component,
@@ -8999,12 +9198,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8999
9198
  imports: [
9000
9199
  ReactiveFormsModule,
9001
9200
  DatetimePickerControl,
9002
- ValidationMessageComponent,
9201
+ ValidationMessage,
9003
9202
  DatePickerTimeViewer,
9203
+ FieldViewer
9004
9204
  ],
9005
- template: `
9006
- @if (field.visible()) {
9007
- @if (field.mode() === "edit") {
9205
+ template: `
9206
+ @if (field.visible()) {
9207
+ @if (field.mode() === "edit") {
9008
9208
  <iss-ctrl-datetime-picker
9009
9209
  [formControlName]="field.name"
9010
9210
  [minDate]="field.config.minDate() ?? null"
@@ -9012,14 +9212,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
9012
9212
  [readonly]="field.config.readonly() ?? false"
9013
9213
  [hijriCalendar]="field.config.hijriCalendar() ?? false"
9014
9214
  [emitHijri]="field.config.emitHijri() ?? false"
9015
- >
9016
- <label>{{ field.label() }}</label>
9017
- </iss-ctrl-datetime-picker>
9018
- <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
9019
- } @else {
9020
- <iss-viewer-datetime-picker [field]="field"/>
9021
- }
9022
- }
9215
+ >
9216
+ <label>{{ field.label() }}</label>
9217
+ </iss-ctrl-datetime-picker>
9218
+ <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
9219
+ } @else {
9220
+ <iss-field-viewer>
9221
+ <label>{{ field.label() }}</label>
9222
+ <iss-viewer-datetime-picker [field]="field"/>
9223
+ </iss-field-viewer>
9224
+ }
9225
+ }
9023
9226
  `
9024
9227
  }]
9025
9228
  }] });
@@ -9098,9 +9301,9 @@ var dateRangePicker_viewer = /*#__PURE__*/Object.freeze({
9098
9301
  */
9099
9302
  class DateRangePickerField extends FieldBase {
9100
9303
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DateRangePickerField, deps: null, target: i0.ɵɵFactoryTarget.Component });
9101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DateRangePickerField, isStandalone: true, selector: "iss-field-date-range-picker", usesInheritance: true, ngImport: i0, template: `
9102
- @if (field.visible()) {
9103
- @if (field.mode() === "edit") {
9304
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DateRangePickerField, isStandalone: true, selector: "iss-field-date-range-picker", usesInheritance: true, ngImport: i0, template: `
9305
+ @if (field.visible()) {
9306
+ @if (field.mode() === "edit") {
9104
9307
  <iss-ctrl-date-range-picker
9105
9308
  [formControlName]="field.name"
9106
9309
  [minDate]="field.config.minDate() ?? null"
@@ -9108,14 +9311,17 @@ class DateRangePickerField extends FieldBase {
9108
9311
  [readonly]="field.config.readonly() ?? false"
9109
9312
  [hijriCalendar]="field.config.hijriCalendar() ?? false"
9110
9313
  [emitHijri]="field.config.emitHijri() ?? false"
9111
- >
9112
- <label>{{ field.label() }}</label>
9113
- </iss-ctrl-date-range-picker>
9114
- } @else {
9115
- <iss-viewer-date-range-picker [field]="field"/>
9116
- }
9117
- }
9118
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DateRangePickerControl, selector: "iss-ctrl-date-range-picker", inputs: ["disabledDays", "minDate", "maxDate", "hijriCalendar", "emitHijri"], outputs: ["onDateRangeObjectChange"] }, { kind: "component", type: DateRangePickerViewer, selector: "iss-viewer-date-range-picker" }], viewProviders: [VIEW_PROVIDER] });
9314
+ >
9315
+ <label>{{ field.label() }}</label>
9316
+ </iss-ctrl-date-range-picker>
9317
+ } @else {
9318
+ <iss-field-viewer>
9319
+ <label>{{ field.label() }}</label>
9320
+ <iss-viewer-date-range-picker [field]="field"/>
9321
+ </iss-field-viewer>
9322
+ }
9323
+ }
9324
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DateRangePickerControl, selector: "iss-ctrl-date-range-picker", inputs: ["disabledDays", "minDate", "maxDate", "hijriCalendar", "emitHijri"], outputs: ["onDateRangeObjectChange"] }, { kind: "component", type: DateRangePickerViewer, selector: "iss-viewer-date-range-picker" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
9119
9325
  }
9120
9326
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DateRangePickerField, decorators: [{
9121
9327
  type: Component,
@@ -9125,11 +9331,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
9125
9331
  imports: [
9126
9332
  ReactiveFormsModule,
9127
9333
  DateRangePickerControl,
9128
- DateRangePickerViewer
9334
+ DateRangePickerViewer,
9335
+ FieldViewer
9129
9336
  ],
9130
- template: `
9131
- @if (field.visible()) {
9132
- @if (field.mode() === "edit") {
9337
+ template: `
9338
+ @if (field.visible()) {
9339
+ @if (field.mode() === "edit") {
9133
9340
  <iss-ctrl-date-range-picker
9134
9341
  [formControlName]="field.name"
9135
9342
  [minDate]="field.config.minDate() ?? null"
@@ -9137,13 +9344,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
9137
9344
  [readonly]="field.config.readonly() ?? false"
9138
9345
  [hijriCalendar]="field.config.hijriCalendar() ?? false"
9139
9346
  [emitHijri]="field.config.emitHijri() ?? false"
9140
- >
9141
- <label>{{ field.label() }}</label>
9142
- </iss-ctrl-date-range-picker>
9143
- } @else {
9144
- <iss-viewer-date-range-picker [field]="field"/>
9145
- }
9146
- }
9347
+ >
9348
+ <label>{{ field.label() }}</label>
9349
+ </iss-ctrl-date-range-picker>
9350
+ } @else {
9351
+ <iss-field-viewer>
9352
+ <label>{{ field.label() }}</label>
9353
+ <iss-viewer-date-range-picker [field]="field"/>
9354
+ </iss-field-viewer>
9355
+ }
9356
+ }
9147
9357
  `
9148
9358
  }]
9149
9359
  }] });
@@ -9469,5 +9679,5 @@ var time_validator = /*#__PURE__*/Object.freeze({
9469
9679
  * Generated bundle index. Do not edit.
9470
9680
  */
9471
9681
 
9472
- export { PlateViewer as $, TimePickerField as A, DatePickerField as B, ControlBase as C, DatePickerControl as D, Employee as E, FieldBase as F, DatetimePickerField as G, HOST as H, IssField as I, DateRangePickerField as J, InputViewer as K, Loader as L, MobileControl as M, TextareaViewer as N, Outlet as O, PLACEHOLDER_REGEX as P, ChipsViewer as Q, RadioControl as R, SelectControl as S, TextareaControl as T, RadioViewer as U, VIEW_PROVIDER as V, SelectViewer as W, MobileViewer as X, CheckboxViewer as Y, ToggleButtonViewer as Z, SlideToggleViewer as _, ValidationMessageComponent as a, AttachmentViewer as a0, TimePickerViewer as a1, DatePickerViewer as a2, DatePickerTimeViewer as a3, DateRangePickerViewer as a4, DEFAULT_COUNTRY as a5, COUNTRIES as a6, DATE_FORMAT_ADAPTER as a7, DATETIME_FORMAT as a8, PLATE_LETTERS as a9, getHijriParts as aA, startOfHijriMonth as aB, getHijriDaysInMonth as aC, createHijriDate as aD, formatHijriDate as aE, parseHijriDate as aF, toHijriDisplay as aG, IssValidators as aH, FileValidators as aI, TimeValidator as aJ, VALIDATION_MESSAGES as aa, COMPONENTS as ab, SERVICES as ac, VALIDATORS as ad, isActiveValidationRule as ae, FIELD_DATA as af, UI_LANGUAGE as ag, ATTACHMENT_UPLOAD_URL as ah, ATTACHMENT_UPLOAD_RESPONSE_MAPPER as ai, ATTACHMENT_DOWNLOAD_URL as aj, USER_SEARCH_API as ak, HintsComponent as al, Droppable as am, ArabicNumberPipe as an, FieldDataInjector as ao, PlateLetterPipe as ap, SelectStatusPipe as aq, TranslatePipe as ar, FileHandler as as, IssDateAdapter as at, provideIssDateAdapter as au, Phone as av, arrayFrom as aw, formatFileSize as ax, HIJRI_LOCALE as ay, HIJRI_MONTH_NAMES as az, ViewerBase as b, FormEngine as c, CheckboxControl as d, ChipsControl as e, DateRangePickerControl as f, getPropertyByPath as g, DatetimePickerControl as h, FilePickerControl as i, InputControl as j, PlateControl as k, SlideToggleControl as l, TimePickerControl as m, ToggleButtonControl as n, InputField as o, TextareaField as p, ChipsField as q, replacePlaceholders as r, RadioField as s, SelectField as t, MobileField as u, CheckboxField as v, ToggleButtonField as w, SlideToggleField as x, PlateField as y, FilePickerField as z };
9473
- //# sourceMappingURL=iss-ctrl-iss-ctrl-Cy9p_PEj.mjs.map
9682
+ export { SlideToggleViewer as $, FilePickerField as A, TimePickerField as B, ControlBase as C, DatePickerControl as D, Employee as E, FieldBase as F, DatePickerField as G, HOST as H, IssField as I, DatetimePickerField as J, DateRangePickerField as K, Loader as L, MobileControl as M, InputViewer as N, Outlet as O, PLACEHOLDER_REGEX as P, TextareaViewer as Q, RadioControl as R, SelectControl as S, TextareaControl as T, ChipsViewer as U, VIEW_PROVIDER as V, RadioViewer as W, SelectViewer as X, MobileViewer as Y, CheckboxViewer as Z, ToggleButtonViewer as _, ValidationMessage as a, PlateViewer as a0, AttachmentViewer as a1, TimePickerViewer as a2, DatePickerViewer as a3, DatePickerTimeViewer as a4, DateRangePickerViewer as a5, DEFAULT_COUNTRY as a6, COUNTRIES as a7, DATE_FORMAT_ADAPTER as a8, DATETIME_FORMAT as a9, HIJRI_MONTH_NAMES as aA, getHijriParts as aB, startOfHijriMonth as aC, getHijriDaysInMonth as aD, createHijriDate as aE, formatHijriDate as aF, parseHijriDate as aG, toHijriDisplay as aH, IssValidators as aI, FileValidators as aJ, TimeValidator as aK, PLATE_LETTERS as aa, VALIDATION_MESSAGES as ab, COMPONENTS as ac, SERVICES as ad, VALIDATORS as ae, isActiveValidationRule as af, FIELD_DATA as ag, UI_LANGUAGE as ah, ATTACHMENT_UPLOAD_URL as ai, ATTACHMENT_UPLOAD_RESPONSE_MAPPER as aj, ATTACHMENT_DOWNLOAD_URL as ak, USER_SEARCH_API as al, Hints as am, Droppable as an, ArabicNumberPipe as ao, FieldDataInjector as ap, PlateLetterPipe as aq, SelectStatusPipe as ar, TranslatePipe as as, FileHandler as at, IssDateAdapter as au, provideIssDateAdapter as av, Phone as aw, arrayFrom as ax, formatFileSize as ay, HIJRI_LOCALE as az, FieldViewer as b, ViewerBase as c, FormEngine as d, CheckboxControl as e, ChipsControl as f, getPropertyByPath as g, DateRangePickerControl as h, DatetimePickerControl as i, FilePickerControl as j, InputControl as k, PlateControl as l, SlideToggleControl as m, TimePickerControl as n, ToggleButtonControl as o, InputField as p, TextareaField as q, replacePlaceholders as r, ChipsField as s, RadioField as t, SelectField as u, MobileField as v, CheckboxField as w, ToggleButtonField as x, SlideToggleField as y, PlateField as z };
9683
+ //# sourceMappingURL=iss-ctrl-iss-ctrl-BKu6a5HF.mjs.map