@sumaris-net/ngx-components 0.26.7 → 0.27.3

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.
@@ -37,7 +37,7 @@ import { __awaiter, __decorate } from 'tslib';
37
37
  import * as i1$6 from '@angular/forms';
38
38
  import { NG_VALUE_ACCESSOR, FormGroupDirective, AbstractControl, FormGroup, FormArray, FormControl, ReactiveFormsModule, Validators, FormBuilder } from '@angular/forms';
39
39
  import { timer, merge, fromEvent, Subscription, BehaviorSubject, Subject, isObservable, of, noop as noop$8, Observable, defer, from, combineLatest, EMPTY } from 'rxjs';
40
- import { filter, first, map, takeUntil, startWith, debounceTime, takeWhile, switchMap, tap, distinctUntilChanged, mergeMap, catchError, throttleTime } from 'rxjs/operators';
40
+ import { filter, first, map, takeUntil, startWith, debounceTime, takeWhile, switchMap, tap, distinctUntilChanged, mergeMap, catchError, throttleTime, skip } from 'rxjs/operators';
41
41
  import * as i1$1 from '@ngx-translate/core';
42
42
  import { TranslateService, TranslateModule } from '@ngx-translate/core';
43
43
  import * as i1$4 from '@ionic/angular';
@@ -1927,11 +1927,11 @@ LongitudeFormatPipe.decorators = [
1927
1927
  ];
1928
1928
 
