@sumaris-net/ngx-components 0.23.2 → 0.24.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/bundles/{ngx-sumaris-components.umd.js → sumaris-net.ngx-components.umd.js} +347 -296
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -0
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +25 -0
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -0
  5. package/esm2015/src/app/admin/services/filter/person.filter.js +4 -2
  6. package/esm2015/src/app/admin/services/person.service.js +4 -3
  7. package/esm2015/src/app/core/graphql/graphql.service.js +3 -2
  8. package/esm2015/src/app/core/graphql/graphql.utils.js +1 -1
  9. package/esm2015/src/app/core/install/install-upgrade-card.component.js +20 -14
  10. package/esm2015/src/app/core/services/network.service.js +3 -3
  11. package/esm2015/src/app/core/services/platform.service.js +28 -8
  12. package/esm2015/src/app/shared/functions.js +6 -7
  13. package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +2 -2
  14. package/esm2015/sumaris-net.ngx-components.js +13 -0
  15. package/fesm2015/{ngx-sumaris-components.js → sumaris-net.ngx-components.js} +329 -285
  16. package/fesm2015/sumaris-net.ngx-components.js.map +1 -0
  17. package/package.json +13 -9
  18. package/src/app/admin/services/filter/person.filter.d.ts +1 -0
  19. package/src/app/admin/services/person.service.d.ts +1 -1
  20. package/src/app/core/graphql/graphql.utils.d.ts +2 -1
  21. package/src/app/core/install/install-upgrade-card.component.d.ts +8 -5
  22. package/src/app/core/services/platform.service.d.ts +10 -1
  23. package/src/app/shared/functions.d.ts +1 -1
  24. package/{ngx-sumaris-components.d.ts → sumaris-net.ngx-components.d.ts} +0 -0
  25. package/sumaris-net.ngx-components.metadata.json +1 -0
  26. package/bundles/ngx-sumaris-components.umd.js.map +0 -1
  27. package/bundles/ngx-sumaris-components.umd.min.js +0 -25
  28. package/bundles/ngx-sumaris-components.umd.min.js.map +0 -1
  29. package/esm2015/ngx-sumaris-components.js +0 -13
  30. package/fesm2015/ngx-sumaris-components.js.map +0 -1
  31. package/ngx-sumaris-components.metadata.json +0 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/cdk/table'), require('@angular/cdk/a11y'), require('@angular/cdk/overlay'), require('@angular/cdk/scrolling'), require('@angular/material/core'), require('@angular/material/table'), require('@angular/material/sort'), require('@angular/material/paginator'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/checkbox'), require('@angular/material/expansion'), require('@angular/material/toolbar'), require('@angular/material/icon'), require('@angular/material/button'), require('@angular/material/menu'), require('@angular/material/select'), require('@angular/material/card'), require('@angular/material/tabs'), require('@angular/material/stepper'), require('@angular/material/list'), require('@angular/material/button-toggle'), require('@angular/material/progress-spinner'), require('@angular/material/progress-bar'), require('@angular/material/radio'), require('@angular/material/badge'), require('@angular/material/slide-toggle'), require('@angular/material/dialog'), require('@angular/material/autocomplete'), require('@angular/forms'), require('rxjs'), require('rxjs/operators'), require('@ngx-translate/core'), require('@ionic/angular'), require('moment'), require('@angular/material-moment-adapter'), require('@ionic-native/keyboard/ngx'), require('angular2-text-mask'), require('ngx-material-timepicker'), require('@angular/material/datepicker'), require('@angular/animations'), require('@angular/material/divider'), require('@angular/material/tooltip'), require('@angular/material/chips'), require('@angular/router'), require('@angular/platform-browser'), require('@angular/common/http'), require('ngx-color-picker'), require('@ionic-native/native-audio/ngx'), require('@ionic-native/vibration/ngx'), require('@ionic-native/audio-management/ngx'), require('@ionic-native/native-audio/ngx/index'), require('@ionic-native/vibration/ngx/index'), require('@ionic-native/audio-management/ngx/index'), require('uuid/v4'), require('@angular/cdk/drag-drop'), require('ngx-markdown'), require('tweetnacl'), require('@ionic/storage'), require('zone.js/dist/zone-error'), require('@ionic-native/splash-screen/ngx'), require('@ionic-native/network/ngx'), require('ionic-cache'), require('ionic-cache/dist/cache.service'), require('@ionic-native/network/ngx/index'), require('@ionic-native/splash-screen/ngx/index'), require('@ionic-native/status-bar/ngx'), require('@angular/cdk/platform'), require('@ionic-native/in-app-browser/ngx'), require('@apollo/client/core'), require('apollo-angular'), require('@apollo/client/link/ws'), require('@apollo/client/utilities'), require('@apollo/client/link/retry'), require('apollo-link-queue'), require('apollo-link-serialize'), require('apollo-link-logger'), require('apollo-angular/http'), require('apollo3-cache-persist'), require('@ionic-native/status-bar/ngx/index'), require('@ionic-native/keyboard/ngx/index'), require('@ionic-native/in-app-browser/ngx/index'), require('@e-is/ngx-material-table'), require('@angular/cdk/collections'), require('ngx-jdenticon'), require('tweetnacl-util'), require('scrypt-async'), require('hammerjs')) :
3
- typeof define === 'function' && define.amd ? define('@sumaris-net/ngx-components', ['exports', '@angular/core', '@angular/common', '@angular/cdk/table', '@angular/cdk/a11y', '@angular/cdk/overlay', '@angular/cdk/scrolling', '@angular/material/core', '@angular/material/table', '@angular/material/sort', '@angular/material/paginator', '@angular/material/form-field', '@angular/material/input', '@angular/material/checkbox', '@angular/material/expansion', '@angular/material/toolbar', '@angular/material/icon', '@angular/material/button', '@angular/material/menu', '@angular/material/select', '@angular/material/card', '@angular/material/tabs', '@angular/material/stepper', '@angular/material/list', '@angular/material/button-toggle', '@angular/material/progress-spinner', '@angular/material/progress-bar', '@angular/material/radio', '@angular/material/badge', '@angular/material/slide-toggle', '@angular/material/dialog', '@angular/material/autocomplete', '@angular/forms', 'rxjs', 'rxjs/operators', '@ngx-translate/core', '@ionic/angular', 'moment', '@angular/material-moment-adapter', '@ionic-native/keyboard/ngx', 'angular2-text-mask', 'ngx-material-timepicker', '@angular/material/datepicker', '@angular/animations', '@angular/material/divider', '@angular/material/tooltip', '@angular/material/chips', '@angular/router', '@angular/platform-browser', '@angular/common/http', 'ngx-color-picker', '@ionic-native/native-audio/ngx', '@ionic-native/vibration/ngx', '@ionic-native/audio-management/ngx', '@ionic-native/native-audio/ngx/index', '@ionic-native/vibration/ngx/index', '@ionic-native/audio-management/ngx/index', 'uuid/v4', '@angular/cdk/drag-drop', 'ngx-markdown', 'tweetnacl', '@ionic/storage', 'zone.js/dist/zone-error', '@ionic-native/splash-screen/ngx', '@ionic-native/network/ngx', 'ionic-cache', 'ionic-cache/dist/cache.service', '@ionic-native/network/ngx/index', '@ionic-native/splash-screen/ngx/index', '@ionic-native/status-bar/ngx', '@angular/cdk/platform', '@ionic-native/in-app-browser/ngx', '@apollo/client/core', 'apollo-angular', '@apollo/client/link/ws', '@apollo/client/utilities', '@apollo/client/link/retry', 'apollo-link-queue', 'apollo-link-serialize', 'apollo-link-logger', 'apollo-angular/http', 'apollo3-cache-persist', '@ionic-native/status-bar/ngx/index', '@ionic-native/keyboard/ngx/index', '@ionic-native/in-app-browser/ngx/index', '@e-is/ngx-material-table', '@angular/cdk/collections', 'ngx-jdenticon', 'tweetnacl-util', 'scrypt-async', 'hammerjs'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global['sumaris-net'] = global['sumaris-net'] || {}, global['sumaris-net']['ngx-components'] = {}), global.ng.core, global.ng.common, global.ng.cdk.table, global.ng.cdk.a11y, global.ng.cdk.overlay, global.ng.cdk.scrolling, global.ng.material.core, global.ng.material.table, global.ng.material.sort, global.ng.material.paginator, global.ng.material.formField, global.ng.material.input, global.ng.material.checkbox, global.ng.material.expansion, global.ng.material.toolbar, global.ng.material.icon, global.ng.material.button, global.ng.material.menu, global.ng.material.select, global.ng.material.card, global.ng.material.tabs, global.ng.material.stepper, global.ng.material.list, global.ng.material.buttonToggle, global.ng.material.progressSpinner, global.ng.material.progressBar, global.ng.material.radio, global.ng.material.badge, global.ng.material.slideToggle, global.ng.material.dialog, global.ng.material.autocomplete, global.ng.forms, global.rxjs, global.rxjs.operators, global['ngx-translate'].core, global.ionic.angular, global.moment, global.ng.materialMomentAdapter, global['ionic-native'].keyboard.ngx, global['angular2-text-mask'], global['ngx-material-timepicker'], global.ng.material.datepicker, global.ng.animations, global.ng.material.divider, global.ng.material.tooltip, global.ng.material.chips, global.ng.router, global.ng.platformBrowser, global.ng.common.http, global['ngx-color-picker'], global['ionic-native']['native-audio'].ngx, global['ionic-native'].vibration.ngx, global['ionic-native']['audio-management'].ngx, global['ionic-native']['native-audio'].ngx.index, global['ionic-native'].vibration.ngx.index, global['ionic-native']['audio-management'].ngx.index, global.uuid.v4, global.ng.cdk.dragDrop, global['ngx-markdown'], global.tweetnacl, global.ionic.storage, null, global['ionic-native']['splash-screen'].ngx, global['ionic-native'].network.ngx, global['ionic-cache'], global['ionic-cache/dist/cache'].service, global['ionic-native'].network.ngx.index, global['ionic-native']['splash-screen'].ngx.index, global['ionic-native']['status-bar'].ngx, global.ng.cdk.platform, global['ionic-native']['in-app-browser'].ngx, global.apollo.client.core, global['apollo-angular'], global.apollo.client.link.ws, global.apollo.client.utilities, global.apollo.client.link.retry, global['apollo-link-queue'], global['apollo-link-serialize'], global['apollo-link-logger'], global['apollo-angular'].http, global['apollo3-cache-persist'], global['ionic-native']['status-bar'].ngx.index, global['ionic-native'].keyboard.ngx.index, global['ionic-native']['in-app-browser'].ngx.index, global['e-is']['ngx-material-table'], global.ng.cdk.collections, global['ngx-jdenticon']));
5
- }(this, (function (exports, i0, i1$4, table$1, a11y, overlay, scrolling, i1$3, table, sort$1, paginator, formField, input, checkbox, expansion, toolbar, icon, button, menu, select, card, tabs, stepper, list, buttonToggle, progressSpinner, progressBar, radio, badge, slideToggle, i2, autocomplete, i1, rxjs, operators, i1$2, i1$5, momentImported, i1$1, ngx, angular2TextMask, ngxMaterialTimepicker, datepicker, animations, divider, tooltip, chips, i3, i1$6, i2$1, ngxColorPicker, ngx$2, ngx$3, ngx$1, i2$2, i3$1, i4, uuidv4Imported, dragDrop, ngxMarkdown, tweetnacl, i3$2, zoneError, ngx$5, ngx$4, ionicCache, i6, i9, i10, ngx$6, i2$4, ngx$7, core, i2$3, ws, utilities, retry, QueueLink, SerializingLink, loggerLink, i3$3, apollo3CachePersist, i14, i15, i17, ngxMaterialTable, collections, ngxJdenticon) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/cdk/table'), require('@angular/cdk/a11y'), require('@angular/cdk/overlay'), require('@angular/cdk/scrolling'), require('@angular/material/core'), require('@angular/material/table'), require('@angular/material/sort'), require('@angular/material/paginator'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/checkbox'), require('@angular/material/expansion'), require('@angular/material/toolbar'), require('@angular/material/icon'), require('@angular/material/button'), require('@angular/material/menu'), require('@angular/material/select'), require('@angular/material/card'), require('@angular/material/tabs'), require('@angular/material/stepper'), require('@angular/material/list'), require('@angular/material/button-toggle'), require('@angular/material/progress-spinner'), require('@angular/material/progress-bar'), require('@angular/material/radio'), require('@angular/material/badge'), require('@angular/material/slide-toggle'), require('@angular/material/dialog'), require('@angular/material/autocomplete'), require('@angular/forms'), require('rxjs'), require('rxjs/operators'), require('@ngx-translate/core'), require('@ionic/angular'), require('moment'), require('@angular/material-moment-adapter'), require('@ionic-native/keyboard/ngx'), require('angular2-text-mask'), require('ngx-material-timepicker'), require('@angular/material/datepicker'), require('@angular/animations'), require('@angular/material/divider'), require('@angular/material/tooltip'), require('@angular/material/chips'), require('@angular/router'), require('@angular/platform-browser'), require('@angular/common/http'), require('ngx-color-picker'), require('@ionic-native/native-audio/ngx'), require('@ionic-native/vibration/ngx'), require('@ionic-native/audio-management/ngx'), require('@ionic-native/native-audio/ngx/index'), require('@ionic-native/vibration/ngx/index'), require('@ionic-native/audio-management/ngx/index'), require('uuid/v4'), require('@angular/cdk/drag-drop'), require('ngx-markdown'), require('tweetnacl'), require('@ionic/storage'), require('zone.js/dist/zone-error'), require('@ionic-native/splash-screen/ngx'), require('@ionic-native/network/ngx'), require('ionic-cache'), require('ionic-cache/dist/cache.service'), require('@ionic-native/network/ngx/index'), require('@ionic-native/splash-screen/ngx/index'), require('@ionic-native/status-bar/ngx'), require('@angular/cdk/platform'), require('@ionic-native/in-app-browser/ngx'), require('@apollo/client/core'), require('apollo-angular'), require('@apollo/client/link/ws'), require('@apollo/client/utilities'), require('@apollo/client/link/retry'), require('apollo-link-queue'), require('apollo-link-serialize'), require('apollo-link-logger'), require('apollo-angular/http'), require('apollo3-cache-persist'), require('@ionic-native/downloader/ngx'), require('@ionic-native/status-bar/ngx/index'), require('@ionic-native/keyboard/ngx/index'), require('@ionic-native/in-app-browser/ngx/index'), require('@ionic-native/downloader/ngx/index'), require('@e-is/ngx-material-table'), require('@angular/cdk/collections'), require('ngx-jdenticon'), require('tweetnacl-util'), require('scrypt-async'), require('hammerjs')) :
3
+ typeof define === 'function' && define.amd ? define('@sumaris-net/ngx-components', ['exports', '@angular/core', '@angular/common', '@angular/cdk/table', '@angular/cdk/a11y', '@angular/cdk/overlay', '@angular/cdk/scrolling', '@angular/material/core', '@angular/material/table', '@angular/material/sort', '@angular/material/paginator', '@angular/material/form-field', '@angular/material/input', '@angular/material/checkbox', '@angular/material/expansion', '@angular/material/toolbar', '@angular/material/icon', '@angular/material/button', '@angular/material/menu', '@angular/material/select', '@angular/material/card', '@angular/material/tabs', '@angular/material/stepper', '@angular/material/list', '@angular/material/button-toggle', '@angular/material/progress-spinner', '@angular/material/progress-bar', '@angular/material/radio', '@angular/material/badge', '@angular/material/slide-toggle', '@angular/material/dialog', '@angular/material/autocomplete', '@angular/forms', 'rxjs', 'rxjs/operators', '@ngx-translate/core', '@ionic/angular', 'moment', '@angular/material-moment-adapter', '@ionic-native/keyboard/ngx', 'angular2-text-mask', 'ngx-material-timepicker', '@angular/material/datepicker', '@angular/animations', '@angular/material/divider', '@angular/material/tooltip', '@angular/material/chips', '@angular/router', '@angular/platform-browser', '@angular/common/http', 'ngx-color-picker', '@ionic-native/native-audio/ngx', '@ionic-native/vibration/ngx', '@ionic-native/audio-management/ngx', '@ionic-native/native-audio/ngx/index', '@ionic-native/vibration/ngx/index', '@ionic-native/audio-management/ngx/index', 'uuid/v4', '@angular/cdk/drag-drop', 'ngx-markdown', 'tweetnacl', '@ionic/storage', 'zone.js/dist/zone-error', '@ionic-native/splash-screen/ngx', '@ionic-native/network/ngx', 'ionic-cache', 'ionic-cache/dist/cache.service', '@ionic-native/network/ngx/index', '@ionic-native/splash-screen/ngx/index', '@ionic-native/status-bar/ngx', '@angular/cdk/platform', '@ionic-native/in-app-browser/ngx', '@apollo/client/core', 'apollo-angular', '@apollo/client/link/ws', '@apollo/client/utilities', '@apollo/client/link/retry', 'apollo-link-queue', 'apollo-link-serialize', 'apollo-link-logger', 'apollo-angular/http', 'apollo3-cache-persist', '@ionic-native/downloader/ngx', '@ionic-native/status-bar/ngx/index', '@ionic-native/keyboard/ngx/index', '@ionic-native/in-app-browser/ngx/index', '@ionic-native/downloader/ngx/index', '@e-is/ngx-material-table', '@angular/cdk/collections', 'ngx-jdenticon', 'tweetnacl-util', 'scrypt-async', 'hammerjs'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global["sumaris-net"] = global["sumaris-net"] || {}, global["sumaris-net"]["ngx-components"] = {}), global.ng.core, global.ng.common, global.ng.cdk.table, global.ng.cdk.a11y, global.ng.cdk.overlay, global.ng.cdk.scrolling, global.ng.material.core, global.ng.material.table, global.ng.material.sort, global.ng.material.paginator, global.ng.material.formField, global.ng.material.input, global.ng.material.checkbox, global.ng.material.expansion, global.ng.material.toolbar, global.ng.material.icon, global.ng.material.button, global.ng.material.menu, global.ng.material.select, global.ng.material.card, global.ng.material.tabs, global.ng.material.stepper, global.ng.material.list, global.ng.material.buttonToggle, global.ng.material.progressSpinner, global.ng.material.progressBar, global.ng.material.radio, global.ng.material.badge, global.ng.material.slideToggle, global.ng.material.dialog, global.ng.material.autocomplete, global.ng.forms, global.rxjs, global.rxjs.operators, global["ngx-translate"].core, global.ionic.angular, global.moment, global.ng.materialMomentAdapter, global["ionic-native"].keyboard.ngx, global["angular2-text-mask"], global["ngx-material-timepicker"], global.ng.material.datepicker, global.ng.animations, global.ng.material.divider, global.ng.material.tooltip, global.ng.material.chips, global.ng.router, global.ng.platformBrowser, global.ng.common.http, global["ngx-color-picker"], global["ionic-native"]["native-audio"].ngx, global["ionic-native"].vibration.ngx, global["ionic-native"]["audio-management"].ngx, global["ionic-native"]["native-audio"].ngx.index, global["ionic-native"].vibration.ngx.index, global["ionic-native"]["audio-management"].ngx.index, global.uuid.v4, global.ng.cdk.dragDrop, global["ngx-markdown"], global.tweetnacl, global.ionic.storage, null, global["ionic-native"]["splash-screen"].ngx, global["ionic-native"].network.ngx, global["ionic-cache"], global["ionic-cache/dist/cache"].service, global["ionic-native"].network.ngx.index, global["ionic-native"]["splash-screen"].ngx.index, global["ionic-native"]["status-bar"].ngx, global.ng.cdk.platform, global["ionic-native"]["in-app-browser"].ngx, global.apollo.client.core, global["apollo-angular"], global.apollo.client.link.ws, global.apollo.client.utilities, global.apollo.client.link.retry, global["apollo-link-queue"], global["apollo-link-serialize"], global["apollo-link-logger"], global["apollo-angular"].http, global["apollo3-cache-persist"], global.ngx$6, global["ionic-native"]["status-bar"].ngx.index, global["ionic-native"].keyboard.ngx.index, global["ionic-native"]["in-app-browser"].ngx.index, global.i18, global["e-is"]["ngx-material-table"], global.ng.cdk.collections, global["ngx-jdenticon"]));
5
+ })(this, (function (exports, i0, i1$4, table$1, a11y, overlay, scrolling, i1$3, table, sort$1, paginator, formField, input, checkbox, expansion, toolbar, icon, button, menu, select, card, tabs, stepper, list, buttonToggle, progressSpinner, progressBar, radio, badge, slideToggle, i2, autocomplete, i1, rxjs, operators, i1$2, i1$5, momentImported, i1$1, ngx, angular2TextMask, ngxMaterialTimepicker, datepicker, animations, divider, tooltip, chips, i3, i1$6, i2$1, ngxColorPicker, ngx$2, ngx$3, ngx$1, i2$2, i3$1, i4, uuidv4Imported, dragDrop, ngxMarkdown, tweetnacl, i3$2, zoneError, ngx$5, ngx$4, ionicCache, i6, i9, i10, ngx$7, i2$4, ngx$8, core, i2$3, ws, utilities, retry, QueueLink, SerializingLink, loggerLink, i3$3, apollo3CachePersist, ngx$6, i14, i15, i17, i18, ngxMaterialTable, collections, ngxJdenticon) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -15,22 +15,45 @@
15
15
  var d = Object.getOwnPropertyDescriptor(e, k);
16
16
  Object.defineProperty(n, k, d.get ? d : {
17
17
  enumerable: true,
18
- get: function () {
19
- return e[k];
20
- }
18
+ get: function () { return e[k]; }
21
19
  });
22
20
  }
23
21
  });
