@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.
@@ -65,8 +65,8 @@ import { Capacitor } from '@capacitor/core';
65
65
  import { Keyboard } from '@capacitor/keyboard';
66
66
  import * as i1$1 from '@ngx-translate/core';
67
67
  import { TranslateModule, TranslateService } from '@ngx-translate/core';
68
- import * as momentImported from 'moment';
69
- import { isMoment } from 'moment';
68
+ import * as momentNamespace from 'moment';
69
+ import { isMoment, locale } from 'moment';
70
70
  import * as i1 from '@angular/material-moment-adapter';
71
71
  import { MatMomentDateModule } from '@angular/material-moment-adapter';
72
72
  import 'moment-timezone';
@@ -2530,7 +2530,153 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
2530
2530
  type: Input
2531
2531
  }] } });
2532
2532
 
2533
- const moment$c = momentImported;
2533
+ const DATE_UNIX_TIMESTAMP = 'X';
2534
+ const DATE_UNIX_MS_TIMESTAMP = 'x';
2535
+ const MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
2536
+ class DateUtils {
2537
+ static isEsModule(value) {
2538
+ return value && value['__esModule'] === true;
2539
+ }
2540
+ static get moment() {
2541
+ if (this.__momentResolved)
2542
+ return this.__momentResolved;
2543
+ if (this.isEsModule(momentNamespace)) {
2544
+ this.__momentResolved = momentNamespace.default;
2545
+ return this.__momentResolved;
2546
+ }
2547
+ if (typeof moment$3['isMoment'] === 'function') {
2548
+ this.__momentResolved = momentNamespace;
2549
+ return this.__momentResolved;
2550
+ }
2551
+ throw Error('Cannot find a valid \'moment\' namespace');
2552
+ }
2553
+ static min(date1, date2) {
2554
+ return date1 && (!date2 || date1.isSameOrBefore(date2)) ? date1 : date2;
2555
+ }
2556
+ static max(date1, date2) {
2557
+ return date1 && (!date2 || date1.isSameOrAfter(date2)) ? date1 : date2;
2558
+ }
2559
+ static equals(date1, date2) {
2560
+ return DateUtils.isSame(date1, date2);
2561
+ }
2562
+ static isSame(date1, date2, granularity) {
2563
+ const d1 = fromDateISOString(date1);
2564
+ const d2 = fromDateISOString(date2);
2565
+ return (!d1 && !d2) || d1.isSame(d2, granularity);
2566
+ }
2567
+ /**
2568
+ * Create a copy of a date, without time fields (always return a new Moment object, or undefined).
2569
+ * Same implementation as the Java class Dates.resetTime() (see any SUMARiS like Pod)
2570
+ * @param value
2571
+ * @param timezone a timezone (see https://momentjs.com/timezone/)
2572
+ * @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.
2573
+ */
2574
+ static resetTime(value, timezone, keepLocalTime) {
2575
+ if (!value)
2576
+ return undefined;
2577
+ const date = fromDateISOString(value);
2578
+ // No timezone
2579
+ if (!timezone) {
2580
+ return date.clone().startOf('day');
2581
+ }
2582
+ // Use timezone
2583
+ return date.clone() // clone the original date
2584
+ .tz(timezone, keepLocalTime)
2585
+ .startOf('day');
2586
+ }
2587
+ static markNoTime(value) {
2588
+ if (!value)
2589
+ return undefined;
2590
+ value[MOMENT_NO_TIME_PROPERTY] = true;
2591
+ return value;
2592
+ }
2593
+ static isNoTime(value) {
2594
+ return value?.[MOMENT_NO_TIME_PROPERTY] === true;
2595
+ }
2596
+ /**
2597
+ * Test if a date is on the given day of week
2598
+ * @param date
2599
+ * @param weekday
2600
+ * @param timezone
2601
+ */
2602
+ static isAtDay(date, weekday, timezone) {
2603
+ let momentDate = date && fromDateISOString(date);
2604
+ if (!momentDate)
2605
+ return null;
2606
+ if (timezone)
2607
+ momentDate = momentDate.clone().tz(timezone).startOf('day');
2608
+ return momentDate.day() === weekday;
2609
+ }
2610
+ }
2611
+ DateUtils.toDateISOString = toDateISOString;
2612
+ DateUtils.fromDateISOString = fromDateISOString;
2613
+ DateUtils.toDuration = toDuration;
2614
+ function toDateISOString(value) {
2615
+ if (!value)
2616
+ return undefined;
2617
+ // Already a valid ISO date time string (without timezone): use it
2618
+ if (typeof value === 'string'
2619
+ && value.indexOf('+') === -1
2620
+ && value.lastIndexOf('Z') === value.length - 1) {
2621
+ return value;
2622
+ }
2623
+ // Make sure to have a Moment object
2624
+ const date = fromDateISOString(value);
2625
+ if (!date)
2626
+ return undefined;
2627
+ return DateUtils.isNoTime(date)
2628
+ ? date.toISOString(true /* important ! */).substr(0, 10)
2629
+ : date.toISOString();
2630
+ }
2631
+ function fromDateISOString(value) {
2632
+ // Already a moment object: use it
2633
+ if (!value || isMoment(value))
2634
+ return value;
2635
+ if (typeof value === 'string' && value.length === 10) {
2636
+ // Parse the input value, as a date only
2637
+ const dateOnly = DateUtils.moment(value, DATE_PATTERN);
2638
+ if (dateOnly.isValid())
2639
+ return DateUtils.markNoTime(dateOnly);
2640
+ }
2641
+ // Parse the input value, as a ISO date time
2642
+ const date = DateUtils.moment(value, DATE_ISO_PATTERN);
2643
+ if (date.isValid())
2644
+ return date;
2645
+ // Not valid: trying to convert from unix timestamp
2646
+ if (typeof value === 'string') {
2647
+ console.warn('Wrong date format - Trying to convert from local time: ' + value);
2648
+ if (value.length === 10) {
2649
+ return DateUtils.moment(value, DATE_UNIX_TIMESTAMP);
2650
+ }
2651
+ else if (value.length === 13) {
2652
+ return DateUtils.moment(value, DATE_UNIX_MS_TIMESTAMP);
2653
+ }
2654
+ }
2655
+ console.warn('Unable to parse date: ' + value);
2656
+ return undefined;
2657
+ }
2658
+ function fromUnixTimestamp(timeInSec) {
2659
+ return DateUtils.moment(timeInSec, DATE_UNIX_TIMESTAMP);
2660
+ }
2661
+ function fromUnixMsTimestamp(timeInMs) {
2662
+ return DateUtils.moment(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2663
+ }
2664
+ function toDuration(value, unit) {
2665
+ if (!value)
2666
+ return undefined;
2667
+ const duration = DateUtils.moment.duration(value, unit);
2668
+ // fix 990+ ms
2669
+ if (duration.milliseconds() >= 990) {
2670
+ duration.add(1000 - duration.milliseconds(), 'ms');
2671
+ }
2672
+ // fix 59 s
2673
+ if (duration.seconds() >= 59) {
2674
+ duration.add(60 - duration.seconds(), 's');
2675
+ }
2676
+ return duration;
2677
+ }
2678
+ const moment$3 = DateUtils.moment;
2679
+
2534
2680
  class DateDiffDurationPipe {
2535
2681
  constructor(dateAdapter, translate) {
2536
2682
  this.dateAdapter = dateAdapter;
@@ -2546,11 +2692,11 @@ class DateDiffDurationPipe {
2546
2692
  return this.format(startDate, endDate, args);
2547
2693
  }
2548
2694
  format(startDate, endDate, args) {
2549
- const duration = moment$c.duration(endDate.diff(startDate));
2695
+ const duration = DateUtils.moment.duration(endDate.diff(startDate));
2550
2696
  if (duration.asMinutes() < 0)
2551
2697
  return '';
2552
2698
  const withSeconds = args?.seconds;
2553
- const timeDuration = moment$c(0)
2699
+ const timeDuration = DateUtils.moment(0)
2554
2700
  .hour(duration.hours())
2555
2701
  .minute(duration.minutes());
2556
2702
  if (withSeconds) {
@@ -2991,137 +3137,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
2991
3137
  args: [{ name: 'fileSize' }]
2992
3138
  }] });
2993
3139
 
2994
- const moment$b = momentImported;
2995
- const DATE_UNIX_TIMESTAMP = 'X';
2996
- const DATE_UNIX_MS_TIMESTAMP = 'x';
2997
- const MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
2998
- class DateUtils {
2999
- static min(date1, date2) {
3000
- return date1 && (!date2 || date1.isSameOrBefore(date2)) ? date1 : date2;
3001
- }
3002
- static max(date1, date2) {
3003
- return date1 && (!date2 || date1.isSameOrAfter(date2)) ? date1 : date2;
3004
- }
3005
- static equals(date1, date2) {
3006
- return DateUtils.isSame(date1, date2);
3007
- }
3008
- static isSame(date1, date2, granularity) {
3009
- const d1 = fromDateISOString(date1);
3010
- const d2 = fromDateISOString(date2);
3011
- return (!d1 && !d2) || d1.isSame(d2, granularity);
3012
- }
3013
- /**
3014
- * Create a copy of a date, without time fields (always return a new Moment object, or undefined).
3015
- * Same implementation as the Java class Dates.resetTime() (see any SUMARiS like Pod)
3016
- * @param value
3017
- * @param timezone a timezone (see https://momentjs.com/timezone/)
3018
- * @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.
3019
- */
3020
- static resetTime(value, timezone, keepLocalTime) {
3021
- if (!value)
3022
- return undefined;
3023
- const date = fromDateISOString(value);
3024
- // No timezone
3025
- if (!timezone) {
3026
- return date.clone().startOf('day');
3027
- }
3028
- // Use timezone
3029
- return date.clone() // clone the original date
3030
- .tz(timezone, keepLocalTime)
3031
- .startOf('day');
3032
- }
3033
- static markNoTime(value) {
3034
- if (!value)
3035
- return undefined;
3036
- value[MOMENT_NO_TIME_PROPERTY] = true;
3037
- return value;
3038
- }
3039
- static isNoTime(value) {
3040
- return value?.[MOMENT_NO_TIME_PROPERTY] === true;
3041
- }
3042
- /**
3043
- * Test if a date is on the given day of week
3044
- * @param date
3045
- * @param weekday
3046
- * @param timezone
3047
- */
3048
- static isAtDay(date, weekday, timezone) {
3049
- let momentDate = date && fromDateISOString(date);
3050
- if (!momentDate)
3051
- return null;
3052
- if (timezone)
3053
- momentDate = momentDate.clone().tz(timezone).startOf('day');
3054
- return momentDate.day() === weekday;
3055
- }
3056
- }
3057
- DateUtils.toDateISOString = toDateISOString;
3058
- DateUtils.fromDateISOString = fromDateISOString;
3059
- DateUtils.toDuration = toDuration;
3060
- function toDateISOString(value) {
3061
- if (!value)
3062
- return undefined;
3063
- // Already a valid ISO date time string (without timezone): use it
3064
- if (typeof value === 'string'
3065
- && value.indexOf('+') === -1
3066
- && value.lastIndexOf('Z') === value.length - 1) {
3067
- return value;
3068
- }
3069
- // Make sure to have a Moment object
3070
- const date = fromDateISOString(value);
3071
- if (!date)
3072
- return undefined;
3073
- return DateUtils.isNoTime(date)
3074
- ? date.toISOString(true /* important ! */).substr(0, 10)
3075
- : date.toISOString();
3076
- }
3077
- function fromDateISOString(value) {
3078
- // Already a moment object: use it
3079
- if (!value || isMoment(value))
3080
- return value;
3081
- if (typeof value === 'string' && value.length === 10) {
3082
- // Parse the input value, as a date only
3083
- const dateOnly = moment$b(value, DATE_PATTERN);
3084
- if (dateOnly.isValid())
3085
- return DateUtils.markNoTime(dateOnly);
3086
- }
3087
- // Parse the input value, as a ISO date time
3088
- const date = moment$b(value, DATE_ISO_PATTERN);
3089
- if (date.isValid())
3090
- return date;
3091
- // Not valid: trying to convert from unix timestamp
3092
- if (typeof value === 'string') {
3093
- console.warn('Wrong date format - Trying to convert from local time: ' + value);
3094
- if (value.length === 10) {
3095
- return moment$b(value, DATE_UNIX_TIMESTAMP);
3096
- }
3097
- else if (value.length === 13) {
3098
- return moment$b(value, DATE_UNIX_MS_TIMESTAMP);
3099
- }
3100
- }
3101
- console.warn('Unable to parse date: ' + value);
3102
- return undefined;
3103
- }
3104
- function fromUnixTimestamp(timeInSec) {
3105
- return moment$b(timeInSec, DATE_UNIX_TIMESTAMP);
3106
- }
3107
- function fromUnixMsTimestamp(timeInMs) {
3108
- return moment$b(timeInMs, DATE_UNIX_MS_TIMESTAMP);
3109
- }
3110
- function toDuration(value, unit) {
3111
- if (!value)
3112
- return undefined;
3113
- const duration = moment$b.duration(value, unit);
3114
- // fix 990+ ms
3115
- if (duration.milliseconds() >= 990) {
3116
- duration.add(1000 - duration.milliseconds(), 'ms');
3117
- }
3118
- // fix 59 s
3119
- if (duration.seconds() >= 59) {
3120
- duration.add(60 - duration.seconds(), 's');
3121
- }
3122
- return duration;
3123
- }
3124
-
3125
3140
  class DurationPipe {
3126
3141
  constructor(translate) {
3127
3142
  this.translate = translate;
@@ -3385,7 +3400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
3385
3400
  type: Injectable
3386
3401
  }] });
