@sumaris-net/ngx-components 2.0.0-rc21 → 2.0.0-rc23

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.
@@ -66,8 +66,8 @@ import { Capacitor } from '@capacitor/core';
66
66
  import { Keyboard } from '@capacitor/keyboard';
67
67
  import * as i1$1 from '@ngx-translate/core';
68
68
  import { TranslateModule, TranslateService } from '@ngx-translate/core';
69
- import * as momentImported from 'moment';
70
- import { isMoment } from 'moment';
69
+ import * as momentNamespace from 'moment';
70
+ import { isMoment, locale } from 'moment';
71
71
  import * as i1 from '@angular/material-moment-adapter';
72
72
  import { MatMomentDateModule } from '@angular/material-moment-adapter';
73
73
  import 'moment-timezone';
@@ -2543,7 +2543,153 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
2543
2543
  type: Input
2544
2544
  }] } });
2545
2545
 
2546
- const moment$c = momentImported;
2546
+ const DATE_UNIX_TIMESTAMP = 'X';
2547
+ const DATE_UNIX_MS_TIMESTAMP = 'x';
2548
+ const MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
2549
+ class DateUtils {
2550
+ static isEsModule(value) {
2551
+ return value && value['__esModule'] === true;
2552
+ }
2553
+ static get moment() {
2554
+ if (this.__momentResolved)
2555
+ return this.__momentResolved;
2556
+ if (this.isEsModule(momentNamespace)) {
2557
+ this.__momentResolved = momentNamespace.default;
2558
+ return this.__momentResolved;
2559
+ }
2560
+ if (typeof moment$3['isMoment'] === 'function') {
2561
+ this.__momentResolved = momentNamespace;
2562
+ return this.__momentResolved;
2563
+ }
2564
+ throw Error('Cannot find a valid \'moment\' namespace');
2565
+ }
2566
+ static min(date1, date2) {
2567
+ return date1 && (!date2 || date1.isSameOrBefore(date2)) ? date1 : date2;
2568
+ }
2569
+ static max(date1, date2) {
2570
+ return date1 && (!date2 || date1.isSameOrAfter(date2)) ? date1 : date2;
2571
+ }
2572
+ static equals(date1, date2) {
2573
+ return DateUtils.isSame(date1, date2);
2574
+ }
2575
+ static isSame(date1, date2, granularity) {
2576
+ const d1 = fromDateISOString(date1);
2577
+ const d2 = fromDateISOString(date2);
2578
+ return (!d1 && !d2) || d1.isSame(d2, granularity);
2579
+ }
2580
+ /**
2581
+ * Create a copy of a date, without time fields (always return a new Moment object, or undefined).
2582
+ * Same implementation as the Java class Dates.resetTime() (see any SUMARiS like Pod)
2583
+ * @param value
2584
+ * @param timezone a timezone (see https://momentjs.com/timezone/)
2585
+ * @param keepLocalTime if true, only the timezone (and offset) is updated, keeping the local time same. Consequently, it will now point to a different point in time if the offset has changed.
2586
+ */
2587
+ static resetTime(value, timezone, keepLocalTime) {
2588
+ if (!value)
2589
+ return undefined;
2590
+ const date = fromDateISOString(value);
2591
+ // No timezone
2592
+ if (!timezone) {
2593
+ return date.clone().startOf('day');
2594
+ }
2595
+ // Use timezone
2596
+ return date.clone() // clone the original date
2597
+ .tz(timezone, keepLocalTime)
2598
+ .startOf('day');
2599
+ }
2600
+ static markNoTime(value) {
2601
+ if (!value)
2602
+ return undefined;
2603
+ value[MOMENT_NO_TIME_PROPERTY] = true;
2604
+ return value;
2605
+ }
2606
+ static isNoTime(value) {
2607
+ return (value === null || value === void 0 ? void 0 : value[MOMENT_NO_TIME_PROPERTY]) === true;
2608
+ }
2609
+ /**
2610
+ * Test if a date is on the given day of week
2611
+ * @param date
2612
+ * @param weekday
2613
+ * @param timezone
2614
+ */
2615
+ static isAtDay(date, weekday, timezone) {
2616
+ let momentDate = date && fromDateISOString(date);
2617
+ if (!momentDate)
2618
+ return null;
2619
+ if (timezone)
2620
+ momentDate = momentDate.clone().tz(timezone).startOf('day');
2621
+ return momentDate.day() === weekday;
2622
+ }
2623
+ }
2624
+ DateUtils.toDateISOString = toDateISOString;
2625
+ DateUtils.fromDateISOString = fromDateISOString;
2626
+ DateUtils.toDuration = toDuration;
2627
+ function toDateISOString(value) {
2628
+ if (!value)
2629
+ return undefined;
2630
+ // Already a valid ISO date time string (without timezone): use it
2631
+ if (typeof value === 'string'
2632
+ && value.indexOf('+') === -1
2633
+ && value.lastIndexOf('Z') === value.length - 1) {
2634
+ return value;
2635
+ }
2636
+ // Make sure to have a Moment object
2637
+ const date = fromDateISOString(value);
2638
+ if (!date)
2639
+ return undefined;
2640
+ return DateUtils.isNoTime(date)
2641
+ ? date.toISOString(true /* important ! */).substr(0, 10)
2642
+ : date.toISOString();
2643
+ }
2644
+ function fromDateISOString(value) {
2645
+ // Already a moment object: use it
2646
+ if (!value || isMoment(value))
2647
+ return value;
2648
+ if (typeof value === 'string' && value.length === 10) {
2649
+ // Parse the input value, as a date only
2650
+ const dateOnly = DateUtils.moment(value, DATE_PATTERN);
2651
+ if (dateOnly.isValid())
2652
+ return DateUtils.markNoTime(dateOnly);
2653
+ }
2654
+ // Parse the input value, as a ISO date time
2655
+ const date = DateUtils.moment(value, DATE_ISO_PATTERN);
2656
+ if (date.isValid())
2657
+ return date;
2658
+ // Not valid: trying to convert from unix timestamp
2659
+ if (typeof value === 'string') {
2660
+ console.warn('Wrong date format - Trying to convert from local time: ' + value);
2661
+ if (value.length === 10) {
2662
+ return DateUtils.moment(value, DATE_UNIX_TIMESTAMP);
2663
+ }
2664
+ else if (value.length === 13) {
2665
+ return DateUtils.moment(value, DATE_UNIX_MS_TIMESTAMP);
2666
+ }
2667
+ }
2668
+ console.warn('Unable to parse date: ' + value);
2669
+ return undefined;
2670
+ }
2671
+ function fromUnixTimestamp(timeInSec) {
2672
+ return DateUtils.moment(timeInSec, DATE_UNIX_TIMESTAMP);
2673
+ }
2674
+ function fromUnixMsTimestamp(timeInMs) {
2675
+ return DateUtils.moment(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2676
+ }
2677
+ function toDuration(value, unit) {
2678
+ if (!value)
2679
+ return undefined;
2680
+ const duration = DateUtils.moment.duration(value, unit);
2681
+ // fix 990+ ms
2682
+ if (duration.milliseconds() >= 990) {
2683
+ duration.add(1000 - duration.milliseconds(), 'ms');
2684
+ }
2685
+ // fix 59 s
2686
+ if (duration.seconds() >= 59) {
2687
+ duration.add(60 - duration.seconds(), 's');
2688
+ }
2689
+ return duration;
2690
+ }
2691
+ const moment$3 = DateUtils.moment;
2692
+
2547
2693
  class DateDiffDurationPipe {
2548
2694
  constructor(dateAdapter, translate) {
2549
2695
  this.dateAdapter = dateAdapter;
@@ -2559,11 +2705,11 @@ class DateDiffDurationPipe {
2559
2705
  return this.format(startDate, endDate, args);
2560
2706
  }
2561
2707
  format(startDate, endDate, args) {
2562
- const duration = moment$c.duration(endDate.diff(startDate));
2708
+ const duration = DateUtils.moment.duration(endDate.diff(startDate));
2563
2709
  if (duration.asMinutes() < 0)
2564
2710
  return '';
2565
2711
  const withSeconds = args === null || args === void 0 ? void 0 : args.seconds;
2566
- const timeDuration = moment$c(0)
2712
+ const timeDuration = DateUtils.moment(0)
2567
2713
  .hour(duration.hours())
2568
2714
  .minute(duration.minutes());
2569
2715
  if (withSeconds) {
@@ -2998,137 +3144,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
2998
3144
  args: [{ name: 'fileSize' }]
2999
3145
  }] });
3000
3146
 
3001
- const moment$b = momentImported;
3002
- const DATE_UNIX_TIMESTAMP = 'X';
3003
- const DATE_UNIX_MS_TIMESTAMP = 'x';
3004
- const MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
3005
- class DateUtils {
3006
- static min(date1, date2) {
3007
- return date1 && (!date2 || date1.isSameOrBefore(date2)) ? date1 : date2;
3008
- }
3009
- static max(date1, date2) {
3010
- return date1 && (!date2 || date1.isSameOrAfter(date2)) ? date1 : date2;
3011
- }
3012
- static equals(date1, date2) {
3013
- return DateUtils.isSame(date1, date2);
3014
- }
3015
- static isSame(date1, date2, granularity) {
3016
- const d1 = fromDateISOString(date1);
3017
- const d2 = fromDateISOString(date2);
3018
- return (!d1 && !d2) || d1.isSame(d2, granularity);
3019
- }
3020
- /**
3021
- * Create a copy of a date, without time fields (always return a new Moment object, or undefined).
3022
- * Same implementation as the Java class Dates.resetTime() (see any SUMARiS like Pod)
3023
- * @param value
3024
- * @param timezone a timezone (see https://momentjs.com/timezone/)
3025
- * @param keepLocalTime if true, only the timezone (and offset) is updated, keeping the local time same. Consequently, it will now point to a different point in time if the offset has changed.
3026
- */
3027
- static resetTime(value, timezone, keepLocalTime) {
3028
- if (!value)
3029
- return undefined;
3030
- const date = fromDateISOString(value);
3031
- // No timezone
3032
- if (!timezone) {
3033
- return date.clone().startOf('day');
3034
- }
3035
- // Use timezone
3036
- return date.clone() // clone the original date
3037
- .tz(timezone, keepLocalTime)
3038
- .startOf('day');
3039
- }
3040
- static markNoTime(value) {
3041
- if (!value)
3042
- return undefined;
3043
- value[MOMENT_NO_TIME_PROPERTY] = true;
3044
- return value;
3045
- }
3046
- static isNoTime(value) {
3047
- return (value === null || value === void 0 ? void 0 : value[MOMENT_NO_TIME_PROPERTY]) === true;
3048
- }
3049
- /**
3050
- * Test if a date is on the given day of week
3051
- * @param date
3052
- * @param weekday
3053
- * @param timezone
3054
- */
3055
- static isAtDay(date, weekday, timezone) {
3056
- let momentDate = date && fromDateISOString(date);
3057
- if (!momentDate)
3058
- return null;
3059
- if (timezone)
3060
- momentDate = momentDate.clone().tz(timezone).startOf('day');
3061
- return momentDate.day() === weekday;
3062
- }
3063
- }
3064
- DateUtils.toDateISOString = toDateISOString;
3065
- DateUtils.fromDateISOString = fromDateISOString;
3066
- DateUtils.toDuration = toDuration;
3067
- function toDateISOString(value) {
3068
- if (!value)
3069
- return undefined;
3070
- // Already a valid ISO date time string (without timezone): use it
3071
- if (typeof value === 'string'
3072
- && value.indexOf('+') === -1
3073
- && value.lastIndexOf('Z') === value.length - 1) {
3074
- return value;
3075
- }
3076
- // Make sure to have a Moment object
3077
- const date = fromDateISOString(value);
3078
- if (!date)
3079
- return undefined;
3080
- return DateUtils.isNoTime(date)
3081
- ? date.toISOString(true /* important ! */).substr(0, 10)
3082
- : date.toISOString();
3083
- }
3084
- function fromDateISOString(value) {
3085
- // Already a moment object: use it
3086
- if (!value || isMoment(value))
3087
- return value;
3088
- if (typeof value === 'string' && value.length === 10) {
3089
- // Parse the input value, as a date only
3090
- const dateOnly = moment$b(value, DATE_PATTERN);
3091
- if (dateOnly.isValid())
3092
- return DateUtils.markNoTime(dateOnly);
3093
- }
3094
- // Parse the input value, as a ISO date time
3095
- const date = moment$b(value, DATE_ISO_PATTERN);
3096
- if (date.isValid())
3097
- return date;
3098
- // Not valid: trying to convert from unix timestamp
3099
- if (typeof value === 'string') {
3100
- console.warn('Wrong date format - Trying to convert from local time: ' + value);
3101
- if (value.length === 10) {
3102
- return moment$b(value, DATE_UNIX_TIMESTAMP);
3103
- }
3104
- else if (value.length === 13) {
3105
- return moment$b(value, DATE_UNIX_MS_TIMESTAMP);
3106
- }
3107
- }
3108
- console.warn('Unable to parse date: ' + value);
3109
- return undefined;
3110
- }
3111
- function fromUnixTimestamp(timeInSec) {
3112
- return moment$b(timeInSec, DATE_UNIX_TIMESTAMP);
3113
- }
3114
- function fromUnixMsTimestamp(timeInMs) {
3115
- return moment$b(timeInMs, DATE_UNIX_MS_TIMESTAMP);
3116
- }
3117
- function toDuration(value, unit) {
3118
- if (!value)
3119
- return undefined;
3120
- const duration = moment$b.duration(value, unit);
3121
- // fix 990+ ms
3122
- if (duration.milliseconds() >= 990) {
3123
- duration.add(1000 - duration.milliseconds(), 'ms');
3124
- }
3125
- // fix 59 s
3126
- if (duration.seconds() >= 59) {
3127
- duration.add(60 - duration.seconds(), 's');
3128
- }
3129
- return duration;
3130
- }
3131
-
3132
3147
  class DurationPipe {
3133
3148
  constructor(translate) {
3134
3149
  this.translate = translate;
@@ -3393,7 +3408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
3393
3408
  type: Injectable
3394
3409
  }] });