24
22
  }
25
- n['default'] = e;
23
+ n["default"] = e;
26
24
  return Object.freeze(n);
27
25
  }
28
26
 
27
+ var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
28
+ var i1__namespace$3 = /*#__PURE__*/_interopNamespace(i1$4);
29
+ var i1__namespace$2 = /*#__PURE__*/_interopNamespace(i1$3);
30
+ var i2__namespace$1 = /*#__PURE__*/_interopNamespace(i2);
31
+ var i1__namespace$6 = /*#__PURE__*/_interopNamespace(i1);
32
+ var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1$2);
33
+ var i1__namespace$4 = /*#__PURE__*/_interopNamespace(i1$5);
29
34
  var momentImported__namespace = /*#__PURE__*/_interopNamespace(momentImported);
35
+ var i1__namespace = /*#__PURE__*/_interopNamespace(i1$1);
36
+ var i3__namespace$3 = /*#__PURE__*/_interopNamespace(i3);
37
+ var i1__namespace$5 = /*#__PURE__*/_interopNamespace(i1$6);
38
+ var i2__namespace$2 = /*#__PURE__*/_interopNamespace(i2$1);
39
+ var i2__namespace = /*#__PURE__*/_interopNamespace(i2$2);
40
+ var i3__namespace = /*#__PURE__*/_interopNamespace(i3$1);
41
+ var i4__namespace = /*#__PURE__*/_interopNamespace(i4);
30
42
  var uuidv4Imported__namespace = /*#__PURE__*/_interopNamespace(uuidv4Imported);
43
+ var i3__namespace$1 = /*#__PURE__*/_interopNamespace(i3$2);
44
+ var i6__namespace = /*#__PURE__*/_interopNamespace(i6);
45
+ var i9__namespace = /*#__PURE__*/_interopNamespace(i9);
46
+ var i10__namespace = /*#__PURE__*/_interopNamespace(i10);
47
+ var i2__namespace$4 = /*#__PURE__*/_interopNamespace(i2$4);
48
+ var i2__namespace$3 = /*#__PURE__*/_interopNamespace(i2$3);
31
49
  var QueueLink__default = /*#__PURE__*/_interopDefaultLegacy(QueueLink);
32
50
  var SerializingLink__default = /*#__PURE__*/_interopDefaultLegacy(SerializingLink);
33
51
  var loggerLink__default = /*#__PURE__*/_interopDefaultLegacy(loggerLink);
52
+ var i3__namespace$2 = /*#__PURE__*/_interopNamespace(i3$3);
53
+ var i14__namespace = /*#__PURE__*/_interopNamespace(i14);
54
+ var i15__namespace = /*#__PURE__*/_interopNamespace(i15);
55
+ var i17__namespace = /*#__PURE__*/_interopNamespace(i17);
56
+ var i18__namespace = /*#__PURE__*/_interopNamespace(i18);
34
57
 
35
58
  var ENVIRONMENT = new i0.InjectionToken('ENV');
36
59
  var Environment = /** @class */ (function () {
@@ -582,16 +605,15 @@
582
605
  // Stop if not equals, otherwise continue with the next key
583
606
  .find(function (res) { return res !== 0; }) || 0; };
584
607
  }
585
- function sort(array, attribute) {
608
+ function sort(array, attribute, opts) {
586
609
  if (isEmptyArray(array))
587
610
  return array;
611
+ var compareFn = opts
612
+ ? new Intl.Collator(undefined, opts).compare
613
+ : function (v1, v2) { return v1 === v2 ? 0 : v1 > v2 ? 1 : -1; };
588
614
  return array
589
615
  .slice() // copy
590
- .sort(function (a, b) {
591
- var valueA = a[attribute];
592
- var valueB = b[attribute];
593
- return valueA === valueB ? 0 : (valueA > valueB ? 1 : -1);
594
- });
616
+ .sort(function (a, b) { return compareFn(a[attribute], b[attribute]); });
595
617
  }
596
618
  var INTEGER_REGEXP = /^[-]?\d+$/;
597
619
  function isInt(value) {
@@ -1135,19 +1157,19 @@
1135
1157
  };
1136
1158
  return MatAutocompleteConfigHolder;
1137
1159
  }());
1138
- var DEFAULT_VALUE_ACCESSOR = {
1160
+ var DEFAULT_VALUE_ACCESSOR$6 = {
1139
1161
  provide: i1.NG_VALUE_ACCESSOR,
1140
1162
  useExisting: i0.forwardRef(function () { return MatAutocompleteField; }),
1141
1163
  multi: true
1142
1164
  };
1143
- var noop = function () { };
1144
- var ɵ0 = noop;
1165
+ var noop$7 = function () { };
1166
+ var ɵ0$a = noop$7;
1145
1167
  var MatAutocompleteField = /** @class */ (function () {
1146
1168
  function MatAutocompleteField(cd, formGroupDir) {
1147
1169
  this.cd = cd;
1148
1170
  this.formGroupDir = formGroupDir;
1149
- this._onChangeCallback = noop;
1150
- this._onTouchedCallback = noop;
1171
+ this._onChangeCallback = noop$7;
1172
+ this._onTouchedCallback = noop$7;
1151
1173
  this._subscription = new rxjs.Subscription();
1152
1174
  this._filter$ = new rxjs.BehaviorSubject(undefined);
1153
1175
  this._reload$ = new rxjs.Subject();
@@ -1804,7 +1826,7 @@
1804
1826
  // eslint-disable-next-line @angular-eslint/component-selector
1805
1827
  selector: 'mat-autocomplete-field',
1806
1828
  template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <!-- readonly -->\n <ng-container *ngIf=\"_readonly; else writable\">\n <input matInput hidden type=\"text\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\" readonly>\n <ion-text>{{displayWith(value)}}</ion-text>\n </ng-container>\n\n <ng-template #writable>\n\n <!-- Basic select -->\n <mat-select #matSelect\n *ngIf=\"!searchable; else searchableTemplate\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n (keydown.escape)=\"onKeydownEscape.emit($event)\"\n [compareWith]=\"compareWith\"\n [multiple]=\"multiple\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- header -->\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as isLast\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <!-- options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text>{{item | propertyGet: path }}</ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initMatSelectInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n </mat-select>\n </ng-template>\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #searchableTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [required]=\"required\"\n (click)=\"onClick.emit($event)\"\n (focus)=\"filterInputTextFocusInEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"onKeydownEscape.emit($event)\"\n (keyup.enter)=\"onKeyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.opened && onDropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [class.cdk-visually-hidden]=\"!searchable\"\n [panelWidth]=\"panelWidth\">\n\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as last\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n <ion-text color=\"light\" *ngIf=\"last && itemCount; let count \" class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n <ng-container *ngIf=\"$filteredItems | async; else loadingTemplate; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\" >\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initAutocompleteInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(matInputText.value | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n </ng-template>\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"searchable\"\n (click)=\"onDropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\"\n *ngIf=\"enabled && mobile && !searchable && !multiple\"\n [title]=\"'COMMON.BTN_SEARCH'|translate\"\n (click)=\"toggleSearch($event)\">\n <mat-icon>search</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content matSuffix select=\"[matSuffix]\"></ng-content>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n",
1807
- providers: [DEFAULT_VALUE_ACCESSOR],
1829
+ providers: [DEFAULT_VALUE_ACCESSOR$6],
1808
1830
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
1809
1831
  styles: [":host{display:inline-block;position:relative}:host.ion-text-wrap ion-label{white-space:normal!important}button[hidden]{display:none}mat-icon.select-arrow{color:rgba(0,0,0,.47);font-size:150%}.fact-scroll-viewport{height:100%;width:100%}.fact-item{height:54px;display:flex}.fact-item .fact-date{min-width:100px;text-align:center;font-size:24pt}.fact-item .fact-date,.fact-item .fact-text{height:100%;align-items:center;justify-content:center;display:flex}.fact-item .fact-text{border-radius:10px}cdk-virtual-scroll-viewport{border:1px solid #000}cdk-virtual-scroll-viewport li{list-style:none}"]
1810
1832
  },] }
@@ -1882,7 +1904,7 @@
1882
1904
  };
1883
1905
  return DateFormatPipe;
1884
1906
  }());