3387
3402
 
3388
- const moment$a = momentImported;
3403
+ const moment$2 = momentNamespace;
3389
3404
  // @dynamic
3390
3405
  class SharedValidators {
3391
3406
  static getDoubleRegexp(maxDecimals) {
@@ -3466,7 +3481,7 @@ class SharedValidators {
3466
3481
  }
3467
3482
  static validDate(control) {
3468
3483
  const value = control.value;
3469
- const date = !value || moment$a.isMoment(value) ? value : moment$a(value, DATE_ISO_PATTERN);
3484
+ const date = !value || isMoment(value) ? value : moment$2(value, DATE_ISO_PATTERN);
3470
3485
  if (date && (!date.isValid() || date.year() < 1970)) {
3471
3486
  return { validDate: true };
3472
3487
  }
@@ -5723,7 +5738,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
5723
5738
  }]
5724
5739
  }] });
5725
5740
 
5726
- const moment$9 = momentImported;
5727
5741
  const DEFAULT_VALUE_ACCESSOR$5 = {
5728
5742
  provide: NG_VALUE_ACCESSOR,
5729
5743
  useExisting: forwardRef(() => MatDate),
@@ -5905,7 +5919,7 @@ class MatDate {
5905
5919
  // No value, but mobile mode: use the current date
5906
5920
  if (!value && this.mobile) {
5907
5921
  this._writing = true;
5908
- value = DateUtils.resetTime(moment$9().locale(this.locale), this.timezone);
5922
+ value = DateUtils.resetTime(DateUtils.moment().locale(this.locale), this.timezone);
5909
5923
  this.formControl.setValue(value, { emitEvent: false });
5910
5924
  this.markForCheck();
5911
5925
  this._writing = false;
@@ -6083,7 +6097,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
6083
6097
  args: ['matInput', { static: false }]
6084
6098
  }] } });