3395
3410
 
3396
- const moment$a = momentImported;
3411
+ const moment$2 = momentNamespace;
3397
3412
  // @dynamic
3398
3413
  class SharedValidators {
3399
3414
  static getDoubleRegexp(maxDecimals) {
@@ -3474,7 +3489,7 @@ class SharedValidators {
3474
3489
  }
3475
3490
  static validDate(control) {
3476
3491
  const value = control.value;
3477
- const date = !value || moment$a.isMoment(value) ? value : moment$a(value, DATE_ISO_PATTERN);
3492
+ const date = !value || isMoment(value) ? value : moment$2(value, DATE_ISO_PATTERN);
3478
3493
  if (date && (!date.isValid() || date.year() < 1970)) {
3479
3494
  return { validDate: true };
3480
3495
  }
@@ -5711,7 +5726,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
5711
5726
  }]
5712
5727
  }] });
5713
5728
 
5714
- const moment$9 = momentImported;
5715
5729
  const DEFAULT_VALUE_ACCESSOR$5 = {
5716
5730
  provide: NG_VALUE_ACCESSOR,
5717
5731
  useExisting: forwardRef(() => MatDate),
@@ -5893,7 +5907,7 @@ class MatDate {
5893
5907
  // No value, but mobile mode: use the current date
5894
5908
  if (!value && this.mobile) {
5895
5909
  this._writing = true;
5896
- value = DateUtils.resetTime(moment$9().locale(this.locale), this.timezone);
5910
+ value = DateUtils.resetTime(DateUtils.moment().locale(this.locale), this.timezone);
5897
5911
  this.formControl.setValue(value, { emitEvent: false });
5898
5912
  this.markForCheck();
5899
5913
  this._writing = false;
@@ -6072,7 +6086,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
6072
6086
  args: ['matInput', { static: false }]
6073
6087
  }] } });
