iss-ctrl 0.0.2-beta → 0.0.2-beta-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +17 -15
  2. package/components/autocomplete/autocomplete.component.d.ts +3 -3
  3. package/components/base-ctrl.d.ts +1 -3
  4. package/components/checkbox/checkbox.component.d.ts +3 -3
  5. package/components/chips/chips.component.d.ts +11 -3
  6. package/components/ctrl-array/ctrl-array.component.d.ts +3 -3
  7. package/components/date-picker/date-picker.component.d.ts +3 -3
  8. package/components/date-range-picker/date-range-picker.component.d.ts +3 -3
  9. package/components/datetime-picker/datetime-picker.component.d.ts +3 -3
  10. package/components/datetime-range-picker/datetime-range-picker.component.d.ts +3 -3
  11. package/components/file-picker/file-picker.component.d.ts +3 -3
  12. package/components/input/input.component.d.ts +15 -4
  13. package/components/mobile/mobile.component.d.ts +3 -3
  14. package/components/note/note.component.d.ts +3 -3
  15. package/components/plate/PLATE_LETTERS.d.ts +8 -0
  16. package/components/{plate-number/plate-number.component.d.ts → plate/plate.component.d.ts} +4 -5
  17. package/components/radio/radio.component.d.ts +3 -3
  18. package/components/select/select.component.d.ts +8 -6
  19. package/components/slide-toggle/slide-toggle.component.d.ts +3 -3
  20. package/components/textarea/textarea.component.d.ts +3 -3
  21. package/components/time-picker/time-picker.component.d.ts +3 -3
  22. package/components/toggle-button/toggle-button.component.d.ts +3 -3
  23. package/esm2022/components/autocomplete/autocomplete.component.mjs +7 -7
  24. package/esm2022/components/base-ctrl.mjs +7 -7
  25. package/esm2022/components/checkbox/checkbox.component.mjs +7 -7
  26. package/esm2022/components/chips/chips.component.mjs +72 -12
  27. package/esm2022/components/ctrl-array/ctrl-array.component.mjs +7 -7
  28. package/esm2022/components/date-picker/date-picker.component.mjs +9 -9
  29. package/esm2022/components/date-range-picker/date-range-picker.component.mjs +7 -7
  30. package/esm2022/components/datetime-picker/datetime-picker.component.mjs +12 -12
  31. package/esm2022/components/datetime-range-picker/datetime-range-picker.component.mjs +7 -7
  32. package/esm2022/components/file-picker/file-picker.component.mjs +7 -7
  33. package/esm2022/components/hints/hints.component.mjs +3 -3
  34. package/esm2022/components/input/input.component.mjs +43 -18
  35. package/esm2022/components/mobile/mobile.component.mjs +9 -9
  36. package/esm2022/components/note/note.component.mjs +7 -7
  37. package/esm2022/components/plate/PLATE_LETTERS.mjs +20 -0
  38. package/esm2022/components/plate/plate.component.mjs +101 -0
  39. package/esm2022/components/radio/radio.component.mjs +7 -7
  40. package/esm2022/components/select/select.component.mjs +63 -32
  41. package/esm2022/components/slide-toggle/slide-toggle.component.mjs +7 -7
  42. package/esm2022/components/textarea/textarea.component.mjs +23 -11
  43. package/esm2022/components/time-picker/time-picker.component.mjs +9 -9
  44. package/esm2022/components/toggle-button/toggle-button.component.mjs +7 -7
  45. package/esm2022/interfaces/hint-alignment.type.mjs +2 -0
  46. package/esm2022/interfaces/hint.interface.mjs +1 -1
  47. package/esm2022/interfaces/option.interface.mjs +1 -1
  48. package/esm2022/pipes/arabic-number.pipe.mjs +23 -0
  49. package/esm2022/pipes/plate-letter.pipe.mjs +22 -0
  50. package/esm2022/public-api.mjs +2 -2
  51. package/fesm2022/iss-ctrl.mjs +359 -195
  52. package/fesm2022/iss-ctrl.mjs.map +1 -1
  53. package/interfaces/hint-alignment.type.d.ts +1 -0
  54. package/interfaces/hint.interface.d.ts +2 -0
  55. package/interfaces/option.interface.d.ts +1 -0
  56. package/package.json +1 -1
  57. package/pipes/arabic-number.pipe.d.ts +7 -0
  58. package/pipes/plate-letter.pipe.d.ts +7 -0
  59. package/public-api.d.ts +1 -1
  60. package/esm2022/components/plate-number/plate-number.component.mjs +0 -114
@@ -1,23 +1,25 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, input, signal, output, Component, CUSTOM_ELEMENTS_SCHEMA, Pipe, Injectable, Optional, Inject, effect, Directive, HostListener, ChangeDetectionStrategy, computed } from '@angular/core';
2
+ import { input, signal, output, Component, CUSTOM_ELEMENTS_SCHEMA, Pipe, effect, Injectable, Optional, Inject, inject, Directive, HostListener, ChangeDetectionStrategy, computed } from '@angular/core';
3
3
  import * as i1$2 from '@angular/forms';
4
- import { ControlContainer, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, NG_VALIDATORS, FormGroup, FormsModule, FormArray } from '@angular/forms';
4
+ import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, NG_VALIDATORS, FormGroup, FormsModule, FormArray } from '@angular/forms';
5
5
  import * as i1 from '@angular/material/checkbox';
6
6
  import { MatCheckboxModule } from '@angular/material/checkbox';
7
+ import * as i1$1 from '@angular/material/form-field';
8
+ import { MatFormField, MatFormFieldModule, MatSuffix, MatHint, MatPrefix } from '@angular/material/form-field';
9
+ import * as i6 from '@angular/material/chips';
10
+ import { MatChipGrid, MatChipRow, MatChipInput, MatChipRemove, MatChipsModule } from '@angular/material/chips';
11
+ import * as i2 from '@angular/material/input';
12
+ import { MatInput, MatInputModule } from '@angular/material/input';
13
+ import { toSignal } from '@angular/core/rxjs-interop';
7
14
  import * as i3 from '@angular/material/core';
8
15
  import { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';
9
- import * as i1$1 from '@angular/material/form-field';
10
- import { MatFormFieldModule, MatFormField, MatSuffix, MatHint, MatPrefix } from '@angular/material/form-field';
11
16
  import * as i2$1 from '@angular/material/datepicker';
12
17
  import { MatDatepickerModule, MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker';
13
- import * as i2 from '@angular/material/input';
14
- import { MatInputModule, MatInput } from '@angular/material/input';
15
18
  import { MatIconModule } from '@angular/material/icon';
16
19
  import { getYear, getMonth, getDate, getDay, getDaysInMonth, parseISO, parse, format, addYears, addMonths, addDays, formatISO, isDate, isValid, isAfter, isBefore } from 'date-fns';
17
- import { DatePipe, NgClass, NgOptimizedImage, NgTemplateOutlet } from '@angular/common';
20
+ import { DatePipe, NgClass, NgOptimizedImage, NgTemplateOutlet, NgStyle } from '@angular/common';
18
21
  import { enGB } from 'date-fns/locale';
19
22
  import { Subscription } from 'rxjs';
20
- import { toSignal } from '@angular/core/rxjs-interop';
21
23
  import * as i1$5 from '@angular/material/button-toggle';
22
24
  import { MatButtonToggleGroup, MatButtonToggle, MatButtonToggleModule } from '@angular/material/button-toggle';
23
25
  import { CdkOverlayOrigin, CdkConnectedOverlay } from '@angular/cdk/overlay';
@@ -26,16 +28,15 @@ import { PhoneNumberUtil, PhoneNumberFormat } from 'google-libphonenumber';
26
28
  import { MatSelect, MatOption } from '@angular/material/select';
27
29
  import * as i1$3 from '@angular/material/radio';
28
30
  import { MatRadioModule } from '@angular/material/radio';
31
+ import { CdkVirtualForOf, CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll } from '@angular/cdk/scrolling';
29
32
  import * as i2$2 from '@angular/material/autocomplete';
30
33
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
31
- import * as i6 from '@angular/material/chips';
32
- import { MatChipsModule } from '@angular/material/chips';
33
34
  import * as i1$4 from '@angular/material/slide-toggle';
34
35
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
35
36
 
36
37
  class BaseCtrl {
37
38
  constructor() {
38
- this.ctrlContainer = inject(ControlContainer);
39
+ /*ctrlContainer: ControlContainer = inject(ControlContainer);*/
39
40
  this.formControlName = input("");
40
41
  this.min = input(null);
41
42
  this.max = input(null);
@@ -52,9 +53,9 @@ class BaseCtrl {
52
53
  this.onTouch = () => { };
53
54
  this.onPropagateValue = (_) => { };
54
55
  }
55
- get hostCtrl() {
56
- return this.ctrlContainer.control?.get(this.formControlName());
57
- }
56
+ /*get hostCtrl(): AbstractControl | null | undefined {
57
+ return this.ctrlContainer.control?.get(this.formControlName());
58
+ }*/
58
59
  registerOnChange(fn) {
59
60
  this.onPropagateValue = fn;
60
61
  }
@@ -123,16 +124,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
123
124
  }]
124
125
  }] });
125
126
 
126
- class AutocompleteComponent extends BaseCtrl {
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
128
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: AutocompleteComponent, isStandalone: true, selector: "iss-ctrl-autocomplete", providers: [
129
- { provide: NG_VALUE_ACCESSOR, useExisting: AutocompleteComponent, multi: true }
127
+ class AutocompleteControl extends BaseCtrl {
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AutocompleteControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: AutocompleteControl, isStandalone: true, selector: "iss-ctrl-autocomplete", providers: [
130
+ { provide: NG_VALUE_ACCESSOR, useExisting: AutocompleteControl, multi: true }
130
131
  ], usesInheritance: true, ngImport: i0, template: "<p>autocomplete works!</p>\r\n", styles: [""] }); }
131
132
  }
132
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AutocompleteComponent, decorators: [{
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AutocompleteControl, decorators: [{
133
134
  type: Component,
134
135
  args: [{ selector: "iss-ctrl-autocomplete", standalone: true, imports: [], providers: [
135
- { provide: NG_VALUE_ACCESSOR, useExisting: AutocompleteComponent, multi: true }
136
+ { provide: NG_VALUE_ACCESSOR, useExisting: AutocompleteControl, multi: true }
136
137
  ], template: "<p>autocomplete works!</p>\r\n" }]
137
138
  }] });
138
139
 
@@ -152,7 +153,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
152
153
  }]
153
154
  }] });
154
155
 
155
- class CheckboxComponent extends BaseCtrl {
156
+ class CheckboxControl extends BaseCtrl {
156
157
  constructor() {
157
158
  super(...arguments);
158
159
  this.options = input.required();
@@ -206,29 +207,85 @@ class CheckboxComponent extends BaseCtrl {
206
207
  this.selectedOptions().clear();
207
208
  this.ctrl.setValue(null);
208
209
  }
209
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
210
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: CheckboxComponent, isStandalone: true, selector: "iss-ctrl-checkbox", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
211
- { provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true },
210
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CheckboxControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
211
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: CheckboxControl, isStandalone: true, selector: "iss-ctrl-checkbox", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
212
+ { provide: NG_VALUE_ACCESSOR, useExisting: CheckboxControl, multi: true },
212
213
  ], usesInheritance: true, ngImport: i0, template: "<ul class=\"list-unstyled\">\r\n @for (option of options(); track option.value; ) {\r\n <li class=\"mb-2\">\r\n <mat-checkbox\r\n [checked]=\"option | selectStatus: selectedOptions()\"\r\n (change)=\"onCheckboxChange($event.checked, option.value)\"\r\n >\r\n {{ option.label }}\r\n </mat-checkbox>\r\n </li>\r\n }\r\n</ul>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "pipe", type: SelectStatusPipe, name: "selectStatus" }] }); }
213
214
  }
214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CheckboxComponent, decorators: [{
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CheckboxControl, decorators: [{
215
216
  type: Component,
216
217
  args: [{ selector: "iss-ctrl-checkbox", standalone: true, imports: [ReactiveFormsModule, MatCheckboxModule, SelectStatusPipe], providers: [
217
- { provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true },
218
+ { provide: NG_VALUE_ACCESSOR, useExisting: CheckboxControl, multi: true },
218
219
  ], template: "<ul class=\"list-unstyled\">\r\n @for (option of options(); track option.value; ) {\r\n <li class=\"mb-2\">\r\n <mat-checkbox\r\n [checked]=\"option | selectStatus: selectedOptions()\"\r\n (change)=\"onCheckboxChange($event.checked, option.value)\"\r\n >\r\n {{ option.label }}\r\n </mat-checkbox>\r\n </li>\r\n }\r\n</ul>\r\n" }]
219
220
  }] });
220
221
 
221
- class ChipsComponent extends BaseCtrl {
222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ChipsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
223
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ChipsComponent, isStandalone: true, selector: "iss-ctrl-chips", providers: [
224
- { provide: NG_VALUE_ACCESSOR, useExisting: ChipsComponent, multi: true }
225
- ], usesInheritance: true, ngImport: i0, template: "<p>chips works!</p>\r\n", styles: [""] }); }
222
+ class ChipsControl extends BaseCtrl {
223
+ constructor() {
224
+ super(...arguments);
225
+ this.keywords = signal([]);
226
+ this.#ctrlChanges = toSignal(this.ctrl.valueChanges);
227
+ this.#effect = effect(() => {
228
+ if (this.#ctrlChanges()) {
229
+ this.emitValue(this.#stringifyValues());
230
+ }
231
+ });
232
+ }
233
+ #ctrlChanges;
234
+ #effect;
235
+ writeValue(value) {
236
+ if (typeof value === "string") {
237
+ this.keywords.set(this.#parseValues(value));
238
+ }
239
+ if (value === undefined || value === null) {
240
+ this.keywords.set([]);
241
+ }
242
+ }
243
+ remove(keyword) {
244
+ this.keywords.update((keywords) => {
245
+ const index = keywords.indexOf(keyword);
246
+ if (index < 0) {
247
+ return keywords;
248
+ }
249
+ keywords.splice(index, 1);
250
+ return [...keywords];
251
+ });
252
+ this.emitValue(this.#stringifyValues());
253
+ }
254
+ add(event) {
255
+ const value = (event.value || "").trim();
256
+ if (value) {
257
+ this.keywords.update((keywords) => [...keywords, value]);
258
+ }
259
+ event.chipInput.clear();
260
+ this.emitValue(this.#stringifyValues());
261
+ }
262
+ ngOnDestroy() {
263
+ this.#effect.destroy();
264
+ }
265
+ #stringifyValues() {
266
+ return this.keywords().map((s) => s.trim()).join();
267
+ }
268
+ #parseValues(values) {
269
+ return values.split(",").map((c) => c.trim());
270
+ }
271
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ChipsControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
272
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ChipsControl, isStandalone: true, selector: "iss-ctrl-chips", providers: [
273
+ { provide: NG_VALUE_ACCESSOR, useExisting: ChipsControl, multi: true }
274
+ ], usesInheritance: true, ngImport: i0, template: "<mat-form-field>\r\n <input\r\n matInput\r\n [placeholder]=\"placeholder()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n />\r\n</mat-form-field>\r\n<mat-chip-grid #chipGrid>\r\n @for (keyword of keywords(); track keyword) {\r\n <mat-chip-row (removed)=\"remove(keyword)\">\r\n {{ keyword }}\r\n <button matChipRemove>\r\n <ds-icon icon=\"trash\" class=\"fc-red\"></ds-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n</mat-chip-grid>\r\n", styles: [""], 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"], 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"], exportAs: ["matInput"] }, { kind: "directive", type: MatChipRemove, selector: "[matChipRemove]" }] }); }
226
275
  }
