@sumaris-net/ngx-components 18.25.19 → 18.26.0

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 (29) hide show
  1. package/doc/changelog.md +4 -0
  2. package/esm2022/public_api.mjs +9 -3
  3. package/esm2022/src/app/core/core.module.mjs +5 -1
  4. package/esm2022/src/app/core/core.testing.module.mjs +19 -5
  5. package/esm2022/src/app/core/icon/icon-selector.field.mjs +94 -0
  6. package/esm2022/src/app/core/icon/icon-selector.modal.mjs +71 -0
  7. package/esm2022/src/app/core/icon/icon-selector.module.mjs +23 -0
  8. package/esm2022/src/app/core/icon/icon-selector.service.mjs +62 -0
  9. package/esm2022/src/app/core/icon/testing/icon-selector.test.mjs +44 -0
  10. package/esm2022/src/app/core/icon/testing/icon-selector.testing.module.mjs +30 -0
  11. package/esm2022/src/app/shared/image/gallery/slideshow/image-gallery-slideshow.component.mjs +8 -3
  12. package/fesm2022/sumaris-net.ngx-components.mjs +404 -123
  13. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  14. package/package.json +1 -1
  15. package/public_api.d.ts +8 -2
  16. package/src/app/core/core.module.d.ts +2 -1
  17. package/src/app/core/core.testing.module.d.ts +2 -1
  18. package/src/app/core/icon/icon-selector.field.d.ts +28 -0
  19. package/src/app/core/icon/icon-selector.modal.d.ts +23 -0
  20. package/src/app/core/icon/icon-selector.module.d.ts +12 -0
  21. package/src/app/core/icon/icon-selector.service.d.ts +40 -0
  22. package/src/app/core/icon/testing/icon-selector.test.d.ts +19 -0
  23. package/src/app/core/icon/testing/icon-selector.testing.module.d.ts +12 -0
  24. package/src/app/shared/inputs.d.ts +1 -1
  25. package/src/assets/i18n/en-US.json +9 -2
  26. package/src/assets/i18n/en.json +9 -2
  27. package/src/assets/i18n/fr.json +9 -2
  28. package/src/assets/icons-ref.json +21373 -0
  29. package/src/assets/manifest.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Directive, Pipe, Injectable, EventEmitter, Output, Optional, Inject, inject, NgModule, forwardRef, booleanAttribute, ViewChildren, Input, ChangeDetectionStrategy, Component, HostListener, HostBinding, ElementRef, numberAttribute, ViewChild, ANIMATION_MODULE_TYPE, RendererStyleFlags2, TemplateRef, ContentChild, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectorRef, Self, ViewEncapsulation, Injector, APP_INITIALIZER, DestroyRef, input, output, Renderer2, effect, signal, SecurityContext, EnvironmentInjector, runInInjectionContext, viewChildren, viewChild, model, computed, untracked } from '@angular/core';
3
- import { firstValueFrom, shareReplay, tap, of, timer, Subject, merge, delay, isObservable, from, Subscription, BehaviorSubject, fromEvent, noop as noop$9, Observable, forkJoin, timeout, defer, combineLatest, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, mergeMap as mergeMap$1, switchMap as switchMap$1, EMPTY, interval } from 'rxjs';
2
+ import { InjectionToken, Directive, Pipe, Injectable, EventEmitter, Output, Optional, Inject, inject, NgModule, forwardRef, booleanAttribute, ViewChildren, Input, ChangeDetectionStrategy, Component, HostListener, HostBinding, ElementRef, numberAttribute, ViewChild, ANIMATION_MODULE_TYPE, RendererStyleFlags2, TemplateRef, ContentChild, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectorRef, Self, ViewEncapsulation, Injector, APP_INITIALIZER, signal, DestroyRef, input, output, Renderer2, effect, SecurityContext, EnvironmentInjector, runInInjectionContext, viewChildren, viewChild, model, computed, untracked } from '@angular/core';
3
+ import { firstValueFrom, shareReplay, tap, of, timer, Subject, merge, delay, isObservable, from, Subscription, BehaviorSubject, fromEvent, noop as noop$a, Observable, forkJoin, timeout, defer, combineLatest, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, mergeMap as mergeMap$1, switchMap as switchMap$1, EMPTY, interval } from 'rxjs';
4
4
  import { catchError, map, filter, takeUntil, first, switchMap, tap as tap$1, throttleTime, debounceTime, startWith, distinctUntilChanged, mergeMap, skip, finalize, distinctUntilKeyChanged, take } from 'rxjs/operators';
5
5
  import * as cloneImported from 'clone';
6
6
  import * as i3$1 from '@angular/common';
@@ -28,14 +28,14 @@ import { MatBadge, MatBadgeModule } from '@angular/material/badge';
28
28
  import * as i1$1 from '@ngx-translate/core';
29
29
  import { TranslateService, TranslateModule, TranslateDirective, TranslatePipe } from '@ngx-translate/core';
30
30
  import * as i2$1 from '@ionic/angular';
31
- import { IonicModule, Platform, ToastController, IonicSafeString, IonicRouteStrategy, IonicSlides, NavController, IonContent, IonItem, ModalController, PopoverController, AlertController, IonRouterOutlet, IonModal, IonInfiniteScroll } from '@ionic/angular';
31
+ import { IonicModule, Platform, ToastController, IonicSafeString, IonicRouteStrategy, ModalController, IonicSlides, NavController, IonContent, IonItem, PopoverController, AlertController, IonRouterOutlet, IonModal, IonInfiniteScroll } from '@ionic/angular';
32
32
  import * as momentImported from 'moment';
33
33
  import { isMoment, locale, now } from 'moment';
34
34
  import * as i1 from '@angular/material-moment-adapter';
35
35
  import { MatMomentDateModule } from '@angular/material-moment-adapter';
36
36
  import { isMoment as isMoment$1 } from 'moment/moment';
37
37
  import * as i1$3 from '@angular/forms';
38
- import { AbstractControl, UntypedFormArray, UntypedFormGroup, FormGroup, FormArray, UntypedFormControl, FormControl, Validators, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormBuilder, FormsModule, NgControl } from '@angular/forms';
38
+ import { AbstractControl, UntypedFormArray, UntypedFormGroup, FormGroup, FormArray, UntypedFormControl, FormControl, Validators, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormBuilder, FormGroupDirective, FormsModule, NgControl } from '@angular/forms';
39
39
  import { maskitoWithPlaceholder, maskitoEventHandler, maskitoDateOptionsGenerator, maskitoTimeOptionsGenerator, maskitoNumberOptionsGenerator } from '@maskito/kit';
40
40
  import * as i1$2 from '@angular/platform-browser';
41
41
  import { HammerGestureConfig, HammerModule } from '@angular/platform-browser';
@@ -152,9 +152,9 @@ import { EdgeToEdge } from '@capawesome/capacitor-android-edge-to-edge-support';
152
152
  import * as i2$6 from '@angular/cdk/platform';
153
153
  import * as i3$5 from '@angular/cdk/clipboard';
154
154
  import { select } from '@rx-angular/state/selections';
155
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
155
156
  import { isDataSource, SelectionModel } from '@angular/cdk/collections';
156
157
  import { CameraSource, Camera, CameraResultType } from '@capacitor/camera';
157
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
158
158
  import { Geolocation } from '@capacitor/geolocation';
159
159
  import * as i1$8 from '@e-is/ngx-material-table';
160
160
  import { ValidatorService, TableDataSource, AsyncTableDataSource } from '@e-is/ngx-material-table';
@@ -6758,7 +6758,7 @@ const DEFAULT_VALUE_ACCESSOR$6 = {
6758
6758
  };
6759
6759
  const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
6760
6760
  const DURATION_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
6761
- const noop$8 = () => { };
6761
+ const noop$9 = () => { };
6762
6762
  class MatDuration {
6763
6763
  dateAdapter;
6764
6764
  translate;
@@ -6766,8 +6766,8 @@ class MatDuration {
6766
6766
  cd;
6767
6767
  formGroupDir;
6768
6768
  _subscription = new Subscription();
6769
- _onChangeCallback = noop$8;
6770
- _onTouchedCallback = noop$8;
6769
+ _onChangeCallback = noop$9;
6770
+ _onTouchedCallback = noop$9;
6771
6771
  writing = true;
6772
6772
  disabling = false;
6773
6773
  _tabindex;
@@ -7487,12 +7487,12 @@ const DEFAULT_VALUE_ACCESSOR$5 = {
7487
7487
  useExisting: forwardRef(() => MatBooleanField),
7488
7488
  multi: true,
7489
7489
  };
7490
- const noop$7 = () => { };
7490
+ const noop$8 = () => { };
7491
7491
  class MatBooleanField {
7492
7492
  cd;
7493
7493
  formGroupDir;
7494
- _onChangeCallback = noop$7;
7495
- _onTouchedCallback = noop$7;
7494
+ _onChangeCallback = noop$8;
7495
+ _onTouchedCallback = noop$8;
7496
7496
  _subscription = new Subscription();
7497
7497
  _writing = false;
7498
7498
  _value;
@@ -9288,7 +9288,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
9288
9288
  }]
9289
9289
  }] });
9290
9290
 
