@sumaris-net/ngx-components 18.25.20 → 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.
@@ -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) {
@@ -34262,55 +34516,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
34262
34516
  }]
34263
34517
  }] });
34264
34518
 
34265
- class AppIconComponent {
34266
- icon = null;
34267
- matIcon = null;
34268
- matSvgIcon = null;
34269
- color = null;
34270
- height;
34271
- width;
34272
- set ref(value) {
34273
- this.icon = value.icon;
34274
- this.matIcon = value.matIcon;
34275
- this.matSvgIcon = value.matSvgIcon;
34276
- this.color = value.color || this.color; // Keep existing, if not defined in the reference
34277
- }
34278
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34279
- 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"] }] });
34280
- }
34281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconComponent, decorators: [{
34282
- type: Component,
34283
- 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" }]
34284
- }], propDecorators: { icon: [{
34285
- type: Input
34286
- }], matIcon: [{
34287
- type: Input
34288
- }], matSvgIcon: [{
34289
- type: Input
34290
- }], color: [{
34291
- type: Input
34292
- }], height: [{
34293
- type: Input
34294
- }], width: [{
34295
- type: Input
34296
- }], ref: [{
34297
- type: Input
34298
- }] } });
34299
-
34300
- class AppIconModule {
34301
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
34302
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, declarations: [AppIconComponent], imports: [SharedModule, TranslateModule], exports: [AppIconComponent] });
34303
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, imports: [SharedModule, TranslateModule] });
34304
- }
34305
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconModule, decorators: [{
34306
- type: NgModule,
34307
- args: [{
34308
- imports: [SharedModule, TranslateModule],
34309
- declarations: [AppIconComponent],
34310
- exports: [AppIconComponent],
34311
- }]
34312
- }] });
34313
-
34314
34519
  class AppTextPopoverModule {
34315
34520
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppTextPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
34316
34521
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppTextPopoverModule, declarations: [
@@ -48042,6 +48247,7 @@ class CoreModule {
48042
48247
  AppAboutModalModule,
48043
48248
  AppSettingsPageModule,
48044
48249
  AppIconModule,
48250
+ AppIconSelectorModule,
48045
48251
  AppSelectPeerModule,
48046
48252
  AppFormModule,
48047
48253
  AppTableModule,
@@ -48079,6 +48285,7 @@ class CoreModule {
48079
48285
  AppAboutModalModule,
48080
48286
  AppSettingsPageModule,
48081
48287
  AppIconModule,
48288
+ AppIconSelectorModule,
48082
48289
  AppSelectPeerModule,
48083
48290
  AppFormModule,
48084
48291
  AppTableModule,
@@ -48125,6 +48332,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
48125
48332
  AppAboutModalModule,
48126
48333
  AppSettingsPageModule,
48127
48334
  AppIconModule,
48335
+ AppIconSelectorModule,
48128
48336
  AppSelectPeerModule,
48129
48337
  AppFormModule,
48130
48338
  AppTableModule,
@@ -50040,7 +50248,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
50040
50248
  }]
50041
50249
  }], ctorParameters: () => [] });
50042
50250
 
50043
- const routes$c = [
50251
+ const routes$d = [
50044
50252
  {
50045
50253
  path: 'users',
50046
50254
  pathMatch: 'full',
@@ -50055,12 +50263,12 @@ const routes$c = [
50055
50263
  class AdminRoutingModule {
50056
50264
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AdminRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
50057
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] });
50058
- 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] });
50059
50267
  }
50060
50268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AdminRoutingModule, decorators: [{
50061
50269
  type: NgModule,
50062
50270
  args: [{
50063
- imports: [SharedRoutingModule, AdminModule, RouterModule.forChild(routes$c)],
50271
+ imports: [SharedRoutingModule, AdminModule, RouterModule.forChild(routes$d)],
50064
50272
  exports: [RouterModule],
50065
50273
  }]
50066
50274
  }] });
@@ -51603,7 +51811,7 @@ const SHARED_MATERIAL_TESTING_PAGES = [
51603
51811
  { label: 'Observable', page: '/testing/shared/observable' },
51604
51812
  { label: 'Maskito', page: '/testing/shared/maskito' },
51605
51813
  ];