6085
6099
 
6086
- const moment$8 = momentImported;
6087
6100
  const DEFAULT_VALUE_ACCESSOR$4 = {
6088
6101
  provide: NG_VALUE_ACCESSOR,
6089
6102
  useExisting: forwardRef(() => MatDateTime),
@@ -6278,7 +6291,7 @@ class MatDateTime {
6278
6291
  // No value, but mobile mode: use the current date
6279
6292
  if (!value && this.mobile) {
6280
6293
  this._writing = true;
6281
- value = DateUtils.resetTime(moment$8().locale(this.locale));
6294
+ value = DateUtils.resetTime(DateUtils.moment().locale(this.locale));
6282
6295
  this.formControl.setValue(value, { emitEvent: false });
6283
6296
  this.markForCheck();
6284
6297
  this._writing = false;
@@ -13005,7 +13018,6 @@ Peer = Peer_1 = __decorate([
13005
13018
  EntityClass({ typename: 'PeerVO' })
13006
13019
  ], Peer);
13007
13020
 
13008
- const moment$7 = momentImported;
13009
13021
  const SETTINGS_STORAGE_KEY = 'settings';
13010
13022
  const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
13011
13023
  // fixme: this constant points to static environment
@@ -13233,11 +13245,11 @@ class LocalSettingsService extends StartableService {
13233
13245
  if (!feature) {
13234
13246
  feature = {
13235
13247
  name: featureName.toLowerCase(),
13236
- lastSyncDate: moment$7().toISOString()
13248
+ lastSyncDate: DateUtils.moment().toISOString()
13237
13249
  };
13238
13250
  }
13239
13251
  else {
13240
- feature.lastSyncDate = moment$7().toISOString();
13252
+ feature.lastSyncDate = DateUtils.moment().toISOString();
13241
13253
  }
13242
13254
  this.saveOfflineFeature(feature);
13243
13255
  }
@@ -13392,7 +13404,7 @@ class LocalSettingsService extends StartableService {
13392
13404
  if (!page || !page.title || !page.path)
13393
13405
  throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
13394
13406
  // Set time
13395
- page.time = page.time || moment$7();
13407
+ page.time = page.time || DateUtils.moment();
13396
13408
  // Clean the title (remove <small> tags)
13397
13409
  if (!opts || opts.removeTitleSmallTag !== false) {
13398
13410
  const tagIndex = page.title.indexOf('</small>');
@@ -17309,7 +17321,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
17309
17321
  args: [APP_CONFIG_OPTIONS]
17310
17322
  }] }]; } });