6074
6088
 
6075
- const moment$8 = momentImported;
6076
6089
  const DEFAULT_VALUE_ACCESSOR$4 = {
6077
6090
  provide: NG_VALUE_ACCESSOR,
6078
6091
  useExisting: forwardRef(() => MatDateTime),
@@ -6267,7 +6280,7 @@ class MatDateTime {
6267
6280
  // No value, but mobile mode: use the current date
6268
6281
  if (!value && this.mobile) {
6269
6282
  this._writing = true;
6270
- value = DateUtils.resetTime(moment$8().locale(this.locale));
6283
+ value = DateUtils.resetTime(DateUtils.moment().locale(this.locale));
6271
6284
  this.formControl.setValue(value, { emitEvent: false });
6272
6285
  this.markForCheck();
6273
6286
  this._writing = false;
@@ -13126,7 +13139,6 @@ Peer = Peer_1 = __decorate([
13126
13139
  EntityClass({ typename: 'PeerVO' })
13127
13140
  ], Peer);
13128
13141
 
13129
- const moment$7 = momentImported;
13130
13142
  const SETTINGS_STORAGE_KEY = 'settings';
13131
13143
  const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
13132
13144
  // fixme: this constant points to static environment
@@ -13364,11 +13376,11 @@ class LocalSettingsService extends StartableService {
13364
13376
  if (!feature) {
13365
13377
  feature = {
13366
13378
  name: featureName.toLowerCase(),
13367
- lastSyncDate: moment$7().toISOString()
13379
+ lastSyncDate: DateUtils.moment().toISOString()
13368
13380
  };
13369
13381
  }
13370
13382
  else {
13371
- feature.lastSyncDate = moment$7().toISOString();
13383
+ feature.lastSyncDate = DateUtils.moment().toISOString();
13372
13384
  }
13373
13385
  this.saveOfflineFeature(feature);
13374
13386
  }
@@ -13529,7 +13541,7 @@ class LocalSettingsService extends StartableService {
13529
13541
  if (!page || !page.title || !page.path)
13530
13542
  throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
13531
13543
  // Set time
13532
- page.time = page.time || moment$7();
13544
+ page.time = page.time || DateUtils.moment();
13533
13545
  // Clean the title (remove <small> tags)
13534
13546
  if (!opts || opts.removeTitleSmallTag !== false) {
13535
13547
  const tagIndex = page.title.indexOf('</small>');
@@ -17573,7 +17585,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
17573
17585
  }] }];
17574
17586
  } });