227
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ChipsComponent, decorators: [{
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ChipsControl, decorators: [{
228
277
  type: Component,
229
- args: [{ selector: "iss-ctrl-chips", standalone: true, imports: [], providers: [
230
- { provide: NG_VALUE_ACCESSOR, useExisting: ChipsComponent, multi: true }
231
- ], template: "<p>chips works!</p>\r\n" }]
278
+ args: [{ selector: "iss-ctrl-chips", standalone: true, imports: [
279
+ MatFormField,
280
+ MatChipGrid,
281
+ MatChipRow,
282
+ ReactiveFormsModule,
283
+ MatChipInput,
284
+ MatInput,
285
+ MatChipRemove
286
+ ], providers: [
287
+ { provide: NG_VALUE_ACCESSOR, useExisting: ChipsControl, multi: true }
288
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<mat-form-field>\r\n <input\r\n matInput\r\n [placeholder]=\"placeholder()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n />\r\n</mat-form-field>\r\n<mat-chip-grid #chipGrid>\r\n @for (keyword of keywords(); track keyword) {\r\n <mat-chip-row (removed)=\"remove(keyword)\">\r\n {{ keyword }}\r\n <button matChipRemove>\r\n <ds-icon icon=\"trash\" class=\"fc-red\"></ds-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n</mat-chip-grid>\r\n" }]
232
289
  }] });
233
290
 
234
291
  const WEEK_STARTS_ON = 0;
@@ -410,7 +467,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
410
467
  args: [MAT_DATE_LOCALE]
411
468
  }] }] });
412
469
 
413
- class DatePickerComponent extends BaseCtrl {
470
+ class DatePickerControl extends BaseCtrl {
414
471
  constructor() {
415
472
  super(...arguments);
416
473
  this.disabledDays = input([]);
@@ -427,29 +484,29 @@ class DatePickerComponent extends BaseCtrl {
427
484
  const selectedDateString = this.#datePipe.transform($event.value, "yyyy-MM-ddTHH:mm:ss") + "Z";
428
485
  this.emitValue(selectedDateString);
429
486
  }
430
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
431
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: DatePickerComponent, isStandalone: true, selector: "iss-ctrl-date-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 } }, providers: [
487
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatePickerControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
488
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: DatePickerControl, isStandalone: true, selector: "iss-ctrl-date-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 } }, providers: [
432
489
  DatePipe,
433
490
  { provide: DateAdapter, useClass: ISSDateAdapter },
434
491
  { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT_ADAPTER },
435
492
  { provide: MAT_DATE_LOCALE, useValue: enGB },
436
- { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerComponent, multi: true },
437
- { provide: NG_VALIDATORS, useExisting: DatePickerComponent, multi: true },
493
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerControl, multi: true },
494
+ { provide: NG_VALIDATORS, useExisting: DatePickerControl, multi: true },
438
495
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field>\r\n <input\r\n class=\"cursor-pointer\"\r\n matInput\r\n readonly\r\n [matDatepicker]=\"picker\"\r\n (click)=\"picker.open(); markAsTouched()\"\r\n [formControl]=\"ctrl\"\r\n [min]=\"minDate()\"\r\n [max]=\"maxDate()\"\r\n [placeholder]=\"'dd/mm/yyyy'\"\r\n [matDatepickerFilter]=\"calendarDaysFilter\"\r\n (dateChange)=\"emit($event)\"\r\n />\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n</mat-form-field>\r\n", styles: ["::ng-deep tr:has(>.mat-calendar-body-label[colspan=\"7\"]){opacity:0!important;display:none}::ng-deep .mat-datepicker-content .mat-calendar{height:unset!important}\n"], 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.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i2$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatIconModule }, { 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"] }] }); }
439
496
  }
440
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatePickerComponent, decorators: [{
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatePickerControl, decorators: [{
441
498
  type: Component,
442
499
  args: [{ selector: "iss-ctrl-date-picker", standalone: true, imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, MatIconModule, ReactiveFormsModule], providers: [
443
500
  DatePipe,
444
501
  { provide: DateAdapter, useClass: ISSDateAdapter },
445
502
  { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT_ADAPTER },
446
503
  { provide: MAT_DATE_LOCALE, useValue: enGB },
447
- { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerComponent, multi: true },
448
- { provide: NG_VALIDATORS, useExisting: DatePickerComponent, multi: true },
504
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerControl, multi: true },
505
+ { provide: NG_VALIDATORS, useExisting: DatePickerControl, multi: true },
449
506
  ], template: "<mat-form-field>\r\n <input\r\n class=\"cursor-pointer\"\r\n matInput\r\n readonly\r\n [matDatepicker]=\"picker\"\r\n (click)=\"picker.open(); markAsTouched()\"\r\n [formControl]=\"ctrl\"\r\n [min]=\"minDate()\"\r\n [max]=\"maxDate()\"\r\n [placeholder]=\"'dd/mm/yyyy'\"\r\n [matDatepickerFilter]=\"calendarDaysFilter\"\r\n (dateChange)=\"emit($event)\"\r\n />\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n</mat-form-field>\r\n", styles: ["::ng-deep tr:has(>.mat-calendar-body-label[colspan=\"7\"]){opacity:0!important;display:none}::ng-deep .mat-datepicker-content .mat-calendar{height:unset!important}\n"] }]
450
507
  }] });
451
508
 
452
- class DateRangePickerComponent extends BaseCtrl {
509
+ class DateRangePickerControl extends BaseCtrl {
453
510
  constructor() {
454
511
  super(...arguments);
455
512
  this.disabledDays = input([]);
@@ -514,16 +571,16 @@ class DateRangePickerComponent extends BaseCtrl {
514
571
  end: this.#getFormatedEndDate(end)
515
572
  };
516
573
  }
517
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DateRangePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
518
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: DateRangePickerComponent, 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 } }, outputs: { onDateRangeObjectChange: "onDateRangeObjectChange" }, providers: [
574
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DateRangePickerControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
575
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", 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 } }, outputs: { onDateRangeObjectChange: "onDateRangeObjectChange" }, providers: [
519
576
  DatePipe,
520
577
  { provide: DateAdapter, useClass: ISSDateAdapter },
521
578
  { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT_ADAPTER },
522
579
  { provide: MAT_DATE_LOCALE, useValue: enGB },
523
- { provide: NG_VALUE_ACCESSOR, useExisting: DateRangePickerComponent, multi: true },
580
+ { provide: NG_VALUE_ACCESSOR, useExisting: DateRangePickerControl, multi: true },
524
581
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field>\r\n <mat-date-range-input\r\n [formGroup]=\"range\"\r\n [rangePicker]=\"picker\"\r\n [min]=\"minDate()\"\r\n [max]=\"maxDate()\"\r\n [dateFilter]=\"calendarDaysFilter\"\r\n >\r\n <input\r\n matStartDate\r\n formControlName=\"start\"\r\n placeholder=\"dd/mm/yyyy\"\r\n (click)=\"picker.open(); markAsTouched()\"\r\n />\r\n <input\r\n matEndDate\r\n formControlName=\"end\"\r\n placeholder=\"dd/mm/yyyy\"\r\n (click)=\"picker.open(); markAsTouched()\"\r\n />\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n</mat-form-field>\r\n", 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.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i2$1.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2$1.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2$1.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2$1.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { 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: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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"] }] }); }
525
582
  }
526
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DateRangePickerComponent, decorators: [{
583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DateRangePickerControl, decorators: [{
527
584
  type: Component,
528
585
  args: [{ selector: "iss-ctrl-date-range-picker", standalone: true, imports: [
529
586
  MatFormFieldModule, MatDatepickerModule, FormsModule, ReactiveFormsModule,
@@ -532,11 +589,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
532
589
  { provide: DateAdapter, useClass: ISSDateAdapter },
533
590
  { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT_ADAPTER },
534
591
  { provide: MAT_DATE_LOCALE, useValue: enGB },
535
- { provide: NG_VALUE_ACCESSOR, useExisting: DateRangePickerComponent, multi: true },
592
+ { provide: NG_VALUE_ACCESSOR, useExisting: DateRangePickerControl, multi: true },
536
593
  ], template: "<mat-form-field>\r\n <mat-date-range-input\r\n [formGroup]=\"range\"\r\n [rangePicker]=\"picker\"\r\n [min]=\"minDate()\"\r\n [max]=\"maxDate()\"\r\n [dateFilter]=\"calendarDaysFilter\"\r\n >\r\n <input\r\n matStartDate\r\n formControlName=\"start\"\r\n placeholder=\"dd/mm/yyyy\"\r\n (click)=\"picker.open(); markAsTouched()\"\r\n />\r\n <input\r\n matEndDate\r\n formControlName=\"end\"\r\n placeholder=\"dd/mm/yyyy\"\r\n (click)=\"picker.open(); markAsTouched()\"\r\n />\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n</mat-form-field>\r\n" }]
537
594
  }] });
538
595
 
539
- class TimePickerComponent extends BaseCtrl {
596
+ class TimePickerControl extends BaseCtrl {
540
597
  constructor() {
541
598
  super(...arguments);
542
599
  this.isOpen = signal(false);
@@ -671,13 +728,13 @@ class TimePickerComponent extends BaseCtrl {
671
728
  timeArr.pop();
672
729
  return timeArr.join(":");
673
730
  }
674
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TimePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
675
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: TimePickerComponent, isStandalone: true, selector: "iss-ctrl-time-picker", providers: [
676
- { provide: NG_VALUE_ACCESSOR, useExisting: TimePickerComponent, multi: true },
677
- { provide: NG_VALIDATORS, useExisting: TimePickerComponent, multi: true }
731
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TimePickerControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
732
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: TimePickerControl, isStandalone: true, selector: "iss-ctrl-time-picker", providers: [
733
+ { provide: NG_VALUE_ACCESSOR, useExisting: TimePickerControl, multi: true },
734
+ { provide: NG_VALIDATORS, useExisting: TimePickerControl, multi: true }
678
735
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field class=\"cursor-pointer\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" (click)=\"togglePickerMenu()\">\r\n <!--<span *ngIf=\"matPrefix\" matPrefix class=\"sfi {{ iconPrefixName }} font-18\"></span>-->\r\n <input\r\n class=\"cursor-pointer\"\r\n matInput\r\n placeholder=\"--:-- --\"\r\n [value]=\"displayValue()\"\r\n readonly=\"readonly\"\r\n />\r\n <ds-icon icon=\"clock\" class=\"fs-24 fc-black\" matSuffix></ds-icon>\r\n</mat-form-field>\r\n<ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n (backdropClick)=\"close()\"\r\n [cdkConnectedOverlayGrowAfterOpen]=\"true\"\r\n [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"isOpen()\"\r\n>\r\n <div class=\"time-picker-wrapper\" [formGroup]=\"timePicker\">\r\n <div class=\"time-picker-title\">\r\n <span class=\"time-label\">HH</span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"time-label\">MM</span>\r\n <span class=\"mx-1\"></span>\r\n </div>\r\n <div class=\"time-picker-body\">\r\n <mat-button-toggle-group formControlName=\"hour\" hideSingleSelectionIndicator class=\"flex-nowrap\">\r\n @for (hour of hours; track hour) {\r\n <mat-button-toggle [value]=\"hour\">\r\n <span class=\"font-14 font-weight-normal\">{{ hour >= 10 ? hour : '0' + hour }}</span>\r\n </mat-button-toggle>\r\n }\r\n </mat-button-toggle-group>\r\n <span class=\"mx-1\"></span>\r\n <mat-button-toggle-group formControlName=\"minute\" hideSingleSelectionIndicator class=\"flex-nowrap\">\r\n @for (minute of minutes; track minute) {\r\n <mat-button-toggle [value]=\"minute\">\r\n <span class=\"font-14 font-weight-normal\">{{ minute >= 10 ? minute : '0' + minute }}</span>\r\n </mat-button-toggle>\r\n }\r\n </mat-button-toggle-group>\r\n <span class=\"mx-1\"></span>\r\n\r\n <mat-button-toggle-group formControlName=\"meridiem\" hideSingleSelectionIndicator>\r\n <mat-button-toggle value=\"AM\">AM</mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">PM</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["input[readonly=true]{color:var(--black)!important}.time-picker-wrapper{background-color:var(--white);border:4px solid var(--light-gray);padding:10px;margin-top:-20px}.time-picker-wrapper .time-picker-title{display:flex}.time-picker-wrapper .time-picker-title .time-label{display:flex;align-items:center;justify-content:center;width:50px;min-width:50px;padding:0;font-size:.95rem;color:var(--dark-gray)}[dir=ltr] .time-picker-wrapper .time-picker-title .time-label{margin-right:4px}[dir=rtl] .time-picker-wrapper .time-picker-title .time-label{margin-left:4px}.time-picker-wrapper .time-picker-body{display:flex}.time-picker-wrapper .time-picker-body .mat-button-toggle-group{display:flex;flex-direction:column;max-height:200px;overflow-y:auto;border:none}.time-picker-wrapper .time-picker-body .mat-button-toggle-group .mat-button-toggle{border:0;width:50px;min-width:50px}.time-picker-wrapper .time-picker-body .mat-button-toggle-group .mat-button-toggle.mat-button-toggle-checked{color:var(--white)!important}\n"], 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"], exportAs: ["matInput"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { 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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],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"] }] }); }
679
736
  }
