@sumaris-net/ngx-components 2.0.0-rc11 → 2.0.0-rc13
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.
- package/esm2020/src/app/core/services/account.service.mjs +18 -19
- package/esm2020/src/app/core/services/base-graphql-service.class.mjs +5 -5
- package/esm2020/src/app/core/services/base58.mjs +2 -2
- package/esm2020/src/app/core/services/crypto.service.mjs +79 -94
- package/esm2020/src/app/core/services/local-settings.service.mjs +2 -3
- package/esm2020/src/app/core/services/model/peer.model.mjs +3 -3
- package/esm2020/src/app/core/services/platform.service.mjs +2 -3
- package/esm2020/src/app/core/table/table.class.mjs +4 -12
- package/esm2020/src/app/shared/dates.mjs +2 -3
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +2 -3
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +2 -3
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +2 -3
- package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +2 -3
- package/esm2020/src/app/shared/validator/validators.mjs +2 -3
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +2 -3
- package/esm2020/src/app/social/user-event/user-event.service.mjs +2 -3
- package/esm2020/src/app/vendor.mjs +3 -5
- package/fesm2015/sumaris-net.ngx-components.mjs +132 -161
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +127 -164
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +2 -1
- package/src/app/core/services/account.service.d.ts +5 -6
- package/src/app/core/services/base-graphql-service.class.d.ts +9 -8
- package/src/app/core/services/crypto.service.d.ts +23 -18
- package/src/app/core/table/table.class.d.ts +2 -6
- package/src/app/shared/dates.d.ts +2 -3
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -2
- package/src/app/vendor.d.ts +0 -2
|
@@ -69,14 +69,12 @@ import * as momentImported from 'moment';
|
|
|
69
69
|
import { isMoment } from 'moment';
|
|
70
70
|
import * as i1 from '@angular/material-moment-adapter';
|
|
71
71
|
import { MatMomentDateModule } from '@angular/material-moment-adapter';
|
|
72
|
-
import
|
|
73
|
-
import { TextMaskModule } from 'angular2-text-mask';
|
|
74
|
-
import { sign, box, hash, verify } from 'tweetnacl';
|
|
75
|
-
import 'tweetnacl-util';
|
|
76
|
-
import 'scrypt-async';
|
|
72
|
+
import { decodeUTF8, encodeBase64, decodeBase64 } from 'tweetnacl-util';
|
|
77
73
|
import 'hammerjs';
|
|
78
74
|
import * as momentTZImported from 'moment-timezone';
|
|
79
75
|
import * as uuidv4Imported from 'uuid/v4';
|
|
76
|
+
import * as i11$1 from 'angular2-text-mask';
|
|
77
|
+
import { TextMaskModule } from 'angular2-text-mask';
|
|
80
78
|
import * as i10 from '@angular/material/datepicker';
|
|
81
79
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
82
80
|
import * as i12 from 'ngx-material-timepicker';
|
|
@@ -114,6 +112,12 @@ import * as i3 from '@ionic/storage-angular';
|
|
|
114
112
|
import { IonicStorageModule } from '@ionic/storage-angular';
|
|
115
113
|
import * as i7$2 from '@awesome-cordova-plugins/network/ngx';
|
|
116
114
|
import { Connection } from '@awesome-cordova-plugins/network/ngx';
|
|
115
|
+
import { scryptEncode } from '@polkadot/util-crypto/scrypt/encode';
|
|
116
|
+
import { cryptoWaitReady, ed25519PairFromSeed, ed25519Sign, ed25519Verify } from '@polkadot/util-crypto';
|
|
117
|
+
import { sha512 } from '@noble/hashes/sha512';
|
|
118
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
119
|
+
import { utils } from '@noble/ed25519';
|
|
120
|
+
import { bytesToHex } from '@noble/hashes/utils';
|
|
117
121
|
import * as i5$1 from 'ionic-cache';
|
|
118
122
|
import { CacheModule } from 'ionic-cache';
|
|
119
123
|
import { ApolloLink, NetworkStatus, InMemoryCache, ApolloClient, gql } from '@apollo/client/core';
|
|
@@ -2527,7 +2531,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
2527
2531
|
type: Input
|
|
2528
2532
|
}] } });
|
|
2529
2533
|
|
|
2530
|
-
const moment
|
|
2534
|
+
const moment = momentImported;
|
|
2535
|
+
const tz = momentTZImported;
|
|
2536
|
+
const uuidv4 = uuidv4Imported;
|
|
2537
|
+
|
|
2531
2538
|
class DateDiffDurationPipe {
|
|
2532
2539
|
constructor(dateAdapter, translate) {
|
|
2533
2540
|
this.dateAdapter = dateAdapter;
|
|
@@ -2543,11 +2550,11 @@ class DateDiffDurationPipe {
|
|
|
2543
2550
|
return this.format(startDate, endDate, args);
|
|
2544
2551
|
}
|
|
2545
2552
|
format(startDate, endDate, args) {
|
|
2546
|
-
const duration = moment
|
|
2553
|
+
const duration = moment.duration(endDate.diff(startDate));
|
|
2547
2554
|
if (duration.asMinutes() < 0)
|
|
2548
2555
|
return '';
|
|
2549
2556
|
const withSeconds = args?.seconds;
|
|
2550
|
-
const timeDuration = moment
|
|
2557
|
+
const timeDuration = moment(0)
|
|
2551
2558
|
.hour(duration.hours())
|
|
2552
2559
|
.minute(duration.minutes());
|
|
2553
2560
|
if (withSeconds) {
|
|
@@ -2988,7 +2995,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
2988
2995
|
args: [{ name: 'fileSize' }]
|
|
2989
2996
|
}] });
|
|
2990
2997
|
|
|
2991
|
-
const moment$9 = momentImported;
|
|
2992
2998
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2993
2999
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
2994
3000
|
const MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
|
|
@@ -3077,37 +3083,37 @@ function fromDateISOString(value) {
|
|
|
3077
3083
|
return value;
|
|
3078
3084
|
if (typeof value === 'string' && value.length === 10) {
|
|
3079
3085
|
// Parse the input value, as a date only
|
|
3080
|
-
const dateOnly = moment
|
|
3086
|
+
const dateOnly = moment(value, DATE_PATTERN);
|
|
3081
3087
|
if (dateOnly.isValid())
|
|
3082
3088
|
return DateUtils.markNoTime(dateOnly);
|
|
3083
3089
|
}
|
|
3084
3090
|
// Parse the input value, as a ISO date time
|
|
3085
|
-
const date = moment
|
|
3091
|
+
const date = moment(value, DATE_ISO_PATTERN);
|
|
3086
3092
|
if (date.isValid())
|
|
3087
3093
|
return date;
|
|
3088
3094
|
// Not valid: trying to convert from unix timestamp
|
|
3089
3095
|
if (typeof value === 'string') {
|
|
3090
3096
|
console.warn('Wrong date format - Trying to convert from local time: ' + value);
|
|
3091
3097
|
if (value.length === 10) {
|
|
3092
|
-
return moment
|
|
3098
|
+
return moment(value, DATE_UNIX_TIMESTAMP);
|
|
3093
3099
|
}
|
|
3094
3100
|
else if (value.length === 13) {
|
|
3095
|
-
return moment
|
|
3101
|
+
return moment(value, DATE_UNIX_MS_TIMESTAMP);
|
|
3096
3102
|
}
|
|
3097
3103
|
}
|
|
3098
3104
|
console.warn('Unable to parse date: ' + value);
|
|
3099
3105
|
return undefined;
|
|
3100
3106
|
}
|
|
3101
3107
|
function fromUnixTimestamp(timeInSec) {
|
|
3102
|
-
return moment
|
|
3108
|
+
return moment(timeInSec, DATE_UNIX_TIMESTAMP);
|
|
3103
3109
|
}
|
|
3104
3110
|
function fromUnixMsTimestamp(timeInMs) {
|
|
3105
|
-
return moment
|
|
3111
|
+
return moment(timeInMs, DATE_UNIX_MS_TIMESTAMP);
|
|
3106
3112
|
}
|
|
3107
3113
|
function toDuration(value, unit) {
|
|
3108
3114
|
if (!value)
|
|
3109
3115
|
return undefined;
|
|
3110
|
-
const duration = moment
|
|
3116
|
+
const duration = moment.duration(value, unit);
|
|
3111
3117
|
// fix 990+ ms
|
|
3112
3118
|
if (duration.milliseconds() >= 990) {
|
|
3113
3119
|
duration.add(1000 - duration.milliseconds(), 'ms');
|
|
@@ -3382,7 +3388,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
3382
3388
|
type: Injectable
|
|
3383
3389
|
}] });
|
|
3384
3390
|
|
|
3385
|
-
const moment$8 = momentImported;
|
|
3386
3391
|
// @dynamic
|
|
3387
3392
|
class SharedValidators {
|
|
3388
3393
|
static getDoubleRegexp(maxDecimals) {
|
|
@@ -3463,7 +3468,7 @@ class SharedValidators {
|
|
|
3463
3468
|
}
|
|
3464
3469
|
static validDate(control) {
|
|
3465
3470
|
const value = control.value;
|
|
3466
|
-
const date = !value || moment
|
|
3471
|
+
const date = !value || moment.isMoment(value) ? value : moment(value, DATE_ISO_PATTERN);
|
|
3467
3472
|
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
3468
3473
|
return { validDate: true };
|
|
3469
3474
|
}
|
|
@@ -5720,10 +5725,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
5720
5725
|
}]
|
|
5721
5726
|
}] });
|
|
5722
5727
|
|
|
5723
|
-
const moment$7 = momentImported;
|
|
5724
|
-
const tz = momentTZImported;
|
|
5725
|
-
const uuidv4 = uuidv4Imported;
|
|
5726
|
-
|
|
5727
5728
|
const DEFAULT_VALUE_ACCESSOR$5 = {
|
|
5728
5729
|
provide: NG_VALUE_ACCESSOR,
|
|
5729
5730
|
useExisting: forwardRef(() => MatDate),
|
|
@@ -5905,7 +5906,7 @@ class MatDate {
|
|
|
5905
5906
|
// No value, but mobile mode: use the current date
|
|
5906
5907
|
if (!value && this.mobile) {
|
|
5907
5908
|
this._writing = true;
|
|
5908
|
-
value = DateUtils.resetTime(moment
|
|
5909
|
+
value = DateUtils.resetTime(moment().locale(this.locale), this.timezone);
|
|
5909
5910
|
this.formControl.setValue(value, { emitEvent: false });
|
|
5910
5911
|
this.markForCheck();
|
|
5911
5912
|
this._writing = false;
|
|
@@ -6277,7 +6278,7 @@ class MatDateTime {
|
|
|
6277
6278
|
// No value, but mobile mode: use the current date
|
|
6278
6279
|
if (!value && this.mobile) {
|
|
6279
6280
|
this._writing = true;
|
|
6280
|
-
value = DateUtils.resetTime(moment
|
|
6281
|
+
value = DateUtils.resetTime(moment().locale(this.locale));
|
|
6281
6282
|
this.formControl.setValue(value, { emitEvent: false });
|
|
6282
6283
|
this.markForCheck();
|
|
6283
6284
|
this._writing = false;
|
|
@@ -12949,7 +12950,7 @@ let Peer = Peer_1 = class Peer extends Entity {
|
|
|
12949
12950
|
}
|
|
12950
12951
|
static parseUrl(peerUrl) {
|
|
12951
12952
|
const url = new URL(peerUrl);
|
|
12952
|
-
return
|
|
12953
|
+
return this.fromObject({
|
|
12953
12954
|
dns: url.hostname,
|
|
12954
12955
|
port: isNilOrBlank(url.port) ? undefined : url.port,
|
|
12955
12956
|
useSsl: url.protocol && (url.protocol.startsWith('https') || url.protocol.startsWith('wss')),
|
|
@@ -12967,7 +12968,7 @@ let Peer = Peer_1 = class Peer extends Entity {
|
|
|
12967
12968
|
return path.substring(1);
|
|
12968
12969
|
return path;
|
|
12969
12970
|
}).filter(isNotNilOrBlank);
|
|
12970
|
-
return [noTrailingSlash(
|
|
12971
|
+
return [noTrailingSlash(this.fromObject(peer).url)].concat(...paths).join('/');
|
|
12971
12972
|
}
|
|
12972
12973
|
asObject(options) {
|
|
12973
12974
|
return super.asObject(options);
|
|
@@ -13003,7 +13004,6 @@ Peer = Peer_1 = __decorate([
|
|
|
13003
13004
|
EntityClass({ typename: 'PeerVO' })
|
|
13004
13005
|
], Peer);
|
|
13005
13006
|
|
|
13006
|
-
const moment$6 = momentImported;
|
|
13007
13007
|
const SETTINGS_STORAGE_KEY = 'settings';
|
|
13008
13008
|
const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
|
|
13009
13009
|
// fixme: this constant points to static environment
|
|
@@ -13231,11 +13231,11 @@ class LocalSettingsService extends StartableService {
|
|
|
13231
13231
|
if (!feature) {
|
|
13232
13232
|
feature = {
|
|
13233
13233
|
name: featureName.toLowerCase(),
|
|
13234
|
-
lastSyncDate: moment
|
|
13234
|
+
lastSyncDate: moment().toISOString()
|
|
13235
13235
|
};
|
|
13236
13236
|
}
|
|
13237
13237
|
else {
|
|
13238
|
-
feature.lastSyncDate = moment
|
|
13238
|
+
feature.lastSyncDate = moment().toISOString();
|
|
13239
13239
|
}
|
|
13240
13240
|
this.saveOfflineFeature(feature);
|
|
13241
13241
|
}
|
|
@@ -13390,7 +13390,7 @@ class LocalSettingsService extends StartableService {
|
|
|
13390
13390
|
if (!page || !page.title || !page.path)
|
|
13391
13391
|
throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
|
|
13392
13392
|
// Set time
|
|
13393
|
-
page.time = page.time || moment
|
|
13393
|
+
page.time = page.time || moment();
|
|
13394
13394
|
// Clean the title (remove <small> tags)
|
|
13395
13395
|
if (!opts || opts.removeTitleSmallTag !== false) {
|
|
13396
13396
|
const tagIndex = page.title.indexOf('</small>');
|
|
@@ -13771,7 +13771,7 @@ class Base58 {
|
|
|
13771
13771
|
}
|
|
13772
13772
|
static decode(string) {
|
|
13773
13773
|
if (string.length === 0)
|
|
13774
|
-
return (new Uint8Array());
|
|
13774
|
+
return (new Uint8Array(0));
|
|
13775
13775
|
const input = string.split('').map(function (c) {
|
|
13776
13776
|
return Base58.getAlphabetMap()[c];
|
|
13777
13777
|
});
|
|
@@ -13802,124 +13802,103 @@ class Base58 {
|
|
|
13802
13802
|
}
|
|
13803
13803
|
Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
13804
13804
|
|
|
13805
|
-
const
|
|
13806
|
-
const
|
|
13807
|
-
|
|
13808
|
-
|
|
13809
|
-
|
|
13810
|
-
|
|
13811
|
-
|
|
13812
|
-
|
|
13813
|
-
|
|
13814
|
-
|
|
13815
|
-
|
|
13816
|
-
|
|
13817
|
-
|
|
13818
|
-
|
|
13819
|
-
|
|
13820
|
-
|
|
13821
|
-
|
|
13822
|
-
|
|
13823
|
-
|
|
13824
|
-
|
|
13825
|
-
|
|
13826
|
-
|
|
13827
|
-
|
|
13828
|
-
|
|
13829
|
-
|
|
13830
|
-
|
|
13831
|
-
N: 16384,
|
|
13832
|
-
r: 32,
|
|
13833
|
-
p: 2,
|
|
13834
|
-
memory: -1 // default
|
|
13835
|
-
},
|
|
13836
|
-
HARDEST: {
|
|
13837
|
-
N: 65536,
|
|
13838
|
-
r: 32,
|
|
13839
|
-
p: 4,
|
|
13840
|
-
memory: -1 // default
|
|
13841
|
-
},
|
|
13842
|
-
EXTREME: {
|
|
13843
|
-
N: 262144,
|
|
13844
|
-
r: 64,
|
|
13845
|
-
p: 8,
|
|
13846
|
-
memory: -1 // default
|
|
13847
|
-
}
|
|
13848
|
-
}
|
|
13805
|
+
const ED25519_SEED_LENGTH = 32; // Length of a ED25519 seed
|
|
13806
|
+
const SCRYPT_PARAMS = {
|
|
13807
|
+
SIMPLE: {
|
|
13808
|
+
N: 2048,
|
|
13809
|
+
r: 8,
|
|
13810
|
+
p: 1
|
|
13811
|
+
},
|
|
13812
|
+
DEFAULT: {
|
|
13813
|
+
N: 4096,
|
|
13814
|
+
r: 16,
|
|
13815
|
+
p: 1
|
|
13816
|
+
},
|
|
13817
|
+
SECURE: {
|
|
13818
|
+
N: 16384,
|
|
13819
|
+
r: 32,
|
|
13820
|
+
p: 2
|
|
13821
|
+
},
|
|
13822
|
+
HARDEST: {
|
|
13823
|
+
N: 65536,
|
|
13824
|
+
r: 32,
|
|
13825
|
+
p: 4
|
|
13826
|
+
},
|
|
13827
|
+
EXTREME: {
|
|
13828
|
+
N: 262144,
|
|
13829
|
+
r: 64,
|
|
13830
|
+
p: 8
|
|
13849
13831
|
}
|
|
13850
13832
|
};
|
|
13851
13833
|
class CryptoService {
|
|
13834
|
+
static get started() {
|
|
13835
|
+
return this._ready;
|
|
13836
|
+
}
|
|
13837
|
+
static async ready() {
|
|
13838
|
+
if (this._ready)
|
|
13839
|
+
return; // OK
|
|
13840
|
+
await cryptoWaitReady();
|
|
13841
|
+
this._ready = true;
|
|
13842
|
+
}
|
|
13852
13843
|
/**
|
|
13853
|
-
* Generate sign keypair,
|
|
13844
|
+
* Generate a sign keypair, using scrypt, from a salt and a password
|
|
13854
13845
|
*
|
|
13855
13846
|
* @param salt
|
|
13856
13847
|
* @param password
|
|
13857
13848
|
* @param scryptParams
|
|
13858
13849
|
*/
|
|
13859
|
-
scryptKeypair(salt, password, scryptParams) {
|
|
13860
|
-
|
|
13861
|
-
|
|
13862
|
-
|
|
13863
|
-
|
|
13864
|
-
|
|
13865
|
-
|
|
13866
|
-
|
|
13867
|
-
}, function (derivedKey) {
|
|
13868
|
-
resolve(derivedKey);
|
|
13869
|
-
});
|
|
13870
|
-
})
|
|
13871
|
-
.then((seed) => {
|
|
13872
|
-
const byteseed = nacl.util.decodeBase64(seed);
|
|
13873
|
-
const signKeypair = nacl.sign.keyPair.fromSeed(byteseed);
|
|
13874
|
-
return {
|
|
13875
|
-
publicKey: signKeypair.publicKey,
|
|
13876
|
-
secretKey: signKeypair.secretKey
|
|
13877
|
-
};
|
|
13878
|
-
});
|
|
13850
|
+
static async scryptKeypair(salt, password, scryptParams) {
|
|
13851
|
+
if (!this.started)
|
|
13852
|
+
await this.ready();
|
|
13853
|
+
const passwordU8a = decodeUTF8(password);
|
|
13854
|
+
const saltU8a = decodeUTF8(salt);
|
|
13855
|
+
const result = scryptEncode(passwordU8a, saltU8a, scryptParams || SCRYPT_PARAMS.DEFAULT);
|
|
13856
|
+
const seed = result.password.slice(0, ED25519_SEED_LENGTH);
|
|
13857
|
+
return ed25519PairFromSeed(seed);
|
|
13879
13858
|
}
|
|
13880
13859
|
/**
|
|
13881
13860
|
* Sign a message, from a key pair
|
|
13882
13861
|
*/
|
|
13883
|
-
sign(message, keypair) {
|
|
13884
|
-
|
|
13885
|
-
|
|
13886
|
-
|
|
13887
|
-
|
|
13888
|
-
|
|
13889
|
-
sig[i] = signedMsg[i];
|
|
13890
|
-
const signature = nacl.util.encodeBase64(sig);
|
|
13891
|
-
resolve(signature);
|
|
13892
|
-
});
|
|
13862
|
+
static async sign(message, keypair) {
|
|
13863
|
+
if (!this.started)
|
|
13864
|
+
await this.ready();
|
|
13865
|
+
const m = decodeUTF8(message);
|
|
13866
|
+
const sig = ed25519Sign(m, keypair);
|
|
13867
|
+
return encodeBase64(sig);
|
|
13893
13868
|
}
|
|
13894
13869
|
/**
|
|
13895
13870
|
* Sign a message, from a key pair
|
|
13896
13871
|
*/
|
|
13897
|
-
verify(message, signature,
|
|
13898
|
-
|
|
13899
|
-
|
|
13900
|
-
|
|
13901
|
-
|
|
13902
|
-
|
|
13903
|
-
|
|
13904
|
-
});
|
|
13872
|
+
static async verify(message, signature, publicKey) {
|
|
13873
|
+
if (!this.started)
|
|
13874
|
+
await this.ready();
|
|
13875
|
+
const m = decodeUTF8(message);
|
|
13876
|
+
const sig = decodeBase64(signature);
|
|
13877
|
+
const pub = Base58.decode(publicKey);
|
|
13878
|
+
return ed25519Verify(m, sig, pub);
|
|
13905
13879
|
}
|
|
13906
13880
|
/**
|
|
13907
|
-
* Hash (using SHA256) a message
|
|
13881
|
+
* Hash (using SHA256) a message, as Hex
|
|
13908
13882
|
*/
|
|
13909
|
-
sha256(message) {
|
|
13910
|
-
|
|
13883
|
+
static sha256(message) {
|
|
13884
|
+
const m = decodeUTF8(message);
|
|
13885
|
+
const bytes = sha256(utils.concatBytes(m));
|
|
13886
|
+
return bytesToHex(bytes);
|
|
13911
13887
|
}
|
|
13912
13888
|
/**
|
|
13913
|
-
* Hash (using SHA512) a message
|
|
13889
|
+
* Hash (using SHA512) a message, as Hex
|
|
13914
13890
|
*/
|
|
13915
|
-
sha512(message) {
|
|
13916
|
-
|
|
13891
|
+
static sha512(message) {
|
|
13892
|
+
const m = decodeUTF8(message);
|
|
13893
|
+
const bytes = sha512(utils.concatBytes(m));
|
|
13894
|
+
return bytesToHex(bytes);
|
|
13917
13895
|
}
|
|
13918
|
-
encodeBase64(message) {
|
|
13919
|
-
const m =
|
|
13920
|
-
return
|
|
13896
|
+
static encodeBase64(message) {
|
|
13897
|
+
const m = decodeUTF8(message);
|
|
13898
|
+
return encodeBase64(m);
|
|
13921
13899
|
}
|
|
13922
13900
|
}
|
|
13901
|
+
CryptoService._ready = false;
|
|
13923
13902
|
CryptoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: CryptoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
13924
13903
|
CryptoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: CryptoService, providedIn: 'root' });
|
|
13925
13904
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: CryptoService, decorators: [{
|
|
@@ -15616,7 +15595,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
15616
15595
|
args: [APP_GRAPHQL_TYPE_POLICIES]
|
|
15617
15596
|
}] }]; } });
|
|
15618
15597
|
|
|
15619
|
-
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
15620
15598
|
class BaseGraphqlServiceOptions {
|
|
15621
15599
|
}
|
|
15622
15600
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
@@ -15689,7 +15667,7 @@ class BaseGraphqlService extends StartableService {
|
|
|
15689
15667
|
queries.forEach(query => {
|
|
15690
15668
|
if (Array.isArray(opts.data)) {
|
|
15691
15669
|
// Filter values, if a filter function exists
|
|
15692
|
-
const data = query.insertFilterFn ? opts.data.filter(
|
|
15670
|
+
const data = query.insertFilterFn ? opts.data.filter(d => query.insertFilterFn(d)) : opts.data;
|
|
15693
15671
|
if (isNotEmptyArray(data)) {
|
|
15694
15672
|
if (this._debug)
|
|
15695
15673
|
console.debug(`[base-data-service] Inserting data into watching query: `, query.id);
|
|
@@ -15765,8 +15743,8 @@ class BaseGraphqlService extends StartableService {
|
|
|
15765
15743
|
}
|
|
15766
15744
|
/* -- protected methods -- */
|
|
15767
15745
|
computeMutableWatchQueryId(opts) {
|
|
15768
|
-
const queryName = opts.queryName || sha256(
|
|
15769
|
-
const variablesKey = opts.variables && sha256(
|
|
15746
|
+
const queryName = opts.queryName || CryptoService.sha256(JSON.stringify(opts.query)).substring(0, 8);
|
|
15747
|
+
const variablesKey = opts.variables && CryptoService.sha256(JSON.stringify(opts.variables)).substring(0, 8) || '';
|
|
15770
15748
|
return [queryName, opts.arrayFieldName, variablesKey].join('|');
|
|
15771
15749
|
}
|
|
15772
15750
|
findMutableWatchQueries(opts) {
|
|
@@ -15946,9 +15924,8 @@ const AccountSubscriptions = {
|
|
|
15946
15924
|
}`
|
|
15947
15925
|
};
|
|
15948
15926
|
class AccountService extends BaseGraphqlService {
|
|
15949
|
-
constructor(
|
|
15927
|
+
constructor(network, graphql, settings, storage, file, translate, toastController, environment) {
|
|
15950
15928
|
super(graphql, environment);
|
|
15951
|
-
this.cryptoService = cryptoService;
|
|
15952
15929
|
this.network = network;
|
|
15953
15930
|
this.graphql = graphql;
|
|
15954
15931
|
this.settings = settings;
|
|
@@ -16134,7 +16111,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
16134
16111
|
this._cache.loaded = false;
|
|
16135
16112
|
const now = Date.now();
|
|
16136
16113
|
try {
|
|
16137
|
-
const keypair = await
|
|
16114
|
+
const keypair = await CryptoService.scryptKeypair(data.username, data.password);
|
|
16138
16115
|
data.account.pubkey = Base58.encode(keypair.publicKey);
|
|
16139
16116
|
// Default values
|
|
16140
16117
|
data.account.settings = data.account.settings || new UserSettings();
|
|
@@ -16179,7 +16156,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
16179
16156
|
if (!(this._cache.authToken && tokenType === 'basic-and-token')) {
|
|
16180
16157
|
if (!data || !data.username || !data.password)
|
|
16181
16158
|
throw new Error('Missing username and password');
|
|
16182
|
-
this._cache.authBasic =
|
|
16159
|
+
this._cache.authBasic = CryptoService.encodeBase64(`${data.username}:${data.password}`);
|
|
16183
16160
|
}
|
|
16184
16161
|
}
|
|
16185
16162
|
this.onAuthBasicChange.next(this._cache.authBasic);
|
|
@@ -16208,7 +16185,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
16208
16185
|
console.debug('[account] Login...');
|
|
16209
16186
|
let keypair;
|
|
16210
16187
|
try {
|
|
16211
|
-
keypair = await
|
|
16188
|
+
keypair = await CryptoService.scryptKeypair(data.username, data.password);
|
|
16212
16189
|
}
|
|
16213
16190
|
catch (error) {
|
|
16214
16191
|
console.error(error);
|
|
@@ -16809,13 +16786,13 @@ class AccountService extends BaseGraphqlService {
|
|
|
16809
16786
|
if (!data || !data.authChallenge)
|
|
16810
16787
|
throw challengeError; // Should never occur
|
|
16811
16788
|
// Check server signature
|
|
16812
|
-
const signatureOK = await
|
|
16789
|
+
const signatureOK = await CryptoService.verify(data.authChallenge.challenge, data.authChallenge.signature, data.authChallenge.pubkey);
|
|
16813
16790
|
if (!signatureOK) {
|
|
16814
16791
|
console.warn('FIXME: Bad peer signature on auth challenge !', data.authChallenge);
|
|
16815
16792
|
}
|
|
16816
16793
|
// TODO: check server pubkey as a valid certificate
|
|
16817
16794
|
// Do the challenge
|
|
16818
|
-
const signature = await
|
|
16795
|
+
const signature = await CryptoService.sign(data.authChallenge.challenge, this._cache.keypair);
|
|
16819
16796
|
const newToken = `${this._cache.pubkey}:${data.authChallenge.challenge}|${signature}`;
|
|
16820
16797
|
// iterate with the new token
|
|
16821
16798
|
return await this.authenticateAndGetToken(newToken, (counter || 1) + 1 /* increment */);
|
|
@@ -16900,12 +16877,12 @@ class AccountService extends BaseGraphqlService {
|
|
|
16900
16877
|
return Toasts.show(this.toastController, this.translate, opts);
|
|
16901
16878
|
}
|
|
16902
16879
|
}
|
|
16903
|
-
AccountService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AccountService, deps: [{ token:
|
|
16880
|
+
AccountService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AccountService, deps: [{ token: NetworkService }, { token: GraphqlService }, { token: LocalSettingsService }, { token: i3.Storage }, { token: FileService }, { token: i1$1.TranslateService, optional: true }, { token: i2.ToastController, optional: true }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
16904
16881
|
AccountService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AccountService, providedIn: 'root' });
|
|
16905
16882
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AccountService, decorators: [{
|
|
16906
16883
|
type: Injectable,
|
|
16907
16884
|
args: [{ providedIn: 'root', deps: [ENVIRONMENT] }]
|
|
16908
|
-
}], ctorParameters: function () { return [{ type:
|
|
16885
|
+
}], ctorParameters: function () { return [{ type: NetworkService }, { type: GraphqlService }, { type: LocalSettingsService }, { type: i3.Storage }, { type: FileService }, { type: i1$1.TranslateService, decorators: [{
|
|
16909
16886
|
type: Optional
|
|
16910
16887
|
}] }, { type: i2.ToastController, decorators: [{
|
|
16911
16888
|
type: Optional
|
|
@@ -17329,7 +17306,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
17329
17306
|
args: [APP_CONFIG_OPTIONS]
|
|
17330
17307
|
}] }]; } });
|
|
17331
17308
|
|
|
17332
|
-
const moment$5 = momentImported;
|
|
17333
17309
|
const AndroidOsEnvironment = Object.freeze({
|
|
17334
17310
|
DIRECTORY_DOWNLOADS: 'Download',
|
|
17335
17311
|
DIRECTORY_DOWNLOADS_OLD: 'Downloads', // Old name, for older Android version
|
|
@@ -17615,16 +17591,16 @@ class PlatformService extends StartableService {
|
|
|
17615
17591
|
}
|
|
17616
17592
|
// config moment lib
|
|
17617
17593
|
try {
|
|
17618
|
-
moment
|
|
17594
|
+
moment.locale(event.lang);
|
|
17619
17595
|
console.debug('[platform] Use locale {' + event.lang + '}');
|
|
17620
17596
|
}
|
|
17621
17597
|
// If error, fallback to en
|
|
17622
17598
|
catch (err) {
|
|
17623
|
-
moment
|
|
17599
|
+
moment.locale('en');
|
|
17624
17600
|
console.warn('[platform] Unknown local for moment lib. Using default [en]');
|
|
17625
17601
|
}
|
|
17626
17602
|
// Config date adapter
|
|
17627
|
-
this.dateAdapter.setLocale(moment
|
|
17603
|
+
this.dateAdapter.setLocale(moment.locale());
|
|
17628
17604
|
}
|
|
17629
17605
|
});
|
|
17630
17606
|
this.settings.onChange.subscribe(data => {
|
|
@@ -24640,7 +24616,6 @@ class AppTable {
|
|
|
24640
24616
|
this.defaultPageSize = DEFAULT_PAGE_SIZE;
|
|
24641
24617
|
this.defaultPageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS;
|
|
24642
24618
|
this.onRefresh = new EventEmitter();
|
|
24643
|
-
this.onOpenIdAndRow = new EventEmitter();
|
|
24644
24619
|
this.onOpenRow = new EventEmitter();
|
|
24645
24620
|
this.onNewRow = new EventEmitter();
|
|
24646
24621
|
this.onStartEditingRow = new EventEmitter();
|
|
@@ -25056,8 +25031,8 @@ class AppTable {
|
|
|
25056
25031
|
}
|
|
25057
25032
|
}
|
|
25058
25033
|
confirmAndAdd(event, row) {
|
|
25059
|
-
if (
|
|
25060
|
-
return false;
|
|
25034
|
+
if (!this.confirmEditCreate(event, row)) {
|
|
25035
|
+
return Promise.resolve(false);
|
|
25061
25036
|
}
|
|
25062
25037
|
// Add row
|
|
25063
25038
|
return this.addRow(event);
|
|
@@ -25708,11 +25683,6 @@ class AppTable {
|
|
|
25708
25683
|
if (this.debug && this.dirty) {
|
|
25709
25684
|
console.warn('[table] Opening row details, but table has unsaved changes!');
|
|
25710
25685
|
}
|
|
25711
|
-
if (this.onOpenIdAndRow.observers.length) {
|
|
25712
|
-
console.warn('[table] Detected deprecated use of (onOpenIdAndRow). Please use (onOpenRow) instead');
|
|
25713
|
-
this.onOpenIdAndRow.emit({ id, row });
|
|
25714
|
-
return true;
|
|
25715
|
-
}
|
|
25716
25686
|
if (this.onOpenRow.observers.length) {
|
|
25717
25687
|
this.onOpenRow.emit(row);
|
|
25718
25688
|
return true;
|
|
@@ -26148,7 +26118,7 @@ class AppTable {
|
|
|
26148
26118
|
}
|
|
26149
26119
|
}
|
|
26150
26120
|
AppTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AppTable, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
26151
|
-
AppTable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.5", type: AppTable, inputs: { settingsId: "settingsId", debug: "debug", i18nColumnPrefix: "i18nColumnPrefix", i18nColumnSuffix: "i18nColumnSuffix", autoLoad: "autoLoad", readOnly: "readOnly", inlineEdition: "inlineEdition", focusFirstColumn: "focusFirstColumn", confirmBeforeDelete: "confirmBeforeDelete", confirmBeforeCancel: "confirmBeforeCancel", undoableDeletion: "undoableDeletion", saveBeforeDelete: "saveBeforeDelete", keepEditedRowOnSave: "keepEditedRowOnSave", saveBeforeSort: "saveBeforeSort", saveBeforeFilter: "saveBeforeFilter", propagateRowError: "propagateRowError", defaultSortBy: "defaultSortBy", defaultSortDirection: "defaultSortDirection", defaultPageSize: "defaultPageSize", defaultPageSizeOptions: "defaultPageSizeOptions", focusColumn: "focusColumn", dataSource: "dataSource", filter: "filter", disabled: "disabled", paginator: "paginator" }, outputs: { onRefresh: "onRefresh",
|
|
26121
|
+
AppTable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.5", type: AppTable, inputs: { settingsId: "settingsId", debug: "debug", i18nColumnPrefix: "i18nColumnPrefix", i18nColumnSuffix: "i18nColumnSuffix", autoLoad: "autoLoad", readOnly: "readOnly", inlineEdition: "inlineEdition", focusFirstColumn: "focusFirstColumn", confirmBeforeDelete: "confirmBeforeDelete", confirmBeforeCancel: "confirmBeforeCancel", undoableDeletion: "undoableDeletion", saveBeforeDelete: "saveBeforeDelete", keepEditedRowOnSave: "keepEditedRowOnSave", saveBeforeSort: "saveBeforeSort", saveBeforeFilter: "saveBeforeFilter", propagateRowError: "propagateRowError", defaultSortBy: "defaultSortBy", defaultSortDirection: "defaultSortDirection", defaultPageSize: "defaultPageSize", defaultPageSizeOptions: "defaultPageSizeOptions", focusColumn: "focusColumn", dataSource: "dataSource", filter: "filter", disabled: "disabled", paginator: "paginator" }, outputs: { onRefresh: "onRefresh", onOpenRow: "onOpenRow", onNewRow: "onNewRow", onStartEditingRow: "onStartEditingRow", onConfirmEditCreateRow: "onConfirmEditCreateRow", onCancelOrDeleteRow: "onCancelOrDeleteRow", onBeforeDeleteRows: "onBeforeDeleteRows", onBeforeCancelRows: "onBeforeCancelRows", onBeforeSave: "onBeforeSave", onAfterDeletedRows: "onAfterDeletedRows", onSort: "onSort", onDirty: "onDirty", onError: "onError" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "childPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0 });
|
|
26152
26122
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: AppTable, decorators: [{
|
|
26153
26123
|
type: Directive
|
|
26154
26124
|
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined }, { type: EntitiesTableDataSource }, { type: undefined }]; }, propDecorators: { settingsId: [{
|
|
@@ -26199,8 +26169,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
26199
26169
|
type: Input
|
|
26200
26170
|
}], onRefresh: [{
|
|
26201
26171
|
type: Output
|
|
26202
|
-
}], onOpenIdAndRow: [{
|
|
26203
|
-
type: Output
|
|
26204
26172
|
}], onOpenRow: [{
|
|
26205
26173
|
type: Output
|
|
26206
26174
|
}], onNewRow: [{
|
|
@@ -27986,7 +27954,6 @@ const SocialErrorCodes = {
|
|
|
27986
27954
|
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
|
|
27987
27955
|
};
|
|
27988
27956
|
|
|
27989
|
-
const moment$4 = momentImported;
|
|
27990
27957
|
const APP_USER_EVENT_SERVICE = new InjectionToken('UserEventService');
|
|
27991
27958
|
class AbstractUserEventService extends BaseGraphqlService {
|
|
27992
27959
|
constructor(graphql, accountService, network, translate, options) {
|
|
@@ -28346,7 +28313,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
28346
28313
|
}
|
|
28347
28314
|
resetCount() {
|
|
28348
28315
|
this._countSubject.next(undefined);
|
|
28349
|
-
this.resetCountDate = moment
|
|
28316
|
+
this.resetCountDate = moment();
|
|
28350
28317
|
// restart listening count changes
|
|
28351
28318
|
this.startListenCountChanges();
|
|
28352
28319
|
}
|
|
@@ -28398,7 +28365,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
28398
28365
|
if (!userEvents.length)
|
|
28399
28366
|
return;
|
|
28400
28367
|
// set read date
|
|
28401
|
-
userEvents.forEach(userEvent => userEvent.readDate = moment
|
|
28368
|
+
userEvents.forEach(userEvent => userEvent.readDate = moment());
|
|
28402
28369
|
// split local/remote entities
|
|
28403
28370
|
const localEntities = userEvents.filter(EntityUtils.isLocal);
|
|
28404
28371
|
const remoteEntities = userEvents.filter(EntityUtils.isRemote);
|
|
@@ -30206,13 +30173,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
30206
30173
|
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" }]
|
|
30207
30174
|
}], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }]; } });
|
|
30208
30175
|
|
|
30209
|
-
const moment$3 = momentImported;
|
|
30210
30176
|
class SwipeTestPage {
|
|
30211
30177
|
constructor(formBuilder, dateFormatPipe) {
|
|
30212
30178
|
this.formBuilder = formBuilder;
|
|
30213
30179
|
this.dateFormatPipe = dateFormatPipe;
|
|
30214
30180
|
this.$dates = new BehaviorSubject(undefined);
|
|
30215
|
-
this._today = moment
|
|
30181
|
+
this._today = moment().startOf('day');
|
|
30216
30182
|
this.form = formBuilder.group({
|
|
30217
30183
|
empty: [null, Validators.required],
|
|
30218
30184
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -30225,7 +30191,7 @@ class SwipeTestPage {
|
|
|
30225
30191
|
ngOnInit() {
|
|
30226
30192
|
const dates = [];
|
|
30227
30193
|
for (let d = 0; d < 7; d++) {
|
|
30228
|
-
dates[d] = moment
|
|
30194
|
+
dates[d] = moment(this._today).add(d - 3, 'day');
|
|
30229
30195
|
}
|
|
30230
30196
|
this.$dates.next(dates);
|
|
30231
30197
|
this.loadData();
|
|
@@ -30260,7 +30226,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
30260
30226
|
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" }]
|
|
30261
30227
|
}], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }, { type: DateFormatPipe }]; } });
|
|
30262
30228
|
|
|
30263
|
-
const moment$2 = momentImported;
|
|
30264
30229
|
class DateTimeTestPage {
|
|
30265
30230
|
constructor(platform, formBuilder, cd) {
|
|
30266
30231
|
this.platform = platform;
|
|
@@ -30293,7 +30258,7 @@ class DateTimeTestPage {
|
|
|
30293
30258
|
}
|
|
30294
30259
|
// Load the form with data
|
|
30295
30260
|
async loadData() {
|
|
30296
|
-
const now = moment
|
|
30261
|
+
const now = moment();
|
|
30297
30262
|
const data = {
|
|
30298
30263
|
empty: null,
|
|
30299
30264
|
emptyRequired: null,
|
|
@@ -30527,7 +30492,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
30527
30492
|
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" }]
|
|
30528
30493
|
}], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }]; } });
|
|
30529
30494
|
|
|
30530
|
-
const moment$1 = momentImported;
|
|
30531
30495
|
class DateTestPage {
|
|
30532
30496
|
constructor(formBuilder, cd) {
|
|
30533
30497
|
this.formBuilder = formBuilder;
|
|
@@ -30559,7 +30523,7 @@ class DateTestPage {
|
|
|
30559
30523
|
}
|
|
30560
30524
|
// Load the form with data
|
|
30561
30525
|
async loadData() {
|
|
30562
|
-
const now = moment
|
|
30526
|
+
const now = moment();
|
|
30563
30527
|
const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
|
|
30564
30528
|
const data = {
|
|
30565
30529
|
empty: null,
|
|
@@ -30688,7 +30652,7 @@ class ObservableTestPage {
|
|
|
30688
30652
|
this._stopSubject.next();
|
|
30689
30653
|
}
|
|
30690
30654
|
log(message, ...args) {
|
|
30691
|
-
let fullMessage = `${toDateISOString(moment
|
|
30655
|
+
let fullMessage = `${toDateISOString(moment())} - ${message}`;
|
|
30692
30656
|
if (args?.length) {
|
|
30693
30657
|
fullMessage += ' - <small>' + args.map(JSON.stringify).join(', ') + '</small>';
|
|
30694
30658
|
}
|
|
@@ -32116,7 +32080,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
32116
32080
|
args: [ENVIRONMENT]
|
|
32117
32081
|
}] }]; } });
|
|
32118
32082
|
|
|
32119
|
-
const moment = momentImported;
|
|
32120
32083
|
class UserEventTestingPage {
|
|
32121
32084
|
constructor(userEventService, router, alertController, translateService) {
|
|
32122
32085
|
this.userEventService = userEventService;
|
|
@@ -32454,5 +32417,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
32454
32417
|
* Generated bundle index. Do not edit.
|
|
32455
32418
|
*/
|
|
32456
32419
|
|
|
32457
|
-
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, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppRegisterModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableUtils, AppUpdateOfflineModeCard, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayJoinPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthForm, AuthGuardService, AuthModal, 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, 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, InstallUpgradeCardModule, 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, 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, SelectPeerModule, 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
|
|
32420
|
+
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, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppRegisterModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableUtils, AppUpdateOfflineModeCard, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayJoinPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthForm, AuthGuardService, AuthModal, 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, InstallUpgradeCardModule, 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, SelectPeerModule, 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, 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, tz, uncapitalizeFirstLetter, updateValueAndValidity, uuidv4, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
|
|
32458
32421
|
//# sourceMappingURL=sumaris-net.ngx-components.mjs.map
|