17575
17587
 
17576
- const moment$6 = momentImported;
17577
17588
  const AndroidOsEnvironment = Object.freeze({
17578
17589
  DIRECTORY_DOWNLOADS: 'Download',
17579
17590
  DIRECTORY_DOWNLOADS_OLD: 'Downloads', // Old name, for older Android version
@@ -17853,16 +17864,16 @@ class PlatformService extends StartableService {
17853
17864
  }
17854
17865
  // config moment lib
17855
17866
  try {
17856
- moment$6.locale(event.lang);
17867
+ locale(event.lang);
17857
17868
  console.debug('[platform] Use locale {' + event.lang + '}');
17858
17869
  }
17859
17870
  // If error, fallback to en
17860
17871
  catch (err) {
17861
- moment$6.locale('en');
17862
- console.warn('[platform] Unknown local for moment lib. Using default [en]');
17872
+ locale('en');
17873
+ console.warn('[platform] Unknown locale for moment lib. Using default [en]');
17863
17874
  }
17864
17875
  // Config date adapter
17865
- this.dateAdapter.setLocale(moment$6.locale());
17876
+ this.dateAdapter.setLocale(locale());
17866
17877
  }
17867
17878
  });
17868
17879
  this.settings.onChange.subscribe(data => {
@@ -29014,7 +29025,7 @@ const SocialErrorCodes = {
29014
29025
  SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
29015
29026
  };
29016
29027
 
29017
- const moment$5 = momentImported;
29028
+ const moment$1 = momentNamespace;
29018
29029
  const APP_USER_EVENT_SERVICE = new InjectionToken('UserEventService');
29019
29030
  class AbstractUserEventService extends BaseGraphqlService {
29020
29031
  constructor(graphql, accountService, network, translate, options) {
@@ -29390,7 +29401,7 @@ class AbstractUserEventService extends BaseGraphqlService {
29390
29401
  }
29391
29402
  resetCount() {
29392
29403
  this._countSubject.next(undefined);
29393
- this.resetCountDate = moment$5();
29404
+ this.resetCountDate = DateUtils.moment();
29394
29405
  // restart listening count changes
29395
29406
  this.startListenCountChanges();
29396
29407
  }
@@ -29449,7 +29460,7 @@ class AbstractUserEventService extends BaseGraphqlService {
29449
29460
  if (!userEvents.length)
29450
29461
  return;
29451
29462
  // set read date
29452
- userEvents.forEach(userEvent => userEvent.readDate = moment$5());
29463
+ userEvents.forEach(userEvent => userEvent.readDate = DateUtils.moment());
29453
29464
  // split local/remote entities
29454
29465
  const localEntities = userEvents.filter(EntityUtils.isLocal);
29455
29466
  const remoteEntities = userEvents.filter(EntityUtils.isRemote);
@@ -31301,13 +31312,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
31301
31312
  args: [{ selector: 'app-latlong-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Lat/Long field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!-- Empty value -->\n <form *ngIf=\"form|formGetGroup:'empty' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <ion-row><ion-col><ion-text><h4>Empty, with defaults</h4></ion-text></ion-col></ion-row>\n\n <ion-row >\n\n <!-- DD Default sign -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Format DD, defaultSign '-'\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(formGroup.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DD\"\n defaultSign=\"-\"\n placeholder=\"Latitude\">\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DD\"\n defaultSign=\"-\"\n placeholder=\"Longitude\">\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix\n (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMM Default sign -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Format DDMM, defaultSign '+'\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(formGroup.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n defaultSign=\"+\"\n placeholder=\"Latitude\">\n\n <mat-icon matPrefix >room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix\n (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n defaultSign=\"+\"\n placeholder=\"Longitude\">\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix\n (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n </form>\n\n <form *ngIf=\"form|formGetGroup:'enable' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <!-- With value -->\n <ion-row><ion-col><ion-text><h4>With value</h4></ion-text></ion-col></ion-row>\n\n <ion-row>\n\n <!-- DD -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Format DD\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(formGroup.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DD\"\n placeholder=\"Latitude\">\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DD\"\n placeholder=\"Longitude\">\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMMSS -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Format DDMM\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(formGroup.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\">\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Longitude\">\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n\n <!-- DDMMSS -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Format DDMMSS\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(formGroup.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMMSS\"\n placeholder=\"Latitude\">\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMMSS\"\n placeholder=\"Longitude\">\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <!-- Disable -->\n <form *ngIf=\"form|formGetGroup:'disable' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <ion-row><ion-col><ion-text><h4>Disabled control</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(formGroup.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\">\n <mat-icon matPrefix>room</mat-icon>\n <mat-icon matSuffix>gps_fixed</mat-icon>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Longitude\">\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix\n (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly (control is enable)\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n </mat-checkbox>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field #readonlyField [formControl]=\"form|formGetControl: 'enable.latitude'\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [readonly]=\"true\">\n <mat-icon matPrefix>room</mat-icon>\n <mat-icon matSuffix>gps_fixed</mat-icon>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n </form>\n\n</ion-content>\n" }]
31302
31313
  }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }]; } });
31303
31314
 
31304
- const moment$4 = momentImported;
31305
31315
  class SwipeTestPage {
31306
31316
  constructor(formBuilder, dateFormatPipe) {
31307
31317
  this.formBuilder = formBuilder;
31308
31318
  this.dateFormatPipe = dateFormatPipe;
31309
31319
  this.$dates = new BehaviorSubject(undefined);
31310
- this._today = moment$4().startOf('day');
31320
+ this._today = DateUtils.moment().startOf('day');
31311
31321
  this.form = formBuilder.group({
31312
31322
  empty: [null, Validators.required],
31313
31323
  date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
@@ -31320,7 +31330,7 @@ class SwipeTestPage {
31320
31330
  ngOnInit() {
31321
31331
  const dates = [];
31322
31332
  for (let d = 0; d < 7; d++) {
31323
- dates[d] = moment$4(this._today).add(d - 3, 'day');
31333
+ dates[d] = DateUtils.moment(this._today).add(d - 3, 'day');
31324
31334
  }
31325
31335
  this.$dates.next(dates);
31326
31336
  this.loadData();
@@ -31357,7 +31367,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
31357
31367
  args: [{ selector: 'app-swipe-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Swipe test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <h1>Swipe page:</h1>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <ion-grid>\n\n <ion-row>\n <!-- empty -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field formControlName=\"empty\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [tabindex]=\"1\"\n [debug]=\"true\"\n >\n </mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- date -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Date\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field formControlName=\"date\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"2\"\n [debug]=\"true\"\n >\n </mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled empty\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field formControlName=\"disabledEmpty\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"3\"\n [debug]=\"true\"\n >\n </mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n<!-- read-only-->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled with date\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field formControlName=\"disabledDate\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"4\"\n [debug]=\"true\"\n >\n </mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n" }]
31358
31368
  }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }, { type: DateFormatPipe }]; } });
31359
31369
 
31360
- const moment$3 = momentImported;
31361
31370
  class DateTimeTestPage {
31362
31371
  constructor(platform, formBuilder, cd) {
31363
31372
  this.platform = platform;
@@ -31391,7 +31400,7 @@ class DateTimeTestPage {
31391
31400
  // Load the form with data
31392
31401
  loadData() {
31393
31402
  return __awaiter(this, void 0, void 0, function* () {
31394
- const now = moment$3();
31403
+ const now = DateUtils.moment();
31395
31404
  const data = {
31396
31405
  empty: null,
31397
31406
  emptyRequired: null,
@@ -31631,7 +31640,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
31631
31640
  args: [{ selector: 'app-numpad-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Numeric pad test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <h1>Numpad test page:</h1>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <ion-grid>\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Decimal field, readonly\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-form-field >\n <input matInput type=\"text\" formControlName=\"empty\" placeholder=\"Empty decimal field\"\n autocomplete=\"off\"\n [matNumpad]=\"numpadDecimal\"\n readonly>\n <mat-numpad [decimal]=\"true\" #numpadDecimal></mat-numpad>\n </mat-form-field>\n\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- filled -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Integer field\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-form-field >\n <input matInput type=\"number\" formControlName=\"integer\" placeholder=\"Filled integer field\"\n autocomplete=\"off\"\n [matNumpad]=\"numpadInteger\">\n <mat-numpad #numpadInteger [decimal]=\"false\"></mat-numpad>\n\n </mat-form-field>\n\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- append to input -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Attach to input, readonly\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-form-field >\n <input matInput type=\"text\" formControlName=\"integer\" placeholder=\"A number\"\n autocomplete=\"off\"\n [matNumpad]=\"numpadAppendToInput\"\n readonly>\n <mat-numpad #numpadAppendToInput [appendToInput]=\"true\"></mat-numpad>\n </mat-form-field>\n\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-form-field >\n <input matInput type=\"number\" formControlName=\"disable\" placeholder=\"Disabled field\"\n autocomplete=\"off\"\n [matNumpad]=\"numpadDisabled\">\n <mat-numpad #numpadDisabled></mat-numpad>\n </mat-form-field>\n\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n <!-- Other field (for comparision) -->\n <ion-row><ion-col><ion-text><h4>Other field type (for style comparision)</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Mat date time\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"datetime\" placeholder=\"Date/Time field (desktop)\">\n </mat-date-time-field>\n\n <mat-date-time-field formControlName=\"datetime\"\n placeholder=\"Date/Time field (mobile)\"\n [mobile]=\"true\">\n </mat-date-time-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </form>\n\n</ion-content>\n" }]
31632
31641
  }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }]; } });
31633
31642
 
31634
- const moment$2 = momentImported;
31635
31643
  class DateTestPage {
31636
31644
  constructor(formBuilder, cd) {
31637
31645
  this.formBuilder = formBuilder;
@@ -31664,7 +31672,7 @@ class DateTestPage {
31664
31672
  // Load the form with data
31665
31673
  loadData() {
31666
31674
  return __awaiter(this, void 0, void 0, function* () {
31667
- const now = moment$2();
31675
+ const now = DateUtils.moment();
31668
31676
  const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
31669
31677
  const data = {
31670
31678
  empty: null,
@@ -31727,7 +31735,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
31727
31735
  args: [{ selector: 'app-data-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Date field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n\n <ion-grid>\n\n <!-- debugging memory leak -->\n <ion-row><ion-col><ion-text><h4>Debug memory leak</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col size=\"auto\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\">Start timer</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\">Stop timer</ion-button>\n </ion-col>\n <ion-col size=\"4\">\n <mat-form-field floatLabel=\"never\">\n <input matInput type=\"text\" hidden>\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n Mobile ?\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n <ion-col>\n <mat-date-field formControlName=\"empty\"\n *ngIf=\"!memoryHide\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"memoryMobile\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-col>\n </ion-row>\n\n <!-- Mobile mode -->\n <ion-row><ion-col><ion-text><h4>Mobile mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"empty\"\n placeholder=\"Date\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value (required)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.emptyRequired.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"emptyRequired\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- TimeZone -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n TimeZone\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>timezone=\"{{timezone}}\" value=\"{{stringify(form.controls.timezone.value)}}\"</pre></small>\n <pre>Should display using the browser TZ,<br/>but serialize/deserialize for the given TZ</pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"timezone\"\n placeholder=\"Date\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [timezone]=\"timezone\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"mobileReadonlyField.readonly=$event.checked\" [checked]=\"mobileReadonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-field #mobileReadonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <!-- debug console -->\n <ion-row>\n <!-- buttons -->\n <ion-col size=\"2\">\n <!-- submit form -->\n <ion-button (click)=\"doSubmit($event)\"\n fill=\"outline\">\n <ion-icon name=\"checkmark\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <!-- clear log -->\n <ion-button (click)=\"clearLogPanel()\"\n fill=\"outline\">\n <ion-icon name=\"trash\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"10\" *ngIf=\"showLogPanel\">\n <ion-text color=\"primary\">Log:<br/></ion-text>\n <div class=\"ion-padding-start\">\n <ion-text color=\"medium\">\n <small [innerHTML]=\"logContent\"></small>\n </ion-text>\n </div>\n </ion-col>\n </ion-row>\n\n <hr/>\n\n <!-- Desktop mode -->\n <ion-row><ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"empty\"\n placeholder=\"Date\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value (required)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.emptyRequired.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"emptyRequired\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"enable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"disable\"\n placeholder=\"Date\"\n [required]=\"true\"\n [mobile]=\"false\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- TimeZone -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n TimeZone\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>timezone=\"{{timezone}}\" value={{stringify(form.controls.timezone.value)}}</pre></small>\n <pre>Should display using the browser TZ,<br/>but serialize/deserialize for the given TZ</pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"timezone\"\n placeholder=\"Date\"\n [mobile]=\"false\"\n [clearable]=\"true\"\n [timezone]=\"timezone\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"desktopReadonlyField.readonly=$event.checked\" [checked]=\"desktopReadonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-field #desktopReadonlyField formControlName=\"readonly\"\n placeholder=\"Date\"\n [readonly]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n\n </form>\n</ion-content>\n" }]
31728
31736
  }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }]; } });
31729
31737
 
31730
- const moment$1 = momentImported;
31731
31738
  class ObservableTestPage {
31732
31739
  constructor() {
31733
31740
  this._stopSubject = new Subject();
@@ -31795,7 +31802,7 @@ class ObservableTestPage {
31795
31802
  this._stopSubject.next();
31796
31803
  }
31797
31804
  log(message, ...args) {
31798
- let fullMessage = `${toDateISOString(moment$1())} - ${message}`;
31805
+ let fullMessage = `${toDateISOString(DateUtils.moment())} - ${message}`;
31799
31806
  if (args === null || args === void 0 ? void 0 : args.length) {
31800
31807
  fullMessage += ' - <small>' + args.map(JSON.stringify).join(', ') + '</small>';
31801
31808
  }
@@ -33230,7 +33237,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
33230
33237
  }] }];
33231
33238
  } });
33232
33239
 
33233
- const moment = momentImported;
33240
+ const moment = momentNamespace;
33234
33241
  class UserEventTestingPage {
33235
33242
  constructor(userEventService, router, alertController, translateService) {
33236
33243
  this.userEventService = userEventService;
@@ -33291,7 +33298,7 @@ class UserEventTestingPage {
33291
33298
  type: 'message',
33292
33299
  level: 'INFO',
33293
33300
  message: 'message test message test message test message test message test message test message test message test',
33294
- creationDate: moment(),
33301
+ creationDate: DateUtils.moment(),
33295
33302
  }));
33296
33303
  }
33297
33304
  addError() {
@@ -33301,7 +33308,7 @@ class UserEventTestingPage {
33301
33308
  type: 'upload',
33302
33309
  level: 'ERROR',
33303
33310
  message: 'message error',
33304
- creationDate: moment(),
33311
+ creationDate: DateUtils.moment(),
33305
33312
  }));
33306
33313
  }
33307
33314
  addWarning() {
@@ -33311,7 +33318,7 @@ class UserEventTestingPage {
33311
33318
  type: 'download',
33312
33319
  level: 'WARNING',
33313
33320
  message: 'message warning',
33314
- creationDate: moment(),
33321
+ creationDate: DateUtils.moment(),
33315
33322
  }));
33316
33323
  }