680
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TimePickerComponent, decorators: [{
737
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TimePickerControl, decorators: [{
681
738
  type: Component,
682
739
  args: [{ selector: "iss-ctrl-time-picker", standalone: true, imports: [
683
740
  MatFormField,
@@ -689,12 +746,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
689
746
  CdkConnectedOverlay,
690
747
  ReactiveFormsModule
691
748
  ], providers: [
692
- { provide: NG_VALUE_ACCESSOR, useExisting: TimePickerComponent, multi: true },
693
- { provide: NG_VALIDATORS, useExisting: TimePickerComponent, multi: true }
749
+ { provide: NG_VALUE_ACCESSOR, useExisting: TimePickerControl, multi: true },
750
+ { provide: NG_VALIDATORS, useExisting: TimePickerControl, multi: true }
694
751
  ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<mat-form-field class=\"cursor-pointer\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" (click)=\"togglePickerMenu()\">\r\n <!--<span *ngIf=\"matPrefix\" matPrefix class=\"sfi {{ iconPrefixName }} font-18\"></span>-->\r\n <input\r\n class=\"cursor-pointer\"\r\n matInput\r\n placeholder=\"--:-- --\"\r\n [value]=\"displayValue()\"\r\n readonly=\"readonly\"\r\n />\r\n <ds-icon icon=\"clock\" class=\"fs-24 fc-black\" matSuffix></ds-icon>\r\n</mat-form-field>\r\n<ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n (backdropClick)=\"close()\"\r\n [cdkConnectedOverlayGrowAfterOpen]=\"true\"\r\n [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"isOpen()\"\r\n>\r\n <div class=\"time-picker-wrapper\" [formGroup]=\"timePicker\">\r\n <div class=\"time-picker-title\">\r\n <span class=\"time-label\">HH</span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"time-label\">MM</span>\r\n <span class=\"mx-1\"></span>\r\n </div>\r\n <div class=\"time-picker-body\">\r\n <mat-button-toggle-group formControlName=\"hour\" hideSingleSelectionIndicator class=\"flex-nowrap\">\r\n @for (hour of hours; track hour) {\r\n <mat-button-toggle [value]=\"hour\">\r\n <span class=\"font-14 font-weight-normal\">{{ hour >= 10 ? hour : '0' + hour }}</span>\r\n </mat-button-toggle>\r\n }\r\n </mat-button-toggle-group>\r\n <span class=\"mx-1\"></span>\r\n <mat-button-toggle-group formControlName=\"minute\" hideSingleSelectionIndicator class=\"flex-nowrap\">\r\n @for (minute of minutes; track minute) {\r\n <mat-button-toggle [value]=\"minute\">\r\n <span class=\"font-14 font-weight-normal\">{{ minute >= 10 ? minute : '0' + minute }}</span>\r\n </mat-button-toggle>\r\n }\r\n </mat-button-toggle-group>\r\n <span class=\"mx-1\"></span>\r\n\r\n <mat-button-toggle-group formControlName=\"meridiem\" hideSingleSelectionIndicator>\r\n <mat-button-toggle value=\"AM\">AM</mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">PM</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["input[readonly=true]{color:var(--black)!important}.time-picker-wrapper{background-color:var(--white);border:4px solid var(--light-gray);padding:10px;margin-top:-20px}.time-picker-wrapper .time-picker-title{display:flex}.time-picker-wrapper .time-picker-title .time-label{display:flex;align-items:center;justify-content:center;width:50px;min-width:50px;padding:0;font-size:.95rem;color:var(--dark-gray)}[dir=ltr] .time-picker-wrapper .time-picker-title .time-label{margin-right:4px}[dir=rtl] .time-picker-wrapper .time-picker-title .time-label{margin-left:4px}.time-picker-wrapper .time-picker-body{display:flex}.time-picker-wrapper .time-picker-body .mat-button-toggle-group{display:flex;flex-direction:column;max-height:200px;overflow-y:auto;border:none}.time-picker-wrapper .time-picker-body .mat-button-toggle-group .mat-button-toggle{border:0;width:50px;min-width:50px}.time-picker-wrapper .time-picker-body .mat-button-toggle-group .mat-button-toggle.mat-button-toggle-checked{color:var(--white)!important}\n"] }]
695
752
  }] });
696
753
 
697
- class DatetimePickerComponent extends BaseCtrl {
754
+ class DatetimePickerControl extends BaseCtrl {
698
755
  constructor() {
699
756
  super(...arguments);
700
757
  this.disabledDays = input([]);
@@ -727,16 +784,16 @@ class DatetimePickerComponent extends BaseCtrl {
727
784
  #formatDate(date) {
728
785
  return this.#datePipe.transform(date, "yyyy-MM-ddTHH:mm:ss") + "Z";
729
786
  }
730
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatetimePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
731
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: DatetimePickerComponent, isStandalone: true, selector: "iss-ctrl-datetime-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 } }, providers: [
787
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatetimePickerControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
788
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: DatetimePickerControl, isStandalone: true, selector: "iss-ctrl-datetime-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 } }, providers: [
732
789
  DatePipe,
733
790
  { provide: DateAdapter, useClass: ISSDateAdapter },
734
791
  { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT_ADAPTER },
735
792
  { provide: MAT_DATE_LOCALE, useValue: enGB },
736
- { provide: NG_VALUE_ACCESSOR, useExisting: DatetimePickerComponent, multi: true }
737
- ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"datetimePicker\" class=\"d-flex gap-3\">\r\n <iss-ctrl-date-picker class=\"flex-grow-1\" formControlName=\"date\" [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" [disabledDays]=\"disabledDays()\"/>\r\n <iss-ctrl-time-picker class=\"flex-grow-1\" formControlName=\"time\" [min]=\"min()\" [max]=\"max()\"/>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: TimePickerComponent, selector: "iss-ctrl-time-picker" }, { kind: "component", type: DatePickerComponent, selector: "iss-ctrl-date-picker", inputs: ["disabledDays", "minDate", "maxDate"] }] }); }
793
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatetimePickerControl, multi: true }
794
+ ], usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"datetimePicker\" class=\"d-flex gap-3\">\r\n <iss-ctrl-date-picker class=\"flex-grow-1\" formControlName=\"date\" [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" [disabledDays]=\"disabledDays()\"/>\r\n <iss-ctrl-time-picker class=\"flex-grow-1\" formControlName=\"time\" [min]=\"min()\" [max]=\"max()\"/>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: TimePickerControl, selector: "iss-ctrl-time-picker" }, { kind: "component", type: DatePickerControl, selector: "iss-ctrl-date-picker", inputs: ["disabledDays", "minDate", "maxDate"] }] }); }
738
795
  }
739
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatetimePickerComponent, decorators: [{
796
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatetimePickerControl, decorators: [{
740
797
  type: Component,
741
798
  args: [{ selector: "iss-ctrl-datetime-picker", standalone: true, imports: [
742
799
  FormsModule,
@@ -747,27 +804,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
747
804
  MatInput,
748
805
  MatSuffix,
749
806
  ReactiveFormsModule,
750
- TimePickerComponent,
751
- DatePickerComponent
807
+ TimePickerControl,
808
+ DatePickerControl
752
809
  ], providers: [
753
810
  DatePipe,
754
811
  { provide: DateAdapter, useClass: ISSDateAdapter },
755
812
  { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT_ADAPTER },
756
813
  { provide: MAT_DATE_LOCALE, useValue: enGB },
757
- { provide: NG_VALUE_ACCESSOR, useExisting: DatetimePickerComponent, multi: true }
814
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatetimePickerControl, multi: true }
758
815
  ], template: "<form [formGroup]=\"datetimePicker\" class=\"d-flex gap-3\">\r\n <iss-ctrl-date-picker class=\"flex-grow-1\" formControlName=\"date\" [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" [disabledDays]=\"disabledDays()\"/>\r\n <iss-ctrl-time-picker class=\"flex-grow-1\" formControlName=\"time\" [min]=\"min()\" [max]=\"max()\"/>\r\n</form>\r\n" }]
759
816
  }] });
760
817
 
761
- class DatetimeRangePickerComponent extends BaseCtrl {
762
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatetimeRangePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
763
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: DatetimeRangePickerComponent, isStandalone: true, selector: "iss-ctrl-datetime-range-picker", providers: [
764
- { provide: NG_VALUE_ACCESSOR, useExisting: DatetimeRangePickerComponent, multi: true }
818
+ class DatetimeRangePickerControl extends BaseCtrl {
819
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatetimeRangePickerControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
820
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: DatetimeRangePickerControl, isStandalone: true, selector: "iss-ctrl-datetime-range-picker", providers: [
821
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatetimeRangePickerControl, multi: true }
765
822
  ], usesInheritance: true, ngImport: i0, template: "<p>datetime-range-picker works!</p>\r\n", styles: [""] }); }
766
823
  }
767
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatetimeRangePickerComponent, decorators: [{
824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatetimeRangePickerControl, decorators: [{
768
825
  type: Component,
769
826
  args: [{ selector: "iss-ctrl-datetime-range-picker", standalone: true, imports: [], providers: [
770
- { provide: NG_VALUE_ACCESSOR, useExisting: DatetimeRangePickerComponent, multi: true }
827
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatetimeRangePickerControl, multi: true }
771
828
  ], template: "<p>datetime-range-picker works!</p>\r\n" }]
772
829
  }] });
773
830
 
@@ -819,7 +876,7 @@ class HintsComponent {
819
876
  <div class="d-flex align-items-center flex-wrap gap-2 mb-3">
820
877
  @for (hint of hints(); track $index) {
821
878
  @if (hint) {
822
- <mat-hint class="d-flex align-items-center gap-1 fs-12">
879
+ <mat-hint [align]="hint.align" class="d-flex align-items-center gap-1 fs-12">
823
880
  @if (hint.valid === undefined) {
824
881
  <ds-icon icon="info" class="fs-24 fc-dark-gray"></ds-icon>
825
882
  <span class="fc-dark-gray text-break">{{ hint.label }}</span>
@@ -849,7 +906,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
849
906
  <div class="d-flex align-items-center flex-wrap gap-2 mb-3">
850
907
  @for (hint of hints(); track $index) {
851
908
  @if (hint) {
852
- <mat-hint class="d-flex align-items-center gap-1 fs-12">
909
+ <mat-hint [align]="hint.align" class="d-flex align-items-center gap-1 fs-12">
853
910
  @if (hint.valid === undefined) {
854
911
  <ds-icon icon="info" class="fs-24 fc-dark-gray"></ds-icon>
855
912
  <span class="fc-dark-gray text-break">{{ hint.label }}</span>
@@ -871,7 +928,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
871
928
  }]
872
929
  }] });
873
930
 
874
- class FilePickerComponent extends BaseCtrl {
931
+ class FilePickerControl extends BaseCtrl {
875
932
  constructor() {
876
933
  super(...arguments);
877
934
  this.accept = input();
@@ -967,12 +1024,12 @@ class FilePickerComponent extends BaseCtrl {
967
1024
  window.URL.revokeObjectURL(fileUrl);
968
1025
  a.remove();
969
1026
  }
970
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FilePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
971
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: FilePickerComponent, isStandalone: true, selector: "iss-ctrl-file-picker", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, showDownloadButton: { classPropertyName: "showDownloadButton", publicName: "showDownloadButton", isSignal: true, isRequired: false, transformFunction: null }, showDeleteButton: { classPropertyName: "showDeleteButton", publicName: "showDeleteButton", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
972
- { provide: NG_VALUE_ACCESSOR, useExisting: FilePickerComponent, multi: true }
1027
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FilePickerControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1028
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: FilePickerControl, isStandalone: true, selector: "iss-ctrl-file-picker", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, showDownloadButton: { classPropertyName: "showDownloadButton", publicName: "showDownloadButton", isSignal: true, isRequired: false, transformFunction: null }, showDeleteButton: { classPropertyName: "showDeleteButton", publicName: "showDeleteButton", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
1029
+ { provide: NG_VALUE_ACCESSOR, useExisting: FilePickerControl, multi: true }
973
1030
  ], usesInheritance: true, ngImport: i0, template: "<ds-file-picker (click)=\"inputFile.click(); markAsTouched()\" droppable (onDrop)=\"captureFile($event)\">\r\n <input\r\n id=\"file\"\r\n type=\"file\"\r\n #inputFile\r\n [style.display]=\"'none'\"\r\n [formControl]=\"ctrl\"\r\n [multiple]=\"multiple()\"\r\n [accept]=\"accept()\"\r\n (change)=\"captureFile($any($event.target).files)\"\r\n />\r\n</ds-file-picker>\r\n\r\n<iss-ctrl-hints [hints]=\"hints()\" [touched]=\"touched()\"/>\r\n@if (attachments().length) {\r\n <section class=\"files-list\">\r\n @for (file of attachments(); track $index) {\r\n <div class=\"file-item-container\">\r\n @if (file) {\r\n <ds-attachments\r\n [matTooltip]=\"file.name\"\r\n [file]=\"file\"\r\n [showDownload]=\"showDownloadButton()\"\r\n [showActions]=\"showDeleteButton()\"\r\n (downloadEvent)=\"onDownload($event)\"\r\n (deleteEvent)=\"onDelete($index)\"\r\n >\r\n </ds-attachments>\r\n }\r\n </div>\r\n }\r\n </section>\r\n}\r\n", 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}.insideTableStyle{width:272px}.files-list{--file-item-width: 270px;display:grid;grid-template-columns:repeat(auto-fill,var(--file-item-width));grid-gap:.5rem}@media (max-width: 768px){.files-list{grid-template-columns:repeat(auto-fill,minmax(var(--file-item-width),1fr))}}.files-list .file-item-container .file-item{--file-bg: var(--off-white);--file-radius: var(--box-radius);--icon-color: var(--purple);--icon-size: 2rem;--file-border: transparent;display:flex;align-items:center;background-color:var(--file-bg);border:1px solid var(--file-border);border-radius:var(--file-radius);padding:0 1rem;height:70px;gap:.75rem}.files-list .file-item-container .file-item.error{--file-bg: rgba(var(--rgb-red), 10%);--file-border: var(--red);--icon-color: var(--red)}.files-list .file-item-container .file-item .icon{color:var(--icon-color);font-size:var(--icon-size)}.files-list .file-item-container .file-item .file-action{display:flex;align-items:center;gap:.5rem}ds-attachments::part(base){--file-width: 250px}::ng-deep .file-item .name-size{display:flex;flex-direction:column;justify-content:center;flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:120px}\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: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: DroppableDirective, selector: "[droppable]", outputs: ["onDrop"] }, { kind: "component", type: HintsComponent, selector: "iss-ctrl-hints", inputs: ["hints", "touched"] }] }); }
974
1031
  }