9291
- const noop$6 = () => { };
9291
+ const noop$7 = () => { };
9292
9292
  const DEFAULT_VALUE_ACCESSOR$4 = {
9293
9293
  provide: NG_VALUE_ACCESSOR,
9294
9294
  useExisting: forwardRef(() => MatAutocompleteField),
@@ -9301,8 +9301,8 @@ class MatAutocompleteField {
9301
9301
  modalController;
9302
9302
  renderer;
9303
9303
  formGroupDir;
9304
- _onChangeCallback = noop$6;
9305
- _onTouchedCallback = noop$6;
9304
+ _onChangeCallback = noop$7;
9305
+ _onTouchedCallback = noop$7;
9306
9306
  _onFetchMoreCallback;
9307
9307
  _implicitValue;
9308
9308
  _subscription = new Subscription();
@@ -10709,15 +10709,15 @@ const DEFAULT_VALUE_ACCESSOR$3 = {
10709
10709
  multi: true,
10710
10710
  };
10711
10711
  const I18N_KEYS$2 = ['COMMON.DATE_PATTERN', 'COMMON.DATE_PLACEHOLDER'];
10712
- const noop$5 = () => { };
10712
+ const noop$6 = () => { };
10713
10713
  class MatDate {
10714
10714
  dateAdapter;
10715
10715
  translate;
10716
10716
  formBuilder;
10717
10717
  cd;
10718
10718
  formGroupDir;
10719
- _onChangeCallback = noop$5;
10720
- _onTouchedCallback = noop$5;
10719
+ _onChangeCallback = noop$6;
10720
+ _onTouchedCallback = noop$6;
10721
10721
  _subscription = new Subscription();
10722
10722
  _writing = true;
10723
10723
  _disabling = false;
@@ -11159,7 +11159,7 @@ const I18N_KEYS$1 = [
11159
11159
  'COMMON.TIME_PLACEHOLDER',
11160
11160
  'COMMON.HOUR_PATTERN',
11161
11161
  ];
11162
- const noop$4 = () => { };
11162
+ const noop$5 = () => { };
11163
11163
  class MatDateTime {
11164
11164
  dateAdapter;
11165
11165
  translate;
@@ -11167,8 +11167,8 @@ class MatDateTime {
11167
11167
  renderer;
11168
11168
  cd;
11169
11169
  formGroupDir;
11170
- _onChangeCallback = noop$4;
11171
- _onTouchedCallback = noop$4;
11170
+ _onChangeCallback = noop$5;
11171
+ _onTouchedCallback = noop$5;
11172
11172
  _subscription = new Subscription();
11173
11173
  _controlSubscription;
11174
11174
  _writing = true;
@@ -11971,7 +11971,7 @@ const DEFAULT_VALUE_ACCESSOR$1 = {
11971
11971
  useExisting: forwardRef(() => MatDateShort),
11972
11972
  multi: true,
11973
11973
  };
11974
- const noop$3 = () => { };
11974
+ const noop$4 = () => { };
11975
11975
  const I18N_KEYS = ['COMMON.DATE_YEAR_PATTERN', 'COMMON.DATE_YEAR_PLACEHOLDER'];
11976
11976
  class MatDateShort {
11977
11977
  dateAdapter;
@@ -11979,8 +11979,8 @@ class MatDateShort {
11979
11979
  formBuilder;
11980
11980
  cd;
11981
11981
  formGroupDir;
11982
- _onChangeCallback = noop$3;
11983
- _onTouchedCallback = noop$3;
11982
+ _onChangeCallback = noop$4;
11983
+ _onTouchedCallback = noop$4;
11984
11984
  _subscription = new Subscription();
11985
11985
  _writing = true;
11986
11986
  _disabling = false;
@@ -12455,8 +12455,8 @@ const DEFAULT_VALUE_ACCESSOR = {
12455
12455
  class MatSwipeField {
12456
12456
  cd;
12457
12457
  formGroupDir;
12458
- _onChangeCallback = noop$9;
12459
- _onTouchedCallback = noop$9;
12458
+ _onChangeCallback = noop$a;
12459
+ _onTouchedCallback = noop$a;
12460
12460
  _value;
12461
12461
  _subscription = new Subscription();
12462
12462
  _itemsSubscription;
@@ -12849,12 +12849,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
12849
12849
  }]
12850
12850
  }] });
12851
12851
 
12852
- const noop$2 = () => { };
12852
+ const noop$3 = () => { };
12853
12853
  class MatChipsField {
12854
12854
  cd;
12855
12855
  formGroupDir;
12856
- _onChangeCallback = noop$2;
12857
- _onTouchedCallback = noop$2;
12856
+ _onChangeCallback = noop$3;
12857
+ _onTouchedCallback = noop$3;
12858
12858
  _onFetchMoreCallback;
12859
12859
  _implicitValue;
12860
12860
  _subscription = new Subscription();
@@ -14851,14 +14851,14 @@ function isLightColor(color) {
14851
14851
  return getColorLuminance(color) > 186;
14852
14852
  }
14853
14853
 
14854
- const noop$1 = () => { };
14854
+ const noop$2 = () => { };
14855
14855
  class AppFormField {
14856
14856
  translate;
14857
14857
  cd;
14858
14858
  injector;
14859
14859
  formGroupDir;
14860
- _onChangeCallback = noop$1;
14861
- _onTouchedCallback = noop$1;
14860
+ _onChangeCallback = noop$2;
14861
+ _onTouchedCallback = noop$2;
14862
14862
  _definition;
14863
14863
  _values;
14864
14864
  type;
@@ -19570,7 +19570,7 @@ function isSameVersion(v1, v2) {
19570
19570
  return compareVersionNumbers(v1, v2) === 0;
19571
19571
  }
19572
19572
 
19573
- const noop = () => { };
19573
+ const noop$1 = () => { };
19574
19574
  class TextForm extends AppForm {
19575
19575
  injector;
19576
19576
  cd;
@@ -19605,8 +19605,8 @@ class TextForm extends AppForm {
19605
19605
  textInput;
19606
19606
  autosizeDirective;
19607
19607
  textControl;
19608
- _onChangeCallback = noop;
19609
- _onTouchedCallback = noop;
19608
+ _onChangeCallback = noop$1;
19609
+ _onTouchedCallback = noop$1;
19610
19610
  constructor(injector, cd, formBuilder, formGroupDir) {
19611
19611
  super(injector);
19612
19612
  this.injector = injector;
@@ -28313,6 +28313,260 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
28313
28313
  }]
28314
28314
  }] });
28315
28315
 
28316
+ /**
28317
+ * Service de chargement et de filtrage des icônes disponibles.
28318
+ * Charge le fichier assets/icons-ref.json en lazy (une seule fois).
28319
+ */
28320
+ class IconSelectorService {
28321
+ http;
28322
+ _ionic = signal([]);
28323
+ _material = signal([]);
28324
+ _ready = false;
28325
+ _readyPromise = null;
28326
+ ionicIcons = this._ionic.asReadonly();
28327
+ materialIcons = this._material.asReadonly();
28328
+ constructor(http) {
28329
+ this.http = http;
28330
+ }
28331
+ ready() {
28332
+ if (this._ready)
28333
+ return Promise.resolve();
28334
+ if (this._readyPromise)
28335
+ return this._readyPromise;
28336
+ this._readyPromise = firstValueFrom(this.http.get('assets/icons-ref.json')).then((data) => {
28337
+ this._ionic.set(data.ionic || []);
28338
+ this._material.set(data.material || []);
28339
+ this._ready = true;
28340
+ });
28341
+ return this._readyPromise;
28342
+ }
28343
+ /**
28344
+ * Convertit un IconEntry en IconRef selon son origine.
28345
+ */
28346
+ toIconRef(entry, origin) {
28347
+ if (origin === 'ionic') {
28348
+ return { icon: entry.name };
28349
+ }
28350
+ return { matIcon: entry.name };
28351
+ }
28352
+ /**
28353
+ * Filtre les icônes par texte de recherche.
28354
+ * Cherche dans le nom, le label, et les mots-clés.
28355
+ * Insensible à la casse.
28356
+ */
28357
+ search(searchText, origin) {
28358
+ const icons = origin === 'ionic' ? this._ionic() : this._material();
28359
+ const q = (searchText || '').trim().toLowerCase();
28360
+ if (!q)
28361
+ return icons;
28362
+ return icons.filter((entry) => entry.name.toLowerCase().includes(q) ||
28363
+ entry.label.toLowerCase().includes(q) ||
28364
+ (entry.keywords || []).some((kw) => kw.includes(q)));
28365
+ }
28366
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorService, deps: [{ token: i2$3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
28367
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorService, providedIn: 'root' });
28368
+ }
28369
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorService, decorators: [{
28370
+ type: Injectable,
28371
+ args: [{ providedIn: 'root' }]
28372
+ }], ctorParameters: () => [{ type: i2$3.HttpClient }] });
28373
+
28374
+ class AppIconSelectorModal {
28375
+ title = 'ICON_SELECTOR.TITLE';
28376
+ ionicTabIndex = 0;
28377
+ materialTabIndex = 1;
28378
+ searchText = '';
28379
+ ionicFiltered = [];
28380
+ materialFiltered = [];
28381
+ selectedIndex = 0;
28382
+ loading = true;
28383
+ searchSubject = new Subject();
28384
+ iconService = inject(IconSelectorService);
28385
+ viewCtrl = inject(ModalController);
28386
+ cdr = inject(ChangeDetectorRef);
28387
+ constructor() {
28388
+ this.loadIcons();
28389
+ this.searchSubject
28390
+ .pipe(debounceTime$1(150), distinctUntilChanged$1(), takeUntilDestroyed())
28391
+ .subscribe((value) => {
28392
+ this.ionicFiltered = this.iconService.search(value, 'ionic');
28393
+ this.materialFiltered = this.iconService.search(value, 'material');
28394
+ this.cdr.markForCheck();
28395
+ });
28396
+ }
28397
+ async loadIcons() {
28398
+ await this.iconService.ready();
28399
+ this.ionicFiltered = this.iconService.ionicIcons();
28400
+ this.materialFiltered = this.iconService.materialIcons();
28401
+ this.loading = false;
28402
+ this.cdr.markForCheck();
28403
+ }
28404
+ onSearchChange(value) {
28405
+ this.searchText = value;
28406
+ this.searchSubject.next(value);
28407
+ }
28408
+ selectIcon(entry, origin) {
28409
+ const ref = this.iconService.toIconRef(entry, origin);
28410
+ this.viewCtrl.dismiss(ref);
28411
+ }
28412
+ cancel() {
28413
+ this.viewCtrl.dismiss(null);
28414
+ }
28415
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
28416
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AppIconSelectorModal, selector: "app-icon-selector-modal", inputs: { title: "title" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar>\n <ion-title>{{ title | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <!-- Barre de recherche -->\n <div class=\"search-bar\">\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <mat-label translate>COMMON.SEARCH</mat-label>\n <input matInput type=\"text\" [ngModel]=\"searchText\" (ngModelChange)=\"onSearchChange($event)\" [placeholder]=\"'COMMON.SEARCH_PLACEHOLDER' | translate\" autofocus>\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- Onglets Ionic / Material -->\n <mat-tab-group [(selectedIndex)]=\"selectedIndex\" *ngIf=\"!loading\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_IONIC' | translate }}\n <span class=\"badge\" [matBadge]=\"ionicFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"primary\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === ionicTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of ionicFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'ionic')\"\n class=\"icon-btn\">\n <ion-icon [name]=\"entry.name\" size=\"large\"></ion-icon>\n </button>\n <div *ngIf=\"ionicFiltered.length === 0\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_MATERIAL' | translate }}\n <span class=\"badge\" [matBadge]=\"materialFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"accent\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === materialTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of materialFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'material')\"\n class=\"icon-btn\">\n <mat-icon>{{ entry.name }}</mat-icon>\n </button>\n <div *ngIf=\"materialFiltered.length === 0\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <app-loading-spinner *ngIf=\"loading\"></app-loading-spinner>\n</ion-content>", styles: [".search-bar{padding:8px 16px 0}.search-field{width:100%}.icon-grid{display:flex;flex-wrap:wrap;gap:4px;padding:8px;max-height:60vh;overflow-y:auto;justify-content:center}.icon-btn{width:44px;height:44px;line-height:44px;border-radius:8px;transition:background-color .15s ease}.icon-btn:hover{background-color:rgba(var(--ion-color-primary-rgb),.12)}.icon-btn:active{background-color:rgba(var(--ion-color-primary-rgb),.24)}.no-results{width:100%;text-align:center;padding:32px 16px;color:var(--ion-color-medium);font-style:italic}.badge{margin-left:4px}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2$1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2$1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2$1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i1$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i8.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i8.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i8.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i13$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i1$5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: AppLoadingSpinner, selector: "app-loading-spinner", inputs: ["loading", "color", "name"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: BadgeNumberPipe, name: "badgeNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28417
+ }
28418
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorModal, decorators: [{
28419
+ type: Component,
28420
+ args: [{ selector: 'app-icon-selector-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar>\n <ion-title>{{ title | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <!-- Barre de recherche -->\n <div class=\"search-bar\">\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <mat-label translate>COMMON.SEARCH</mat-label>\n <input matInput type=\"text\" [ngModel]=\"searchText\" (ngModelChange)=\"onSearchChange($event)\" [placeholder]=\"'COMMON.SEARCH_PLACEHOLDER' | translate\" autofocus>\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- Onglets Ionic / Material -->\n <mat-tab-group [(selectedIndex)]=\"selectedIndex\" *ngIf=\"!loading\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_IONIC' | translate }}\n <span class=\"badge\" [matBadge]=\"ionicFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"primary\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === ionicTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of ionicFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'ionic')\"\n class=\"icon-btn\">\n <ion-icon [name]=\"entry.name\" size=\"large\"></ion-icon>\n </button>\n <div *ngIf=\"ionicFiltered.length === 0\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_MATERIAL' | translate }}\n <span class=\"badge\" [matBadge]=\"materialFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"accent\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === materialTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of materialFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'material')\"\n class=\"icon-btn\">\n <mat-icon>{{ entry.name }}</mat-icon>\n </button>\n <div *ngIf=\"materialFiltered.length === 0\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <app-loading-spinner *ngIf=\"loading\"></app-loading-spinner>\n</ion-content>", styles: [".search-bar{padding:8px 16px 0}.search-field{width:100%}.icon-grid{display:flex;flex-wrap:wrap;gap:4px;padding:8px;max-height:60vh;overflow-y:auto;justify-content:center}.icon-btn{width:44px;height:44px;line-height:44px;border-radius:8px;transition:background-color .15s ease}.icon-btn:hover{background-color:rgba(var(--ion-color-primary-rgb),.12)}.icon-btn:active{background-color:rgba(var(--ion-color-primary-rgb),.24)}.no-results{width:100%;text-align:center;padding:32px 16px;color:var(--ion-color-medium);font-style:italic}.badge{margin-left:4px}\n"] }]
28421
+ }], ctorParameters: () => [], propDecorators: { title: [{
28422
+ type: Input
28423
+ }] } });
28424
+
28425
+ class AppIconComponent {
28426
+ icon = null;
28427
+ matIcon = null;
28428
+ matSvgIcon = null;
28429
+ color = null;
28430
+ height;
28431
+ width;
28432
+ set ref(value) {
28433
+ this.icon = value.icon;
28434
+ this.matIcon = value.matIcon;
28435
+ this.matSvgIcon = value.matSvgIcon;
28436
+ this.color = value.color || this.color; // Keep existing, if not defined in the reference
28437
+ }
28438
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28439
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AppIconComponent, selector: "app-icon", inputs: { icon: "icon", matIcon: "matIcon", matSvgIcon: "matSvgIcon", color: "color", height: "height", width: "width", ref: "ref" }, ngImport: i0, template: "<ion-icon\n *ngIf=\"icon; else matIconTemplate\"\n slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n></ion-icon>\n<ng-template #matIconTemplate>\n <mat-icon\n [svgIcon]=\"matSvgIcon\"\n [style.color]=\"'var(--ion-color-' + color + ')'\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n [style.font-size.px]=\"height || width\"\n >\n {{ matIcon }}\n </mat-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
28440
+ }
28441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconComponent, decorators: [{
28442
+ type: Component,
28443
+ args: [{ selector: 'app-icon', template: "<ion-icon\n *ngIf=\"icon; else matIconTemplate\"\n slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n></ion-icon>\n<ng-template #matIconTemplate>\n <mat-icon\n [svgIcon]=\"matSvgIcon\"\n [style.color]=\"'var(--ion-color-' + color + ')'\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n [style.font-size.px]=\"height || width\"\n >\n {{ matIcon }}\n </mat-icon>\n</ng-template>\n" }]
28444
+ }], propDecorators: { icon: [{
28445
+ type: Input
28446
+ }], matIcon: [{
28447
+ type: Input
28448
+ }], matSvgIcon: [{
28449
+ type: Input
28450
+ }], color: [{
28451
+ type: Input
28452
+ }], height: [{
28453
+ type: Input
28454
+ }], width: [{
28455
+ type: Input
28456
+ }], ref: [{
28457
+ type: Input
28458
+ }] } });
28459
+
28460
+ const noop = (_) => { };
28461
+ class AppIconSelectorField {
28462
+ _onChange = noop;
28463
+ _onTouched = noop;
28464
+ modalCtrl = inject(ModalController);
28465
+ formGroupDir = inject(FormGroupDirective, { optional: true });
28466
+ value = null;
28467
+ disabled = false;
28468
+ formControl;
28469
+ formControlName;
28470
+ placeholder = '';
28471
+ floatLabel = 'auto';
28472
+ appearance;
28473
+ subscriptSizing;
28474
+ ngOnInit() {
28475
+ this.formControl =
28476
+ this.formControl || (this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName));
28477
+ if (!this.formControl)
28478
+ throw new Error("Missing mandatory attribute 'formControl' or 'formControlName' in <app-icon-selector-field>.");
28479
+ }
28480
+ writeValue(obj) {
28481
+ this.value = obj;
28482
+ }
28483
+ registerOnChange(fn) {
28484
+ this._onChange = fn;
28485
+ }
28486
+ registerOnTouched(fn) {
28487
+ this._onTouched = fn;
28488
+ }
28489
+ setDisabledState(isDisabled) {
28490
+ this.disabled = isDisabled;
28491
+ }
28492
+ async openSelector() {
28493
+ if (this.disabled)
28494
+ return;
28495
+ const modal = await this.modalCtrl.create({
28496
+ component: AppIconSelectorModal,
28497
+ componentProps: { title: 'ICON_SELECTOR.TITLE' },
28498
+ });
28499
+ await modal.present();
28500
+ const result = await modal.onDidDismiss();
28501
+ if (result.data !== undefined) {
28502
+ this.value = result.data;
28503
+ this._onChange(result.data);
28504
+ this._onTouched();
28505
+ }
28506
+ }
28507
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorField, deps: [], target: i0.ɵɵFactoryTarget.Component });
28508
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AppIconSelectorField, selector: "app-icon-selector-field", inputs: { disabled: ["disabled", "disabled", booleanAttribute], formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", subscriptSizing: "subscriptSizing" }, providers: [
28509
+ {
28510
+ provide: NG_VALUE_ACCESSOR,
28511
+ useExisting: forwardRef(() => AppIconSelectorField),
28512
+ multi: true,
28513
+ },
28514
+ ], ngImport: i0, template: "<mat-form-field [floatLabel]=\"value && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\">\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\"/>\n @if (value) {\n <app-icon [ref]=\"value\"></app-icon>\n }\n\n <!-- open selector modal -->\n <button mat-icon-button matSuffix\n type=\"button\"\n [disabled]=\"disabled\"\n (click)=\"openSelector()\"\n class=\"icon-selector-btn\">\n <mat-icon>list</mat-icon>\n </button>\n</mat-form-field>\n", dependencies: [{ kind: "directive", type: i1$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["icon", "matIcon", "matSvgIcon", "color", "height", "width", "ref"] }, { kind: "pipe", type: AsFloatLabelTypePipe, name: "asFloatLabelType" }] });
28515
+ }
28516
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorField, decorators: [{
28517
+ type: Component,
28518
+ args: [{ selector: 'app-icon-selector-field', providers: [
28519
+ {
28520
+ provide: NG_VALUE_ACCESSOR,
28521
+ useExisting: forwardRef(() => AppIconSelectorField),
28522
+ multi: true,
28523
+ },
28524
+ ], template: "<mat-form-field [floatLabel]=\"value && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\">\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\"/>\n @if (value) {\n <app-icon [ref]=\"value\"></app-icon>\n }\n\n <!-- open selector modal -->\n <button mat-icon-button matSuffix\n type=\"button\"\n [disabled]=\"disabled\"\n (click)=\"openSelector()\"\n class=\"icon-selector-btn\">\n <mat-icon>list</mat-icon>\n </button>\n</mat-form-field>\n" }]
28525
+ }], propDecorators: { disabled: [{
28526
+ type: Input,
28527
+ args: [{ transform: booleanAttribute }]
28528
+ }], formControl: [{
28529
+ type: Input
28530
+ }], formControlName: [{
28531
+ type: Input
28532
+ }], placeholder: [{
28533
+ type: Input
28534
+ }], floatLabel: [{
28535
+ type: Input
28536
+ }], appearance: [{
28537
+ type: Input
28538
+ }], subscriptSizing: [{
28539
+ type: Input
28540
+ }] } });
28541
+
28542
+ class AppIconModule {
28543
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
28544
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, declarations: [AppIconComponent], imports: [SharedModule, TranslateModule], exports: [AppIconComponent] });
28545
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, imports: [SharedModule, TranslateModule] });
28546
+ }
28547
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, decorators: [{
28548
+ type: NgModule,
28549
+ args: [{
28550
+ imports: [SharedModule, TranslateModule],
28551
+ declarations: [AppIconComponent],
28552
+ exports: [AppIconComponent],
28553
+ }]
28554
+ }] });
28555
+
28556
+ class AppIconSelectorModule {
28557
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
28558
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorModule, declarations: [AppIconSelectorModal, AppIconSelectorField], imports: [SharedModule, i1$1.TranslateModule, AppIconModule, FormsModule], exports: [AppIconSelectorModal, AppIconSelectorField, AppIconModule] });
28559
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorModule, imports: [SharedModule, TranslateModule.forChild(), AppIconModule, FormsModule, AppIconModule] });
28560
+ }
28561
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorModule, decorators: [{
28562
+ type: NgModule,
28563
+ args: [{
28564
+ imports: [SharedModule, TranslateModule.forChild(), AppIconModule, FormsModule],
28565
+ declarations: [AppIconSelectorModal, AppIconSelectorField],
28566
+ exports: [AppIconSelectorModal, AppIconSelectorField, AppIconModule],
28567
+ }]
28568
+ }] });
28569
+
28316
28570
  let ProgressInterceptor = class ProgressInterceptor {
28317
28571
  progressBarService;
28318
28572
  constructor(progressBarService) {
@@ -28464,9 +28718,14 @@ class AppImageGallerySlideshowComponent {
28464
28718
  }
28465
28719
  onSwiperInit(swiperElement) {
28466
28720
  this._resetZoom();
28467
- // The `initialSlide` param (bound in the template) already positions Swiper on the right slide
28468
- // as soon as it is constructed, so just sync our own index from the actual Swiper state.
28469
28721
  const swiper = this.getSwiper(swiperElement);
28722
+ // The `initialSlide` binding can NOT work here: Angular inserts <swiper-container> into the DOM (which
28723
+ // synchronously runs its connectedCallback, constructing the Swiper instance and reading `initialSlide`
28724
+ // off the element) *before* it applies property bindings in its update pass -- so Swiper always reads
28725
+ // `initialSlide` as unset (0). It must be corrected explicitly, once Swiper actually exists.
28726
+ if (swiper && this.selectedIndex > 0 && swiper.activeIndex !== this.selectedIndex) {
28727
+ swiper.slideTo(this.selectedIndex, 0 /*no transition, to avoid a "revert" effect*/);
28728
+ }
28470
28729
  this.activeSlideIndex = swiper?.activeIndex ?? this.selectedIndex;
28471
28730
  if (this.debug)
28472
28731
  console.debug(`[image-gallery-slideshow] Initializing slideshow, activeSlideIndex=${this.activeSlideIndex}`);
@@ -34257,55 +34516,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
34257
34516
  }]
34258
34517
  }] });