51606
- const routes$b = [
51814
+ const routes$c = [
51607
51815
  {
51608
51816
  path: '',
51609
51817
  pathMatch: 'full',
@@ -51728,7 +51936,7 @@ class MaterialTestingModule {
51728
51936
  ReactiveFormsModule,
51729
51937
  SharedMaterialModule,
51730
51938
  TranslateModule.forChild(),
51731
- RouterModule.forChild(routes$b),
51939
+ RouterModule.forChild(routes$c),
51732
51940
  SharedPipesModule,
51733
51941
  SharedBadgeModule,
51734
51942
  FormsModule,
@@ -51744,7 +51952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
51744
51952
  ReactiveFormsModule,
51745
51953
  SharedMaterialModule,
51746
51954
  TranslateModule.forChild(),
51747
- RouterModule.forChild(routes$b),
51955
+ RouterModule.forChild(routes$c),
51748
51956
  SharedPipesModule,
51749
51957
  SharedBadgeModule,
51750
51958
  FormsModule,
@@ -51837,7 +52045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
51837
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" }]
51838
52046
  }], ctorParameters: () => [{ type: i0.Injector }] });
51839
52047
 
51840
- const routes$a = [
52048
+ const routes$b = [
51841
52049
  {
51842
52050
  path: 'toast',
51843
52051
  pathMatch: 'full',
@@ -51847,12 +52055,12 @@ const routes$a = [
51847
52055
  class ToastTestingModule {
51848
52056
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
51849
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] });
51850
- 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] });
51851
52059
  }
51852
52060
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ToastTestingModule, decorators: [{
51853
52061
  type: NgModule,
51854
52062
  args: [{
51855
- imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$a), FormsModule],
52063
+ imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$b), FormsModule],
51856
52064
  declarations: [ToastTestingPage],
51857
52065
  exports: [RouterModule, ToastTestingPage],
51858
52066
  }]
@@ -51908,7 +52116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
51908
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" }]
51909
52117
  }], ctorParameters: () => [{ type: i2$1.PopoverController }] });
51910
52118
 
51911
- const routes$9 = [
52119
+ const routes$a = [
51912
52120
  {
51913
52121
  path: 'upload-file',
51914
52122
  pathMatch: 'full',
@@ -51918,12 +52126,12 @@ const routes$9 = [
51918
52126
  class UploadFileTestingModule {
51919
52127
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFileTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
51920
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] });
51921
- 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] });
51922
52130
  }
51923
52131
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFileTestingModule, decorators: [{
51924
52132
  type: NgModule,
51925
52133
  args: [{
51926
- imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$9)],
52134
+ imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$a)],
51927
52135
  declarations: [UploadFileTestingPage],
51928
52136
  exports: [RouterModule, UploadFileTestingPage],
51929
52137
  }]
@@ -52052,7 +52260,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52052
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" }]
52053
52261
  }], ctorParameters: () => [{ type: ImageAttachmentService }, { type: i1$7.ActivatedRoute }] });
52054
52262
 
52055
- const routes$8 = [
52263
+ const routes$9 = [
52056
52264
  {
52057
52265
  path: 'gallery',
52058
52266
  pathMatch: 'full',
@@ -52074,7 +52282,7 @@ class ImageGalleryTestingModule {
52074
52282
  ImageGalleryModule,
52075
52283
  SharedMaterialModule,
52076
52284
  TranslateModule.forChild(),
52077
- RouterModule.forChild(routes$8),
52285
+ RouterModule.forChild(routes$9),
52078
52286
  TranslateModule.forChild(),
52079
52287
  SharedDebugModule, RouterModule] });
52080
52288
  }
@@ -52087,7 +52295,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52087
52295
  ImageGalleryModule,
52088
52296
  SharedMaterialModule,
52089
52297
  TranslateModule.forChild(),
52090
- RouterModule.forChild(routes$8),
52298
+ RouterModule.forChild(routes$9),
52091
52299
  TranslateModule.forChild(),
52092
52300
  SharedDebugModule,
52093
52301
  ],
@@ -52131,7 +52339,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52131
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" }]
52132
52340
  }], ctorParameters: () => [{ type: AudioProvider }] });
52133
52341
 
52134
- const routes$7 = [
52342
+ const routes$8 = [
52135
52343
  {
52136
52344
  path: 'audio',
52137
52345
  pathMatch: 'full',
@@ -52141,19 +52349,19 @@ const routes$7 = [
52141
52349
  class AudioTestingModule {
52142
52350
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AudioTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52143
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] });
52144
- 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] });
52145
52353
  }
52146
52354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AudioTestingModule, decorators: [{
52147
52355
  type: NgModule,
52148
52356
  args: [{
52149
- imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$7)],
52357
+ imports: [CommonModule, IonicModule, TranslateModule.forChild(), RouterModule.forChild(routes$8)],
52150
52358
  declarations: [AudioTestingPage],
52151
52359
  exports: [RouterModule, AudioTestingPage],
52152
52360
  }]
52153
52361
  }] });
52154
52362
 