975
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FilePickerComponent, decorators: [{
1032
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FilePickerControl, decorators: [{
976
1033
  type: Component,
977
1034
  args: [{ selector: "iss-ctrl-file-picker", standalone: true, imports: [
978
1035
  ReactiveFormsModule,
@@ -980,30 +1037,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
980
1037
  DroppableDirective,
981
1038
  HintsComponent,
982
1039
  ], providers: [
983
- { provide: NG_VALUE_ACCESSOR, useExisting: FilePickerComponent, multi: true }
1040
+ { provide: NG_VALUE_ACCESSOR, useExisting: FilePickerControl, multi: true }
984
1041
  ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<ds-file-picker (click)=\"inputFile.click(); markAsTouched()\" droppable (onDrop)=\"captureFile($event)\">\r\n <input\r\n id=\"file\"\r\n type=\"file\"\r\n #inputFile\r\n [style.display]=\"'none'\"\r\n [formControl]=\"ctrl\"\r\n [multiple]=\"multiple()\"\r\n [accept]=\"accept()\"\r\n (change)=\"captureFile($any($event.target).files)\"\r\n />\r\n</ds-file-picker>\r\n\r\n<iss-ctrl-hints [hints]=\"hints()\" [touched]=\"touched()\"/>\r\n@if (attachments().length) {\r\n <section class=\"files-list\">\r\n @for (file of attachments(); track $index) {\r\n <div class=\"file-item-container\">\r\n @if (file) {\r\n <ds-attachments\r\n [matTooltip]=\"file.name\"\r\n [file]=\"file\"\r\n [showDownload]=\"showDownloadButton()\"\r\n [showActions]=\"showDeleteButton()\"\r\n (downloadEvent)=\"onDownload($event)\"\r\n (deleteEvent)=\"onDelete($index)\"\r\n >\r\n </ds-attachments>\r\n }\r\n </div>\r\n }\r\n </section>\r\n}\r\n", 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}.insideTableStyle{width:272px}.files-list{--file-item-width: 270px;display:grid;grid-template-columns:repeat(auto-fill,var(--file-item-width));grid-gap:.5rem}@media (max-width: 768px){.files-list{grid-template-columns:repeat(auto-fill,minmax(var(--file-item-width),1fr))}}.files-list .file-item-container .file-item{--file-bg: var(--off-white);--file-radius: var(--box-radius);--icon-color: var(--purple);--icon-size: 2rem;--file-border: transparent;display:flex;align-items:center;background-color:var(--file-bg);border:1px solid var(--file-border);border-radius:var(--file-radius);padding:0 1rem;height:70px;gap:.75rem}.files-list .file-item-container .file-item.error{--file-bg: rgba(var(--rgb-red), 10%);--file-border: var(--red);--icon-color: var(--red)}.files-list .file-item-container .file-item .icon{color:var(--icon-color);font-size:var(--icon-size)}.files-list .file-item-container .file-item .file-action{display:flex;align-items:center;gap:.5rem}ds-attachments::part(base){--file-width: 250px}::ng-deep .file-item .name-size{display:flex;flex-direction:column;justify-content:center;flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:120px}\n"] }]
985
1042
  }] });
986
1043
 
987
- class InputComponent extends BaseCtrl {
1044
+ class InputControl extends BaseCtrl {
988
1045
  constructor() {
989
1046
  super(...arguments);
990
1047
  this.type = input("text");
1048
+ this.prefixIcon = input("");
1049
+ this.prefixText = input("");
1050
+ this.suffixIcon = input("");
1051
+ this.suffixText = input("");
1052
+ this.onPrefixClick = output();
1053
+ this.onSuffixClick = output();
1054
+ this.#ctrlChanges = toSignal(this.ctrl.valueChanges);
1055
+ this.#effect = effect(() => {
1056
+ if (this.#ctrlChanges()) {
1057
+ this.emitValue(this.#ctrlChanges());
1058
+ }
1059
+ });
1060
+ }
1061
+ #ctrlChanges;
1062
+ #effect;
1063
+ emitSuffixClick() {
1064
+ this.onSuffixClick.emit(this.ctrl.getRawValue());
1065
+ }
1066
+ emitPrefixClick() {
1067
+ this.onPrefixClick.emit(this.ctrl.getRawValue());
1068
+ }
1069
+ ngOnDestroy() {
1070
+ this.#effect.destroy();
991
1071
  }
992
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
993
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: InputComponent, isStandalone: true, selector: "iss-ctrl-input", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
994
- { provide: NG_VALUE_ACCESSOR, useExisting: InputComponent, multi: true }
995
- ], usesInheritance: true, ngImport: i0, template: "<mat-form-field appearance=\"outline\">\r\n <input\r\n (blur)=\"markAsTouched()\"\r\n (input)=\"emitOnChangeEvent()\"\r\n [formControl]=\"ctrl\"\r\n [maxlength]=\"max()\"\r\n [minlength]=\"min()\"\r\n [placeholder]=\"placeholder()\"\r\n [type]=\"type()\"\r\n matInput\r\n />\r\n <iss-ctrl-hints [hints]=\"hints()\"/>\r\n</mat-form-field>\r\n", 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: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: 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.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: HintsComponent, selector: "iss-ctrl-hints", inputs: ["hints", "touched"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1072
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InputControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1073
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", 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: [
1074
+ { provide: NG_VALUE_ACCESSOR, useExisting: InputControl, multi: true },
1075
+ { provide: NG_VALIDATORS, useExisting: InputControl, multi: true }
1076
+ ], usesInheritance: true, ngImport: i0, template: "<mat-form-field appearance=\"outline\">\r\n <ng-content select=\"[issPrefix]\"></ng-content>\r\n <div (click)=\"emitPrefixClick()\" class=\"cursor-pointer\">\r\n @if (prefixText()) {\r\n <span matTextPrefix>{{ prefixText() }}</span>\r\n }\r\n @if (prefixIcon()) {\r\n <ds-icon matPrefix icon=\"{{prefixIcon()}}\"></ds-icon>\r\n }\r\n </div>\r\n <input\r\n matInput\r\n (blur)=\"markAsTouched()\"\r\n (input)=\"emitOnChangeEvent()\"\r\n [formControl]=\"ctrl\"\r\n [maxlength]=\"max()\"\r\n [minlength]=\"min()\"\r\n [placeholder]=\"placeholder()\"\r\n [type]=\"type()\"\r\n [disabled]=\"disabled()\"\r\n />\r\n <ng-content select=\"[issSuffix]\"></ng-content>\r\n <div (click)=\"emitSuffixClick()\" class=\"cursor-pointer\">\r\n @if (suffixText()) {\r\n <span matTextSuffix>{{ suffixText() }}</span>\r\n }\r\n @if (suffixIcon()) {\r\n <ds-icon matSuffix icon=\"{{suffixIcon()}}\"></ds-icon>\r\n }\r\n </div>\r\n <iss-ctrl-hints [hints]=\"hints()\"/>\r\n</mat-form-field>\r\n", 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.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { 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.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"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
996
1077
  }
997
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InputComponent, decorators: [{
1078
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InputControl, decorators: [{
998
1079
  type: Component,
999
1080
  args: [{ selector: "iss-ctrl-input", standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1000
- MatFormFieldModule,
1001
- MatInputModule,
1002
1081
  ReactiveFormsModule,
1003
- HintsComponent
1082
+ MatFormFieldModule,
1083
+ HintsComponent,
1084
+ MatInput
1004
1085
  ], providers: [
1005
- { provide: NG_VALUE_ACCESSOR, useExisting: InputComponent, multi: true }
1006
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<mat-form-field appearance=\"outline\">\r\n <input\r\n (blur)=\"markAsTouched()\"\r\n (input)=\"emitOnChangeEvent()\"\r\n [formControl]=\"ctrl\"\r\n [maxlength]=\"max()\"\r\n [minlength]=\"min()\"\r\n [placeholder]=\"placeholder()\"\r\n [type]=\"type()\"\r\n matInput\r\n />\r\n <iss-ctrl-hints [hints]=\"hints()\"/>\r\n</mat-form-field>\r\n" }]
1086
+ { provide: NG_VALUE_ACCESSOR, useExisting: InputControl, multi: true },
1087
+ { provide: NG_VALIDATORS, useExisting: InputControl, multi: true }
1088
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<mat-form-field appearance=\"outline\">\r\n <ng-content select=\"[issPrefix]\"></ng-content>\r\n <div (click)=\"emitPrefixClick()\" class=\"cursor-pointer\">\r\n @if (prefixText()) {\r\n <span matTextPrefix>{{ prefixText() }}</span>\r\n }\r\n @if (prefixIcon()) {\r\n <ds-icon matPrefix icon=\"{{prefixIcon()}}\"></ds-icon>\r\n }\r\n </div>\r\n <input\r\n matInput\r\n (blur)=\"markAsTouched()\"\r\n (input)=\"emitOnChangeEvent()\"\r\n [formControl]=\"ctrl\"\r\n [maxlength]=\"max()\"\r\n [minlength]=\"min()\"\r\n [placeholder]=\"placeholder()\"\r\n [type]=\"type()\"\r\n [disabled]=\"disabled()\"\r\n />\r\n <ng-content select=\"[issSuffix]\"></ng-content>\r\n <div (click)=\"emitSuffixClick()\" class=\"cursor-pointer\">\r\n @if (suffixText()) {\r\n <span matTextSuffix>{{ suffixText() }}</span>\r\n }\r\n @if (suffixIcon()) {\r\n <ds-icon matSuffix icon=\"{{suffixIcon()}}\"></ds-icon>\r\n }\r\n </div>\r\n <iss-ctrl-hints [hints]=\"hints()\"/>\r\n</mat-form-field>\r\n" }]
1007
1089
  }] });
1008
1090
 