34259
34518
 
34260
- class AppIconComponent {
34261
- icon = null;
34262
- matIcon = null;
34263
- matSvgIcon = null;
34264
- color = null;
34265
- height;
34266
- width;
34267
- set ref(value) {
34268
- this.icon = value.icon;
34269
- this.matIcon = value.matIcon;
34270
- this.matSvgIcon = value.matSvgIcon;
34271
- this.color = value.color || this.color; // Keep existing, if not defined in the reference
34272
- }
34273
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34274
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AppIconComponent, selector: "app-icon", inputs: { icon: "icon", matIcon: "matIcon", matSvgIcon: "matSvgIcon", color: "color", height: "height", width: "width", ref: "ref" }, ngImport: i0, template: "<ion-icon\n *ngIf=\"icon; else matIconTemplate\"\n slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n></ion-icon>\n<ng-template #matIconTemplate>\n <mat-icon\n [svgIcon]=\"matSvgIcon\"\n [style.color]=\"'var(--ion-color-' + color + ')'\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n [style.font-size.px]=\"height || width\"\n >\n {{ matIcon }}\n </mat-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
34275
- }
34276
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconComponent, decorators: [{
34277
- type: Component,
34278
- args: [{ selector: 'app-icon', template: "<ion-icon\n *ngIf=\"icon; else matIconTemplate\"\n slot=\"icon-only\"\n [color]=\"color\"\n [name]=\"icon\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n></ion-icon>\n<ng-template #matIconTemplate>\n <mat-icon\n [svgIcon]=\"matSvgIcon\"\n [style.color]=\"'var(--ion-color-' + color + ')'\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n [style.font-size.px]=\"height || width\"\n >\n {{ matIcon }}\n </mat-icon>\n</ng-template>\n" }]
34279
- }], propDecorators: { icon: [{
34280
- type: Input
34281
- }], matIcon: [{
34282
- type: Input
34283
- }], matSvgIcon: [{
34284
- type: Input
34285
- }], color: [{
34286
- type: Input
34287
- }], height: [{
34288
- type: Input
34289
- }], width: [{
34290
- type: Input
34291
- }], ref: [{
34292
- type: Input
34293
- }] } });
34294
-
34295
- class AppIconModule {
34296
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
34297
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, declarations: [AppIconComponent], imports: [SharedModule, TranslateModule], exports: [AppIconComponent] });
34298
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, imports: [SharedModule, TranslateModule] });
34299
- }
34300
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, decorators: [{
34301
- type: NgModule,
34302
- args: [{
34303
- imports: [SharedModule, TranslateModule],
34304
- declarations: [AppIconComponent],
34305
- exports: [AppIconComponent],
34306
- }]
34307
- }] });
34308
-
34309
34519
  class AppTextPopoverModule {
34310
34520
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppTextPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
34311
34521
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppTextPopoverModule, declarations: [
@@ -48037,6 +48247,7 @@ class CoreModule {
48037
48247
  AppAboutModalModule,
48038
48248
  AppSettingsPageModule,
48039
48249
  AppIconModule,
48250
+ AppIconSelectorModule,
48040
48251
  AppSelectPeerModule,
48041
48252
  AppFormModule,
48042
48253
  AppTableModule,
@@ -48074,6 +48285,7 @@ class CoreModule {
48074
48285
  AppAboutModalModule,
48075
48286
  AppSettingsPageModule,
48076
48287
  AppIconModule,
48288
+ AppIconSelectorModule,
48077
48289
  AppSelectPeerModule,
48078
48290
  AppFormModule,
48079
48291
  AppTableModule,
@@ -48120,6 +48332,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
48120
48332
  AppAboutModalModule,
48121
48333
  AppSettingsPageModule,
48122
48334
  AppIconModule,
48335
+ AppIconSelectorModule,
48123
48336
  AppSelectPeerModule,
48124
48337
  AppFormModule,
48125
48338
  AppTableModule,
@@ -50035,7 +50248,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
50035
50248
  }]
50036
50249
  }], ctorParameters: () => [] });