52155
52363
  const SHARED_STORAGE_TESTING_PAGES = [{ label: 'Storage explorer', page: '/testing/shared/storage' }];
52156
- const routes$6 = [
52364
+ const routes$7 = [
52157
52365
  {
52158
52366
  path: 'storage',
52159
52367
  loadChildren: () => Promise.resolve().then(function () { return storageExplorer_testingRouting_module; }).then((m) => m.StorageExplorerTestingRoutingModule),
@@ -52162,12 +52370,12 @@ const routes$6 = [
52162
52370
  class StorageExplorerTestingModule {
52163
52371
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52164
52372
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingModule, imports: [CommonModule, i1$7.RouterModule], exports: [RouterModule] });
52165
- 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] });
52166
52374
  }
52167
52375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingModule, decorators: [{
52168
52376
  type: NgModule,
52169
52377
  args: [{
52170
- imports: [CommonModule, RouterModule.forChild(routes$6)],
52378
+ imports: [CommonModule, RouterModule.forChild(routes$7)],
52171
52379
  exports: [RouterModule],
52172
52380
  }]
52173
52381
  }] });
@@ -52358,7 +52566,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52358
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"] }]
52359
52567
  }], ctorParameters: () => [{ type: i1$7.ActivatedRoute }, { type: i1$7.Router }, { type: i2$1.NavController }, { type: i2$1.AlertController }, { type: i1$1.TranslateService }, { type: MenuService }] });
52360
52568
 
52361
- const routes$5 = [
52569
+ const routes$6 = [
52362
52570
  {
52363
52571
  path: 'menu',
52364
52572
  data: {
@@ -52397,12 +52605,12 @@ const routes$5 = [
52397
52605
  class MenuTestingModule {
52398
52606
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52399
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] });
52400
- 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] });
52401
52609
  }
52402
52610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTestingModule, decorators: [{
52403
52611
  type: NgModule,
52404
52612
  args: [{
52405
- imports: [CommonModule, RouterModule.forChild(routes$5), AppMenuModule, SharedModule],
52613
+ imports: [CommonModule, RouterModule.forChild(routes$6), AppMenuModule, SharedModule],
52406
52614
  declarations: [MenuTestingPage, OtherMenuTestingPage],
52407
52615
  exports: [RouterModule, MenuTestingPage, OtherMenuTestingPage],
52408
52616
  }]
@@ -52474,7 +52682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52474
52682
  type: Input
52475
52683
  }] } });
52476
52684
 
52477
- const routes$4 = [
52685
+ const routes$5 = [
52478
52686
  {
52479
52687
  path: 'name-filter-selector',
52480
52688
  pathMatch: 'full',
@@ -52484,12 +52692,12 @@ const routes$4 = [
52484
52692
  class NamedFilterSelectorTestingModule {
52485
52693
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NamedFilterSelectorTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52486
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] });
52487
- 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] });
52488
52696
  }
52489
52697
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NamedFilterSelectorTestingModule, decorators: [{
52490
52698
  type: NgModule,
52491
52699
  args: [{
52492
- imports: [CommonModule, RouterModule.forChild(routes$4), SharedModule],
52700
+ imports: [CommonModule, RouterModule.forChild(routes$5), SharedModule],
52493
52701
  declarations: [NamedFilterSelectorTestingPage],
52494
52702
  exports: [RouterModule, NamedFilterSelectorTestingPage],
52495
52703
  }]
@@ -52541,7 +52749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52541
52749
  args: [ENVIRONMENT]
52542
52750
  }] }] });
52543
52751
 
52544
- const routes$3 = [
52752
+ const routes$4 = [
52545
52753
  {
52546
52754
  path: 'markdown',
52547
52755
  pathMatch: 'full',
@@ -52551,12 +52759,12 @@ const routes$3 = [
52551
52759
  class MarkdownTestingModule {
52552
52760
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52553
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] });
52554
- 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] });
52555
52763
  }
52556
52764
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownTestingModule, decorators: [{
52557
52765
  type: NgModule,
52558
52766
  args: [{
52559
- imports: [CommonModule, RouterModule.forChild(routes$3), SharedModule, FormsModule, SharedMarkdownModule],
52767
+ imports: [CommonModule, RouterModule.forChild(routes$4), SharedModule, FormsModule, SharedMarkdownModule],
52560
52768
  declarations: [MarkdownTestPage],
52561
52769
  exports: [RouterModule, MarkdownTestPage],
52562
52770
  }]
@@ -52655,7 +52863,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
52655
52863
  }]
52656
52864
  }] });
52657
52865
 