17311
17323
 
17312
- const moment$6 = momentImported;
17313
17324
  const AndroidOsEnvironment = Object.freeze({
17314
17325
  DIRECTORY_DOWNLOADS: 'Download',
17315
17326
  DIRECTORY_DOWNLOADS_OLD: 'Downloads', // Old name, for older Android version
@@ -17595,16 +17606,16 @@ class PlatformService extends StartableService {
17595
17606
  }
17596
17607
  // config moment lib
17597
17608
  try {
17598
- moment$6.locale(event.lang);
17609
+ locale(event.lang);
17599
17610
  console.debug('[platform] Use locale {' + event.lang + '}');
17600
17611
  }
17601
17612
  // If error, fallback to en
17602
17613
  catch (err) {
17603
- moment$6.locale('en');
17604
- console.warn('[platform] Unknown local for moment lib. Using default [en]');
17614
+ locale('en');
17615
+ console.warn('[platform] Unknown locale for moment lib. Using default [en]');
17605
17616
  }
17606
17617
  // Config date adapter
17607
- this.dateAdapter.setLocale(moment$6.locale());
17618
+ this.dateAdapter.setLocale(locale());
17608
17619
  }
17609
17620
  });
17610
17621
  this.settings.onChange.subscribe(data => {
@@ -28383,7 +28394,7 @@ const SocialErrorCodes = {
28383
28394
  SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
28384
28395
  };
28385
28396
 
28386
- const moment$5 = momentImported;
28397
+ const moment$1 = momentNamespace;
28387
28398
  const APP_USER_EVENT_SERVICE = new InjectionToken('UserEventService');
28388
28399
  class AbstractUserEventService extends BaseGraphqlService {
28389
28400
  constructor(graphql, accountService, network, translate, options) {
@@ -28743,7 +28754,7 @@ class AbstractUserEventService extends BaseGraphqlService {
28743
28754
  }
28744
28755
  resetCount() {
28745
28756
  this._countSubject.next(undefined);
28746
- this.resetCountDate = moment$5();
28757
+ this.resetCountDate = DateUtils.moment();
28747
28758
  // restart listening count changes
28748
28759
  this.startListenCountChanges();
28749
28760
  }
@@ -28795,7 +28806,7 @@ class AbstractUserEventService extends BaseGraphqlService {
28795
28806
  if (!userEvents.length)
28796
28807
  return;
28797
28808
  // set read date
28798
- userEvents.forEach(userEvent => userEvent.readDate = moment$5());
28809
+ userEvents.forEach(userEvent => userEvent.readDate = DateUtils.moment());
28799
28810
  // split local/remote entities
28800
28811
  const localEntities = userEvents.filter(EntityUtils.isLocal);
28801
28812
  const remoteEntities = userEvents.filter(EntityUtils.isRemote);
@@ -30600,13 +30611,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
30600
30611
  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" }]
30601
30612
  }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }]; } });