1009
1091
  const COUNTRIES = [
@@ -3150,7 +3232,7 @@ const DEFAULT_COUNTRY = {
3150
3232
  order: 1000,
3151
3233
  placeholder: "512345678"
3152
3234
  };
3153
- class MobileComponent extends BaseCtrl {
3235
+ class MobileControl extends BaseCtrl {
3154
3236
  constructor() {
3155
3237
  super(...arguments);
3156
3238
  this.phoneService = inject(PhoneService);
@@ -3248,13 +3330,13 @@ class MobileComponent extends BaseCtrl {
3248
3330
  }
3249
3331
  return this.#sortCountries();
3250
3332
  }
3251
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: MobileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3252
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: MobileComponent, isStandalone: true, selector: "iss-ctrl-mobile", inputs: { preferredCountries: { classPropertyName: "preferredCountries", publicName: "preferredCountries", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
3253
- { provide: NG_VALUE_ACCESSOR, useExisting: MobileComponent, multi: true },
3254
- { provide: NG_VALIDATORS, useExisting: MobileComponent, multi: true }
3333
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: MobileControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3334
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: MobileControl, isStandalone: true, selector: "iss-ctrl-mobile", inputs: { preferredCountries: { classPropertyName: "preferredCountries", publicName: "preferredCountries", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
3335
+ { provide: NG_VALUE_ACCESSOR, useExisting: MobileControl, multi: true },
3336
+ { provide: NG_VALIDATORS, useExisting: MobileControl, multi: true }
3255
3337
  ], usesInheritance: true, ngImport: i0, template: "<mat-form-field cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\r\n <div class=\"d-inline-flex align-items-center gap-1 country-flag\" matPrefix (click)=\"toggleCountryCodeMenu()\">\r\n <img ngSrc=\"./flags/{{selectedCountry().code}}.svg\" width=\"20\" height=\"20\" alt=\"\" class=\"country-flag--image\" [priority]=\"true\">\r\n <!--@if (separateDialCode()) {\r\n <div class=\"selected-dial-code\">+{{ selectedCountry.dialCode }}</div>\r\n }-->\r\n <ds-icon icon=\"arrow-down\" class=\"fs-12 fc-dark-gray\"></ds-icon>\r\n </div>\r\n <input\r\n matInput\r\n type=\"tel\"\r\n autocomplete=\"off\"\r\n (blur)=\"markAsTouched()\"\r\n (keydown)=\"onInput($event)\"\r\n (input)=\"emit()\"\r\n [formControl]=\"ctrl\"\r\n [disabled]=\"disabled()\"\r\n [placeholder]=\"selectedCountry().placeholder\"\r\n />\r\n</mat-form-field>\r\n\r\n\r\n<ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n (backdropClick)=\"closeCountryCodeMenu()\"\r\n [cdkConnectedOverlayGrowAfterOpen]=\"true\"\r\n [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"isOpen()\"\r\n>\r\n <div class=\"country-dropdown bc-white box-shadow p-2\">\r\n <div class=\"search-container\">\r\n <mat-form-field>\r\n <input matInput id=\"country-search-box\" [formControl]=\"searchInput\" (click)=\"$event.stopPropagation()\"/>\r\n </mat-form-field>\r\n </div>\r\n <ul class=\"country-list\">\r\n @for (country of filteredCountries(); track $index) {\r\n <li\r\n #countryEl\r\n [ngClass]=\"country.order > 1 ? 'preferredCounty' : ''\"\r\n class=\"d-flex align-items-center gap-2 cursor-pointer p-2\"\r\n (click)=\"onSelectCountry(country)\"\r\n >\r\n @defer (on viewport(countryEl)) {\r\n <img ngSrc=\"./flags/{{country.code}}.svg\" width=\"20\" height=\"20\" alt=\"\" class=\"country-flag--image\">\r\n }\r\n <span class=\"fs-12 fc-black\">{{ country.name }}</span>\r\n <span class=\"fs-12 fc-dark-gray\">+{{ country.dailCode }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</ng-template>\r\n", 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"], 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"], 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", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], deferBlockDependencies: [() => [NgOptimizedImage]] }); }
3256
3338
  }
3257
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: MobileComponent, decorators: [{
3339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: MobileControl, decorators: [{
3258
3340
  type: Component,
3259
3341
  args: [{ selector: "iss-ctrl-mobile", standalone: true, imports: [
3260
3342
  ReactiveFormsModule,
@@ -3266,25 +3348,85 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
3266
3348
  MatPrefix,
3267
3349
  NgOptimizedImage
3268
3350
  ], providers: [
3269
- { provide: NG_VALUE_ACCESSOR, useExisting: MobileComponent, multi: true },
3270
- { provide: NG_VALIDATORS, useExisting: MobileComponent, multi: true }
3351
+ { provide: NG_VALUE_ACCESSOR, useExisting: MobileControl, multi: true },
3352
+ { provide: NG_VALIDATORS, useExisting: MobileControl, multi: true }
3271
3353
  ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<mat-form-field cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\r\n <div class=\"d-inline-flex align-items-center gap-1 country-flag\" matPrefix (click)=\"toggleCountryCodeMenu()\">\r\n <img ngSrc=\"./flags/{{selectedCountry().code}}.svg\" width=\"20\" height=\"20\" alt=\"\" class=\"country-flag--image\" [priority]=\"true\">\r\n <!--@if (separateDialCode()) {\r\n <div class=\"selected-dial-code\">+{{ selectedCountry.dialCode }}</div>\r\n }-->\r\n <ds-icon icon=\"arrow-down\" class=\"fs-12 fc-dark-gray\"></ds-icon>\r\n </div>\r\n <input\r\n matInput\r\n type=\"tel\"\r\n autocomplete=\"off\"\r\n (blur)=\"markAsTouched()\"\r\n (keydown)=\"onInput($event)\"\r\n (input)=\"emit()\"\r\n [formControl]=\"ctrl\"\r\n [disabled]=\"disabled()\"\r\n [placeholder]=\"selectedCountry().placeholder\"\r\n />\r\n</mat-form-field>\r\n\r\n\r\n<ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n (backdropClick)=\"closeCountryCodeMenu()\"\r\n [cdkConnectedOverlayGrowAfterOpen]=\"true\"\r\n [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"isOpen()\"\r\n>\r\n <div class=\"country-dropdown bc-white box-shadow p-2\">\r\n <div class=\"search-container\">\r\n <mat-form-field>\r\n <input matInput id=\"country-search-box\" [formControl]=\"searchInput\" (click)=\"$event.stopPropagation()\"/>\r\n </mat-form-field>\r\n </div>\r\n <ul class=\"country-list\">\r\n @for (country of filteredCountries(); track $index) {\r\n <li\r\n #countryEl\r\n [ngClass]=\"country.order > 1 ? 'preferredCounty' : ''\"\r\n class=\"d-flex align-items-center gap-2 cursor-pointer p-2\"\r\n (click)=\"onSelectCountry(country)\"\r\n >\r\n @defer (on viewport(countryEl)) {\r\n <img ngSrc=\"./flags/{{country.code}}.svg\" width=\"20\" height=\"20\" alt=\"\" class=\"country-flag--image\">\r\n }\r\n <span class=\"fs-12 fc-black\">{{ country.name }}</span>\r\n <span class=\"fs-12 fc-dark-gray\">+{{ country.dailCode }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</ng-template>\r\n", styles: [".country-flag{border-inline-end:var(--input-border);padding-inline-end:.5rem;margin-inline-end:.5rem;cursor:pointer}\n"] }]
3272
3354
  }] });
3273
3355
 
3274
- class NoteComponent extends BaseCtrl {
3275
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NoteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3276
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: NoteComponent, isStandalone: true, selector: "iss-ctrl-note", providers: [
3277
- { provide: NG_VALUE_ACCESSOR, useExisting: NoteComponent, multi: true }
3356
+ class NoteControl extends BaseCtrl {
3357
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NoteControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3358
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: NoteControl, isStandalone: true, selector: "iss-ctrl-note", providers: [
3359
+ { provide: NG_VALUE_ACCESSOR, useExisting: NoteControl, multi: true }
3278
3360
  ], usesInheritance: true, ngImport: i0, template: "<p>note works!</p>\r\n", styles: [""] }); }
3279
3361
  }
3280
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NoteComponent, decorators: [{
3362
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NoteControl, decorators: [{
3281
3363
  type: Component,
3282
3364
  args: [{ selector: "iss-ctrl-note", standalone: true, imports: [], providers: [
3283
- { provide: NG_VALUE_ACCESSOR, useExisting: NoteComponent, multi: true }
3365
+ { provide: NG_VALUE_ACCESSOR, useExisting: NoteControl, multi: true }
3284
3366
  ], template: "<p>note works!</p>\r\n" }]
3285
3367
  }] });
3286
3368
 
3287
- class PlateNumberComponent extends BaseCtrl {
3369
+ class ArabicNumberPipe {
3370
+ transform(n, ...args) {
3371
+ if (n === null || n === undefined) {
3372
+ return "";
3373
+ }
3374
+ if (isNaN(+n)) {
3375
+ return n;
3376
+ }
3377
+ return new Intl.NumberFormat("ar-SA", {}).format(+n);
3378
+ }
3379
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ArabicNumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3380
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: ArabicNumberPipe, isStandalone: true, name: "arabicNumber" }); }
3381
+ }
3382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ArabicNumberPipe, decorators: [{
3383
+ type: Pipe,
3384
+ args: [{
3385
+ name: "arabicNumber",
3386
+ standalone: true
3387
+ }]
3388
+ }] });
3389
+
3390
+ const PLATE_LETTERS = [
3391
+ { label: { ar: "أ", en: "A" }, value: "A" },
3392
+ { label: { ar: "ب", en: "B" }, value: "B" },
3393
+ { label: { ar: "ح", en: "J" }, value: "J" },
3394
+ { label: { ar: "د", en: "D" }, value: "D" },
3395
+ { label: { ar: "ر", en: "R" }, value: "R" },
3396
+ { label: { ar: "س", en: "S" }, value: "S" },
3397
+ { label: { ar: "ص", en: "X" }, value: "X" },
3398
+ { label: { ar: "ط", en: "T" }, value: "T" },
3399
+ { label: { ar: "ع", en: "E" }, value: "E" },
3400
+ { label: { ar: "ق", en: "G" }, value: "G" },
3401
+ { label: { ar: "ك", en: "K" }, value: "K" },
3402
+ { label: { ar: "ل", en: "L" }, value: "L" },
3403
+ { label: { ar: "م", en: "Z" }, value: "Z" },
3404
+ { label: { ar: "ن", en: "N" }, value: "N" },
3405
+ { label: { ar: "هـ", en: "H" }, value: "H" },
3406
+ { label: { ar: "و", en: "U" }, value: "U" },
3407
+ { label: { ar: "ي", en: "V" }, value: "V" }
3408
+ ];
3409
+
3410
+ class PlateLetterPipe {
3411
+ transform(value, ...args) {
3412
+ const letter = PLATE_LETTERS.find(letter => letter.value === value);
3413
+ if (letter) {
3414
+ return letter.label.ar;
3415
+ }
3416
+ return value;
3417
+ }
3418
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PlateLetterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3419
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: PlateLetterPipe, isStandalone: true, name: "plateLetter" }); }
3420
+ }
3421
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PlateLetterPipe, decorators: [{
3422
+ type: Pipe,
3423
+ args: [{
3424
+ name: "plateLetter",
3425
+ standalone: true
3426
+ }]
3427
+ }] });
3428
+
3429
+ class PlateControl extends BaseCtrl {
3288
3430
  constructor() {
3289
3431
  super(...arguments);
3290
3432
  this.plate = new FormGroup({
@@ -3300,25 +3442,6 @@ class PlateNumberComponent extends BaseCtrl {
3300
3442
  new FormControl(null),
3301
3443
  ]),
3302
3444
  });
3303
- this.options = [
3304
- { label: "A/أ", value: "A" },
3305
- { label: "B/ب", value: "B" },
3306
- { label: "J/ح", value: "J" },
3307
- { label: "D/د", value: "D" },
3308
- { label: "R/ر", value: "R" },
3309
- { label: "S/س", value: "S" },
3310
- { label: "X/ص", value: "X" },
3311
- { label: "T/ط", value: "T" },
3312
- { label: "E/ع", value: "E" },
3313
- { label: "G/ق", value: "G" },
3314
- { label: "K/ك", value: "K" },
3315
- { label: "L/ل", value: "L" },
3316
- { label: "Z/م", value: "Z" },
3317
- { label: "N/ن", value: "N" },
3318
- { label: "H/هـ", value: "H" },
3319
- { label: "U/و", value: "U" },
3320
- { label: "V/ي", value: "V" }
3321
- ];
3322
3445
  this.#plateChanges = toSignal(this.plate.valueChanges);
3323
3446
  this.#lettersArr = computed(() => this.#plateChanges()["letters"].filter((l) => l));
3324
3447
  this.#letters = computed(() => this.#lettersArr().join(""));
@@ -3331,6 +3454,7 @@ class PlateNumberComponent extends BaseCtrl {
3331
3454
  this.emitOnChangeEvent({ letters: this.#lettersArr(), numbers: this.#numbersArr() });
3332
3455
  }
3333
3456
  });
3457
+ this.PLATE_LETTERS = PLATE_LETTERS;
3334
3458
  }
3335
3459
  #plateChanges;
3336
3460
  #lettersArr;
@@ -3369,12 +3493,12 @@ class PlateNumberComponent extends BaseCtrl {
3369
3493
  }
3370
3494
  return null;
3371
3495
  }
