@sumaris-net/ngx-components 0.23.2 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,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';
@@ -869,19 +886,19 @@ class MatAutocompleteConfigHolder {
869
886
  return this.fields[fieldName] || this.add(fieldName);
870
887
  }
871
888
  }
872
- const DEFAULT_VALUE_ACCESSOR = {
889
+ const DEFAULT_VALUE_ACCESSOR$6 = {
873
890
  provide: NG_VALUE_ACCESSOR,
874
891
  useExisting: forwardRef(() => MatAutocompleteField),
875
892
  multi: true
876
893
  };
877
- const noop = () => { };
878
- const ɵ0 = noop;
894
+ const noop$7 = () => { };
895
+ const ɵ0$a = noop$7;
879
896
  class MatAutocompleteField {
880
897
  constructor(cd, formGroupDir) {
881
898
  this.cd = cd;
882
899
  this.formGroupDir = formGroupDir;
883
- this._onChangeCallback = noop;
884
- this._onTouchedCallback = noop;
900
+ this._onChangeCallback = noop$7;
901
+ this._onTouchedCallback = noop$7;
885
902
  this._subscription = new Subscription();
886
903
  this._filter$ = new BehaviorSubject(undefined);
887
904
  this._reload$ = new Subject();
@@ -1468,7 +1485,7 @@ MatAutocompleteField.decorators = [
1468
1485
  // eslint-disable-next-line @angular-eslint/component-selector
1469
1486
  selector: 'mat-autocomplete-field',
1470
1487
  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",
1471
- providers: [DEFAULT_VALUE_ACCESSOR],
1488
+ providers: [DEFAULT_VALUE_ACCESSOR$6],
1472
1489
  changeDetection: ChangeDetectionStrategy.OnPush,
1473
1490
  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}"]
1474
1491
  },] }
@@ -1545,7 +1562,7 @@ class DateFormatPipe {
1545
1562
  return this.dateAdapter.format(date, displayFormat);
1546
1563
  }
1547
1564
  }
