@sumaris-net/ngx-components 0.23.2-beta → 0.24.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,12 @@
1
- import { InjectionToken, EventEmitter, forwardRef, Component, ChangeDetectionStrategy, ChangeDetectorRef, Optional, Input, HostBinding, Output, ViewChild, ɵɵdefineInjectable, ɵɵinject, Pipe, Injectable, Directive, NgModule, ElementRef, ViewChildren, HostListener, ComponentFactoryResolver, ApplicationRef, INJECTOR, Injector, Inject, Renderer2 } from '@angular/core';
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, EventEmitter, forwardRef, Component, ChangeDetectionStrategy, ChangeDetectorRef, Optional, Input, HostBinding, Output, ViewChild, Pipe, Injectable, Directive, NgModule, ElementRef, ViewChildren, HostListener, ComponentFactoryResolver, ApplicationRef, Injector, Inject, Renderer2 } from '@angular/core';
3
+ import * as i1$3 from '@angular/common';
2
4
  import { CommonModule, DOCUMENT, Location } from '@angular/common';
3
5
  import { CdkTableModule } from '@angular/cdk/table';
4
6
  import { A11yModule } from '@angular/cdk/a11y';
5
7
  import { OverlayModule, OverlayContainer, FullscreenOverlayContainer, Overlay } from '@angular/cdk/overlay';
6
8
  import { ScrollingModule } from '@angular/cdk/scrolling';
9
+ import * as i1$2 from '@angular/material/core';
7
10
  import { DateAdapter, MatCommonModule, MatRippleModule } from '@angular/material/core';
8
11
  import { MatTableModule, MatTable, MatColumnDef } from '@angular/material/table';
9
12
  import { MatSortModule, MatSort } from '@angular/material/sort';
@@ -27,16 +30,21 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
27
30
  import { MatRadioModule } from '@angular/material/radio';
28
31
  import { MatBadgeModule } from '@angular/material/badge';