30602
30613
 
30603
- const moment$4 = momentImported;
30604
30614
  class SwipeTestPage {
30605
30615
  constructor(formBuilder, dateFormatPipe) {
30606
30616
  this.formBuilder = formBuilder;
30607
30617
  this.dateFormatPipe = dateFormatPipe;
30608
30618
  this.$dates = new BehaviorSubject(undefined);
30609
- this._today = moment$4().startOf('day');
30619
+ this._today = DateUtils.moment().startOf('day');
30610
30620
  this.form = formBuilder.group({
30611
30621
  empty: [null, Validators.required],
30612
30622
  date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
@@ -30619,7 +30629,7 @@ class SwipeTestPage {
30619
30629
  ngOnInit() {
30620
30630
  const dates = [];
30621
30631
  for (let d = 0; d < 7; d++) {
30622
- dates[d] = moment$4(this._today).add(d - 3, 'day');
30632
+ dates[d] = DateUtils.moment(this._today).add(d - 3, 'day');
30623
30633
  }
30624
30634
  this.$dates.next(dates);
30625
30635
  this.loadData();
@@ -30654,7 +30664,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
30654
30664
  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" }]
30655
30665
  }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }, { type: DateFormatPipe }]; } });
30656
30666
 
30657
- const moment$3 = momentImported;
30658
30667
  class DateTimeTestPage {
30659
30668
  constructor(platform, formBuilder, cd) {
30660
30669
  this.platform = platform;
@@ -30687,7 +30696,7 @@ class DateTimeTestPage {
30687
30696
  }
30688
30697
  // Load the form with data
30689
30698
  async loadData() {
30690
- const now = moment$3();
30699
+ const now = DateUtils.moment();
30691
30700
  const data = {
30692
30701
  empty: null,
30693
30702
  emptyRequired: null,
@@ -30921,7 +30930,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
30921
30930
  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" }]
30922
30931
  }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }]; } });