1548
- DateFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(ɵɵinject(MomentDateAdapter), ɵɵinject(TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
1565
+ DateFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
1549
1566
  DateFormatPipe.decorators = [
1550
1567
  { type: Pipe, args: [{
1551
1568
  name: 'dateFormat'
@@ -1557,7 +1574,7 @@ DateFormatPipe.ctorParameters = () => [
1557
1574
  { type: TranslateService }
1558
1575
  ];
1559
1576
 
1560
- const moment = momentImported;
1577
+ const moment$6 = momentImported;
1561
1578
  class DateDiffDurationPipe {
1562
1579
  constructor(dateAdapter, translate) {
1563
1580
  this.dateAdapter = dateAdapter;
@@ -1573,17 +1590,17 @@ class DateDiffDurationPipe {
1573
1590
  return this.format(startDate, endDate);
1574
1591
  }
1575
1592
  format(startDate, endDate) {
1576
- const duration = moment.duration(endDate.diff(startDate));
1593
+ const duration = moment$6.duration(endDate.diff(startDate));
1577
1594
  if (duration.asMinutes() < 0)
1578
1595
  return '';
1579
- const timeDuration = moment(0)
1596
+ const timeDuration = moment$6(0)
1580
1597
  .hour(duration.hours())
1581
1598
  .minute(duration.minutes());
1582
1599
  const days = Math.floor(duration.asDays());
1583
1600
  return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format('HH:mm');
1584
1601
  }
1585
1602
  }
1586
- DateDiffDurationPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(ɵɵinject(DateAdapter), ɵɵinject(TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
1603
+ 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" });
1587
1604
  DateDiffDurationPipe.decorators = [
1588
1605
  { type: Pipe, args: [{
1589
1606
  name: 'dateDiffDuration'
@@ -1604,7 +1621,7 @@ class DateFromNowPipe {
1604
1621
  return date ? date.fromNow(args && args.withoutSuffix) : '';
1605
1622
  }
1606
1623
  }
1607
- DateFromNowPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(ɵɵinject(MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
1624
+ DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
1608
1625
  DateFromNowPipe.decorators = [
1609
1626
  { type: Pipe, args: [{
1610
1627
  name: 'dateFromNow'
@@ -1673,7 +1690,7 @@ function formatToDD(value, opts) {
1673
1690
  value *= -1;
1674
1691
  }
1675
1692
  }
1676
- let degrees = roundFloat(value, opts.maxDecimals).toString();
1693
+ let degrees = roundFloat$1(value, opts.maxDecimals).toString();
1677
1694
  // Add sign
1678
1695
  let sign = negative ? '-' : '+';
1679
1696
  if (opts.placeholderChar) {
@@ -1724,7 +1741,7 @@ function formatToDDMMSS(value, opts) {
1724
1741
  }
1725
1742
  let degrees = Math.trunc(value);
1726
1743
  let minutes = Math.trunc((value - degrees) * 60);
1727
- let seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
1744
+ let seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
1728
1745
  while (seconds >= 60) {
1729
1746
  seconds -= 60;
1730
1747
  minutes += 1;
@@ -1792,7 +1809,7 @@ function formatToDDMM(value, opts) {
1792
1809
  }
1793
1810
  }
1794
1811
  let degrees = Math.trunc(value);
1795
- let minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
1812
+ let minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
1796
1813
  while (minutes >= 60) {
1797
1814
  minutes -= 60;
1798
1815
  degrees += 1;
@@ -1843,15 +1860,15 @@ function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholderChar)
1843
1860
  return NaN;
1844
1861
  }
1845
1862
  if (pattern === 'DD')
1846
- return roundFloat(degrees, maxDecimals);
1863
+ return roundFloat$1(degrees, maxDecimals);
1847
1864
  const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
1848
1865
  const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
1849
1866
  const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
1850
1867
  const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
1851
1868
  degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
1852
- return roundFloat(degrees, maxDecimals);
1869
+ return roundFloat$1(degrees, maxDecimals);
1853
1870
  }
1854
- function roundFloat(input, maxDecimals) {
1871
+ function roundFloat$1(input, maxDecimals) {
1855
1872
  if (maxDecimals > 0) {
1856
1873
  const powDecimal = Math.pow(10, maxDecimals);
1857
1874
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -1871,7 +1888,7 @@ class LatLongFormatPipe {
1871
1888
  return ((!args.type || args.type !== 'latitude') ? formatLongitude : formatLatitude)(value, args);
1872
1889
  }
1873
1890
  }
1874
- LatLongFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
1891
+ LatLongFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
1875
1892
  LatLongFormatPipe.decorators = [
1876
1893
  { type: Pipe, args: [{
1877
1894
  name: 'latLongFormat'
@@ -1883,7 +1900,7 @@ class LatitudeFormatPipe {
1883
1900
  this.transform = formatLatitude;
1884
1901
  }
1885
1902
  }
1886
- LatitudeFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
1903
+ LatitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
1887
1904
  LatitudeFormatPipe.decorators = [
1888
1905
  { type: Pipe, args: [{
1889
1906
  name: 'latitudeFormat'
@@ -1895,7 +1912,7 @@ class LongitudeFormatPipe {
1895
1912
  this.transform = formatLongitude;
1896
1913
  }
1897
1914
  }
1898
- LongitudeFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
1915
+ LongitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
1899
1916
  LongitudeFormatPipe.decorators = [
1900
1917
  { type: Pipe, args: [{
1901
1918
  name: 'longitudeFormat'
@@ -1915,7 +1932,7 @@ class NumberFormatPipe {
1915
1932
  }
1916
1933
  }
1917
1934
  }
1918
- NumberFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
1935
+ NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
1919
1936
  NumberFormatPipe.decorators = [
1920
1937
  { type: Pipe, args: [{
1921
1938
  name: 'numberFormat'
@@ -1955,7 +1972,7 @@ class HighlightPipe {
1955
1972
  }
1956
1973
  }
1957
1974
  }
1958
- HighlightPipe.ɵprov = ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
1975
+ HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
1959
1976
  HighlightPipe.decorators = [
1960
1977
  { type: Pipe, args: [{
1961
1978
  name: 'highlight'
@@ -2020,7 +2037,7 @@ FileSizePipe.decorators = [
2020
2037
  { type: Pipe, args: [{ name: 'fileSize' },] }
2021
2038
  ];
2022
2039
 
2023
- const moment$1 = momentImported;
2040
+ const moment$5 = momentImported;
2024
2041
  const DATE_UNIX_TIMESTAMP = 'X';
2025
2042
  const DATE_UNIX_MS_TIMESTAMP = 'x';
2026
2043
  class DateUtils {
@@ -2054,32 +2071,32 @@ function fromDateISOString(value) {
2054
2071
  if (!value || isMoment(value))
2055
2072
  return value;
2056
2073
  // Parse the input value, as a ISO date time
2057
- const date = moment$1(value, DATE_ISO_PATTERN);
2074
+ const date = moment$5(value, DATE_ISO_PATTERN);
2058
2075
  if (date.isValid())
2059
2076
  return date;
2060
2077
  // Not valid: trying to convert from unix timestamp
2061
2078
  if (typeof value === 'string') {
2062
2079
  console.warn('Wrong date format - Trying to convert from local time: ' + value);
2063
2080
  if (value.length === 10) {
2064
- return moment$1(value, DATE_UNIX_TIMESTAMP);
2081
+ return moment$5(value, DATE_UNIX_TIMESTAMP);
2065
2082
  }
2066
2083
  else if (value.length === 13) {
2067
- return moment$1(value, DATE_UNIX_MS_TIMESTAMP);
2084
+ return moment$5(value, DATE_UNIX_MS_TIMESTAMP);
2068
2085
  }
2069
2086
  }
2070
2087
  console.warn('Unable to parse date: ' + value);
2071
2088
  return undefined;
2072
2089
  }
2073
2090
  function fromUnixTimestamp(timeInSec) {
2074
- return moment$1(timeInSec, DATE_UNIX_TIMESTAMP);
2091
+ return moment$5(timeInSec, DATE_UNIX_TIMESTAMP);
2075
2092
  }
2076
2093
  function fromUnixMsTimestamp(timeInMs) {
2077
- return moment$1(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2094
+ return moment$5(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2078
2095
  }
2079
2096
  function toDuration(value, unit) {
2080
2097
  if (!value)
2081
2098
  return undefined;
2082
- const duration = moment$1.duration(value, unit);
2099
+ const duration = moment$5.duration(value, unit);
2083
2100
  // fix 990+ ms
2084
2101
  if (duration.milliseconds() >= 990) {
2085
2102
  duration.add(1000 - duration.milliseconds(), 'ms');
@@ -2108,7 +2125,7 @@ class DurationPipe {
2108
2125
  return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;
2109
2126
  }
2110
2127
  }
2111
- DurationPipe.ɵprov = ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(ɵɵinject(TranslateService)); }, token: DurationPipe, providedIn: "root" });
2128
+ DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
2112
2129
  DurationPipe.decorators = [
2113
2130
  { type: Pipe, args: [{
2114
2131
  name: 'duration'
@@ -2129,7 +2146,7 @@ class MathAbsPipe {
2129
2146
  }
2130
2147
  }
2131
2148
  }
2132
- MathAbsPipe.ɵprov = ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2149
+ MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2133
2150
  MathAbsPipe.decorators = [
2134
2151
  { type: Pipe, args: [{
2135
2152
  name: 'mathAbs'
@@ -2141,7 +2158,7 @@ class EvenPipe {
2141
2158
  return val % 2 === 0;
2142
2159
  }
2143
2160
  }
2144
- EvenPipe.ɵprov = ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
2161
+ EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
2145
2162
  EvenPipe.decorators = [
2146
2163
  { type: Pipe, args: [{
2147
2164
  name: 'even'
@@ -2153,7 +2170,7 @@ class OddPipe {
2153
2170
  return val % 2 !== 0;
2154
2171
  }
2155
2172
  }
2156
- OddPipe.ɵprov = ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
2173
+ OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
2157
2174
  OddPipe.decorators = [
2158
2175
  { type: Pipe, args: [{
2159
2176
  name: 'odd'
@@ -2261,7 +2278,7 @@ class MapGetPipe {
2261
2278
  return val[key];
2262
2279
  }
2263
2280
  }
2264
- MapGetPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
2281
+ MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
2265
2282
  MapGetPipe.decorators = [
2266
2283
  { type: Pipe, args: [{
2267
2284
  name: 'mapGet'
@@ -2275,7 +2292,7 @@ class MapKeysPipe {
2275
2292
  return Object.keys(map);
2276
2293
  }
2277
2294
  }
2278
- MapKeysPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
2295
+ MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
2279
2296
  MapKeysPipe.decorators = [
2280
2297
  { type: Pipe, args: [{
2281
2298
  name: 'mapKeys'
@@ -2289,7 +2306,7 @@ class MapValuesPipe {
2289
2306
  return Object.values(map);
2290
2307
  }
2291
2308
  }
2292
- MapValuesPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
2309
+ MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
2293
2310
  MapValuesPipe.decorators = [
2294
2311
  { type: Pipe, args: [{
2295
2312
  name: 'mapValues'
@@ -2302,7 +2319,7 @@ class IsNotNilOrBlankPipe {
2302
2319
  return isNotNilOrBlank(value);
2303
2320
  }
2304
2321
  }
2305
- IsNotNilOrBlankPipe.ɵprov = ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
2322
+ IsNotNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
2306
2323
  IsNotNilOrBlankPipe.decorators = [
2307
2324
  { type: Pipe, args: [{
2308
2325
  name: 'isNotNilOrBlank'
@@ -2314,7 +2331,7 @@ class IsNilOrBlankPipe {
2314
2331
  return isNilOrBlank(value);
2315
2332
  }
2316
2333
  }
2317
- IsNilOrBlankPipe.ɵprov = ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
2334
+ IsNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
2318
2335
  IsNilOrBlankPipe.decorators = [
2319
2336
  { type: Pipe, args: [{
2320
2337
  name: 'isNilOrBlank'
@@ -2326,7 +2343,7 @@ class ToStringPipe {
2326
2343
  return (value !== null && value !== undefined) ? value.toString() : '';
2327
2344
  }
2328
2345
  }
2329
- ToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
2346
+ ToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
2330
2347
  ToStringPipe.decorators = [
2331
2348
  { type: Pipe, args: [{
2332
2349
  name: 'toString'
@@ -2338,7 +2355,7 @@ class StrLengthPipe {
2338
2355
  return value && value.length || 0;
2339
2356
  }
2340
2357
  }
2341
- StrLengthPipe.ɵprov = ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
2358
+ StrLengthPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
2342
2359
  StrLengthPipe.decorators = [
2343
2360
  { type: Pipe, args: [{
2344
2361
  name: 'strLength'
@@ -2389,7 +2406,7 @@ class TranslateContextService {
2389
2406
  : parts.slice(0, parts.length - 1).concat(context + parts[parts.length - 1]).join('.');
2390
2407
  }
2391
2408
  }
2392
- TranslateContextService.ɵprov = ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(ɵɵinject(TranslateService)); }, token: TranslateContextService, providedIn: "root" });
2409
+ TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
2393
2410
  TranslateContextService.decorators = [
2394
2411
  { type: Injectable, args: [{ providedIn: 'root' },] }
2395
2412
  ];
@@ -2405,7 +2422,7 @@ class TranslateContextPipe {
2405
2422
  return this.translateContext.instant(key, context);
2406
2423
  }
2407
2424
  }
2408
- TranslateContextPipe.ɵprov = ɵɵdefineInjectable({ factory: function TranslateContextPipe_Factory() { return new TranslateContextPipe(ɵɵinject(TranslateContextService)); }, token: TranslateContextPipe, providedIn: "root" });
2425
+ TranslateContextPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextPipe_Factory() { return new TranslateContextPipe(i0.ɵɵinject(TranslateContextService)); }, token: TranslateContextPipe, providedIn: "root" });
2409
2426
  TranslateContextPipe.decorators = [
2410
2427
  { type: Pipe, args: [{
2411
2428
  name: 'translateContext'
@@ -2422,7 +2439,7 @@ class TranslatablePipe {
2422
2439
  return (_a = changeCaseToUnderscore(value)) === null || _a === void 0 ? void 0 : _a.toUpperCase();
2423
2440
  }
2424
2441
  }
2425
- TranslatablePipe.ɵprov = ɵɵdefineInjectable({ factory: function TranslatablePipe_Factory() { return new TranslatablePipe(); }, token: TranslatablePipe, providedIn: "root" });
2442
+ TranslatablePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslatablePipe_Factory() { return new TranslatablePipe(); }, token: TranslatablePipe, providedIn: "root" });
2426
2443
  TranslatablePipe.decorators = [
2427
2444
  { type: Pipe, args: [{
2428
2445
  name: 'translatable'
@@ -2439,7 +2456,7 @@ class PropertyGetPipe {
2439
2456
  args && args.defaultValue);
2440
2457
  }
2441
2458
  }
2442
- PropertyGetPipe.ɵprov = ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
2459
+ PropertyGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
2443
2460
  PropertyGetPipe.decorators = [
2444
2461
  { type: Pipe, args: [{
2445
2462
  name: 'propertyGet'
@@ -2683,12 +2700,12 @@ SharedMatAutocompleteModule.decorators = [
2683
2700
  },] }
2684
2701
  ];
2685
2702
 
2686
- const moment$2 = momentImported;
2703
+ const moment$4 = momentImported;
2687
2704
  // @dynamic
2688
2705
  class SharedValidators {
2689
2706
  static validDate(control) {
2690
2707
  const value = control.value;
2691
- const date = !value || moment$2.isMoment(value) ? value : moment$2(control.value, DATE_ISO_PATTERN);
2708
+ const date = !value || moment$4.isMoment(value) ? value : moment$4(control.value, DATE_ISO_PATTERN);
2692
2709
  if (date && (!date.isValid() || date.year() < 1970)) {
2693
2710
  return { validDate: true };
2694
2711
  }
@@ -3130,9 +3147,9 @@ function parseDuration(input, maxDecimals, placeholderChar) {
3130
3147
  const hour = parseInt(durationParts[0] || '0');
3131
3148
  const minute = parseInt(durationParts[1] || '0');
3132
3149
  const value = hour + (minute + 0.5) / 60;
3133
- return roundFloat$1(value, maxDecimals);
3150
+ return roundFloat(value, maxDecimals);
3134
3151
  }
3135
- function roundFloat$1(input, maxDecimals) {
3152
+ function roundFloat(input, maxDecimals) {
3136
3153
  if (maxDecimals > 0) {
3137
3154
  const powDecimal = Math.pow(10, maxDecimals);
3138
3155
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -3156,9 +3173,9 @@ const MASKS = {
3156
3173
  DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
3157
3174
  }
3158
3175
  };
3159
- const noop$1 = () => {
3176
+ const noop$6 = () => {
3160
3177
  };
3161
- const ɵ0$1 = noop$1;
3178
+ const ɵ0$9 = noop$6;
3162
3179
  class MatLatLongField {
3163
3180
  constructor(platform, translate, formBuilder, cd, formGroupDir) {
3164
3181
  this.platform = platform;
@@ -3166,8 +3183,8 @@ class MatLatLongField {
3166
3183
  this.formBuilder = formBuilder;
3167
3184
  this.cd = cd;
3168
3185
  this.formGroupDir = formGroupDir;
3169
- this._onChangeCallback = noop$1;
3170
- this._onTouchedCallback = noop$1;
3186
+ this._onChangeCallback = noop$6;
3187
+ this._onTouchedCallback = noop$6;
3171
3188
  this._subscription = new Subscription();
3172
3189
  this.disabling = false;
3173
3190
  this.writing = false;
@@ -3508,14 +3525,14 @@ SharedMatLatLongModule.decorators = [
3508
3525
  },] }
3509
3526
  ];
3510
3527
 
3511
- const DEFAULT_VALUE_ACCESSOR$1 = {
3528
+ const DEFAULT_VALUE_ACCESSOR$5 = {
3512
3529
  provide: NG_VALUE_ACCESSOR,
3513
3530
  useExisting: forwardRef(() => MatDate),
3514
3531
  multi: true
3515
3532
  };
3516
- const DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
3517
- const noop$2 = () => { };
3518
- const ɵ0$2 = noop$2;
3533
+ const DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
3534
+ const noop$5 = () => { };
3535
+ const ɵ0$8 = noop$5;
3519
3536
  class MatDate {
3520
3537
  constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
3521
3538
  this.dateAdapter = dateAdapter;
@@ -3524,12 +3541,12 @@ class MatDate {
3524
3541
  this.cd = cd;
3525
3542
  this.keyboard = keyboard;
3526
3543
  this.formGroupDir = formGroupDir;
3527
- this._onChangeCallback = noop$2;
3528
- this._onTouchedCallback = noop$2;
3544
+ this._onChangeCallback = noop$5;
3545
+ this._onTouchedCallback = noop$5;
3529
3546
  this._subscription = new Subscription();
3530
3547
  this.writing = true;
3531
3548
  this.disabling = false;
3532
- this.dayMask = DAY_MASK;
3549
+ this.dayMask = DAY_MASK$2;
3533
3550
  this.disabled = false;
3534
3551
  this.floatLabel = 'auto';
3535
3552
  this.readonly = false;
@@ -3766,7 +3783,7 @@ MatDate.decorators = [
3766
3783
  selector: 'mat-date-field',
3767
3784
  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",
3768
3785
  providers: [
3769
- DEFAULT_VALUE_ACCESSOR$1,
3786
+ DEFAULT_VALUE_ACCESSOR$5,
3770
3787
  ],
3771
3788
  changeDetection: ChangeDetectionStrategy.OnPush,
3772
3789
  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%}"]
@@ -3799,17 +3816,17 @@ MatDate.propDecorators = {
3799
3816
  matInputs: [{ type: ViewChildren, args: ['matInput',] }]
3800
3817
  };
3801
3818
 
3802
- const DEFAULT_VALUE_ACCESSOR$2 = {
3819
+ const DEFAULT_VALUE_ACCESSOR$4 = {
3803
3820
  provide: NG_VALUE_ACCESSOR,
3804
3821
  useExisting: forwardRef(() => MatDateTime),
3805
3822
  multi: true
3806
3823
  };
3807
3824
  const DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
3808
3825
  const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
3809
- const HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
3810
- const noop$3 = () => {
3826
+ const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
3827
+ const noop$4 = () => {
3811
3828
  };
3812
- const ɵ0$3 = noop$3;
3829
+ const ɵ0$7 = noop$4;
3813
3830
  class MatDateTime {
3814
3831
  constructor(platform, dateAdapter, translate, formBuilder, keyboard, cd, formGroupDir) {
3815
3832
  this.platform = platform;
@@ -3819,14 +3836,14 @@ class MatDateTime {
3819
3836
  this.keyboard = keyboard;
3820
3837
  this.cd = cd;
3821
3838
  this.formGroupDir = formGroupDir;
3822
- this._onChangeCallback = noop$3;
3823
- this._onTouchedCallback = noop$3;
3839
+ this._onChangeCallback = noop$4;
3840
+ this._onTouchedCallback = noop$4;
3824
3841
  this._subscription = new Subscription();
3825
3842
  this.writing = true;
3826
3843
  this.disabling = false;
3827
3844
  this._onDestroy = new EventEmitter();
3828
3845
  this.dayMask = DAY_MASK$1;
3829
- this.hourMask = HOUR_MASK;
3846
+ this.hourMask = HOUR_MASK$1;
3830
3847
  this.floatLabel = 'auto';
3831
3848
  this.readonly = false;
3832
3849
  this.compact = false;
@@ -4132,7 +4149,7 @@ MatDateTime.decorators = [
4132
4149
  selector: 'mat-date-time-field',
4133
4150
  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",
4134
4151
  providers: [
4135
- DEFAULT_VALUE_ACCESSOR$2,
4152
+ DEFAULT_VALUE_ACCESSOR$4,
4136
4153
  ],
4137
4154
  changeDetection: ChangeDetectionStrategy.OnPush,
4138
4155
  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%}"]
@@ -4171,10 +4188,10 @@ const DEFAULT_VALUE_ACCESSOR$3 = {
4171
4188
  useExisting: forwardRef(() => MatDateShort),
4172
4189
  multi: true
4173
4190
  };
4174
- const DAY_MASK$2 = [/\d/, /\d/, /\d/, /\d/];
4175
- const noop$4 = () => {
4191
+ const DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
4192
+ const noop$3 = () => {
4176
4193
  };
4177
- const ɵ0$4 = noop$4;
4194
+ const ɵ0$6 = noop$3;
4178
4195
  class MatDateShort {
4179
4196
  constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
4180
4197
  this.dateAdapter = dateAdapter;
@@ -4183,11 +4200,11 @@ class MatDateShort {
4183
4200
  this.cd = cd;
4184
4201
  this.keyboard = keyboard;
4185
4202
  this.formGroupDir = formGroupDir;
4186
- this._onChangeCallback = noop$4;
4187
- this._onTouchedCallback = noop$4;
4203
+ this._onChangeCallback = noop$3;
4204
+ this._onTouchedCallback = noop$3;
4188
4205
  this.writing = true;
4189
4206
  this.disabling = false;
4190
- this.dayMask = DAY_MASK$2;
4207
+ this.dayMask = DAY_MASK;
4191
4208
  this.disabled = false;
4192
4209
  this.floatLabel = 'auto';
4193
4210
  this.readonly = false;
@@ -4500,16 +4517,16 @@ SharedMatDateTimeModule.decorators = [
4500
4517
  },] }
4501
4518
  ];
4502
4519
 
4503
- const DEFAULT_VALUE_ACCESSOR$4 = {
4520
+ const DEFAULT_VALUE_ACCESSOR$2 = {
4504
4521
  provide: NG_VALUE_ACCESSOR,
4505
4522
  useExisting: forwardRef(() => MatDuration),
4506
4523
  multi: true
4507
4524
  };
4508
4525
  const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
4509
- const HOUR_MASK$1 = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
4510
- const noop$5 = () => {
4526
+ const HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
4527
+ const noop$2 = () => {
4511
4528
  };
4512
- const ɵ0$5 = noop$5;
4529
+ const ɵ0$5 = noop$2;
4513
4530
  class MatDuration {
4514
4531
  constructor(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
4515
4532
  this.dateAdapter = dateAdapter;
@@ -4518,11 +4535,11 @@ class MatDuration {
4518
4535
  this.cd = cd;
4519
4536
  this.formGroupDir = formGroupDir;
4520
4537
  this._subscription = new Subscription();
4521
- this._onChangeCallback = noop$5;
4522
- this._onTouchedCallback = noop$5;
4538
+ this._onChangeCallback = noop$2;
4539
+ this._onTouchedCallback = noop$2;
4523
4540
  this.writing = true;
4524
4541
  this.disabling = false;
4525
- this.hourMask = HOUR_MASK$1;
4542
+ this.hourMask = HOUR_MASK;
4526
4543
  this.disabled = false;
4527
4544
  this.floatLabel = 'auto';
4528
4545
  this.readonly = false;
@@ -4702,7 +4719,7 @@ MatDuration.decorators = [
4702
4719
  selector: 'mat-duration-field',
4703
4720
  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",
4704
4721
  providers: [
4705
- DEFAULT_VALUE_ACCESSOR$4,
4722
+ DEFAULT_VALUE_ACCESSOR$2,
4706
4723
  ],
4707
4724
  changeDetection: ChangeDetectionStrategy.OnPush,
4708
4725
  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%}"]
@@ -4759,22 +4776,22 @@ SharedMatDurationModule.decorators = [
4759
4776
  },] }
4760
4777
  ];
4761
4778
 
4762
- const DEFAULT_VALUE_ACCESSOR$5 = {
4779
+ const DEFAULT_VALUE_ACCESSOR$1 = {
4763
4780
  provide: NG_VALUE_ACCESSOR,
4764
4781
  useExisting: forwardRef(() => MatBooleanField),
4765
4782
  multi: true
4766
4783
  };
4767
- const noop$6 = () => {
4784
+ const noop$1 = () => {
4768
4785
  };
4769
- const ɵ0$6 = noop$6;
4786
+ const ɵ0$4 = noop$1;
4770
4787
  class MatBooleanField {
4771
4788
  constructor(translate, formBuilder, cd, formGroupDir) {
4772
4789
  this.translate = translate;
4773
4790
  this.formBuilder = formBuilder;
4774
4791
  this.cd = cd;
4775
4792
  this.formGroupDir = formGroupDir;
4776
- this._onChangeCallback = noop$6;
4777
- this._onTouchedCallback = noop$6;
4793
+ this._onChangeCallback = noop$1;
4794
+ this._onTouchedCallback = noop$1;
4778
4795
  this._writing = false;
4779
4796
  this.showRadio = false;
4780
4797
  this.disabled = false;
@@ -4947,10 +4964,10 @@ MatBooleanField.decorators = [
4947
4964
  selector: 'mat-boolean-field',
4948
4965
  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",
4949
4966
  providers: [
4950
- DEFAULT_VALUE_ACCESSOR$5
4967
+ DEFAULT_VALUE_ACCESSOR$1
4951
4968
  ],
4952
4969
  changeDetection: ChangeDetectionStrategy.OnPush,
4953
- 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}"]
4970
+ 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}"]
4954
4971
  },] }
4955
4972
  ];
4956
4973
  MatBooleanField.ctorParameters = () => [
@@ -5195,7 +5212,7 @@ class MatNumpadDomService {
5195
5212
  this.appRef.detachView(this.componentRef.hostView);
5196
5213
  }
5197
5214
  }
5198
- MatNumpadDomService.ɵprov = ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(ɵɵinject(ComponentFactoryResolver), ɵɵinject(ApplicationRef), ɵɵinject(INJECTOR), ɵɵinject(DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
5215
+ 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" });
5199
5216
  MatNumpadDomService.decorators = [
5200
5217
  { type: Injectable, args: [{
5201
5218
  providedIn: 'root'
@@ -5559,7 +5576,7 @@ SharedMatNumpadModule.decorators = [
5559
5576
  },] }
5560
5577
  ];
5561
5578
 
5562
- const DEFAULT_VALUE_ACCESSOR$6 = {
5579
+ const DEFAULT_VALUE_ACCESSOR = {
5563
5580
  provide: NG_VALUE_ACCESSOR,
5564
5581
  useExisting: forwardRef(() => MatSwipeField),
5565
5582
  multi: true
@@ -5822,7 +5839,7 @@ MatSwipeField.decorators = [
5822
5839
  { type: Component, args: [{
5823
5840
  selector: 'mat-swipe-field',
5824
5841
  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",
5825
- providers: [DEFAULT_VALUE_ACCESSOR$6],
5842
+ providers: [DEFAULT_VALUE_ACCESSOR],
5826
5843
  changeDetection: ChangeDetectionStrategy.OnPush,
5827
5844
  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}"]
5828
5845
  },] }
@@ -6317,7 +6334,7 @@ class ProgressBarService {
6317
6334
  }
6318
6335
  }
6319
6336
  }
6320
- ProgressBarService.ɵprov = ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
6337
+ ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
6321
6338
  ProgressBarService.decorators = [
6322
6339
  { type: Injectable, args: [{ providedIn: 'root' },] }
6323
6340
  ];
@@ -6361,7 +6378,7 @@ class AppGestureConfig extends HammerGestureConfig {
6361
6378
  return mc;
6362
6379
  }
6363
6380
  }
6364
- AppGestureConfig.ɵprov = ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
6381
+ AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
6365
6382
  AppGestureConfig.decorators = [
6366
6383
  { type: Injectable, args: [{ providedIn: 'root' },] }
6367
6384
  ];
@@ -6584,7 +6601,7 @@ class MatPaginatorI18n extends MatPaginatorIntl {
6584
6601
  this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');
6585
6602
  }
6586
6603
  }
6587
- MatPaginatorI18n.ɵprov = ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(ɵɵinject(TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
6604
+ MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
6588
6605
  MatPaginatorI18n.decorators = [
6589
6606
  { type: Injectable, args: [{ providedIn: 'root' },] }
6590
6607
  ];
@@ -6674,17 +6691,17 @@ function getColorContrast(color, bw) {
6674
6691
  return rgbArrayToHex(rgb.map(v => 255 - v));
6675
6692
  }
6676
6693
 
6677
- const noop$7 = () => {
6694
+ const noop = () => {
6678
6695
  };
6679
- const ɵ0$7 = noop$7;
6696
+ const ɵ0$3 = noop;
6680
6697
  class AppFormField {
6681
6698
  constructor(translate, cd, injector, formGroupDir) {
6682
6699
  this.translate = translate;
6683
6700
  this.cd = cd;
6684
6701
  this.injector = injector;
6685
6702
  this.formGroupDir = formGroupDir;
6686
- this._onChangeCallback = noop$7;
6687
- this._onTouchedCallback = noop$7;
6703
+ this._onChangeCallback = noop;
6704
+ this._onTouchedCallback = noop;
6688
6705
  this.readonly = false;
6689
6706
  this.compact = false;
6690
6707
  this.floatLabel = 'auto';
@@ -7055,14 +7072,14 @@ class AudioProvider {
7055
7072
  });
7056
7073
  }
7057
7074
  }
7058
- 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" });
7075
+ 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" });
7059
7076
  AudioProvider.decorators = [
7060
7077
  { type: Injectable, args: [{ providedIn: 'root' },] }
7061
7078
  ];
7062
7079
  AudioProvider.ctorParameters = () => [
7063
7080
  { type: Platform },
7064
- { type: NativeAudio$1, decorators: [{ type: Optional }] },
7065
- { type: Vibration$1, decorators: [{ type: Optional }] },
7081
+ { type: NativeAudio, decorators: [{ type: Optional }] },
7082
+ { type: Vibration, decorators: [{ type: Optional }] },
7066
7083
  { type: AudioManagement, decorators: [{ type: Optional }] }
7067
7084
  ];
7068
7085
 
@@ -7144,7 +7161,7 @@ class Hotkeys {
7144
7161
  });
7145
7162
  }
7146
7163
  }
7147
- Hotkeys.ɵprov = ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(ɵɵinject(EventManager), ɵɵinject(MatDialog), ɵɵinject(DOCUMENT), ɵɵinject(ModalController)); }, token: Hotkeys, providedIn: "root" });
7164
+ 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" });
7148
7165
  Hotkeys.decorators = [
7149
7166
  { type: Injectable, args: [{
7150
7167
  providedIn: 'root'
@@ -7318,7 +7335,7 @@ class Base64ImageReader {
7318
7335
  }
7319
7336
  }
7320
7337
 
7321
- const uuidv4 = uuidv4Imported;
7338
+ const uuidv4$1 = uuidv4Imported;
7322
7339
  class FileService {
7323
7340
  constructor(platform,
7324
7341
  //private transfer: FileTransfer,
@@ -7355,7 +7372,7 @@ class FileService {
7355
7372
  const lastSlashIndex = source.lastIndexOf('/');
7356
7373
  if (lastSlashIndex === -1)
7357
7374
  throw new Error('Invalid URL: ' + source);
7358
- const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();
7375
+ const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4$1();
7359
7376
  // Download into the file system
7360
7377
  if (responseType === 'file' && this.canUseFileSystem) {
7361
7378
  console.warn(`WARN: [file] Fetching image {${source}} in local file...`);
@@ -7411,7 +7428,7 @@ class FileService {
7411
7428
  this._started = true;
7412
7429
  }
7413
7430
  }
7414
- FileService.ɵprov = ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(ɵɵinject(Platform), ɵɵinject(HttpClient), ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
7431
+ 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" });
7415
7432
  FileService.decorators = [
7416
7433
  { type: Injectable, args: [{
7417
7434
  providedIn: 'root',
@@ -7573,7 +7590,7 @@ class Base58 {
7573
7590
  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
7574
7591
 
7575
7592
  const scrypt = require('scrypt-async');
7576
- const sha256 = require('hash.js/lib/hash/sha/256');
7593
+ const sha256$1 = require('hash.js/lib/hash/sha/256');
7577
7594
  const sha512 = require('hash.js/lib/hash/sha/512');
7578
7595
  const nacl = {
7579
7596
  sign,
@@ -7677,7 +7694,7 @@ class CryptoService {
7677
7694
  * Hash (using SHA256) a message
7678
7695
  */
7679
7696
  sha256(message) {
7680
- return sha256().update(message).digest('hex');
7697
+ return sha256$1().update(message).digest('hex');
7681
7698
  }
7682
7699
  /**
7683
7700
  * Hash (using SHA512) a message
@@ -7690,7 +7707,7 @@ class CryptoService {
7690
7707
  return nacl.util.encodeBase64(m);
7691
7708
  }
7692
7709
  }
7693
- CryptoService.ɵprov = ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
7710
+ CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
7694
7711
  CryptoService.decorators = [
7695
7712
  { type: Injectable, args: [{ providedIn: 'root' },] }
7696
7713
  ];
@@ -8910,7 +8927,7 @@ class LocalSettingsService {
8910
8927
  return page;
8911
8928
  }
8912
8929
  }
8913
- 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" });
8930
+ 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" });
8914
8931
  LocalSettingsService.decorators = [
8915
8932
  { type: Injectable, args: [{
8916
8933
  providedIn: 'root',
@@ -9606,7 +9623,7 @@ class NetworkService {
9606
9623
  });
9607
9624
  }
9608
9625
  }
9609
- 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" });
9626
+ 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" });
9610
9627
  NetworkService.decorators = [
9611
9628
  { type: Injectable, args: [{ providedIn: 'root' },] }
9612
9629
  ];
@@ -9617,16 +9634,16 @@ NetworkService.ctorParameters = () => [
9617
9634
  { type: CryptoService },
9618
9635
  { type: Storage },
9619
9636
  { type: LocalSettingsService },
9620
- { type: CacheService$1 },
9637
+ { type: CacheService },
9621
9638
  { type: HttpClient },
9622
9639
  { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
9623
- { type: Network$1, decorators: [{ type: Optional }] },
9624
- { type: SplashScreen$1, decorators: [{ type: Optional }] },
9640
+ { type: Network, decorators: [{ type: Optional }] },
9641
+ { type: SplashScreen, decorators: [{ type: Optional }] },
9625
9642
  { type: TranslateService, decorators: [{ type: Optional }] },
9626
9643
  { type: ToastController, decorators: [{ type: Optional }] }
9627
9644
  ];
9628
9645
 
9629
- const ErrorCodes = {
9646
+ const ErrorCodes$2 = {
9630
9647
  UNKNOWN_ERROR: 0,
9631
9648
  LOAD_ACCOUNT_ERROR: 1,
9632
9649
  BAD_PASSWORD: 2,
@@ -9973,7 +9990,7 @@ class EntityStore {
9973
9990
  }
9974
9991
  catch (err) {
9975
9992
  console.error(err);
9976
- throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
9993
+ throw { code: ErrorCodes$2.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
9977
9994
  }
9978
9995
  }
9979
9996
  // Emit update event
@@ -10550,7 +10567,7 @@ class EntitiesStorage {
10550
10567
  }
10551
10568
  EntitiesStorage.TRASH_PREFIX = 'Trash#';
10552
10569
  EntitiesStorage.REMOTE_PREFIX = 'Remote#';
10553
- 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" });
10570
+ 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" });
10554
10571
  EntitiesStorage.decorators = [
10555
10572
  { type: Injectable, args: [{ providedIn: 'root' },] }
10556
10573
  ];
@@ -10650,10 +10667,10 @@ function referentialToString(obj, properties) {
10650
10667
  function referentialsToString(values, properties, separator) {
10651
10668
  return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
10652
10669
  }
10653
- const ɵ0$8 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
10670
+ const ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
10654
10671
  const StatusList = Object.freeze([
10655
10672
  {
10656
- id: ɵ0$8,
10673
+ id: ɵ0$2,
10657
10674
  icon: 'checkmark',
10658
10675
  label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
10659
10676
  },
@@ -10928,7 +10945,7 @@ function accountToString(data) {
10928
10945
  (data.lastName || '')) || '';
10929
10946
  }
10930
10947
 
10931
- const uuidv4$1 = uuidv4Imported;
10948
+ const uuidv4 = uuidv4Imported;
10932
10949
  const _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
10933
10950
  const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
10934
10951
  /**
@@ -10972,7 +10989,7 @@ function createTrackerLink(opts) {
10972
10989
  // Skip if not tracked
10973
10990
  if (!context || !context.tracked)
10974
10991
  return forward(operation);
10975
- const id = context.serializationKey || uuidv4$1();
10992
+ const id = context.serializationKey || uuidv4();
10976
10993
  console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);
10977
10994
  // Clean context, before calling JSON.stringify (remove unused attributes)
10978
10995
  const cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
@@ -11680,7 +11697,7 @@ class GraphqlService {
11680
11697
  (err.networkError && ((err.networkError.error && this.toAppError(err.networkError.error))
11681
11698
  || this.toAppError(err.networkError)
11682
11699
  || (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))
11683
- || this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)))
11700
+ || this.createAppErrorByCode(ErrorCodes$2.UNKNOWN_NETWORK_ERROR)))
11684
11701
  // If graphQL: try to convert the first error found
11685
11702
  || (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))
11686
11703
  || this.toAppError(err)
@@ -11688,7 +11705,7 @@ class GraphqlService {
11688
11705
  || (err.graphQLErrors && err.graphQLErrors[0])
11689
11706
  || err;
11690
11707
  console.error('[graphql] ' + (error && error.message || error), error.stack || '');
11691
- if (error && error.code === ErrorCodes.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
11708
+ if (error && error.code === ErrorCodes$2.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
11692
11709
  console.error('[graphql] original error: ' + err.networkError.message);
11693
11710
  this.onNetworkError.next(error);
11694
11711
  }
@@ -11724,7 +11741,7 @@ class GraphqlService {
11724
11741
  return 'ERROR.UNAUTHORIZED';
11725
11742
  case ServerErrorCodes.FORBIDDEN:
11726
11743
  return 'ERROR.FORBIDDEN';
11727
- case ErrorCodes.UNKNOWN_NETWORK_ERROR:
11744
+ case ErrorCodes$2.UNKNOWN_NETWORK_ERROR:
11728
11745
  return 'ERROR.UNKNOWN_NETWORK_ERROR';
11729
11746
  case ServerErrorCodes.BAD_UPDATE_DATE:
11730
11747
  return 'ERROR.BAD_UPDATE_DATE';
@@ -11761,7 +11778,7 @@ class GraphqlService {
11761
11778
  });
11762
11779
  }
11763
11780
  }
11764
- 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" });
11781
+ 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" });
11765
11782
  GraphqlService.decorators = [
11766
11783
  { type: Injectable, args: [{
11767
11784
  providedIn: 'root'
@@ -11778,7 +11795,7 @@ GraphqlService.ctorParameters = () => [
11778
11795
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
11779
11796
  ];
11780
11797
 
11781
- const sha256$1 = require('hash.js/lib/hash/sha/256');
11798
+ const sha256 = require('hash.js/lib/hash/sha/256');
11782
11799
  class BaseGraphqlServiceOptions {
11783
11800
  }
11784
11801
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
@@ -11928,8 +11945,8 @@ class BaseGraphqlService {
11928
11945
  }
11929
11946
  /* -- protected methods -- */
11930
11947
  computeMutableWatchQueryId(opts) {
11931
- const queryName = opts.queryName || sha256$1().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
11932
- const variablesKey = opts.variables && sha256$1().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
11948
+ const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
11949
+ const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
11933
11950
  return [queryName, opts.arrayFieldName, variablesKey].join('|');
11934
11951
  }
11935
11952
  findMutableWatchQueries(opts) {
@@ -11992,7 +12009,7 @@ const DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';
11992
12009
  /* ------------------------------------
11993
12010
  * GraphQL queries
11994
12011
  * ------------------------------------*/
11995
- const Fragments = {
12012
+ const Fragments$1 = {
11996
12013
  account: gql `
11997
12014
  fragment AccountFragment on AccountVO {
11998
12015
  id
@@ -12025,13 +12042,13 @@ const Fragments = {
12025
12042
  `
12026
12043
  };
12027
12044
  // Load account query
12028
- const LoadQuery = gql `
12045
+ const LoadQuery$1 = gql `
12029
12046
  query Account {
12030
12047
  data: account {
12031
12048
  ...AccountFragment
12032
12049
  }
12033
12050
  }
12034
- ${Fragments.account}
12051
+ ${Fragments$1.account}
12035
12052
  `;
12036
12053
  // Check email query
12037
12054
  const IsEmailExistsQuery = gql `
@@ -12040,13 +12057,13 @@ const IsEmailExistsQuery = gql `
12040
12057
  }
12041
12058
  `;
12042
12059
  // Save (create or update) account mutation
12043
- const SaveMutation = gql `
12060
+ const SaveMutation$1 = gql `
12044
12061
  mutation SaveAccount($data:AccountVOInput){
12045
12062
  data: saveAccount(account: $data){
12046
12063
  ...AccountFragment
12047
12064
  }
12048
12065
  }
12049
- ${Fragments.account}
12066
+ ${Fragments$1.account}
12050
12067
  `;
12051
12068
  // Create account mutation
12052
12069
  const CreateMutation = gql `
@@ -12055,7 +12072,7 @@ const CreateMutation = gql `
12055
12072
  ...AccountFragment
12056
12073
  }
12057
12074
  }
12058
- ${Fragments.account}
12075
+ ${Fragments$1.account}
12059
12076
  `;
12060
12077
  // Sent confirmation email
12061
12078
  const SendConfirmEmailMutation = gql `
@@ -12403,7 +12420,7 @@ class AccountService extends BaseGraphqlService {
12403
12420
  catch (error) {
12404
12421
  console.error(error);
12405
12422
  this.resetData();
12406
- throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
12423
+ throw { code: ErrorCodes$2.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
12407
12424
  }
12408
12425
  // Store pubkey+keypair
12409
12426
  this.data.pubkey = Base58.encode(keypair.publicKey);
@@ -12437,7 +12454,7 @@ class AccountService extends BaseGraphqlService {
12437
12454
  }
12438
12455
  catch (err) {
12439
12456
  // If account not found, check if email is valid
12440
- if (err && +(err.code) === ErrorCodes.LOAD_ACCOUNT_ERROR) {
12457
+ if (err && +(err.code) === ErrorCodes$2.LOAD_ACCOUNT_ERROR) {
12441
12458
  // Check email exists
12442
12459
  if (data.username.indexOf('@') !== -1) {
12443
12460
  let isEmailExists;
@@ -12449,11 +12466,11 @@ class AccountService extends BaseGraphqlService {
12449
12466
  }
12450
12467
  // Email not exists (no account)
12451
12468
  if (!isEmailExists) {
12452
- throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
12469
+ throw { code: ErrorCodes$2.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
12453
12470
  }
12454
12471
  }
12455
12472
  // Email exists, so error = 'bad password'
12456
- throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
12473
+ throw { code: ErrorCodes$2.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
12457
12474
  }
12458
12475
  throw err; // resend the first error
12459
12476
  }
@@ -12578,8 +12595,8 @@ class AccountService extends BaseGraphqlService {
12578
12595
  // Load remotely
12579
12596
  else {
12580
12597
  const { data } = yield this.graphql.query({
12581
- query: LoadQuery,
12582
- error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
12598
+ query: LoadQuery$1,
12599
+ error: { code: ErrorCodes$2.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
12583
12600
  fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
12584
12601
  });
12585
12602
  json = data;
@@ -12606,7 +12623,7 @@ class AccountService extends BaseGraphqlService {
12606
12623
  return __awaiter(this, void 0, void 0, function* () {
12607
12624
  const isEmailExists = yield this.isEmailExists(email);
12608
12625
  if (isEmailExists) {
12609
- throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
12626
+ throw { code: ErrorCodes$2.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
12610
12627
  }
12611
12628
  });
12612
12629
  }
@@ -12642,7 +12659,7 @@ class AccountService extends BaseGraphqlService {
12642
12659
  locale
12643
12660
  },
12644
12661
  error: {
12645
- code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,
12662
+ code: ErrorCodes$2.SENT_CONFIRMATION_EMAIL_FAILED,
12646
12663
  message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'
12647
12664
  }
12648
12665
  });
@@ -12658,7 +12675,7 @@ class AccountService extends BaseGraphqlService {
12658
12675
  code
12659
12676
  },
12660
12677
  error: {
12661
- code: ErrorCodes.CONFIRM_EMAIL_FAILED,
12678
+ code: ErrorCodes$2.CONFIRM_EMAIL_FAILED,
12662
12679
  message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'
12663
12680
  }
12664
12681
  });
@@ -12676,7 +12693,7 @@ class AccountService extends BaseGraphqlService {
12676
12693
  interval: 10
12677
12694
  },
12678
12695
  error: {
12679
- code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,
12696
+ code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
12680
12697
  message: 'ERROR.ACCOUNT.SUBSCRIBE_ACCOUNT_ERROR'
12681
12698
  }
12682
12699
  }).subscribe({
@@ -12778,7 +12795,7 @@ class AccountService extends BaseGraphqlService {
12778
12795
  throw error;
12779
12796
  console.error(error);
12780
12797
  throw {
12781
- code: ErrorCodes.LOAD_ACCOUNT_ERROR,
12798
+ code: ErrorCodes$2.LOAD_ACCOUNT_ERROR,
12782
12799
  message: 'ERROR.LOAD_ACCOUNT_ERROR'
12783
12800
  };
12784
12801
  }
@@ -12923,7 +12940,7 @@ class AccountService extends BaseGraphqlService {
12923
12940
  if (!isNew) {
12924
12941
  const existingAccount = yield this.load({ fetchPolicy: 'network-only' });
12925
12942
  if (!existingAccount || !existingAccount.updateDate) {
12926
- throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
12943
+ throw { code: ErrorCodes$2.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
12927
12944
  }
12928
12945
  this.copyIdAndUpdateDate(existingAccount, account);
12929
12946
  }
@@ -12932,10 +12949,10 @@ class AccountService extends BaseGraphqlService {
12932
12949
  delete json.profiles;
12933
12950
  // Execute mutation
12934
12951
  const { data } = yield this.graphql.mutate({
12935
- mutation: isNew ? CreateMutation : SaveMutation,
12952
+ mutation: isNew ? CreateMutation : SaveMutation$1,
12936
12953
  variables: { data: json },
12937
12954
  error: {
12938
- code: ErrorCodes.SAVE_ACCOUNT_ERROR,
12955
+ code: ErrorCodes$2.SAVE_ACCOUNT_ERROR,
12939
12956
  message: 'ERROR.SAVE_ACCOUNT_ERROR'
12940
12957
  }
12941
12958
  });
@@ -12955,7 +12972,7 @@ class AccountService extends BaseGraphqlService {
12955
12972
  if (counter > 4) {
12956
12973
  if (this._debug)
12957
12974
  console.debug(`[account] Failed to authentication on pod (after ${counter} attempts)`);
12958
- throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
12975
+ throw { code: ErrorCodes$2.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
12959
12976
  }
12960
12977
  // Check if valid
12961
12978
  if (token) {
@@ -12965,7 +12982,7 @@ class AccountService extends BaseGraphqlService {
12965
12982
  token
12966
12983
  },
12967
12984
  error: {
12968
- code: ErrorCodes.UNAUTHORIZED,
12985
+ code: ErrorCodes$2.UNAUTHORIZED,
12969
12986
  message: 'ERROR.UNAUTHORIZED'
12970
12987
  },
12971
12988
  fetchPolicy: 'no-cache'
@@ -12981,7 +12998,7 @@ class AccountService extends BaseGraphqlService {
12981
12998
  }
12982
12999
  // Generate a new token
12983
13000
  const challengeError = {
12984
- code: ErrorCodes.AUTH_CHALLENGE_ERROR,
13001
+ code: ErrorCodes$2.AUTH_CHALLENGE_ERROR,
12985
13002
  message: 'ERROR.AUTH_CHALLENGE_ERROR'
12986
13003
  };
12987
13004
  const data = yield this.graphql.query({
@@ -13015,7 +13032,7 @@ class AccountService extends BaseGraphqlService {
13015
13032
  target.settings.updateDate = source.settings && source.settings.updateDate || target.settings.updateDate;
13016
13033
  }
13017
13034
  }
13018
- 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" });
13035
+ 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" });
13019
13036
  AccountService.decorators = [
13020
13037
  { type: Injectable, args: [{ providedIn: 'root' },] }
13021
13038
  ];
@@ -13275,7 +13292,7 @@ const CONFIGURATION_STORAGE_KEY = 'configuration';
13275
13292
  /* ------------------------------------
13276
13293
  * GraphQL queries
13277
13294
  * ------------------------------------*/
13278
- const Fragments$1 = {
13295
+ const Fragments = {
13279
13296
  config: gql `
13280
13297
  fragment ConfigFragment on ConfigurationVO {
13281
13298
  id
@@ -13302,22 +13319,22 @@ const Fragments$1 = {
13302
13319
  }
13303
13320
  `
13304
13321
  };
13305
- const LoadQuery$1 = gql `
13322
+ const LoadQuery = gql `
13306
13323
  query Configuration{
13307
13324
  data: configuration{
13308
13325
  ...ConfigFragment
13309
13326
  }
13310
13327
  }
13311
- ${Fragments$1.config}
13328
+ ${Fragments.config}
13312
13329
  `;
13313
13330
  // Save (create or update) account mutation
13314
- const SaveMutation$1 = gql `
13331
+ const SaveMutation = gql `
13315
13332
  mutation SaveConfiguration($data: ConfigurationVOInput){
13316
13333
  data: saveConfiguration(config: $data){
13317
13334
  ...ConfigFragment
13318
13335
  }
13319
13336
  }
13320
- ${Fragments$1.config}
13337
+ ${Fragments.config}
13321
13338
  `;
13322
13339
  const ClearCache = gql `
13323
13340
  query ClearCache($name: String) {
@@ -13405,12 +13422,12 @@ class ConfigService extends BaseGraphqlService {
13405
13422
  return __awaiter(this, void 0, void 0, function* () {
13406
13423
  const now = Date.now();
13407
13424
  console.debug('[config] Loading Pod configuration...');
13408
- const query = opts && opts.query || LoadQuery$1;
13425
+ const query = opts && opts.query || LoadQuery;
13409
13426
  const variables = opts && opts.variables || undefined;
13410
13427
  const res = yield this.graphql.query({
13411
13428
  query,
13412
13429
  variables,
13413
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13430
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13414
13431
  fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/
13415
13432
  });
13416
13433
  const data = res && res.data ? Configuration.fromObject(res.data) : undefined;
@@ -13435,12 +13452,12 @@ class ConfigService extends BaseGraphqlService {
13435
13452
  const json = config.asObject();
13436
13453
  // Execute mutation
13437
13454
  const res = yield this.graphql.mutate({
13438
- mutation: SaveMutation$1,
13455
+ mutation: SaveMutation,
13439
13456
  variables: {
13440
13457
  data: json
13441
13458
  },
13442
13459
  error: {
13443
- code: ErrorCodes.SAVE_CONFIG_ERROR,
13460
+ code: ErrorCodes$2.SAVE_CONFIG_ERROR,
13444
13461
  message: 'ERROR.SAVE_CONFIG_ERROR'
13445
13462
  }
13446
13463
  });
@@ -13466,7 +13483,7 @@ class ConfigService extends BaseGraphqlService {
13466
13483
  const res = yield this.graphql.query({
13467
13484
  query: CacheStatistics,
13468
13485
  variables: null,
13469
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13486
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13470
13487
  fetchPolicy: 'network-only'
13471
13488
  });
13472
13489
  const data = res && res.cacheStatistics || undefined;
@@ -13482,7 +13499,7 @@ class ConfigService extends BaseGraphqlService {
13482
13499
  const res = yield this.graphql.query({
13483
13500
  query: ClearCache,
13484
13501
  variables,
13485
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13502
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
13486
13503
  fetchPolicy: 'network-only'
13487
13504
  });
13488
13505
  const data = res && res.clearCache || undefined;
@@ -13641,7 +13658,7 @@ class ConfigService extends BaseGraphqlService {
13641
13658
  });
13642
13659
  }
13643
13660
  }
13644
- 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" });
13661
+ 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" });
13645
13662
  ConfigService.decorators = [
13646
13663
  { type: Injectable, args: [{
13647
13664
  providedIn: 'root',
@@ -13660,9 +13677,9 @@ ConfigService.ctorParameters = () => [
13660
13677
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_CONFIG_OPTIONS,] }] }
13661
13678
  ];
13662
13679
 
13663
- const moment$4 = momentImported;
13680
+ const moment$2 = momentImported;
13664
13681
  class PlatformService {
13665
- constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser) {
13682
+ constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser, downloader) {
13666
13683
  this.platform = platform;
13667
13684
  this.cdkPlatform = cdkPlatform;
13668
13685
  this.toastController = toastController;
@@ -13681,6 +13698,7 @@ class PlatformService {
13681
13698
  this.keyboard = keyboard;
13682
13699
  this.splashScreen = splashScreen;
13683
13700
  this.browser = browser;
13701
+ this.downloader = downloader;
13684
13702
  this._started = false;
13685
13703
  this._debug = !environment.production;
13686
13704
  if (this._debug)
@@ -13703,6 +13721,9 @@ class PlatformService {
13703
13721
  isWebOrDesktop() {
13704
13722
  return !this.platform.is('mobile') || this.platform.is('mobileweb');
13705
13723
  }
13724
+ isAndroidCordova() {
13725
+ return this._android && this._cordova;
13726
+ }
13706
13727
  width() {
13707
13728
  return this.platform.width();
13708
13729
  }
@@ -13721,6 +13742,8 @@ class PlatformService {
13721
13742
  this._startPromise = this.platform.ready()
13722
13743
  .then(() => {
13723
13744
  this._mobile = this.platform.is('mobile');
13745
+ this._cordova = this.platform.is('cordova');
13746
+ this._android = this.platform.is('android');
13724
13747
  this.configureCordovaPlugins(this._mobile);
13725
13748
  this.touchUi = this._mobile || this.platform.is('tablet') || this.platform.is('phablet');
13726
13749
  // Force mobile in settings
@@ -13781,6 +13804,7 @@ class PlatformService {
13781
13804
  filter(() => this._started), first()).toPromise();
13782
13805
  }
13783
13806
  open(url, target, features, replace) {
13807
+ console.info(`[platform] Opening link: ${url}`);
13784
13808
  if (this.browser && this._mobile) {
13785
13809
  this.browser.create(url, target, features).show();
13786
13810
  }
@@ -13788,10 +13812,20 @@ class PlatformService {
13788
13812
  window.open(url, target, features, replace);
13789
13813
  }
13790
13814
  }
13791
- /*
13792
- chooseFile(): Promise<> {
13793
-
13794
- }*/
13815
+ download(request) {
13816
+ if (!request || !request.uri)
13817
+ throw new Error('Missing argument \'request\' or \'request.uri\'');
13818
+ if (this._android && this._cordova) {
13819
+ 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) });
13820
+ this.downloader.download(request)
13821
+ .then((location) => console.info('[platform] File successfully downloaded at:' + location))
13822
+ .catch((error) => console.error(error));
13823
+ }
13824
+ // Web mode: open URI using the browser
13825
+ else {
13826
+ this.open(request.uri, '_system', 'location=yes');
13827
+ }
13828
+ }
13795
13829
  /* -- protected methods -- */
13796
13830
  configureCordovaPlugins(mobile) {
13797
13831
  console.info('[platform] Configuring Cordova plugins...');
@@ -13825,16 +13859,16 @@ class PlatformService {
13825
13859
  }
13826
13860
  // config moment lib
13827
13861
  try {
13828
- moment$4.locale(event.lang);
13862
+ moment$2.locale(event.lang);
13829
13863
  console.debug('[platform] Use locale {' + event.lang + '}');
13830
13864
  }
13831
13865
  // If error, fallback to en
13832
13866
  catch (err) {
13833
- moment$4.locale('en');
13867
+ moment$2.locale('en');
13834
13868
  console.warn('[platform] Unknown local for moment lib. Using default [en]');
13835
13869
  }
13836
13870
  // Config date adapter
13837
- this.dateAdapter.setLocale(moment$4.locale());
13871
+ this.dateAdapter.setLocale(moment$2.locale());
13838
13872
  }
13839
13873
  });
13840
13874
  this.settings.onChange.subscribe(data => {
@@ -13971,7 +14005,7 @@ class PlatformService {
13971
14005
  });
13972
14006
  }
13973
14007
  }
13974
- 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" });
14008
+ 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" });
13975
14009
  PlatformService.decorators = [
13976
14010
  { type: Injectable, args: [{ providedIn: 'root' },] }
13977
14011
  ];
@@ -13986,14 +14020,15 @@ PlatformService.ctorParameters = () => [
13986
14020
  { type: NetworkService },
13987
14021
  { type: AccountService },
13988
14022
  { type: ConfigService },
13989
- { type: CacheService$1 },
14023
+ { type: CacheService },
13990
14024
  { type: Storage },
13991
14025
  { type: AudioProvider },
13992
14026
  { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
13993
- { type: StatusBar$1, decorators: [{ type: Optional }] },
14027
+ { type: StatusBar, decorators: [{ type: Optional }] },
13994
14028
  { type: Keyboard, decorators: [{ type: Optional }] },
13995
- { type: SplashScreen$1, decorators: [{ type: Optional }] },
13996
- { type: InAppBrowser$1, decorators: [{ type: Optional }] }
14029
+ { type: SplashScreen, decorators: [{ type: Optional }] },
14030
+ { type: InAppBrowser, decorators: [{ type: Optional }] },
14031
+ { type: Downloader, decorators: [{ type: Optional }] }
13997
14032
  ];
13998
14033
 
13999
14034
  class AppHelpModal {
@@ -14057,7 +14092,7 @@ class MatStepperI18n extends MatStepperIntl {
14057
14092
  this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');
14058
14093
  }
14059
14094
  }
14060
- MatStepperI18n.ɵprov = ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(ɵɵinject(TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
14095
+ MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
14061
14096
  MatStepperI18n.decorators = [
14062
14097
  { type: Injectable, args: [{ providedIn: 'root' },] }
14063
14098
  ];
@@ -15049,7 +15084,7 @@ function state2side(state) {
15049
15084
  return 1;
15050
15085
  }
15051
15086
  }
15052
- const ɵ0$9 = (defaultStateSize) => [
15087
+ const ɵ0$1 = (defaultStateSize) => [
15053
15088
  Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
15054
15089
  Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
15055
15090
  Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
@@ -15057,7 +15092,7 @@ const ɵ0$9 = (defaultStateSize) => [
15057
15092
  const SCALE_OPTIONS_DEFAULT = {
15058
15093
  startColor: rgbArrayMap.red,
15059
15094
  startStates: [0, 2, 3],
15060
- startStepsFn: ɵ0$9
15095
+ startStepsFn: ɵ0$1
15061
15096
  };
15062
15097
  /**
15063
15098
  * Internal function, that create a colors scale, using iteration
@@ -15149,21 +15184,21 @@ function linearColorGradient(count, options) {
15149
15184
  return result;
15150
15185
  }
15151
15186
 
15152
- class EntityTestClass {
15187
+ class EntityTestClass$1 {
15153
15188
  }
15154
- const FAKE_ENTITIES = [
15189
+ const FAKE_ENTITIES$1 = [
15155
15190
  { id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
15156
15191
  { id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
15157
15192
  { id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
15158
15193
  ];
15159
- function deepCopy(values, size) {
15194
+ function deepCopy$1(values, size) {
15160
15195
  if (isNil(size)) {
15161
- return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
15196
+ return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
15162
15197
  }
15163
15198
  let result = [];
15164
15199
  let i = 1;
15165
15200
  while (result.length < size) {
15166
- result = result.concat((values || FAKE_ENTITIES).map(entity => {
15201
+ result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
15167
15202
  const name = entity.name + ' #' + i;
15168
15203
  return Object.assign(Object.assign({}, entity), { id: i++, name });
15169
15204
  }));
@@ -15173,7 +15208,7 @@ function deepCopy(values, size) {
15173
15208
  class AutocompleteTestPage {
15174
15209
  constructor(formBuilder) {
15175
15210
  this.formBuilder = formBuilder;
15176
- this._items = deepCopy(FAKE_ENTITIES, 100);
15211
+ this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
15177
15212
  this.$items = new BehaviorSubject(undefined);
15178
15213
  this.autocompleteFields = new MatAutocompleteConfigHolder();
15179
15214
  this.memoryHide = false;
@@ -15217,7 +15252,7 @@ class AutocompleteTestPage {
15217
15252
  });
15218
15253
  // From items
15219
15254
  this.autocompleteFields.add('entity-items-large', {
15220
- items: FAKE_ENTITIES.slice(),
15255
+ items: FAKE_ENTITIES$1.slice(),
15221
15256
  attributes: ['label', 'name', 'description', 'comments'],
15222
15257
  displayWith: this.entityToString
15223
15258
  });
@@ -15227,12 +15262,12 @@ class AutocompleteTestPage {
15227
15262
  loadData() {
15228
15263
  return __awaiter(this, void 0, void 0, function* () {
15229
15264
  const data = {
15230
- entity: deepCopy(FAKE_ENTITIES)[0],
15265
+ entity: deepCopy$1(FAKE_ENTITIES$1)[0],
15231
15266
  // This item is NOT in the items list => i should be displayed anyway
15232
15267
  missingEntity: {
15233
15268
  id: -1, label: '??', name: 'Missing item'
15234
15269
  },
15235
- disableEntity: deepCopy(FAKE_ENTITIES)[2]
15270
+ disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2]
15236
15271
  };
15237
15272
  this.form.setValue(data);
15238
15273
  // Load observables
@@ -15405,13 +15440,13 @@ MaterialTestingPage.ctorParameters = () => [
15405
15440
  { type: Array, decorators: [{ type: Optional }, { type: Inject, args: [APP_TESTING_PAGES,] }] }
15406
15441
  ];
15407
15442
 
15408
- const moment$5 = momentImported;
15443
+ const moment$1 = momentImported;
15409
15444
  class SwipeTestPage {
15410
15445
  constructor(formBuilder, dateFormatPipe) {
15411
15446
  this.formBuilder = formBuilder;
15412
15447
  this.dateFormatPipe = dateFormatPipe;
15413
15448
  this.$dates = new BehaviorSubject(undefined);
15414
- this._today = moment$5().startOf('day');
15449
+ this._today = moment$1().startOf('day');
15415
15450
  this.form = formBuilder.group({
15416
15451
  empty: [null, Validators.required],
15417
15452
  date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
@@ -15424,7 +15459,7 @@ class SwipeTestPage {
15424
15459
  ngOnInit() {
15425
15460
  const dates = [];
15426
15461
  for (let d = 0; d < 7; d++) {
15427
- dates[d] = moment$5(this._today).add(d - 3, 'day');
15462
+ dates[d] = moment$1(this._today).add(d - 3, 'day');
15428
15463
  }
15429
15464
  this.$dates.next(dates);
15430
15465
  this.loadData();
@@ -16041,7 +16076,7 @@ class FormArrayHelper {
16041
16076
  }
16042
16077
  }
16043
16078
 
16044
- const moment$6 = momentImported;
16079
+ const moment = momentImported;
16045
16080
  class DateTimeTestPage {
16046
16081
  constructor(platform, formBuilder, cd) {
16047
16082
  this.platform = platform;
@@ -16072,7 +16107,7 @@ class DateTimeTestPage {
16072
16107
  // Load the form with data
16073
16108
  loadData() {
16074
16109
  return __awaiter(this, void 0, void 0, function* () {
16075
- const now = moment$6();
16110
+ const now = moment();
16076
16111
  const data = {
16077
16112
  empty: toDateISOString(now.clone().add(2, 'hours')),
16078
16113
  enable: toDateISOString(now),
@@ -16132,20 +16167,20 @@ DateTimeTestPage.ctorParameters = () => [
16132
16167
  { type: ChangeDetectorRef }
16133
16168
  ];
16134
16169
 
16135
- class EntityTestClass$1 {
16170
+ class EntityTestClass {
16136
16171
  }
16137
- const FAKE_ENTITIES$1 = [
16172
+ const FAKE_ENTITIES = [
16138
16173
  { id: 1, label: 'AAA', name: 'Item A' },
16139
16174
  { id: 2, label: 'BBB', name: 'Item B' },
16140
16175
  { id: 3, label: 'CCC', name: 'Item C' }
16141
16176
  ];
16142
- function deepCopy$1(values) {
16143
- return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
16177
+ function deepCopy(values) {
16178
+ return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
16144
16179
  }
16145
16180
  class ChipsTestPage {
16146
16181
  constructor(formBuilder) {
16147
16182
  this.formBuilder = formBuilder;
16148
- this._items = deepCopy$1(FAKE_ENTITIES$1);
16183
+ this._items = deepCopy(FAKE_ENTITIES);
16149
16184
  this._$items = new BehaviorSubject(undefined);
16150
16185
  this.autocompleteFields = new MatAutocompleteConfigHolder();
16151
16186
  this.form = formBuilder.group({
@@ -16164,7 +16199,7 @@ class ChipsTestPage {
16164
16199
  });
16165
16200
  // From items
16166
16201
  this.autocompleteFields.add('entity-items', {
16167
- items: FAKE_ENTITIES$1.slice(),
16202
+ items: FAKE_ENTITIES.slice(),
16168
16203
  attributes: ['label', 'name'],
16169
16204
  displayWith: this.entityToString
16170
16205
  });
@@ -16185,15 +16220,15 @@ class ChipsTestPage {
16185
16220
  const data = {
16186
16221
  entity: [],
16187
16222
  // THis item is NOT in the items list => i should be displayed anyway
16188
- entityInitial: FAKE_ENTITIES$1.slice(1, 2),
16189
- disableEntity: FAKE_ENTITIES$1.slice(1, 2)
16223
+ entityInitial: FAKE_ENTITIES.slice(1, 2),
16224
+ disableEntity: FAKE_ENTITIES.slice(1, 2)
16190
16225
  };
16191
16226
  this.form.setValue(data);
16192
16227
  });
16193
16228
  }
16194
16229
  loadItems() {
16195
16230
  return __awaiter(this, void 0, void 0, function* () {
16196
- this._$items.next(deepCopy$1(FAKE_ENTITIES$1));
16231
+ this._$items.next(deepCopy(FAKE_ENTITIES));
16197
16232
  });
16198
16233
  }
16199
16234
  entityToString(item) {
@@ -16225,7 +16260,7 @@ ChipsTestPage.ctorParameters = () => [
16225
16260
  { type: FormBuilder }
16226
16261
  ];
16227
16262
 
16228
- const routes = [
16263
+ const routes$1 = [
16229
16264
  {
16230
16265
  path: '',
16231
16266
  pathMatch: 'full',
@@ -16272,7 +16307,7 @@ MaterialTestingModule.decorators = [
16272
16307
  ReactiveFormsModule,
16273
16308
  SharedMaterialModule,
16274
16309
  TranslateModule.forChild(),
16275
- RouterModule.forChild(routes)
16310
+ RouterModule.forChild(routes$1)
16276
16311
  ],
16277
16312
  declarations: [
16278
16313
  MaterialTestingPage,
@@ -17215,7 +17250,7 @@ class UserSettingsValidatorService extends AppValidatorService {
17215
17250
  });
17216
17251
  }
17217
17252
  }
17218
- UserSettingsValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(ɵɵinject(FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
17253
+ UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
17219
17254
  UserSettingsValidatorService.decorators = [
17220
17255
  { type: Injectable, args: [{ providedIn: 'root' },] }
17221
17256
  ];
@@ -17259,7 +17294,7 @@ class AccountValidatorService extends AppValidatorService {
17259
17294
  return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
17260
17295
  }
17261
17296
  }
17262
- AccountValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
17297
+ AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
17263
17298
  AccountValidatorService.decorators = [
17264
17299
  { type: Injectable, args: [{ providedIn: 'root' },] }
17265
17300
  ];
@@ -17793,7 +17828,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
17793
17828
  });
17794
17829
  }
17795
17830
  }
17796
- LocalSettingsValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(ɵɵinject(FormBuilder), ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
17831
+ LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
17797
17832
  LocalSettingsValidatorService.decorators = [
17798
17833
  { type: Injectable, args: [{ providedIn: 'root' },] }
17799
17834
  ];
@@ -18413,7 +18448,7 @@ class IsOnFieldModePipe {
18413
18448
  return value === 'FIELD';
18414
18449
  }
18415
18450
  }
18416
- IsOnFieldModePipe.ɵprov = ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
18451
+ IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
18417
18452
  IsOnFieldModePipe.decorators = [
18418
18453
  { type: Pipe, args: [{
18419
18454
  name: 'isOnField'
@@ -18425,7 +18460,7 @@ class IsNotOnFieldModePipe {
18425
18460
  return value !== 'FIELD';
18426
18461
  }
18427
18462
  }
18428
- IsNotOnFieldModePipe.ɵprov = ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
18463
+ IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
18429
18464
  IsNotOnFieldModePipe.decorators = [
18430
18465
  { type: Pipe, args: [{
18431
18466
  name: 'isNotOnField'
@@ -18440,7 +18475,7 @@ class PersonToStringPipe {
18440
18475
  return PersonUtils.personToString(value);
18441
18476
  }
18442
18477
  }
18443
- PersonToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
18478
+ PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
18444
18479
  PersonToStringPipe.decorators = [
18445
18480
  { type: Pipe, args: [{
18446
18481
  name: 'personToString'
@@ -18448,6 +18483,9 @@ PersonToStringPipe.decorators = [
18448
18483
  { type: Injectable, args: [{ providedIn: 'root' },] }
18449
18484
  ];
18450
18485
 
18486
+ const MimeTypes = Object.freeze({
18487
+ ANDROID_APK: 'application/vnd.android.package-archive'
18488
+ });
18451
18489
  class AppInstallUpgradeCard {
18452
18490
  constructor(modalCtrl, configService, platform, cd, network, environment) {
18453
18491
  this.modalCtrl = modalCtrl;
@@ -18464,6 +18502,7 @@ class AppInstallUpgradeCard {
18464
18502
  this.showOfflineWarning = true;
18465
18503
  this.showInstallButton = false;
18466
18504
  this.onUpdateOfflineModeClick = new EventEmitter();
18505
+ this.isAndroidCordova = platform.isAndroidCordova();
18467
18506
  }
18468
18507
  set showUpdateOfflineFeature(value) {
18469
18508
  if (value === this._showUpdateOfflineFeature)
@@ -18507,15 +18546,14 @@ class AppInstallUpgradeCard {
18507
18546
  ngOnDestroy() {
18508
18547
  this._subscription.unsubscribe();
18509
18548
  }
18510
- openDownloadLink(event, url) {
18511
- if (!url)
18549
+ downloadLink(event, link) {
18550
+ if (!link || !link.url)
18512
18551
  return; // Skip
18513
- if (event) {
18514
- event.preventDefault();
18515
- }
18516
- console.info(`[install] Opening App download link: ${url}`);
18517
- this.platform.open(url, '_system', 'location=yes');
18518
- return false;
18552
+ this.platform.download({
18553
+ uri: link.url,
18554
+ filename: link.downloadFilename,
18555
+ mimeType: link.mimeType
18556
+ });
18519
18557
  }
18520
18558
  tryOnline() {
18521
18559
  this.waitingNetwork = true;
@@ -18540,10 +18578,10 @@ class AppInstallUpgradeCard {
18540
18578
  return '';
18541
18579
  }
18542
18580
  }
18543
- getAppFileName() {
18544
- return;
18581
+ asLink(value) {
18582
+ return value;
18545
18583
  }
18546
- /* -- protected method -- */
18584
+ /* -- private method -- */
18547
18585
  getCompatibleInstallLinks(installLinks) {
18548
18586
  // Cordova already running: not need to install
18549
18587
  if (this.platform.is('cordova'))
@@ -18580,11 +18618,14 @@ class AppInstallUpgradeCard {
18580
18618
  if (url) {
18581
18619
  let downloadFilename;
18582
18620
  let version;
18621
+ let mimeType;
18583
18622
  // Get file name
18584
18623
  const filename = this.getFilename(url);
18585
18624
  version = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);
18586
18625
  // OK, this is a downloadable APK file (e.g. NOT a link to a playstore)
18587
18626
  if (filename === null || filename === void 0 ? void 0 : filename.endsWith('.apk')) {
18627
+ // Define mime type
18628
+ mimeType = MimeTypes.ANDROID_APK;
18588
18629
  // Get the file version (if any)
18589
18630
  const versionMatches = /-v([1-9][0-9]*\.[0-9]+\.(:?(:?alpha|beta|rc)?[0-9]*))/i.exec(filename);
18590
18631
  version = versionMatches && versionMatches[1] || version;
@@ -18601,7 +18642,7 @@ class AppInstallUpgradeCard {
18601
18642
  }
18602
18643
  }
18603
18644
  }
18604
- result.push({ name, url, platform: 'android', version, downloadFilename });
18645
+ result.push({ name, url, platform: 'android', version, downloadFilename, mimeType });
18605
18646
  }
18606
18647
  }
18607
18648
  // iOS - TODO
@@ -18629,7 +18670,7 @@ class AppInstallUpgradeCard {
18629
18670
  AppInstallUpgradeCard.decorators = [
18630
18671
  { type: Component, args: [{
18631
18672
  selector: 'app-install-upgrade-card',
18632
- 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",
18673
+ 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",
18633
18674
  changeDetection: ChangeDetectionStrategy.OnPush,
18634
18675
  animations: [slideUpDownAnimation],
18635
18676
  styles: ["ion-text small{font-size:85%}"]
@@ -18657,7 +18698,7 @@ class IsLoginAccountPipe {
18657
18698
  return value && value.pubkey && true;
18658
18699
  }
18659
18700
  }
18660
- IsLoginAccountPipe.ɵprov = ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
18701
+ IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
18661
18702
  IsLoginAccountPipe.decorators = [
18662
18703
  { type: Pipe, args: [{
18663
18704
  name: 'isLogin'
@@ -18669,7 +18710,7 @@ class AccountToStringPipe {
18669
18710
  return accountToString(value);
18670
18711
  }
18671
18712
  }
18672
- AccountToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
18713
+ AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
18673
18714
  AccountToStringPipe.decorators = [
18674
18715
  { type: Pipe, args: [{
18675
18716
  name: 'accountToString'
@@ -18684,7 +18725,7 @@ class DepartmentToStringPipe {
18684
18725
  return departmentToString(value);
18685
18726
  }
18686
18727
  }
18687
- DepartmentToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
18728
+ DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
18688
18729
  DepartmentToStringPipe.decorators = [
18689
18730
  { type: Pipe, args: [{
18690
18731
  name: 'departmentToString'
@@ -18710,7 +18751,7 @@ class MenuService {
18710
18751
  this._visibleSubject.next(value);
18711
18752
  }
18712
18753
  }
18713
- MenuService.ɵprov = ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
18754
+ MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
18714
18755
  MenuService.decorators = [
18715
18756
  { type: Injectable, args: [{
18716
18757
  providedIn: 'root'
@@ -19204,7 +19245,7 @@ class AuthGuardService {
19204
19245
  }));
19205
19246
  }
19206
19247
  }
19207
- AuthGuardService.ɵprov = ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(ɵɵinject(AccountService), ɵɵinject(ModalController), ɵɵinject(Router), ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
19248
+ 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" });
19208
19249
  AuthGuardService.decorators = [
19209
19250
  { type: Injectable, args: [{ providedIn: 'root' },] }
19210
19251
  ];
@@ -19252,7 +19293,7 @@ class BaseEntityService extends BaseGraphqlService {
19252
19293
  query,
19253
19294
  variables: { id },
19254
19295
  fetchPolicy: opts && opts.fetchPolicy || undefined,
19255
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
19296
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
19256
19297
  })
19257
19298
  .pipe(map(({ data }) => (!opts || opts.toEntity !== false)
19258
19299
  ? (data && this.fromObject(data))
@@ -19267,7 +19308,7 @@ class BaseEntityService extends BaseGraphqlService {
19267
19308
  query,
19268
19309
  variables: { id },
19269
19310
  fetchPolicy: opts && opts.fetchPolicy || undefined,
19270
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
19311
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
19271
19312
  });
19272
19313
  // Convert to entity
19273
19314
  return (!opts || opts.toEntity !== false)
@@ -19298,7 +19339,7 @@ class BaseEntityService extends BaseGraphqlService {
19298
19339
  totalFieldName: withTotal ? 'total' : undefined,
19299
19340
  insertFilterFn: filter && filter.asFilterFn(),
19300
19341
  variables,
19301
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
19342
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
19302
19343
  fetchPolicy: opts && opts.fetchPolicy || undefined
19303
19344
  })
19304
19345
  .pipe(map(({ data, total }) => {
@@ -19334,7 +19375,7 @@ class BaseEntityService extends BaseGraphqlService {
19334
19375
  const { data, total } = yield this.graphql.query({
19335
19376
  query,
19336
19377
  variables,
19337
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
19378
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
19338
19379
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
19339
19380
  });
19340
19381
  const entities = (!opts || opts.toEntity !== false) ?
@@ -19373,7 +19414,7 @@ class BaseEntityService extends BaseGraphqlService {
19373
19414
  variables: {
19374
19415
  filter: filter && filter.asPodObject()
19375
19416
  },
19376
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
19417
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
19377
19418
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
19378
19419
  });
19379
19420
  return res.total;
@@ -19406,7 +19447,7 @@ class BaseEntityService extends BaseGraphqlService {
19406
19447
  variables: {
19407
19448
  data: json
19408
19449
  },
19409
- error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
19450
+ error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
19410
19451
  update: (proxy, { data }) => {
19411
19452
  const savedEntities = data && data.data;
19412
19453
  if (savedEntities) {
@@ -19462,7 +19503,7 @@ class BaseEntityService extends BaseGraphqlService {
19462
19503
  variables: {
19463
19504
  data: json
19464
19505
  },
19465
- error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
19506
+ error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
19466
19507
  update: (cache, { data }) => {
19467
19508
  // Update entity
19468
19509
  const savedEntity = data && data.data;
@@ -19510,7 +19551,7 @@ class BaseEntityService extends BaseGraphqlService {
19510
19551
  refetchQueries: this.getRefetchQueriesForMutation(opts),
19511
19552
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
19512
19553
  variables: { ids },
19513
- error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
19554
+ error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
19514
19555
  update: (cache, res) => {
19515
19556
  // Remove from cache
19516
19557
  if (this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -19551,7 +19592,7 @@ class BaseEntityService extends BaseGraphqlService {
19551
19592
  refetchQueries: this.getRefetchQueriesForMutation(opts),
19552
19593
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
19553
19594
  variables: { id },
19554
- error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
19595
+ error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
19555
19596
  update: (proxy, res) => {
19556
19597
  // Remove from cache
19557
19598
  if (this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -19584,7 +19625,7 @@ class BaseEntityService extends BaseGraphqlService {
19584
19625
  query: opts && opts.query || this.subscriptions.listenChanges,
19585
19626
  variables,
19586
19627
  error: {
19587
- code: ErrorCodes.SUBSCRIBE_DATA_ERROR,
19628
+ code: ErrorCodes$2.SUBSCRIBE_DATA_ERROR,
19588
19629
  message: 'ERROR.SUBSCRIBE_DATA_ERROR'
19589
19630
  }
19590
19631
  })
@@ -19759,7 +19800,7 @@ class EntitiesTableDataSource extends TableDataSource {
19759
19800
  if (this._debug)
19760
19801
  invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this._logTypeName} row #${row.id}`));
19761
19802
  // Stop with an error
19762
- throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
19803
+ throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
19763
19804
  }
19764
19805
  this._editingRowCount = 0;
19765
19806
  let data;
@@ -20581,14 +20622,14 @@ class AppTable {
20581
20622
  return __awaiter(this, void 0, void 0, function* () {
20582
20623
  opts = Object.assign({ keepEditing: this.keepEditedRowOnSave }, opts);
20583
20624
  if (this.readOnly) {
20584
- throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
20625
+ throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
20585
20626
  }
20586
20627
  this.resetError();
20587
20628
  // Keep edited row id (should be done BEFORE confirmEditCreate() )
20588
20629
  this.previouslyEditedRowId = opts.keepEditing && ((_a = this.editedRow) === null || _a === void 0 ? void 0 : _a.editing) ? this.editedRow.id : undefined;
20589
20630
  const previouslyEditedData = isNotNil(this.previouslyEditedRowId) && this.editedRow.currentData || ((_b = this.singleSelectedRow) === null || _b === void 0 ? void 0 : _b.currentData);
20590
20631
  if (!this.confirmEditCreate()) {
20591
- throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
20632
+ throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
20592
20633
  }
20593
20634
  // Mark as saving
20594
20635
  this.markAsSaving();
@@ -20704,7 +20745,7 @@ class AppTable {
20704
20745
  deleteRows(event, rows, opts) {
20705
20746
  return __awaiter(this, void 0, void 0, function* () {
20706
20747
  if (this.readOnly) {
20707
- throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
20748
+ throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
20708
20749
  }
20709
20750
  if (event === null || event === void 0 ? void 0 : event.defaultPrevented)
20710
20751
  return 0; // SKip
@@ -22135,7 +22176,7 @@ class AppEntityEditor extends AppTabEditor {
22135
22176
  try {
22136
22177
  const data = yield this.dataService.load(id, opts);
22137
22178
  if (!data)
22138
- throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
22179
+ throw { code: ErrorCodes$2.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
22139
22180
  this._usageMode = this.computeUsageMode(data);
22140
22181
  yield this.onEntityLoaded(data, opts);
22141
22182
  yield this.updateView(data, opts);
@@ -23028,7 +23069,7 @@ class UserEventService extends BaseGraphqlService {
23028
23069
  EntityUtils.copyIdAndUpdateDate(source, target);
23029
23070
  }
23030
23071
  }
23031
- 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" });
23072
+ 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" });
23032
23073
  UserEventService.decorators = [
23033
23074
  { type: Injectable, args: [{ providedIn: 'root' },] }
23034
23075
  ];
@@ -23365,12 +23406,12 @@ class PersonService extends BaseEntityService {
23365
23406
  };
23366
23407
  });
23367
23408
  }
23368
- suggest(value, filter) {
23409
+ suggest(value, filter, sortBy, sortDirection) {
23369
23410
  return __awaiter(this, void 0, void 0, function* () {
23370
23411
  if (ReferentialUtils.isNotEmpty(value))
23371
23412
  return { data: [value] };
23372
23413
  value = (typeof value === 'string' && value !== '*') && value || undefined;
23373
- 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 */ });
23414
+ return this.loadAll(0, !value ? 30 : 10, sortBy || (filter === null || filter === void 0 ? void 0 : filter.searchAttribute), sortDirection, Object.assign(Object.assign({}, filter), { searchText: value, statusIds: filter && filter.statusIds || [StatusIds.ENABLE], userProfiles: filter && filter.userProfiles }), { withTotal: true /* need by autocomplete */ });
23374
23415
  });
23375
23416
  }
23376
23417
  executeImport(progression, opts) {
@@ -23410,7 +23451,7 @@ class PersonService extends BaseEntityService {
23410
23451
  return target;
23411
23452
  }
23412
23453
  }
23413
- PersonService.ɵprov = ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(ɵɵinject(GraphqlService), ɵɵinject(PlatformService), ɵɵinject(NetworkService), ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
23454
+ 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" });
23414
23455
  PersonService.decorators = [
23415
23456
  { type: Injectable, args: [{ providedIn: 'root' },] }
23416
23457
  ];
@@ -23441,7 +23482,7 @@ class PersonValidatorService {
23441
23482
  return this.formBuilder.group(formConfig);
23442
23483
  }
23443
23484
  }
23444
- PersonValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
23485
+ PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
23445
23486
  PersonValidatorService.decorators = [
23446
23487
  { type: Injectable, args: [{ providedIn: 'root' },] }
23447
23488
  ];
@@ -23597,7 +23638,7 @@ UsersPage.decorators = [
23597
23638
  ],
23598
23639
  animations: [slideUpDownAnimation],
23599
23640
  changeDetection: ChangeDetectionStrategy.OnPush,
23600
- 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}"]
23641
+ 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}"]
23601
23642
  },] }
23602
23643
  ];
23603
23644
  UsersPage.ctorParameters = () => [
@@ -23645,16 +23686,16 @@ AdminModule.decorators = [
23645
23686
  ];
23646
23687
  AdminModule.ctorParameters = () => [];
23647
23688
 
23648
- const ɵ0$a = {
23689
+ const ɵ0 = {
23649
23690
  profile: 'ADMIN'
23650
23691
  };
23651
- const routes$1 = [
23692
+ const routes = [
23652
23693
  {
23653
23694
  path: 'users',
23654
23695
  pathMatch: 'full',
23655
23696
  component: UsersPage,
23656
23697
  canActivate: [AuthGuardService],
23657
- data: ɵ0$a
23698
+ data: ɵ0
23658
23699
  }
23659
23700
  ];
23660
23701
  class AdminRoutingModule {
@@ -23664,13 +23705,13 @@ AdminRoutingModule.decorators = [
23664
23705
  imports: [
23665
23706
  SharedRoutingModule,
23666
23707
  AdminModule,
23667
- RouterModule.forChild(routes$1)
23708
+ RouterModule.forChild(routes)
23668
23709
  ],
23669
23710
  exports: [RouterModule]
23670
23711
  },] }
23671
23712
  ];
23672
23713
 
23673
- const ErrorCodes$2 = {
23714
+ const ErrorCodes = {
23674
23715
  LOAD_PERSONS_ERROR: 100,
23675
23716
  SAVE_PERSONS_ERROR: 101,
23676
23717
  DELETE_PERSONS_ERROR: 102,
@@ -23682,5 +23723,5 @@ const ErrorCodes$2 = {
23682
23723
  * Generated bundle index. Do not edit.
23683
23724
  */
23684
23725
 
23685
- 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 };
23726
+ 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 };
23686
23727
  //# sourceMappingURL=ngx-sumaris-components.js.map