29
32
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
33
+ import * as i2$1 from '@angular/material/dialog';
30
34
  import { MatDialogModule, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
31
35
  import { MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteModule, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS } from '@angular/material/autocomplete';
32
36
  import { __awaiter, __decorate } from 'tslib';
37
+ import * as i1$6 from '@angular/forms';
33
38
  import { NG_VALUE_ACCESSOR, FormGroupDirective, ReactiveFormsModule, AbstractControl, Validators, FormBuilder, FormControl, FormGroup, FormArray } from '@angular/forms';
34
39
  import { timer, merge, fromEvent, Subscription, BehaviorSubject, Subject, isObservable, of, noop as noop$8, Observable, defer, concat, combineLatest, EMPTY } from 'rxjs';
35
40
  import { filter, first, map, takeUntil, startWith, debounceTime, takeWhile, switchMap, tap, distinctUntilChanged, mergeMap, catchError, throttleTime } from 'rxjs/operators';
41
+ import * as i1$1 from '@ngx-translate/core';
36
42
  import { TranslateService, TranslateModule } from '@ngx-translate/core';
43
+ import * as i1$4 from '@ionic/angular';
37
44
  import { IonicModule, Platform, IonRouterOutlet, ModalController, IonicSafeString, createAnimation, ToastController, AlertController, IonicRouteStrategy, NavParams, MenuController, IonContent } from '@ionic/angular';
38
45
  import * as momentImported from 'moment';
39
46
  import { isMoment } from 'moment';
47
+ import * as i1 from '@angular/material-moment-adapter';
40
48
  import { MomentDateAdapter, MatMomentDateModule } from '@angular/material-moment-adapter';
41
49
  import { Keyboard } from '@ionic-native/keyboard/ngx';
42
50
  import { TextMaskModule } from 'angular2-text-mask';
@@ -46,32 +54,38 @@ import { trigger, state, style, transition, animate } from '@angular/animations'
46
54
  import { MatDividerModule } from '@angular/material/divider';
47
55
  import { MatTooltipModule } from '@angular/material/tooltip';
48
56
  import { MatChipsModule } from '@angular/material/chips';
57
+ import * as i3$3 from '@angular/router';
49
58
  import { Router, RouterModule, RouteReuseStrategy, ActivatedRoute } from '@angular/router';
59
+ import * as i1$5 from '@angular/platform-browser';
50
60
  import { HammerGestureConfig, EventManager } from '@angular/platform-browser';
61
+ import * as i2$2 from '@angular/common/http';
51
62
  import { HttpResponse, HttpClient, HttpHeaders, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
52
63
  import { ColorPickerModule } from 'ngx-color-picker';
53
- import { NativeAudio as NativeAudio$1 } from '@ionic-native/native-audio/ngx';
54
- import { Vibration as Vibration$1 } from '@ionic-native/vibration/ngx';
64
+ import { NativeAudio } from '@ionic-native/native-audio/ngx';
65
+ import { Vibration } from '@ionic-native/vibration/ngx';
55
66
  import { AudioManagement } from '@ionic-native/audio-management/ngx';
56
- import { NativeAudio } from '@ionic-native/native-audio/ngx/index';
57
- import { Vibration } from '@ionic-native/vibration/ngx/index';
58
- import { AudioManagement as AudioManagement$1 } from '@ionic-native/audio-management/ngx/index';
67
+ import * as i2 from '@ionic-native/native-audio/ngx/index';
68
+ import * as i3 from '@ionic-native/vibration/ngx/index';
69
+ import * as i4 from '@ionic-native/audio-management/ngx/index';
59
70
  import * as uuidv4Imported from 'uuid/v4';
60
71
  import { DragDropModule } from '@angular/cdk/drag-drop';
61
72
  import { MarkdownModule } from 'ngx-markdown';
62
73
  import { sign, box, hash, verify } from 'tweetnacl';
74
+ import * as i3$1 from '@ionic/storage';
63
75
  import { Storage, IonicStorageModule } from '@ionic/storage';
64
76
  import 'zone.js/dist/zone-error';
65
- import { SplashScreen as SplashScreen$1 } from '@ionic-native/splash-screen/ngx';
66
- import { Connection, Network as Network$1 } from '@ionic-native/network/ngx';
67
- import { CacheService as CacheService$1, CacheModule } from 'ionic-cache';
68
- import { CacheService } from 'ionic-cache/dist/cache.service';
69
- import { Network } from '@ionic-native/network/ngx/index';
70
- import { SplashScreen } from '@ionic-native/splash-screen/ngx/index';
71
- import { StatusBar as StatusBar$1 } from '@ionic-native/status-bar/ngx';
77
+ import { SplashScreen } from '@ionic-native/splash-screen/ngx';
78
+ import { Connection, Network } from '@ionic-native/network/ngx';
79
+ import { CacheService, CacheModule } from 'ionic-cache';
80
+ import * as i6 from 'ionic-cache/dist/cache.service';
81
+ import * as i9 from '@ionic-native/network/ngx/index';
82
+ import * as i10 from '@ionic-native/splash-screen/ngx/index';
83
+ import { StatusBar } from '@ionic-native/status-bar/ngx';
84
+ import * as i2$4 from '@angular/cdk/platform';
72
85
  import { Platform as Platform$1 } from '@angular/cdk/platform';
73
- import { InAppBrowser as InAppBrowser$1 } from '@ionic-native/in-app-browser/ngx';
86
+ import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
74
87
  import { ApolloLink, NetworkStatus, InMemoryCache, ApolloClient, gql } from '@apollo/client/core';
88
+ import * as i2$3 from 'apollo-angular';
75
89
  import { Apollo } from 'apollo-angular';
76
90
  import { WebSocketLink } from '@apollo/client/link/ws';
77
91
  import { getMainDefinition } from '@apollo/client/utilities';
@@ -79,11 +93,14 @@ import { RetryLink } from '@apollo/client/link/retry';
79
93
  import QueueLink from 'apollo-link-queue';
80
94
  import SerializingLink from 'apollo-link-serialize';
81
95
  import loggerLink from 'apollo-link-logger';
96
+ import * as i3$2 from 'apollo-angular/http';
82
97
  import { HttpLink } from 'apollo-angular/http';
83
98
  import { IonicStorageWrapper, persistCache } from 'apollo3-cache-persist';
84
- import { StatusBar } from '@ionic-native/status-bar/ngx/index';
85
- import { Keyboard as Keyboard$1 } from '@ionic-native/keyboard/ngx/index';
86
- import { InAppBrowser } from '@ionic-native/in-app-browser/ngx/index';
99
+ import { NotificationVisibility, Downloader } from '@ionic-native/downloader/ngx';
100
+ import * as i14 from '@ionic-native/status-bar/ngx/index';
101
+ import * as i15 from '@ionic-native/keyboard/ngx/index';
102
+ import * as i17 from '@ionic-native/in-app-browser/ngx/index';
103
+ import * as i18 from '@ionic-native/downloader/ngx/index';
87
104
  import { ValidatorService, TableDataSource } from '@e-is/ngx-material-table';
88
105
  import { SelectionModel } from '@angular/cdk/collections';
89
106
  import { NgxJdenticonModule } from 'ngx-jdenticon';
@@ -251,10 +268,6 @@ function suggestFromArray(items, value, opts) {
251
268
  }
252
269
  // Sort
253
270
  items = items.sort(propertiesPathComparator(keys));
254
- // const sortAttribute = keys && keys[0]
255
- // if (sortAttribute) {
256
- // items = sort(items, sortAttribute);
257
- // }
258
271
  // Truncate if need
259
272
  const total = (items === null || items === void 0 ? void 0 : items.length) || 0;
260
273
  if (opts) {
@@ -324,16 +337,15 @@ function propertiesPathComparator(keys, defaultValues) {
324
337
  // Stop if not equals, otherwise continue with the next key
325
338
  .find(res => res !== 0) || 0;
326
339
  }
327
- function sort(array, attribute) {
340
+ function sort(array, attribute, opts) {
328
341
  if (isEmptyArray(array))
329
342
  return array;
343
+ const compareFn = opts
344
+ ? new Intl.Collator(undefined, opts).compare
345
+ : (v1, v2) => v1 === v2 ? 0 : v1 > v2 ? 1 : -1;
330
346
  return array
331
347
  .slice() // copy
332
- .sort((a, b) => {
333
- const valueA = a[attribute];
334
- const valueB = b[attribute];
335
- return valueA === valueB ? 0 : (valueA > valueB ? 1 : -1);
336
- });
348
+ .sort((a, b) => compareFn(a[attribute], b[attribute]));
337
349
  }
338
350
  const INTEGER_REGEXP = /^[-]?\d+$/;
339
351
  function isInt(value) {
@@ -873,19 +885,19 @@ class MatAutocompleteConfigHolder {
873
885
  return this.fields[fieldName] || this.add(fieldName);
874
886
  }
875
887
  }
876
- const DEFAULT_VALUE_ACCESSOR = {
888
+ const DEFAULT_VALUE_ACCESSOR$6 = {
877
889
  provide: NG_VALUE_ACCESSOR,
878
890
  useExisting: forwardRef(() => MatAutocompleteField),
879
891
  multi: true
880
892
  };
881
- const noop = () => { };
882
- const ɵ0 = noop;
893
+ const noop$7 = () => { };
894
+ const ɵ0$a = noop$7;
883
895
  class MatAutocompleteField {
884
896
  constructor(cd, formGroupDir) {
885
897
  this.cd = cd;
886
898
  this.formGroupDir = formGroupDir;
887
- this._onChangeCallback = noop;
888
- this._onTouchedCallback = noop;
899
+ this._onChangeCallback = noop$7;
900
+ this._onTouchedCallback = noop$7;
889
901
  this._subscription = new Subscription();
890
902
  this._filter$ = new BehaviorSubject(undefined);
891
903
  this._reload$ = new Subject();
@@ -1472,7 +1484,7 @@ MatAutocompleteField.decorators = [
1472
1484
  // eslint-disable-next-line @angular-eslint/component-selector
1473
1485
  selector: 'mat-autocomplete-field',
1474
1486
  template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <!-- readonly -->\n <ng-container *ngIf=\"_readonly; else writable\">\n <input matInput hidden type=\"text\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\" readonly>\n <ion-text>{{displayWith(value)}}</ion-text>\n </ng-container>\n\n <ng-template #writable>\n\n <!-- Basic select -->\n <mat-select #matSelect\n *ngIf=\"!searchable; else searchableTemplate\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n (keydown.escape)=\"onKeydownEscape.emit($event)\"\n [compareWith]=\"compareWith\"\n [multiple]=\"multiple\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- header -->\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as isLast\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <!-- options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text>{{item | propertyGet: path }}</ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initMatSelectInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n </mat-select>\n </ng-template>\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #searchableTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [required]=\"required\"\n (click)=\"onClick.emit($event)\"\n (focus)=\"filterInputTextFocusInEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"onKeydownEscape.emit($event)\"\n (keyup.enter)=\"onKeyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.opened && onDropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [class.cdk-visually-hidden]=\"!searchable\"\n [panelWidth]=\"panelWidth\">\n\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as last\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n <ion-text color=\"light\" *ngIf=\"last && itemCount; let count \" class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n <ng-container *ngIf=\"$filteredItems | async; else loadingTemplate; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\" >\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initAutocompleteInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(matInputText.value | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n </ng-template>\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"searchable\"\n (click)=\"onDropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\"\n *ngIf=\"enabled && mobile && !searchable && !multiple\"\n [title]=\"'COMMON.BTN_SEARCH'|translate\"\n (click)=\"toggleSearch($event)\">\n <mat-icon>search</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content matSuffix select=\"[matSuffix]\"></ng-content>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n",
1475
- providers: [DEFAULT_VALUE_ACCESSOR],
1487
+ providers: [DEFAULT_VALUE_ACCESSOR$6],
1476
1488
  changeDetection: ChangeDetectionStrategy.OnPush,
1477
1489
  styles: [":host{display:inline-block;position:relative}:host.ion-text-wrap ion-label{white-space:normal!important}button[hidden]{display:none}mat-icon.select-arrow{color:rgba(0,0,0,.47);font-size:150%}.fact-scroll-viewport{height:100%;width:100%}.fact-item{height:54px;display:flex}.fact-item .fact-date{min-width:100px;text-align:center;font-size:24pt}.fact-item .fact-date,.fact-item .fact-text{height:100%;align-items:center;justify-content:center;display:flex}.fact-item .fact-text{border-radius:10px}cdk-virtual-scroll-viewport{border:1px solid #000}cdk-virtual-scroll-viewport li{list-style:none}"]
1478
1490
  },] }
@@ -1549,7 +1561,7 @@ class DateFormatPipe {
1549
1561
  return this.dateAdapter.format(date, displayFormat);
1550
1562
  }
1551
1563
  }
1552
- DateFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(ɵɵinject(MomentDateAdapter), ɵɵinject(TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
1564
+ DateFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
1553
1565
  DateFormatPipe.decorators = [
1554
1566
  { type: Pipe, args: [{
1555
1567
  name: 'dateFormat'
@@ -1561,7 +1573,7 @@ DateFormatPipe.ctorParameters = () => [
1561
1573
  { type: TranslateService }
1562
1574
  ];
1563
1575
 
1564
- const moment = momentImported;
1576
+ const moment$6 = momentImported;
1565
1577
  class DateDiffDurationPipe {
1566
1578
  constructor(dateAdapter, translate) {
1567
1579
  this.dateAdapter = dateAdapter;
@@ -1577,17 +1589,17 @@ class DateDiffDurationPipe {
1577
1589
  return this.format(startDate, endDate);
1578
1590
  }
1579
1591
  format(startDate, endDate) {
1580
- const duration = moment.duration(endDate.diff(startDate));
1592
+ const duration = moment$6.duration(endDate.diff(startDate));
1581
1593
  if (duration.asMinutes() < 0)
1582
1594
  return '';
1583
- const timeDuration = moment(0)
1595
+ const timeDuration = moment$6(0)
1584
1596
  .hour(duration.hours())
1585
1597
  .minute(duration.minutes());
1586
1598
  const days = Math.floor(duration.asDays());
1587
1599
  return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format('HH:mm');
1588
1600
  }
1589
1601
  }
1590
- DateDiffDurationPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(ɵɵinject(DateAdapter), ɵɵinject(TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
1602
+ DateDiffDurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(i0.ɵɵinject(i1$2.DateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
1591
1603
  DateDiffDurationPipe.decorators = [
1592
1604
  { type: Pipe, args: [{
1593
1605
  name: 'dateDiffDuration'
@@ -1608,7 +1620,7 @@ class DateFromNowPipe {
1608
1620
  return date ? date.fromNow(args && args.withoutSuffix) : '';
1609
1621
  }
1610
1622
  }
1611
- DateFromNowPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(ɵɵinject(MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
1623
+ DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
1612
1624
  DateFromNowPipe.decorators = [
1613
1625
  { type: Pipe, args: [{
1614
1626
  name: 'dateFromNow'
@@ -1677,7 +1689,7 @@ function formatToDD(value, opts) {
1677
1689
  value *= -1;
1678
1690
  }
1679
1691
  }
1680
- let degrees = roundFloat(value, opts.maxDecimals).toString();
1692
+ let degrees = roundFloat$1(value, opts.maxDecimals).toString();
1681
1693
  // Add sign
1682
1694
  let sign = negative ? '-' : '+';
1683
1695
  if (opts.placeholderChar) {
@@ -1728,7 +1740,7 @@ function formatToDDMMSS(value, opts) {
1728
1740
  }
1729
1741
  let degrees = Math.trunc(value);
1730
1742
  let minutes = Math.trunc((value - degrees) * 60);
1731
- let seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
1743
+ let seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
1732
1744
  while (seconds >= 60) {
1733
1745
  seconds -= 60;
1734
1746
  minutes += 1;
@@ -1796,7 +1808,7 @@ function formatToDDMM(value, opts) {
1796
1808
  }
1797
1809
  }
1798
1810
  let degrees = Math.trunc(value);
1799
- let minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
1811
+ let minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
1800
1812
  while (minutes >= 60) {
1801
1813
  minutes -= 60;
1802
1814
  degrees += 1;
@@ -1847,15 +1859,15 @@ function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholderChar)
1847
1859
  return NaN;
1848
1860
  }
1849
1861
  if (pattern === 'DD')
1850
- return roundFloat(degrees, maxDecimals);
1862
+ return roundFloat$1(degrees, maxDecimals);
1851
1863
  const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
1852
1864
  const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
1853
1865
  const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
1854
1866
  const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
1855
1867
  degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
1856
- return roundFloat(degrees, maxDecimals);
1868
+ return roundFloat$1(degrees, maxDecimals);
1857
1869
  }
1858
- function roundFloat(input, maxDecimals) {
1870
+ function roundFloat$1(input, maxDecimals) {
1859
1871
  if (maxDecimals > 0) {
1860
1872
  const powDecimal = Math.pow(10, maxDecimals);
1861
1873
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -1875,7 +1887,7 @@ class LatLongFormatPipe {
1875
1887
  return ((!args.type || args.type !== 'latitude') ? formatLongitude : formatLatitude)(value, args);
1876
1888
  }
1877
1889
  }
1878
- LatLongFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
1890
+ LatLongFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
1879
1891
  LatLongFormatPipe.decorators = [
1880
1892
  { type: Pipe, args: [{
1881
1893
  name: 'latLongFormat'
@@ -1887,7 +1899,7 @@ class LatitudeFormatPipe {
1887
1899
  this.transform = formatLatitude;
1888
1900
  }
1889
1901
  }
1890
- LatitudeFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
1902
+ LatitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
1891
1903
  LatitudeFormatPipe.decorators = [
1892
1904
  { type: Pipe, args: [{
1893
1905
  name: 'latitudeFormat'
@@ -1899,7 +1911,7 @@ class LongitudeFormatPipe {
1899
1911
  this.transform = formatLongitude;
1900
1912
  }
1901
1913
  }
1902
- LongitudeFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
1914
+ LongitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
1903
1915
  LongitudeFormatPipe.decorators = [
1904
1916
  { type: Pipe, args: [{
1905
1917
  name: 'longitudeFormat'
@@ -1919,7 +1931,7 @@ class NumberFormatPipe {
1919
1931
  }
1920
1932
  }
1921
1933
  }
1922
- NumberFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
1934
+ NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
1923
1935
  NumberFormatPipe.decorators = [
1924
1936
  { type: Pipe, args: [{
1925
1937
  name: 'numberFormat'
@@ -1959,7 +1971,7 @@ class HighlightPipe {
1959
1971
  }
1960
1972
  }
1961
1973
  }
1962
- HighlightPipe.ɵprov = ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
1974
+ HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
1963
1975
  HighlightPipe.decorators = [
1964
1976
  { type: Pipe, args: [{
1965
1977
  name: 'highlight'
@@ -2024,7 +2036,7 @@ FileSizePipe.decorators = [
2024
2036
  { type: Pipe, args: [{ name: 'fileSize' },] }
2025
2037
  ];
2026
2038
 
2027
- const moment$1 = momentImported;
2039
+ const moment$5 = momentImported;
2028
2040
  const DATE_UNIX_TIMESTAMP = 'X';
2029
2041
  const DATE_UNIX_MS_TIMESTAMP = 'x';
2030
2042
  class DateUtils {
@@ -2058,32 +2070,32 @@ function fromDateISOString(value) {
2058
2070
  if (!value || isMoment(value))
2059
2071
  return value;
2060
2072
  // Parse the input value, as a ISO date time
2061
- const date = moment$1(value, DATE_ISO_PATTERN);
2073
+ const date = moment$5(value, DATE_ISO_PATTERN);
2062
2074
  if (date.isValid())
2063
2075
  return date;
2064
2076
  // Not valid: trying to convert from unix timestamp
2065
2077
  if (typeof value === 'string') {
2066
2078
  console.warn('Wrong date format - Trying to convert from local time: ' + value);
2067
2079
  if (value.length === 10) {
2068
- return moment$1(value, DATE_UNIX_TIMESTAMP);
2080
+ return moment$5(value, DATE_UNIX_TIMESTAMP);
2069
2081
  }
2070
2082
  else if (value.length === 13) {
2071
- return moment$1(value, DATE_UNIX_MS_TIMESTAMP);
2083
+ return moment$5(value, DATE_UNIX_MS_TIMESTAMP);
2072
2084
  }
2073
2085
  }
2074
2086
  console.warn('Unable to parse date: ' + value);
2075
2087
  return undefined;
2076
2088
  }
2077
2089
  function fromUnixTimestamp(timeInSec) {
2078
- return moment$1(timeInSec, DATE_UNIX_TIMESTAMP);
2090
+ return moment$5(timeInSec, DATE_UNIX_TIMESTAMP);
2079
2091
  }
2080
2092
  function fromUnixMsTimestamp(timeInMs) {
2081
- return moment$1(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2093
+ return moment$5(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2082
2094
  }
2083
2095
  function toDuration(value, unit) {
2084
2096
  if (!value)
2085
2097
  return undefined;
2086
- const duration = moment$1.duration(value, unit);
2098
+ const duration = moment$5.duration(value, unit);
2087
2099
  // fix 990+ ms
2088
2100
  if (duration.milliseconds() >= 990) {
2089
2101
  duration.add(1000 - duration.milliseconds(), 'ms');
@@ -2112,7 +2124,7 @@ class DurationPipe {
2112
2124
  return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;
2113
2125
  }
2114
2126
  }
2115
- DurationPipe.ɵprov = ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(ɵɵinject(TranslateService)); }, token: DurationPipe, providedIn: "root" });
2127
+ DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
2116
2128
  DurationPipe.decorators = [
2117
2129
  { type: Pipe, args: [{
2118
2130
  name: 'duration'
@@ -2133,7 +2145,7 @@ class MathAbsPipe {
2133
2145
  }
2134
2146
  }
2135
2147
  }
2136
- MathAbsPipe.ɵprov = ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2148
+ MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2137
2149
  MathAbsPipe.decorators = [
2138
2150
  { type: Pipe, args: [{
2139
2151
  name: 'mathAbs'
@@ -2145,7 +2157,7 @@ class EvenPipe {
2145
2157
  return val % 2 === 0;
2146
2158
  }
2147
2159
  }
2148
- EvenPipe.ɵprov = ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
2160
+ EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
2149
2161
  EvenPipe.decorators = [
2150
2162
  { type: Pipe, args: [{
2151
2163
  name: 'even'
@@ -2157,7 +2169,7 @@ class OddPipe {
2157
2169
  return val % 2 !== 0;
2158
2170
  }
2159
2171
  }
2160
- OddPipe.ɵprov = ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
2172
+ OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
2161
2173
  OddPipe.decorators = [
2162
2174
  { type: Pipe, args: [{
2163
2175
  name: 'odd'
@@ -2265,7 +2277,7 @@ class MapGetPipe {
2265
2277
  return val[key];
2266
2278
  }
2267
2279
  }
2268
- MapGetPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
2280
+ MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
2269
2281
  MapGetPipe.decorators = [
2270
2282
  { type: Pipe, args: [{
2271
2283
  name: 'mapGet'
@@ -2279,7 +2291,7 @@ class MapKeysPipe {
2279
2291
  return Object.keys(map);
2280
2292
  }
2281
2293
  }
2282
- MapKeysPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
2294
+ MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
2283
2295
  MapKeysPipe.decorators = [
2284
2296
  { type: Pipe, args: [{
2285
2297
  name: 'mapKeys'
@@ -2293,7 +2305,7 @@ class MapValuesPipe {
2293
2305
  return Object.values(map);
2294
2306
  }
2295
2307
  }
2296
- MapValuesPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
2308
+ MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
2297
2309
  MapValuesPipe.decorators = [
2298
2310
  { type: Pipe, args: [{
2299
2311
  name: 'mapValues'
@@ -2306,7 +2318,7 @@ class IsNotNilOrBlankPipe {
2306
2318
  return isNotNilOrBlank(value);
2307
2319
  }
2308
2320
  }
2309
- IsNotNilOrBlankPipe.ɵprov = ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
2321
+ IsNotNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
2310
2322
  IsNotNilOrBlankPipe.decorators = [
2311
2323
  { type: Pipe, args: [{
2312
2324
  name: 'isNotNilOrBlank'
@@ -2318,7 +2330,7 @@ class IsNilOrBlankPipe {
2318
2330
  return isNilOrBlank(value);
2319
2331
  }
2320
2332
  }
2321
- IsNilOrBlankPipe.ɵprov = ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
2333
+ IsNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
2322
2334
  IsNilOrBlankPipe.decorators = [
2323
2335
  { type: Pipe, args: [{
2324
2336
  name: 'isNilOrBlank'
@@ -2330,7 +2342,7 @@ class ToStringPipe {
2330
2342
  return (value !== null && value !== undefined) ? value.toString() : '';
2331
2343
  }
2332
2344
  }
2333
- ToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
2345
+ ToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
2334
2346
  ToStringPipe.decorators = [
2335
2347
  { type: Pipe, args: [{
2336
2348
  name: 'toString'
@@ -2342,7 +2354,7 @@ class StrLengthPipe {
2342
2354
  return value && value.length || 0;
2343
2355
  }
2344
2356
  }
2345
- StrLengthPipe.ɵprov = ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
2357
+ StrLengthPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
2346
2358
  StrLengthPipe.decorators = [
2347
2359
  { type: Pipe, args: [{
2348
2360
  name: 'strLength'
@@ -2393,7 +2405,7 @@ class TranslateContextService {
2393
2405
  : parts.slice(0, parts.length - 1).concat(context + parts[parts.length - 1]).join('.');
2394
2406
  }
2395
2407
  }
2396
- TranslateContextService.ɵprov = ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(ɵɵinject(TranslateService)); }, token: TranslateContextService, providedIn: "root" });
2408
+ TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
2397
2409
  TranslateContextService.decorators = [
2398
2410
  { type: Injectable, args: [{ providedIn: 'root' },] }
2399
2411
  ];
@@ -2409,7 +2421,7 @@ class TranslateContextPipe {
2409
2421
  return this.translateContext.instant(key, context);
2410
2422
  }
2411
2423
  }
2412
- TranslateContextPipe.ɵprov = ɵɵdefineInjectable({ factory: function TranslateContextPipe_Factory() { return new TranslateContextPipe(ɵɵinject(TranslateContextService)); }, token: TranslateContextPipe, providedIn: "root" });
2424
+ TranslateContextPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextPipe_Factory() { return new TranslateContextPipe(i0.ɵɵinject(TranslateContextService)); }, token: TranslateContextPipe, providedIn: "root" });
2413
2425
  TranslateContextPipe.decorators = [
2414
2426
  { type: Pipe, args: [{
2415
2427
  name: 'translateContext'
@@ -2426,7 +2438,7 @@ class TranslatablePipe {
2426
2438
  return (_a = changeCaseToUnderscore(value)) === null || _a === void 0 ? void 0 : _a.toUpperCase();
2427
2439
  }
2428
2440
  }
2429
- TranslatablePipe.ɵprov = ɵɵdefineInjectable({ factory: function TranslatablePipe_Factory() { return new TranslatablePipe(); }, token: TranslatablePipe, providedIn: "root" });
2441
+ TranslatablePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslatablePipe_Factory() { return new TranslatablePipe(); }, token: TranslatablePipe, providedIn: "root" });
2430
2442
  TranslatablePipe.decorators = [
2431
2443
  { type: Pipe, args: [{
2432
2444
  name: 'translatable'
@@ -2443,7 +2455,7 @@ class PropertyGetPipe {
2443
2455
  args && args.defaultValue);
2444
2456
  }
2445
2457
  }
2446
- PropertyGetPipe.ɵprov = ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
2458
+ PropertyGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
2447
2459
  PropertyGetPipe.decorators = [
2448
2460
  { type: Pipe, args: [{
2449
2461
  name: 'propertyGet'
@@ -2687,12 +2699,12 @@ SharedMatAutocompleteModule.decorators = [
2687
2699
  },] }
2688
2700
  ];
2689
2701
 
2690
- const moment$2 = momentImported;
2702
+ const moment$4 = momentImported;
2691
2703
  // @dynamic
2692
2704
  class SharedValidators {
2693
2705
  static validDate(control) {
2694
2706
  const value = control.value;
2695
- const date = !value || moment$2.isMoment(value) ? value : moment$2(control.value, DATE_ISO_PATTERN);
2707
+ const date = !value || moment$4.isMoment(value) ? value : moment$4(control.value, DATE_ISO_PATTERN);
2696
2708
  if (date && (!date.isValid() || date.year() < 1970)) {
2697
2709
  return { validDate: true };
2698
2710
  }
@@ -3134,9 +3146,9 @@ function parseDuration(input, maxDecimals, placeholderChar) {
3134
3146
  const hour = parseInt(durationParts[0] || '0');
3135
3147
  const minute = parseInt(durationParts[1] || '0');
3136
3148
  const value = hour + (minute + 0.5) / 60;
3137
- return roundFloat$1(value, maxDecimals);
3149
+ return roundFloat(value, maxDecimals);
3138
3150
  }
3139
- function roundFloat$1(input, maxDecimals) {
3151
+ function roundFloat(input, maxDecimals) {
3140
3152
  if (maxDecimals > 0) {
3141
3153
  const powDecimal = Math.pow(10, maxDecimals);
3142
3154
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -3160,9 +3172,9 @@ const MASKS = {
3160
3172
  DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
3161
3173
  }
3162
3174
  };
3163
- const noop$1 = () => {
3175
+ const noop$6 = () => {
3164
3176
  };
3165
- const ɵ0$1 = noop$1;
3177
+ const ɵ0$9 = noop$6;
3166
3178
  class MatLatLongField {
3167
3179
  constructor(platform, translate, formBuilder, cd, formGroupDir) {
3168
3180
  this.platform = platform;
@@ -3170,8 +3182,8 @@ class MatLatLongField {
3170
3182
  this.formBuilder = formBuilder;
3171
3183
  this.cd = cd;
3172
3184
  this.formGroupDir = formGroupDir;
3173
- this._onChangeCallback = noop$1;
3174
- this._onTouchedCallback = noop$1;
3185
+ this._onChangeCallback = noop$6;
3186
+ this._onTouchedCallback = noop$6;
3175
3187
  this._subscription = new Subscription();
3176
3188
  this.disabling = false;
3177
3189
  this.writing = false;
@@ -3512,14 +3524,14 @@ SharedMatLatLongModule.decorators = [
3512
3524
  },] }
3513
3525
  ];
3514
3526
 
3515
- const DEFAULT_VALUE_ACCESSOR$1 = {
3527
+ const DEFAULT_VALUE_ACCESSOR$5 = {
3516
3528
  provide: NG_VALUE_ACCESSOR,
3517
3529
  useExisting: forwardRef(() => MatDate),
3518
3530
  multi: true
3519
3531
  };
3520
- const DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
3521
- const noop$2 = () => { };
3522
- const ɵ0$2 = noop$2;
3532
+ const DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
3533
+ const noop$5 = () => { };
3534
+ const ɵ0$8 = noop$5;
3523
3535
  class MatDate {
3524
3536
  constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
3525
3537
  this.dateAdapter = dateAdapter;
@@ -3528,12 +3540,12 @@ class MatDate {
3528
3540
  this.cd = cd;
3529
3541
  this.keyboard = keyboard;
3530
3542
  this.formGroupDir = formGroupDir;
3531
- this._onChangeCallback = noop$2;
3532
- this._onTouchedCallback = noop$2;
3543
+ this._onChangeCallback = noop$5;
3544
+ this._onTouchedCallback = noop$5;
3533
3545
  this._subscription = new Subscription();
3534
3546
  this.writing = true;
3535
3547
  this.disabling = false;
3536
- this.dayMask = DAY_MASK;
3548
+ this.dayMask = DAY_MASK$2;
3537
3549
  this.disabled = false;
3538
3550
  this.floatLabel = 'auto';
3539
3551
  this.readonly = false;
@@ -3770,7 +3782,7 @@ MatDate.decorators = [
3770
3782
  selector: 'mat-date-field',
3771
3783
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final control -->\n <input matInput type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"writeValue(null)\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('validDate')\" translate>ERROR.FIELD_NOT_VALID_DATE</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateIsAfter')\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateRange')\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMaxDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMinDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngIf=\"formControl.hasError('msg')\">{{formControl.errors.msg}}</mat-error>\n </mat-form-field>\n\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"></mat-datepicker>\n\n <ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n </ng-template>\n\n <ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n </ng-template>\n\n</ng-template>\n\n",
3772
3784
  providers: [
3773
- DEFAULT_VALUE_ACCESSOR$1,
3785
+ DEFAULT_VALUE_ACCESSOR$5,
3774
3786
  ],
3775
3787
  changeDetection: ChangeDetectionStrategy.OnPush,
3776
3788
  styles: [":host{display:inline-block;width:100%;position:relative}:host [no-padding]{--ion-grid-column-padding:0}:host [nowrap]{flex-wrap:nowrap}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md,mat-form-field ion-datetime{padding:0!important}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
@@ -3803,17 +3815,17 @@ MatDate.propDecorators = {
3803
3815
  matInputs: [{ type: ViewChildren, args: ['matInput',] }]
3804
3816
  };
3805
3817
 
3806
- const DEFAULT_VALUE_ACCESSOR$2 = {
3818
+ const DEFAULT_VALUE_ACCESSOR$4 = {
3807
3819
  provide: NG_VALUE_ACCESSOR,
3808
3820
  useExisting: forwardRef(() => MatDateTime),
3809
3821
  multi: true
3810
3822
  };
3811
3823
  const DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
3812
3824
  const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
3813
- const HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
3814
- const noop$3 = () => {
3825
+ const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
3826
+ const noop$4 = () => {
3815
3827
  };
3816
- const ɵ0$3 = noop$3;
3828
+ const ɵ0$7 = noop$4;
3817
3829
  class MatDateTime {
3818
3830
  constructor(platform, dateAdapter, translate, formBuilder, keyboard, cd, formGroupDir) {
3819
3831
  this.platform = platform;
@@ -3823,14 +3835,14 @@ class MatDateTime {
3823
3835
  this.keyboard = keyboard;
3824
3836
  this.cd = cd;
3825
3837
  this.formGroupDir = formGroupDir;
3826
- this._onChangeCallback = noop$3;
3827
- this._onTouchedCallback = noop$3;
3838
+ this._onChangeCallback = noop$4;
3839
+ this._onTouchedCallback = noop$4;
3828
3840
  this._subscription = new Subscription();
3829
3841
  this.writing = true;
3830
3842
  this.disabling = false;
3831
3843
  this._onDestroy = new EventEmitter();
3832
3844
  this.dayMask = DAY_MASK$1;
3833
- this.hourMask = HOUR_MASK;
3845
+ this.hourMask = HOUR_MASK$1;
3834
3846
  this.floatLabel = 'auto';
3835
3847
  this.readonly = false;
3836
3848
  this.compact = false;
@@ -4136,7 +4148,7 @@ MatDateTime.decorators = [
4136
4148
  selector: 'mat-date-time-field',
4137
4149
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dateFormControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dateFormControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix #datePickerButton2 (click)=\"openDatePicker($event, datePicker)\" [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"></mat-datepicker>\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-invalid]=\"formControl.touched && (timeFormControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n <input matInput #matInput type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"timeFormControl\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowdown)=\"openTimePicker($event)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input matInput #matInput type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"timeFormControl\"\n (click)=\"openTimePickerIfMobile($event)\"\n readonly>\n\n <input matInput type=\"text\"\n [formControl]=\"timeFormControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\">\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n",
4138
4150
  providers: [
4139
- DEFAULT_VALUE_ACCESSOR$2,
4151
+ DEFAULT_VALUE_ACCESSOR$4,
4140
4152
  ],
4141
4153
  changeDetection: ChangeDetectionStrategy.OnPush,
4142
4154
  styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
@@ -4175,10 +4187,10 @@ const DEFAULT_VALUE_ACCESSOR$3 = {
4175
4187
  useExisting: forwardRef(() => MatDateShort),
4176
4188
  multi: true
4177
4189
  };
4178
- const DAY_MASK$2 = [/\d/, /\d/, /\d/, /\d/];
4179
- const noop$4 = () => {
4190
+ const DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
4191
+ const noop$3 = () => {
4180
4192
  };
4181
- const ɵ0$4 = noop$4;
4193
+ const ɵ0$6 = noop$3;
4182
4194
  class MatDateShort {
4183
4195
  constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
4184
4196
  this.dateAdapter = dateAdapter;
@@ -4187,11 +4199,11 @@ class MatDateShort {
4187
4199
  this.cd = cd;
4188
4200
  this.keyboard = keyboard;
4189
4201
  this.formGroupDir = formGroupDir;
4190
- this._onChangeCallback = noop$4;
4191
- this._onTouchedCallback = noop$4;
4202
+ this._onChangeCallback = noop$3;
4203
+ this._onTouchedCallback = noop$3;
4192
4204
  this.writing = true;
4193
4205
  this.disabling = false;
4194
- this.dayMask = DAY_MASK$2;
4206
+ this.dayMask = DAY_MASK;
4195
4207
  this.disabled = false;
4196
4208
  this.floatLabel = 'auto';
4197
4209
  this.readonly = false;
@@ -4504,16 +4516,16 @@ SharedMatDateTimeModule.decorators = [
4504
4516
  },] }
4505
4517
  ];
4506
4518
 
4507
- const DEFAULT_VALUE_ACCESSOR$4 = {
4519
+ const DEFAULT_VALUE_ACCESSOR$2 = {
4508
4520
  provide: NG_VALUE_ACCESSOR,
4509
4521
  useExisting: forwardRef(() => MatDuration),
4510
4522
  multi: true
4511
4523
  };
4512
4524
  const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
4513
- const HOUR_MASK$1 = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
4514
- const noop$5 = () => {
4525
+ const HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
4526
+ const noop$2 = () => {
4515
4527
  };
4516
- const ɵ0$5 = noop$5;
4528
+ const ɵ0$5 = noop$2;
4517
4529
  class MatDuration {
4518
4530
  constructor(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
4519
4531
  this.dateAdapter = dateAdapter;
@@ -4522,11 +4534,11 @@ class MatDuration {
4522
4534
  this.cd = cd;
4523
4535
  this.formGroupDir = formGroupDir;
4524
4536
  this._subscription = new Subscription();
4525
- this._onChangeCallback = noop$5;
4526
- this._onTouchedCallback = noop$5;
4537
+ this._onChangeCallback = noop$2;
4538
+ this._onTouchedCallback = noop$2;
4527
4539
  this.writing = true;
4528
4540
  this.disabling = false;
4529
- this.hourMask = HOUR_MASK$1;
4541
+ this.hourMask = HOUR_MASK;
4530
4542
  this.disabled = false;
4531
4543
  this.floatLabel = 'auto';
4532
4544
  this.readonly = false;
@@ -4706,7 +4718,7 @@ MatDuration.decorators = [
4706
4718
  selector: 'mat-duration-field',
4707
4719
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{ formControl.value|duration }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput type=\"text\"\n autocomplete=\"off\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n\n <!-- errors -->\n <mat-error *ngIf=\"!formControl.hasError('required') && textControl.hasError('pattern')\" translate>ERROR.FIELD_NOT_VALID_PATTERN</mat-error>\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('min')\">\n {{(compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate:formControl.errors.min }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('max')\">\n {{(compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate:formControl.errors.max }}</mat-error>\n\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n</ng-template>\n\n",
4708
4720
  providers: [
4709
- DEFAULT_VALUE_ACCESSOR$4,
4721
+ DEFAULT_VALUE_ACCESSOR$2,
4710
4722
  ],
4711
4723
  changeDetection: ChangeDetectionStrategy.OnPush,
4712
4724
  styles: [":host{display:inline-block;min-width:140px;position:relative;--ion-grid-column-padding:0}:host,mat-form-field{width:100%}mat-form-field .mat-form-field-subscript-wrapper{overflow:visible;top:100%}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}mat-error{text-align:right;width:100%}"]
@@ -4763,22 +4775,22 @@ SharedMatDurationModule.decorators = [
4763
4775
  },] }
4764
4776
  ];
4765
4777
 
4766
- const DEFAULT_VALUE_ACCESSOR$5 = {
4778
+ const DEFAULT_VALUE_ACCESSOR$1 = {
4767
4779
  provide: NG_VALUE_ACCESSOR,
4768
4780
  useExisting: forwardRef(() => MatBooleanField),
4769
4781
  multi: true
4770
4782
  };
4771
- const noop$6 = () => {
4783
+ const noop$1 = () => {
4772
4784
  };
4773
- const ɵ0$6 = noop$6;
4785
+ const ɵ0$4 = noop$1;
4774
4786
  class MatBooleanField {
4775
4787
  constructor(translate, formBuilder, cd, formGroupDir) {
4776
4788
  this.translate = translate;
4777
4789
  this.formBuilder = formBuilder;
4778
4790
  this.cd = cd;
4779
4791
  this.formGroupDir = formGroupDir;
4780
- this._onChangeCallback = noop$6;
4781
- this._onTouchedCallback = noop$6;
4792
+ this._onChangeCallback = noop$1;
4793
+ this._onTouchedCallback = noop$1;
4782
4794
  this._writing = false;
4783
4795
  this.showRadio = false;
4784
4796
  this.disabled = false;
@@ -4951,10 +4963,10 @@ MatBooleanField.decorators = [
4951
4963
  selector: 'mat-boolean-field',
4952
4964
  template: "<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled {{classList}}\">\n <input matInput hidden type=\"text\" readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{(formControl.value == null && 'COMMON.EMPTY_OPTION' || (formControl.value === true && yesLabel) || noLabel) | translate }}</ion-text>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n\n <!-- Radio -->\n <mat-form-field *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-radio {{classList}}\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n <span [hidden]=\"showRadio\">({{yesLabel|translate}}/{{'COMMON.NO'|translate}})</span>\n </mat-label>\n\n <input matInput #fakeInput type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{yesLabel|translate}}</span>\n </mat-radio-button>&nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{noLabel|translate}}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field *ngSwitchCase=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{classList}}\">\n <mat-label *ngIf=\"placeholder && !showRadio\">\n {{placeholder}}\n </mat-label>\n\n <input matInput #matInput\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <ion-label>&nbsp;</ion-label>\n\n <!-- checkbox, when compact -->\n <mat-checkbox #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value===undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\">\n </mat-checkbox>\n\n <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel === 'never' ? 'never' : 'always'\"\n class=\"mat-boolean-field mat-boolean-field-button {{classList}}\">\n <input matInput type=\"text\" hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\">\n <div class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\">\n <!-- yes -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === true) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{yesLabel|translate}}\n </ion-button>\n\n <!-- No button -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? (_tabindex + 1) : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === false) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{noLabel|translate}}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </ng-container>\n\n <div class=\"cdk-visually-hidden\">\n <div #suffix><ng-content select=\"[matSuffix]\"></ng-content></div>\n </div>\n\n</ng-template>\n\n\n",
4953
4965
  providers: [
4954
- DEFAULT_VALUE_ACCESSOR$5
4966
+ DEFAULT_VALUE_ACCESSOR$1
4955
4967
  ],
4956
4968
  changeDetection: ChangeDetectionStrategy.OnPush,
4957
- styles: [":host{width:100%}.mat-form-field.mat-boolean-field-radio{margin-top:-2px}.mat-form-field.mat-boolean-field-button{margin-top:-4px}.mat-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis:calc(100% / var(--buttons-col-count, 2));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:40px}"]
4969
+ styles: [":host{width:100%}.mat-form-field.mat-boolean-field-radio{margin-top:-2px}.mat-form-field.mat-boolean-field-button{margin-top:-4px}.mat-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis:calc(100% / var(--buttons-col-count, 2));flex:0 1 var(--flex-basis);max-width:calc(min(var(--flex-basis), 150px));white-space:normal;padding:0 2px;height:40px}"]
4958
4970
  },] }
4959
4971
  ];
4960
4972
  MatBooleanField.ctorParameters = () => [
@@ -5199,7 +5211,7 @@ class MatNumpadDomService {
5199
5211
  this.appRef.detachView(this.componentRef.hostView);
5200
5212
  }
5201
5213
  }
5202
- MatNumpadDomService.ɵprov = ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(ɵɵinject(ComponentFactoryResolver), ɵɵinject(ApplicationRef), ɵɵinject(INJECTOR), ɵɵinject(DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
5214
+ MatNumpadDomService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1$3.DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
5203
5215
  MatNumpadDomService.decorators = [
5204
5216
  { type: Injectable, args: [{
5205
5217
  providedIn: 'root'
@@ -5563,7 +5575,7 @@ SharedMatNumpadModule.decorators = [
5563
5575
  },] }
5564
5576
  ];
5565
5577
 
5566
- const DEFAULT_VALUE_ACCESSOR$6 = {
5578
+ const DEFAULT_VALUE_ACCESSOR = {
5567
5579
  provide: NG_VALUE_ACCESSOR,
5568
5580
  useExisting: forwardRef(() => MatSwipeField),
5569
5581
  multi: true
@@ -5826,7 +5838,7 @@ MatSwipeField.decorators = [
5826
5838
  { type: Component, args: [{
5827
5839
  selector: 'mat-swipe-field',
5828
5840
  template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n </mat-label>\n <input matInput #fakeInput type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\">\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <ion-slides #slides\n [options]=\"slidesOptions\"\n (ionSlidesDidLoad)=\"slidesLoaded()\"\n (ionSlideReachStart)=\"reachStart(true)\"\n (ionSlideReachEnd)=\"reachEnd(true)\"\n (ionSlideNextEnd)=\"reachStart(false)\"\n (ionSlidePrevEnd)=\"reachEnd(false)\"\n (ionSlideDidChange)=\"slideChanged()\"\n >\n <ion-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </ion-slide>\n\n </ion-slides>\n </div>\n\n <button #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n\n</mat-form-field>\n",
5829
- providers: [DEFAULT_VALUE_ACCESSOR$6],
5841
+ providers: [DEFAULT_VALUE_ACCESSOR],
5830
5842
  changeDetection: ChangeDetectionStrategy.OnPush,
5831
5843
  styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-next,.button-prev{position:absolute;top:calc(50% - 20px);z-index:10}.button-prev{left:0;right:auto}.button-next{left:auto;right:0}"]
5832
5844
  },] }
@@ -6321,7 +6333,7 @@ class ProgressBarService {
6321
6333
  }
6322
6334
  }
6323
6335
  }
6324
- ProgressBarService.ɵprov = ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
6336
+ ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
6325
6337
  ProgressBarService.decorators = [
6326
6338
  { type: Injectable, args: [{ providedIn: 'root' },] }
6327
6339
  ];
@@ -6365,7 +6377,7 @@ class AppGestureConfig extends HammerGestureConfig {
6365
6377
  return mc;
6366
6378
  }
6367
6379
  }
6368
- AppGestureConfig.ɵprov = ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
6380
+ AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
6369
6381
  AppGestureConfig.decorators = [
6370
6382
  { type: Injectable, args: [{ providedIn: 'root' },] }
6371
6383
  ];
@@ -6588,7 +6600,7 @@ class MatPaginatorI18n extends MatPaginatorIntl {
6588
6600
  this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');
6589
6601
  }
6590
6602
  }
6591
- MatPaginatorI18n.ɵprov = ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(ɵɵinject(TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
6603
+ MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
6592
6604
  MatPaginatorI18n.decorators = [
6593
6605
  { type: Injectable, args: [{ providedIn: 'root' },] }
6594
6606
  ];
@@ -6678,17 +6690,17 @@ function getColorContrast(color, bw) {
6678
6690
  return rgbArrayToHex(rgb.map(v => 255 - v));
6679
6691
  }
6680
6692
 
6681
- const noop$7 = () => {
6693
+ const noop = () => {
6682
6694
  };
6683
- const ɵ0$7 = noop$7;
6695
+ const ɵ0$3 = noop;
6684
6696
  class AppFormField {
6685
6697
  constructor(translate, cd, injector, formGroupDir) {
6686
6698
  this.translate = translate;
6687
6699
  this.cd = cd;
6688
6700
  this.injector = injector;
6689
6701
  this.formGroupDir = formGroupDir;
6690
- this._onChangeCallback = noop$7;
6691
- this._onTouchedCallback = noop$7;
6702
+ this._onChangeCallback = noop;
6703
+ this._onTouchedCallback = noop;
6692
6704
  this.readonly = false;
6693
6705
  this.compact = false;
6694
6706
  this.floatLabel = 'auto';
@@ -7059,14 +7071,14 @@ class AudioProvider {
7059
7071
  });
7060
7072
  }
7061
7073
  }
7062
- AudioProvider.ɵprov = ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(ɵɵinject(Platform), ɵɵinject(NativeAudio, 8), ɵɵinject(Vibration, 8), ɵɵinject(AudioManagement$1, 8)); }, token: AudioProvider, providedIn: "root" });
7074
+ AudioProvider.ɵprov = i0.ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2.NativeAudio, 8), i0.ɵɵinject(i3.Vibration, 8), i0.ɵɵinject(i4.AudioManagement, 8)); }, token: AudioProvider, providedIn: "root" });
7063
7075
  AudioProvider.decorators = [
7064
7076
  { type: Injectable, args: [{ providedIn: 'root' },] }
7065
7077
  ];
7066
7078
  AudioProvider.ctorParameters = () => [
7067
7079
  { type: Platform },
7068
- { type: NativeAudio$1, decorators: [{ type: Optional }] },
7069
- { type: Vibration$1, decorators: [{ type: Optional }] },
7080
+ { type: NativeAudio, decorators: [{ type: Optional }] },
7081
+ { type: Vibration, decorators: [{ type: Optional }] },
7070
7082
  { type: AudioManagement, decorators: [{ type: Optional }] }
7071
7083
  ];
7072
7084
 
@@ -7148,7 +7160,7 @@ class Hotkeys {
7148
7160
  });
7149
7161
  }
7150
7162
  }
7151
- Hotkeys.ɵprov = ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(ɵɵinject(EventManager), ɵɵinject(MatDialog), ɵɵinject(DOCUMENT), ɵɵinject(ModalController)); }, token: Hotkeys, providedIn: "root" });
7163
+ Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1$5.EventManager), i0.ɵɵinject(i2$1.MatDialog), i0.ɵɵinject(i1$3.DOCUMENT), i0.ɵɵinject(i1$4.ModalController)); }, token: Hotkeys, providedIn: "root" });
7152
7164
  Hotkeys.decorators = [
7153
7165
  { type: Injectable, args: [{
7154
7166
  providedIn: 'root'
@@ -7322,7 +7334,7 @@ class Base64ImageReader {
7322
7334
  }
7323
7335
  }
7324
7336
 
7325
- const uuidv4 = uuidv4Imported;
7337
+ const uuidv4$1 = uuidv4Imported;
7326
7338
  class FileService {
7327
7339
  constructor(platform,
7328
7340
  //private transfer: FileTransfer,
@@ -7359,7 +7371,7 @@ class FileService {
7359
7371
  const lastSlashIndex = source.lastIndexOf('/');
7360
7372
  if (lastSlashIndex === -1)
7361
7373
  throw new Error('Invalid URL: ' + source);
7362
- const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();
7374
+ const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4$1();
7363
7375
  // Download into the file system
7364
7376
  if (responseType === 'file' && this.canUseFileSystem) {
7365
7377
  console.warn(`WARN: [file] Fetching image {${source}} in local file...`);
@@ -7415,7 +7427,7 @@ class FileService {
7415
7427
  this._started = true;
7416
7428
  }
7417
7429
  }
7418
- FileService.ɵprov = ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(ɵɵinject(Platform), ɵɵinject(HttpClient), ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
7430
+ FileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$2.HttpClient), i0.ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
7419
7431
  FileService.decorators = [
7420
7432
  { type: Injectable, args: [{
7421
7433
  providedIn: 'root',
@@ -7577,7 +7589,7 @@ class Base58 {
7577
7589
  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
7578
7590
 
7579
7591
  const scrypt = require('scrypt-async');
7580
- const sha256 = require('hash.js/lib/hash/sha/256');
7592
+ const sha256$1 = require('hash.js/lib/hash/sha/256');
7581
7593
  const sha512 = require('hash.js/lib/hash/sha/512');
7582
7594
  const nacl = {
7583
7595
  sign,
@@ -7681,7 +7693,7 @@ class CryptoService {
7681
7693
  * Hash (using SHA256) a message
7682
7694
  */
7683
7695
  sha256(message) {
7684
- return sha256().update(message).digest('hex');
7696
+ return sha256$1().update(message).digest('hex');
7685
7697
  }
7686
7698
  /**
7687
7699
  * Hash (using SHA512) a message
@@ -7694,7 +7706,7 @@ class CryptoService {
7694
7706
  return nacl.util.encodeBase64(m);
7695
7707
  }
7696
7708
  }
7697
- CryptoService.ɵprov = ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
7709
+ CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
7698
7710
  CryptoService.decorators = [
7699
7711
  { type: Injectable, args: [{ providedIn: 'root' },] }
7700
7712
  ];
@@ -8914,7 +8926,7 @@ class LocalSettingsService {
8914
8926
  return page;
8915
8927
  }
8916
8928
  }
8917
- LocalSettingsService.ɵprov = ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(ɵɵinject(TranslateService), ɵɵinject(Platform), ɵɵinject(Storage), ɵɵinject(ENVIRONMENT), ɵɵinject(APP_LOCAL_SETTINGS, 8), ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
8929
+ LocalSettingsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_SETTINGS, 8), i0.ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
8918
8930
  LocalSettingsService.decorators = [
8919
8931
  { type: Injectable, args: [{
8920
8932
  providedIn: 'root',
@@ -9610,7 +9622,7 @@ class NetworkService {
9610
9622
  });
9611
9623
  }
9612
9624
  }
9613
- NetworkService.ɵprov = ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(ɵɵinject(DOCUMENT), ɵɵinject(Platform), ɵɵinject(ModalController), ɵɵinject(CryptoService), ɵɵinject(Storage), ɵɵinject(LocalSettingsService), ɵɵinject(CacheService), ɵɵinject(HttpClient), ɵɵinject(ENVIRONMENT), ɵɵinject(Network, 8), ɵɵinject(SplashScreen, 8), ɵɵinject(TranslateService, 8), ɵɵinject(ToastController, 8)); }, token: NetworkService, providedIn: "root" });
9625
+ NetworkService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(i0.ɵɵinject(i1$3.DOCUMENT), i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i1$4.ModalController), i0.ɵɵinject(CryptoService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i2$2.HttpClient), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i9.Network, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i1$1.TranslateService, 8), i0.ɵɵinject(i1$4.ToastController, 8)); }, token: NetworkService, providedIn: "root" });
9614
9626
  NetworkService.decorators = [
9615
9627
  { type: Injectable, args: [{ providedIn: 'root' },] }
9616
9628
  ];
@@ -9621,16 +9633,16 @@ NetworkService.ctorParameters = () => [
9621
9633
  { type: CryptoService },
9622
9634
  { type: Storage },
9623
9635
  { type: LocalSettingsService },
9624
- { type: CacheService$1 },
9636
+ { type: CacheService },
9625
9637
  { type: HttpClient },
9626
9638
  { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
9627
- { type: Network$1, decorators: [{ type: Optional }] },
9628
- { type: SplashScreen$1, decorators: [{ type: Optional }] },
9639
+ { type: Network, decorators: [{ type: Optional }] },
9640
+ { type: SplashScreen, decorators: [{ type: Optional }] },
9629
9641
  { type: TranslateService, decorators: [{ type: Optional }] },
9630
9642
  { type: ToastController, decorators: [{ type: Optional }] }
9631
9643
  ];
9632
9644
 
9633
- const ErrorCodes = {
9645
+ const ErrorCodes$2 = {
9634
9646
  UNKNOWN_ERROR: 0,
9635
9647
  LOAD_ACCOUNT_ERROR: 1,
9636
9648
  BAD_PASSWORD: 2,
@@ -9977,7 +9989,7 @@ class EntityStore {
9977
9989
  }
9978
9990
  catch (err) {
9979
9991
  console.error(err);
9980
- throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
9992
+ throw { code: ErrorCodes$2.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
9981
9993
  }
9982
9994
  }
9983
9995
  // Emit update event
@@ -10554,7 +10566,7 @@ class EntitiesStorage {
10554
10566
  }
10555
10567
  EntitiesStorage.TRASH_PREFIX = 'Trash#';
10556
10568
  EntitiesStorage.REMOTE_PREFIX = 'Remote#';
10557
- EntitiesStorage.ɵprov = ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(ɵɵinject(Platform), ɵɵinject(ProgressBarService), ɵɵinject(Storage), ɵɵinject(ENVIRONMENT), ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
10569
+ EntitiesStorage.ɵprov = i0.ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(ProgressBarService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
10558
10570
  EntitiesStorage.decorators = [
10559
10571
  { type: Injectable, args: [{ providedIn: 'root' },] }
10560
10572
  ];
@@ -10654,10 +10666,10 @@ function referentialToString(obj, properties) {
10654
10666
  function referentialsToString(values, properties, separator) {
10655
10667
  return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
10656
10668
  }
10657
- const ɵ0$8 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
10669
+ const ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
10658
10670
  const StatusList = Object.freeze([
10659
10671
  {
10660
- id: ɵ0$8,
10672
+ id: ɵ0$2,
10661
10673
  icon: 'checkmark',
10662
10674
  label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
10663
10675
  },
@@ -10932,7 +10944,7 @@ function accountToString(data) {
10932
10944
  (data.lastName || '')) || '';
10933
10945
  }
10934
10946
 
10935
- const uuidv4$1 = uuidv4Imported;
10947
+ const uuidv4 = uuidv4Imported;
10936
10948
  const _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
10937
10949
  const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
10938
10950
  /**
@@ -10976,7 +10988,7 @@ function createTrackerLink(opts) {
10976
10988
  // Skip if not tracked
10977
10989
  if (!context || !context.tracked)
10978
10990
  return forward(operation);
10979
- const id = context.serializationKey || uuidv4$1();
10991
+ const id = context.serializationKey || uuidv4();
10980
10992
  console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);
10981
10993
  // Clean context, before calling JSON.stringify (remove unused attributes)
10982
10994
  const cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
@@ -11684,7 +11696,7 @@ class GraphqlService {
11684
11696
  (err.networkError && ((err.networkError.error && this.toAppError(err.networkError.error))
11685
11697
  || this.toAppError(err.networkError)
11686
11698
  || (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))
11687
- || this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)))
11699
+ || this.createAppErrorByCode(ErrorCodes$2.UNKNOWN_NETWORK_ERROR)))
11688
11700
  // If graphQL: try to convert the first error found
11689
11701
  || (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))
11690
11702
  || this.toAppError(err)
@@ -11692,7 +11704,7 @@ class GraphqlService {
11692
11704
  || (err.graphQLErrors && err.graphQLErrors[0])
11693
11705
  || err;
11694
11706
  console.error('[graphql] ' + (error && error.message || error), error.stack || '');
11695
- if (error && error.code === ErrorCodes.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
11707
+ if (error && error.code === ErrorCodes$2.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
11696
11708
  console.error('[graphql] original error: ' + err.networkError.message);
11697
11709
  this.onNetworkError.next(error);
11698
11710
  }
@@ -11728,7 +11740,7 @@ class GraphqlService {
11728
11740
  return 'ERROR.UNAUTHORIZED';
11729
11741
  case ServerErrorCodes.FORBIDDEN:
11730
11742
  return 'ERROR.FORBIDDEN';
11731
- case ErrorCodes.UNKNOWN_NETWORK_ERROR:
11743
+ case ErrorCodes$2.UNKNOWN_NETWORK_ERROR:
11732
11744
  return 'ERROR.UNKNOWN_NETWORK_ERROR';
11733
11745
  case ServerErrorCodes.BAD_UPDATE_DATE:
11734
11746
  return 'ERROR.BAD_UPDATE_DATE';
@@ -11765,7 +11777,7 @@ class GraphqlService {
11765
11777
  });
11766
11778
  }
11767
11779
  }
11768
- GraphqlService.ɵprov = ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(ɵɵinject(Platform), ɵɵinject(Apollo), ɵɵinject(HttpLink), ɵɵinject(NetworkService), ɵɵinject(Storage), ɵɵinject(CryptoService), ɵɵinject(ENVIRONMENT), ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
11780
+ GraphqlService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$3.Apollo), i0.ɵɵinject(i3$2.HttpLink), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(CryptoService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
11769
11781
  GraphqlService.decorators = [
11770
11782
  { type: Injectable, args: [{
11771
11783
  providedIn: 'root'
@@ -11782,7 +11794,7 @@ GraphqlService.ctorParameters = () => [
11782
11794
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
11783
11795
  ];
11784
11796
 
11785
- const sha256$1 = require('hash.js/lib/hash/sha/256');
11797
+ const sha256 = require('hash.js/lib/hash/sha/256');
11786
11798
  class BaseGraphqlServiceOptions {
11787
11799
  }
11788
11800
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
@@ -11932,8 +11944,8 @@ class BaseGraphqlService {
11932
11944
  }
11933
11945
  /* -- protected methods -- */
11934
11946
  computeMutableWatchQueryId(opts) {
11935
- const queryName = opts.queryName || sha256$1().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
11936
- const variablesKey = opts.variables && sha256$1().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
11947
+ const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
11948
+ const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
11937
11949
  return [queryName, opts.arrayFieldName, variablesKey].join('|');
11938
11950
  }
11939
11951
  findMutableWatchQueries(opts) {
@@ -11996,7 +12008,7 @@ const DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';
11996
12008
  /* ------------------------------------
11997
12009
  * GraphQL queries
11998
12010
  * ------------------------------------*/
11999
- const Fragments = {
12011
+ const Fragments$1 = {
12000
12012
  account: gql `
12001
12013
  fragment AccountFragment on AccountVO {
12002
12014
  id
@@ -12029,13 +12041,13 @@ const Fragments = {
12029
12041
  `
12030
12042
  };
12031
12043
  // Load account query
12032
- const LoadQuery = gql `
12044
+ const LoadQuery$1 = gql `
12033
12045
  query Account {
12034
12046
  data: account {
12035
12047
  ...AccountFragment
12036
12048
  }
12037
12049
  }
12038
- ${Fragments.account}
12050
+ ${Fragments$1.account}
12039
12051
  `;
12040
12052
  // Check email query
12041
12053
  const IsEmailExistsQuery = gql `
@@ -12044,13 +12056,13 @@ const IsEmailExistsQuery = gql `
12044
12056
  }
12045
12057
  `;
12046
12058
  // Save (create or update) account mutation
12047
- const SaveMutation = gql `
12059
+ const SaveMutation$1 = gql `
12048
12060
  mutation SaveAccount($data:AccountVOInput){
12049
12061
  data: saveAccount(account: $data){
12050
12062
  ...AccountFragment
12051
12063
  }
12052
12064
  }
12053
- ${Fragments.account}
12065
+ ${Fragments$1.account}
12054
12066
  `;
12055
12067
  // Create account mutation
12056
12068
  const CreateMutation = gql `
@@ -12059,7 +12071,7 @@ const CreateMutation = gql `
12059
12071
  ...AccountFragment
12060
12072
  }
12061
12073
  }
12062
- ${Fragments.account}
12074
+ ${Fragments$1.account}
12063
12075
  `;
12064
12076
  // Sent confirmation email
12065
12077
  const SendConfirmEmailMutation = gql `
@@ -12407,7 +12419,7 @@ class AccountService extends BaseGraphqlService {
12407
12419
  catch (error) {
12408
12420
  console.error(error);
12409
12421
  this.resetData();
12410
- throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
12422
+ throw { code: ErrorCodes$2.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
12411
12423
  }
12412
12424
  // Store pubkey+keypair
12413
12425
  this.data.pubkey = Base58.encode(keypair.publicKey);
@@ -12441,7 +12453,7 @@ class AccountService extends BaseGraphqlService {
12441
12453
  }
12442
12454
  catch (err) {
12443
12455
  // If account not found, check if email is valid
12444
- if (err && +(err.code) === ErrorCodes.LOAD_ACCOUNT_ERROR) {
12456
+ if (err && +(err.code) === ErrorCodes$2.LOAD_ACCOUNT_ERROR) {
12445
12457
  // Check email exists
12446
12458
  if (data.username.indexOf('@') !== -1) {
12447
12459
  let isEmailExists;
@@ -12453,11 +12465,11 @@ class AccountService extends BaseGraphqlService {
12453
12465
  }
12454
12466
  // Email not exists (no account)
12455
12467
  if (!isEmailExists) {
12456
- throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
12468
+ throw { code: ErrorCodes$2.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
12457
12469
  }
12458
12470
  }
12459
12471
  // Email exists, so error = 'bad password'
12460
- throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
12472
+ throw { code: ErrorCodes$2.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
12461
12473
  }
12462
12474
  throw err; // resend the first error
12463
12475
  }
@@ -12582,8 +12594,8 @@ class AccountService extends BaseGraphqlService {
12582
12594
  // Load remotely
12583
12595
  else {
12584
12596
  const { data } = yield this.graphql.query({
12585
- query: LoadQuery,
12586
- error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
12597
+ query: LoadQuery$1,
12598
+ error: { code: ErrorCodes$2.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
12587
12599
  fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
12588
12600
  });
12589
12601
  json = data;
@@ -12610,7 +12622,7 @@ class AccountService extends BaseGraphqlService {
12610
12622
  return __awaiter(this, void 0, void 0, function* () {
12611
12623
  const isEmailExists = yield this.isEmailExists(email);
12612
12624
  if (isEmailExists) {
12613
- throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
12625
+ throw { code: ErrorCodes$2.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
12614
12626
  }
12615
12627
  });
12616
12628
  }
@@ -12646,7 +12658,7 @@ class AccountService extends BaseGraphqlService {
12646
12658
  locale
12647
12659
  },
12648
12660
  error: {
12649
- code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,
12661
+ code: ErrorCodes$2.SENT_CONFIRMATION_EMAIL_FAILED,
12650
12662
  message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'
12651
12663
  }
12652
12664
  });
@@ -12662,7 +12674,7 @@ class AccountService extends BaseGraphqlService {
12662
12674
  code
12663
12675
  },
12664
12676
  error: {
12665
- code: ErrorCodes.CONFIRM_EMAIL_FAILED,
12677
+ code: ErrorCodes$2.CONFIRM_EMAIL_FAILED,
12666
12678
  message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'
12667
12679
  }
12668
12680
  });
@@ -12680,7 +12692,7 @@ class AccountService extends BaseGraphqlService {
12680
12692
  interval: 10
12681
12693
  },
12682
12694
  error: {
12683
- code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,
12695
+ code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
12684
12696
  message: 'ERROR.ACCOUNT.SUBSCRIBE_ACCOUNT_ERROR'
12685
12697
  }
12686
12698
  }).subscribe({
@@ -12782,7 +12794,7 @@ class AccountService extends BaseGraphqlService {
12782
12794
  throw error;
12783
12795
  console.error(error);
12784
12796
  throw {
12785
- code: ErrorCodes.LOAD_ACCOUNT_ERROR,
12797
+ code: ErrorCodes$2.LOAD_ACCOUNT_ERROR,
12786
12798
  message: 'ERROR.LOAD_ACCOUNT_ERROR'
12787
12799
  };
12788
12800
  }
@@ -12927,7 +12939,7 @@ class AccountService extends BaseGraphqlService {
12927
12939
  if (!isNew) {
12928
12940
  const existingAccount = yield this.load({ fetchPolicy: 'network-only' });
12929
12941
  if (!existingAccount || !existingAccount.updateDate) {
12930
- throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
12942
+ throw { code: ErrorCodes$2.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
12931
12943
  }
12932
12944
  this.copyIdAndUpdateDate(existingAccount, account);
12933
12945
  }
@@ -12936,10 +12948,10 @@ class AccountService extends BaseGraphqlService {
12936
12948
  delete json.profiles;
12937
12949
  // Execute mutation
12938
12950
  const { data } = yield this.graphql.mutate({
12939
- mutation: isNew ? CreateMutation : SaveMutation,
12951
+ mutation: isNew ? CreateMutation : SaveMutation$1,
12940
12952
  variables: { data: json },
12941
12953
  error: {
12942
- code: ErrorCodes.SAVE_ACCOUNT_ERROR,
12954
+ code: ErrorCodes$2.SAVE_ACCOUNT_ERROR,
12943
12955
  message: 'ERROR.SAVE_ACCOUNT_ERROR'
12944
12956
  }
12945
12957
  });
@@ -12959,7 +12971,7 @@ class AccountService extends BaseGraphqlService {
12959
12971
  if (counter > 4) {
12960
12972
  if (this._debug)
12961
12973
  console.debug(`[account] Failed to authentication on pod (after ${counter} attempts)`);
12962
- throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
12974
+ throw { code: ErrorCodes$2.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
12963
12975
  }
12964
12976
  // Check if valid
12965
12977
  if (token) {
@@ -12969,7 +12981,7 @@ class AccountService extends BaseGraphqlService {
12969
12981
  token
12970
12982
  },
12971
12983
  error: {
12972
- code: ErrorCodes.UNAUTHORIZED,
12984
+ code: ErrorCodes$2.UNAUTHORIZED,
12973
12985
  message: 'ERROR.UNAUTHORIZED'
12974
12986
  },
12975
12987
  fetchPolicy: 'no-cache'
@@ -12985,7 +12997,7 @@ class AccountService extends BaseGraphqlService {
12985
12997
  }
12986
12998
  // Generate a new token
12987
12999
  const challengeError = {
12988
- code: ErrorCodes.AUTH_CHALLENGE_ERROR,
13000
+ code: ErrorCodes$2.AUTH_CHALLENGE_ERROR,
12989
13001
  message: 'ERROR.AUTH_CHALLENGE_ERROR'
12990
13002
  };
12991
13003
  const data = yield this.graphql.query({
@@ -13019,7 +13031,7 @@ class AccountService extends BaseGraphqlService {
13019
13031
  target.settings.updateDate = source.settings && source.settings.updateDate || target.settings.updateDate;
13020
13032
  }
13021
13033
  }
13022
- AccountService.ɵprov = ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(ɵɵinject(CryptoService), ɵɵinject(NetworkService), ɵɵinject(GraphqlService), ɵɵinject(LocalSettingsService), ɵɵinject(Storage), ɵɵinject(FileService), ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
13034
+ AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(CryptoService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(FileService), i0.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
13023
13035
  AccountService.decorators = [
13024
13036
  { type: Injectable, args: [{ providedIn: 'root' },] }
13025
13037
  ];
@@ -13279,7 +13291,7 @@ const CONFIGURATION_STORAGE_KEY = 'configuration';
13279
13291
  /* ------------------------------------
13280
13292
  * GraphQL queries
13281
13293
  * ------------------------------------*/
13282
- const Fragments$1 = {
13294
+ const Fragments = {
13283
13295
  config: gql `
13284
13296
  fragment ConfigFragment on ConfigurationVO {
13285
13297
  id
@@ -13306,22 +13318,22 @@ const Fragments$1 = {
13306
13318
  }
13307
13319
  `
13308
13320
  };
13309
- const LoadQuery$1 = gql `
13321
+ const LoadQuery = gql `
13310
13322
  query Configuration{
13311
13323
  data: configuration{
13312
13324
  ...ConfigFragment
13313
13325
  }
13314
13326
  }
13315
- ${Fragments$1.config}
13327
+ ${Fragments.config}
13316
13328
  `;
13317
13329
  // Save (create or update) account mutation
13318
- const SaveMutation$1 = gql `
13330
+ const SaveMutation = gql `
13319
13331
  mutation SaveConfiguration($data: ConfigurationVOInput){
13320
13332
  data: saveConfiguration(config: $data){
13321
13333
  ...ConfigFragment
13322
13334
  }
13323
13335
  }
13324
- ${Fragments$1.config}
13336
+ ${Fragments.config}
13325
13337
  `;
13326
13338
  const ClearCache = gql `
13327
13339
  query ClearCache($name: String) {
@@ -13409,12 +13421,12 @@ class ConfigService extends BaseGraphqlService {
13409
13421
  return __awaiter(this, void 0, void 0, function* () {
13410
13422
  const now = Date.now();
13411
13423
  console.debug('[config] Loading Pod configuration...');
13412
- const query = opts && opts.query || LoadQuery$1;
13424
+ const query = opts && opts.query || LoadQuery;
13413
13425
  const variables = opts && opts.variables || undefined;
13414
13426
  const res = yield this.graphql.query({
13415
13427
  query,
13416
13428
  variables,
13417
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13429
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13418
13430
  fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/
13419
13431
  });
13420
13432
  const data = res && res.data ? Configuration.fromObject(res.data) : undefined;
@@ -13439,12 +13451,12 @@ class ConfigService extends BaseGraphqlService {
13439
13451
  const json = config.asObject();
13440
13452
  // Execute mutation
13441
13453
  const res = yield this.graphql.mutate({
13442
- mutation: SaveMutation$1,
13454
+ mutation: SaveMutation,
13443
13455
  variables: {
13444
13456
  data: json
13445
13457
  },
13446
13458
  error: {
13447
- code: ErrorCodes.SAVE_CONFIG_ERROR,
13459
+ code: ErrorCodes$2.SAVE_CONFIG_ERROR,
13448
13460
  message: 'ERROR.SAVE_CONFIG_ERROR'
13449
13461
  }
13450
13462
  });
@@ -13470,7 +13482,7 @@ class ConfigService extends BaseGraphqlService {
13470
13482
  const res = yield this.graphql.query({
13471
13483
  query: CacheStatistics,
13472
13484
  variables: null,
13473
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13485
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13474
13486
  fetchPolicy: 'network-only'
13475
13487
  });
13476
13488
  const data = res && res.cacheStatistics || undefined;
@@ -13486,7 +13498,7 @@ class ConfigService extends BaseGraphqlService {
13486
13498
  const res = yield this.graphql.query({
13487
13499
  query: ClearCache,
13488
13500
  variables,
13489
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13501
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13490
13502
  fetchPolicy: 'network-only'
13491
13503
  });
13492
13504
  const data = res && res.clearCache || undefined;
@@ -13645,7 +13657,7 @@ class ConfigService extends BaseGraphqlService {
13645
13657
  });
13646
13658
  }
13647
13659
  }
13648
- ConfigService.ɵprov = ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(ɵɵinject(Platform), ɵɵinject(GraphqlService), ɵɵinject(Storage), ɵɵinject(NetworkService), ɵɵinject(FileService), ɵɵinject(ToastController), ɵɵinject(TranslateService), ɵɵinject(ENVIRONMENT), ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
13660
+ ConfigService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(NetworkService), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
13649
13661
  ConfigService.decorators = [
13650
13662
  { type: Injectable, args: [{
13651
13663
  providedIn: 'root',
@@ -13664,9 +13676,9 @@ ConfigService.ctorParameters = () => [
13664
13676
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_CONFIG_OPTIONS,] }] }
13665
13677
  ];
13666
13678
 
13667
- const moment$4 = momentImported;
13679
+ const moment$2 = momentImported;
13668
13680
  class PlatformService {
13669
- constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser) {
13681
+ constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser, downloader) {
13670
13682
  this.platform = platform;
13671
13683
  this.cdkPlatform = cdkPlatform;
13672
13684
  this.toastController = toastController;
@@ -13685,6 +13697,7 @@ class PlatformService {
13685
13697
  this.keyboard = keyboard;
13686
13698
  this.splashScreen = splashScreen;
13687
13699
  this.browser = browser;
13700
+ this.downloader = downloader;
13688
13701
  this._started = false;
13689
13702
  this._debug = !environment.production;
13690
13703
  if (this._debug)
@@ -13707,6 +13720,9 @@ class PlatformService {
13707
13720
  isWebOrDesktop() {
13708
13721
  return !this.platform.is('mobile') || this.platform.is('mobileweb');
13709
13722
  }
13723
+ isAndroidCordova() {
13724
+ return this._android && this._cordova;
13725
+ }
13710
13726
  width() {
13711
13727
  return this.platform.width();
13712
13728
  }
@@ -13725,6 +13741,8 @@ class PlatformService {
13725
13741
  this._startPromise = this.platform.ready()
13726
13742
  .then(() => {
13727
13743
  this._mobile = this.platform.is('mobile');
13744
+ this._cordova = this.platform.is('cordova');
13745
+ this._android = this.platform.is('android');
13728
13746
  this.configureCordovaPlugins(this._mobile);
13729
13747
  this.touchUi = this._mobile || this.platform.is('tablet') || this.platform.is('phablet');
13730
13748
  // Force mobile in settings
@@ -13785,6 +13803,7 @@ class PlatformService {
13785
13803
  filter(() => this._started), first()).toPromise();
13786
13804
  }
13787
13805
  open(url, target, features, replace) {
13806
+ console.info(`[platform] Opening link: ${url}`);
13788
13807
  if (this.browser && this._mobile) {
13789
13808
  this.browser.create(url, target, features).show();
13790
13809
  }
@@ -13792,10 +13811,20 @@ class PlatformService {
13792
13811
  window.open(url, target, features, replace);
13793
13812
  }
13794
13813
  }
13795
- /*
13796
- chooseFile(): Promise<> {
13797
-
13798
- }*/
13814
+ download(request) {
13815
+ if (!request || !request.uri)
13816
+ throw new Error('Missing argument \'request\' or \'request.uri\'');
13817
+ if (this._android && this._cordova) {
13818
+ request = Object.assign(Object.assign({ visibleInDownloadsUi: true, notificationVisibility: NotificationVisibility.VisibleNotifyCompleted, title: request.filename || '' }, request), { destinationInExternalFilesDir: Object.assign({ dirType: 'Downloads', subPath: request.filename || request.title || '' }, request.destinationInExternalFilesDir) });
13819
+ this.downloader.download(request)
13820
+ .then((location) => console.info('[platform] File successfully downloaded at:' + location))
13821
+ .catch((error) => console.error(error));
13822
+ }
13823
+ // Web mode: open URI using the browser
13824
+ else {
13825
+ this.open(request.uri, '_system', 'location=yes');
13826
+ }
13827
+ }
13799
13828
  /* -- protected methods -- */
13800
13829
  configureCordovaPlugins(mobile) {
13801
13830
  console.info('[platform] Configuring Cordova plugins...');
@@ -13829,16 +13858,16 @@ class PlatformService {
13829
13858
  }
13830
13859
  // config moment lib
13831
13860
  try {
13832
- moment$4.locale(event.lang);
13861
+ moment$2.locale(event.lang);
13833
13862
  console.debug('[platform] Use locale {' + event.lang + '}');
13834
13863
  }
13835
13864
  // If error, fallback to en
13836
13865
  catch (err) {
13837
- moment$4.locale('en');
13866
+ moment$2.locale('en');
13838
13867
  console.warn('[platform] Unknown local for moment lib. Using default [en]');
13839
13868
  }
13840
13869
  // Config date adapter
13841
- this.dateAdapter.setLocale(moment$4.locale());
13870
+ this.dateAdapter.setLocale(moment$2.locale());
13842
13871
  }
13843
13872
  });
13844
13873
  this.settings.onChange.subscribe(data => {
@@ -13975,7 +14004,7 @@ class PlatformService {
13975
14004
  });
13976
14005
  }
13977
14006
  }
13978
- PlatformService.ɵprov = ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(ɵɵinject(Platform), ɵɵinject(Platform$1), ɵɵinject(ToastController), ɵɵinject(TranslateService), ɵɵinject(MomentDateAdapter), ɵɵinject(EntitiesStorage), ɵɵinject(LocalSettingsService), ɵɵinject(NetworkService), ɵɵinject(AccountService), ɵɵinject(ConfigService), ɵɵinject(CacheService), ɵɵinject(Storage), ɵɵinject(AudioProvider), ɵɵinject(ENVIRONMENT), ɵɵinject(StatusBar, 8), ɵɵinject(Keyboard$1, 8), ɵɵinject(SplashScreen, 8), ɵɵinject(InAppBrowser, 8)); }, token: PlatformService, providedIn: "root" });
14007
+ PlatformService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$4.Platform), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(EntitiesStorage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(AccountService), i0.ɵɵinject(ConfigService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(AudioProvider), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i14.StatusBar, 8), i0.ɵɵinject(i15.Keyboard, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i17.InAppBrowser, 8), i0.ɵɵinject(i18.Downloader, 8)); }, token: PlatformService, providedIn: "root" });
13979
14008
  PlatformService.decorators = [
13980
14009
  { type: Injectable, args: [{ providedIn: 'root' },] }
13981
14010
  ];
@@ -13990,14 +14019,15 @@ PlatformService.ctorParameters = () => [
13990
14019
  { type: NetworkService },
13991
14020
  { type: AccountService },
13992
14021
  { type: ConfigService },
13993
- { type: CacheService$1 },
14022
+ { type: CacheService },
13994
14023
  { type: Storage },
13995
14024
  { type: AudioProvider },
13996
14025
  { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
13997
- { type: StatusBar$1, decorators: [{ type: Optional }] },
14026
+ { type: StatusBar, decorators: [{ type: Optional }] },
13998
14027
  { type: Keyboard, decorators: [{ type: Optional }] },
13999
- { type: SplashScreen$1, decorators: [{ type: Optional }] },
14000
- { type: InAppBrowser$1, decorators: [{ type: Optional }] }
14028
+ { type: SplashScreen, decorators: [{ type: Optional }] },
14029
+ { type: InAppBrowser, decorators: [{ type: Optional }] },
14030
+ { type: Downloader, decorators: [{ type: Optional }] }
14001
14031
  ];
14002
14032
 
14003
14033
  class AppHelpModal {
@@ -14061,7 +14091,7 @@ class MatStepperI18n extends MatStepperIntl {
14061
14091
  this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');
14062
14092
  }
14063
14093
  }
14064
- MatStepperI18n.ɵprov = ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(ɵɵinject(TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
14094
+ MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
14065
14095
  MatStepperI18n.decorators = [
14066
14096
  { type: Injectable, args: [{ providedIn: 'root' },] }
14067
14097
  ];
@@ -15053,7 +15083,7 @@ function state2side(state) {
15053
15083
  return 1;
15054
15084
  }
15055
15085
  }
15056
- const ɵ0$9 = (defaultStateSize) => [
15086
+ const ɵ0$1 = (defaultStateSize) => [
15057
15087
  Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
15058
15088
  Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
15059
15089
  Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
@@ -15061,7 +15091,7 @@ const ɵ0$9 = (defaultStateSize) => [
15061
15091
  const SCALE_OPTIONS_DEFAULT = {
15062
15092
  startColor: rgbArrayMap.red,
15063
15093
  startStates: [0, 2, 3],
15064
- startStepsFn: ɵ0$9
15094
+ startStepsFn: ɵ0$1
15065
15095
  };
15066
15096
  /**
15067
15097
  * Internal function, that create a colors scale, using iteration
@@ -15153,21 +15183,21 @@ function linearColorGradient(count, options) {
15153
15183
  return result;
15154
15184
  }
15155
15185
 
15156
- class EntityTestClass {
15186
+ class EntityTestClass$1 {
15157
15187
  }
15158
- const FAKE_ENTITIES = [
15188
+ const FAKE_ENTITIES$1 = [
15159
15189
  { id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
15160
15190
  { id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
15161
15191
  { id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
15162
15192
  ];
15163
- function deepCopy(values, size) {
15193
+ function deepCopy$1(values, size) {
15164
15194
  if (isNil(size)) {
15165
- return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
15195
+ return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
15166
15196
  }
15167
15197
  let result = [];
15168
15198
  let i = 1;
15169
15199
  while (result.length < size) {
15170
- result = result.concat((values || FAKE_ENTITIES).map(entity => {
15200
+ result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
15171
15201
  const name = entity.name + ' #' + i;
15172
15202
  return Object.assign(Object.assign({}, entity), { id: i++, name });
15173
15203
  }));
@@ -15177,7 +15207,7 @@ function deepCopy(values, size) {
15177
15207
  class AutocompleteTestPage {
15178
15208
  constructor(formBuilder) {
15179
15209
  this.formBuilder = formBuilder;
15180
- this._items = deepCopy(FAKE_ENTITIES, 100);
15210
+ this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
15181
15211
  this.$items = new BehaviorSubject(undefined);
15182
15212
  this.autocompleteFields = new MatAutocompleteConfigHolder();
15183
15213
  this.memoryHide = false;
@@ -15221,7 +15251,7 @@ class AutocompleteTestPage {
15221
15251
  });
15222
15252
  // From items
15223
15253
  this.autocompleteFields.add('entity-items-large', {
15224
- items: FAKE_ENTITIES.slice(),
15254
+ items: FAKE_ENTITIES$1.slice(),
15225
15255
  attributes: ['label', 'name', 'description', 'comments'],
15226
15256
  displayWith: this.entityToString
15227
15257
  });
@@ -15231,12 +15261,12 @@ class AutocompleteTestPage {
15231
15261
  loadData() {
15232
15262
  return __awaiter(this, void 0, void 0, function* () {
15233
15263
  const data = {
15234
- entity: deepCopy(FAKE_ENTITIES)[0],
15264
+ entity: deepCopy$1(FAKE_ENTITIES$1)[0],
15235
15265
  // This item is NOT in the items list => i should be displayed anyway
15236
15266
  missingEntity: {
15237
15267
  id: -1, label: '??', name: 'Missing item'
15238
15268
  },
15239
- disableEntity: deepCopy(FAKE_ENTITIES)[2]
15269
+ disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2]
15240
15270
  };
15241
15271
  this.form.setValue(data);
15242
15272
  // Load observables
@@ -15409,13 +15439,13 @@ MaterialTestingPage.ctorParameters = () => [
15409
15439
  { type: Array, decorators: [{ type: Optional }, { type: Inject, args: [APP_TESTING_PAGES,] }] }
15410
15440
  ];
15411
15441
 
15412
- const moment$5 = momentImported;
15442
+ const moment$1 = momentImported;
15413
15443
  class SwipeTestPage {
15414
15444
  constructor(formBuilder, dateFormatPipe) {
15415
15445
  this.formBuilder = formBuilder;
15416
15446
  this.dateFormatPipe = dateFormatPipe;
15417
15447
  this.$dates = new BehaviorSubject(undefined);
15418
- this._today = moment$5().startOf('day');
15448
+ this._today = moment$1().startOf('day');
15419
15449
  this.form = formBuilder.group({
15420
15450
  empty: [null, Validators.required],
15421
15451
  date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
@@ -15428,7 +15458,7 @@ class SwipeTestPage {
15428
15458
  ngOnInit() {
15429
15459
  const dates = [];
15430
15460
  for (let d = 0; d < 7; d++) {
15431
- dates[d] = moment$5(this._today).add(d - 3, 'day');
15461
+ dates[d] = moment$1(this._today).add(d - 3, 'day');
15432
15462
  }
15433
15463
  this.$dates.next(dates);
15434
15464
  this.loadData();
@@ -16045,7 +16075,7 @@ class FormArrayHelper {
16045
16075
  }
16046
16076
  }
16047
16077
 
16048
- const moment$6 = momentImported;
16078
+ const moment = momentImported;
16049
16079
  class DateTimeTestPage {
16050
16080
  constructor(platform, formBuilder, cd) {
16051
16081
  this.platform = platform;
@@ -16076,7 +16106,7 @@ class DateTimeTestPage {
16076
16106
  // Load the form with data
16077
16107
  loadData() {
16078
16108
  return __awaiter(this, void 0, void 0, function* () {
16079
- const now = moment$6();
16109
+ const now = moment();
16080
16110
  const data = {
16081
16111
  empty: toDateISOString(now.clone().add(2, 'hours')),
16082
16112
  enable: toDateISOString(now),
@@ -16136,20 +16166,20 @@ DateTimeTestPage.ctorParameters = () => [
16136
16166
  { type: ChangeDetectorRef }
16137
16167
  ];
16138
16168
 
16139
- class EntityTestClass$1 {
16169
+ class EntityTestClass {
16140
16170
  }
16141
- const FAKE_ENTITIES$1 = [
16171
+ const FAKE_ENTITIES = [
16142
16172
  { id: 1, label: 'AAA', name: 'Item A' },
16143
16173
  { id: 2, label: 'BBB', name: 'Item B' },
16144
16174
  { id: 3, label: 'CCC', name: 'Item C' }
16145
16175
  ];
16146
- function deepCopy$1(values) {
16147
- return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
16176
+ function deepCopy(values) {
16177
+ return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
16148
16178
  }
16149
16179
  class ChipsTestPage {
16150
16180
  constructor(formBuilder) {
16151
16181
  this.formBuilder = formBuilder;
16152
- this._items = deepCopy$1(FAKE_ENTITIES$1);
16182
+ this._items = deepCopy(FAKE_ENTITIES);
16153
16183
  this._$items = new BehaviorSubject(undefined);
16154
16184
  this.autocompleteFields = new MatAutocompleteConfigHolder();
16155
16185
  this.form = formBuilder.group({
@@ -16168,7 +16198,7 @@ class ChipsTestPage {
16168
16198
  });
16169
16199
  // From items
16170
16200
  this.autocompleteFields.add('entity-items', {
16171
- items: FAKE_ENTITIES$1.slice(),
16201
+ items: FAKE_ENTITIES.slice(),
16172
16202
  attributes: ['label', 'name'],
16173
16203
  displayWith: this.entityToString
16174
16204
  });
@@ -16189,15 +16219,15 @@ class ChipsTestPage {
16189
16219
  const data = {
16190
16220
  entity: [],
16191
16221
  // THis item is NOT in the items list => i should be displayed anyway
16192
- entityInitial: FAKE_ENTITIES$1.slice(1, 2),
16193
- disableEntity: FAKE_ENTITIES$1.slice(1, 2)
16222
+ entityInitial: FAKE_ENTITIES.slice(1, 2),
16223
+ disableEntity: FAKE_ENTITIES.slice(1, 2)
16194
16224
  };
16195
16225
  this.form.setValue(data);
16196
16226
  });
16197
16227
  }
16198
16228
  loadItems() {
16199
16229
  return __awaiter(this, void 0, void 0, function* () {
16200
- this._$items.next(deepCopy$1(FAKE_ENTITIES$1));
16230
+ this._$items.next(deepCopy(FAKE_ENTITIES));
16201
16231
  });
16202
16232
  }
16203
16233
  entityToString(item) {
@@ -16229,7 +16259,7 @@ ChipsTestPage.ctorParameters = () => [
16229
16259
  { type: FormBuilder }
16230
16260
  ];
16231
16261
 
16232
- const routes = [
16262
+ const routes$1 = [
16233
16263
  {
16234
16264
  path: '',
16235
16265
  pathMatch: 'full',
@@ -16276,7 +16306,7 @@ MaterialTestingModule.decorators = [
16276
16306
  ReactiveFormsModule,
16277
16307
  SharedMaterialModule,
16278
16308
  TranslateModule.forChild(),
16279
- RouterModule.forChild(routes)
16309
+ RouterModule.forChild(routes$1)
16280
16310
  ],
16281
16311
  declarations: [
16282
16312
  MaterialTestingPage,
@@ -17219,7 +17249,7 @@ class UserSettingsValidatorService extends AppValidatorService {
17219
17249
  });
17220
17250
  }
17221
17251
  }
17222
- UserSettingsValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(ɵɵinject(FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
17252
+ UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
17223
17253
  UserSettingsValidatorService.decorators = [
17224
17254
  { type: Injectable, args: [{ providedIn: 'root' },] }
17225
17255
  ];
@@ -17263,7 +17293,7 @@ class AccountValidatorService extends AppValidatorService {
17263
17293
  return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
17264
17294
  }
17265
17295
  }
17266
- AccountValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
17296
+ AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
17267
17297
  AccountValidatorService.decorators = [
17268
17298
  { type: Injectable, args: [{ providedIn: 'root' },] }
17269
17299
  ];
@@ -17797,7 +17827,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
17797
17827
  });
17798
17828
  }
17799
17829
  }
17800
- LocalSettingsValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(ɵɵinject(FormBuilder), ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
17830
+ LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
17801
17831
  LocalSettingsValidatorService.decorators = [
17802
17832
  { type: Injectable, args: [{ providedIn: 'root' },] }
17803
17833
  ];
@@ -18417,7 +18447,7 @@ class IsOnFieldModePipe {
18417
18447
  return value === 'FIELD';
18418
18448
  }
18419
18449
  }
18420
- IsOnFieldModePipe.ɵprov = ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
18450
+ IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
18421
18451
  IsOnFieldModePipe.decorators = [
18422
18452
  { type: Pipe, args: [{
18423
18453
  name: 'isOnField'
@@ -18429,7 +18459,7 @@ class IsNotOnFieldModePipe {
18429
18459
  return value !== 'FIELD';
18430
18460
  }
18431
18461
  }
18432
- IsNotOnFieldModePipe.ɵprov = ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
18462
+ IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
18433
18463
  IsNotOnFieldModePipe.decorators = [
18434
18464
  { type: Pipe, args: [{
18435
18465
  name: 'isNotOnField'
@@ -18444,7 +18474,7 @@ class PersonToStringPipe {
18444
18474
  return PersonUtils.personToString(value);
18445
18475
  }
18446
18476
  }
18447
- PersonToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
18477
+ PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
18448
18478
  PersonToStringPipe.decorators = [
18449
18479
  { type: Pipe, args: [{
18450
18480
  name: 'personToString'
@@ -18452,6 +18482,9 @@ PersonToStringPipe.decorators = [
18452
18482
  { type: Injectable, args: [{ providedIn: 'root' },] }
18453
18483
  ];
18454
18484
 
18485
+ const MimeTypes = Object.freeze({
18486
+ ANDROID_APK: 'application/vnd.android.package-archive'
18487
+ });
18455
18488
  class AppInstallUpgradeCard {
18456
18489
  constructor(modalCtrl, configService, platform, cd, network, environment) {
18457
18490
  this.modalCtrl = modalCtrl;
@@ -18468,6 +18501,7 @@ class AppInstallUpgradeCard {
18468
18501
  this.showOfflineWarning = true;
18469
18502
  this.showInstallButton = false;
18470
18503
  this.onUpdateOfflineModeClick = new EventEmitter();
18504
+ this.isAndroidCordova = platform.isAndroidCordova();
18471
18505
  }
18472
18506
  set showUpdateOfflineFeature(value) {
18473
18507
  if (value === this._showUpdateOfflineFeature)
@@ -18511,15 +18545,14 @@ class AppInstallUpgradeCard {
18511
18545
  ngOnDestroy() {
18512
18546
  this._subscription.unsubscribe();
18513
18547
  }
18514
- openDownloadLink(event, url) {
18515
- if (!url)
18548
+ downloadLink(event, link) {
18549
+ if (!link || !link.url)
18516
18550
  return; // Skip
18517
- if (event) {
18518
- event.preventDefault();
18519
- }
18520
- console.info(`[install] Opening App download link: ${url}`);
18521
- this.platform.open(url, '_system', 'location=yes');
18522
- return false;
18551
+ this.platform.download({
18552
+ uri: link.url,
18553
+ filename: link.downloadFilename,
18554
+ mimeType: link.mimeType
18555
+ });
18523
18556
  }
18524
18557
  tryOnline() {
18525
18558
  this.waitingNetwork = true;
@@ -18544,10 +18577,10 @@ class AppInstallUpgradeCard {
18544
18577
  return '';
18545
18578
  }
18546
18579
  }
18547
- getAppFileName() {
18548
- return;
18580
+ asLink(value) {
18581
+ return value;
18549
18582
  }
18550
- /* -- protected method -- */
18583
+ /* -- private method -- */
18551
18584
  getCompatibleInstallLinks(installLinks) {
18552
18585
  // Cordova already running: not need to install
18553
18586
  if (this.platform.is('cordova'))
@@ -18584,11 +18617,14 @@ class AppInstallUpgradeCard {
18584
18617
  if (url) {
18585
18618
  let downloadFilename;
18586
18619
  let version;
18620
+ let mimeType;
18587
18621
  // Get file name
18588
18622
  const filename = this.getFilename(url);
18589
18623
  version = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);
18590
18624
  // OK, this is a downloadable APK file (e.g. NOT a link to a playstore)
18591
18625
  if (filename === null || filename === void 0 ? void 0 : filename.endsWith('.apk')) {
18626
+ // Define mime type
18627
+ mimeType = MimeTypes.ANDROID_APK;
18592
18628
  // Get the file version (if any)
18593
18629
  const versionMatches = /-v([1-9][0-9]*\.[0-9]+\.(:?(:?alpha|beta|rc)?[0-9]*))/i.exec(filename);
18594
18630
  version = versionMatches && versionMatches[1] || version;
@@ -18605,7 +18641,7 @@ class AppInstallUpgradeCard {
18605
18641
  }
18606
18642
  }
18607
18643
  }
18608
- result.push({ name, url, platform: 'android', version, downloadFilename });
18644
+ result.push({ name, url, platform: 'android', version, downloadFilename, mimeType });
18609
18645
  }
18610
18646
  }
18611
18647
  // iOS - TODO
@@ -18633,7 +18669,7 @@ class AppInstallUpgradeCard {
18633
18669
  AppInstallUpgradeCard.decorators = [
18634
18670
  { type: Component, args: [{
18635
18671
  selector: 'app-install-upgrade-card',
18636
- template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n <!-- Waiting spinner -->\n <ng-template #waitingSpinner>\n <ion-spinner *ngIf=\"waitingNetwork\" color=\"light\"></ion-spinner>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && updateLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of updateLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n\n <!-- Download button -->\n <ion-button *ngIf=\"link.downloadFilename; else redirectButton\"\n [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Download button -->\n <ion-button *ngIf=\"link.downloadFilename; else redirectButton\"\n [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Update offline feature card-->\n<ion-card *ngIf=\"showUpdateOfflineFeature && !loading && !offline\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h4>\n <b [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE'| translate\"></b>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"onUpdateOfflineModeClick.emit($event)\">\n <span translate>NETWORK.BTN_UPDATE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n",
18672
+ template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n <!-- Waiting spinner -->\n <ng-template #waitingSpinner>\n <ion-spinner *ngIf=\"waitingNetwork\" color=\"light\"></ion-spinner>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && updateLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of updateLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n\n <!-- Download button -->\n <ion-button *ngIf=\"link.downloadFilename; else redirectButton\"\n [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Update offline feature card-->\n<ion-card *ngIf=\"showUpdateOfflineFeature && !loading && !offline\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h4>\n <b [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE'| translate\"></b>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"onUpdateOfflineModeClick.emit($event)\">\n <span translate>NETWORK.BTN_UPDATE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n\n <ng-container *ngIf=\"link.downloadFilename; else redirectButton\">\n\n <!-- Cordova download button -->\n <ion-button *ngIf=\"isAndroidCordova; else webDownloadButton\"\n (click)=\"downloadLink($event, asLink(link))\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Web download button -->\n <ng-template #webDownloadButton>\n <ion-button [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n </ng-template>\n </ng-container>\n\n <!-- Web redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n</ng-template>\n",
18637
18673
  changeDetection: ChangeDetectionStrategy.OnPush,
18638
18674
  animations: [slideUpDownAnimation],
18639
18675
  styles: ["ion-text small{font-size:85%}"]
@@ -18661,7 +18697,7 @@ class IsLoginAccountPipe {
18661
18697
  return value && value.pubkey && true;
18662
18698
  }
18663
18699
  }
18664
- IsLoginAccountPipe.ɵprov = ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
18700
+ IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
18665
18701
  IsLoginAccountPipe.decorators = [
18666
18702
  { type: Pipe, args: [{
18667
18703
  name: 'isLogin'
@@ -18673,7 +18709,7 @@ class AccountToStringPipe {
18673
18709
  return accountToString(value);
18674
18710
  }
18675
18711
  }
18676
- AccountToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
18712
+ AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
18677
18713
  AccountToStringPipe.decorators = [
18678
18714
  { type: Pipe, args: [{
18679
18715
  name: 'accountToString'
@@ -18688,7 +18724,7 @@ class DepartmentToStringPipe {
18688
18724
  return departmentToString(value);
18689
18725
  }
18690
18726
  }
18691
- DepartmentToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
18727
+ DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
18692
18728
  DepartmentToStringPipe.decorators = [
18693
18729
  { type: Pipe, args: [{
18694
18730
  name: 'departmentToString'
@@ -18714,7 +18750,7 @@ class MenuService {
18714
18750
  this._visibleSubject.next(value);
18715
18751
  }
18716
18752
  }
18717
- MenuService.ɵprov = ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
18753
+ MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
18718
18754
  MenuService.decorators = [
18719
18755
  { type: Injectable, args: [{
18720
18756
  providedIn: 'root'
@@ -19208,7 +19244,7 @@ class AuthGuardService {
19208
19244
  }));
19209
19245
  }
19210
19246
  }
19211
- AuthGuardService.ɵprov = ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(ɵɵinject(AccountService), ɵɵinject(ModalController), ɵɵinject(Router), ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
19247
+ AuthGuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(i0.ɵɵinject(AccountService), i0.ɵɵinject(i1$4.ModalController), i0.ɵɵinject(i3$3.Router), i0.ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
19212
19248
  AuthGuardService.decorators = [
19213
19249
  { type: Injectable, args: [{ providedIn: 'root' },] }
19214
19250
  ];
@@ -19256,7 +19292,7 @@ class BaseEntityService extends BaseGraphqlService {
19256
19292
  query,
19257
19293
  variables: { id },
19258
19294
  fetchPolicy: opts && opts.fetchPolicy || undefined,
19259
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
19295
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
19260
19296
  })
19261
19297
  .pipe(map(({ data }) => (!opts || opts.toEntity !== false)
19262
19298
  ? (data && this.fromObject(data))
@@ -19271,7 +19307,7 @@ class BaseEntityService extends BaseGraphqlService {
19271
19307
  query,
19272
19308
  variables: { id },
19273
19309
  fetchPolicy: opts && opts.fetchPolicy || undefined,
19274
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
19310
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
19275
19311
  });
19276
19312
  // Convert to entity
19277
19313
  return (!opts || opts.toEntity !== false)
@@ -19302,7 +19338,7 @@ class BaseEntityService extends BaseGraphqlService {
19302
19338
  totalFieldName: withTotal ? 'total' : undefined,
19303
19339
  insertFilterFn: filter && filter.asFilterFn(),
19304
19340
  variables,
19305
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
19341
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
19306
19342
  fetchPolicy: opts && opts.fetchPolicy || undefined
19307
19343
  })
19308
19344
  .pipe(map(({ data, total }) => {
@@ -19338,7 +19374,7 @@ class BaseEntityService extends BaseGraphqlService {
19338
19374
  const { data, total } = yield this.graphql.query({
19339
19375
  query,
19340
19376
  variables,
19341
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
19377
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
19342
19378
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
19343
19379
  });
19344
19380
  const entities = (!opts || opts.toEntity !== false) ?
@@ -19377,7 +19413,7 @@ class BaseEntityService extends BaseGraphqlService {
19377
19413
  variables: {
19378
19414
  filter: filter && filter.asPodObject()
19379
19415
  },
19380
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
19416
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
19381
19417
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
19382
19418
  });
19383
19419
  return res.total;
@@ -19410,7 +19446,7 @@ class BaseEntityService extends BaseGraphqlService {
19410
19446
  variables: {
19411
19447
  data: json
19412
19448
  },
19413
- error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
19449
+ error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
19414
19450
  update: (proxy, { data }) => {
19415
19451
  const savedEntities = data && data.data;
19416
19452
  if (savedEntities) {
@@ -19466,7 +19502,7 @@ class BaseEntityService extends BaseGraphqlService {
19466
19502
  variables: {
19467
19503
  data: json
19468
19504
  },
19469
- error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
19505
+ error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
19470
19506
  update: (cache, { data }) => {
19471
19507
  // Update entity
19472
19508
  const savedEntity = data && data.data;
@@ -19514,7 +19550,7 @@ class BaseEntityService extends BaseGraphqlService {
19514
19550
  refetchQueries: this.getRefetchQueriesForMutation(opts),
19515
19551
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
19516
19552
  variables: { ids },
19517
- error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
19553
+ error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
19518
19554
  update: (cache, res) => {
19519
19555
  // Remove from cache
19520
19556
  if (this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -19555,7 +19591,7 @@ class BaseEntityService extends BaseGraphqlService {
19555
19591
  refetchQueries: this.getRefetchQueriesForMutation(opts),
19556
19592
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
19557
19593
  variables: { id },
19558
- error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
19594
+ error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
19559
19595
  update: (proxy, res) => {
19560
19596
  // Remove from cache
19561
19597
  if (this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -19588,7 +19624,7 @@ class BaseEntityService extends BaseGraphqlService {
19588
19624
  query: opts && opts.query || this.subscriptions.listenChanges,
19589
19625
  variables,
19590
19626
  error: {
19591
- code: ErrorCodes.SUBSCRIBE_DATA_ERROR,
19627
+ code: ErrorCodes$2.SUBSCRIBE_DATA_ERROR,
19592
19628
  message: 'ERROR.SUBSCRIBE_DATA_ERROR'
19593
19629
  }
19594
19630
  })
@@ -19763,7 +19799,7 @@ class EntitiesTableDataSource extends TableDataSource {
19763
19799
  if (this._debug)
19764
19800
  invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this._logTypeName} row #${row.id}`));
19765
19801
  // Stop with an error
19766
- throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
19802
+ throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
19767
19803
  }
19768
19804
  this._editingRowCount = 0;
19769
19805
  let data;
@@ -20585,14 +20621,14 @@ class AppTable {
20585
20621
  return __awaiter(this, void 0, void 0, function* () {
20586
20622
  opts = Object.assign({ keepEditing: this.keepEditedRowOnSave }, opts);
20587
20623
  if (this.readOnly) {
20588
- throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
20624
+ throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
20589
20625
  }
20590
20626
  this.resetError();
20591
20627
  // Keep edited row id (should be done BEFORE confirmEditCreate() )
20592
20628
  this.previouslyEditedRowId = opts.keepEditing && ((_a = this.editedRow) === null || _a === void 0 ? void 0 : _a.editing) ? this.editedRow.id : undefined;
20593
20629
  const previouslyEditedData = isNotNil(this.previouslyEditedRowId) && this.editedRow.currentData || ((_b = this.singleSelectedRow) === null || _b === void 0 ? void 0 : _b.currentData);
20594
20630
  if (!this.confirmEditCreate()) {
20595
- throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
20631
+ throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
20596
20632
  }
20597
20633
  // Mark as saving
20598
20634
  this.markAsSaving();
@@ -20708,7 +20744,7 @@ class AppTable {
20708
20744
  deleteRows(event, rows, opts) {
20709
20745
  return __awaiter(this, void 0, void 0, function* () {
20710
20746
  if (this.readOnly) {
20711
- throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
20747
+ throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
20712
20748
  }
20713
20749
  if (event === null || event === void 0 ? void 0 : event.defaultPrevented)
20714
20750
  return 0; // SKip
@@ -22139,7 +22175,7 @@ class AppEntityEditor extends AppTabEditor {
22139
22175
  try {
22140
22176
  const data = yield this.dataService.load(id, opts);
22141
22177
  if (!data)
22142
- throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
22178
+ throw { code: ErrorCodes$2.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
22143
22179
  this._usageMode = this.computeUsageMode(data);
22144
22180
  yield this.onEntityLoaded(data, opts);
22145
22181
  yield this.updateView(data, opts);
@@ -23032,7 +23068,7 @@ class UserEventService extends BaseGraphqlService {
23032
23068
  EntityUtils.copyIdAndUpdateDate(source, target);
23033
23069
  }
23034
23070
  }
23035
- UserEventService.ɵprov = ɵɵdefineInjectable({ factory: function UserEventService_Factory() { return new UserEventService(ɵɵinject(GraphqlService), ɵɵinject(AccountService), ɵɵinject(NetworkService), ɵɵinject(TranslateService), ɵɵinject(ToastController), ɵɵinject(ENVIRONMENT)); }, token: UserEventService, providedIn: "root" });
23071
+ UserEventService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserEventService_Factory() { return new UserEventService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(AccountService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(ENVIRONMENT)); }, token: UserEventService, providedIn: "root" });
23036
23072
  UserEventService.decorators = [
23037
23073
  { type: Injectable, args: [{ providedIn: 'root' },] }
23038
23074
  ];
@@ -23234,6 +23270,7 @@ let PersonFilter = PersonFilter_1 = class PersonFilter extends EntityFilter {
23234
23270
  this.userProfiles = source.userProfiles;
23235
23271
  this.excludedIds = source.excludedIds;
23236
23272
  this.searchAttribute = source.searchAttribute;
23273
+ this.searchAttributes = source.searchAttributes;
23237
23274
  }
23238
23275
  asObject(opts) {
23239
23276
  const target = super.asObject(opts);
@@ -23244,6 +23281,7 @@ let PersonFilter = PersonFilter_1 = class PersonFilter extends EntityFilter {
23244
23281
  target.userProfiles = this.userProfiles;
23245
23282
  target.excludedIds = this.excludedIds;
23246
23283
  target.searchAttribute = this.searchAttribute;
23284
+ target.searchAttributes = this.searchAttributes;
23247
23285
  return target;
23248
23286
  }
23249
23287
  buildFilter() {
@@ -23257,7 +23295,7 @@ let PersonFilter = PersonFilter_1 = class PersonFilter extends EntityFilter {
23257
23295
  filterFns.push(e => isNil(e.id) || !this.excludedIds.includes(e.id));
23258
23296
  }
23259
23297
  // Search text
23260
- const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttribute || ['lastName', 'firstName', 'department.name'], this.searchText);
23298
+ const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttribute || this.searchAttributes || ['lastName', 'firstName', 'department.name'], this.searchText);
23261
23299
  if (searchTextFilter)
23262
23300
  filterFns.push(searchTextFilter);
23263
23301
  return filterFns;
@@ -23369,12 +23407,13 @@ class PersonService extends BaseEntityService {
23369
23407
  };
23370
23408
  });
23371
23409
  }
23372
- suggest(value, filter) {
23410
+ suggest(value, filter, sortBy, sortDirection) {
23373
23411
  return __awaiter(this, void 0, void 0, function* () {
23374
23412
  if (ReferentialUtils.isNotEmpty(value))
23375
23413
  return { data: [value] };
23376
23414
  value = (typeof value === 'string' && value !== '*') && value || undefined;
23377
- return this.loadAll(0, !value ? 30 : 10, undefined, undefined, Object.assign(Object.assign({}, filter), { searchText: value, statusIds: filter && filter.statusIds || [StatusIds.ENABLE], userProfiles: filter && filter.userProfiles }), { withTotal: true /* need by autocomplete */ });
23415
+ sortBy = sortBy || filter.searchAttribute || (filter.searchAttributes && filter.searchAttributes[0]);
23416
+ return this.loadAll(0, !value ? 30 : 10, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { searchText: value, statusIds: filter && filter.statusIds || [StatusIds.ENABLE], userProfiles: filter && filter.userProfiles }), { withTotal: true /* need by autocomplete */ });
23378
23417
  });
23379
23418
  }
23380
23419
  executeImport(progression, opts) {
@@ -23414,7 +23453,7 @@ class PersonService extends BaseEntityService {
23414
23453
  return target;
23415
23454
  }
23416
23455
  }
23417
- PersonService.ɵprov = ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(ɵɵinject(GraphqlService), ɵɵinject(PlatformService), ɵɵinject(NetworkService), ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
23456
+ PersonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(PlatformService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
23418
23457
  PersonService.decorators = [
23419
23458
  { type: Injectable, args: [{ providedIn: 'root' },] }
23420
23459
  ];
@@ -23445,7 +23484,7 @@ class PersonValidatorService {
23445
23484
  return this.formBuilder.group(formConfig);
23446
23485
  }
23447
23486
  }
23448
- PersonValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
23487
+ PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
23449
23488
  PersonValidatorService.decorators = [
23450
23489
  { type: Injectable, args: [{ providedIn: 'root' },] }
23451
23490
  ];
@@ -23601,7 +23640,7 @@ UsersPage.decorators = [
23601
23640
  ],
23602
23641
  animations: [slideUpDownAnimation],
23603
23642
  changeDetection: ChangeDetectionStrategy.OnPush,
23604
- styles: [".mat-expansion-panel{margin-bottom:5px}.mat-expansion-panel .form-container mat-form-field{width:100%}.mat-expansion-panel mat-action-row ion-label{line-height:36px}.table-container{height:100%}.mat-table .mat-cell .avatar{height:40px;width:40px;margin:2px 0 0;background-size:cover;background-repeat:no-repeat;background-position:50%}.mat-table .mat-column-avatar{min-width:50px}.mat-table .mat-column-profile{min-width:110px}.mat-table .mat-column-status{min-width:130px}.mat-table .mat-column-department{min-width:150px}"]
23643
+ styles: [".mat-expansion-panel{margin-bottom:5px}.mat-expansion-panel .form-container mat-form-field{width:100%}.mat-expansion-panel mat-action-row ion-label{line-height:36px}.table-container{height:calc(100%)}.mat-table .mat-cell .avatar{height:40px;width:40px;margin:2px 0 0;background-size:cover;background-repeat:no-repeat;background-position:50%}.mat-table .mat-column-avatar{min-width:50px}.mat-table .mat-column-profile{min-width:110px}.mat-table .mat-column-status{min-width:130px}.mat-table .mat-column-department{min-width:150px}"]
23605
23644
  },] }
23606
23645
  ];
23607
23646
  UsersPage.ctorParameters = () => [
@@ -23649,16 +23688,16 @@ AdminModule.decorators = [
23649
23688
  ];
23650
23689
  AdminModule.ctorParameters = () => [];
23651
23690
 
23652
- const ɵ0$a = {
23691
+ const ɵ0 = {
23653
23692
  profile: 'ADMIN'
23654
23693
  };
23655
- const routes$1 = [
23694
+ const routes = [
23656
23695
  {
23657
23696
  path: 'users',
23658
23697
  pathMatch: 'full',
23659
23698
  component: UsersPage,
23660
23699
  canActivate: [AuthGuardService],
23661
- data: ɵ0$a
23700
+ data: ɵ0
23662
23701
  }
23663
23702
  ];
23664
23703
  class AdminRoutingModule {
@@ -23668,13 +23707,13 @@ AdminRoutingModule.decorators = [
23668
23707
  imports: [
23669
23708
  SharedRoutingModule,
23670
23709
  AdminModule,
23671
- RouterModule.forChild(routes$1)
23710
+ RouterModule.forChild(routes)
23672
23711
  ],
23673
23712
  exports: [RouterModule]
23674
23713
  },] }
23675
23714
  ];
23676
23715
 
23677
- const ErrorCodes$2 = {
23716
+ const ErrorCodes = {
23678
23717
  LOAD_PERSONS_ERROR: 100,
23679
23718
  SAVE_PERSONS_ERROR: 101,
23680
23719
  DELETE_PERSONS_ERROR: 102,
@@ -23686,5 +23725,5 @@ const ErrorCodes$2 = {
23686
23725
  * Generated bundle index. Do not edit.
23687
23726
  */
23688
23727
 
23689
- export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AnimationState, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes$2 as ErrorCodes, EvenPipe, FileService, FileSizePipe, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormFieldValuesHolder, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialChipsModule, MaterialTestingModule, MaterialTestingPage, MathAbsPipe, MenuComponent, MenuItems, MenuService, ModalToolbarComponent, NetworkService, NgInitDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialRef, ReferentialUtils, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedValidators, SocialModule, Software, StatusById, StatusIds, StatusList, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UserEvent, UserEventFilter, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equalsOrNil, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isControlHasInput, isEmptyArray, isInputElement, isInstanceOf, isInt, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitIdle, waitWhilePending, ɵ0$5 as ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh };
23728
+ export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AnimationState, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileService, FileSizePipe, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormFieldValuesHolder, Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialChipsModule, MaterialTestingModule, MaterialTestingPage, MathAbsPipe, MenuComponent, MenuItems, MenuService, ModalToolbarComponent, NetworkService, NgInitDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialRef, ReferentialUtils, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedValidators, SocialModule, Software, StatusById, StatusIds, StatusList, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UserEvent, UserEventFilter, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equalsOrNil, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isControlHasInput, isEmptyArray, isInputElement, isInstanceOf, isInt, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitIdle, waitWhilePending, ɵ0$5 as ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh };
23690
23729
  //# sourceMappingURL=ngx-sumaris-components.js.map