50037
50250
 
50038
- const routes$c = [
50251
+ const routes$d = [
50039
50252
  {
50040
50253
  path: 'users',
50041
50254
  pathMatch: 'full',
@@ -50050,12 +50263,12 @@ const routes$c = [
50050
50263
  class AdminRoutingModule {
50051
50264
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AdminRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
50052
50265
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AdminRoutingModule, imports: [SharedRoutingModule, AdminModule, i1$7.RouterModule], exports: [RouterModule] });
50053
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AdminRoutingModule, imports: [SharedRoutingModule, AdminModule, RouterModule.forChild(routes$c), RouterModule] });
50266
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AdminRoutingModule, imports: [SharedRoutingModule, AdminModule, RouterModule.forChild(routes$d), RouterModule] });
50054
50267
  }
50055
50268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AdminRoutingModule, decorators: [{
50056
50269
  type: NgModule,
50057
50270
  args: [{
50058
- imports: [SharedRoutingModule, AdminModule, RouterModule.forChild(routes$c)],
50271
+ imports: [SharedRoutingModule, AdminModule, RouterModule.forChild(routes$d)],
50059
50272
  exports: [RouterModule],
50060
50273
  }]
50061
50274
  }] });
@@ -51598,7 +51811,7 @@ const SHARED_MATERIAL_TESTING_PAGES = [
51598
51811
  { label: 'Observable', page: '/testing/shared/observable' },
51599
51812
  { label: 'Maskito', page: '/testing/shared/maskito' },
51600
51813
  ];
51601
- const routes$b = [
51814
+ const routes$c = [
51602
51815
  {
51603
51816
  path: '',
51604
51817
  pathMatch: 'full',
@@ -51723,7 +51936,7 @@ class MaterialTestingModule {
51723
51936
  ReactiveFormsModule,
51724
51937
  SharedMaterialModule,
51725
51938
  TranslateModule.forChild(),
51726
- RouterModule.forChild(routes$b),
51939
+ RouterModule.forChild(routes$c),
51727
51940
  SharedPipesModule,
51728
51941
  SharedBadgeModule,
51729
51942
  FormsModule,
@@ -51739,7 +51952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
51739
51952
  ReactiveFormsModule,
51740
51953
  SharedMaterialModule,
51741
51954
  TranslateModule.forChild(),
51742
- RouterModule.forChild(routes$b),
51955
+ RouterModule.forChild(routes$c),
51743
51956
  SharedPipesModule,
51744
51957
  SharedBadgeModule,
51745
51958
  FormsModule,
@@ -51832,7 +52045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
51832
52045
  args: [{ selector: 'toast-testing', template: "<ion-toolbar color=\"primary\" id=\"header\">\n <ion-title>Toasts</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n <p>Toast examples:</p>\n\n <ion-button (click)=\"showToast()\" color=\"dark\">default</ion-button>\n\n <ion-button (click)=\"showInfo()\" color=\"secondary\">info</ion-button>\n\n <ion-button (click)=\"showWarning()\" color=\"accent\">warning</ion-button>\n\n <ion-button (click)=\"showError()\" color=\"danger\">error</ion-button>\n\n <ion-button (click)=\"showInfo({ message: 'This is <b>HTML</b> text' })\" color=\"danger\">message with HTML</ion-button>\n <br />\n\n <ion-list>\n <ion-item>\n <ion-label>Header (optional)</ion-label>\n <ion-input [(ngModel)]=\"options.header\"></ion-input>\n </ion-item>\n <ion-item>\n <ion-label>Message</ion-label>\n <ion-input [(ngModel)]=\"options.message\"></ion-input>\n </ion-item>\n\n <ion-item>\n <ion-checkbox [(ngModel)]=\"options.showCloseButton\">\n <ion-label>Close button ?</ion-label>\n </ion-checkbox>\n </ion-item>\n\n <ion-item>\n <ion-label>Duration</ion-label>\n <ion-input [(ngModel)]=\"options.duration\"></ion-input>\n </ion-item>\n\n <ion-item>\n <ion-label>Position</ion-label>\n <ion-select [(ngModel)]=\"options.position\">\n <ion-select-option value=\"auto\">auto</ion-select-option>\n <ion-select-option value=\"top\">top</ion-select-option>\n <ion-select-option value=\"bottom\">bottom</ion-select-option>\n <ion-select-option value=\"middle\">middle</ion-select-option>\n </ion-select>\n </ion-item>\n </ion-list>\n</ion-content>\n" }]
51833
52046
  }], ctorParameters: () => [{ type: i0.Injector }] });
51834
52047
 
51835
- const routes$a = [
52048
+ const routes$b = [
51836
52049
  {
51837
52050
  path: 'toast',
51838
52051
  pathMatch: 'full',
@@ -51842,12 +52055,12 @@ const routes$a = [
51842
52055
  class ToastTestingModule {
51843
52056
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
51844
52057
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ToastTestingModule, declarations: [ToastTestingPage], imports: [CommonModule, IonicModule, i1$1.TranslateModule, i1$7.RouterModule, FormsModule], exports: [RouterModule, ToastTestingPage] });
51845
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastTestingModule, imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$a), FormsModule, RouterModule] });
52058
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastTestingModule, imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$b), FormsModule, RouterModule] });
51846
52059
  }
51847
52060
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastTestingModule, decorators: [{
51848
52061
  type: NgModule,
51849
52062
  args: [{
51850
- imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$a), FormsModule],
52063
+ imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$b), FormsModule],
51851
52064
  declarations: [ToastTestingPage],
51852
52065
  exports: [RouterModule, ToastTestingPage],
51853
52066
  }]
@@ -51903,7 +52116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
51903
52116
  args: [{ selector: 'upload-file-testing', template: "<ion-toolbar color=\"primary\">\n <ion-title>File upload</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n <p>Popover examples:</p>\n\n <ion-button (click)=\"showPopover($event, { uniqueFile: true })\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>\n &nbsp;(unique file)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, { uniqueFile: false })\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>\n &nbsp;(many files)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, { uniqueFile: false, instantUpload: true })\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>\n &nbsp;(instant upload)\n </ion-button>\n\n <ion-button\n (click)=\"showPopover($event, { uniqueFile: false, instantUpload: true, maxParallelUpload: 3 })\"\n color=\"tertiary\"\n >\n <span translate>COMMON.BTN_IMPORT</span>\n &nbsp;(max parallel upload)\n </ion-button>\n</ion-content>\n" }]
51904
52117
  }], ctorParameters: () => [{ type: i2$1.PopoverController }] });
51905
52118
 
51906
- const routes$9 = [
52119
+ const routes$a = [
51907
52120
  {
51908
52121
  path: 'upload-file',
51909
52122
  pathMatch: 'full',
@@ -51913,12 +52126,12 @@ const routes$9 = [
51913
52126
  class UploadFileTestingModule {
51914
52127
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFileTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
51915
52128
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: UploadFileTestingModule, declarations: [UploadFileTestingPage], imports: [CommonModule, IonicModule, i1$1.TranslateModule, i1$7.RouterModule], exports: [RouterModule, UploadFileTestingPage] });
51916
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFileTestingModule, imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$9), RouterModule] });
52129
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFileTestingModule, imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$a), RouterModule] });
51917
52130
  }
51918
52131
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFileTestingModule, decorators: [{
51919
52132
  type: NgModule,
51920
52133
  args: [{
51921
- imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$9)],
52134
+ imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$a)],
51922
52135
  declarations: [UploadFileTestingPage],
51923
52136
  exports: [RouterModule, UploadFileTestingPage],
51924
52137
  }]
@@ -52047,7 +52260,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52047
52260
  args: [{ selector: 'app-gallery-test-page', providers: [{ provide: ImageAttachmentService, useClass: ImageAttachmentService }], template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Image gallery</ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button [matMenuTriggerFor]=\"toolbarOptionsMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<mat-menu #toolbarOptionsMenu=\"matMenu\" xPosition=\"after\">\n <ng-template matMenuContent>\n <button mat-menu-item (click)=\"toggleZoomPresentation()\">\n <mat-icon>{{ slideshowMode === 'modal' ? 'check' : '' }}</mat-icon>\n <ion-label translate>IMAGE.GALLERY.BTN_ENABLE_MODAL_ZOOM</ion-label>\n </button>\n\n <button mat-menu-item (click)=\"toggleSlideshowLoop()\">\n <mat-icon>{{ enableSlideshowLoop ? 'check' : '' }}</mat-icon>\n <ion-label translate>IMAGE.GALLERY.BTN_ENABLE_LOOP</ion-label>\n </button>\n\n <button mat-menu-item (click)=\"toggleDebug()\">\n <mat-icon>{{ debug ? 'check' : '' }}</mat-icon>\n <ion-label translate>COMMON.DEBUG.BTN_ENABLE_DEBUG</ion-label>\n </button>\n </ng-template>\n</mat-menu>\n\n<ion-content>\n <!-- DEBUG -->\n @if (debug) {\n <app-debug title=\"Galley\">\n <ion-grid>\n <ion-row>\n <ion-col>gallery.count: {{ gallery.rows?.length }}</ion-col>\n </ion-row>\n </ion-grid>\n </app-debug>\n }\n\n <app-image-gallery\n #gallery\n [dataSource]=\"dataSource\"\n [slideshowMode]=\"slideshowMode\"\n [enableSlideshowLoop]=\"enableSlideshowLoop\"\n [inlineZoomHeight]=\"'100%'\"\n (onAfterAddRows)=\"save()\"\n (onAfterEditRow)=\"save()\"\n [debug]=\"debug\"\n ></app-image-gallery>\n</ion-content>\n" }]
52048
52261
  }], ctorParameters: () => [{ type: ImageAttachmentService }, { type: i1$7.ActivatedRoute }] });
52049
52262
 
52050
- const routes$8 = [
52263
+ const routes$9 = [
52051
52264
  {
52052
52265
  path: 'gallery',
52053
52266
  pathMatch: 'full',
@@ -52069,7 +52282,7 @@ class ImageGalleryTestingModule {
52069
52282
  ImageGalleryModule,
52070
52283
  SharedMaterialModule,
52071
52284
  TranslateModule.forChild(),
52072
- RouterModule.forChild(routes$8),
52285
+ RouterModule.forChild(routes$9),
52073
52286
  TranslateModule.forChild(),
52074
52287
  SharedDebugModule, RouterModule] });
52075
52288
  }
@@ -52082,7 +52295,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52082
52295
  ImageGalleryModule,
52083
52296
  SharedMaterialModule,
52084
52297
  TranslateModule.forChild(),
52085
- RouterModule.forChild(routes$8),
52298
+ RouterModule.forChild(routes$9),
52086
52299
  TranslateModule.forChild(),
52087
52300
  SharedDebugModule,
52088
52301
  ],