1929
1929
  class NumberFormatPipe {
1930
- transform(val) {
1930
+ transform(val, numberFormatOptions) {
1931
1931
  // Format the output to display any way you want here.
1932
1932
  // For instance:
1933
1933
  if (val !== undefined && val !== null) {
1934
- return val.toLocaleString( /*arguments you need*/);
1934
+ return val.toLocaleString(undefined, numberFormatOptions);
1935
1935
  }
1936
1936
  else {
1937
1937
  return '';
@@ -2918,6 +2918,13 @@ class AppNullForm {
2918
2918
  markAsDirty(opts) { }
2919
2919
  markAsLoading(opts) { }
2920
2920
  markAsLoaded(opts) { }
2921
+ markAsReady(opts) { }
2922
+ waitIdle(opts) {
2923
+ return Promise.reject(false);
2924
+ }
2925
+ ready() {
2926
+ return Promise.reject(true);
2927
+ }
2921
2928
  }
2922
2929
  class AppFormProvider {
2923
2930
  constructor(getterFn) {
@@ -2961,6 +2968,9 @@ class AppFormProvider {
2961
2968
  get loading() {
2962
2969
  return this.delegate.loading;
2963
2970
  }
2971
+ ready() {
2972
+ return this.delegate.ready();
2973
+ }
2964
2974
  disable(opts) {
2965
2975
  return this.delegate.disable(opts);
2966
2976
  }
@@ -2988,6 +2998,9 @@ class AppFormProvider {
2988
2998
  markAsLoaded(opts) {
2989
2999
  return this.delegate.markAsLoaded(opts);
2990
3000
  }
3001
+ markAsReady(opts) {
3002
+ return this.delegate.markAsReady(opts);
3003
+ }
2991
3004
  }
2992
3005
  AppFormProvider.NULL_FORM = new AppNullForm();
2993
3006
  // TODO continue to use this kind of declaration ?
@@ -7619,13 +7632,14 @@ AppFormField.propDecorators = {
7619
7632
  };
7620
7633
 
7621
7634
  class StartableService {
7622
- constructor(platform) {
7635
+ constructor(prerequisiteService) {
7623
7636
  this.onStart = new Subject();
7624
7637
  this._debug = false;
7638
+ this._startByReadyFunction = true; // should start when calling ready() ?
7625
7639
  this._data = null;
7626
7640
  this._started = false;
7627
- this._startPrerequisite = platform
7628
- ? () => platform.ready()
7641
+ this._startPrerequisite = prerequisiteService
7642
+ ? () => prerequisiteService.ready()
7629
7643
  : () => Promise.resolve();
7630
7644
  }
7631
7645
  start() {
@@ -7680,7 +7694,12 @@ class StartableService {
7680
7694
  ready() {
7681
7695
  if (this._started)
7682
7696
  return Promise.resolve(this._data);
7683
- return this.start();
7697
+ if (this._startPromise)
7698
+ return this._startPromise;
7699
+ if (this._startByReadyFunction)
7700
+ return this.start();
7701
+ return waitFor(() => this._started)
7702
+ .then(() => this._data);
7684
7703
  }
7685
7704
  ngOnStop() {
7686
7705
  return __awaiter(this, void 0, void 0, function* () {
@@ -12260,7 +12279,6 @@ class GraphqlService extends StartableService {
12260
12279
  .append('Authorization', authorization);
12261
12280
  //.append('X-App-Name', environment.name)
12262
12281
  //.append('X-App-Version', environment.version)
12263
- ;
12264
12282
  // Use the setContext method to set the HTTP headers.
12265
12283
  operation.setContext(Object.assign(Object.assign({}, operation.getContext()), { headers }));
12266
12284
  // Call the next link in the middleware chain.
@@ -14371,8 +14389,9 @@ ConfigService.ctorParameters = () => [
14371
14389
  ];
14372
14390
 
14373
14391
  const moment$2 = momentImported;
14374
- class PlatformService {
14392
+ class PlatformService extends StartableService {
14375
14393
  constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser, downloader) {
14394
+ super(platform);
14376
14395
  this.platform = platform;
14377
14396
  this.cdkPlatform = cdkPlatform;
14378
14397
  this.toastController = toastController;
@@ -14392,15 +14411,10 @@ class PlatformService {
14392
14411
  this.splashScreen = splashScreen;
14393
14412
  this.browser = browser;
14394
14413
  this.downloader = downloader;
14395
- this._started = false;
14396
14414
  this._downloadingJobs = new Map();
14397
14415
  this._debug = !environment.production;
14398
14416
  if (this._debug)
14399
14417
  console.debug('[platform] Creating service');
14400
- this.start();
14401
- }
14402
- get started() {
14403
- return this._started;
14404
14418
  }
14405
14419
  get mobile() {
14406
14420
  return isNotNil(this._mobile) ? this._mobile : this.platform.is('mobile');
@@ -14419,7 +14433,7 @@ class PlatformService {
14419
14433
  return this._android && this._cordova;
14420
14434
  }
14421
14435
  get canDownload() {
14422
- return this._android && !!this.downloader;
14436
+ return isNotNil(this.downloader);
14423
14437
  }
14424
14438
  width() {
14425
14439
  return this.platform.width();
@@ -14427,78 +14441,62 @@ class PlatformService {
14427
14441
  height() {
14428
14442
  return this.platform.height();
14429
14443
  }
14430
- start() {
14431
- if (this._startPromise)
14432
- return this._startPromise;
14433
- if (this._started)
14434
- return Promise.resolve();
14435
- this._started = false;
14436
- const now = Date.now();
14437
- this.accountService.tokenType = undefined;
14438
- console.info('[platform] Starting platform...');
14439
- this._startPromise = this.platform.ready()
14440
- .then(() => {
14441
- this._mobile = this.platform.is('mobile');
14442
- this._cordova = this.platform.is('cordova');
14443
- this._android = this.platform.is('android');
14444
- this.configureCordovaPlugins(this._mobile);
14445
- this.touchUi = this._mobile || this.platform.is('tablet') || this.platform.is('phablet');
14446
- // Force mobile in settings
14447
- if (this._mobile) {
14448
- this.settings.mobile = this._mobile;
14449
- this.settings.touchUi = this.touchUi;
14450
- }
14451
- this.configureTranslate();
14452
- })
14453
- .then(() => this.storageReady())
14454
- .then((forage) => this.migrateStorage(forage))
14455
- .then(() => Promise.all([
14456
- this.entitiesStorage.ready(),
14457
- this.cache.ready().then(() => this.configureCache()),
14458
- this.settings.ready(),
14459
- this.networkService.ready(),
14460
- this.audioProvider.ready()
14461
- ]))
14462
- .then(() => {
14463
- this._started = true;
14464
- this._startPromise = undefined;
14465
- console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi}, canDownload: ${this.canDownload}} in ${Date.now() - now}ms`);
14466
- // Update cache configuration when network changed
14467
- this.networkService.onNetworkStatusChanges.subscribe((type) => this.configureCache(type !== 'none'));
14468
- // Update authentication type
14469
- this.configService.config
14470
- .pipe(map(config => config === null || config === void 0 ? void 0 : config.getProperty(CORE_CONFIG_OPTIONS.AUTH_TOKEN_TYPE)), filter(isNotNilOrBlank), distinctUntilChanged())
14471
- .subscribe(tokenType => {
14472
- console.info(`[platform] Using auth token type {${tokenType}}`);
14473
- this.accountService.tokenType = tokenType;
14474
- });
14475
- // Wait 1 more seconds, before hiding the splash screen
14476
- setTimeout(() => {
14477
- if (this.splashScreen)
14478
- this.splashScreen.hide();
14479
- // Play startup sound
14480
- this.audioProvider.playStartupSound();
14481
- }, 1000);
14482
- })
14483
- // Manage error
14484
- .catch(err => this.onStartupError(err));
14485
- return this._startPromise;
14486
- }
14487
- /**
14488
- * Wait platform is ready.<br/>
14489
- * Important: this will NOT start the platform, has it should be started by the AppComponent
14490
- *
14491
- * @param opts
14492
- */
14493
- ready(opts) {
14494
- const period = opts && opts.checkPeriod || 300;
14495
- if (this._started)
14496
- return Promise.resolve();
14497
- return timer(period, period)
14498
- .pipe(
14499
- // For DEBUG :
14500
- //tap(() => this._debug && console.debug("Waiting platform ready...")),
14501
- filter(() => this._started), first()).toPromise();
14444
+ ngOnStart() {
14445
+ return __awaiter(this, void 0, void 0, function* () {
14446
+ const now = Date.now();
14447
+ this.accountService.tokenType = undefined;
14448
+ console.info('[platform] Starting platform...');
14449
+ try {
14450
+ this._mobile = this.platform.is('mobile');
14451
+ this._cordova = this.platform.is('cordova');
14452
+ this._android = this.platform.is('android');
14453
+ this.configureCordovaPlugins(this._mobile);
14454
+ this.touchUi = this._mobile || this.platform.is('tablet') || this.platform.is('phablet');
14455
+ // Force mobile in settings
14456
+ if (this._mobile) {
14457
+ this.settings.mobile = this._mobile;
14458
+ this.settings.touchUi = this.touchUi;
14459
+ }
14460
+ // Configure translation
14461
+ yield this.configureTranslate();
14462
+ // Configure storage
14463
+ const forage = yield this.storageReady();
14464
+ yield this.migrateStorage(forage);
14465
+ // Start root services
14466
+ yield Promise.all([
14467
+ this.entitiesStorage.ready(),
14468
+ this.cache.ready().then(() => this.configureCache()),
14469
+ this.settings.ready(),
14470
+ this.networkService.ready(),
14471
+ this.audioProvider.ready()
14472
+ ]);
14473
+ console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi}, downloader: ${this.canDownload}} in ${Date.now() - now}ms`);
14474
+ // Update cache configuration when network changed
14475
+ this.networkService.onNetworkStatusChanges
14476
+ .pipe(skip(1)) // Skip the first event (behavior subject send event immediately)
14477
+ .subscribe(type => this.configureCache(type !== 'none'));
14478
+ // Update authentication type
14479
+ this.configService.config
14480
+ .pipe(map(config => config === null || config === void 0 ? void 0 : config.getProperty(CORE_CONFIG_OPTIONS.AUTH_TOKEN_TYPE)), filter(isNotNilOrBlank), distinctUntilChanged())
14481
+ .subscribe(tokenType => {
14482
+ console.info(`[platform] Using auth token type {${tokenType}}`);
14483
+ this.accountService.tokenType = tokenType;
14484
+ });
14485
+ // Hide the splashscreen (if mobile) - after 1s
14486
+ if (this.mobile) {
14487
+ setTimeout(() => {
14488
+ var _a;
14489
+ (_a = this.splashScreen) === null || _a === void 0 ? void 0 : _a.hide();
14490
+ // Play startup sound
14491
+ this.audioProvider.playStartupSound();
14492
+ }, 1000);
14493
+ }
14494
+ }
14495
+ catch (err) {
14496
+ // Manage startup error
14497
+ return this.onStartupError(err);
14498
+ }
14499
+ });
14502
14500
  }
14503
14501
  open(url, target, features, replace) {
14504
14502
  console.info(`[platform] Opening link: ${url}`);
@@ -14609,9 +14607,9 @@ class PlatformService {
14609
14607
  });
14610
14608
  }
14611
14609
  configureCache(online) {
14612
- online = isNotNil(online) ? online : this.cache.isOnline();
14610
+ online = toBoolean(online, this.cache.isOnline());
14613
14611
  const cacheTTL = online ? 3600 /* 1h */ : 3600 * 24 * 30; /* 1 month */
14614
- console.info(`[platform] Configuring cache [OK] {online: ${online}}, {timeToLive: ${cacheTTL / 3600}h}, {offlineInvalidate: false}`);
14612
+ console.info(`[platform] Configuring cache [OK] {online: ${online}, timeToLive: ${cacheTTL / 3600}h, offlineInvalidate: false}`);
14615
14613
  this.cache.setDefaultTTL(cacheTTL);
14616
14614
  this.cache.setOfflineInvalidate(false); // Do not invalidate cache when offline
14617
14615
  }
@@ -16566,6 +16564,7 @@ class AppForm {
16566
16564
  this.error = null;
16567
16565
  this._enable = false;
16568
16566
  this._loading = true;
16567
+ this._ready = true;
16569
16568
  this.i18nFieldPrefix = null;
16570
16569
  this._subscription = new Subscription();
16571
16570
  this.debug = false;
@@ -16735,6 +16734,20 @@ class AppForm {
16735
16734
  this.markForCheck();
16736
16735
  }
16737
16736
  }
16737
+ markAsReady(opts) {
16738
+ if (!this._ready) {
16739
+ this._ready = true;
16740
+ if (!opts || opts.emitEvent !== false)
16741
+ this.markForCheck();
16742
+ }
16743
+ }
16744
+ /**
16745
+ * Wait form is ready
16746
+ * @param opts
16747
+ */
16748
+ ready(opts) {
16749
+ return waitFor(() => this._ready, opts);
16750
+ }
16738
16751
  /**
16739
16752
  * Wait form is idle (not loading)
16740
16753
  * @param opts
@@ -20349,6 +20362,7 @@ class AppTable {
20349
20362
  this.allowRowDetail = true;
20350
20363
  this.excludesColumns = [];
20351
20364
  this.totalRowCount = null;
20365
+ this.readySubject = new BehaviorSubject(false);
20352
20366
  this.loadingSubject = new BehaviorSubject(true);
20353
20367
  this.savingSubject = new BehaviorSubject(false);
20354
20368
  this.dirtySubject = new BehaviorSubject(false);
@@ -20552,6 +20566,14 @@ class AppTable {
20552
20566
  (_a = row.validator) === null || _a === void 0 ? void 0 : _a.markAsDirty(opts);
20553
20567
  this.markAsDirty(opts);
20554
20568
  }
20569
+ markAsReady(opts) {
20570
+ if (this.readySubject.value !== false) {
20571
+ this.readySubject.next(false);
20572
+ if (!opts || opts.emitEvent !== false) {
20573
+ this.markForCheck();
20574
+ }
20575
+ }
20576
+ }
20555
20577
  get loading() {
20556
20578
  return this.loadingSubject.value;
20557
20579
  }
@@ -21147,6 +21169,9 @@ class AppTable {
21147
21169
  moveRow(id, direction) {
21148
21170
  this.dataSource.move(id, direction);
21149
21171
  }
21172
+ ready() {
21173
+ return firstTruePromise(this.readySubject);
21174
+ }
21150
21175
  waitIdle() {
21151
21176
  return firstFalsePromise(this.loadingSubject);
21152
21177
  }
@@ -21829,8 +21854,8 @@ AppTable.propDecorators = {
21829
21854
  class AppTabEditorOptions {
21830
21855
  }
21831
21856
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
21832
- class AppTabEditor {
21833
- constructor(route, router, alertCtrl, translate, options) {
21857
+ class AppEditor {
21858
+ constructor(route, router, alertCtrl, translate) {
21834
21859
  this.route = route;
21835
21860
  this.router = router;
21836
21861
  this.alertCtrl = alertCtrl;
@@ -21839,16 +21864,11 @@ class AppTabEditor {
21839
21864
  this._enabled = false;
21840
21865
  this._dirty = false;
21841
21866
  this._loading = true;
21842
- this._selectedTabIndex = 0;
21867
+ this._$ready = new BehaviorSubject(false);
21843
21868
  this.debug = false;
21844
21869
  this.submitted = false;
21845
21870
  this.toolbar = null;
21846
21871
  this.formButtonsBar = null;
21847
- this.selectedTabIndexChange = new EventEmitter();
21848
- options = Object.assign({ tabCount: 1, enableSwipe: true, tabGroupAnimationDuration: '200ms' }, options);
21849
- this.tabCount = options.tabCount;
21850
- this.enableSwipe = options.enableSwipe;
21851
- this.tabGroupAnimationDuration = options.tabGroupAnimationDuration;
21852
21872
  }
21853
21873
  get tables() {
21854
21874
  return this._children && this._children.filter(c => c instanceof AppTable);
@@ -21888,31 +21908,7 @@ class AppTabEditor {
21888
21908
  get empty() {
21889
21909
  return this._enabled;
21890
21910
  }
21891
- get selectedTabIndex() {
21892
- return this._selectedTabIndex;
21893
- }
21894
- set selectedTabIndex(value) {
21895
- this.setSelectedTabIndex(value);
21896
- }
21897
21911
  ngOnInit() {
21898
- this.queryTabIndexParamName = this.queryTabIndexParamName || 'tab';
21899
- // Read the selected tab index, from path query params
21900
- if (this.tabGroup) {
21901
- this.registerSubscription(this.route.queryParams
21902
- .subscribe(queryParams => {
21903
- this.queryParams = Object.assign({}, queryParams);
21904
- // Parse tab param
21905
- if (this.tabCount > 1 && this.queryTabIndexParamName) {
21906
- const tabIndex = queryParams[this.queryTabIndexParamName];
21907
- this.queryParams[this.queryTabIndexParamName] = tabIndex && parseInt(tabIndex) || undefined;
21908
- if (isNotNil(this.queryParams[this.queryTabIndexParamName])) {
21909
- this.selectedTabIndex = this.queryParams[this.queryTabIndexParamName];
21910
- }
21911
- }
21912
- // Realign tab, after a delay because the tab can be disabled when component is created
21913
- setTimeout(() => this.tabGroup.realignInkBar(), 500);
21914
- }));
21915
- }
21916
21912
  if (this.formButtonsBar) {
21917
21913
  this.registerSubscription(this.formButtonsBar.onBack.subscribe(event => this.goBack(event)));
21918
21914
  }
@@ -21922,7 +21918,6 @@ class AppTabEditor {
21922
21918
  }
21923
21919
  ngOnDestroy() {
21924
21920
  this._subscription.unsubscribe();
21925
- this.selectedTabIndexChange.complete();
21926
21921
  }
21927
21922
  addChildForm(form) {
21928
21923
  if (!form)
@@ -22004,65 +21999,18 @@ class AppTabEditor {
22004
21999
  this.markForCheck();
22005
22000
  }
22006
22001
  }
22007
- onTabChange(event, queryTabIndexParamName) {
22008
- queryTabIndexParamName = queryTabIndexParamName || this.queryTabIndexParamName;
22009
- if (!queryTabIndexParamName)
22010
- return true; // Skip if tab query param not set
22011
- if (!this.queryParams || +this.queryParams[queryTabIndexParamName] !== event.index) {
22012
- this.queryParams = this.queryParams || {};
22013
- this.queryParams[queryTabIndexParamName] = event.index;
22014
- if (queryTabIndexParamName === 'tab' && isNotNil(this.queryParams['subtab'])) {
22015
- delete this.queryParams.subtab; // clean subtab
22016
- }
22017
- this.router.navigate(['.'], {
22018
- relativeTo: this.route,
22019
- queryParams: this.queryParams,
22020
- replaceUrl: true
22021
- });
22022
- return true;
22023
- }
22024
- return false;
22025
- }
22026
- /**
22027
- * Action triggered when user swipes
22028
- */
22029
- onSwipeTab(event) {
22030
- // DEBUG
22031
- // if (this.debug) console.debug("[tab-page] onSwipeTab()");
22032
- // Skip, if not a valid swipe event
22033
- if (!this.enableSwipe || !event
22034
- || event.defaultPrevented || (event.srcEvent && event.srcEvent.defaultPrevented)
22035
- || event.pointerType !== 'touch') {
22036
- return false;
22037
- }
22038
- // DEBUG
22039
- //if (this.debug)
22040
- //console.debug("[tab-page] Detected swipe: " + event.type, event);
22041
- let selectTabIndex = this.selectedTabIndex;
22042
- switch (event.type) {
22043
- // Open next tab
22044
- case 'swipeleft':
22045
- const isLast = selectTabIndex >= (this.tabCount - 1);
22046
- selectTabIndex = isLast ? 0 : selectTabIndex + 1;
22047
- break;
22048
- // Open previous tab
22049
- case 'swiperight':
22050
- const isFirst = selectTabIndex <= 0;
22051
- selectTabIndex = isFirst ? this.tabCount : selectTabIndex - 1;
22052
- break;
22053
- // Other case
22054
- default:
22055
- console.error('[tab-page] Unknown swipe action: ' + event.type);
22056
- return false;
22057
- }
22058
- setTimeout(() => {
22059
- this.selectedTabIndex = selectTabIndex;
22002
+ markAsReady(opts) {
22003
+ var _a;
22004
+ (_a = this._children) === null || _a === void 0 ? void 0 : _a.forEach(c => c.markAsReady(opts));
22005
+ this._$ready.next(true);
22006
+ if (!this.loading && (!opts || opts.emitEvent !== false))
22060
22007
  this.markForCheck();
22061
- });
22062
- return true;
22063
22008
  }
22064
- onSubTabChange(event) {
22065
- this.onTabChange(event, 'subtab');
22009
+ ready(opts) {
22010
+ return firstTruePromise(this._$ready);
22011
+ }
22012
+ waitIdle(opts) {
22013
+ return AppFormUtils.waitIdle(this, opts);
22066
22014
  }
22067
22015
  cancel(event) {
22068
22016
  return __awaiter(this, void 0, void 0, function* () {
@@ -22083,7 +22031,6 @@ class AppTabEditor {
22083
22031
  return __awaiter(this, void 0, void 0, function* () {
22084
22032
  console.debug('[tab-page] Unloading data...');
22085
22033
  this.markAsLoading();
22086
- this.selectedTabIndex = 0;
22087
22034
  this._children.forEach(f => {
22088
22035
  if (f instanceof AppForm) {
22089
22036
  f.reset(null, opts);
@@ -22144,28 +22091,11 @@ class AppTabEditor {
22144
22091
  }
22145
22092
  });
22146
22093
  }
22147
- setSelectedTabIndex(value, opts) {
22148
- // Fix value
22149
- if (value < 0) {
22150
- value = 0;
22151
- }
22152
- else if (value > this.tabCount - 1) {
22153
- value = this.tabCount - 1;
22154
- }
22155
- this._selectedTabIndex = value;
22156
- this.selectedTabIndexChange.next(value);
22157
- if (this.tabGroup && (!opts || opts.realignInkBar !== false)) {
22158
- this.tabGroup.selectedIndex = value;
22159
- this.markForCheck();
22160
- // Wait tab change in UI, before realign ink tab
22161
- setTimeout(() => this.tabGroup.realignInkBar(), 200);
22162
- }
22163
- else if (!opts || opts.emitEvent !== false) {
22164
- this.markForCheck();
22165
- }
22166
- }
22167
- waitIdle(opts) {
22168
- return AppFormUtils.waitIdle(this, opts);
22094
+ logFormErrors() {
22095
+ var _a;
22096
+ if (this.debug)
22097
+ console.debug('[app-tab-editor] Page not valid. Checking where (forms, tables)...');
22098
+ (_a = this._children) === null || _a === void 0 ? void 0 : _a.forEach(c => this.logChildrenFormErrors(c));
22169
22099
  }
22170
22100
  /* -- protected methods -- */
22171
22101
  scrollToTop(duration) {
@@ -22242,16 +22172,10 @@ class AppTabEditor {
22242
22172
  yield Toasts.show(this.toastController, this.translate, opts);
22243
22173
  });
22244
22174
  }
22245
- logFormErrors() {
22246
- var _a;
22247
- if (this.debug)
22248
- console.debug('[app-tab-editor] Page not valid. Checking where (forms, tables)...');
22249
- (_a = this._children) === null || _a === void 0 ? void 0 : _a.forEach(c => this.logChildrenFormErrors(c));
22250
- }
22251
22175
  logChildrenFormErrors(c, prefix, path) {
22252
22176
  prefix = prefix || '[app-tab-editor] ';
22253
22177
  // If editor
22254
- if (c instanceof AppTabEditor) {
22178
+ if (c instanceof AppEditor) {
22255
22179
  c.logFormErrors();
22256
22180
  }
22257
22181
  // Angular form control
@@ -22293,6 +22217,156 @@ class AppTabEditor {
22293
22217
  // Should be override by subclasses, if change detection is Push
22294
22218
  }
22295
22219
  }
22220
+ AppEditor.decorators = [
22221
+ { type: Directive }
22222
+ ];
22223
+ AppEditor.ctorParameters = () => [
22224
+ { type: ActivatedRoute },
22225
+ { type: Router },
22226
+ { type: AlertController },
22227
+ { type: TranslateService }
22228
+ ];
22229
+ AppEditor.propDecorators = {
22230
+ toolbar: [{ type: ViewChild, args: [ToolbarToken,] }],
22231
+ formButtonsBar: [{ type: ViewChild, args: [FormButtonsBarToken, { static: true },] }],
22232
+ content: [{ type: ViewChild, args: [IonContent, { static: true },] }]
22233
+ };
22234
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
22235
+ class AppTabEditor extends AppEditor {
22236
+ constructor(route, router, alertCtrl, translate, options) {
22237
+ super(route, router, alertCtrl, translate);
22238
+ this.route = route;
22239
+ this.router = router;
22240
+ this.alertCtrl = alertCtrl;
22241
+ this.translate = translate;
22242
+ this._selectedTabIndex = 0;
22243
+ this.selectedTabIndexChange = new EventEmitter();
22244
+ options = Object.assign({ tabCount: 1, enableSwipe: true, tabGroupAnimationDuration: '200ms' }, options);
22245
+ this.tabCount = options.tabCount;
22246
+ this.enableSwipe = options.enableSwipe;
22247
+ this.tabGroupAnimationDuration = options.tabGroupAnimationDuration;
22248
+ }
22249
+ set selectedTabIndex(value) {
22250
+ this.setSelectedTabIndex(value);
22251
+ }
22252
+ get selectedTabIndex() {
22253
+ return this._selectedTabIndex;
22254
+ }
22255
+ ngOnInit() {
22256
+ super.ngOnInit();
22257
+ this.queryTabIndexParamName = this.queryTabIndexParamName || 'tab';
22258
+ // Read the selected tab index, from path query params
22259
+ if (this.tabGroup) {
22260
+ this.registerSubscription(this.route.queryParams
22261
+ .subscribe(queryParams => {
22262
+ this.queryParams = Object.assign({}, queryParams);
22263
+ // Parse tab param
22264
+ if (this.tabCount > 1 && this.queryTabIndexParamName) {
22265
+ const tabIndex = queryParams[this.queryTabIndexParamName];
22266
+ this.queryParams[this.queryTabIndexParamName] = tabIndex && parseInt(tabIndex) || undefined;
22267
+ if (isNotNil(this.queryParams[this.queryTabIndexParamName])) {
22268
+ this.selectedTabIndex = this.queryParams[this.queryTabIndexParamName];
22269
+ }
22270
+ }
22271
+ // Realign tab, after a delay because the tab can be disabled when component is created
22272
+ setTimeout(() => this.tabGroup.realignInkBar(), 500);
22273
+ }));
22274
+ }
22275
+ }
22276
+ ngOnDestroy() {
22277
+ super.ngOnDestroy();
22278
+ this.selectedTabIndexChange.complete();
22279
+ }
22280
+ setSelectedTabIndex(value, opts) {
22281
+ // Fix value
22282
+ if (value < 0) {
22283
+ value = 0;
22284
+ }
22285
+ else if (value > this.tabCount - 1) {
22286
+ value = this.tabCount - 1;
22287
+ }
22288
+ this._selectedTabIndex = value;
22289
+ this.selectedTabIndexChange.next(value);
22290
+ if (this.tabGroup && (!opts || opts.realignInkBar !== false)) {
22291
+ this.tabGroup.selectedIndex = value;
22292
+ this.markForCheck();
22293
+ // Wait tab change in UI, before realign ink tab
22294
+ setTimeout(() => this.tabGroup.realignInkBar(), 200);
22295
+ }
22296
+ else if (!opts || opts.emitEvent !== false) {
22297
+ this.markForCheck();
22298
+ }
22299
+ }
22300
+ onTabChange(event, queryTabIndexParamName) {
22301
+ queryTabIndexParamName = queryTabIndexParamName || this.queryTabIndexParamName;
22302
+ if (!queryTabIndexParamName)
22303
+ return true; // Skip if tab query param not set
22304
+ if (!this.queryParams || +this.queryParams[queryTabIndexParamName] !== event.index) {
22305
+ this.queryParams = this.queryParams || {};
22306
+ this.queryParams[queryTabIndexParamName] = event.index;
22307
+ if (queryTabIndexParamName === 'tab' && isNotNil(this.queryParams['subtab'])) {
22308
+ delete this.queryParams.subtab; // clean subtab
22309
+ }
22310
+ this.router.navigate(['.'], {
22311
+ relativeTo: this.route,
22312
+ queryParams: this.queryParams,
22313
+ replaceUrl: true
22314
+ });
22315
+ return true;
22316
+ }
22317
+ return false;
22318
+ }
22319
+ /**
22320
+ * Action triggered when user swipes
22321
+ */
22322
+ onSwipeTab(event) {
22323
+ // DEBUG
22324
+ // if (this.debug) console.debug("[tab-page] onSwipeTab()");
22325
+ // Skip, if not a valid swipe event
22326
+ if (!this.enableSwipe || !event
22327
+ || event.defaultPrevented || (event.srcEvent && event.srcEvent.defaultPrevented)
22328
+ || event.pointerType !== 'touch') {
22329
+ return false;
22330
+ }
22331
+ // DEBUG
22332
+ //if (this.debug)
22333
+ //console.debug("[tab-page] Detected swipe: " + event.type, event);
22334
+ let selectTabIndex = this.selectedTabIndex;
22335
+ switch (event.type) {
22336
+ // Open next tab
22337
+ case 'swipeleft':
22338
+ const isLast = selectTabIndex >= (this.tabCount - 1);
22339
+ selectTabIndex = isLast ? 0 : selectTabIndex + 1;
22340
+ break;
22341
+ // Open previous tab
22342
+ case 'swiperight':
22343
+ const isFirst = selectTabIndex <= 0;
22344
+ selectTabIndex = isFirst ? this.tabCount : selectTabIndex - 1;
22345
+ break;
22346
+ // Other case
22347
+ default:
22348
+ console.error('[tab-page] Unknown swipe action: ' + event.type);
22349
+ return false;
22350
+ }
22351
+ setTimeout(() => {
22352
+ this.selectedTabIndex = selectTabIndex;
22353
+ this.markForCheck();
22354
+ });
22355
+ return true;
22356
+ }
22357
+ onSubTabChange(event) {
22358
+ this.onTabChange(event, 'subtab');
22359
+ }
22360
+ unload(opts) {
22361
+ const _super = Object.create(null, {
22362
+ unload: { get: () => super.unload }
22363
+ });
22364
+ return __awaiter(this, void 0, void 0, function* () {
22365
+ this.selectedTabIndex = 0;
22366
+ yield _super.unload.call(this, opts);
22367
+ });
22368
+ }
22369
+ }
22296
22370
  AppTabEditor.decorators = [
22297
22371
  { type: Directive }
22298
22372
  ];
@@ -22305,12 +22379,9 @@ AppTabEditor.ctorParameters = () => [
22305
22379
  ];
22306
22380
  AppTabEditor.propDecorators = {
22307
22381
  queryTabIndexParamName: [{ type: Input }],
22308
- tabGroup: [{ type: ViewChild, args: ['tabGroup', { static: true },] }],
22309
- toolbar: [{ type: ViewChild, args: [ToolbarToken,] }],
22310
- formButtonsBar: [{ type: ViewChild, args: [FormButtonsBarToken, { static: true },] }],
22311
- content: [{ type: ViewChild, args: [IonContent, { static: true },] }],
22312
22382
  selectedTabIndex: [{ type: Input }],
22313
- selectedTabIndexChange: [{ type: Output }]
22383
+ selectedTabIndexChange: [{ type: Output }],
22384
+ tabGroup: [{ type: ViewChild, args: ['tabGroup', { static: true },] }]
22314
22385
  };
22315
22386
 
22316
22387
  class AppEditorOptions extends AppTabEditorOptions {
@@ -24017,5 +24088,5 @@ const ErrorCodes = {
24017
24088
  * Generated bundle index. Do not edit.
24018
24089
  */
24019
24090
 
24020
- export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, 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, FormErrorTranslatePipe, FormErrorTranslator, 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, StartableService, 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, SharedMatBadgeIconModule as ɵc, MatBadgeIconDirective as ɵd, isFocusableElement as ɵe, MatBadgeIconTestPage as ɵf, RegisterForm as ɵg, AccountValidatorService as ɵh, RegisterModal as ɵi, UserSettingsValidatorService as ɵj, LocalSettingsValidatorService as ɵk };
24091
+ export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, 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, AppEditor, 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, FormErrorTranslatePipe, FormErrorTranslator, 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, StartableService, 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, SharedMatBadgeIconModule as ɵc, MatBadgeIconDirective as ɵd, isFocusableElement as ɵe, MatBadgeIconTestPage as ɵf, RegisterForm as ɵg, AccountValidatorService as ɵh, RegisterModal as ɵi, UserSettingsValidatorService as ɵj, LocalSettingsValidatorService as ɵk };
24021
24092
  //# sourceMappingURL=sumaris-net.ngx-components.js.map