52658
- const routes$2 = [
52866
+ const routes$3 = [
52659
52867
  {
52660
52868
  path: '',
52661
52869
  pathMatch: 'full',
@@ -52665,12 +52873,12 @@ const routes$2 = [
52665
52873
  class StorageExplorerTestingRoutingModule {
52666
52874
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
52667
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] });
52668
- 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] });
52669
52877
  }
52670
52878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StorageExplorerTestingRoutingModule, decorators: [{
52671
52879
  type: NgModule,
52672
52880
  args: [{
52673
- imports: [CommonModule, RouterModule.forChild(routes$2), StorageExplorerModule],
52881
+ imports: [CommonModule, RouterModule.forChild(routes$3), StorageExplorerModule],
52674
52882
  exports: [RouterModule],
52675
52883
  }]
52676
52884
  }] });
@@ -53967,6 +54175,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
53967
54175
  }]
53968
54176
  }] });
53969
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
+
53970
54234
  const CORE_TESTING_PAGES = [
53971
54235
  { label: 'Core components', divider: true },
53972
54236
  { label: 'Table (click to edit)', page: '/testing/core/table' },
@@ -53976,6 +54240,7 @@ const CORE_TESTING_PAGES = [
53976
54240
  { label: 'Text popover', page: '/testing/core/text-popover' },
53977
54241
  { label: 'Properties form', page: '/testing/core/properties-form' },
53978
54242
  { label: 'Array form', page: '/testing/core/array-form' },
54243
+ { label: 'Icon Selector', page: '/testing/core/icon-selector' },
53979
54244
  ];
53980
54245
  const routes$1 = [
53981
54246
  {
@@ -54018,6 +54283,11 @@ const routes$1 = [
54018
54283
  pathMatch: 'full',
54019
54284
  component: ArrayFormTestPage,
54020
54285
  },
54286
+ {
54287
+ path: 'icon-selector',
54288
+ pathMatch: 'full',
54289
+ component: IconSelectorTestPage,
54290
+ },
54021
54291
  ];
54022
54292
  class CoreTestingModule {
54023
54293
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CoreTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -54027,13 +54297,15 @@ class CoreTestingModule {
54027
54297
  TextFormTestingModule,
54028
54298
  TextPopoverTestingModule,
54029
54299
  PropertiesFormTestingModule,
54030
- FormArrayTestModule], exports: [RouterModule,
54300
+ FormArrayTestModule,
54301
+ IconSelectorTestingModule], exports: [RouterModule,
54031
54302
  // Sub modules
54032
54303
  TableTestingModule,
54033
54304
  TextFormTestingModule,
54034
54305
  TextPopoverTestingModule,
54035
54306
  PropertiesFormTestingModule,
54036
- FormArrayTestModule] });
54307
+ FormArrayTestModule,
54308
+ IconSelectorTestingModule] });
54037
54309
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CoreTestingModule, imports: [CommonModule,
54038
54310
  TranslateModule.forChild(),
54039
54311
  RouterModule.forChild(routes$1),
@@ -54042,13 +54314,15 @@ class CoreTestingModule {
54042
54314
  TextFormTestingModule,
54043
54315
  TextPopoverTestingModule,
54044
54316
  PropertiesFormTestingModule,
54045
- FormArrayTestModule, RouterModule,
54317
+ FormArrayTestModule,
54318
+ IconSelectorTestingModule, RouterModule,
54046
54319
  // Sub modules
54047
54320
  TableTestingModule,
54048
54321
  TextFormTestingModule,
54049
54322
  TextPopoverTestingModule,
54050
54323
  PropertiesFormTestingModule,
54051
- FormArrayTestModule] });
54324
+ FormArrayTestModule,
54325
+ IconSelectorTestingModule] });
54052
54326
  }
54053
54327
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CoreTestingModule, decorators: [{
54054
54328
  type: NgModule,
@@ -54063,6 +54337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54063
54337
  TextPopoverTestingModule,
54064
54338
  PropertiesFormTestingModule,
54065
54339
  FormArrayTestModule,
54340
+ IconSelectorTestingModule,
54066
54341
  ],
54067
54342
  exports: [
54068
54343
  RouterModule,
@@ -54072,6 +54347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54072
54347
  TextPopoverTestingModule,
54073
54348
  PropertiesFormTestingModule,
54074
54349
  FormArrayTestModule,
54350
+ IconSelectorTestingModule,
54075
54351
  ],
54076
54352
  }]
54077
54353
  }] });
@@ -54791,5 +55067,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54791
55067
  * Generated bundle index. Do not edit.
54792
55068
  */
54793
55069
 
54794
- 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 };
54795
55071
  //# sourceMappingURL=sumaris-net.ngx-components.mjs.map