@@ -52126,7 +52339,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52126
52339
  args: [{ selector: 'audio-testing', template: "<ion-toolbar color=\"primary\">\n <ion-title>Toasts</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n <p>Toast examples:</p>\n\n <ion-button (click)=\"playStartupSound()\" color=\"dark\">\n <ion-icon name=\"play\" slot=\"start\"></ion-icon>\n Startup\n </ion-button>\n\n <ion-button (click)=\"playBeepConfirm()\" color=\"success\">\n <ion-icon name=\"play\" slot=\"start\"></ion-icon>\n Confirmation\n </ion-button>\n\n <ion-button (click)=\"playBeepNotification()\" color=\"tertiary\">\n <ion-icon name=\"play\" slot=\"start\"></ion-icon>\n Notification\n </ion-button>\n\n <ion-button (click)=\"playBeepError()\" color=\"accent\">\n <ion-icon name=\"play\" slot=\"start\"></ion-icon>\n Error\n </ion-button>\n\n <ion-button (click)=\"vibrate()\" color=\"accent\">Vibrate (many time)</ion-button>\n</ion-content>\n" }]
52127
52340
  }], ctorParameters: () => [{ type: AudioProvider }] });
52128
52341
 
52129
- const routes$7 = [
52342
+ const routes$8 = [
52130
52343
  {
52131
52344
  path: 'audio',
52132
52345
  pathMatch: 'full',
@@ -52136,19 +52349,19 @@ const routes$7 = [
52136
52349
  class AudioTestingModule {
52137
52350
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AudioTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52138
52351
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AudioTestingModule, declarations: [AudioTestingPage], imports: [CommonModule, IonicModule, i1$1.TranslateModule, i1$7.RouterModule], exports: [RouterModule, AudioTestingPage] });
52139
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AudioTestingModule, imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$7), RouterModule] });
52352
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AudioTestingModule, imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$8), RouterModule] });
52140
52353
  }
52141
52354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AudioTestingModule, decorators: [{
52142
52355
  type: NgModule,
52143
52356
  args: [{
52144
- imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$7)],
52357
+ imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$8)],
52145
52358
  declarations: [AudioTestingPage],
52146
52359
  exports: [RouterModule, AudioTestingPage],
52147
52360
  }]
52148
52361
  }] });
52149
52362
 
52150
52363
  const SHARED_STORAGE_TESTING_PAGES = [{ label: 'Storage explorer', page: '/testing/shared/storage' }];
52151
- const routes$6 = [
52364
+ const routes$7 = [
52152
52365
  {
52153
52366
  path: 'storage',
52154
52367
  loadChildren: () => Promise.resolve().then(function () { return storageExplorer_testingRouting_module; }).then((m) => m.StorageExplorerTestingRoutingModule),
@@ -52157,12 +52370,12 @@ const routes$6 = [
52157
52370
  class StorageExplorerTestingModule {
52158
52371
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52159
52372
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingModule, imports: [CommonModule, i1$7.RouterModule], exports: [RouterModule] });
52160
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingModule, imports: [CommonModule, RouterModule.forChild(routes$6), RouterModule] });
52373
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingModule, imports: [CommonModule, RouterModule.forChild(routes$7), RouterModule] });
52161
52374
  }
52162
52375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingModule, decorators: [{
52163
52376
  type: NgModule,
52164
52377
  args: [{
52165
- imports: [CommonModule, RouterModule.forChild(routes$6)],
52378
+ imports: [CommonModule, RouterModule.forChild(routes$7)],
52166
52379
  exports: [RouterModule],
52167
52380
  }]
52168
52381
  }] });
@@ -52353,7 +52566,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52353
52566
  args: [{ selector: 'app-testing-menu-other', template: "<app-toolbar [defaultBackHref]=\"parentPath\">\n <ion-title [innerHTML]=\"$title | async\"></ion-title>\n</app-toolbar>\n\n<ion-content>\n <mat-tab-group\n #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n (selectedTabChange)=\"onTabChange($event)\"\n class=\"mat-mdc-tab-disabled-hidden\"\n dynamicHeight\n [mat-stretch-tabs]=\"toggleStretchTab.checked\"\n >\n <!-- TAB: 1 -->\n <mat-tab\n label=\"Details\"\n class=\"ion-padding\"\n appSubMenuTab\n [subMenuTitle]=\"($title | async) || ''\"\n [parentPath]=\"parentPath\"\n >\n <ng-template mat-tab-label>\n <mat-icon>information-circle</mat-icon>\n <ion-label>Details</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>A first tab</p>\n\n <p [class.cdk-visually-hidden]=\"showThirdTab\">\n <ion-toggle #toggleThird>Toggle Third Tab</ion-toggle>\n </p>\n\n <p>\n <ion-toggle #toggleStretchTab>Stretch Tabs</ion-toggle>\n </p>\n\n <p>\n <ion-button (click)=\"changeTitle($event)\">Change page title</ion-button>\n\n <ion-button (click)=\"addSubMenuItem($event)\">Add sub menu other 3</ion-button>\n\n <ion-button (click)=\"addOutsideRouteSubMenuItem($event, true)\">\n Add sub menu (outside route) - pinned\n </ion-button>\n\n <ion-button (click)=\"addOutsideRouteSubMenuItem($event, false)\">\n Add sub menu (outside route) - not pinned\n </ion-button>\n </p>\n\n <p>\n &nbsp;&nbsp;\n <ion-button (click)=\"enableMenu(false)\" *ngIf=\"menuService.enabled | async\">Disable menu</ion-button>\n <ion-button (click)=\"enableMenu(true)\" *ngIf=\"(menuService.enabled | async) !== true\">Enable menu</ion-button>\n <ion-button (click)=\"toggleSplitPaneWhen()\" [disabled]=\"(menuService.enabled | async) !== true\">\n Toggle split pane\n </ion-button>\n </p>\n </div>\n </mat-tab>\n\n <!-- TAB: 2 -->\n <mat-tab\n label=\"Second\"\n class=\"ion-padding\"\n appSubMenuTab\n [subMenuIcon]=\"{ icon: 'settings' }\"\n [subMenuTitle]=\"$secondTabTitle | async\"\n >\n <ng-template mat-tab-label>\n <mat-icon><ion-icon name=\"settings\"></ion-icon></mat-icon>\n <ion-label [innerHTML]=\"$secondTabTitle | async\"></ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>A second tab</p>\n\n <p *ngIf=\"showOtherLinks\">\n Navigate to :\n <a [routerLink]=\"childPath + '/1'\">{{ childPath }}/1</a>\n <br />\n Navigate to :\n <a [routerLink]=\"childPath + '/2'\">{{ childPath }}/2</a>\n </p>\n\n <p>\n <ion-button (click)=\"changeSecondTabTitle($event)\">Change tab label</ion-button>\n </p>\n </div>\n </mat-tab>\n\n <!-- TAB: 3 -->\n <mat-tab\n [label]=\"thirdTabTitle\"\n class=\"ion-padding\"\n [disabled]=\"!showThirdTab && !toggleThird.checked\"\n appSubMenuTab\n [subMenuBadge]=\"$thirdTabBadge | async\"\n [subMenuIcon]=\"{ icon: 'none' }\"\n >\n <ng-template mat-tab-label>\n <ion-label [matBadge]=\"$thirdTabBadge | async\" matBadgeColor=\"primary\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">\n {{ thirdTabTitle }}\n </ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>\n A third tab (with a badge)\n </p>\n <ion-button (click)=\"incrementThirdTabBadge()\">Increment badge count</ion-button>\n </div>\n </mat-tab>\n\n <!-- TAB: 4 -->\n <mat-tab appSubMenuTab [subMenuIcon]=\"{ icon: 'person' }\" label=\"Sub Tab\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <mat-icon><ion-icon name=\"person\"></ion-icon></mat-icon>\n <ion-label>Sub Tab</ion-label>\n </ng-template>\n\n <mat-tab-group\n #subTabGroup\n [(selectedIndex)]=\"subSelectedTabIndex\"\n (selectedTabChange)=\"onTabChange($event, 'subtab')\"\n class=\"mat-mdc-tab-disabled-hidden\"\n dynamicHeight\n >\n <mat-tab label=\"Sub1\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>Sub1</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>First SubTab</p>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Sub2\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>Sub2</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>Second SubTab</p>\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n", styles: [".menu-item{padding-left:0 px}\n"] }]
52354
52567
  }], ctorParameters: () => [{ type: i1$7.ActivatedRoute }, { type: i1$7.Router }, { type: i2$1.NavController }, { type: i2$1.AlertController }, { type: i1$1.TranslateService }, { type: MenuService }] });
52355
52568
 
52356
- const routes$5 = [
52569
+ const routes$6 = [
52357
52570
  {
52358
52571
  path: 'menu',
52359
52572
  data: {
@@ -52392,12 +52605,12 @@ const routes$5 = [
52392
52605
  class MenuTestingModule {
52393
52606
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52394
52607
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: MenuTestingModule, declarations: [MenuTestingPage, OtherMenuTestingPage], imports: [CommonModule, i1$7.RouterModule, AppMenuModule, SharedModule], exports: [RouterModule, MenuTestingPage, OtherMenuTestingPage] });
52395
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTestingModule, imports: [CommonModule, RouterModule.forChild(routes$5), AppMenuModule, SharedModule, RouterModule] });
52608
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTestingModule, imports: [CommonModule, RouterModule.forChild(routes$6), AppMenuModule, SharedModule, RouterModule] });
52396
52609
  }
52397
52610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTestingModule, decorators: [{
52398
52611
  type: NgModule,
52399
52612
  args: [{
52400
- imports: [CommonModule, RouterModule.forChild(routes$5), AppMenuModule, SharedModule],
52613
+ imports: [CommonModule, RouterModule.forChild(routes$6), AppMenuModule, SharedModule],
52401
52614
  declarations: [MenuTestingPage, OtherMenuTestingPage],
52402
52615
  exports: [RouterModule, MenuTestingPage, OtherMenuTestingPage],
52403
52616
  }]
@@ -52469,7 +52682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52469
52682
  type: Input
52470
52683
  }] } });
52471
52684
 
52472
- const routes$4 = [
52685
+ const routes$5 = [
52473
52686
  {
52474
52687
  path: 'name-filter-selector',
52475
52688
  pathMatch: 'full',
@@ -52479,12 +52692,12 @@ const routes$4 = [
52479
52692
  class NamedFilterSelectorTestingModule {
52480
52693
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NamedFilterSelectorTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52481
52694
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: NamedFilterSelectorTestingModule, declarations: [NamedFilterSelectorTestingPage], imports: [CommonModule, i1$7.RouterModule, SharedModule], exports: [RouterModule, NamedFilterSelectorTestingPage] });
52482
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NamedFilterSelectorTestingModule, imports: [CommonModule, RouterModule.forChild(routes$4), SharedModule, RouterModule] });
52695
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NamedFilterSelectorTestingModule, imports: [CommonModule, RouterModule.forChild(routes$5), SharedModule, RouterModule] });
52483
52696
  }
52484
52697
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NamedFilterSelectorTestingModule, decorators: [{
52485
52698
  type: NgModule,
52486
52699
  args: [{
52487
- imports: [CommonModule, RouterModule.forChild(routes$4), SharedModule],
52700
+ imports: [CommonModule, RouterModule.forChild(routes$5), SharedModule],
52488
52701
  declarations: [NamedFilterSelectorTestingPage],
52489
52702
  exports: [RouterModule, NamedFilterSelectorTestingPage],
52490
52703
  }]
@@ -52536,7 +52749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52536
52749
  args: [ENVIRONMENT]
52537
52750
  }] }] });
52538
52751
 
52539
- const routes$3 = [
52752
+ const routes$4 = [
52540
52753
  {
52541
52754
  path: 'markdown',
52542
52755
  pathMatch: 'full',
@@ -52546,12 +52759,12 @@ const routes$3 = [
52546
52759
  class MarkdownTestingModule {
52547
52760
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52548
52761
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: MarkdownTestingModule, declarations: [MarkdownTestPage], imports: [CommonModule, i1$7.RouterModule, SharedModule, FormsModule, SharedMarkdownModule], exports: [RouterModule, MarkdownTestPage] });
52549
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownTestingModule, imports: [CommonModule, RouterModule.forChild(routes$3), SharedModule, FormsModule, SharedMarkdownModule, RouterModule] });
52762
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownTestingModule, imports: [CommonModule, RouterModule.forChild(routes$4), SharedModule, FormsModule, SharedMarkdownModule, RouterModule] });
52550
52763
  }