1885
- DateFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0.ɵɵinject(i1$1.MomentDateAdapter), i0.ɵɵinject(i1$2.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
1907
+ DateFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0__namespace.ɵɵinject(i1__namespace.MomentDateAdapter), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
1886
1908
  DateFormatPipe.decorators = [
1887
1909
  { type: i0.Pipe, args: [{
1888
1910
  name: 'dateFormat'
@@ -1894,7 +1916,7 @@
1894
1916
  { type: i1$2.TranslateService }
1895
1917
  ]; };
1896
1918
 
1897
- var moment = momentImported__namespace;
1919
+ var moment$6 = momentImported__namespace;
1898
1920
  var DateDiffDurationPipe = /** @class */ (function () {
1899
1921
  function DateDiffDurationPipe(dateAdapter, translate) {
1900
1922
  var _this = this;
@@ -1911,10 +1933,10 @@
1911
1933
  return this.format(startDate, endDate);
1912
1934
  };
1913
1935
  DateDiffDurationPipe.prototype.format = function (startDate, endDate) {
1914
- var duration = moment.duration(endDate.diff(startDate));
1936
+ var duration = moment$6.duration(endDate.diff(startDate));
1915
1937
  if (duration.asMinutes() < 0)
1916
1938
  return '';
1917
- var timeDuration = moment(0)
1939
+ var timeDuration = moment$6(0)
1918
1940
  .hour(duration.hours())
1919
1941
  .minute(duration.minutes());
1920
1942
  var days = Math.floor(duration.asDays());
@@ -1922,7 +1944,7 @@
1922
1944
  };
1923
1945
  return DateDiffDurationPipe;
1924
1946
  }());
1925
- DateDiffDurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(i0.ɵɵinject(i1$3.DateAdapter), i0.ɵɵinject(i1$2.TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
1947
+ DateDiffDurationPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(i0__namespace.ɵɵinject(i1__namespace$2.DateAdapter), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
1926
1948
  DateDiffDurationPipe.decorators = [
1927
1949
  { type: i0.Pipe, args: [{
1928
1950
  name: 'dateDiffDuration'
@@ -1944,7 +1966,7 @@
1944
1966
  };
1945
1967
  return DateFromNowPipe;
1946
1968
  }());
1947
- DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1$1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
1969
+ DateFromNowPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0__namespace.ɵɵinject(i1__namespace.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
1948
1970
  DateFromNowPipe.decorators = [
1949
1971
  { type: i0.Pipe, args: [{
1950
1972
  name: 'dateFromNow'
@@ -2013,7 +2035,7 @@
2013
2035
  value *= -1;
2014
2036
  }
2015
2037
  }
2016
- var degrees = roundFloat(value, opts.maxDecimals).toString();
2038
+ var degrees = roundFloat$1(value, opts.maxDecimals).toString();
2017
2039
  // Add sign
2018
2040
  var sign = negative ? '-' : '+';
2019
2041
  if (opts.placeholderChar) {
@@ -2064,7 +2086,7 @@
2064
2086
  }
2065
2087
  var degrees = Math.trunc(value);
2066
2088
  var minutes = Math.trunc((value - degrees) * 60);
2067
- var seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
2089
+ var seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
2068
2090
  while (seconds >= 60) {
2069
2091
  seconds -= 60;
2070
2092
  minutes += 1;
@@ -2132,7 +2154,7 @@
2132
2154
  }
2133
2155
  }
2134
2156
  var degrees = Math.trunc(value);
2135
- var minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
2157
+ var minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
2136
2158
  while (minutes >= 60) {
2137
2159
  minutes -= 60;
2138
2160
  degrees += 1;
@@ -2183,15 +2205,15 @@
2183
2205
  return NaN;
2184
2206
  }
2185
2207
  if (pattern === 'DD')
2186
- return roundFloat(degrees, maxDecimals);
2208
+ return roundFloat$1(degrees, maxDecimals);
2187
2209
  var minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
2188
2210
  var seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
2189
2211
  var direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
2190
2212
  var sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
2191
2213
  degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
2192
- return roundFloat(degrees, maxDecimals);
2214
+ return roundFloat$1(degrees, maxDecimals);
2193
2215
  }
2194
- function roundFloat(input, maxDecimals) {
2216
+ function roundFloat$1(input, maxDecimals) {
2195
2217
  if (maxDecimals > 0) {
2196
2218
  var powDecimal = Math.pow(10, maxDecimals);
2197
2219
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -2214,7 +2236,7 @@
2214
2236
  };
2215
2237
  return LatLongFormatPipe;
2216
2238
  }());
2217
- LatLongFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
2239
+ LatLongFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
2218
2240
  LatLongFormatPipe.decorators = [
2219
2241
  { type: i0.Pipe, args: [{
2220
2242
  name: 'latLongFormat'
@@ -2227,7 +2249,7 @@
2227
2249
  }
2228
2250
  return LatitudeFormatPipe;
2229
2251
  }());
2230
- LatitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
2252
+ LatitudeFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
2231
2253
  LatitudeFormatPipe.decorators = [
2232
2254
  { type: i0.Pipe, args: [{
2233
2255
  name: 'latitudeFormat'
@@ -2240,7 +2262,7 @@
2240
2262
  }
2241
2263
  return LongitudeFormatPipe;
2242
2264
  }());
2243
- LongitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
2265
+ LongitudeFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
2244
2266
  LongitudeFormatPipe.decorators = [
2245
2267
  { type: i0.Pipe, args: [{
2246
2268
  name: 'longitudeFormat'
@@ -2263,7 +2285,7 @@
2263
2285
  };
2264
2286
  return NumberFormatPipe;
2265
2287
  }());
2266
- NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
2288
+ NumberFormatPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
2267
2289
  NumberFormatPipe.decorators = [
2268
2290
  { type: i0.Pipe, args: [{
2269
2291
  name: 'numberFormat'
@@ -2306,7 +2328,7 @@
2306
2328
  };
2307
2329
  return HighlightPipe;
2308
2330
  }());
2309
- HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
2331
+ HighlightPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
2310
2332
  HighlightPipe.decorators = [
2311
2333
  { type: i0.Pipe, args: [{
2312
2334
  name: 'highlight'
@@ -2374,7 +2396,7 @@
2374
2396
  { type: i0.Pipe, args: [{ name: 'fileSize' },] }
2375
2397
  ];
2376
2398
 
2377
- var moment$1 = momentImported__namespace;
2399
+ var moment$5 = momentImported__namespace;
2378
2400
  var DATE_UNIX_TIMESTAMP = 'X';
2379
2401
  var DATE_UNIX_MS_TIMESTAMP = 'x';
2380
2402
  var DateUtils = /** @class */ (function () {
@@ -2409,32 +2431,32 @@
2409
2431
  if (!value || momentImported.isMoment(value))
2410
2432
  return value;
2411
2433
  // Parse the input value, as a ISO date time
2412
- var date = moment$1(value, DATE_ISO_PATTERN);
2434
+ var date = moment$5(value, DATE_ISO_PATTERN);
2413
2435
  if (date.isValid())
2414
2436
  return date;
2415
2437
  // Not valid: trying to convert from unix timestamp
2416
2438
  if (typeof value === 'string') {
2417
2439
  console.warn('Wrong date format - Trying to convert from local time: ' + value);
2418
2440
  if (value.length === 10) {
2419
- return moment$1(value, DATE_UNIX_TIMESTAMP);
2441
+ return moment$5(value, DATE_UNIX_TIMESTAMP);
2420
2442
  }
2421
2443
  else if (value.length === 13) {
2422
- return moment$1(value, DATE_UNIX_MS_TIMESTAMP);
2444
+ return moment$5(value, DATE_UNIX_MS_TIMESTAMP);
2423
2445
  }
2424
2446
  }
2425
2447
  console.warn('Unable to parse date: ' + value);
2426
2448
  return undefined;
2427
2449
  }
2428
2450
  function fromUnixTimestamp(timeInSec) {
2429
- return moment$1(timeInSec, DATE_UNIX_TIMESTAMP);
2451
+ return moment$5(timeInSec, DATE_UNIX_TIMESTAMP);
2430
2452
  }
2431
2453
  function fromUnixMsTimestamp(timeInMs) {
2432
- return moment$1(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2454
+ return moment$5(timeInMs, DATE_UNIX_MS_TIMESTAMP);
2433
2455
  }
2434
2456
  function toDuration(value, unit) {
2435
2457
  if (!value)
2436
2458
  return undefined;
2437
- var duration = moment$1.duration(value, unit);
2459
+ var duration = moment$5.duration(value, unit);
2438
2460
  // fix 990+ ms
2439
2461
  if (duration.milliseconds() >= 990) {
2440
2462
  duration.add(1000 - duration.milliseconds(), 'ms');
@@ -2464,7 +2486,7 @@
2464
2486
  };
2465
2487
  return DurationPipe;
2466
2488
  }());
2467
- DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$2.TranslateService)); }, token: DurationPipe, providedIn: "root" });
2489
+ DurationPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
2468
2490
  DurationPipe.decorators = [
2469
2491
  { type: i0.Pipe, args: [{
2470
2492
  name: 'duration'
@@ -2488,7 +2510,7 @@
2488
2510
  };
2489
2511
  return MathAbsPipe;
2490
2512
  }());
2491
- MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2513
+ MathAbsPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
2492
2514
  MathAbsPipe.decorators = [
2493
2515
  { type: i0.Pipe, args: [{
2494
2516
  name: 'mathAbs'
@@ -2503,7 +2525,7 @@
2503
2525
  };
2504
2526
  return EvenPipe;
2505
2527
  }());
2506
- EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
2528
+ EvenPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
2507
2529
  EvenPipe.decorators = [
2508
2530
  { type: i0.Pipe, args: [{
2509
2531
  name: 'even'
@@ -2518,7 +2540,7 @@
2518
2540
  };
2519
2541
  return OddPipe;
2520
2542
  }());
2521
- OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
2543
+ OddPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
2522
2544
  OddPipe.decorators = [
2523
2545
  { type: i0.Pipe, args: [{
2524
2546
  name: 'odd'
@@ -2650,7 +2672,7 @@
2650
2672
  };
2651
2673
  return MapGetPipe;
2652
2674
  }());
2653
- MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
2675
+ MapGetPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
2654
2676
  MapGetPipe.decorators = [
2655
2677
  { type: i0.Pipe, args: [{
2656
2678
  name: 'mapGet'
@@ -2667,7 +2689,7 @@
2667
2689
  };
2668
2690
  return MapKeysPipe;
2669
2691
  }());
2670
- MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
2692
+ MapKeysPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
2671
2693
  MapKeysPipe.decorators = [
2672
2694
  { type: i0.Pipe, args: [{
2673
2695
  name: 'mapKeys'
@@ -2684,7 +2706,7 @@
2684
2706
  };
2685
2707
  return MapValuesPipe;
2686
2708
  }());
2687
- MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
2709
+ MapValuesPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
2688
2710
  MapValuesPipe.decorators = [
2689
2711
  { type: i0.Pipe, args: [{
2690
2712
  name: 'mapValues'
@@ -2700,7 +2722,7 @@
2700
2722
  };
2701
2723
  return IsNotNilOrBlankPipe;
2702
2724
  }());
2703
- IsNotNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
2725
+ IsNotNilOrBlankPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
2704
2726
  IsNotNilOrBlankPipe.decorators = [
2705
2727
  { type: i0.Pipe, args: [{
2706
2728
  name: 'isNotNilOrBlank'
@@ -2715,7 +2737,7 @@
2715
2737
  };
2716
2738
  return IsNilOrBlankPipe;
2717
2739
  }());
2718
- IsNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
2740
+ IsNilOrBlankPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
2719
2741
  IsNilOrBlankPipe.decorators = [
2720
2742
  { type: i0.Pipe, args: [{
2721
2743
  name: 'isNilOrBlank'
@@ -2730,7 +2752,7 @@
2730
2752
  };
2731
2753
  return ToStringPipe;
2732
2754
  }());
2733
- ToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
2755
+ ToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
2734
2756
  ToStringPipe.decorators = [
2735
2757
  { type: i0.Pipe, args: [{
2736
2758
  name: 'toString'
@@ -2745,7 +2767,7 @@
2745
2767
  };
2746
2768
  return StrLengthPipe;
2747
2769
  }());
2748
- StrLengthPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
2770
+ StrLengthPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
2749
2771
  StrLengthPipe.decorators = [
2750
2772
  { type: i0.Pipe, args: [{
2751
2773
  name: 'strLength'
@@ -2798,7 +2820,7 @@
2798
2820
  };
2799
2821
  return TranslateContextService;
2800
2822
  }());
2801
- TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$2.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
2823
+ TranslateContextService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
2802
2824
  TranslateContextService.decorators = [
2803
2825
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
2804
2826
  ];
@@ -2815,7 +2837,7 @@
2815
2837
  };
2816
2838
  return TranslateContextPipe;
2817
2839
  }());
2818
- TranslateContextPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextPipe_Factory() { return new TranslateContextPipe(i0.ɵɵinject(TranslateContextService)); }, token: TranslateContextPipe, providedIn: "root" });
2840
+ TranslateContextPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function TranslateContextPipe_Factory() { return new TranslateContextPipe(i0__namespace.ɵɵinject(TranslateContextService)); }, token: TranslateContextPipe, providedIn: "root" });
2819
2841
  TranslateContextPipe.decorators = [
2820
2842
  { type: i0.Pipe, args: [{
2821
2843
  name: 'translateContext'
@@ -2835,7 +2857,7 @@
2835
2857
  };
2836
2858
  return TranslatablePipe;
2837
2859
  }());
2838
- TranslatablePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslatablePipe_Factory() { return new TranslatablePipe(); }, token: TranslatablePipe, providedIn: "root" });
2860
+ TranslatablePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function TranslatablePipe_Factory() { return new TranslatablePipe(); }, token: TranslatablePipe, providedIn: "root" });
2839
2861
  TranslatablePipe.decorators = [
2840
2862
  { type: i0.Pipe, args: [{
2841
2863
  name: 'translatable'
@@ -2855,7 +2877,7 @@
2855
2877
  };
2856
2878
  return PropertyGetPipe;
2857
2879
  }());
2858
- PropertyGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
2880
+ PropertyGetPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
2859
2881
  PropertyGetPipe.decorators = [
2860
2882
  { type: i0.Pipe, args: [{
2861
2883
  name: 'propertyGet'
@@ -3112,14 +3134,14 @@
3112
3134
  },] }
3113
3135
  ];
3114
3136
 
3115
- var moment$2 = momentImported__namespace;
3137
+ var moment$4 = momentImported__namespace;
3116
3138
  // @dynamic
3117
3139
  var SharedValidators = /** @class */ (function () {
3118
3140
  function SharedValidators() {
3119
3141
  }
3120
3142
  SharedValidators.validDate = function (control) {
3121
3143
  var value = control.value;
3122
- var date = !value || moment$2.isMoment(value) ? value : moment$2(control.value, DATE_ISO_PATTERN);
3144
+ var date = !value || moment$4.isMoment(value) ? value : moment$4(control.value, DATE_ISO_PATTERN);
3123
3145
  if (date && (!date.isValid() || date.year() < 1970)) {
3124
3146
  return { validDate: true };
3125
3147
  }
@@ -3590,9 +3612,9 @@
3590
3612
  var hour = parseInt(durationParts[0] || '0');
3591
3613
  var minute = parseInt(durationParts[1] || '0');
3592
3614
  var value = hour + (minute + 0.5) / 60;
3593
- return roundFloat$1(value, maxDecimals);
3615
+ return roundFloat(value, maxDecimals);
3594
3616
  }
3595
- function roundFloat$1(input, maxDecimals) {
3617
+ function roundFloat(input, maxDecimals) {
3596
3618
  if (maxDecimals > 0) {
3597
3619
  var powDecimal = Math.pow(10, maxDecimals);
3598
3620
  return Math.trunc(input * powDecimal + 0.5) / powDecimal;
@@ -3616,9 +3638,9 @@
3616
3638
  DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
3617
3639
  }
3618
3640
  };
3619
- var noop$1 = function () {
3641
+ var noop$6 = function () {
3620
3642
  };
3621
- var ɵ0$1 = noop$1;
3643
+ var ɵ0$9 = noop$6;
3622
3644
  var MatLatLongField = /** @class */ (function () {
3623
3645
  function MatLatLongField(platform, translate, formBuilder, cd, formGroupDir) {
3624
3646
  this.platform = platform;
@@ -3626,8 +3648,8 @@
3626
3648
  this.formBuilder = formBuilder;
3627
3649
  this.cd = cd;
3628
3650
  this.formGroupDir = formGroupDir;
3629
- this._onChangeCallback = noop$1;
3630
- this._onTouchedCallback = noop$1;
3651
+ this._onChangeCallback = noop$6;
3652
+ this._onTouchedCallback = noop$6;
3631
3653
  this._subscription = new rxjs.Subscription();
3632
3654
  this.disabling = false;
3633
3655
  this.writing = false;
@@ -3980,14 +4002,14 @@
3980
4002
  },] }
3981
4003
  ];
3982
4004
 
3983
- var DEFAULT_VALUE_ACCESSOR$1 = {
4005
+ var DEFAULT_VALUE_ACCESSOR$5 = {
3984
4006
  provide: i1.NG_VALUE_ACCESSOR,
3985
4007
  useExisting: i0.forwardRef(function () { return MatDate; }),
3986
4008
  multi: true
3987
4009
  };
3988
- var DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
3989
- var noop$2 = function () { };
3990
- var ɵ0$2 = noop$2;
4010
+ var DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
4011
+ var noop$5 = function () { };
4012
+ var ɵ0$8 = noop$5;
3991
4013
  var MatDate = /** @class */ (function () {
3992
4014
  function MatDate(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
3993
4015
  this.dateAdapter = dateAdapter;
@@ -3996,12 +4018,12 @@
3996
4018
  this.cd = cd;
3997
4019
  this.keyboard = keyboard;
3998
4020
  this.formGroupDir = formGroupDir;
3999
- this._onChangeCallback = noop$2;
4000
- this._onTouchedCallback = noop$2;
4021
+ this._onChangeCallback = noop$5;
4022
+ this._onTouchedCallback = noop$5;
4001
4023
  this._subscription = new rxjs.Subscription();
4002
4024
  this.writing = true;
4003
4025
  this.disabling = false;
4004
- this.dayMask = DAY_MASK;
4026
+ this.dayMask = DAY_MASK$2;
4005
4027
  this.disabled = false;
4006
4028
  this.floatLabel = 'auto';
4007
4029
  this.readonly = false;
@@ -4270,7 +4292,7 @@
4270
4292
  selector: 'mat-date-field',
4271
4293
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final control -->\n <input matInput type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"writeValue(null)\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('validDate')\" translate>ERROR.FIELD_NOT_VALID_DATE</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateIsAfter')\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateRange')\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMaxDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMinDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngIf=\"formControl.hasError('msg')\">{{formControl.errors.msg}}</mat-error>\n </mat-form-field>\n\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"></mat-datepicker>\n\n <ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n </ng-template>\n\n <ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n </ng-template>\n\n</ng-template>\n\n",
4272
4294
  providers: [
4273
- DEFAULT_VALUE_ACCESSOR$1,
4295
+ DEFAULT_VALUE_ACCESSOR$5,
4274
4296
  ],
4275
4297
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
4276
4298
  styles: [":host{display:inline-block;width:100%;position:relative}:host [no-padding]{--ion-grid-column-padding:0}:host [nowrap]{flex-wrap:nowrap}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md,mat-form-field ion-datetime{padding:0!important}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
@@ -4303,17 +4325,17 @@
4303
4325
  matInputs: [{ type: i0.ViewChildren, args: ['matInput',] }]
4304
4326
  };
4305
4327
 
4306
- var DEFAULT_VALUE_ACCESSOR$2 = {
4328
+ var DEFAULT_VALUE_ACCESSOR$4 = {
4307
4329
  provide: i1.NG_VALUE_ACCESSOR,
4308
4330
  useExisting: i0.forwardRef(function () { return MatDateTime; }),
4309
4331
  multi: true
4310
4332
  };
4311
4333
  var DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
4312
4334
  var HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
4313
- var HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
4314
- var noop$3 = function () {
4335
+ var HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
4336
+ var noop$4 = function () {
4315
4337
  };
4316
- var ɵ0$3 = noop$3;
4338
+ var ɵ0$7 = noop$4;
4317
4339
  var MatDateTime = /** @class */ (function () {
4318
4340
  function MatDateTime(platform, dateAdapter, translate, formBuilder, keyboard, cd, formGroupDir) {
4319
4341
  this.platform = platform;
@@ -4323,14 +4345,14 @@
4323
4345
  this.keyboard = keyboard;
4324
4346
  this.cd = cd;
4325
4347
  this.formGroupDir = formGroupDir;
4326
- this._onChangeCallback = noop$3;
4327
- this._onTouchedCallback = noop$3;
4348
+ this._onChangeCallback = noop$4;
4349
+ this._onTouchedCallback = noop$4;
4328
4350
  this._subscription = new rxjs.Subscription();
4329
4351
  this.writing = true;
4330
4352
  this.disabling = false;
4331
4353
  this._onDestroy = new i0.EventEmitter();
4332
4354
  this.dayMask = DAY_MASK$1;
4333
- this.hourMask = HOUR_MASK;
4355
+ this.hourMask = HOUR_MASK$1;
4334
4356
  this.floatLabel = 'auto';
4335
4357
  this.readonly = false;
4336
4358
  this.compact = false;
@@ -4677,7 +4699,7 @@
4677
4699
  selector: 'mat-date-time-field',
4678
4700
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dateFormControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dateFormControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix #datePickerButton2 (click)=\"openDatePicker($event, datePicker)\" [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"></mat-datepicker>\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-invalid]=\"formControl.touched && (timeFormControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n <input matInput #matInput type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"timeFormControl\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowdown)=\"openTimePicker($event)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input matInput #matInput type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"timeFormControl\"\n (click)=\"openTimePickerIfMobile($event)\"\n readonly>\n\n <input matInput type=\"text\"\n [formControl]=\"timeFormControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\">\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n",
4679
4701
  providers: [
4680
- DEFAULT_VALUE_ACCESSOR$2,
4702
+ DEFAULT_VALUE_ACCESSOR$4,
4681
4703
  ],
4682
4704
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
4683
4705
  styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
@@ -4716,10 +4738,10 @@
4716
4738
  useExisting: i0.forwardRef(function () { return MatDateShort; }),
4717
4739
  multi: true
4718
4740
  };
4719
- var DAY_MASK$2 = [/\d/, /\d/, /\d/, /\d/];
4720
- var noop$4 = function () {
4741
+ var DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
4742
+ var noop$3 = function () {
4721
4743
  };
4722
- var ɵ0$4 = noop$4;
4744
+ var ɵ0$6 = noop$3;
4723
4745
  var MatDateShort = /** @class */ (function () {
4724
4746
  function MatDateShort(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
4725
4747
  this.dateAdapter = dateAdapter;
@@ -4728,11 +4750,11 @@
4728
4750
  this.cd = cd;
4729
4751
  this.keyboard = keyboard;
4730
4752
  this.formGroupDir = formGroupDir;
4731
- this._onChangeCallback = noop$4;
4732
- this._onTouchedCallback = noop$4;
4753
+ this._onChangeCallback = noop$3;
4754
+ this._onTouchedCallback = noop$3;
4733
4755
  this.writing = true;
4734
4756
  this.disabling = false;
4735
- this.dayMask = DAY_MASK$2;
4757
+ this.dayMask = DAY_MASK;
4736
4758
  this.disabled = false;
4737
4759
  this.floatLabel = 'auto';
4738
4760
  this.readonly = false;
@@ -5080,16 +5102,16 @@
5080
5102
  },] }
5081
5103
  ];
5082
5104
 
5083
- var DEFAULT_VALUE_ACCESSOR$4 = {
5105
+ var DEFAULT_VALUE_ACCESSOR$2 = {
5084
5106
  provide: i1.NG_VALUE_ACCESSOR,
5085
5107
  useExisting: i0.forwardRef(function () { return MatDuration; }),
5086
5108
  multi: true
5087
5109
  };
5088
5110
  var HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
5089
- var HOUR_MASK$1 = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
5090
- var noop$5 = function () {
5111
+ var HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
5112
+ var noop$2 = function () {
5091
5113
  };
5092
- var ɵ0$5 = noop$5;
5114
+ var ɵ0$5 = noop$2;
5093
5115
  var MatDuration = /** @class */ (function () {
5094
5116
  function MatDuration(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
5095
5117
  this.dateAdapter = dateAdapter;
@@ -5098,11 +5120,11 @@
5098
5120
  this.cd = cd;
5099
5121
  this.formGroupDir = formGroupDir;
5100
5122
  this._subscription = new rxjs.Subscription();
5101
- this._onChangeCallback = noop$5;
5102
- this._onTouchedCallback = noop$5;
5123
+ this._onChangeCallback = noop$2;
5124
+ this._onTouchedCallback = noop$2;
5103
5125
  this.writing = true;
5104
5126
  this.disabling = false;
5105
- this.hourMask = HOUR_MASK$1;
5127
+ this.hourMask = HOUR_MASK;
5106
5128
  this.disabled = false;
5107
5129
  this.floatLabel = 'auto';
5108
5130
  this.readonly = false;
@@ -5295,7 +5317,7 @@
5295
5317
  selector: 'mat-duration-field',
5296
5318
  template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{ formControl.value|duration }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput type=\"text\"\n autocomplete=\"off\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n\n <!-- errors -->\n <mat-error *ngIf=\"!formControl.hasError('required') && textControl.hasError('pattern')\" translate>ERROR.FIELD_NOT_VALID_PATTERN</mat-error>\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('min')\">\n {{(compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate:formControl.errors.min }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('max')\">\n {{(compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate:formControl.errors.max }}</mat-error>\n\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n</ng-template>\n\n",
5297
5319
  providers: [
5298
- DEFAULT_VALUE_ACCESSOR$4,
5320
+ DEFAULT_VALUE_ACCESSOR$2,
5299
5321
  ],
5300
5322
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
5301
5323
  styles: [":host{display:inline-block;min-width:140px;position:relative;--ion-grid-column-padding:0}:host,mat-form-field{width:100%}mat-form-field .mat-form-field-subscript-wrapper{overflow:visible;top:100%}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}mat-error{text-align:right;width:100%}"]
@@ -5355,22 +5377,22 @@
5355
5377
  },] }
5356
5378
  ];
5357
5379
 
5358
- var DEFAULT_VALUE_ACCESSOR$5 = {
5380
+ var DEFAULT_VALUE_ACCESSOR$1 = {
5359
5381
  provide: i1.NG_VALUE_ACCESSOR,
5360
5382
  useExisting: i0.forwardRef(function () { return MatBooleanField; }),
5361
5383
  multi: true
5362
5384
  };
5363
- var noop$6 = function () {
5385
+ var noop$1 = function () {
5364
5386
  };
5365
- var ɵ0$6 = noop$6;
5387
+ var ɵ0$4 = noop$1;
5366
5388
  var MatBooleanField = /** @class */ (function () {
5367
5389
  function MatBooleanField(translate, formBuilder, cd, formGroupDir) {
5368
5390
  this.translate = translate;
5369
5391
  this.formBuilder = formBuilder;
5370
5392
  this.cd = cd;
5371
5393
  this.formGroupDir = formGroupDir;
5372
- this._onChangeCallback = noop$6;
5373
- this._onTouchedCallback = noop$6;
5394
+ this._onChangeCallback = noop$1;
5395
+ this._onTouchedCallback = noop$1;
5374
5396
  this._writing = false;
5375
5397
  this.showRadio = false;
5376
5398
  this.disabled = false;
@@ -5556,7 +5578,7 @@
5556
5578
  selector: 'mat-boolean-field',
5557
5579
  template: "<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled {{classList}}\">\n <input matInput hidden type=\"text\" readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{(formControl.value == null && 'COMMON.EMPTY_OPTION' || (formControl.value === true && yesLabel) || noLabel) | translate }}</ion-text>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n\n <!-- Radio -->\n <mat-form-field *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-radio {{classList}}\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n <span [hidden]=\"showRadio\">({{yesLabel|translate}}/{{'COMMON.NO'|translate}})</span>\n </mat-label>\n\n <input matInput #fakeInput type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{yesLabel|translate}}</span>\n </mat-radio-button>&nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{noLabel|translate}}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field *ngSwitchCase=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{classList}}\">\n <mat-label *ngIf=\"placeholder && !showRadio\">\n {{placeholder}}\n </mat-label>\n\n <input matInput #matInput\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <ion-label>&nbsp;</ion-label>\n\n <!-- checkbox, when compact -->\n <mat-checkbox #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value===undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\">\n </mat-checkbox>\n\n <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel === 'never' ? 'never' : 'always'\"\n class=\"mat-boolean-field mat-boolean-field-button {{classList}}\">\n <input matInput type=\"text\" hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\">\n <div class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\">\n <!-- yes -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === true) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{yesLabel|translate}}\n </ion-button>\n\n <!-- No button -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? (_tabindex + 1) : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === false) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{noLabel|translate}}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </ng-container>\n\n <div class=\"cdk-visually-hidden\">\n <div #suffix><ng-content select=\"[matSuffix]\"></ng-content></div>\n </div>\n\n</ng-template>\n\n\n",
5558
5580
  providers: [
5559
- DEFAULT_VALUE_ACCESSOR$5
5581
+ DEFAULT_VALUE_ACCESSOR$1
5560
5582
  ],
5561
5583
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
5562
5584
  styles: [":host{width:100%}.mat-form-field.mat-boolean-field-radio{margin-top:-2px}.mat-form-field.mat-boolean-field-button{margin-top:-4px}.mat-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis:calc(100% / var(--buttons-col-count, 2));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:40px}"]
@@ -5645,6 +5667,7 @@
5645
5667
  return MatNumpadEvent;
5646
5668
  }(KeyboardEvent));
5647
5669
 
5670
+ exports.AnimationState = void 0;
5648
5671
  (function (AnimationState) {
5649
5672
  AnimationState["ENTER"] = "enter";
5650
5673
  AnimationState["ENTER_INPUT"] = "enter-input";
@@ -5812,7 +5835,7 @@
5812
5835
  };
5813
5836
  return MatNumpadDomService;
5814
5837
  }());
5815
- MatNumpadDomService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1$4.DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
5838
+ MatNumpadDomService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(i0__namespace.ɵɵinject(i0__namespace.ComponentFactoryResolver), i0__namespace.ɵɵinject(i0__namespace.ApplicationRef), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(i1__namespace$3.DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
5816
5839
  MatNumpadDomService.decorators = [
5817
5840
  { type: i0.Injectable, args: [{
5818
5841
  providedIn: 'root'
@@ -6218,7 +6241,7 @@
6218
6241
  },] }
6219
6242
  ];
6220
6243
 
6221
- var DEFAULT_VALUE_ACCESSOR$6 = {
6244
+ var DEFAULT_VALUE_ACCESSOR = {
6222
6245
  provide: i1.NG_VALUE_ACCESSOR,
6223
6246
  useExisting: i0.forwardRef(function () { return MatSwipeField; }),
6224
6247
  multi: true
@@ -6538,7 +6561,7 @@
6538
6561
  { type: i0.Component, args: [{
6539
6562
  selector: 'mat-swipe-field',
6540
6563
  template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n </mat-label>\n <input matInput #fakeInput type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\">\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <ion-slides #slides\n [options]=\"slidesOptions\"\n (ionSlidesDidLoad)=\"slidesLoaded()\"\n (ionSlideReachStart)=\"reachStart(true)\"\n (ionSlideReachEnd)=\"reachEnd(true)\"\n (ionSlideNextEnd)=\"reachStart(false)\"\n (ionSlidePrevEnd)=\"reachEnd(false)\"\n (ionSlideDidChange)=\"slideChanged()\"\n >\n <ion-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </ion-slide>\n\n </ion-slides>\n </div>\n\n <button #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n\n</mat-form-field>\n",
6541
- providers: [DEFAULT_VALUE_ACCESSOR$6],
6564
+ providers: [DEFAULT_VALUE_ACCESSOR],
6542
6565
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
6543
6566
  styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-next,.button-prev{position:absolute;top:calc(50% - 20px);z-index:10}.button-prev{left:0;right:auto}.button-next{left:auto;right:0}"]
6544
6567
  },] }
@@ -7096,7 +7119,7 @@
7096
7119
  };
7097
7120
  return ProgressBarService;
7098
7121
  }());
7099
- ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
7122
+ ProgressBarService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
7100
7123
  ProgressBarService.decorators = [
7101
7124
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
7102
7125
  ];
@@ -7143,7 +7166,7 @@
7143
7166
  };
7144
7167
  return AppGestureConfig;
7145
7168
  }(i1$6.HammerGestureConfig));
7146
- AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
7169
+ AppGestureConfig.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
7147
7170
  AppGestureConfig.decorators = [
7148
7171
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
7149
7172
  ];
@@ -7408,7 +7431,7 @@
7408
7431
  };
7409
7432
  return MatPaginatorI18n;
7410
7433
  }(paginator.MatPaginatorIntl));
7411
- MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$2.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
7434
+ MatPaginatorI18n.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
7412
7435
  MatPaginatorI18n.decorators = [
7413
7436
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
7414
7437
  ];
@@ -7500,17 +7523,17 @@
7500
7523
  return rgbArrayToHex(rgb.map(function (v) { return 255 - v; }));
7501
7524
  }
7502
7525
 
7503
- var noop$7 = function () {
7526
+ var noop = function () {
7504
7527
  };
7505
- var ɵ0$7 = noop$7;
7528
+ var ɵ0$3 = noop;
7506
7529
  var AppFormField = /** @class */ (function () {
7507
7530
  function AppFormField(translate, cd, injector, formGroupDir) {
7508
7531
  this.translate = translate;
7509
7532
  this.cd = cd;
7510
7533
  this.injector = injector;
7511
7534
  this.formGroupDir = formGroupDir;
7512
- this._onChangeCallback = noop$7;
7513
- this._onTouchedCallback = noop$7;
7535
+ this._onChangeCallback = noop;
7536
+ this._onTouchedCallback = noop;
7514
7537
  this.readonly = false;
7515
7538
  this.compact = false;
7516
7539
  this.floatLabel = 'auto';
@@ -7969,7 +7992,7 @@
7969
7992
  };
7970
7993
  return AudioProvider;
7971
7994
  }());
7972
- AudioProvider.ɵprov = i0.ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i2$2.NativeAudio, 8), i0.ɵɵinject(i3$1.Vibration, 8), i0.ɵɵinject(i4.AudioManagement, 8)); }, token: AudioProvider, providedIn: "root" });
7995
+ AudioProvider.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i2__namespace.NativeAudio, 8), i0__namespace.ɵɵinject(i3__namespace.Vibration, 8), i0__namespace.ɵɵinject(i4__namespace.AudioManagement, 8)); }, token: AudioProvider, providedIn: "root" });
7973
7996
  AudioProvider.decorators = [
7974
7997
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
7975
7998
  ];
@@ -8069,7 +8092,7 @@
8069
8092
  };
8070
8093
  return Hotkeys;
8071
8094
  }());
8072
- Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1$6.EventManager), i0.ɵɵinject(i2.MatDialog), i0.ɵɵinject(i1$4.DOCUMENT), i0.ɵɵinject(i1$5.ModalController)); }, token: Hotkeys, providedIn: "root" });
8095
+ Hotkeys.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0__namespace.ɵɵinject(i1__namespace$5.EventManager), i0__namespace.ɵɵinject(i2__namespace$1.MatDialog), i0__namespace.ɵɵinject(i1__namespace$3.DOCUMENT), i0__namespace.ɵɵinject(i1__namespace$4.ModalController)); }, token: Hotkeys, providedIn: "root" });
8073
8096
  Hotkeys.decorators = [
8074
8097
  { type: i0.Injectable, args: [{
8075
8098
  providedIn: 'root'
@@ -8273,7 +8296,7 @@
8273
8296
  return Base64ImageReader;
8274
8297
  }());
8275
8298
 
8276
- var uuidv4 = uuidv4Imported__namespace;
8299
+ var uuidv4$1 = uuidv4Imported__namespace;
8277
8300
  var FileService = /** @class */ (function () {
8278
8301
  function FileService(platform,
8279
8302
  //private transfer: FileTransfer,
@@ -8319,7 +8342,7 @@
8319
8342
  lastSlashIndex = source.lastIndexOf('/');
8320
8343
  if (lastSlashIndex === -1)
8321
8344
  throw new Error('Invalid URL: ' + source);
8322
- fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();
8345
+ fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4$1();
8323
8346
  if (!(responseType === 'file' && this.canUseFileSystem)) return [3 /*break*/, 4];
8324
8347
  console.warn("WARN: [file] Fetching image {" + source + "} in local file...");
8325
8348
  targetFilePath = this._imageDirectory + fileName;
@@ -8382,7 +8405,7 @@
8382
8405
  };
8383
8406
  return FileService;
8384
8407
  }());
8385
- FileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i2$1.HttpClient), i0.ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
8408
+ FileService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i2__namespace$2.HttpClient), i0__namespace.ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
8386
8409
  FileService.decorators = [
8387
8410
  { type: i0.Injectable, args: [{
8388
8411
  providedIn: 'root',
@@ -8545,7 +8568,7 @@
8545
8568
  Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
8546
8569
 
8547
8570
  var scrypt = require('scrypt-async');
8548
- var sha256 = require('hash.js/lib/hash/sha/256');
8571
+ var sha256$1 = require('hash.js/lib/hash/sha/256');
8549
8572
  var sha512 = require('hash.js/lib/hash/sha/512');
8550
8573
  var nacl = {
8551
8574
  sign: tweetnacl.sign,
@@ -8651,7 +8674,7 @@
8651
8674
  * Hash (using SHA256) a message
8652
8675
  */
8653
8676
  CryptoService.prototype.sha256 = function (message) {
8654
- return sha256().update(message).digest('hex');
8677
+ return sha256$1().update(message).digest('hex');
8655
8678
  };
8656
8679
  /**
8657
8680
  * Hash (using SHA512) a message
@@ -8665,7 +8688,7 @@
8665
8688
  };
8666
8689
  return CryptoService;
8667
8690
  }());
8668
- CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
8691
+ CryptoService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
8669
8692
  CryptoService.decorators = [
8670
8693
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
8671
8694
  ];
@@ -10078,7 +10101,7 @@
10078
10101
  };
10079
10102
  return LocalSettingsService;
10080
10103
  }());
10081
- LocalSettingsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_SETTINGS, 8), i0.ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
10104
+ LocalSettingsService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(APP_LOCAL_SETTINGS, 8), i0__namespace.ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
10082
10105
  LocalSettingsService.decorators = [
10083
10106
  { type: i0.Injectable, args: [{
10084
10107
  providedIn: 'root',
@@ -10224,6 +10247,8 @@
10224
10247
  switch (type) {
10225
10248
  case ngx$4.Connection.NONE:
10226
10249
  return 'none';
10250
+ case ngx$4.Connection.ETHERNET:
10251
+ return 'ethernet';
10227
10252
  case ngx$4.Connection.WIFI:
10228
10253
  return 'wifi';
10229
10254
  case ngx$4.Connection.CELL:
@@ -10231,8 +10256,6 @@
10231
10256
  case ngx$4.Connection.CELL_3G:
10232
10257
  case ngx$4.Connection.CELL_4G:
10233
10258
  return 'cell';
10234
- case ngx$4.Connection.ETHERNET:
10235
- return 'ethernet';
10236
10259
  case ngx$4.Connection.UNKNOWN:
10237
10260
  return 'unknown';
10238
10261
  default:
@@ -10923,7 +10946,7 @@
10923
10946
  };
10924
10947
  return NetworkService;
10925
10948
  }());
10926
- NetworkService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(i0.ɵɵinject(i1$4.DOCUMENT), i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i1$5.ModalController), i0.ɵɵinject(CryptoService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i2$1.HttpClient), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i9.Network, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i1$2.TranslateService, 8), i0.ɵɵinject(i1$5.ToastController, 8)); }, token: NetworkService, providedIn: "root" });
10949
+ NetworkService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(i0__namespace.ɵɵinject(i1__namespace$3.DOCUMENT), i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i1__namespace$4.ModalController), i0__namespace.ɵɵinject(CryptoService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(LocalSettingsService), i0__namespace.ɵɵinject(i6__namespace.CacheService), i0__namespace.ɵɵinject(i2__namespace$2.HttpClient), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(i9__namespace.Network, 8), i0__namespace.ɵɵinject(i10__namespace.SplashScreen, 8), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService, 8), i0__namespace.ɵɵinject(i1__namespace$4.ToastController, 8)); }, token: NetworkService, providedIn: "root" });
10927
10950
  NetworkService.decorators = [
10928
10951
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
10929
10952
  ];
@@ -10943,7 +10966,7 @@
10943
10966
  { type: i1$5.ToastController, decorators: [{ type: i0.Optional }] }
10944
10967
  ]; };
10945
10968
 
10946
- var ErrorCodes = {
10969
+ var ErrorCodes$2 = {
10947
10970
  UNKNOWN_ERROR: 0,
10948
10971
  LOAD_ACCOUNT_ERROR: 1,
10949
10972
  BAD_PASSWORD: 2,
@@ -11351,7 +11374,7 @@
11351
11374
  case 13:
11352
11375
  err_1 = _a.sent();
11353
11376
  console.error(err_1);
11354
- throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err_1 };
11377
+ throw { code: ErrorCodes$2.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err_1 };
11355
11378
  case 14:
11356
11379
  // Emit update event
11357
11380
  if (!opts || opts.emitEvent !== false) {
@@ -12111,7 +12134,7 @@
12111
12134
  }());
12112
12135
  EntitiesStorage.TRASH_PREFIX = 'Trash#';
12113
12136
  EntitiesStorage.REMOTE_PREFIX = 'Remote#';
12114
- EntitiesStorage.ɵprov = i0.ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(ProgressBarService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
12137
+ EntitiesStorage.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(ProgressBarService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
12115
12138
  EntitiesStorage.decorators = [
12116
12139
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
12117
12140
  ];
@@ -12228,10 +12251,10 @@
12228
12251
  function referentialsToString(values, properties, separator) {
12229
12252
  return (values || []).map(function (v) { return referentialToString(v, properties); }).join(separator || ', ');
12230
12253
  }
12231
- var ɵ0$8 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
12254
+ var ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
12232
12255
  var StatusList = Object.freeze([
12233
12256
  {
12234
- id: ɵ0$8,
12257
+ id: ɵ0$2,
12235
12258
  icon: 'checkmark',
12236
12259
  label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
12237
12260
  },
@@ -12534,7 +12557,7 @@
12534
12557
  (data.lastName || '')) || '';
12535
12558
  }
12536
12559
 
12537
- var uuidv4$1 = uuidv4Imported__namespace;
12560
+ var uuidv4 = uuidv4Imported__namespace;
12538
12561
  var _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
12539
12562
  var NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
12540
12563
  /**
@@ -12578,7 +12601,7 @@
12578
12601
  // Skip if not tracked
12579
12602
  if (!context || !context.tracked)
12580
12603
  return forward(operation);
12581
- var id = context.serializationKey || uuidv4$1();
12604
+ var id = context.serializationKey || uuidv4();
12582
12605
  console.debug("[apollo-tracker-link] Watching tracked query {" + operation.operationName + "#" + id + "}");
12583
12606
  // Clean context, before calling JSON.stringify (remove unused attributes)
12584
12607
  var cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
@@ -13251,18 +13274,19 @@
13251
13274
  mutationLinks = void 0;
13252
13275
  // Add queue to store tracked queries, when offline
13253
13276
  if (enableTrackMutationQueries) {
13254
- serializingLink = new SerializingLink__default['default']();
13277
+ serializingLink = new SerializingLink__default["default"]();
13255
13278
  trackerLink = createTrackerLink({
13256
13279
  storage: storage,
13257
13280
  onNetworkStatusChange: this._networkStatusChanged$,
13258
13281
  debounce: 1000,
13259
13282
  debug: true
13260
13283
  });
13261
- queueLink_1 = new QueueLink__default['default']();
13284
+ queueLink_1 = new QueueLink__default["default"]();
13262
13285
  this._subscription.add(this._networkStatusChanged$
13263
13286
  .subscribe(function (type) {
13287
+ var offline = type === 'none';
13264
13288
  // Network is offline: start buffering into queue
13265
- if (type === 'none') {
13289
+ if (offline) {
13266
13290
  console.info('[graphql] offline mode: enable mutations buffer');
13267
13291
  queueLink_1.close();
13268
13292
  }
@@ -13273,7 +13297,7 @@
13273
13297
  }
13274
13298
  }));
13275
13299
  mutationLinks = [
13276
- loggerLink__default['default'],
13300
+ loggerLink__default["default"],
13277
13301
  queueLink_1,
13278
13302
  trackerLink,
13279
13303
  queueLink_1,
@@ -13389,7 +13413,7 @@
13389
13413
  (err.networkError && ((err.networkError.error && this.toAppError(err.networkError.error))
13390
13414
  || this.toAppError(err.networkError)
13391
13415
  || (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))
13392
- || this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)))
13416
+ || this.createAppErrorByCode(ErrorCodes$2.UNKNOWN_NETWORK_ERROR)))
13393
13417
  // If graphQL: try to convert the first error found
13394
13418
  || (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))
13395
13419
  || this.toAppError(err)
@@ -13397,7 +13421,7 @@
13397
13421
  || (err.graphQLErrors && err.graphQLErrors[0])
13398
13422
  || err;
13399
13423
  console.error('[graphql] ' + (error && error.message || error), error.stack || '');
13400
- if (error && error.code === ErrorCodes.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
13424
+ if (error && error.code === ErrorCodes$2.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
13401
13425
  console.error('[graphql] original error: ' + err.networkError.message);
13402
13426
  this.onNetworkError.next(error);
13403
13427
  }
@@ -13433,7 +13457,7 @@
13433
13457
  return 'ERROR.UNAUTHORIZED';
13434
13458
  case ServerErrorCodes.FORBIDDEN:
13435
13459
  return 'ERROR.FORBIDDEN';
13436
- case ErrorCodes.UNKNOWN_NETWORK_ERROR:
13460
+ case ErrorCodes$2.UNKNOWN_NETWORK_ERROR:
13437
13461
  return 'ERROR.UNKNOWN_NETWORK_ERROR';
13438
13462
  case ServerErrorCodes.BAD_UPDATE_DATE:
13439
13463
  return 'ERROR.BAD_UPDATE_DATE';
@@ -13478,7 +13502,7 @@
13478
13502
  };
13479
13503
  return GraphqlService;
13480
13504
  }());
13481
- GraphqlService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i2$3.Apollo), i0.ɵɵinject(i3$3.HttpLink), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(CryptoService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
13505
+ GraphqlService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i2__namespace$3.Apollo), i0__namespace.ɵɵinject(i3__namespace$2.HttpLink), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(CryptoService), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
13482
13506
  GraphqlService.decorators = [
13483
13507
  { type: i0.Injectable, args: [{
13484
13508
  providedIn: 'root'
@@ -13495,7 +13519,7 @@
13495
13519
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
13496
13520
  ]; };
13497
13521
 
13498
- var sha256$1 = require('hash.js/lib/hash/sha/256');
13522
+ var sha256 = require('hash.js/lib/hash/sha/256');
13499
13523
  var BaseGraphqlServiceOptions = /** @class */ (function () {
13500
13524
  function BaseGraphqlServiceOptions() {
13501
13525
  }
@@ -13662,8 +13686,8 @@
13662
13686
  };
13663
13687
  /* -- protected methods -- */
13664
13688
  BaseGraphqlService.prototype.computeMutableWatchQueryId = function (opts) {
13665
- var queryName = opts.queryName || sha256$1().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
13666
- var variablesKey = opts.variables && sha256$1().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
13689
+ var queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
13690
+ var variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
13667
13691
  return [queryName, opts.arrayFieldName, variablesKey].join('|');
13668
13692
  };
13669
13693
  BaseGraphqlService.prototype.findMutableWatchQueries = function (opts) {
@@ -13729,17 +13753,17 @@
13729
13753
  /* ------------------------------------
13730
13754
  * GraphQL queries
13731
13755
  * ------------------------------------*/
13732
- var Fragments = {
13733
- account: core.gql(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n fragment AccountFragment on AccountVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n settings {\n id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }\n "], ["\n fragment AccountFragment on AccountVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n settings {\n id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }\n "])))
13756
+ var Fragments$1 = {
13757
+ account: core.gql(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n fragment AccountFragment on AccountVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n settings {\n id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }\n "], ["\n fragment AccountFragment on AccountVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n settings {\n id\n locale\n latLongFormat\n content\n nonce\n updateDate\n __typename\n }\n department {\n id\n label\n name\n __typename\n }\n __typename\n }\n "])))
13734
13758
  };
13735
13759
  // Load account query
13736
- var LoadQuery = core.gql(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ", "\n"], ["\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ", "\n"])), Fragments.account);
13760
+ var LoadQuery$1 = core.gql(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ", "\n"], ["\n query Account {\n data: account {\n ...AccountFragment\n }\n }\n ", "\n"])), Fragments$1.account);
13737
13761
  // Check email query
13738
- var IsEmailExistsQuery = core.gql(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n"], ["\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n"])));
13762
+ var IsEmailExistsQuery = core.gql(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n"], ["\n query IsEmailExists($email: String, $hash: String){\n isEmailExists(email: $email, hash: $hash)\n }\n"])));
13739
13763
  // Save (create or update) account mutation
13740
- var SaveMutation = core.gql(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n"], ["\n mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n"])), Fragments.account);
13764
+ var SaveMutation$1 = core.gql(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n"], ["\n mutation SaveAccount($data:AccountVOInput){\n data: saveAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n"])), Fragments$1.account);
13741
13765
  // Create account mutation
13742
- var CreateMutation = core.gql(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n"], ["\n mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n"])), Fragments.account);
13766
+ var CreateMutation = core.gql(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n"], ["\n mutation CreateAccount($data:AccountVOInput){\n data: createAccount(account: $data){\n ...AccountFragment\n }\n }\n ", "\n"])), Fragments$1.account);
13743
13767
  // Sent confirmation email
13744
13768
  var SendConfirmEmailMutation = core.gql(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n mutation sendAccountConfirmationEmail($email:String, $locale:String){\n sendAccountConfirmationEmail(email: $email, locale: $locale)\n }\n"], ["\n mutation sendAccountConfirmationEmail($email:String, $locale:String){\n sendAccountConfirmationEmail(email: $email, locale: $locale)\n }\n"])));
13745
13769
  // Confirm account email
@@ -14138,7 +14162,7 @@
14138
14162
  error_3 = _b.sent();
14139
14163
  console.error(error_3);
14140
14164
  this.resetData();
14141
- throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
14165
+ throw { code: ErrorCodes$2.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
14142
14166
  case 4:
14143
14167
  // Store pubkey+keypair
14144
14168
  this.data.pubkey = Base58.encode(keypair.publicKey);
@@ -14174,7 +14198,7 @@
14174
14198
  return [3 /*break*/, 18];
14175
14199
  case 11:
14176
14200
  err_1 = _b.sent();
14177
- if (!(err_1 && +(err_1.code) === ErrorCodes.LOAD_ACCOUNT_ERROR)) return [3 /*break*/, 17];
14201
+ if (!(err_1 && +(err_1.code) === ErrorCodes$2.LOAD_ACCOUNT_ERROR)) return [3 /*break*/, 17];
14178
14202
  if (!(data.username.indexOf('@') !== -1)) return [3 /*break*/, 16];
14179
14203
  isEmailExists = void 0;
14180
14204
  _b.label = 12;
@@ -14190,12 +14214,12 @@
14190
14214
  case 15:
14191
14215
  // Email not exists (no account)
14192
14216
  if (!isEmailExists) {
14193
- throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
14217
+ throw { code: ErrorCodes$2.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
14194
14218
  }
14195
14219
  _b.label = 16;
14196
14220
  case 16:
14197
14221
  // Email exists, so error = 'bad password'
14198
- throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
14222
+ throw { code: ErrorCodes$2.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
14199
14223
  case 17: throw err_1; // resend the first error
14200
14224
  case 18:
14201
14225
  _b.trys.push([18, 20, , 21]);
@@ -14367,8 +14391,8 @@
14367
14391
  _b.label = 3;
14368
14392
  case 3: return [3 /*break*/, 6];
14369
14393
  case 4: return [4 /*yield*/, this.graphql.query({
14370
- query: LoadQuery,
14371
- error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
14394
+ query: LoadQuery$1,
14395
+ error: { code: ErrorCodes$2.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
14372
14396
  fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
14373
14397
  })];
14374
14398
  case 5:
@@ -14406,7 +14430,7 @@
14406
14430
  case 1:
14407
14431
  isEmailExists = _b.sent();
14408
14432
  if (isEmailExists) {
14409
- throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
14433
+ throw { code: ErrorCodes$2.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
14410
14434
  }
14411
14435
  return [2 /*return*/];
14412
14436
  }
@@ -14456,7 +14480,7 @@
14456
14480
  locale: locale
14457
14481
  },
14458
14482
  error: {
14459
- code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,
14483
+ code: ErrorCodes$2.SENT_CONFIRMATION_EMAIL_FAILED,
14460
14484
  message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'
14461
14485
  }
14462
14486
  })];
@@ -14479,7 +14503,7 @@
14479
14503
  code: code
14480
14504
  },
14481
14505
  error: {
14482
- code: ErrorCodes.CONFIRM_EMAIL_FAILED,
14506
+ code: ErrorCodes$2.CONFIRM_EMAIL_FAILED,
14483
14507
  message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'
14484
14508
  }
14485
14509
  })];
@@ -14501,7 +14525,7 @@
14501
14525
  interval: 10
14502
14526
  },
14503
14527
  error: {
14504
- code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,
14528
+ code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
14505
14529
  message: 'ERROR.ACCOUNT.SUBSCRIBE_ACCOUNT_ERROR'
14506
14530
  }
14507
14531
  }).subscribe({
@@ -14647,7 +14671,7 @@
14647
14671
  throw error_6;
14648
14672
  console.error(error_6);
14649
14673
  throw {
14650
- code: ErrorCodes.LOAD_ACCOUNT_ERROR,
14674
+ code: ErrorCodes$2.LOAD_ACCOUNT_ERROR,
14651
14675
  message: 'ERROR.LOAD_ACCOUNT_ERROR'
14652
14676
  };
14653
14677
  case 4: return [2 /*return*/];
@@ -14821,7 +14845,7 @@
14821
14845
  case 1:
14822
14846
  existingAccount = _b.sent();
14823
14847
  if (!existingAccount || !existingAccount.updateDate) {
14824
- throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
14848
+ throw { code: ErrorCodes$2.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
14825
14849
  }
14826
14850
  this.copyIdAndUpdateDate(existingAccount, account);
14827
14851
  _b.label = 2;
@@ -14830,10 +14854,10 @@
14830
14854
  // User not allow to change his profiles
14831
14855
  delete json.profiles;
14832
14856
  return [4 /*yield*/, this.graphql.mutate({
14833
- mutation: isNew ? CreateMutation : SaveMutation,
14857
+ mutation: isNew ? CreateMutation : SaveMutation$1,
14834
14858
  variables: { data: json },
14835
14859
  error: {
14836
- code: ErrorCodes.SAVE_ACCOUNT_ERROR,
14860
+ code: ErrorCodes$2.SAVE_ACCOUNT_ERROR,
14837
14861
  message: 'ERROR.SAVE_ACCOUNT_ERROR'
14838
14862
  }
14839
14863
  })];
@@ -14861,7 +14885,7 @@
14861
14885
  if (counter > 4) {
14862
14886
  if (this._debug)
14863
14887
  console.debug("[account] Failed to authentication on pod (after " + counter + " attempts)");
14864
- throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
14888
+ throw { code: ErrorCodes$2.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
14865
14889
  }
14866
14890
  if (!token) return [3 /*break*/, 2];
14867
14891
  return [4 /*yield*/, this.graphql.query({
@@ -14870,7 +14894,7 @@
14870
14894
  token: token
14871
14895
  },
14872
14896
  error: {
14873
- code: ErrorCodes.UNAUTHORIZED,
14897
+ code: ErrorCodes$2.UNAUTHORIZED,
14874
14898
  message: 'ERROR.UNAUTHORIZED'
14875
14899
  },
14876
14900
  fetchPolicy: 'no-cache'
@@ -14887,7 +14911,7 @@
14887
14911
  _b.label = 2;
14888
14912
  case 2:
14889
14913
  challengeError = {
14890
- code: ErrorCodes.AUTH_CHALLENGE_ERROR,
14914
+ code: ErrorCodes$2.AUTH_CHALLENGE_ERROR,
14891
14915
  message: 'ERROR.AUTH_CHALLENGE_ERROR'
14892
14916
  };
14893
14917
  return [4 /*yield*/, this.graphql.query({
@@ -14929,7 +14953,7 @@
14929
14953
  };
14930
14954
  return AccountService;
14931
14955
  }(BaseGraphqlService));
14932
- AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(CryptoService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(FileService), i0.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
14956
+ AccountService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0__namespace.ɵɵinject(CryptoService), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(LocalSettingsService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(FileService), i0__namespace.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
14933
14957
  AccountService.decorators = [
14934
14958
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
14935
14959
  ];
@@ -14942,7 +14966,7 @@
14942
14966
  { type: FileService },
14943
14967
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
14944
14968
  ]; };
14945
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10;
14969
+ var templateObject_1$4, templateObject_2$4, templateObject_3$3, templateObject_4$3, templateObject_5$2, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10;
14946
14970
 
14947
14971
  var Software_1, Configuration_1;
14948
14972
  // @dynamic
@@ -15194,13 +15218,13 @@
15194
15218
  /* ------------------------------------
15195
15219
  * GraphQL queries
15196
15220
  * ------------------------------------*/
15197
- var Fragments$1 = {
15198
- config: core.gql(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n fragment ConfigFragment on ConfigurationVO {\n id\n label\n name\n description\n comments\n properties\n smallLogo\n largeLogo\n backgroundImages\n partners {\n id\n label\n name\n logo\n siteUrl\n __typename\n }\n updateDate\n creationDate\n statusId\n __typename\n }\n "], ["\n fragment ConfigFragment on ConfigurationVO {\n id\n label\n name\n description\n comments\n properties\n smallLogo\n largeLogo\n backgroundImages\n partners {\n id\n label\n name\n logo\n siteUrl\n __typename\n }\n updateDate\n creationDate\n statusId\n __typename\n }\n "])))
15221
+ var Fragments = {
15222
+ config: core.gql(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n fragment ConfigFragment on ConfigurationVO {\n id\n label\n name\n description\n comments\n properties\n smallLogo\n largeLogo\n backgroundImages\n partners {\n id\n label\n name\n logo\n siteUrl\n __typename\n }\n updateDate\n creationDate\n statusId\n __typename\n }\n "], ["\n fragment ConfigFragment on ConfigurationVO {\n id\n label\n name\n description\n comments\n properties\n smallLogo\n largeLogo\n backgroundImages\n partners {\n id\n label\n name\n logo\n siteUrl\n __typename\n }\n updateDate\n creationDate\n statusId\n __typename\n }\n "])))
15199
15223
  };
15200
- var LoadQuery$1 = core.gql(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ", "\n"], ["\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ", "\n"])), Fragments$1.config);
15224
+ var LoadQuery = core.gql(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ", "\n"], ["\nquery Configuration{\n data: configuration{\n ...ConfigFragment\n }\n}\n ", "\n"])), Fragments.config);
15201
15225
  // Save (create or update) account mutation
15202
- var SaveMutation$1 = core.gql(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ", "\n"], ["\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ", "\n"])), Fragments$1.config);
15203
- var ClearCache = core.gql(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n"], ["\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n"])));
15226
+ var SaveMutation = core.gql(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ", "\n"], ["\n mutation SaveConfiguration($data: ConfigurationVOInput){\n data: saveConfiguration(config: $data){\n ...ConfigFragment\n }\n }\n ", "\n"])), Fragments.config);
15227
+ var ClearCache = core.gql(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n"], ["\n query ClearCache($name: String) {\n clearCache(name: $name)\n }\n"])));
15204
15228
  var CacheStatistics = core.gql(templateObject_5$1 || (templateObject_5$1 = __makeTemplateObject(["\n query CacheStatistics {\n cacheStatistics\n }\n"], ["\n query CacheStatistics {\n cacheStatistics\n }\n"])));
15205
15229
  var APP_CONFIG_OPTIONS = new i0.InjectionToken('defaultOptions');
15206
15230
  var ConfigService = /** @class */ (function (_super) {
@@ -15293,12 +15317,12 @@
15293
15317
  case 0:
15294
15318
  now = Date.now();
15295
15319
  console.debug('[config] Loading Pod configuration...');
15296
- query = opts && opts.query || LoadQuery$1;
15320
+ query = opts && opts.query || LoadQuery;
15297
15321
  variables = opts && opts.variables || undefined;
15298
15322
  return [4 /*yield*/, this.graphql.query({
15299
15323
  query: query,
15300
15324
  variables: variables,
15301
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
15325
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
15302
15326
  fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/
15303
15327
  })];
15304
15328
  case 1:
@@ -15332,12 +15356,12 @@
15332
15356
  console.debug('[config] Saving Pod configuration...', config);
15333
15357
  json = config.asObject();
15334
15358
  return [4 /*yield*/, this.graphql.mutate({
15335
- mutation: SaveMutation$1,
15359
+ mutation: SaveMutation,
15336
15360
  variables: {
15337
15361
  data: json
15338
15362
  },
15339
15363
  error: {
15340
- code: ErrorCodes.SAVE_CONFIG_ERROR,
15364
+ code: ErrorCodes$2.SAVE_CONFIG_ERROR,
15341
15365
  message: 'ERROR.SAVE_CONFIG_ERROR'
15342
15366
  }
15343
15367
  })];
@@ -15372,7 +15396,7 @@
15372
15396
  return [4 /*yield*/, this.graphql.query({
15373
15397
  query: CacheStatistics,
15374
15398
  variables: null,
15375
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
15399
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
15376
15400
  fetchPolicy: 'network-only'
15377
15401
  })];
15378
15402
  case 1:
@@ -15396,7 +15420,7 @@
15396
15420
  return [4 /*yield*/, this.graphql.query({
15397
15421
  query: ClearCache,
15398
15422
  variables: variables,
15399
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
15423
+ error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
15400
15424
  fetchPolicy: 'network-only'
15401
15425
  })];
15402
15426
  case 1:
@@ -15597,7 +15621,7 @@
15597
15621
  };
15598
15622
  return ConfigService;
15599
15623
  }(BaseGraphqlService));
15600
- ConfigService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(NetworkService), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$5.ToastController), i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
15624
+ ConfigService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(FileService), i0__namespace.ɵɵinject(i1__namespace$4.ToastController), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
15601
15625
  ConfigService.decorators = [
15602
15626
  { type: i0.Injectable, args: [{
15603
15627
  providedIn: 'root',
@@ -15615,11 +15639,11 @@
15615
15639
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
15616
15640
  { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_CONFIG_OPTIONS,] }] }
15617
15641
  ]; };
15618
- var templateObject_1$1, templateObject_2$1, templateObject_3$1, templateObject_4$1, templateObject_5$1;
15642
+ var templateObject_1$3, templateObject_2$3, templateObject_3$2, templateObject_4$2, templateObject_5$1;
15619
15643
 
15620
- var moment$4 = momentImported__namespace;
15644
+ var moment$2 = momentImported__namespace;
15621
15645
  var PlatformService = /** @class */ (function () {
15622
- function PlatformService(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser) {
15646
+ function PlatformService(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser, downloader) {
15623
15647
  this.platform = platform;
15624
15648
  this.cdkPlatform = cdkPlatform;
15625
15649
  this.toastController = toastController;
@@ -15638,6 +15662,7 @@
15638
15662
  this.keyboard = keyboard;
15639
15663
  this.splashScreen = splashScreen;
15640
15664
  this.browser = browser;
15665
+ this.downloader = downloader;
15641
15666
  this._started = false;
15642
15667
  this._debug = !environment.production;
15643
15668
  if (this._debug)
@@ -15668,6 +15693,9 @@
15668
15693
  PlatformService.prototype.isWebOrDesktop = function () {
15669
15694
  return !this.platform.is('mobile') || this.platform.is('mobileweb');
15670
15695
  };
15696
+ PlatformService.prototype.isAndroidCordova = function () {
15697
+ return this._android && this._cordova;
15698
+ };
15671
15699
  PlatformService.prototype.width = function () {
15672
15700
  return this.platform.width();
15673
15701
  };
@@ -15687,6 +15715,8 @@
15687
15715
  this._startPromise = this.platform.ready()
15688
15716
  .then(function () {
15689
15717
  _this._mobile = _this.platform.is('mobile');
15718
+ _this._cordova = _this.platform.is('cordova');
15719
+ _this._android = _this.platform.is('android');
15690
15720
  _this.configureCordovaPlugins(_this._mobile);
15691
15721
  _this.touchUi = _this._mobile || _this.platform.is('tablet') || _this.platform.is('phablet');
15692
15722
  // Force mobile in settings
@@ -15748,6 +15778,7 @@
15748
15778
  operators.filter(function () { return _this._started; }), operators.first()).toPromise();
15749
15779
  };
15750
15780
  PlatformService.prototype.open = function (url, target, features, replace) {
15781
+ console.info("[platform] Opening link: " + url);
15751
15782
  if (this.browser && this._mobile) {
15752
15783
  this.browser.create(url, target, features).show();
15753
15784
  }
@@ -15755,10 +15786,20 @@
15755
15786
  window.open(url, target, features, replace);
15756
15787
  }
15757
15788
  };
15758
- /*
15759
- chooseFile(): Promise<> {
15760
-
15761
- }*/
15789
+ PlatformService.prototype.download = function (request) {
15790
+ if (!request || !request.uri)
15791
+ throw new Error('Missing argument \'request\' or \'request.uri\'');
15792
+ if (this._android && this._cordova) {
15793
+ request = Object.assign(Object.assign({ visibleInDownloadsUi: true, notificationVisibility: ngx$6.NotificationVisibility.VisibleNotifyCompleted, title: request.filename || '' }, request), { destinationInExternalFilesDir: Object.assign({ dirType: 'Downloads', subPath: request.filename || request.title || '' }, request.destinationInExternalFilesDir) });
15794
+ this.downloader.download(request)
15795
+ .then(function (location) { return console.info('[platform] File successfully downloaded at:' + location); })
15796
+ .catch(function (error) { return console.error(error); });
15797
+ }
15798
+ // Web mode: open URI using the browser
15799
+ else {
15800
+ this.open(request.uri, '_system', 'location=yes');
15801
+ }
15802
+ };
15762
15803
  /* -- protected methods -- */
15763
15804
  PlatformService.prototype.configureCordovaPlugins = function (mobile) {
15764
15805
  console.info('[platform] Configuring Cordova plugins...');
@@ -15793,16 +15834,16 @@
15793
15834
  }
15794
15835
  // config moment lib
15795
15836
  try {
15796
- moment$4.locale(event.lang);
15837
+ moment$2.locale(event.lang);
15797
15838
  console.debug('[platform] Use locale {' + event.lang + '}');
15798
15839
  }
15799
15840
  // If error, fallback to en
15800
15841
  catch (err) {
15801
- moment$4.locale('en');
15842
+ moment$2.locale('en');
15802
15843
  console.warn('[platform] Unknown local for moment lib. Using default [en]');
15803
15844
  }
15804
15845
  // Config date adapter
15805
- _this.dateAdapter.setLocale(moment$4.locale());
15846
+ _this.dateAdapter.setLocale(moment$2.locale());
15806
15847
  }
15807
15848
  });
15808
15849
  this.settings.onChange.subscribe(function (data) {
@@ -15987,7 +16028,7 @@
15987
16028
  };
15988
16029
  return PlatformService;
15989
16030
  }());
15990
- PlatformService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(i0.ɵɵinject(i1$5.Platform), i0.ɵɵinject(i2$4.Platform), i0.ɵɵinject(i1$5.ToastController), i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(i1$1.MomentDateAdapter), i0.ɵɵinject(EntitiesStorage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(AccountService), i0.ɵɵinject(ConfigService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i3$2.Storage), i0.ɵɵinject(AudioProvider), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i14.StatusBar, 8), i0.ɵɵinject(i15.Keyboard, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i17.InAppBrowser, 8)); }, token: PlatformService, providedIn: "root" });
16031
+ PlatformService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(i0__namespace.ɵɵinject(i1__namespace$4.Platform), i0__namespace.ɵɵinject(i2__namespace$4.Platform), i0__namespace.ɵɵinject(i1__namespace$4.ToastController), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(i1__namespace.MomentDateAdapter), i0__namespace.ɵɵinject(EntitiesStorage), i0__namespace.ɵɵinject(LocalSettingsService), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(AccountService), i0__namespace.ɵɵinject(ConfigService), i0__namespace.ɵɵinject(i6__namespace.CacheService), i0__namespace.ɵɵinject(i3__namespace$1.Storage), i0__namespace.ɵɵinject(AudioProvider), i0__namespace.ɵɵinject(ENVIRONMENT), i0__namespace.ɵɵinject(i14__namespace.StatusBar, 8), i0__namespace.ɵɵinject(i15__namespace.Keyboard, 8), i0__namespace.ɵɵinject(i10__namespace.SplashScreen, 8), i0__namespace.ɵɵinject(i17__namespace.InAppBrowser, 8), i0__namespace.ɵɵinject(i18__namespace.Downloader, 8)); }, token: PlatformService, providedIn: "root" });
15991
16032
  PlatformService.decorators = [
15992
16033
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
15993
16034
  ];
@@ -16006,10 +16047,11 @@
16006
16047
  { type: i3$2.Storage },
16007
16048
  { type: AudioProvider },
16008
16049
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] },
16009
- { type: ngx$6.StatusBar, decorators: [{ type: i0.Optional }] },
16050
+ { type: ngx$7.StatusBar, decorators: [{ type: i0.Optional }] },
16010
16051
  { type: ngx.Keyboard, decorators: [{ type: i0.Optional }] },
16011
16052
  { type: ngx$5.SplashScreen, decorators: [{ type: i0.Optional }] },
16012
- { type: ngx$7.InAppBrowser, decorators: [{ type: i0.Optional }] }
16053
+ { type: ngx$8.InAppBrowser, decorators: [{ type: i0.Optional }] },
16054
+ { type: ngx$6.Downloader, decorators: [{ type: i0.Optional }] }
16013
16055
  ]; };
16014
16056
 
16015
16057
  var AppHelpModal = /** @class */ (function () {
@@ -16084,7 +16126,7 @@
16084
16126
  };
16085
16127
  return MatStepperI18n;
16086
16128
  }(stepper.MatStepperIntl));
16087
- MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$2.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
16129
+ MatStepperI18n.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0__namespace.ɵɵinject(i1__namespace$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
16088
16130
  MatStepperI18n.decorators = [
16089
16131
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
16090
16132
  ];
@@ -17276,7 +17318,7 @@
17276
17318
  return 1;
17277
17319
  }
17278
17320
  }
17279
- var ɵ0$9 = function (defaultStateSize) { return [
17321
+ var ɵ0$1 = function (defaultStateSize) { return [
17280
17322
  Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
17281
17323
  Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
17282
17324
  Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
@@ -17284,7 +17326,7 @@
17284
17326
  var SCALE_OPTIONS_DEFAULT = {
17285
17327
  startColor: rgbArrayMap.red,
17286
17328
  startStates: [0, 2, 3],
17287
- startStepsFn: ɵ0$9
17329
+ startStepsFn: ɵ0$1
17288
17330
  };
17289
17331
  /**
17290
17332
  * Internal function, that create a colors scale, using iteration
@@ -17376,24 +17418,24 @@
17376
17418
  return result;
17377
17419
  }
17378
17420
 
17379
- var EntityTestClass = /** @class */ (function () {
17421
+ var EntityTestClass$1 = /** @class */ (function () {
17380
17422
  function EntityTestClass() {
17381
17423
  }
17382
17424
  return EntityTestClass;
17383
17425
  }());
17384
- var FAKE_ENTITIES = [
17426
+ var FAKE_ENTITIES$1 = [
17385
17427
  { id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
17386
17428
  { id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
17387
17429
  { id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
17388
17430
  ];
17389
- function deepCopy(values, size) {
17431
+ function deepCopy$1(values, size) {
17390
17432
  if (isNil(size)) {
17391
- return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
17433
+ return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
17392
17434
  }
17393
17435
  var result = [];
17394
17436
  var i = 1;
17395
17437
  while (result.length < size) {
17396
- result = result.concat((values || FAKE_ENTITIES).map(function (entity) {
17438
+ result = result.concat((values || FAKE_ENTITIES$1).map(function (entity) {
17397
17439
  var name = entity.name + ' #' + i;
17398
17440
  return Object.assign(Object.assign({}, entity), { id: i++, name: name });
17399
17441
  }));
@@ -17403,7 +17445,7 @@
17403
17445
  var AutocompleteTestPage = /** @class */ (function () {
17404
17446
  function AutocompleteTestPage(formBuilder) {
17405
17447
  this.formBuilder = formBuilder;
17406
- this._items = deepCopy(FAKE_ENTITIES, 100);
17448
+ this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
17407
17449
  this.$items = new rxjs.BehaviorSubject(undefined);
17408
17450
  this.autocompleteFields = new MatAutocompleteConfigHolder();
17409
17451
  this.memoryHide = false;
@@ -17448,7 +17490,7 @@
17448
17490
  });
17449
17491
  // From items
17450
17492
  this.autocompleteFields.add('entity-items-large', {
17451
- items: FAKE_ENTITIES.slice(),
17493
+ items: FAKE_ENTITIES$1.slice(),
17452
17494
  attributes: ['label', 'name', 'description', 'comments'],
17453
17495
  displayWith: this.entityToString
17454
17496
  });
@@ -17461,12 +17503,12 @@
17461
17503
  var _this = this;
17462
17504
  return __generator(this, function (_a) {
17463
17505
  data = {
17464
- entity: deepCopy(FAKE_ENTITIES)[0],
17506
+ entity: deepCopy$1(FAKE_ENTITIES$1)[0],
17465
17507
  // This item is NOT in the items list => i should be displayed anyway
17466
17508
  missingEntity: {
17467
17509
  id: -1, label: '??', name: 'Missing item'
17468
17510
  },
17469
- disableEntity: deepCopy(FAKE_ENTITIES)[2]
17511
+ disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2]
17470
17512
  };
17471
17513
  this.form.setValue(data);
17472
17514
  // Load observables
@@ -17552,7 +17594,7 @@
17552
17594
  AutocompleteTestPage.decorators = [
17553
17595
  { type: i0.Component, args: [{
17554
17596
  selector: 'app-autocomplete-test',
17555
- 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>Autocomplete field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar>\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!--<ion-grid *ngIf=\"mode === 'temp'\">\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n </ion-grid>-->\n\n\n <ion-grid *ngIf=\"mode === 'memory'\">\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=\"2\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Items type\">\n <mat-select (selectionChange)=\"memoryAutocompleteFieldName=$event.value\" [value]=\"memoryAutocompleteFieldName\">\n <mat-option value=\"entity-$items\">Observable</mat-option>\n <mat-option value=\"entity-suggestFn\">Suggest function</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n <ion-col size=\"1\" class=\"ion-no-padding\">\n <mat-form-field floatLabel=\"always\" >\n <input matInput type=\"text\" hidden placeholder=\"Mobile ?\">\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\" color=\"tertiary\">Start</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\" color=\"tertiary\">Stop</ion-button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n *ngIf=\"!memoryHide && memoryAutocompleteFieldName\"\n [config]=\"autocompleteFields.get(memoryAutocompleteFieldName)\"\n [mobile]=\"memoryMobile\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-memory-leak]'\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode === 'mobile'\">\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Suggest() function\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, suggestFn: (searchText, filter) =&gt; any[]</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-1]'\"\n [required]=\"true\"\n placeholder=\"Suggest field\"\n ></mat-autocomplete-field>\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 Items is an Observable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-observable]'\"\n ></mat-autocomplete-field>\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 Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\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 Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Change filter\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-button (click)=\"updateFilter('entity-items-filter')\">Filter on: {{autocompleteFields.get('entity-items-filter').filter?.searchAttribute }}</ion-button>\n </ion-col>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-filter]'\"\n ></mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class=\"min-width-large\"</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"true\"\n class=\"min-width-large\"\n panelWidth=\"400px\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode === 'desktop'\">\n <ion-row>\n <ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col>\n </ion-row>\n <ion-row>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n items from suggest function\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult&lt;any&gt;\nsuggestLengthThreshold: '3'</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-desktop-suggest]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an array\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[combo-desktop-array-1]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\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-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\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 Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-missing]'\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\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 Full size panel\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class: 'mat-autocomplete-panel-full-size'</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [compareWith]=\"compareWithFn\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\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 Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-disable]'\"\n ></mat-autocomplete-field>\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\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\" >\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class=\"mat-autocomplete-panel-full-size\"</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n class=\"mat-autocomplete-panel-full-size\"\n panelWidth=\"100vw\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\" >\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>panelWidth: string</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n panelWidth=\"400px\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n"
17597
+ 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>Autocomplete field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar>\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!--<ion-grid *ngIf=\"mode === 'temp'\">\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n </ion-grid>-->\n\n\n <ion-grid *ngIf=\"mode === 'memory'\">\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=\"2\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Items type\">\n <mat-select (selectionChange)=\"memoryAutocompleteFieldName=$event.value\" [value]=\"memoryAutocompleteFieldName\">\n <mat-option value=\"entity-$items\">Observable</mat-option>\n <mat-option value=\"entity-suggestFn\">Suggest function</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n <ion-col size=\"1\" class=\"ion-no-padding\">\n <mat-form-field floatLabel=\"always\" >\n <input matInput type=\"text\" hidden placeholder=\"Mobile ?\">\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\" color=\"tertiary\">Start</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\" color=\"tertiary\">Stop</ion-button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n *ngIf=\"!memoryHide && memoryAutocompleteFieldName\"\n [config]=\"autocompleteFields.get(memoryAutocompleteFieldName)\"\n [mobile]=\"memoryMobile\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-memory-leak]'\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode === 'mobile'\">\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Suggest() function\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, suggestFn: (searchText, filter) =&gt; any[]</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-1]'\"\n [required]=\"true\"\n placeholder=\"Suggest field\"\n ></mat-autocomplete-field>\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 Items is an Observable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-observable]'\"\n ></mat-autocomplete-field>\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 Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\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 Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Change filter\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-button (click)=\"updateFilter('entity-items-filter')\">Filter on: {{autocompleteFields.get('entity-items-filter').filter?.searchAttribute }}</ion-button>\n </ion-col>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-filter]'\"\n ></mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class=\"min-width-large\"</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"true\"\n class=\"min-width-large\"\n panelWidth=\"400px\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode === 'desktop'\">\n <ion-row>\n <ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col>\n </ion-row>\n <ion-row>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n items from suggest function\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult&lt;any&gt;\nsuggestLengthThreshold: '3'</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-desktop-suggest]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an array\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[combo-desktop-array-1]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\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-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\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 Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable&lt;any[]&gt;</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-missing]'\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\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 Full size panel\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class: 'mat-autocomplete-panel-full-size'</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [compareWith]=\"compareWithFn\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\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 Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-disable]'\"\n ></mat-autocomplete-field>\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\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\" >\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class=\"mat-autocomplete-panel-full-size\"</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n class=\"mat-autocomplete-panel-full-size\"\n panelWidth=\"100vw\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\" >\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>panelWidth: string</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n panelWidth=\"400px\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n </mat-checkbox>\n\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\">\n </mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n"
17556
17598
  },] }
17557
17599
  ];
17558
17600
  AutocompleteTestPage.ctorParameters = function () { return [
@@ -17664,13 +17706,13 @@
17664
17706
  { type: Array, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [APP_TESTING_PAGES,] }] }
17665
17707
  ]; };
17666
17708
 
17667
- var moment$5 = momentImported__namespace;
17709
+ var moment$1 = momentImported__namespace;
17668
17710
  var SwipeTestPage = /** @class */ (function () {
17669
17711
  function SwipeTestPage(formBuilder, dateFormatPipe) {
17670
17712
  this.formBuilder = formBuilder;
17671
17713
  this.dateFormatPipe = dateFormatPipe;
17672
17714
  this.$dates = new rxjs.BehaviorSubject(undefined);
17673
- this._today = moment$5().startOf('day');
17715
+ this._today = moment$1().startOf('day');
17674
17716
  this.form = formBuilder.group({
17675
17717
  empty: [null, i1.Validators.required],
17676
17718
  date: [null, i1.Validators.compose([i1.Validators.required, SharedValidators.validDate])],
@@ -17684,7 +17726,7 @@
17684
17726
  var _this = this;
17685
17727
  var dates = [];
17686
17728
  for (var d = 0; d < 7; d++) {
17687
- dates[d] = moment$5(this._today).add(d - 3, 'day');
17729
+ dates[d] = moment$1(this._today).add(d - 3, 'day');
17688
17730
  }
17689
17731
  this.$dates.next(dates);
17690
17732
  this.loadData();
@@ -18367,7 +18409,7 @@
18367
18409
  return FormArrayHelper;
18368
18410
  }());
18369
18411
 
18370
- var moment$6 = momentImported__namespace;
18412
+ var moment = momentImported__namespace;
18371
18413
  var DateTimeTestPage = /** @class */ (function () {
18372
18414
  function DateTimeTestPage(platform, formBuilder, cd) {
18373
18415
  this.platform = platform;
@@ -18402,7 +18444,7 @@
18402
18444
  var now, data;
18403
18445
  var _this = this;
18404
18446
  return __generator(this, function (_a) {
18405
- now = moment$6();
18447
+ now = moment();
18406
18448
  data = {
18407
18449
  empty: toDateISOString(now.clone().add(2, 'hours')),
18408
18450
  enable: toDateISOString(now),
@@ -18466,23 +18508,23 @@
18466
18508
  { type: i0.ChangeDetectorRef }
18467
18509
  ]; };
18468
18510
 
18469
- var EntityTestClass$1 = /** @class */ (function () {
18511
+ var EntityTestClass = /** @class */ (function () {
18470
18512
  function EntityTestClass() {
18471
18513
  }
18472
18514
  return EntityTestClass;
18473
18515
  }());
18474
- var FAKE_ENTITIES$1 = [
18516
+ var FAKE_ENTITIES = [
18475
18517
  { id: 1, label: 'AAA', name: 'Item A' },
18476
18518
  { id: 2, label: 'BBB', name: 'Item B' },
18477
18519
  { id: 3, label: 'CCC', name: 'Item C' }
18478
18520
  ];
18479
- function deepCopy$1(values) {
18480
- return (values || FAKE_ENTITIES$1).map(function (entity) { return Object.assign({}, entity); });
18521
+ function deepCopy(values) {
18522
+ return (values || FAKE_ENTITIES).map(function (entity) { return Object.assign({}, entity); });
18481
18523
  }
18482
18524
  var ChipsTestPage = /** @class */ (function () {
18483
18525
  function ChipsTestPage(formBuilder) {
18484
18526
  this.formBuilder = formBuilder;
18485
- this._items = deepCopy$1(FAKE_ENTITIES$1);
18527
+ this._items = deepCopy(FAKE_ENTITIES);
18486
18528
  this._$items = new rxjs.BehaviorSubject(undefined);
18487
18529
  this.autocompleteFields = new MatAutocompleteConfigHolder();
18488
18530
  this.form = formBuilder.group({
@@ -18502,7 +18544,7 @@
18502
18544
  });
18503
18545
  // From items
18504
18546
  this.autocompleteFields.add('entity-items', {
18505
- items: FAKE_ENTITIES$1.slice(),
18547
+ items: FAKE_ENTITIES.slice(),
18506
18548
  attributes: ['label', 'name'],
18507
18549
  displayWith: this.entityToString
18508
18550
  });
@@ -18525,8 +18567,8 @@
18525
18567
  data = {
18526
18568
  entity: [],
18527
18569
  // THis item is NOT in the items list => i should be displayed anyway
18528
- entityInitial: FAKE_ENTITIES$1.slice(1, 2),
18529
- disableEntity: FAKE_ENTITIES$1.slice(1, 2)
18570
+ entityInitial: FAKE_ENTITIES.slice(1, 2),
18571
+ disableEntity: FAKE_ENTITIES.slice(1, 2)
18530
18572
  };
18531
18573
  this.form.setValue(data);
18532
18574
  return [2 /*return*/];
@@ -18536,7 +18578,7 @@
18536
18578
  ChipsTestPage.prototype.loadItems = function () {
18537
18579
  return __awaiter(this, void 0, void 0, function () {
18538
18580
  return __generator(this, function (_a) {
18539
- this._$items.next(deepCopy$1(FAKE_ENTITIES$1));
18581
+ this._$items.next(deepCopy(FAKE_ENTITIES));
18540
18582
  return [2 /*return*/];
18541
18583
  });
18542
18584
  });
@@ -18573,7 +18615,7 @@
18573
18615
  { type: i1.FormBuilder }
18574
18616
  ]; };
18575
18617
 
18576
- var routes = [
18618
+ var routes$1 = [
18577
18619
  {
18578
18620
  path: '',
18579
18621
  pathMatch: 'full',
@@ -18623,7 +18665,7 @@
18623
18665
  i1.ReactiveFormsModule,
18624
18666
  SharedMaterialModule,
18625
18667
  i1$2.TranslateModule.forChild(),
18626
- i3.RouterModule.forChild(routes)
18668
+ i3.RouterModule.forChild(routes$1)
18627
18669
  ],
18628
18670
  declarations: [
18629
18671
  MaterialTestingPage,
@@ -19741,7 +19783,7 @@
19741
19783
  };
19742
19784
  return UserSettingsValidatorService;
19743
19785
  }(AppValidatorService));
19744
- UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
19786
+ UserSettingsValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
19745
19787
  UserSettingsValidatorService.decorators = [
19746
19788
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
19747
19789
  ];
@@ -19789,7 +19831,7 @@
19789
19831
  };
19790
19832
  return AccountValidatorService;
19791
19833
  }(AppValidatorService));
19792
- AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
19834
+ AccountValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder), i0__namespace.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
19793
19835
  AccountValidatorService.decorators = [
19794
19836
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
19795
19837
  ];
@@ -20386,7 +20428,7 @@
20386
20428
  };
20387
20429
  return LocalSettingsValidatorService;
20388
20430
  }(AppValidatorService));
20389
- LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
20431
+ LocalSettingsValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder), i0__namespace.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
20390
20432
  LocalSettingsValidatorService.decorators = [
20391
20433
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
20392
20434
  ];
@@ -21170,7 +21212,7 @@
21170
21212
  };
21171
21213
  return IsOnFieldModePipe;
21172
21214
  }());
21173
- IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
21215
+ IsOnFieldModePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
21174
21216
  IsOnFieldModePipe.decorators = [
21175
21217
  { type: i0.Pipe, args: [{
21176
21218
  name: 'isOnField'
@@ -21185,7 +21227,7 @@
21185
21227
  };
21186
21228
  return IsNotOnFieldModePipe;
21187
21229
  }());
21188
- IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
21230
+ IsNotOnFieldModePipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
21189
21231
  IsNotOnFieldModePipe.decorators = [
21190
21232
  { type: i0.Pipe, args: [{
21191
21233
  name: 'isNotOnField'
@@ -21203,7 +21245,7 @@
21203
21245
  };
21204
21246
  return PersonToStringPipe;
21205
21247
  }());
21206
- PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
21248
+ PersonToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
21207
21249
  PersonToStringPipe.decorators = [
21208
21250
  { type: i0.Pipe, args: [{
21209
21251
  name: 'personToString'
@@ -21211,6 +21253,9 @@
21211
21253
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
21212
21254
  ];
21213
21255
 
21256
+ var MimeTypes = Object.freeze({
21257
+ ANDROID_APK: 'application/vnd.android.package-archive'
21258
+ });
21214
21259
  var AppInstallUpgradeCard = /** @class */ (function () {
21215
21260
  function AppInstallUpgradeCard(modalCtrl, configService, platform, cd, network, environment) {
21216
21261
  this.modalCtrl = modalCtrl;
@@ -21227,6 +21272,7 @@
21227
21272
  this.showOfflineWarning = true;
21228
21273
  this.showInstallButton = false;
21229
21274
  this.onUpdateOfflineModeClick = new i0.EventEmitter();
21275
+ this.isAndroidCordova = platform.isAndroidCordova();
21230
21276
  }
21231
21277
  Object.defineProperty(AppInstallUpgradeCard.prototype, "showUpdateOfflineFeature", {
21232
21278
  get: function () {
@@ -21282,15 +21328,14 @@
21282
21328
  AppInstallUpgradeCard.prototype.ngOnDestroy = function () {
21283
21329
  this._subscription.unsubscribe();
21284
21330
  };
21285
- AppInstallUpgradeCard.prototype.openDownloadLink = function (event, url) {
21286
- if (!url)
21331
+ AppInstallUpgradeCard.prototype.downloadLink = function (event, link) {
21332
+ if (!link || !link.url)
21287
21333
  return; // Skip
21288
- if (event) {
21289
- event.preventDefault();
21290
- }
21291
- console.info("[install] Opening App download link: " + url);
21292
- this.platform.open(url, '_system', 'location=yes');
21293
- return false;
21334
+ this.platform.download({
21335
+ uri: link.url,
21336
+ filename: link.downloadFilename,
21337
+ mimeType: link.mimeType
21338
+ });
21294
21339
  };
21295
21340
  AppInstallUpgradeCard.prototype.tryOnline = function () {
21296
21341
  var _this = this;
@@ -21316,10 +21361,10 @@
21316
21361
  return '';
21317
21362
  }
21318
21363
  };
21319
- AppInstallUpgradeCard.prototype.getAppFileName = function () {
21320
- return;
21364
+ AppInstallUpgradeCard.prototype.asLink = function (value) {
21365
+ return value;
21321
21366
  };
21322
- /* -- protected method -- */
21367
+ /* -- private method -- */
21323
21368
  AppInstallUpgradeCard.prototype.getCompatibleInstallLinks = function (installLinks) {
21324
21369
  // Cordova already running: not need to install
21325
21370
  if (this.platform.is('cordova'))
@@ -21357,11 +21402,14 @@
21357
21402
  if (url) {
21358
21403
  var downloadFilename = void 0;
21359
21404
  var version = void 0;
21405
+ var mimeType = void 0;
21360
21406
  // Get file name
21361
21407
  var filename = this.getFilename(url);
21362
21408
  version = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);
21363
21409
  // OK, this is a downloadable APK file (e.g. NOT a link to a playstore)
21364
21410
  if (filename === null || filename === void 0 ? void 0 : filename.endsWith('.apk')) {
21411
+ // Define mime type
21412
+ mimeType = MimeTypes.ANDROID_APK;
21365
21413
  // Get the file version (if any)
21366
21414
  var versionMatches = /-v([1-9][0-9]*\.[0-9]+\.(:?(:?alpha|beta|rc)?[0-9]*))/i.exec(filename);
21367
21415
  version = versionMatches && versionMatches[1] || version;
@@ -21378,7 +21426,7 @@
21378
21426
  }
21379
21427
  }
21380
21428
  }
21381
- result.push({ name: name, url: url, platform: 'android', version: version, downloadFilename: downloadFilename });
21429
+ result.push({ name: name, url: url, platform: 'android', version: version, downloadFilename: downloadFilename, mimeType: mimeType });
21382
21430
  }
21383
21431
  }
21384
21432
  // iOS - TODO
@@ -21407,7 +21455,7 @@
21407
21455
  AppInstallUpgradeCard.decorators = [
21408
21456
  { type: i0.Component, args: [{
21409
21457
  selector: 'app-install-upgrade-card',
21410
- template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n <!-- Waiting spinner -->\n <ng-template #waitingSpinner>\n <ion-spinner *ngIf=\"waitingNetwork\" color=\"light\"></ion-spinner>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && updateLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of updateLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n\n <!-- Download button -->\n <ion-button *ngIf=\"link.downloadFilename; else redirectButton\"\n [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Download button -->\n <ion-button *ngIf=\"link.downloadFilename; else redirectButton\"\n [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Update offline feature card-->\n<ion-card *ngIf=\"showUpdateOfflineFeature && !loading && !offline\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h4>\n <b [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE'| translate\"></b>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"onUpdateOfflineModeClick.emit($event)\">\n <span translate>NETWORK.BTN_UPDATE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n",
21458
+ template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n <!-- Waiting spinner -->\n <ng-template #waitingSpinner>\n <ion-spinner *ngIf=\"waitingNetwork\" color=\"light\"></ion-spinner>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && updateLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of updateLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n\n <!-- Download button -->\n <ion-button *ngIf=\"link.downloadFilename; else redirectButton\"\n [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Update offline feature card-->\n<ion-card *ngIf=\"showUpdateOfflineFeature && !loading && !offline\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h4>\n <b [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE'| translate\"></b>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"onUpdateOfflineModeClick.emit($event)\">\n <span translate>NETWORK.BTN_UPDATE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n\n <ng-container *ngIf=\"link.downloadFilename; else redirectButton\">\n\n <!-- Cordova download button -->\n <ion-button *ngIf=\"isAndroidCordova; else webDownloadButton\"\n (click)=\"downloadLink($event, asLink(link))\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Web download button -->\n <ng-template #webDownloadButton>\n <ion-button [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n </ng-template>\n </ng-container>\n\n <!-- Web redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n</ng-template>\n",
21411
21459
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
21412
21460
  animations: [slideUpDownAnimation],
21413
21461
  styles: ["ion-text small{font-size:85%}"]
@@ -21438,7 +21486,7 @@
21438
21486
  };
21439
21487
  return IsLoginAccountPipe;
21440
21488
  }());
21441
- IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
21489
+ IsLoginAccountPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
21442
21490
  IsLoginAccountPipe.decorators = [
21443
21491
  { type: i0.Pipe, args: [{
21444
21492
  name: 'isLogin'
@@ -21453,7 +21501,7 @@
21453
21501
  };
21454
21502
  return AccountToStringPipe;
21455
21503
  }());
21456
- AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
21504
+ AccountToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
21457
21505
  AccountToStringPipe.decorators = [
21458
21506
  { type: i0.Pipe, args: [{
21459
21507
  name: 'accountToString'
@@ -21471,7 +21519,7 @@
21471
21519
  };
21472
21520
  return DepartmentToStringPipe;
21473
21521
  }());
21474
- DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
21522
+ DepartmentToStringPipe.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
21475
21523
  DepartmentToStringPipe.decorators = [
21476
21524
  { type: i0.Pipe, args: [{
21477
21525
  name: 'departmentToString'
@@ -21506,7 +21554,7 @@
21506
21554
  };
21507
21555
  return MenuService;
21508
21556
  }());
21509
- MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
21557
+ MenuService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
21510
21558
  MenuService.decorators = [
21511
21559
  { type: i0.Injectable, args: [{
21512
21560
  providedIn: 'root'
@@ -22085,7 +22133,7 @@
22085
22133
  };
22086
22134
  return AuthGuardService;
22087
22135
  }());
22088
- AuthGuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(i0.ɵɵinject(AccountService), i0.ɵɵinject(i1$5.ModalController), i0.ɵɵinject(i3.Router), i0.ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
22136
+ AuthGuardService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(i0__namespace.ɵɵinject(AccountService), i0__namespace.ɵɵinject(i1__namespace$4.ModalController), i0__namespace.ɵɵinject(i3__namespace$3.Router), i0__namespace.ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
22089
22137
  AuthGuardService.decorators = [
22090
22138
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
22091
22139
  ];
@@ -22136,7 +22184,7 @@
22136
22184
  query: query,
22137
22185
  variables: { id: id },
22138
22186
  fetchPolicy: opts && opts.fetchPolicy || undefined,
22139
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
22187
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
22140
22188
  })
22141
22189
  .pipe(operators.map(function (_b) {
22142
22190
  var data = _b.data;
@@ -22158,7 +22206,7 @@
22158
22206
  query: query,
22159
22207
  variables: { id: id },
22160
22208
  fetchPolicy: opts && opts.fetchPolicy || undefined,
22161
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
22209
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
22162
22210
  })];
22163
22211
  case 1:
22164
22212
  data = (_b.sent()).data;
@@ -22194,7 +22242,7 @@
22194
22242
  totalFieldName: withTotal ? 'total' : undefined,
22195
22243
  insertFilterFn: filter && filter.asFilterFn(),
22196
22244
  variables: variables,
22197
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
22245
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
22198
22246
  fetchPolicy: opts && opts.fetchPolicy || undefined
22199
22247
  })
22200
22248
  .pipe(operators.map(function (_b) {
@@ -22236,7 +22284,7 @@
22236
22284
  return [4 /*yield*/, this.graphql.query({
22237
22285
  query: query,
22238
22286
  variables: variables,
22239
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
22287
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
22240
22288
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
22241
22289
  })];
22242
22290
  case 1:
@@ -22284,7 +22332,7 @@
22284
22332
  variables: {
22285
22333
  filter: filter && filter.asPodObject()
22286
22334
  },
22287
- error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
22335
+ error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
22288
22336
  fetchPolicy: opts && opts.fetchPolicy || 'network-only'
22289
22337
  })];
22290
22338
  case 3:
@@ -22326,7 +22374,7 @@
22326
22374
  variables: {
22327
22375
  data: json
22328
22376
  },
22329
- error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
22377
+ error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
22330
22378
  update: function (proxy, _b) {
22331
22379
  var data = _b.data;
22332
22380
  var savedEntities = data && data.data;
@@ -22393,7 +22441,7 @@
22393
22441
  variables: {
22394
22442
  data: json
22395
22443
  },
22396
- error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
22444
+ error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
22397
22445
  update: function (cache, _b) {
22398
22446
  var data = _b.data;
22399
22447
  // Update entity
@@ -22451,7 +22499,7 @@
22451
22499
  refetchQueries: this.getRefetchQueriesForMutation(opts),
22452
22500
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
22453
22501
  variables: { ids: ids },
22454
- error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
22502
+ error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
22455
22503
  update: function (cache, res) {
22456
22504
  // Remove from cache
22457
22505
  if (_this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -22504,7 +22552,7 @@
22504
22552
  refetchQueries: this.getRefetchQueriesForMutation(opts),
22505
22553
  awaitRefetchQueries: opts && opts.awaitRefetchQueries,
22506
22554
  variables: { id: id },
22507
- error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
22555
+ error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
22508
22556
  update: function (proxy, res) {
22509
22557
  // Remove from cache
22510
22558
  if (_this.watchQueriesUpdatePolicy === 'update-cache') {
@@ -22543,7 +22591,7 @@
22543
22591
  query: opts && opts.query || this.subscriptions.listenChanges,
22544
22592
  variables: variables,
22545
22593
  error: {
22546
- code: ErrorCodes.SUBSCRIBE_DATA_ERROR,
22594
+ code: ErrorCodes$2.SUBSCRIBE_DATA_ERROR,
22547
22595
  message: 'ERROR.SUBSCRIBE_DATA_ERROR'
22548
22596
  }
22549
22597
  })
@@ -22752,7 +22800,7 @@
22752
22800
  if (this._debug)
22753
22801
  invalidRows.forEach(function (row) { return AppTableUtils.logRowErrors(row, "[table-datasource] " + _this._logTypeName + " row #" + row.id); });
22754
22802
  // Stop with an error
22755
- throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
22803
+ throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
22756
22804
  }
22757
22805
  this._editingRowCount = 0;
22758
22806
  data = void 0;
@@ -23708,14 +23756,14 @@
23708
23756
  case 0:
23709
23757
  opts = Object.assign({ keepEditing: this.keepEditedRowOnSave }, opts);
23710
23758
  if (this.readOnly) {
23711
- throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
23759
+ throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
23712
23760
  }
23713
23761
  this.resetError();
23714
23762
  // Keep edited row id (should be done BEFORE confirmEditCreate() )
23715
23763
  this.previouslyEditedRowId = opts.keepEditing && ((_a = this.editedRow) === null || _a === void 0 ? void 0 : _a.editing) ? this.editedRow.id : undefined;
23716
23764
  previouslyEditedData = isNotNil(this.previouslyEditedRowId) && this.editedRow.currentData || ((_b = this.singleSelectedRow) === null || _b === void 0 ? void 0 : _b.currentData);
23717
23765
  if (!this.confirmEditCreate()) {
23718
- throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
23766
+ throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
23719
23767
  }
23720
23768
  // Mark as saving
23721
23769
  this.markAsSaving();
@@ -23868,7 +23916,7 @@
23868
23916
  switch (_d.label) {
23869
23917
  case 0:
23870
23918
  if (this.readOnly) {
23871
- throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
23919
+ throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
23872
23920
  }
23873
23921
  if (event === null || event === void 0 ? void 0 : event.defaultPrevented)
23874
23922
  return [2 /*return*/, 0]; // SKip
@@ -25564,7 +25612,7 @@
25564
25612
  case 4:
25565
25613
  data = _b.sent();
25566
25614
  if (!data)
25567
- throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
25615
+ throw { code: ErrorCodes$2.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
25568
25616
  this._usageMode = this.computeUsageMode(data);
25569
25617
  return [4 /*yield*/, this.onEntityLoaded(data, opts)];
25570
25618
  case 5:
@@ -26294,10 +26342,10 @@
26294
26342
  exports.UserEventFilter = __decorate([
26295
26343
  EntityClass({ typename: 'UserEventVO' })
26296
26344
  ], exports.UserEventFilter);
26297
- var SaveQuery = core.gql(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ", "\n"], ["\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ", "\n"])), SocialFragments.userEvent);
26298
- var LoadAllQuery = core.gql(templateObject_2$3 || (templateObject_2$3 = __makeTemplateObject(["\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ", "\n"], ["\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ", "\n"])), SocialFragments.lightUserEvent);
26299
- var DeleteByIdsMutation = core.gql(templateObject_3$2 || (templateObject_3$2 = __makeTemplateObject(["\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n"], ["\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n"])));
26300
- var LoadAllWithContentQuery = core.gql(templateObject_4$2 || (templateObject_4$2 = __makeTemplateObject(["\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ", "\n"], ["\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ", "\n"])), SocialFragments.userEvent);
26345
+ var SaveQuery = core.gql(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ", "\n"], ["\n mutation SaveUserEvent($data: UserEventVOInput){\n data: saveUserEvent(userEvent: $data){\n ...UserEventFragment\n }\n }\n ", "\n"])), SocialFragments.userEvent);
26346
+ var LoadAllQuery = core.gql(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ", "\n"], ["\n query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...LightUserEventFragment\n }\n }\n ", "\n"])), SocialFragments.lightUserEvent);
26347
+ var DeleteByIdsMutation = core.gql(templateObject_3$1 || (templateObject_3$1 = __makeTemplateObject(["\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n"], ["\n mutation DeleteUserEvents($ids:[Int]){\n deleteUserEvents(ids: $ids)\n }\n"])));
26348
+ var LoadAllWithContentQuery = core.gql(templateObject_4$1 || (templateObject_4$1 = __makeTemplateObject(["\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ", "\n"], ["\n query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){\n data: userEvents(filter: $filter, page: $page){\n ...UserEventFragment\n }\n }\n ", "\n"])), SocialFragments.userEvent);
26301
26349
  var UserEventService = /** @class */ (function (_super) {
26302
26350
  __extends(UserEventService, _super);
26303
26351
  function UserEventService(graphql, accountService, network, translate, toastController, environment) {
@@ -26618,7 +26666,7 @@
26618
26666
  };
26619
26667
  return UserEventService;
26620
26668
  }(BaseGraphqlService));
26621
- UserEventService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserEventService_Factory() { return new UserEventService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(AccountService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i1$2.TranslateService), i0.ɵɵinject(i1$5.ToastController), i0.ɵɵinject(ENVIRONMENT)); }, token: UserEventService, providedIn: "root" });
26669
+ UserEventService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function UserEventService_Factory() { return new UserEventService(i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(AccountService), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(i1__namespace$1.TranslateService), i0__namespace.ɵɵinject(i1__namespace$4.ToastController), i0__namespace.ɵɵinject(ENVIRONMENT)); }, token: UserEventService, providedIn: "root" });
26622
26670
  UserEventService.decorators = [
26623
26671
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
26624
26672
  ];
@@ -26630,7 +26678,7 @@
26630
26678
  { type: i1$5.ToastController },
26631
26679
  { type: undefined, decorators: [{ type: i0.Inject, args: [ENVIRONMENT,] }] }
26632
26680
  ]; };
26633
- var templateObject_1$3, templateObject_2$3, templateObject_3$2, templateObject_4$2;
26681
+ var templateObject_1$1, templateObject_2$1, templateObject_3$1, templateObject_4$1;
26634
26682
 
26635
26683
  var ICONS_MAP = {
26636
26684
  DEBUG_DATA: { matIcon: 'bug_report' },
@@ -26855,6 +26903,7 @@
26855
26903
  this.userProfiles = source.userProfiles;
26856
26904
  this.excludedIds = source.excludedIds;
26857
26905
  this.searchAttribute = source.searchAttribute;
26906
+ this.searchAttributes = source.searchAttributes;
26858
26907
  };
26859
26908
  PersonFilter.prototype.asObject = function (opts) {
26860
26909
  var target = _super.prototype.asObject.call(this, opts);
@@ -26865,6 +26914,7 @@
26865
26914
  target.userProfiles = this.userProfiles;
26866
26915
  target.excludedIds = this.excludedIds;
26867
26916
  target.searchAttribute = this.searchAttribute;
26917
+ target.searchAttributes = this.searchAttributes;
26868
26918
  return target;
26869
26919
  };
26870
26920
  PersonFilter.prototype.buildFilter = function () {
@@ -26879,7 +26929,7 @@
26879
26929
  filterFns.push(function (e) { return isNil(e.id) || !_this.excludedIds.includes(e.id); });
26880
26930
  }
26881
26931
  // Search text
26882
- var searchTextFilter = EntityUtils.searchTextFilter(this.searchAttribute || ['lastName', 'firstName', 'department.name'], this.searchText);
26932
+ var searchTextFilter = EntityUtils.searchTextFilter(this.searchAttribute || this.searchAttributes || ['lastName', 'firstName', 'department.name'], this.searchText);
26883
26933
  if (searchTextFilter)
26884
26934
  filterFns.push(searchTextFilter);
26885
26935
  return filterFns;
@@ -26891,16 +26941,16 @@
26891
26941
  ], exports.PersonFilter);
26892
26942
 
26893
26943
  var PersonFragments = {
26894
- person: core.gql(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["fragment PersonFragment on PersonVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n username\n usernameExtranet\n department {\n id\n label\n name\n logo\n __typename\n }\n __typename\n }"], ["fragment PersonFragment on PersonVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n username\n usernameExtranet\n department {\n id\n label\n name\n logo\n __typename\n }\n __typename\n }"])))
26944
+ person: core.gql(templateObject_1 || (templateObject_1 = __makeTemplateObject(["fragment PersonFragment on PersonVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n username\n usernameExtranet\n department {\n id\n label\n name\n logo\n __typename\n }\n __typename\n }"], ["fragment PersonFragment on PersonVO {\n id\n firstName\n lastName\n email\n pubkey\n avatar\n statusId\n updateDate\n creationDate\n profiles\n username\n usernameExtranet\n department {\n id\n label\n name\n logo\n __typename\n }\n __typename\n }"])))
26895
26945
  };
26896
26946
  // Load persons query
26897
26947
  var PersonQueries = {
26898
- loadAll: core.gql(templateObject_2$4 || (templateObject_2$4 = __makeTemplateObject(["\n query Persons($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n }\n ", ""], ["\n query Persons($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n }\n ", ""])), PersonFragments.person),
26899
- loadAllWithTotal: core.gql(templateObject_3$3 || (templateObject_3$3 = __makeTemplateObject(["\n query PersonsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n total: personsCount(filter: $filter)\n }\n ", ""], ["\n query PersonsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n total: personsCount(filter: $filter)\n }\n ", ""])), PersonFragments.person)
26948
+ loadAll: core.gql(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n query Persons($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n }\n ", ""], ["\n query Persons($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n }\n ", ""])), PersonFragments.person),
26949
+ loadAllWithTotal: core.gql(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n query PersonsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n total: personsCount(filter: $filter)\n }\n ", ""], ["\n query PersonsWithTotal($offset: Int, $size: Int, $sortBy: String, $sortDirection: String, $filter: PersonFilterVOInput){\n data: persons(filter: $filter, offset: $offset, size: $size, sortBy: $sortBy, sortDirection: $sortDirection){\n ...PersonFragment\n }\n total: personsCount(filter: $filter)\n }\n ", ""])), PersonFragments.person)
26900
26950
  };
26901
26951
  var PersonMutations = {
26902
- saveAll: core.gql(templateObject_4$3 || (templateObject_4$3 = __makeTemplateObject(["\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ", ""], ["\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ", ""])), PersonFragments.person),
26903
- deleteAll: core.gql(templateObject_5$2 || (templateObject_5$2 = __makeTemplateObject(["\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }"], ["\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }"])))
26952
+ saveAll: core.gql(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ", ""], ["\n mutation savePersons($data:[PersonVOInput]){\n data: savePersons(persons: $data){\n ...PersonFragment\n }\n }\n ", ""])), PersonFragments.person),
26953
+ deleteAll: core.gql(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }"], ["\n mutation deletePersons($ids:[Int]){\n deletePersons(ids: $ids)\n }"])))
26904
26954
  };
26905
26955
  var PersonService = /** @class */ (function (_super_1) {
26906
26956
  __extends(PersonService, _super_1);
@@ -26962,13 +27012,14 @@
26962
27012
  });
26963
27013
  });
26964
27014
  };
26965
- PersonService.prototype.suggest = function (value, filter) {
27015
+ PersonService.prototype.suggest = function (value, filter, sortBy, sortDirection) {
26966
27016
  return __awaiter(this, void 0, void 0, function () {
26967
27017
  return __generator(this, function (_a) {
26968
27018
  if (ReferentialUtils.isNotEmpty(value))
26969
27019
  return [2 /*return*/, { data: [value] }];
26970
27020
  value = (typeof value === 'string' && value !== '*') && value || undefined;
26971
- return [2 /*return*/, this.loadAll(0, !value ? 30 : 10, undefined, undefined, Object.assign(Object.assign({}, filter), { searchText: value, statusIds: filter && filter.statusIds || [StatusIds.ENABLE], userProfiles: filter && filter.userProfiles }), { withTotal: true /* need by autocomplete */ })];
27021
+ sortBy = sortBy || filter.searchAttribute || (filter.searchAttributes && filter.searchAttributes[0]);
27022
+ return [2 /*return*/, this.loadAll(0, !value ? 30 : 10, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { searchText: value, statusIds: filter && filter.statusIds || [StatusIds.ENABLE], userProfiles: filter && filter.userProfiles }), { withTotal: true /* need by autocomplete */ })];
26972
27023
  });
26973
27024
  });
26974
27025
  };
@@ -27023,7 +27074,7 @@
27023
27074
  };
27024
27075
  return PersonService;
27025
27076
  }(BaseEntityService));
27026
- PersonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(PlatformService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
27077
+ PersonService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(i0__namespace.ɵɵinject(GraphqlService), i0__namespace.ɵɵinject(PlatformService), i0__namespace.ɵɵinject(NetworkService), i0__namespace.ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
27027
27078
  PersonService.decorators = [
27028
27079
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
27029
27080
  ];
@@ -27033,7 +27084,7 @@
27033
27084
  { type: NetworkService },
27034
27085
  { type: EntitiesStorage }
27035
27086
  ]; };
27036
- var templateObject_1$4, templateObject_2$4, templateObject_3$3, templateObject_4$3, templateObject_5$2;
27087
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
27037
27088
 
27038
27089
  var PersonValidatorService = /** @class */ (function () {
27039
27090
  function PersonValidatorService(formBuilder, accountValidatorService) {
@@ -27056,7 +27107,7 @@
27056
27107
  };
27057
27108
  return PersonValidatorService;
27058
27109
  }());
27059
- PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
27110
+ PersonValidatorService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0__namespace.ɵɵinject(i1__namespace$6.FormBuilder), i0__namespace.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
27060
27111
  PersonValidatorService.decorators = [
27061
27112
  { type: i0.Injectable, args: [{ providedIn: 'root' },] }
27062
27113
  ];
@@ -27277,16 +27328,16 @@
27277
27328
  ];
27278
27329
  AdminModule.ctorParameters = function () { return []; };
27279
27330
 
27280
- var ɵ0$a = {
27331
+ var ɵ0 = {
27281
27332
  profile: 'ADMIN'
27282
27333
  };
27283
- var routes$1 = [
27334
+ var routes = [
27284
27335
  {
27285
27336
  path: 'users',
27286
27337
  pathMatch: 'full',
27287
27338
  component: UsersPage,
27288
27339
  canActivate: [AuthGuardService],
27289
- data: ɵ0$a
27340
+ data: ɵ0
27290
27341
  }
27291
27342
  ];
27292
27343
  var AdminRoutingModule = /** @class */ (function () {
@@ -27299,13 +27350,13 @@
27299
27350
  imports: [
27300
27351
  SharedRoutingModule,
27301
27352
  AdminModule,
27302
- i3.RouterModule.forChild(routes$1)
27353
+ i3.RouterModule.forChild(routes)
27303
27354
  ],
27304
27355
  exports: [i3.RouterModule]
27305
27356
  },] }
27306
27357
  ];
27307
27358
 
27308
- var ErrorCodes$2 = {
27359
+ var ErrorCodes = {
27309
27360
  LOAD_PERSONS_ERROR: 100,
27310
27361
  SAVE_PERSONS_ERROR: 101,
27311
27362
  DELETE_PERSONS_ERROR: 102,
@@ -27414,7 +27465,7 @@
27414
27465
  exports.EntityStore = EntityStore;
27415
27466
  exports.EntityUtils = EntityUtils;
27416
27467
  exports.Environment = Environment;
27417
- exports.ErrorCodes = ErrorCodes$2;
27468
+ exports.ErrorCodes = ErrorCodes;
27418
27469
  exports.EvenPipe = EvenPipe;
27419
27470
  exports.FileService = FileService;
27420
27471
  exports.FileSizePipe = FileSizePipe;
@@ -27422,7 +27473,7 @@
27422
27473
  exports.FormButtonsBarComponent = FormButtonsBarComponent;
27423
27474
  exports.FormButtonsBarToken = FormButtonsBarToken;
27424
27475
  exports.FormFieldValuesHolder = FormFieldValuesHolder;
27425
- exports.Fragments = Fragments$1;
27476
+ exports.Fragments = Fragments;
27426
27477
  exports.GraphqlService = GraphqlService;
27427
27478
  exports.HAMMER_PRESS_TIME = HAMMER_PRESS_TIME;
27428
27479
  exports.HAMMER_TAP_TIME = HAMMER_TAP_TIME;
@@ -27669,17 +27720,17 @@
27669
27720
  exports.waitFor = waitFor;
27670
27721
  exports.waitIdle = waitIdle;
27671
27722
  exports.waitWhilePending = waitWhilePending;
27672
- exports0 = ɵ0$5;
27673
- exports.ɵa = CustomReuseStrategy;
27674
- exports.ɵb = MatNumpadDomService;
27675
- exports.ɵc = isFocusableElement;
27676
- exports.ɵd = RegisterForm;
27677
- exports.ɵe = AccountValidatorService;
27678
- exports.ɵf = RegisterModal;
27679
- exports.ɵg = UserSettingsValidatorService;
27680
- exports.ɵh = LocalSettingsValidatorService;
27723
+ exports["ɵ0"] = ɵ0$5;
27724
+ exports["ɵa"] = CustomReuseStrategy;
27725
+ exports["ɵb"] = MatNumpadDomService;
27726
+ exports["ɵc"] = isFocusableElement;
27727
+ exports["ɵd"] = RegisterForm;
27728
+ exports["ɵe"] = AccountValidatorService;
27729
+ exports["ɵf"] = RegisterModal;
27730
+ exports["ɵg"] = UserSettingsValidatorService;
27731
+ exports["ɵh"] = LocalSettingsValidatorService;
27681
27732
 
27682
27733
  Object.defineProperty(exports, '__esModule', { value: true });
27683
27734
 
27684
- })));
27685
- //# sourceMappingURL=ngx-sumaris-components.umd.js.map
27735
+ }));
27736
+ //# sourceMappingURL=sumaris-net.ngx-components.umd.js.map