30923
30932
 
30924
- const moment$2 = momentImported;
30925
30933
  class DateTestPage {
30926
30934
  constructor(formBuilder, cd) {
30927
30935
  this.formBuilder = formBuilder;
@@ -30953,7 +30961,7 @@ class DateTestPage {
30953
30961
  }
30954
30962
  // Load the form with data
30955
30963
  async loadData() {
30956
- const now = moment$2();
30964
+ const now = DateUtils.moment();
30957
30965
  const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
30958
30966
  const data = {
30959
30967
  empty: null,
@@ -31015,7 +31023,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
31015
31023
  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" }]
31016
31024
  }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }]; } });
31017
31025
 
31018
- const moment$1 = momentImported;
31019
31026
  class ObservableTestPage {
31020
31027
  constructor() {
31021
31028
  this._stopSubject = new Subject();
@@ -31083,7 +31090,7 @@ class ObservableTestPage {
31083
31090
  this._stopSubject.next();
31084
31091
  }
31085
31092
  log(message, ...args) {
31086
- let fullMessage = `${toDateISOString(moment$1())} - ${message}`;
31093
+ let fullMessage = `${toDateISOString(DateUtils.moment())} - ${message}`;
31087
31094
  if (args?.length) {
31088
31095
  fullMessage += ' - <small>' + args.map(JSON.stringify).join(', ') + '</small>';
31089
31096
  }
@@ -32511,7 +32518,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
32511
32518
  args: [ENVIRONMENT]
32512
32519
  }] }]; } });