52551
52764
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownTestingModule, decorators: [{
52552
52765
  type: NgModule,
52553
52766
  args: [{
52554
- imports: [CommonModule, RouterModule.forChild(routes$3), SharedModule, FormsModule, SharedMarkdownModule],
52767
+ imports: [CommonModule, RouterModule.forChild(routes$4), SharedModule, FormsModule, SharedMarkdownModule],
52555
52768
  declarations: [MarkdownTestPage],
52556
52769
  exports: [RouterModule, MarkdownTestPage],
52557
52770
  }]
@@ -52650,7 +52863,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52650
52863
  }]
52651
52864
  }] });
52652
52865
 
52653
- const routes$2 = [
52866
+ const routes$3 = [
52654
52867
  {
52655
52868
  path: '',
52656
52869
  pathMatch: 'full',
@@ -52660,12 +52873,12 @@ const routes$2 = [
52660
52873
  class StorageExplorerTestingRoutingModule {
52661
52874
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52662
52875
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingRoutingModule, imports: [CommonModule, i1$7.RouterModule, StorageExplorerModule], exports: [RouterModule] });
52663
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingRoutingModule, imports: [CommonModule, RouterModule.forChild(routes$2), StorageExplorerModule, RouterModule] });
52876
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingRoutingModule, imports: [CommonModule, RouterModule.forChild(routes$3), StorageExplorerModule, RouterModule] });
52664
52877
  }
52665
52878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingRoutingModule, decorators: [{
52666
52879
  type: NgModule,
52667
52880
  args: [{
52668
- imports: [CommonModule, RouterModule.forChild(routes$2), StorageExplorerModule],
52881
+ imports: [CommonModule, RouterModule.forChild(routes$3), StorageExplorerModule],
52669
52882
  exports: [RouterModule],
52670
52883
  }]
52671
52884
  }] });
@@ -53962,6 +54175,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
53962
54175
  }]
53963
54176
  }] });
53964
54177
 
54178
+ class IconSelectorTestPage {
54179
+ formBuilder;
54180
+ cd;
54181
+ form;
54182
+ selectedIcon = null;
54183
+ disabled = false;
54184
+ constructor(formBuilder, cd) {
54185
+ this.formBuilder = formBuilder;
54186
+ this.cd = cd;
54187
+ this.form = formBuilder.group({
54188
+ icon: [null],
54189
+ });
54190
+ this.form.get('icon').valueChanges.subscribe((ref) => {
54191
+ this.selectedIcon = ref;
54192
+ this.cd.markForCheck();
54193
+ });
54194
+ }
54195
+ toggleDisabled() {
54196
+ this.disabled = !this.disabled;
54197
+ if (this.disabled) {
54198
+ this.form.get('icon').disable();
54199
+ }
54200
+ else {
54201
+ this.form.get('icon').enable();
54202
+ }
54203
+ }
54204
+ stringify = JSON.stringify;
54205
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorTestPage, deps: [{ token: i1$3.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
54206
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: IconSelectorTestPage, selector: "app-icon-selector-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Icon Selector test page</ion-title>\n\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <ion-grid>\n <ion-row>\n <!-- Icon selector field -->\n <ion-col size=\"12\" size-md=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Icon selector field</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(selectedIcon) }}</pre>\n </small>\n </ion-text>\n\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <app-icon-selector-field\n [formControl]=\"form | formGetControl: 'icon'\"\n [placeholder]=\"'Icon'\"\n [disabled]=\"disabled\"\n ></app-icon-selector-field>\n\n <br/>\n <mat-checkbox (change)=\"disabled = $event.checked\" [checked]=\"disabled\">\n <mat-label>Disabled ?</mat-label>\n </mat-checkbox>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Preview -->\n <ion-col size=\"12\" size-md=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Preview</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content class=\"preview-container\">\n @if (selectedIcon?.icon) {\n <ion-icon [name]=\"selectedIcon.icon\" size=\"large\"></ion-icon>\n <br/>\n <ion-text color=\"medium\">\n <small><pre>{{ selectedIcon.icon }}</pre></small>\n </ion-text>\n }\n @if (selectedIcon?.matIcon) {\n <mat-icon [fontIcon]=\"selectedIcon.matIcon\"></mat-icon>\n <br/>\n <ion-text color=\"medium\">\n <small><pre>{{ selectedIcon.matIcon }}</pre></small>\n </ion-text>\n }\n @if (!selectedIcon) {\n <ion-text color=\"medium\">No icon selected</ion-text>\n }\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n", dependencies: [{ kind: "component", type: i2$1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2$1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2$1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2$1.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2$1.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2$1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2$1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }, { kind: "component", type: i2$1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2$1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: AppIconSelectorField, selector: "app-icon-selector-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "subscriptSizing"] }, { kind: "pipe", type: FormGetControlPipe, name: "formGetControl" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54207
+ }
54208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorTestPage, decorators: [{
54209
+ type: Component,
54210
+ args: [{ selector: 'app-icon-selector-test', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Icon Selector test page</ion-title>\n\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <ion-grid>\n <ion-row>\n <!-- Icon selector field -->\n <ion-col size=\"12\" size-md=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Icon selector field</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(selectedIcon) }}</pre>\n </small>\n </ion-text>\n\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <app-icon-selector-field\n [formControl]=\"form | formGetControl: 'icon'\"\n [placeholder]=\"'Icon'\"\n [disabled]=\"disabled\"\n ></app-icon-selector-field>\n\n <br/>\n <mat-checkbox (change)=\"disabled = $event.checked\" [checked]=\"disabled\">\n <mat-label>Disabled ?</mat-label>\n </mat-checkbox>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Preview -->\n <ion-col size=\"12\" size-md=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Preview</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content class=\"preview-container\">\n @if (selectedIcon?.icon) {\n <ion-icon [name]=\"selectedIcon.icon\" size=\"large\"></ion-icon>\n <br/>\n <ion-text color=\"medium\">\n <small><pre>{{ selectedIcon.icon }}</pre></small>\n </ion-text>\n }\n @if (selectedIcon?.matIcon) {\n <mat-icon [fontIcon]=\"selectedIcon.matIcon\"></mat-icon>\n <br/>\n <ion-text color=\"medium\">\n <small><pre>{{ selectedIcon.matIcon }}</pre></small>\n </ion-text>\n }\n @if (!selectedIcon) {\n <ion-text color=\"medium\">No icon selected</ion-text>\n }\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n" }]
54211
+ }], ctorParameters: () => [{ type: i1$3.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }] });
54212
+
54213
+ const routes$2 = [
54214
+ {
54215
+ path: 'icon-selector',
54216
+ pathMatch: 'full',
54217
+ component: IconSelectorTestPage,
54218
+ },
54219
+ ];
54220
+ class IconSelectorTestingModule {
54221
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
54222
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorTestingModule, declarations: [IconSelectorTestPage], imports: [CommonModule, IonicModule, i1$7.RouterModule, SharedModule, AppIconSelectorModule], exports: [RouterModule, IconSelectorTestPage] });
54223
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorTestingModule, imports: [CommonModule, IonicModule, RouterModule.forChild(routes$2), SharedModule, AppIconSelectorModule, RouterModule] });
54224
+ }
54225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconSelectorTestingModule, decorators: [{
54226
+ type: NgModule,
54227
+ args: [{
54228
+ imports: [CommonModule, IonicModule, RouterModule.forChild(routes$2), SharedModule, AppIconSelectorModule],
54229
+ declarations: [IconSelectorTestPage],
54230
+ exports: [RouterModule, IconSelectorTestPage],
54231
+ }]
54232
+ }] });
54233
+
53965
54234
  const CORE_TESTING_PAGES = [
53966
54235
  { label: 'Core components', divider: true },
53967
54236
  { label: 'Table (click to edit)', page: '/testing/core/table' },
@@ -53971,6 +54240,7 @@ const CORE_TESTING_PAGES = [
53971
54240
  { label: 'Text popover', page: '/testing/core/text-popover' },
53972
54241
  { label: 'Properties form', page: '/testing/core/properties-form' },
53973
54242
  { label: 'Array form', page: '/testing/core/array-form' },
54243
+ { label: 'Icon Selector', page: '/testing/core/icon-selector' },
53974
54244
  ];
53975
54245
  const routes$1 = [
53976
54246
  {
@@ -54013,6 +54283,11 @@ const routes$1 = [
54013
54283
  pathMatch: 'full',
54014
54284
  component: ArrayFormTestPage,
54015
54285
  },
54286
+ {
54287
+ path: 'icon-selector',
54288
+ pathMatch: 'full',
54289
+ component: IconSelectorTestPage,
54290
+ },
54016
54291
  ];
54017
54292
  class CoreTestingModule {
54018
54293
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CoreTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -54022,13 +54297,15 @@ class CoreTestingModule {
54022
54297
  TextFormTestingModule,
54023
54298
  TextPopoverTestingModule,
54024
54299
  PropertiesFormTestingModule,
54025
- FormArrayTestModule], exports: [RouterModule,
54300
+ FormArrayTestModule,
54301
+ IconSelectorTestingModule], exports: [RouterModule,
54026
54302
  // Sub modules
54027
54303
  TableTestingModule,
54028
54304
  TextFormTestingModule,
54029
54305
  TextPopoverTestingModule,
54030
54306
  PropertiesFormTestingModule,
54031
- FormArrayTestModule] });
54307
+ FormArrayTestModule,
54308
+ IconSelectorTestingModule] });
54032
54309
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CoreTestingModule, imports: [CommonModule,
54033
54310
  TranslateModule.forChild(),
54034
54311
  RouterModule.forChild(routes$1),
@@ -54037,13 +54314,15 @@ class CoreTestingModule {
54037
54314
  TextFormTestingModule,
54038
54315
  TextPopoverTestingModule,
54039
54316
  PropertiesFormTestingModule,
54040
- FormArrayTestModule, RouterModule,
54317
+ FormArrayTestModule,
54318
+ IconSelectorTestingModule, RouterModule,
54041
54319
  // Sub modules
54042
54320
  TableTestingModule,
54043
54321
  TextFormTestingModule,
54044
54322
  TextPopoverTestingModule,
54045
54323
  PropertiesFormTestingModule,
54046
- FormArrayTestModule] });
54324
+ FormArrayTestModule,
54325
+ IconSelectorTestingModule] });
54047
54326
  }
54048
54327
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CoreTestingModule, decorators: [{
54049
54328
  type: NgModule,
@@ -54058,6 +54337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54058
54337
  TextPopoverTestingModule,
54059
54338
  PropertiesFormTestingModule,
54060
54339
  FormArrayTestModule,
54340
+ IconSelectorTestingModule,
54061
54341
  ],
54062
54342
  exports: [
54063
54343
  RouterModule,
@@ -54067,6 +54347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54067
54347
  TextPopoverTestingModule,
54068
54348
  PropertiesFormTestingModule,
54069
54349
  FormArrayTestModule,
54350
+ IconSelectorTestingModule,
54070
54351
  ],
54071
54352
  }]
54072
54353
  }] });
@@ -54786,5 +55067,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54786
55067
  * Generated bundle index. Do not edit.
54787
55068
  */
54788
55069
 