33317
33324
  addDebug() {
@@ -33321,7 +33328,7 @@ class UserEventTestingPage {
33321
33328
  type: 'debug',
33322
33329
  level: 'DEBUG',
33323
33330
  message: 'message DEBUG',
33324
- creationDate: moment(),
33331
+ creationDate: DateUtils.moment(),
33325
33332
  }));
33326
33333
  }
33327
33334
  addNotificationWithLink() {
@@ -33331,7 +33338,7 @@ class UserEventTestingPage {
33331
33338
  type: 'message',
33332
33339
  level: 'INFO',
33333
33340
  message: 'message with link',
33334
- creationDate: moment(),
33341
+ creationDate: DateUtils.moment(),
33335
33342
  actions: [{
33336
33343
  name: 'click here',
33337
33344
  iconRef: {
@@ -33348,7 +33355,7 @@ class UserEventTestingPage {
33348
33355
  type: 'message',
33349
33356
  level: 'INFO',
33350
33357
  message: 'message with action',
33351
- creationDate: moment(),
33358
+ creationDate: DateUtils.moment(),
33352
33359
  actions: [
33353
33360
  {
33354
33361
  name: 'click here',
@@ -33420,7 +33427,7 @@ class UserEventTestingPage {
33420
33427
  type: 'message',
33421
33428
  level: 'INFO',
33422
33429
  message: 'message with action',
33423
- creationDate: moment(),
33430
+ creationDate: DateUtils.moment(),
33424
33431
  actions: [
33425
33432
  {
33426
33433
  default: true,
@@ -33572,5 +33579,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
33572
33579
  * Generated bundle index. Do not edit.
33573
33580
  */
33574
33581
 
33575
- export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_JOB_PROGRESSION_SERVICE, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_STORAGE, APP_TESTING_PAGES, APP_USER_EVENT_SERVICE, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, AdminUsersModule, Alerts, AndroidOsEnvironment, AnimationState, AppAboutModalModule, AppAccountModule, AppAuthForm, AppAuthModal, AppAuthModule, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppEntityFormModule, AppForm, AppFormButtonsBarModule, AppFormField, AppFormModule, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppHomePageModule, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppInMemoryTable, AppInstallUpgradeCard, AppInstallUpgradeCardModule, AppListForm, AppListFormModule, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppPropertiesFormModule, AppRegisterModule, AppSelectPeerModule, AppSettingsPageModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableModule, AppTableUtils, AppTextPopoverModule, AppUpdateOfflineModeCard, AppUpdateOfflineModeCardModule, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayJoinPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthGuardService, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, BadgeDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTestPage, DateTimeTestPage, DateUtils, DebugComponent, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ED25519_SEED_LENGTH, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments, GalleryTestPage, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, ImageAttachment, ImageAttachmentFilter, ImageAttachmentService, ImageGalleryModule, ImageGalleryTestingModule, ImageModule, ImageService, ImagesUtils, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, Job, JobModule, JobProgression, JobProgressionIcon, JobProgressionList, JobProgressionService, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, 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, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatAutocompleteFieldUtils, MatBooleanField, MatChipsField, MatColorPipe, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuOptions, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, NumpadTestPage, ObservableTestPage, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertiesFormTestPage, PropertiesFormTestingModule, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, RegisterForm, RegisterModal, ResizableComponent, ResizableDirective, ResizableModule, SCRYPT_PARAMS, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedBadgeModule, SharedDebugModule, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedToolbarModule, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, StartableService, StatusById, StatusIds, StatusList, StorageDrivers, StorageService, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, ToastTestingModule, ToastTestingPage, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEventModule, UserEventNotificationIcon, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UsersPage, ZERO_PLACEHOLDER_CHAR, accountToString, adaptValueToControl, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, 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, isAndroid, isBlankString, isCapacitor, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, patchValueInArray, propertiesPathComparator, propertyComparator, propertyPathComparator, pushValueInArray, 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, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
33582
+ export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_JOB_PROGRESSION_SERVICE, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_STORAGE, APP_TESTING_PAGES, APP_USER_EVENT_SERVICE, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, AdminUsersModule, Alerts, AndroidOsEnvironment, AnimationState, AppAboutModalModule, AppAccountModule, AppAuthForm, AppAuthModal, AppAuthModule, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppEntityFormModule, AppForm, AppFormButtonsBarModule, AppFormField, AppFormModule, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppHomePageModule, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppInMemoryTable, AppInstallUpgradeCard, AppInstallUpgradeCardModule, AppListForm, AppListFormModule, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppPropertiesFormModule, AppRegisterModule, AppSelectPeerModule, AppSettingsPageModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableModule, AppTableUtils, AppTextPopoverModule, AppUpdateOfflineModeCard, AppUpdateOfflineModeCardModule, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayJoinPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthGuardService, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, BadgeDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTestPage, DateTimeTestPage, DateUtils, DebugComponent, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ED25519_SEED_LENGTH, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments, GalleryTestPage, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, ImageAttachment, ImageAttachmentFilter, ImageAttachmentService, ImageGalleryModule, ImageGalleryTestingModule, ImageModule, ImageService, ImagesUtils, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, Job, JobModule, JobProgression, JobProgressionIcon, JobProgressionList, JobProgressionService, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, 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, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatAutocompleteFieldUtils, MatBooleanField, MatChipsField, MatColorPipe, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuOptions, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, NumpadTestPage, ObservableTestPage, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertiesFormTestPage, PropertiesFormTestingModule, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, RegisterForm, RegisterModal, ResizableComponent, ResizableDirective, ResizableModule, SCRYPT_PARAMS, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedBadgeModule, SharedDebugModule, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedToolbarModule, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, StartableService, StatusById, StatusIds, StatusList, StorageDrivers, StorageService, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, ToastTestingModule, ToastTestingPage, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEventModule, UserEventNotificationIcon, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UsersPage, ZERO_PLACEHOLDER_CHAR, accountToString, adaptValueToControl, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, 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, isAndroid, isBlankString, isCapacitor, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$3 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, patchValueInArray, propertiesPathComparator, propertyComparator, propertyPathComparator, pushValueInArray, 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, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
33576
33583
  //# sourceMappingURL=sumaris-net.ngx-components.mjs.map