32513
32520
 
32514
- const moment = momentImported;
32521
+ const moment = momentNamespace;
32515
32522
  class UserEventTestingPage {
32516
32523
  constructor(userEventService, router, alertController, translateService) {
32517
32524
  this.userEventService = userEventService;
@@ -32572,7 +32579,7 @@ class UserEventTestingPage {
32572
32579
  type: 'message',
32573
32580
  level: 'INFO',
32574
32581
  message: 'message test message test message test message test message test message test message test message test',
32575
- creationDate: moment(),
32582
+ creationDate: DateUtils.moment(),
32576
32583
  }));
32577
32584
  }
32578
32585
  addError() {
@@ -32582,7 +32589,7 @@ class UserEventTestingPage {
32582
32589
  type: 'upload',
32583
32590
  level: 'ERROR',
32584
32591
  message: 'message error',
32585
- creationDate: moment(),
32592
+ creationDate: DateUtils.moment(),
32586
32593
  }));
32587
32594
  }
32588
32595
  addWarning() {
@@ -32592,7 +32599,7 @@ class UserEventTestingPage {
32592
32599
  type: 'download',
32593
32600
  level: 'WARNING',
32594
32601
  message: 'message warning',
32595
- creationDate: moment(),
32602
+ creationDate: DateUtils.moment(),
32596
32603
  }));
32597
32604
  }
32598
32605
  addDebug() {
@@ -32602,7 +32609,7 @@ class UserEventTestingPage {
32602
32609
  type: 'debug',
32603
32610
  level: 'DEBUG',
32604
32611
  message: 'message DEBUG',
32605
- creationDate: moment(),
32612
+ creationDate: DateUtils.moment(),
32606
32613
  }));
32607
32614
  }
32608
32615
  addNotificationWithLink() {
@@ -32612,7 +32619,7 @@ class UserEventTestingPage {
32612
32619
  type: 'message',
32613
32620
  level: 'INFO',
32614
32621
  message: 'message with link',
32615
- creationDate: moment(),
32622
+ creationDate: DateUtils.moment(),
32616
32623
  actions: [{
32617
32624
  name: 'click here',
32618
32625
  iconRef: {
@@ -32629,7 +32636,7 @@ class UserEventTestingPage {
32629
32636
  type: 'message',
32630
32637
  level: 'INFO',
32631
32638
  message: 'message with action',
32632
- creationDate: moment(),
32639
+ creationDate: DateUtils.moment(),
32633
32640
  actions: [
32634
32641
  {
32635
32642
  name: 'click here',
@@ -32699,7 +32706,7 @@ class UserEventTestingPage {
32699
32706
  type: 'message',
32700
32707
  level: 'INFO',
32701
32708
  message: 'message with action',
32702
- creationDate: moment(),
32709
+ creationDate: DateUtils.moment(),
32703
32710
  actions: [
32704
32711
  {
32705
32712
  default: true,
@@ -32849,5 +32856,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
32849
32856
  * Generated bundle index. Do not edit.
32850
32857
  */
32851
32858
 
32852
- 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 };
32859
+ 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 };
32853
32860
  //# sourceMappingURL=sumaris-net.ngx-components.mjs.map