54789
- export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_ACCOUNT_SERVICE, APP_ACCOUNT_SERVICE_OPTIONS, APP_CELL_SELECTION_SERVICE_CONFIG_TOKEN, APP_CELL_SELECTION_SERVICE_TOKEN, APP_CONFIG_OPTIONS, APP_DEBUG_DATA_SERVICE, APP_FEED_SERVICE, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_FRAGMENTS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_HOME_CONFIG, APP_HOME_TOOLBAR_BUTTONS, APP_HOTKEYS_CONFIG, APP_JOB_PROGRESSION_SERVICE, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_LOGGING_SERVICE, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_NAMED_FILTER_SERVICE, APP_PERSON_SERVICE, APP_PERSON_SERVICE_OPTIONS, APP_PROGRESS_BAR_SERVICE, APP_SETTINGS_MENU_ITEMS, APP_SHOW_TOOLTIP, APP_STORAGE, APP_STORAGE_EXPLORER_PROTECTED_KEYS, APP_TESTING_PAGES, APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD, APP_USER_EVENT_SERVICE, APP_USER_SETTINGS_OPTIONS, APP_USER_TOKEN_SCOPES, AboutModal, AbstractNamedFilterService, AbstractPersonService, AbstractSelectionModelPipe, AbstractTableSelectionPipe, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, AccountUtils, ActionsColumnComponent, AdminModule, AdminRoutingModule, AdminUsersModule, Alerts, AndroidOsEnvironment, AppAboutModalModule, AppAccountModule, AppAsyncTable, AppAuthForm, AppAuthModal, AppAuthModule, AppChangePasswordModule, AppChangePasswordPage, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppEntityFormModule, AppForm, AppFormArray, AppFormButtonsBarModule, AppFormContainer, AppFormField, AppFormModule, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHomePageModule, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppImageGallerySlideshowComponent, AppInMemoryTable, AppInstallUpgradeCard, AppInstallUpgradeCardModule, AppListForm, AppListFormModule, AppLoadingSpinner, AppMarkdownContent, AppMarkdownModal, AppMenuModule, AppNullForm, AppPropertiesForm, AppPropertiesFormModule, AppPropertiesTable, AppPropertiesUtils, AppPropertyUtils, AppRegisterModule, AppResetPasswordModal, AppRowField, AppSelectPeerModule, AppSelectUsersModal, AppSettingsPageModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableModule, AppTableUtils, AppTextFormModule, AppTextPopoverModule, AppUpdateOfflineModeCard, AppUpdateOfflineModeCardModule, AppValidatorService, AppendQueryParamsPipePipe, ArrayDistinctPipe, ArrayFilterPipe, ArrayFindByPropertyPipe, ArrayFirstPipe, ArrayFormTestPage, ArrayIncludesPipe, ArrayJoinPipe, ArrayLastPipe, ArrayLengthPipe, ArrayMapPipe, ArrayPluckPipe, ArraySlicePipe, ArraySortPipe, AsAnyPipe, AsArrayPipe, AsBooleanPipe, AsFloatLabelTypePipe, AsObservablePipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthGuardService, AutoResizeDirective, AutoTitleDirective, AutoTooltipDirective, AutocompleteTestPage, AutofocusDirective, BadgeDirective, BadgeNumberPipe, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, BooleanFormatPipe, BooleanTestPage, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CapitalizePipe, CellIdentifierDirective, CellSelectionDirective, CellSelectionService, CellValueChangeListener, ChangeCaseToUnderscorePipe, ChangePasswordForm, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigFragments, ConfigService, Configuration, CoreModule, CorePipesModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_ISO_PATTERNS, DATE_MATCH_REGEXP, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_JOIN_ARRAY_VALUES_SEPARATOR, DEFAULT_JOIN_PROPERTIES_SEPARATOR, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFormatService, DateFromNowPipe, DateFromPipe, DateShortTestPage, DateTestPage, DateTimeTestPage, DateUtils, DebugComponent, Department, DepartmentToStringPipe, DisplayWithPipe, DragAndDropDirective, DurationPipe, DurationTestPage, ED25519_SEED_LENGTH, EMPTY_PLACEHOLDER_CHAR, EMPTY_PLACEHOLDER_CHAR_REGEXP_GLOBAL, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesAsyncTableDataSource, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EnvironmentHttpLoader, EnvironmentLoader, ErrorCodes, EvenPipe, FeedDirective, FeedModule, FeedPage, FeedService, FeedsComponent, FileResponse, FileService, FileSizePipe, FilesUtils, FirstFalsePipe, FirstPipe, FirstTruePipe, FormArrayAtControlPipe, FormArrayAtGroupPipe, FormArrayHelper, FormArrayTestModule, FormButtonsBarComponent, FormButtonsBarToken, FormErrorPipe, FormErrorTranslatePipe, FormErrorTranslator, FormFieldDefinitionUtils, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetNamePipe, FormGetPipe, FormGetValuePipe, GalleryTestPage, GeolocationUtils, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, IPosition, ImageAttachment, ImageAttachmentFilter, ImageAttachmentService, ImageGalleryModule, ImageGalleryTestingModule, ImageModule, ImageService, ImagesUtils, InMemoryEntitiesService, IsAllSelectedPipe, IsEmptySelectionPipe, IsLoginAccountPipe, IsMultipleSelectionPipe, IsNilOrBlankPipe, IsNilOrNaNPipe, IsNilPipe, IsNotAllSelectedPipe, IsNotEmptySelectionPipe, IsNotNilOrBlankPipe, IsNotNilOrNaNPipe, IsNotNilPipe, IsOnDeskPipe, IsOnFieldPipe, IsSelectedPipe, IsSingleSelectionPipe, IsValidDatePipe, JobModule, JobProgression, JobProgressionComponent, JobProgressionIcon, JobProgressionList, JobProgressionService, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, JobUtils, JsonFeedUtils, JsonUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_PATTERNS, LAT_LONG_PATTERN_MAX_DECIMALS, LAT_LONG_VALUE_MAX_DECIMALS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LogLevel, LogUtils, Logger, LoggingService, LoggingServiceModule, LongitudeFormatPipe, MASKS, MASK_RANGES, MAT_FORM_FIELD_DEFAULT_APPEARANCE, MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapPipe, MapToPipe, MapValuesPipe, MarkdownDirective, MarkdownService, MarkdownTestPage, MarkdownTestingModule, MarkdownUtils, MaskitoPlaceholderPipe, MaskitoTestPage, MatAutocompleteConfigHolder, MatAutocompleteField, MatAutocompleteFieldUtils, MatBadgeTestPage, MatBooleanField, MatChipsField, MatColorPipe, MatCommonTestPage, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatLatLongFieldInput, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialAutocompleteFooterDirective, MaterialAutocompleteHeaderDirective, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItem, MenuItems, MenuOptions, MenuService, MenuTestingModule, MenuTestingPage, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NETWORK_DEFAULT_CONNECTION_TIMEOUT, NamedFilter, NamedFilterFilter, NamedFilterSelector, NamedFilterSelectorTestingModule, NamedFilterSelectorTestingPage, NavActionsColumnComponent, NestedTableTestPage, NetworkService, NetworkUtils, NewTokenForm, NewTokenModal, NgInitDirective, NgVarDirective, NoHtmlPipe, NotEmptyArrayPipe, NumberFormatPipe, ObservableTestPage, OddPipe, OtherMenuTestingPage, PEER_URL_REGEXP, PLUS_PLACEHOLDER_CHAR_REGEXP_GLOBAL, PRINT_ID_QUERY_PARAM, PRINT_LOADING_STORAGE_KEY_PREFIX, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFilterAdditionalFields, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, PrintService, ProgressBarService, ProgressInterceptor, PropertiesFormTestPage, PropertiesFormTestingModule, PropertyEntity, PropertyEntityFilter, PropertyEntityValidator, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialToStringPipe, ReferentialUtils, ReferentialValidatorService, ReferentialsToStringPipe, RegExpUtils, RegisterConfirmPage, RegisterForm, RegisterModal, ResizableComponent, ResizableDirective, ResizableModule, RoundPipe, RxStateComputed, RxStateModule, RxStateOutput, RxStateProperty, RxStateRegister, RxStateSelect, SCRYPT_PARAMS, SETTINGS_COMPACT_ROWS, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_STORAGE_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_CONFIG_OPTIONS, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SPACE_PLACEHOLDER_CHAR_REGEXP_GLOBAL, STARTUP_DATA_STORAGE_KEY, SafeHtmlPipe, SafeStylePipe, SelectPeerModal, SelectionLengthPipe, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedBadgeModule, SharedDebugModule, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMarkdownModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedNamedFilterModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedToolbarModule, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, SplitArrayInChunksPipe, StartableService, StartupService, StatusById, StatusIds, StatusList, StorageDrivers, StorageExplorerComponent, StorageExplorerModule, StorageExplorerTestingModule, StorageExplorerTestingRoutingModule, StorageService, StrIncludesPipe, StrLengthPipe, StrReplacePipe, SubMenuTabDirective, SwipeTestPage, TABLE_SETTINGS_ENUM, TOOLBAR_HEADER_ID, Table2TestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TableValidatorService, TextForm, TextFormTestingModule, TextFormTestingPage, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ThrottledClickDirective, ToStringPipe, ToastTestingModule, ToastTestingPage, Toasts, TokenScope, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, TreeItemEntityUtils, TruncHtmlPipe, TruncTextPipe, TruncateHtmlPipe, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UrlUtils, UserEventModule, UserEventNotificationIcon, UserEventNotificationList, UserEventNotificationModal, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UserToken, UserTokenTable, UsersPage, UsersUtils, ValueFormatPipe, VersionUtils, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayResize, arraySize, asInputElement, assignSkipUndefined, base64ArrayBuffer, booleanToString, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, collectByProperty, collectByPropertyPath, compareValues, compareValuesDesc, compareVersionNumbers, composeComparators, computeDecimalDegrees, computeDecimalPart, copyEntity2Form, createAppStartupInitializer, createPromiseEvent, createPromiseEventEmitter, decorateWithTakeUntil, deepMergeSkipUndefined, departmentToString, departmentsToString, disableAndClearControl, disableAndClearControls, disableControl, disableControls, emitPromiseEvent, enableControl, enableControls, enableRxStateProdMode, entityToString, equals, equalsOrNil, escapeRegExp, expansionAnimation, fadeInAnimation, fadeInOutAnimation, fadeInSlowAnimation, filterFalse, filterFormErrors, filterFormErrorsByPath, filterFormErrorsByPrefix, filterNotNil, filterNumberInput, filterTrue, findParentWithClass, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatLong, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorLuminance, getColorShade, getColorTint, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getInputRangeFromCaretIndex, getInputSelectionRangesFromMask, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, getRandomImageWithCredit, getUserAgent, hexToRgb, hexToRgbArray, initArrayControlsFromValues, interpolateString, intersectArrays, isAndroid, isBlankString, isCapacitor, isChrome, isControlHasInput, isEdge, isEmptyArray, isEntityService, isFirefox, isFocusableElement, isIOS, isInputElement, isInstanceOf, isInt, isIpad, isLightColor, isMacOS, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilObject, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isOnFieldMode, isPrint, isProgressEvent, isPromise, isResponseEvent, isSafari, isSameVersion, isStartableService, isTouchUi, isVersionCompatible, isWindows, joinProperties, joinPropertiesPath, lastArrayValue, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, maskitoAutoSelectByMaskPattern, maskitoPrefixPlugin, matchMedia, matchUpperCase, mergeLoadResult, mergeObjectsWithoutUndefined, mixHex, moveInputCaretToSeparator, newArray, noHtml, noTrailingSlash, notNilOrDefault, nullIfNilOrBlank, nullIfUndefined, numberOrNilAttribute, numberToString, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, provideAccountService, providePersonService, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputContentFromEvent, selectInputRange, setCalculatedValue, setControlEnabled, setControlRequired, setControlsEnabled, setFormErrors, setPropertyByPath, setTabIndex, sleep, slideDownAnimation, slideInAnimation, slideInOutAnimation, slideUpDownAnimation, sort, splitArrayInChunks, splitById, splitByProperty, splitDegreesToDDArray, splitDegreesToDDMMArray, splitDegreesToDDMMSSArray, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toLoadData, toLoadResult, toNotNil, toNumber, trimEmptyToNull, truncateHtml, uncapitalizeFirstLetter, undefinedIfNull, underscoreToChangeCase, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
55070
+ export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_ACCOUNT_SERVICE, APP_ACCOUNT_SERVICE_OPTIONS, APP_CELL_SELECTION_SERVICE_CONFIG_TOKEN, APP_CELL_SELECTION_SERVICE_TOKEN, APP_CONFIG_OPTIONS, APP_DEBUG_DATA_SERVICE, APP_FEED_SERVICE, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_FRAGMENTS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_HOME_CONFIG, APP_HOME_TOOLBAR_BUTTONS, APP_HOTKEYS_CONFIG, APP_JOB_PROGRESSION_SERVICE, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_LOGGING_SERVICE, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_NAMED_FILTER_SERVICE, APP_PERSON_SERVICE, APP_PERSON_SERVICE_OPTIONS, APP_PROGRESS_BAR_SERVICE, APP_SETTINGS_MENU_ITEMS, APP_SHOW_TOOLTIP, APP_STORAGE, APP_STORAGE_EXPLORER_PROTECTED_KEYS, APP_TESTING_PAGES, APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD, APP_USER_EVENT_SERVICE, APP_USER_SETTINGS_OPTIONS, APP_USER_TOKEN_SCOPES, AboutModal, AbstractNamedFilterService, AbstractPersonService, AbstractSelectionModelPipe, AbstractTableSelectionPipe, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, AccountUtils, ActionsColumnComponent, AdminModule, AdminRoutingModule, AdminUsersModule, Alerts, AndroidOsEnvironment, AppAboutModalModule, AppAccountModule, AppAsyncTable, AppAuthForm, AppAuthModal, AppAuthModule, AppChangePasswordModule, AppChangePasswordPage, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppEntityFormModule, AppForm, AppFormArray, AppFormButtonsBarModule, AppFormContainer, AppFormField, AppFormModule, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHomePageModule, AppIconComponent, AppIconModule, AppIconSelectorField, AppIconSelectorModal, AppIconSelectorModule, AppImageGalleryComponent, AppImageGallerySlideshowComponent, AppInMemoryTable, AppInstallUpgradeCard, AppInstallUpgradeCardModule, AppListForm, AppListFormModule, AppLoadingSpinner, AppMarkdownContent, AppMarkdownModal, AppMenuModule, AppNullForm, AppPropertiesForm, AppPropertiesFormModule, AppPropertiesTable, AppPropertiesUtils, AppPropertyUtils, AppRegisterModule, AppResetPasswordModal, AppRowField, AppSelectPeerModule, AppSelectUsersModal, AppSettingsPageModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableModule, AppTableUtils, AppTextFormModule, AppTextPopoverModule, AppUpdateOfflineModeCard, AppUpdateOfflineModeCardModule, AppValidatorService, AppendQueryParamsPipePipe, ArrayDistinctPipe, ArrayFilterPipe, ArrayFindByPropertyPipe, ArrayFirstPipe, ArrayFormTestPage, ArrayIncludesPipe, ArrayJoinPipe, ArrayLastPipe, ArrayLengthPipe, ArrayMapPipe, ArrayPluckPipe, ArraySlicePipe, ArraySortPipe, AsAnyPipe, AsArrayPipe, AsBooleanPipe, AsFloatLabelTypePipe, AsObservablePipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthGuardService, AutoResizeDirective, AutoTitleDirective, AutoTooltipDirective, AutocompleteTestPage, AutofocusDirective, BadgeDirective, BadgeNumberPipe, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, BooleanFormatPipe, BooleanTestPage, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CapitalizePipe, CellIdentifierDirective, CellSelectionDirective, CellSelectionService, CellValueChangeListener, ChangeCaseToUnderscorePipe, ChangePasswordForm, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigFragments, ConfigService, Configuration, CoreModule, CorePipesModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_ISO_PATTERNS, DATE_MATCH_REGEXP, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_JOIN_ARRAY_VALUES_SEPARATOR, DEFAULT_JOIN_PROPERTIES_SEPARATOR, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFormatService, DateFromNowPipe, DateFromPipe, DateShortTestPage, DateTestPage, DateTimeTestPage, DateUtils, DebugComponent, Department, DepartmentToStringPipe, DisplayWithPipe, DragAndDropDirective, DurationPipe, DurationTestPage, ED25519_SEED_LENGTH, EMPTY_PLACEHOLDER_CHAR, EMPTY_PLACEHOLDER_CHAR_REGEXP_GLOBAL, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesAsyncTableDataSource, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EnvironmentHttpLoader, EnvironmentLoader, ErrorCodes, EvenPipe, FeedDirective, FeedModule, FeedPage, FeedService, FeedsComponent, FileResponse, FileService, FileSizePipe, FilesUtils, FirstFalsePipe, FirstPipe, FirstTruePipe, FormArrayAtControlPipe, FormArrayAtGroupPipe, FormArrayHelper, FormArrayTestModule, FormButtonsBarComponent, FormButtonsBarToken, FormErrorPipe, FormErrorTranslatePipe, FormErrorTranslator, FormFieldDefinitionUtils, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetNamePipe, FormGetPipe, FormGetValuePipe, GalleryTestPage, GeolocationUtils, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, IPosition, IconSelectorService, IconSelectorTestPage, IconSelectorTestingModule, ImageAttachment, ImageAttachmentFilter, ImageAttachmentService, ImageGalleryModule, ImageGalleryTestingModule, ImageModule, ImageService, ImagesUtils, InMemoryEntitiesService, IsAllSelectedPipe, IsEmptySelectionPipe, IsLoginAccountPipe, IsMultipleSelectionPipe, IsNilOrBlankPipe, IsNilOrNaNPipe, IsNilPipe, IsNotAllSelectedPipe, IsNotEmptySelectionPipe, IsNotNilOrBlankPipe, IsNotNilOrNaNPipe, IsNotNilPipe, IsOnDeskPipe, IsOnFieldPipe, IsSelectedPipe, IsSingleSelectionPipe, IsValidDatePipe, JobModule, JobProgression, JobProgressionComponent, JobProgressionIcon, JobProgressionList, JobProgressionService, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, JobUtils, JsonFeedUtils, JsonUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_PATTERNS, LAT_LONG_PATTERN_MAX_DECIMALS, LAT_LONG_VALUE_MAX_DECIMALS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LogLevel, LogUtils, Logger, LoggingService, LoggingServiceModule, LongitudeFormatPipe, MASKS, MASK_RANGES, MAT_FORM_FIELD_DEFAULT_APPEARANCE, MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapPipe, MapToPipe, MapValuesPipe, MarkdownDirective, MarkdownService, MarkdownTestPage, MarkdownTestingModule, MarkdownUtils, MaskitoPlaceholderPipe, MaskitoTestPage, MatAutocompleteConfigHolder, MatAutocompleteField, MatAutocompleteFieldUtils, MatBadgeTestPage, MatBooleanField, MatChipsField, MatColorPipe, MatCommonTestPage, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatLatLongFieldInput, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialAutocompleteFooterDirective, MaterialAutocompleteHeaderDirective, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItem, MenuItems, MenuOptions, MenuService, MenuTestingModule, MenuTestingPage, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NETWORK_DEFAULT_CONNECTION_TIMEOUT, NamedFilter, NamedFilterFilter, NamedFilterSelector, NamedFilterSelectorTestingModule, NamedFilterSelectorTestingPage, NavActionsColumnComponent, NestedTableTestPage, NetworkService, NetworkUtils, NewTokenForm, NewTokenModal, NgInitDirective, NgVarDirective, NoHtmlPipe, NotEmptyArrayPipe, NumberFormatPipe, ObservableTestPage, OddPipe, OtherMenuTestingPage, PEER_URL_REGEXP, PLUS_PLACEHOLDER_CHAR_REGEXP_GLOBAL, PRINT_ID_QUERY_PARAM, PRINT_LOADING_STORAGE_KEY_PREFIX, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFilterAdditionalFields, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, PrintService, ProgressBarService, ProgressInterceptor, PropertiesFormTestPage, PropertiesFormTestingModule, PropertyEntity, PropertyEntityFilter, PropertyEntityValidator, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialToStringPipe, ReferentialUtils, ReferentialValidatorService, ReferentialsToStringPipe, RegExpUtils, RegisterConfirmPage, RegisterForm, RegisterModal, ResizableComponent, ResizableDirective, ResizableModule, RoundPipe, RxStateComputed, RxStateModule, RxStateOutput, RxStateProperty, RxStateRegister, RxStateSelect, SCRYPT_PARAMS, SETTINGS_COMPACT_ROWS, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_STORAGE_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_CONFIG_OPTIONS, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SPACE_PLACEHOLDER_CHAR_REGEXP_GLOBAL, STARTUP_DATA_STORAGE_KEY, SafeHtmlPipe, SafeStylePipe, SelectPeerModal, SelectionLengthPipe, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedBadgeModule, SharedDebugModule, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMarkdownModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedNamedFilterModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedToolbarModule, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, SplitArrayInChunksPipe, StartableService, StartupService, StatusById, StatusIds, StatusList, StorageDrivers, StorageExplorerComponent, StorageExplorerModule, StorageExplorerTestingModule, StorageExplorerTestingRoutingModule, StorageService, StrIncludesPipe, StrLengthPipe, StrReplacePipe, SubMenuTabDirective, SwipeTestPage, TABLE_SETTINGS_ENUM, TOOLBAR_HEADER_ID, Table2TestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TableValidatorService, TextForm, TextFormTestingModule, TextFormTestingPage, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ThrottledClickDirective, ToStringPipe, ToastTestingModule, ToastTestingPage, Toasts, TokenScope, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, TreeItemEntityUtils, TruncHtmlPipe, TruncTextPipe, TruncateHtmlPipe, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UrlUtils, UserEventModule, UserEventNotificationIcon, UserEventNotificationList, UserEventNotificationModal, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UserToken, UserTokenTable, UsersPage, UsersUtils, ValueFormatPipe, VersionUtils, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayResize, arraySize, asInputElement, assignSkipUndefined, base64ArrayBuffer, booleanToString, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, collectByProperty, collectByPropertyPath, compareValues, compareValuesDesc, compareVersionNumbers, composeComparators, computeDecimalDegrees, computeDecimalPart, copyEntity2Form, createAppStartupInitializer, createPromiseEvent, createPromiseEventEmitter, decorateWithTakeUntil, deepMergeSkipUndefined, departmentToString, departmentsToString, disableAndClearControl, disableAndClearControls, disableControl, disableControls, emitPromiseEvent, enableControl, enableControls, enableRxStateProdMode, entityToString, equals, equalsOrNil, escapeRegExp, expansionAnimation, fadeInAnimation, fadeInOutAnimation, fadeInSlowAnimation, filterFalse, filterFormErrors, filterFormErrorsByPath, filterFormErrorsByPrefix, filterNotNil, filterNumberInput, filterTrue, findParentWithClass, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatLong, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorLuminance, getColorShade, getColorTint, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getInputRangeFromCaretIndex, getInputSelectionRangesFromMask, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, getRandomImageWithCredit, getUserAgent, hexToRgb, hexToRgbArray, initArrayControlsFromValues, interpolateString, intersectArrays, isAndroid, isBlankString, isCapacitor, isChrome, isControlHasInput, isEdge, isEmptyArray, isEntityService, isFirefox, isFocusableElement, isIOS, isInputElement, isInstanceOf, isInt, isIpad, isLightColor, isMacOS, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilObject, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isOnFieldMode, isPrint, isProgressEvent, isPromise, isResponseEvent, isSafari, isSameVersion, isStartableService, isTouchUi, isVersionCompatible, isWindows, joinProperties, joinPropertiesPath, lastArrayValue, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, maskitoAutoSelectByMaskPattern, maskitoPrefixPlugin, matchMedia, matchUpperCase, mergeLoadResult, mergeObjectsWithoutUndefined, mixHex, moveInputCaretToSeparator, newArray, noHtml, noTrailingSlash, notNilOrDefault, nullIfNilOrBlank, nullIfUndefined, numberOrNilAttribute, numberToString, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, provideAccountService, providePersonService, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputContentFromEvent, selectInputRange, setCalculatedValue, setControlEnabled, setControlRequired, setControlsEnabled, setFormErrors, setPropertyByPath, setTabIndex, sleep, slideDownAnimation, slideInAnimation, slideInOutAnimation, slideUpDownAnimation, sort, splitArrayInChunks, splitById, splitByProperty, splitDegreesToDDArray, splitDegreesToDDMMArray, splitDegreesToDDMMSSArray, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toLoadData, toLoadResult, toNotNil, toNumber, trimEmptyToNull, truncateHtml, uncapitalizeFirstLetter, undefinedIfNull, underscoreToChangeCase, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
54790
55071
  //# sourceMappingURL=sumaris-net.ngx-components.mjs.map