3372
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PlateNumberComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3373
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: PlateNumberComponent, isStandalone: true, selector: "iss-ctrl-plate-number", providers: [
3374
- { provide: NG_VALUE_ACCESSOR, useExisting: PlateNumberComponent, multi: true }
3375
- ], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"plate\">\r\n <div class=\"row mb-4\">\r\n <ng-container formArrayName=\"numbers\">\r\n @for (item of numberControls; track $index) {\r\n <div class=\"col-sm-3\">\r\n <mat-form-field class=\"mat-form-field-number\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n [formControlName]=\"$index\"\r\n maxlength=\"1\"\r\n placeholder=\"\"\r\n oninput=\"if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n }\r\n </ng-container>\r\n </div>\r\n <div class=\"row mb-4\">\r\n <ng-container formArrayName=\"letters\">\r\n @for (el of letterControls; track $index) {\r\n <div class=\"col-sm-4\">\r\n <mat-form-field class=\"mat-form-field-number\">\r\n <mat-select disableOptionCentering [formControlName]=\"$index\">\r\n @for (option of options; track option.value) {\r\n <mat-option [value]=\"option.value\">{{ option.label }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </ng-container>\r\n </div>\r\n <!--<div class=\"row mb-4\">\r\n <div class=\"col-12\">\r\n <ng-container *ngTemplateOutlet=\"plateElement\"></ng-container>\r\n </div>\r\n </div>-->\r\n</div>\r\n\r\n\r\n<!--<ng-template #plateElement>\r\n <div class=\"plate d-inline-flex align-items-stretch justify-content-between fs-18\">\r\n <div class=\"d-flex flex-column border-right w-100\">\r\n <div class=\"ARPlate border-bottom d-flex h-50 w-100\">\r\n <div class=\"fc-black border-right w-50 d-flex align-items-center justify-content-center gap-1\">\r\n <span>{{ number1 | arabicNumbers }}</span>\r\n <span>{{ number2 | arabicNumbers }}</span>\r\n <span>{{ number3 | arabicNumbers }}</span>\r\n <span>{{ number4 | arabicNumbers }}</span>\r\n </div>\r\n <span class=\"fw-medium fc-black w-50 d-flex align-items-center justify-content-center\">\r\n <span>{{ letter1Ar }}</span> <span class=\"m-1\">{{ letter2Ar }}</span> <span>{{ letter3Ar }}</span>\r\n </span>\r\n </div>\r\n <div class=\"ENPlate d-flex h-50 w-100\">\r\n <span class=\"fc-black border-right w-50 d-flex align-items-center justify-content-center\">\r\n {{ number1 === null || number1 === undefined ? '' : number1 }}\r\n {{ number2 === null || number2 === undefined ? '' : number2 }}\r\n {{ number3 === null || number3 === undefined ? '' : number3 }}\r\n {{ number4 === null || number4 === undefined ? '' : number4 }}\r\n </span>\r\n <span class=\"fw-medium fc-black w-50 d-flex align-items-center justify-content-center\">\r\n {{ letter1En.toUpperCase() + ' ' + letter2En.toUpperCase() + ' ' + letter3En.toUpperCase() }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 justify-content-center px-2 align-items-center\">\r\n <img src=\"assets/images/ksa-symbol.svg\" alt=\"\"/>\r\n\r\n <span class=\"fw-medium fs-12 line-height-1-2\">K<br/>S<br/>A</span>\r\n <svg width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"4.49162\" cy=\"4.06193\" r=\"3.99162\" fill=\"#1D252D\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>-->\r\n", styles: [""], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { 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: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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"], exportAs: ["matInput"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }] }); }
3496
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PlateControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3497
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: PlateControl, isStandalone: true, selector: "iss-ctrl-plate-number", providers: [
3498
+ { provide: NG_VALUE_ACCESSOR, useExisting: PlateControl, multi: true }
3499
+ ], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"plate\">\r\n @if (!disabled()) {\r\n <div class=\"row mb-4\">\r\n <ng-container formArrayName=\"numbers\">\r\n @for (item of numberControls; track $index) {\r\n <div class=\"col-sm-3\">\r\n <mat-form-field class=\"mat-form-field-number\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n [formControlName]=\"$index\"\r\n maxlength=\"1\"\r\n placeholder=\"\"\r\n oninput=\"if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n }\r\n </ng-container>\r\n </div>\r\n <div class=\"row mb-4\">\r\n <ng-container formArrayName=\"letters\">\r\n @for (el of letterControls; track $index) {\r\n <div class=\"col-sm-4\">\r\n <mat-form-field class=\"mat-form-field-number\">\r\n <mat-select disableOptionCentering [formControlName]=\"$index\">\r\n @for (option of PLATE_LETTERS; track option.value) {\r\n <mat-option [value]=\"option.value\">{{ option.label.en }} / {{ option.label.ar }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </ng-container>\r\n </div>\r\n }\r\n <div class=\"row mb-4\">\r\n <div class=\"col-12\">\r\n <ng-container *ngTemplateOutlet=\"plateElement\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #plateElement>\r\n <div class=\"plate d-inline-flex align-items-stretch justify-content-between fs-18\">\r\n <div class=\"d-flex flex-column border-right w-100\">\r\n <div class=\"ARPlate border-bottom d-flex h-50 w-100\">\r\n <div class=\"fc-black border-right w-50 d-flex align-items-center justify-content-center gap-2\">\r\n @for (numberCtrl of numberControls; track $index) {\r\n <span>{{ numberCtrl.value | arabicNumber }}</span>\r\n }\r\n </div>\r\n <span class=\"fw-medium fc-black w-50 d-flex align-items-center justify-content-center gap-2\">\r\n @for (letterCtrl of letterControls; track $index) {\r\n <span>{{ letterCtrl.value | plateLetter }}</span>\r\n }\r\n </span>\r\n </div>\r\n <div class=\"ENPlate d-flex h-50 w-100\">\r\n <span class=\"fc-black border-right w-50 d-flex align-items-center justify-content-center gap-2\">\r\n @for (numberCtrl of numberControls; track $index) {\r\n <span>{{ numberCtrl.value }}</span>\r\n }\r\n </span>\r\n <span class=\"fw-medium fc-black w-50 d-flex align-items-center justify-content-center gap-2\">\r\n @for (letterCtrl of letterControls; track $index) {\r\n <span>{{ letterCtrl.value }}</span>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 justify-content-center px-2 align-items-center\">\r\n <svg width=\"17\" height=\"19\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M10.8072 16.8744C11.4633 16.178 11.3244 15.3914 10.7996 15.3825C10.9872 15.9606 10.5562 16.3344 10.3922 16.5266C9.97894 16.1712 9.55086 15.7761 9.10778 15.3694C11.2695 13.5812 13.6354 11.995 16.7263 11.9452C13.3983 10.7499 10.7417 12.7815 8.4925 14.8084C6.24308 12.7815 3.58672 10.7499 0.257812 11.9452C3.34944 11.995 5.71507 13.581 7.87722 15.3694C7.43329 15.7761 7.00564 16.1712 6.59172 16.5266C6.42902 16.3344 5.99777 15.9606 6.18435 15.3825C5.65992 15.3914 5.52089 16.178 6.17758 16.8744C5.91495 17.0931 5.48962 17.4631 5.15113 17.5518C4.89082 17.6199 4.68185 17.4846 4.63473 17.2026C4.53542 16.6069 3.61271 16.6959 3.72554 17.5372C3.82907 18.3044 4.76066 18.6391 5.55892 18.2837C5.87565 18.1424 6.3107 17.7413 6.66778 17.45C6.83111 17.641 7.26215 18.0145 7.07494 18.5935C7.59979 18.5838 7.7384 17.798 7.08234 17.1005C7.54845 16.7028 8.01625 16.2927 8.4925 15.887C8.96833 16.2925 9.43634 16.7028 9.90288 17.1005C9.24639 17.798 9.385 18.5838 9.91006 18.5935C9.72285 18.0145 10.1539 17.6414 10.3168 17.45C10.6745 17.7413 11.1091 18.1424 11.4263 18.2837C12.2246 18.6391 13.1555 18.3044 13.259 17.5372C13.3719 16.6959 12.4496 16.6069 12.3494 17.2026C12.3023 17.4846 12.094 17.6196 11.8332 17.5518C11.4948 17.4631 11.0696 17.0931 10.8072 16.8744ZM6.72504 5.72093C6.22365 7.04637 6.19597 8.53894 6.9169 10.1805C6.80195 8.47576 7.17594 7.06771 7.8713 6.0066L8.01815 7.46832H7.84679L8.01815 9.17958H7.84679L8.01815 10.8904H7.84679L8.01794 12.5991L7.53366 13.0819H8.4925H9.45156L8.96685 12.5991L9.13842 10.8904H8.96685L9.13842 9.17958H8.96685L9.13842 7.46832H8.96685L9.11391 6.0066C9.80906 7.06771 10.1833 8.47682 10.0683 10.1805C10.7886 8.53894 10.7616 7.047 10.2602 5.72093C11.1115 6.72478 11.7701 7.89851 12.0661 9.36572C12.3733 7.50466 11.848 5.98568 10.8852 4.8071C11.8174 5.47943 12.6184 6.33157 13.1785 7.48396C13.048 5.72072 12.1559 4.57742 10.927 3.75824C11.989 4.1054 12.8561 4.68645 13.6343 5.71798C13.1139 3.8884 11.9801 3.15564 10.575 2.74362C11.5332 2.67368 12.4386 2.78165 13.3347 3.33988C12.3621 2.02839 11.0565 1.81055 9.73257 1.95634C10.2893 1.67279 10.9158 1.53101 11.5888 1.63137C10.8302 1.07187 9.81836 1.01651 8.95227 1.48812L8.4925 0.328125L8.0321 1.48749C7.1658 1.01651 6.15476 1.07166 5.39623 1.63137C6.06877 1.53122 6.69483 1.67279 7.25179 1.95634C5.92826 1.81055 4.62311 2.0286 3.6499 3.33988C4.54662 2.78165 5.45137 2.67368 6.41001 2.74362C5.00534 3.15564 3.87112 3.8884 3.35113 5.71798C4.12868 4.68666 4.99625 4.1054 6.05842 3.75824C4.8287 4.57721 3.93704 5.72072 3.80625 7.48396C4.36618 6.33157 5.16782 5.47943 6.09962 4.8071C5.13676 5.98568 4.61149 7.50466 4.91871 9.36572C5.21494 7.89851 5.87354 6.72478 6.72504 5.72093Z\"\r\n fill=\"#1D252D\"\r\n />\r\n </svg>\r\n <span class=\"fw-medium fs-12 line-height-1-2\">K<br/>S<br/>A</span>\r\n <svg width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"4.49162\" cy=\"4.06193\" r=\"3.99162\" fill=\"#1D252D\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".plate{background:#f8f8f8;width:240px;height:110px;border:1px solid #8e9aa0;border-radius:3px;direction:ltr}.plate .border-right{border-right:1px solid #d6d6d4}.plate .border-bottom{border-bottom:1px solid #d6d6d4!important}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { 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: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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"], exportAs: ["matInput"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: ArabicNumberPipe, name: "arabicNumber" }, { kind: "pipe", type: PlateLetterPipe, name: "plateLetter" }] }); }
3376
3500
  }
3377
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PlateNumberComponent, decorators: [{
3501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PlateControl, decorators: [{
3378
3502
  type: Component,
3379
3503
  args: [{ selector: "iss-ctrl-plate-number", standalone: true, imports: [
3380
3504
  MatFormField,
@@ -3382,13 +3506,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
3382
3506
  MatInput,
3383
3507
  MatSelect,
3384
3508
  MatOption,
3385
- NgTemplateOutlet
3509
+ NgTemplateOutlet,
3510
+ ArabicNumberPipe,
3511
+ PlateLetterPipe
3386
3512
  ], providers: [
3387
- { provide: NG_VALUE_ACCESSOR, useExisting: PlateNumberComponent, multi: true }
3388
- ], template: "<div [formGroup]=\"plate\">\r\n <div class=\"row mb-4\">\r\n <ng-container formArrayName=\"numbers\">\r\n @for (item of numberControls; track $index) {\r\n <div class=\"col-sm-3\">\r\n <mat-form-field class=\"mat-form-field-number\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n [formControlName]=\"$index\"\r\n maxlength=\"1\"\r\n placeholder=\"\"\r\n oninput=\"if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n }\r\n </ng-container>\r\n </div>\r\n <div class=\"row mb-4\">\r\n <ng-container formArrayName=\"letters\">\r\n @for (el of letterControls; track $index) {\r\n <div class=\"col-sm-4\">\r\n <mat-form-field class=\"mat-form-field-number\">\r\n <mat-select disableOptionCentering [formControlName]=\"$index\">\r\n @for (option of options; track option.value) {\r\n <mat-option [value]=\"option.value\">{{ option.label }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </ng-container>\r\n </div>\r\n <!--<div class=\"row mb-4\">\r\n <div class=\"col-12\">\r\n <ng-container *ngTemplateOutlet=\"plateElement\"></ng-container>\r\n </div>\r\n </div>-->\r\n</div>\r\n\r\n\r\n<!--<ng-template #plateElement>\r\n <div class=\"plate d-inline-flex align-items-stretch justify-content-between fs-18\">\r\n <div class=\"d-flex flex-column border-right w-100\">\r\n <div class=\"ARPlate border-bottom d-flex h-50 w-100\">\r\n <div class=\"fc-black border-right w-50 d-flex align-items-center justify-content-center gap-1\">\r\n <span>{{ number1 | arabicNumbers }}</span>\r\n <span>{{ number2 | arabicNumbers }}</span>\r\n <span>{{ number3 | arabicNumbers }}</span>\r\n <span>{{ number4 | arabicNumbers }}</span>\r\n </div>\r\n <span class=\"fw-medium fc-black w-50 d-flex align-items-center justify-content-center\">\r\n <span>{{ letter1Ar }}</span> <span class=\"m-1\">{{ letter2Ar }}</span> <span>{{ letter3Ar }}</span>\r\n </span>\r\n </div>\r\n <div class=\"ENPlate d-flex h-50 w-100\">\r\n <span class=\"fc-black border-right w-50 d-flex align-items-center justify-content-center\">\r\n {{ number1 === null || number1 === undefined ? '' : number1 }}\r\n {{ number2 === null || number2 === undefined ? '' : number2 }}\r\n {{ number3 === null || number3 === undefined ? '' : number3 }}\r\n {{ number4 === null || number4 === undefined ? '' : number4 }}\r\n </span>\r\n <span class=\"fw-medium fc-black w-50 d-flex align-items-center justify-content-center\">\r\n {{ letter1En.toUpperCase() + ' ' + letter2En.toUpperCase() + ' ' + letter3En.toUpperCase() }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 justify-content-center px-2 align-items-center\">\r\n <img src=\"assets/images/ksa-symbol.svg\" alt=\"\"/>\r\n\r\n <span class=\"fw-medium fs-12 line-height-1-2\">K<br/>S<br/>A</span>\r\n <svg width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"4.49162\" cy=\"4.06193\" r=\"3.99162\" fill=\"#1D252D\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>-->\r\n" }]
3513
+ { provide: NG_VALUE_ACCESSOR, useExisting: PlateControl, multi: true }
3514
+ ], template: "<div [formGroup]=\"plate\">\r\n @if (!disabled()) {\r\n <div class=\"row mb-4\">\r\n <ng-container formArrayName=\"numbers\">\r\n @for (item of numberControls; track $index) {\r\n <div class=\"col-sm-3\">\r\n <mat-form-field class=\"mat-form-field-number\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n [formControlName]=\"$index\"\r\n maxlength=\"1\"\r\n placeholder=\"\"\r\n oninput=\"if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n }\r\n </ng-container>\r\n </div>\r\n <div class=\"row mb-4\">\r\n <ng-container formArrayName=\"letters\">\r\n @for (el of letterControls; track $index) {\r\n <div class=\"col-sm-4\">\r\n <mat-form-field class=\"mat-form-field-number\">\r\n <mat-select disableOptionCentering [formControlName]=\"$index\">\r\n @for (option of PLATE_LETTERS; track option.value) {\r\n <mat-option [value]=\"option.value\">{{ option.label.en }} / {{ option.label.ar }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </ng-container>\r\n </div>\r\n }\r\n <div class=\"row mb-4\">\r\n <div class=\"col-12\">\r\n <ng-container *ngTemplateOutlet=\"plateElement\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #plateElement>\r\n <div class=\"plate d-inline-flex align-items-stretch justify-content-between fs-18\">\r\n <div class=\"d-flex flex-column border-right w-100\">\r\n <div class=\"ARPlate border-bottom d-flex h-50 w-100\">\r\n <div class=\"fc-black border-right w-50 d-flex align-items-center justify-content-center gap-2\">\r\n @for (numberCtrl of numberControls; track $index) {\r\n <span>{{ numberCtrl.value | arabicNumber }}</span>\r\n }\r\n </div>\r\n <span class=\"fw-medium fc-black w-50 d-flex align-items-center justify-content-center gap-2\">\r\n @for (letterCtrl of letterControls; track $index) {\r\n <span>{{ letterCtrl.value | plateLetter }}</span>\r\n }\r\n </span>\r\n </div>\r\n <div class=\"ENPlate d-flex h-50 w-100\">\r\n <span class=\"fc-black border-right w-50 d-flex align-items-center justify-content-center gap-2\">\r\n @for (numberCtrl of numberControls; track $index) {\r\n <span>{{ numberCtrl.value }}</span>\r\n }\r\n </span>\r\n <span class=\"fw-medium fc-black w-50 d-flex align-items-center justify-content-center gap-2\">\r\n @for (letterCtrl of letterControls; track $index) {\r\n <span>{{ letterCtrl.value }}</span>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 justify-content-center px-2 align-items-center\">\r\n <svg width=\"17\" height=\"19\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M10.8072 16.8744C11.4633 16.178 11.3244 15.3914 10.7996 15.3825C10.9872 15.9606 10.5562 16.3344 10.3922 16.5266C9.97894 16.1712 9.55086 15.7761 9.10778 15.3694C11.2695 13.5812 13.6354 11.995 16.7263 11.9452C13.3983 10.7499 10.7417 12.7815 8.4925 14.8084C6.24308 12.7815 3.58672 10.7499 0.257812 11.9452C3.34944 11.995 5.71507 13.581 7.87722 15.3694C7.43329 15.7761 7.00564 16.1712 6.59172 16.5266C6.42902 16.3344 5.99777 15.9606 6.18435 15.3825C5.65992 15.3914 5.52089 16.178 6.17758 16.8744C5.91495 17.0931 5.48962 17.4631 5.15113 17.5518C4.89082 17.6199 4.68185 17.4846 4.63473 17.2026C4.53542 16.6069 3.61271 16.6959 3.72554 17.5372C3.82907 18.3044 4.76066 18.6391 5.55892 18.2837C5.87565 18.1424 6.3107 17.7413 6.66778 17.45C6.83111 17.641 7.26215 18.0145 7.07494 18.5935C7.59979 18.5838 7.7384 17.798 7.08234 17.1005C7.54845 16.7028 8.01625 16.2927 8.4925 15.887C8.96833 16.2925 9.43634 16.7028 9.90288 17.1005C9.24639 17.798 9.385 18.5838 9.91006 18.5935C9.72285 18.0145 10.1539 17.6414 10.3168 17.45C10.6745 17.7413 11.1091 18.1424 11.4263 18.2837C12.2246 18.6391 13.1555 18.3044 13.259 17.5372C13.3719 16.6959 12.4496 16.6069 12.3494 17.2026C12.3023 17.4846 12.094 17.6196 11.8332 17.5518C11.4948 17.4631 11.0696 17.0931 10.8072 16.8744ZM6.72504 5.72093C6.22365 7.04637 6.19597 8.53894 6.9169 10.1805C6.80195 8.47576 7.17594 7.06771 7.8713 6.0066L8.01815 7.46832H7.84679L8.01815 9.17958H7.84679L8.01815 10.8904H7.84679L8.01794 12.5991L7.53366 13.0819H8.4925H9.45156L8.96685 12.5991L9.13842 10.8904H8.96685L9.13842 9.17958H8.96685L9.13842 7.46832H8.96685L9.11391 6.0066C9.80906 7.06771 10.1833 8.47682 10.0683 10.1805C10.7886 8.53894 10.7616 7.047 10.2602 5.72093C11.1115 6.72478 11.7701 7.89851 12.0661 9.36572C12.3733 7.50466 11.848 5.98568 10.8852 4.8071C11.8174 5.47943 12.6184 6.33157 13.1785 7.48396C13.048 5.72072 12.1559 4.57742 10.927 3.75824C11.989 4.1054 12.8561 4.68645 13.6343 5.71798C13.1139 3.8884 11.9801 3.15564 10.575 2.74362C11.5332 2.67368 12.4386 2.78165 13.3347 3.33988C12.3621 2.02839 11.0565 1.81055 9.73257 1.95634C10.2893 1.67279 10.9158 1.53101 11.5888 1.63137C10.8302 1.07187 9.81836 1.01651 8.95227 1.48812L8.4925 0.328125L8.0321 1.48749C7.1658 1.01651 6.15476 1.07166 5.39623 1.63137C6.06877 1.53122 6.69483 1.67279 7.25179 1.95634C5.92826 1.81055 4.62311 2.0286 3.6499 3.33988C4.54662 2.78165 5.45137 2.67368 6.41001 2.74362C5.00534 3.15564 3.87112 3.8884 3.35113 5.71798C4.12868 4.68666 4.99625 4.1054 6.05842 3.75824C4.8287 4.57721 3.93704 5.72072 3.80625 7.48396C4.36618 6.33157 5.16782 5.47943 6.09962 4.8071C5.13676 5.98568 4.61149 7.50466 4.91871 9.36572C5.21494 7.89851 5.87354 6.72478 6.72504 5.72093Z\"\r\n fill=\"#1D252D\"\r\n />\r\n </svg>\r\n <span class=\"fw-medium fs-12 line-height-1-2\">K<br/>S<br/>A</span>\r\n <svg width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"4.49162\" cy=\"4.06193\" r=\"3.99162\" fill=\"#1D252D\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".plate{background:#f8f8f8;width:240px;height:110px;border:1px solid #8e9aa0;border-radius:3px;direction:ltr}.plate .border-right{border-right:1px solid #d6d6d4}.plate .border-bottom{border-bottom:1px solid #d6d6d4!important}\n"] }]
3389
3515
  }] });
3390
3516
 
3391
- class RadioComponent extends BaseCtrl {
3517
+ class RadioControl extends BaseCtrl {
3392
3518
  constructor() {
3393
3519
  super(...arguments);
3394
3520
  this.options = input.required();
@@ -3407,28 +3533,31 @@ class RadioComponent extends BaseCtrl {
3407
3533
  onRadioChange(value) {
3408
3534
  this.emitValue(value);
3409
3535
  }
3410
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: RadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3411
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: RadioComponent, isStandalone: true, selector: "iss-ctrl-radio", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
3412
- { provide: NG_VALUE_ACCESSOR, useExisting: RadioComponent, multi: true }
3536
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: RadioControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3537
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: RadioControl, isStandalone: true, selector: "iss-ctrl-radio", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
3538
+ { provide: NG_VALUE_ACCESSOR, useExisting: RadioControl, multi: true }
3413
3539
  ], usesInheritance: true, ngImport: i0, template: "<mat-radio-group aria-label=\"Select an option\">\r\n @for (option of options(); track option.value) {\r\n <mat-radio-button\r\n [value]=\"option.value\"\r\n [checked]=\"ctrl.value === option.value\"\r\n (change)=\"onRadioChange(option.value)\"\r\n >{{ option.label }}\r\n </mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n", styles: [".mat-mdc-radio-group{flex-direction:column!important}\n"], dependencies: [{ kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i1$3.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$3.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
3414
3540
  }
3415
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: RadioComponent, decorators: [{
3541
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: RadioControl, decorators: [{
3416
3542
  type: Component,
3417
3543
  args: [{ selector: "iss-ctrl-radio", standalone: true, imports: [
3418
3544
  MatRadioModule,
3419
3545
  ReactiveFormsModule,
3420
3546
  ], providers: [
3421
- { provide: NG_VALUE_ACCESSOR, useExisting: RadioComponent, multi: true }
3547
+ { provide: NG_VALUE_ACCESSOR, useExisting: RadioControl, multi: true }
3422
3548
  ], template: "<mat-radio-group aria-label=\"Select an option\">\r\n @for (option of options(); track option.value) {\r\n <mat-radio-button\r\n [value]=\"option.value\"\r\n [checked]=\"ctrl.value === option.value\"\r\n (change)=\"onRadioChange(option.value)\"\r\n >{{ option.label }}\r\n </mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n", styles: [".mat-mdc-radio-group{flex-direction:column!important}\n"] }]
3423
3549
  }] });
3424
3550
 
3425
- class ISSCtrlSelectComponent extends BaseCtrl {
3551
+ class SelectControl extends BaseCtrl {
3426
3552
  constructor() {
3427
3553
  super(...arguments);
3428
3554
  this.selectedOptions = signal(new Map());
3429
3555
  this.options = input.required();
3556
+ this.height = input("150px");
3430
3557
  this.query = toSignal(this.ctrl.valueChanges);
3431
3558
  this.filteredOptions = computed(() => this.#filter(this.query()));
3559
+ this.loading = input(false);
3560
+ this.allSelected = signal(false);
3432
3561
  this.displayFn = (options) => {
3433
3562
  if (Array.isArray(options) && !this.multiple()) {
3434
3563
  /*const selectedLabel: string[] = options.map((o) => o.label);
@@ -3449,47 +3578,64 @@ class ISSCtrlSelectComponent extends BaseCtrl {
3449
3578
  let selectedOptions = this.options().filter((option) => values.includes(option.value));
3450
3579
  if (!this.multiple()) {
3451
3580
  if (selectedOptions.length > 1) {
3452
- this.emitValue(null);
3581
+ this.#emit();
3453
3582
  throw new Error("You cannot set multiple values while the control is in single selection mode!");
3454
3583
  }
3455
3584
  selectedOptions = selectedOptions.splice(-selectedOptions.length, selectedOptions.length - selectedOptions.length + 1);
3456
3585
  }
3457
3586
  for (let i = 0; i < selectedOptions.length; i++) {
3458
3587
  const val = selectedOptions[i];
3459
- this.addToSelectedOptionsMap(val);
3588
+ this.#addToSelectedOptionsMap(val);
3460
3589
  }
3461
3590
  this.ctrl.setValue(selectedOptions);
3462
3591
  }
3463
- stringifySelectedOptions() {
3464
- if (!this.selectedOptions()?.size) {
3465
- return null;
3592
+ captureValue($event) {
3593
+ if ($event?.option.value === "_SELECT_ALL_OPTIONS_") {
3594
+ return;
3466
3595
  }
3467
- return Array.from(this.selectedOptions(), ([value]) => value).join();
3468
- }
3469
- getEmissionValue($event) {
3470
- this.addToSelectedOptionsMap($event?.option.value);
3471
- this.emitValue(this.stringifySelectedOptions());
3596
+ this.#addToSelectedOptionsMap($event?.option.value);
3597
+ this.#emit();
3472
3598
  }
3473
3599
  removeFromSelectedOptionsMap(option) {
3474
3600
  this.selectedOptions().delete(option.value);
3475
- //to update menu options with new version of the options
3476
3601
  this.filteredOptions = computed(() => this.#filter(this.query()));
3477
- this.emitValue(this.stringifySelectedOptions());
3602
+ this.allSelected.set(false);
3603
+ this.#emit();
3478
3604
  }
3479
- addToSelectedOptionsMap(option) {
3605
+ clearSelection() {
3606
+ this.#reset();
3607
+ this.allSelected.set(false);
3608
+ this.#emit();
3609
+ }
3610
+ toggleAllSelection() {
3611
+ if (this.selectedOptions().size === this.options().length) {
3612
+ this.#reset();
3613
+ this.#emit();
3614
+ this.allSelected.set(false);
3615
+ return;
3616
+ }
3617
+ for (let i = 0; i < this.options().length; i++) {
3618
+ this.#addToSelectedOptionsMap(this.options()[i]);
3619
+ }
3620
+ this.allSelected.set(true);
3621
+ this.#emit();
3622
+ }
3623
+ #addToSelectedOptionsMap(option) {
3480
3624
  if (option) {
3481
3625
  const selectedOption = option;
3482
3626
  if (!this.multiple()) {
3483
3627
  this.#reset();
3484
3628
  }
3485
3629
  this.selectedOptions().set(selectedOption.value, selectedOption);
3486
- this.ctrl.setValue(Array.from(this.selectedOptions(), ([_, option]) => option));
3630
+ this.ctrl.setValue(this.#convertSelectedMapToArray());
3487
3631
  }
3488
3632
  }
3489
- clearSelection() {
3490
- this.#reset();
3491
- this.emitOnChangeEvent(null);
3492
- this.emitValue(null);
3633
+ #stringifySelectedOptions() {
3634
+ const selectedOptionsArr = this.#convertSelectedMapToArray();
3635
+ if (selectedOptionsArr) {
3636
+ return selectedOptionsArr.map((o) => o.value).join();
3637
+ }
3638
+ return null;
3493
3639
  }
3494
3640
  #filter(queryString) {
3495
3641
  if (queryString === null || queryString === undefined || typeof queryString !== "string") {
@@ -3501,18 +3647,25 @@ class ISSCtrlSelectComponent extends BaseCtrl {
3501
3647
  });
3502
3648
  return JSON.parse(JSON.stringify(filteredOptions));
3503
3649
  }
3650
+ #emit() {
3651
+ this.propagateValue(this.#stringifySelectedOptions());
3652
+ this.emitOnChangeEvent(this.#convertSelectedMapToArray());
3653
+ }
3504
3654
  #reset() {
3505
3655
  this.selectedOptions().clear();
3506
3656
  this.filteredOptions = computed(() => this.#filter(this.query()));
3507
3657
  this.ctrl.setValue(null);
3508
3658
  }
3509
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ISSCtrlSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3510
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ISSCtrlSelectComponent, isStandalone: true, selector: "iss-ctrl-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
3511
- { provide: NG_VALUE_ACCESSOR, useExisting: ISSCtrlSelectComponent, multi: true },
3512
- { provide: NG_VALIDATORS, useExisting: ISSCtrlSelectComponent, multi: true }
3513
- ], usesInheritance: true, ngImport: i0, template: "<mat-form-field floatLabel=\"always\">\r\n <mat-label />\r\n <input [formControl]=\"ctrl\" [matAutocomplete]=\"auto\" class=\"m-0\" [matChipInputFor]=\"chipGrid\" [placeholder]=\"placeholder()\" matInput/>\r\n @if (selectedOptions().size) {\r\n <span matSuffix class=\"sfi sfi-close fs-18 fc-black cursor-pointer\" (click)=\"clearSelection()\"></span>\r\n } @else {\r\n <span matSuffix class=\"sfi sfi-arrow-down fs-18 fc-black cursor-pointer\"></span>\r\n }\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayFn\"\r\n autoActiveFirstOption\r\n hideSingleSelectionIndicator\r\n (optionSelected)=\"getEmissionValue($event)\"\r\n >\r\n @if (filteredOptions().length) {\r\n @for (option of filteredOptions(); track option.value) {\r\n <mat-option\r\n [value]=\"option\"\r\n [ngClass]=\"{'mdc-list-item__selected': option | selectStatus: selectedOptions()}\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n } @else {\r\n <mat-option disabled=\"true\">No Result Found</mat-option>\r\n }\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n<mat-chip-grid #chipGrid>\r\n @if (multiple()) {\r\n @for (chip of selectedOptions(); track chip[0]) {\r\n <mat-chip-row (removed)=\"removeFromSelectedOptionsMap(chip[1])\">\r\n {{ chip[1].label }}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + chip[1].label\">\r\n <ds-icon icon=\"trash\" class=\"fc-red\"></ds-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n }\r\n</mat-chip-grid>\r\n", styles: ["::ng-deep .mat-mdc-option.mdc-list-item__selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{--mat-option-selected-state-label-text-color: var(--green);color:var(--green)}\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: "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: i3.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: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "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: i6.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i6.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i6.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i6.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: "pipe", type: SelectStatusPipe, name: "selectStatus" }] }); }
3659
+ #convertSelectedMapToArray() {
3660
+ const selectedOptionsArr = Array.from(this.selectedOptions(), ([_, option]) => option);
3661
+ return selectedOptionsArr.length ? selectedOptionsArr : null;
3662
+ }
3663
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SelectControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3664
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", 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 } }, providers: [
3665
+ { provide: NG_VALUE_ACCESSOR, useExisting: SelectControl, multi: true },
3666
+ ], usesInheritance: true, ngImport: i0, template: "<mat-form-field floatLabel=\"always\">\r\n <mat-label/>\r\n <input [formControl]=\"ctrl\" [matAutocomplete]=\"auto\" class=\"m-0\" [matChipInputFor]=\"chipGrid\" [placeholder]=\"placeholder()\" matInput/>\r\n @if (selectedOptions().size) {\r\n <span matSuffix class=\"sfi sfi-close fs-18 fc-black cursor-pointer\" (click)=\"clearSelection()\"></span>\r\n } @else {\r\n <span matSuffix class=\"sfi sfi-arrow-down fs-18 fc-black cursor-pointer\"></span>\r\n }\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayFn\"\r\n autoActiveFirstOption\r\n hideSingleSelectionIndicator\r\n (optionSelected)=\"captureValue($event)\"\r\n >\r\n @if (loading()) {\r\n <mat-option disabled=\"true\">\r\n <ds-icon icon=\"spinner\" class=\"spin fc-coral fs-20\"></ds-icon>\r\n </mat-option>\r\n } @else {\r\n @if (filteredOptions().length) {\r\n @if (multiple()) {\r\n <mat-option (click)=\"toggleAllSelection()\" value=\"_SELECT_ALL_OPTIONS_\">\r\n {{ allSelected() ? \"deselect all\" : \"Select All\" }}\r\n </mat-option>\r\n }\r\n <cdk-virtual-scroll-viewport itemSize=\"5\" [ngStyle]=\"{'height': height()}\">\r\n <mat-option\r\n *cdkVirtualFor=\"let option of filteredOptions()\"\r\n [value]=\"option\"\r\n [ngClass]=\"{'mdc-list-item__selected': option | selectStatus: selectedOptions()}\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n </cdk-virtual-scroll-viewport>\r\n } @else {\r\n <mat-option disabled=\"true\">No Result Found</mat-option>\r\n }\r\n }\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n<mat-chip-grid #chipGrid>\r\n @if (multiple()) {\r\n @for (chip of selectedOptions(); track chip[0]) {\r\n <mat-chip-row (removed)=\"removeFromSelectedOptionsMap(chip[1])\">\r\n {{ chip[1].label }}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + chip[1].label\">\r\n <ds-icon icon=\"trash\" class=\"fc-red\"></ds-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n }\r\n</mat-chip-grid>\r\n", styles: ["::ng-deep .mat-mdc-option.mdc-list-item__selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{--mat-option-selected-state-label-text-color: var(--green);color:var(--green)}\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: "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: i3.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: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "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: i6.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i6.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i6.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i6.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: "pipe", type: SelectStatusPipe, name: "selectStatus" }, { 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"] }] }); }
3514
3667
  }
3515
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ISSCtrlSelectComponent, decorators: [{
3668
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SelectControl, decorators: [{
3516
3669
  type: Component,
3517
3670
  args: [{ selector: "iss-ctrl-select", standalone: true, imports: [
3518
3671
  ReactiveFormsModule,
@@ -3522,55 +3675,66 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
3522
3675
  MatIconModule,
3523
3676
  NgClass,
3524
3677
  SelectStatusPipe,
3678
+ CdkVirtualForOf,
3679
+ CdkVirtualScrollViewport,
3680
+ CdkFixedSizeVirtualScroll,
3681
+ NgStyle,
3525
3682
  ], providers: [
3526
- { provide: NG_VALUE_ACCESSOR, useExisting: ISSCtrlSelectComponent, multi: true },
3527
- { provide: NG_VALIDATORS, useExisting: ISSCtrlSelectComponent, multi: true }
3528
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<mat-form-field floatLabel=\"always\">\r\n <mat-label />\r\n <input [formControl]=\"ctrl\" [matAutocomplete]=\"auto\" class=\"m-0\" [matChipInputFor]=\"chipGrid\" [placeholder]=\"placeholder()\" matInput/>\r\n @if (selectedOptions().size) {\r\n <span matSuffix class=\"sfi sfi-close fs-18 fc-black cursor-pointer\" (click)=\"clearSelection()\"></span>\r\n } @else {\r\n <span matSuffix class=\"sfi sfi-arrow-down fs-18 fc-black cursor-pointer\"></span>\r\n }\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayFn\"\r\n autoActiveFirstOption\r\n hideSingleSelectionIndicator\r\n (optionSelected)=\"getEmissionValue($event)\"\r\n >\r\n @if (filteredOptions().length) {\r\n @for (option of filteredOptions(); track option.value) {\r\n <mat-option\r\n [value]=\"option\"\r\n [ngClass]=\"{'mdc-list-item__selected': option | selectStatus: selectedOptions()}\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n } @else {\r\n <mat-option disabled=\"true\">No Result Found</mat-option>\r\n }\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n<mat-chip-grid #chipGrid>\r\n @if (multiple()) {\r\n @for (chip of selectedOptions(); track chip[0]) {\r\n <mat-chip-row (removed)=\"removeFromSelectedOptionsMap(chip[1])\">\r\n {{ chip[1].label }}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + chip[1].label\">\r\n <ds-icon icon=\"trash\" class=\"fc-red\"></ds-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n }\r\n</mat-chip-grid>\r\n", styles: ["::ng-deep .mat-mdc-option.mdc-list-item__selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{--mat-option-selected-state-label-text-color: var(--green);color:var(--green)}\n"] }]
3683
+ { provide: NG_VALUE_ACCESSOR, useExisting: SelectControl, multi: true },
3684
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<mat-form-field floatLabel=\"always\">\r\n <mat-label/>\r\n <input [formControl]=\"ctrl\" [matAutocomplete]=\"auto\" class=\"m-0\" [matChipInputFor]=\"chipGrid\" [placeholder]=\"placeholder()\" matInput/>\r\n @if (selectedOptions().size) {\r\n <span matSuffix class=\"sfi sfi-close fs-18 fc-black cursor-pointer\" (click)=\"clearSelection()\"></span>\r\n } @else {\r\n <span matSuffix class=\"sfi sfi-arrow-down fs-18 fc-black cursor-pointer\"></span>\r\n }\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayFn\"\r\n autoActiveFirstOption\r\n hideSingleSelectionIndicator\r\n (optionSelected)=\"captureValue($event)\"\r\n >\r\n @if (loading()) {\r\n <mat-option disabled=\"true\">\r\n <ds-icon icon=\"spinner\" class=\"spin fc-coral fs-20\"></ds-icon>\r\n </mat-option>\r\n } @else {\r\n @if (filteredOptions().length) {\r\n @if (multiple()) {\r\n <mat-option (click)=\"toggleAllSelection()\" value=\"_SELECT_ALL_OPTIONS_\">\r\n {{ allSelected() ? \"deselect all\" : \"Select All\" }}\r\n </mat-option>\r\n }\r\n <cdk-virtual-scroll-viewport itemSize=\"5\" [ngStyle]=\"{'height': height()}\">\r\n <mat-option\r\n *cdkVirtualFor=\"let option of filteredOptions()\"\r\n [value]=\"option\"\r\n [ngClass]=\"{'mdc-list-item__selected': option | selectStatus: selectedOptions()}\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n </cdk-virtual-scroll-viewport>\r\n } @else {\r\n <mat-option disabled=\"true\">No Result Found</mat-option>\r\n }\r\n }\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n<mat-chip-grid #chipGrid>\r\n @if (multiple()) {\r\n @for (chip of selectedOptions(); track chip[0]) {\r\n <mat-chip-row (removed)=\"removeFromSelectedOptionsMap(chip[1])\">\r\n {{ chip[1].label }}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + chip[1].label\">\r\n <ds-icon icon=\"trash\" class=\"fc-red\"></ds-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n }\r\n</mat-chip-grid>\r\n", styles: ["::ng-deep .mat-mdc-option.mdc-list-item__selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text{--mat-option-selected-state-label-text-color: var(--green);color:var(--green)}\n"] }]
3529
3685
  }] });
3530
3686
 
3531
- class SlideToggleComponent extends BaseCtrl {
3687
+ class SlideToggleControl extends BaseCtrl {
3532
3688
  onSlideToggleChange(checked) {
3533
3689
  this.emitValue(checked);
3534
3690
  }
3535
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SlideToggleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3536
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: SlideToggleComponent, isStandalone: true, selector: "iss-ctrl-slide-toggle", providers: [
3537
- { provide: NG_VALUE_ACCESSOR, useExisting: SlideToggleComponent, multi: true }
3691
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SlideToggleControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3692
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: SlideToggleControl, isStandalone: true, selector: "iss-ctrl-slide-toggle", providers: [
3693
+ { provide: NG_VALUE_ACCESSOR, useExisting: SlideToggleControl, multi: true }
3538
3694
  ], usesInheritance: true, ngImport: i0, template: "<mat-slide-toggle\r\n class=\"d-block\" [formControl]=\"ctrl\"\r\n (change)=\"onSlideToggleChange($event.checked)\"\r\n></mat-slide-toggle>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1$4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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"] }] }); }
3539
3695
  }
3540
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SlideToggleComponent, decorators: [{
3696
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SlideToggleControl, decorators: [{
3541
3697
  type: Component,
3542
3698
  args: [{ selector: "iss-ctrl-slide-toggle", standalone: true, imports: [MatSlideToggleModule, ReactiveFormsModule], providers: [
3543
- { provide: NG_VALUE_ACCESSOR, useExisting: SlideToggleComponent, multi: true }
3699
+ { provide: NG_VALUE_ACCESSOR, useExisting: SlideToggleControl, multi: true }
3544
3700
  ], template: "<mat-slide-toggle\r\n class=\"d-block\" [formControl]=\"ctrl\"\r\n (change)=\"onSlideToggleChange($event.checked)\"\r\n></mat-slide-toggle>\r\n" }]
3545
3701
  }] });
3546
3702
 
3547
- class CtrlArrayComponent extends BaseCtrl {
3548
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CtrlArrayComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3549
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: CtrlArrayComponent, isStandalone: true, selector: "iss-ctrl-ctrl-array", providers: [
3550
- { provide: NG_VALUE_ACCESSOR, useExisting: CtrlArrayComponent, multi: true }
3703
+ class CtrlArrayControl extends BaseCtrl {
3704
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CtrlArrayControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3705
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: CtrlArrayControl, isStandalone: true, selector: "iss-ctrl-ctrl-array", providers: [
3706
+ { provide: NG_VALUE_ACCESSOR, useExisting: CtrlArrayControl, multi: true }
3551
3707
  ], usesInheritance: true, ngImport: i0, template: "<p>ctrl-array works!</p>\r\n", styles: [""] }); }
3552
3708
  }
3553
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CtrlArrayComponent, decorators: [{
3709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CtrlArrayControl, decorators: [{
3554
3710
  type: Component,
3555
3711
  args: [{ selector: "iss-ctrl-ctrl-array", standalone: true, imports: [], providers: [
3556
- { provide: NG_VALUE_ACCESSOR, useExisting: CtrlArrayComponent, multi: true }
3712
+ { provide: NG_VALUE_ACCESSOR, useExisting: CtrlArrayControl, multi: true }
3557
3713
  ], template: "<p>ctrl-array works!</p>\r\n" }]
3558
3714
  }] });
3559
3715
 
3560
- class TextareaComponent extends BaseCtrl {
3561
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TextareaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3562
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: TextareaComponent, isStandalone: true, selector: "iss-ctrl-textarea", providers: [
3563
- { provide: NG_VALUE_ACCESSOR, useExisting: TextareaComponent, multi: true }
3564
- ], usesInheritance: true, ngImport: i0, template: "<p>textarea works!</p>\r\n", styles: [""] }); }
3716
+ class TextareaControl extends BaseCtrl {
3717
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TextareaControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3718
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: TextareaControl, isStandalone: true, selector: "iss-ctrl-textarea", providers: [
3719
+ { provide: NG_VALUE_ACCESSOR, useExisting: TextareaControl, multi: true },
3720
+ { provide: NG_VALIDATORS, useExisting: TextareaControl, multi: true }
3721
+ ], usesInheritance: true, ngImport: i0, template: "<mat-form-field>\r\n <textarea\r\n matInput\r\n [placeholder]=\"placeholder()\"\r\n [formControl]=\"ctrl\"\r\n [maxlength]=\"max()\"\r\n [minlength]=\"min()\"\r\n (input)=\"emitValue()\"\r\n [disabled]=\"disabled()\"\r\n ></textarea>\r\n <iss-ctrl-hints [hints]=\"hints()\"/>\r\n</mat-form-field>\r\n", styles: [""], 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"], 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: "directive", type: i1$2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
3565
3722
  }
3566
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TextareaComponent, decorators: [{
3723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TextareaControl, decorators: [{
3567
3724
  type: Component,
3568
- args: [{ selector: "iss-ctrl-textarea", standalone: true, imports: [], providers: [
3569
- { provide: NG_VALUE_ACCESSOR, useExisting: TextareaComponent, multi: true }
3570
- ], template: "<p>textarea works!</p>\r\n" }]
3725
+ args: [{ selector: "iss-ctrl-textarea", standalone: true, imports: [
3726
+ MatFormField,
3727
+ MatInput,
3728
+ HintsComponent,
3729
+ FormsModule,
3730
+ ReactiveFormsModule
3731
+ ], providers: [
3732
+ { provide: NG_VALUE_ACCESSOR, useExisting: TextareaControl, multi: true },
3733
+ { provide: NG_VALIDATORS, useExisting: TextareaControl, multi: true }
3734
+ ], template: "<mat-form-field>\r\n <textarea\r\n matInput\r\n [placeholder]=\"placeholder()\"\r\n [formControl]=\"ctrl\"\r\n [maxlength]=\"max()\"\r\n [minlength]=\"min()\"\r\n (input)=\"emitValue()\"\r\n [disabled]=\"disabled()\"\r\n ></textarea>\r\n <iss-ctrl-hints [hints]=\"hints()\"/>\r\n</mat-form-field>\r\n" }]
3571
3735
  }] });
3572
3736
 
3573
- class ToggleButtonComponent extends BaseCtrl {
3737
+ class ToggleButtonControl extends BaseCtrl {
3574
3738
  constructor() {
3575
3739
  super(...arguments);
3576
3740
  this.options = input.required();
@@ -3638,15 +3802,15 @@ class ToggleButtonComponent extends BaseCtrl {
3638
3802
  this.selectedOptions().clear();
3639
3803
  this.ctrl.setValue(null);
3640
3804
  }
3641
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ToggleButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3642
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ToggleButtonComponent, isStandalone: true, selector: "iss-ctrl-toggle-button", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
3643
- { provide: NG_VALUE_ACCESSOR, useExisting: ToggleButtonComponent, multi: true }
3805
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ToggleButtonControl, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3806
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ToggleButtonControl, isStandalone: true, selector: "iss-ctrl-toggle-button", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
3807
+ { provide: NG_VALUE_ACCESSOR, useExisting: ToggleButtonControl, multi: true }
3644
3808
  ], usesInheritance: true, ngImport: i0, template: "<mat-button-toggle-group\r\n [formControl]=\"ctrl\"\r\n [multiple]=multiple()\r\n [hideMultipleSelectionIndicator]=\"true\"\r\n [hideSingleSelectionIndicator]=\"true\"\r\n>\r\n @for (option of options(); track option.value) {\r\n <mat-button-toggle\r\n class=\"d-block\"\r\n [value]=\"option.value\"\r\n (change)=\"onToggleButtonChange($event.source.checked,option.value\r\n )\"\r\n >{{ option.label }}\r\n </mat-button-toggle>\r\n }\r\n</mat-button-toggle-group>\r\n", styles: [".mat-button-toggle-group-appearance-standard{border-radius:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i1$5.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i1$5.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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"] }] }); }
3645
3809
  }
3646
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ToggleButtonComponent, decorators: [{
3810
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ToggleButtonControl, decorators: [{
3647
3811
  type: Component,
3648
3812
  args: [{ selector: "iss-ctrl-toggle-button", standalone: true, imports: [MatButtonToggleModule, ReactiveFormsModule], providers: [
3649
- { provide: NG_VALUE_ACCESSOR, useExisting: ToggleButtonComponent, multi: true }
3813
+ { provide: NG_VALUE_ACCESSOR, useExisting: ToggleButtonControl, multi: true }
3650
3814
  ], template: "<mat-button-toggle-group\r\n [formControl]=\"ctrl\"\r\n [multiple]=multiple()\r\n [hideMultipleSelectionIndicator]=\"true\"\r\n [hideSingleSelectionIndicator]=\"true\"\r\n>\r\n @for (option of options(); track option.value) {\r\n <mat-button-toggle\r\n class=\"d-block\"\r\n [value]=\"option.value\"\r\n (change)=\"onToggleButtonChange($event.source.checked,option.value\r\n )\"\r\n >{{ option.label }}\r\n </mat-button-toggle>\r\n }\r\n</mat-button-toggle-group>\r\n", styles: [".mat-button-toggle-group-appearance-standard{border-radius:unset!important}\n"] }]
3651
3815
  }] });
3652
3816
 
@@ -3654,5 +3818,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
3654
3818
  * Generated bundle index. Do not edit.
3655
3819
  */
3656
3820
 
3657
- export { AutocompleteComponent, CheckboxComponent, ChipsComponent, CtrlArrayComponent, DEFAULT_COUNTRY, DatePickerComponent, DateRangePickerComponent, DatetimePickerComponent, DatetimeRangePickerComponent, FilePickerComponent, ISSCtrlSelectComponent, InputComponent, MobileComponent, NoteComponent, PlateNumberComponent, RadioComponent, SlideToggleComponent, TextareaComponent, TimePickerComponent, ToggleButtonComponent };
3821
+ export { AutocompleteControl, CheckboxControl, ChipsControl, CtrlArrayControl, DEFAULT_COUNTRY, DatePickerControl, DateRangePickerControl, DatetimePickerControl, DatetimeRangePickerControl, FilePickerControl, InputControl, MobileControl, NoteControl, PlateControl, RadioControl, SelectControl, SlideToggleControl, TextareaControl, TimePickerControl, ToggleButtonControl };
3658
3822
  //# sourceMappingURL=iss-ctrl.mjs.map