@mosa-ng/core 20.0.1 → 20.1.1

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.
@@ -1,11 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Pipe, makeEnvironmentProviders, provideAppInitializer, inject } from '@angular/core';
2
+ import { Injectable, Pipe, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
3
3
  import { firstValueFrom, of, BehaviorSubject, throwError, Observable, Subject } from 'rxjs';
4
- import { share, tap, catchError, map } from 'rxjs/operators';
4
+ import { tap, catchError, map } from 'rxjs/operators';
5
5
  import * as i1$1 from '@angular/common/http';
6
6
  import { HttpErrorResponse, HttpResponse, HttpHeaders } from '@angular/common/http';
7
7
  import * as i1 from '@ngx-translate/core';
8
- import * as i2 from '@angular/common';
8
+ import { TranslateService } from '@ngx-translate/core';
9
+ import { DatePipe } from '@angular/common';
9
10
 
10
11
  /**
11
12
  * Checks if an object is null or undefined. Does not check for
@@ -129,7 +130,7 @@ class TranslateCollectorService {
129
130
  }
130
131
  this.translationMap[lang].push({ priority, translation });
131
132
  this.translationMap[lang].sort((a, b) => a.priority - b.priority);
132
- const merged = JSON.parse(localStorage.getItem(MOSA_MERGED_TRANSLATION(lang))) || {};
133
+ const merged = JSON.parse(localStorage.getItem(MOSA_MERGED_TRANSLATION(lang)) || '{}');
133
134
  for (const translationsData of this.translationMap[lang]) {
134
135
  const translations = translationsData.translation;
135
136
  if (translations != null) {
@@ -172,39 +173,30 @@ class AssetsI18nLoaderService {
172
173
  this.myHttpClient = myHttpClient;
173
174
  this.myTranslateCollectorService = myTranslateCollectorService;
174
175
  this.priority = 0;
176
+ this.supportedLanguages = [];
175
177
  }
176
- init(path, libName, priority) {
177
- return new Promise(async (resolve) => {
178
- if (this.supportedLanguages) {
179
- for (let i = 0; i < this.supportedLanguages.length; i++) {
180
- await firstValueFrom(this.loadTranslations(this.supportedLanguages[i], path, libName, priority));
181
- }
182
- resolve();
183
- return;
184
- }
185
- if (!this.subLanguages) {
186
- this.subLanguages = this.myHttpClient.get(`assets/i18n/supported-languages.json?v=${getRandomString()}`)
187
- .pipe(share());
178
+ async init(path, libName, priority) {
179
+ if (this.supportedLanguages.length > 0) {
180
+ for (let i = 0; i < this.supportedLanguages.length; i++) {
181
+ await firstValueFrom(this.loadTranslations(this.supportedLanguages[i], path, libName, priority));
188
182
  }
189
- this.subLanguages.subscribe(async (res) => {
190
- this.subLanguages = null;
191
- this.supportedLanguages = res.languages;
192
- for (let i = 0; i < this.supportedLanguages.length; i++) {
193
- await firstValueFrom(this.loadTranslations(this.supportedLanguages[i], path, libName, priority));
194
- }
195
- resolve();
196
- }, () => {
197
- this.subLanguages = null;
198
- console.error('Missing file -> assets/i18n/supported-languages.json <-- FIX THIS!');
199
- resolve();
200
- });
201
- });
183
+ return;
184
+ }
185
+ const res = await firstValueFrom(this.myHttpClient.get(`assets/i18n/supported-languages.json?v=${getRandomString()}`)).catch(() => null);
186
+ if (!res) {
187
+ console.error('Missing file -> assets/i18n/supported-languages.json');
188
+ return;
189
+ }
190
+ this.supportedLanguages = res.languages;
191
+ for (let i = 0; i < this.supportedLanguages.length; i++) {
192
+ await firstValueFrom(this.loadTranslations(this.supportedLanguages[i], path, libName, priority));
193
+ }
202
194
  }
203
195
  loadTranslations(lang, path, libName, priority) {
204
196
  const filename = libName ? `${libName}-${lang}.json` : `${lang}.json`;
205
197
  return this.myHttpClient.get(`${(path || './assets/i18n/') + filename}?v=${getRandomString()}`)
206
198
  .pipe(tap((response) => this.myTranslateCollectorService.addTranslations(response, lang, priority || this.priority)), catchError(() => {
207
- console.error(`Missing file -> ${filename} <-- FIX THIS!`);
199
+ console.error(`Missing file -> ${filename}`);
208
200
  return of(null);
209
201
  }));
210
202
  }
@@ -379,7 +371,7 @@ class CoreLoggerService {
379
371
  }
380
372
  // Serialize configuration
381
373
  config.duration = CoreLoggerService.getValue(config.duration, this.defaultConfig.duration, 4);
382
- config.className = CoreLoggerService.getValue(config.className, this.defaultConfig.className, null);
374
+ config.className = CoreLoggerService.getValue(config.className, this.defaultConfig.className, '');
383
375
  config.showDismiss = CoreLoggerService.getValue(config.showDismiss, this.defaultConfig.showDismiss, false);
384
376
  config.closeOnClick = CoreLoggerService.getValue(config.closeOnClick, this.defaultConfig.closeOnClick, true);
385
377
  return config;
@@ -416,28 +408,6 @@ class ApiService {
416
408
  this.myCoreLoggerService = myCoreLoggerService;
417
409
  this.myHttpClient = myHttpClient;
418
410
  }
419
- /**
420
- * Gets an access token
421
- * @deprecated use getToken()
422
- */
423
- getAccessToken() {
424
- return window.localStorage.getItem('jwtAccessToken');
425
- }
426
- /**
427
- * Sets an access token
428
- * @param token
429
- * @deprecated use setToken()
430
- */
431
- setAccessToken(token) {
432
- window.localStorage.setItem('jwtAccessToken', token);
433
- }
434
- /**
435
- * Removes an access token from local storage
436
- * @deprecated use deleteAccessToken()
437
- */
438
- removeAccessToken() {
439
- window.localStorage.removeItem('jwtAccessToken');
440
- }
441
411
  /**
442
412
  * Sets the token
443
413
  * @param tokenSettings
@@ -481,7 +451,7 @@ class ApiService {
481
451
  * @param options
482
452
  */
483
453
  async getWithHeadersAsync(url, headers, options) {
484
- return this.getWithHeaders(url, headers, options).toPromise();
454
+ return firstValueFrom(this.getWithHeaders(url, headers, options));
485
455
  }
486
456
  /**
487
457
  * Makes an http get call, which also includes the response headers
@@ -591,20 +561,14 @@ class ApiService {
591
561
  if (!headers) {
592
562
  headers = new HttpHeaders();
593
563
  }
594
- if (!options.skipContentType) {
564
+ if (!options?.skipContentType) {
595
565
  if (!headers.get('Content-Type')) {
596
566
  headers = headers.set('Content-Type', 'application/json');
597
567
  }
598
568
  }
599
- if (!options?.skipAuth) {
600
- if (this.getToken()) {
601
- const tokenSettings = this.getToken();
602
- headers = headers.set('Authorization', `${tokenSettings.tokenType} ${tokenSettings.token}`);
603
- }
604
- else {
605
- // Deprecated. Use ITokenSettings
606
- headers = headers.set('Authorization', `Bearer ${this.getAccessToken()}`);
607
- }
569
+ const tokenSettings = this.getToken();
570
+ if (!options?.skipAuth && tokenSettings) {
571
+ headers = headers.set('Authorization', `${tokenSettings.tokenType} ${tokenSettings.token}`);
608
572
  }
609
573
  return headers;
610
574
  }
@@ -637,7 +601,7 @@ class MosaSocketService {
637
601
  return this.subject;
638
602
  }
639
603
  send(data) {
640
- this.subject.next(data);
604
+ this.subject?.next(data);
641
605
  }
642
606
  create(url) {
643
607
  const ws = new WebSocket(url);
@@ -920,7 +884,7 @@ class Sieve {
920
884
  * public getter to get page size
921
885
  */
922
886
  get pageSize() {
923
- return this.options.pageSize;
887
+ return this.options.pageSize || 10;
924
888
  }
925
889
  /**
926
890
  * Setter to set page size
@@ -932,7 +896,7 @@ class Sieve {
932
896
  * public getter to get page
933
897
  */
934
898
  get page() {
935
- return this.options.page;
899
+ return this.options.page || 0;
936
900
  }
937
901
  /**
938
902
  * Setter to set page
@@ -970,7 +934,7 @@ class Sieve {
970
934
  * @param desc sort descending
971
935
  */
972
936
  addSort(name, desc) {
973
- this.options.sorts.push({
937
+ this.options.sorts?.push({
974
938
  name,
975
939
  desc,
976
940
  });
@@ -982,7 +946,7 @@ class Sieve {
982
946
  * @param value filtered value
983
947
  */
984
948
  addFilter(key, operator, value) {
985
- this.options.filters.push({
949
+ this.options.filters?.push({
986
950
  key,
987
951
  operator,
988
952
  value,
@@ -1090,6 +1054,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
1090
1054
  }] });
1091
1055
 
1092
1056
  class FilterPipe {
1057
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1093
1058
  transform(array, searchValue, searchKey) {
1094
1059
  // Return if array is empty or null
1095
1060
  if (!array?.length) {
@@ -1111,6 +1076,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
1111
1076
  }] });
1112
1077
 
1113
1078
  class FindPipe {
1079
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1114
1080
  transform(array, searchValue, searchKey) {
1115
1081
  // Return if array is empty or null
1116
1082
  if (!array?.length) {
@@ -1152,51 +1118,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
1152
1118
  }] });
1153
1119
 
1154
1120
  class MosaDatePipe {
1155
- constructor(myTranslateService, myDatePipe) {
1156
- this.myTranslateService = myTranslateService;
1157
- this.myDatePipe = myDatePipe;
1158
- this.store$ = new BehaviorSubject(null);
1121
+ constructor() {
1122
+ this.store$ = new BehaviorSubject(new Date().getTime());
1123
+ this.templates = {};
1124
+ this.myTranslateService = inject(TranslateService);
1125
+ this.myDatePipe = inject(DatePipe);
1159
1126
  this.updateTemplates();
1160
- setInterval(() => {
1161
- this.store$.next(new Date().getTime());
1162
- }, 10);
1127
+ setInterval(() => this.store$.next(new Date().getTime()), 10);
1163
1128
  this.myTranslateService.onLangChange.subscribe(() => {
1164
1129
  this.updateTemplates();
1165
1130
  this.store$.next(new Date().getTime());
1166
1131
  });
1167
1132
  }
1168
- transform(date, mode = 'timeSince') {
1169
- return this.store$.pipe(map((currentDate) => this.calcDate(currentDate, date, mode)));
1133
+ transform(date, mode = 'timeSince', options) {
1134
+ return this.store$.pipe(map((currentDate) => this.calcDate(currentDate, date, mode, options)));
1170
1135
  }
1171
- calcDate(currentDate, date, mode) {
1136
+ calcDate(currentTimestamp, date, mode, options) {
1137
+ if (!date) {
1138
+ return '';
1139
+ }
1172
1140
  let parsed;
1173
1141
  if (date instanceof Date) {
1174
- parsed = new Date(date.toString()).getTime();
1142
+ parsed = new Date(date.toString());
1175
1143
  }
1176
1144
  else {
1177
- parsed = new Date(date).getTime();
1145
+ parsed = new Date(date);
1178
1146
  }
1179
- if (!currentDate) {
1180
- currentDate = new Date().getTime();
1147
+ if (!currentTimestamp) {
1148
+ currentTimestamp = new Date().getTime();
1181
1149
  }
1150
+ const currentDate = new Date(currentTimestamp);
1151
+ const parsedTimestamp = parsed.getTime();
1182
1152
  const convertedDate = this.myDatePipe.transform(parsed, 'dd. MMM. yyyy hh:mm aaa');
1183
1153
  if (mode === 'full' || mode === 'timeSince') {
1184
- const seconds = ((currentDate - parsed) * .001) >> 0;
1154
+ const seconds = Math.abs(((currentTimestamp - parsedTimestamp) * .001) >> 0);
1185
1155
  const minutes = seconds / 60;
1186
1156
  const hours = minutes / 60;
1187
1157
  const days = hours / 24;
1188
1158
  const years = days / 365;
1189
- const timeSince = this.templates['prefix'] + (seconds < 60 && this.template('seconds', seconds) ||
1190
- seconds < 120 && this.template('minute', 1) ||
1191
- minutes < 60 && this.template('minutes', minutes) ||
1192
- minutes < 120 && this.template('hour', 1) ||
1193
- hours < 24 && this.template('hours', hours) ||
1194
- hours < 42 && this.template('day', 1) ||
1195
- days < 30 && this.template('days', days) ||
1196
- days < 45 && this.template('month', 1) ||
1197
- days < 365 && this.template('months', days / 30) ||
1198
- years < 1.5 && this.template('year', 1) ||
1199
- this.template('years', years)) + this.templates['prefix'];
1159
+ const yearDifference = (currentDate.getFullYear() - parsed.getFullYear()) * 12;
1160
+ const monthDifference = currentDate.getMonth() - parsed.getMonth();
1161
+ let timeSince = '';
1162
+ if (parsedTimestamp > currentTimestamp) {
1163
+ timeSince = (options?.withPrefix ? this.templates['prefixFuture'] : '') + (seconds < 60 && this.template('seconds', seconds) ||
1164
+ seconds < 120 && this.template('minute', 1) ||
1165
+ minutes < 60 && this.template('minutes', minutes) ||
1166
+ minutes < 120 && this.template('hour', 1) ||
1167
+ hours < 24 && this.template('hours', hours) ||
1168
+ hours < 42 && this.template('day', 1) ||
1169
+ days < 30 && this.template('days', days) ||
1170
+ days < 45 && this.template('month', 1) ||
1171
+ days < 365 && this.template('months', yearDifference + monthDifference) ||
1172
+ years < 1.5 && this.template('year', 1) ||
1173
+ this.template('years', years)) + (options?.withSuffix ? this.templates['suffixFuture'] : '');
1174
+ }
1175
+ else {
1176
+ timeSince = (options?.withPrefix ? this.templates['prefixPast'] : '') + (seconds < 60 && this.template('seconds', seconds) ||
1177
+ seconds < 120 && this.template('minute', 1) ||
1178
+ minutes < 60 && this.template('minutes', minutes) ||
1179
+ minutes < 120 && this.template('hour', 1) ||
1180
+ hours < 24 && this.template('hours', hours) ||
1181
+ hours < 42 && this.template('day', 1) ||
1182
+ days < 30 && this.template('days', days) ||
1183
+ days < 45 && this.template('month', 1) ||
1184
+ days < 365 && this.template('months', yearDifference + monthDifference) ||
1185
+ years < 1.5 && this.template('year', 1) ||
1186
+ this.template('years', years)) + (options?.withSuffix ? this.templates['suffixPast'] : '');
1187
+ }
1200
1188
  if (mode === 'timeSince') {
1201
1189
  return timeSince;
1202
1190
  }
@@ -1204,15 +1192,17 @@ class MosaDatePipe {
1204
1192
  return `${convertedDate} (${timeSince})`;
1205
1193
  }
1206
1194
  }
1207
- return convertedDate;
1195
+ return convertedDate || '';
1208
1196
  }
1209
1197
  template(key, val) {
1210
1198
  return this.templates[key]?.replace(/%d/i, String(Math.abs(Math.round(val))));
1211
1199
  }
1212
1200
  updateTemplates() {
1213
1201
  this.templates = {
1214
- prefix: this.myTranslateService.instant('mosa.pipes.timeSince.prefix'),
1215
- suffix: this.myTranslateService.instant('mosa.pipes.timeSince.suffix'),
1202
+ prefixPast: this.myTranslateService.instant('mosa.pipes.timeSince.prefix.past'),
1203
+ suffixPast: this.myTranslateService.instant('mosa.pipes.timeSince.suffix.past'),
1204
+ prefixFuture: this.myTranslateService.instant('mosa.pipes.timeSince.prefix.future'),
1205
+ suffixFuture: this.myTranslateService.instant('mosa.pipes.timeSince.suffix.future'),
1216
1206
  seconds: this.myTranslateService.instant('mosa.pipes.timeSince.seconds'),
1217
1207
  minute: this.myTranslateService.instant('mosa.pipes.timeSince.minute'),
1218
1208
  minutes: this.myTranslateService.instant('mosa.pipes.timeSince.minutes'),
@@ -1226,24 +1216,20 @@ class MosaDatePipe {
1226
1216
  years: this.myTranslateService.instant('mosa.pipes.timeSince.years'),
1227
1217
  };
1228
1218
  }
1229
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: MosaDatePipe, deps: [{ token: i1.TranslateService }, { token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
1219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: MosaDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1230
1220
  static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.11", ngImport: i0, type: MosaDatePipe, isStandalone: true, name: "mosaDate" }); }
1231
1221
  }
1232
1222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: MosaDatePipe, decorators: [{
1233
1223
  type: Pipe,
1234
1224
  args: [{ name: 'mosaDate' }]
1235
- }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.DatePipe }] });
1225
+ }], ctorParameters: () => [] });
1236
1226
 
1237
1227
  class MosaDurationPipe {
1238
1228
  constructor(myTranslateService) {
1239
1229
  this.myTranslateService = myTranslateService;
1240
1230
  this.store$ = new BehaviorSubject(new Date().getTime());
1241
- this.interval = setInterval(() => {
1242
- this.store$.next(new Date().getTime());
1243
- }, 1000);
1244
- this.myTranslateService.onLangChange.subscribe(() => {
1245
- this.store$.next(new Date().getTime());
1246
- });
1231
+ this.interval = setInterval(() => this.store$.next(new Date().getTime()), 1000);
1232
+ this.myTranslateService.onLangChange.subscribe(() => this.store$.next(new Date().getTime()));
1247
1233
  }
1248
1234
  /**
1249
1235
  * Converts a timestamp to a duration in the given format
@@ -1260,11 +1246,11 @@ class MosaDurationPipe {
1260
1246
  return this.store$.pipe(map((currentDate) => {
1261
1247
  if (!millis) {
1262
1248
  clearInterval(this.interval);
1263
- return null;
1249
+ return '';
1264
1250
  }
1265
1251
  if (millis - currentDate < 0) {
1266
1252
  clearInterval(this.interval);
1267
- return null;
1253
+ return '';
1268
1254
  }
1269
1255
  return this.calcDuration(currentDate, millis, format);
1270
1256
  }));
@@ -1305,7 +1291,7 @@ class MosaDurationPipe {
1305
1291
  }
1306
1292
  return this.getTranslation(days, 'days');
1307
1293
  }
1308
- return null;
1294
+ return '';
1309
1295
  }
1310
1296
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: MosaDurationPipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
1311
1297
  static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.11", ngImport: i0, type: MosaDurationPipe, isStandalone: true, name: "mosaDuration" }); }
@@ -1316,10 +1302,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
1316
1302
  }], ctorParameters: () => [{ type: i1.TranslateService }] });
1317
1303
 
1318
1304
  function initI18n(i18n) {
1319
- return i18n.init(null, null, 1);
1305
+ return i18n.init(undefined, undefined, 1);
1320
1306
  }
1321
1307
  function initI18nCore(i18n) {
1322
- return i18n.init(null, 'mosa');
1308
+ return i18n.init(undefined, 'mosa');
1323
1309
  }
1324
1310
  const provideMosaCore = () => makeEnvironmentProviders([
1325
1311
  provideAppInitializer(() => initI18n(inject(AssetsI18nLoaderService))),
@@ -1 +1 @@
1
- {"version":3,"file":"mosa-ng-core.mjs","sources":["../../../../projects/core/src/lib/utils/commons.util.ts","../../../../projects/core/src/lib/enums/i18n-supported.enum.ts","../../../../projects/core/src/lib/constants/local-storage.constant.ts","../../../../projects/core/src/lib/services/translation/translate-collector.service.ts","../../../../projects/core/src/lib/services/translation/assets-i18n-loader.service.ts","../../../../projects/core/src/lib/services/core-logger.service.ts","../../../../projects/core/src/lib/services/api.service.ts","../../../../projects/core/src/lib/services/mosa-socket.service.ts","../../../../projects/core/src/lib/services/translation/custom-translate-loader.service.ts","../../../../projects/core/src/lib/services/guards/can-deactivate.guard.ts","../../../../projects/core/src/lib/utils/dictionary.util.ts","../../../../projects/core/src/lib/utils/prototypes.util.ts","../../../../projects/core/src/lib/utils/sieve.util.ts","../../../../projects/core/src/lib/enums/theme.enum.ts","../../../../projects/core/src/lib/enums/content-position.enum.ts","../../../../projects/core/src/lib/enums/browser.enum.ts","../../../../projects/core/src/lib/pipes/dictionary-item.pipe.ts","../../../../projects/core/src/lib/pipes/filter.pipe.ts","../../../../projects/core/src/lib/pipes/find.pipe.ts","../../../../projects/core/src/lib/pipes/join.pipe.ts","../../../../projects/core/src/lib/pipes/mosa-date.pipe.ts","../../../../projects/core/src/lib/pipes/mosa-duration.pipe.ts","../../../../projects/core/src/lib/provider.ts","../../../../projects/core/src/mosa-ng-core.ts"],"sourcesContent":["import { ITransformMatrix } from '../models/transform-matrix.model';\n\n/**\n * Checks if an object is null or undefined. Does not check for\n * empty strings, or false booleans\n * @param val\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isNullOrUndefined(val: any): boolean {\n return val === null || val === undefined;\n}\n\n/**\n * Checks if a string is null or empty\n * @param str\n */\nexport function isNullOrEmpty(str: string): boolean {\n return !str?.trim();\n}\n\n/**\n * Checks if a string or number is zero or higher\n * @param num\n */\nexport function isZeroOrHigher(num: number | string): boolean {\n return num !== null && +num >= 0;\n}\n\n/**\n * Checks if an object is a number\n * @param num\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isNumber(num: any): boolean {\n return num !== null && !isNaN(+num);\n}\n\n/**\n * Round to nearest number given\n * @param value\n * @param round\n */\nexport function roundNearest(value: number): number {\n return Math.ceil(value / 5) * 5;\n}\n\n/**\n * Merge a two dimensional array\n * @param array\n */\nexport function mergeArray<T>(array: T[][]): T[] {\n return array.reduce((flat: T[], toFlatten: T[] | T[][]): T[] =>\n flat.concat(Array.isArray(toFlatten) ? mergeArray<T>(toFlatten as T[][]) : toFlatten), []);\n}\n\n/**\n * Get CSS Transform matrix from an element\n * @param element\n */\nexport function getTransformMatrix(element: HTMLElement): ITransformMatrix {\n const values = element.style.transform.split(/\\w+\\(|\\);?/);\n const transform = values[ 1 ].split(/,\\s?/g).map((numStr: string): number => parseInt(numStr, 10));\n\n return {\n x: transform[ 0 ],\n y: transform[ 1 ],\n z: transform[ 2 ],\n };\n}\n\nexport function some<T>(item: T, searchValue: T[keyof T] | T[keyof T][], searchKey?: keyof T): boolean {\n let searchValues: T[keyof T][] = searchValue as T[keyof T][];\n if (!Array.isArray(searchValue)) {\n searchValues = [ searchValue ];\n }\n\n return searchValues.includes(searchKey ? item[ searchKey ] : item as T[keyof T]);\n}\n\n/**\n * Generates a random string with numbers and letters\n * @param length\n */\nexport function getRandomString(length: number = 10): string {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result: string = '';\n for (let i: number = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * characters.length));\n }\n return result;\n}\n\n/**\n * Trys to convert a json string. If it fails it returns [null] or a given fallback of [T]\n */\nexport function tryJsonParse<T>(data: string, fallback?: () => T): T | null {\n try {\n if (!isNullOrEmpty(data)) {\n return JSON.parse(data);\n }\n } catch {\n // Ignore - go on with fallback check\n }\n\n if (fallback) {\n return fallback();\n }\n return null;\n}\n","export enum I18nSupported {\n enUS = 'en-US',\n deDE = 'de-DE',\n deCH = 'de-CH',\n deAT = 'de-AT',\n enGB = 'en-GB',\n frFR = 'fr-FR',\n esES = 'es-ES',\n ptPT = 'pt-PT',\n}\n","import { I18nSupported } from '../enums/i18n-supported.enum';\n\nexport const MOSA_MERGED_TRANSLATION = (lang: string): string => `mosa_${ lang }_merged_${ location.host }`;\nexport const MOSA_FALLBACK_TRANSLATION = `mosa_${ I18nSupported.enUS }_merged_${ location.host }`;\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MOSA_MERGED_TRANSLATION } from '../../constants/local-storage.constant';\nimport { IKeyMap } from '../../models/key-map.model';\nimport { isNullOrUndefined } from '../../utils/commons.util';\n\nexport interface ITranslationMap {\n priority: number;\n translation: IKeyMap<string>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslateCollectorService {\n\n private translationMap: IKeyMap<ITranslationMap[]> = {};\n\n constructor(private readonly myTranslateService: TranslateService) {\n }\n\n public addTranslations(translation: Record<string, string>, lang: string, priority: number): void {\n if (isNullOrUndefined(this.translationMap[ lang ])) {\n this.translationMap[ lang ] = [];\n }\n\n this.translationMap[ lang ].push({ priority, translation });\n this.translationMap[ lang ].sort((a: ITranslationMap, b: ITranslationMap) => a.priority - b.priority);\n const merged: IKeyMap<string> = JSON.parse(localStorage.getItem(MOSA_MERGED_TRANSLATION(lang))) || {};\n\n for (const translationsData of this.translationMap[ lang ]) {\n const translations: IKeyMap<string> = translationsData.translation;\n if (translations != null) {\n Object.keys(translations).forEach((key: string) => void (merged[ key ] = translations[ key ]));\n }\n }\n\n let trans: boolean = true;\n let count: number = 0;\n while (trans) {\n count++;\n trans = false;\n if (count >= 10) {\n console.warn('Limit reached! Please check translation file! Last replaced values:');\n }\n Object.keys(merged).forEach((key: string) => {\n if (merged[ key ].startsWith('@:')) {\n merged[ key ] = merged[ merged[ key ].substring(2, merged[ key ].length) ];\n trans = count < 10;\n if (count > 10) {\n console.warn(merged[ key ]);\n }\n }\n });\n }\n localStorage.setItem(MOSA_MERGED_TRANSLATION(lang), JSON.stringify(merged));\n this.myTranslateService.reloadLang(lang);\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { firstValueFrom, Observable, of } from 'rxjs';\nimport { catchError, share, tap } from 'rxjs/operators';\nimport { getRandomString } from '../../utils/commons.util';\nimport { TranslateCollectorService } from './translate-collector.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AssetsI18nLoaderService {\n\n protected priority: number = 0;\n protected supportedLanguages: string[];\n\n private subLanguages: Observable<{ languages: string[] }>;\n\n constructor(\n protected myHttpClient: HttpClient,\n protected myTranslateCollectorService: TranslateCollectorService,\n ) {\n }\n\n public init(path?: string, libName?: string, priority?: number): Promise<void> {\n return new Promise(async (resolve: () => void): Promise<void> => {\n if (this.supportedLanguages) {\n for (let i: number = 0; i < this.supportedLanguages.length; i++) {\n await firstValueFrom(this.loadTranslations(this.supportedLanguages[ i ], path, libName, priority));\n }\n resolve();\n return;\n }\n\n if (!this.subLanguages) {\n this.subLanguages = this.myHttpClient.get<{ languages: string[] }>(`assets/i18n/supported-languages.json?v=${getRandomString()}`)\n .pipe(share());\n }\n this.subLanguages.subscribe(async (res: { languages: string[] }) => {\n this.subLanguages = null;\n this.supportedLanguages = res.languages;\n\n for (let i: number = 0; i < this.supportedLanguages.length; i++) {\n await firstValueFrom(this.loadTranslations(this.supportedLanguages[ i ], path, libName, priority));\n }\n resolve();\n }, () => {\n this.subLanguages = null;\n console.error('Missing file -> assets/i18n/supported-languages.json <-- FIX THIS!');\n resolve();\n });\n });\n }\n\n protected loadTranslations(lang: string, path?: string, libName?: string, priority?: number): Observable<Record<string, string>> {\n const filename: string = libName ? `${libName}-${lang}.json` : `${lang}.json`;\n return this.myHttpClient.get<Record<string, string>>(`${(path || './assets/i18n/') + filename}?v=${getRandomString()}`)\n .pipe(\n tap((response: Record<string, string>) =>\n this.myTranslateCollectorService.addTranslations(response, lang, priority || this.priority)),\n catchError(() => {\n console.error(`Missing file -> ${filename} <-- FIX THIS!`);\n return of(null);\n }),\n );\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ILogEvent } from '../models/logger/log-event.model';\nimport { LogType } from '../models/logger/log-type.model';\nimport { ILoggerConfig } from '../models/logger/logger-config.model';\nimport { ILoggerDefaultConfig } from '../models/logger/logger-default-config.model';\nimport { isNullOrUndefined } from '../utils/commons.util';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CoreLoggerService {\n\n public defaultConfig: ILoggerDefaultConfig;\n\n private readonly uiLogs$: BehaviorSubject<ILogEvent>;\n\n /**\n * Default constructor\n */\n constructor() {\n this.uiLogs$ = new BehaviorSubject(null);\n }\n\n public subUiLogs(): Observable<ILogEvent> {\n return this.uiLogs$.asObservable();\n }\n\n /**\n * Gets the error message from any type of object\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public getErrorMsg(err: any): string {\n let msg: string = 'Unknown Error';\n\n if (!err) {\n return msg;\n }\n\n if (err instanceof HttpErrorResponse) {\n if (typeof err.error !== 'string') {\n return `mosa.commons.errors.status[${err.status}].message`;\n }\n\n return err.error;\n }\n\n if (typeof err === 'string') {\n msg = err;\n } else if (err.msg) {\n msg = err.msg;\n } else if (err.error?.msg) {\n msg = err.error.msg;\n } else if (err.error?.message) {\n msg = err.error.message;\n } else if (err.error?.errors?.[ 0 ]?.message) {\n msg = err.error.errors[ 0 ].message;\n } else if (err.message) {\n msg = err.message;\n } else if (err.Message) {\n msg = err.Message;\n }\n\n if (typeof err.error === 'string') {\n msg = err.error;\n }\n\n return msg;\n }\n\n /**\n * Get the title to be shown in logger toast\n * @param err\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public getErrorTitle(err: any): string {\n let title: string = 'mosa.commons.logs.error.label';\n if (err?.label) {\n title = err.label;\n } else if (err?.title) {\n title = err.title;\n } else if (err?.error?.label) {\n title = err.error.label;\n } else if (err?.error?.title) {\n title = err.error.title;\n }\n return title;\n }\n\n /**\n * Logs an error to the user\n * @param data\n * @param showUser\n * @param config\n */\n public logError(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.msg = this.getErrorMsg(config.msg);\n\n if (!config.title) {\n config.title = this.getErrorTitle(config.msg);\n }\n\n config.className = 'snackbar-error';\n\n this.show(config, 'error');\n }\n\n /**\n * Logs a success message to the user\n * @param data\n * @param config\n */\n public logSuccess(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.className = 'snackbar-success';\n\n this.show(config, 'success');\n }\n\n /**\n * Logs a warning to the user\n * @param data\n * @param showUser\n * @param config\n */\n public logWarning(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.className = 'snackbar-warning';\n\n this.show(config, 'warning');\n }\n\n /**\n * Logs an info to the user\n * @param data\n * @param config\n */\n public logInfo(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.className = 'snackbar-info';\n\n this.show(config, 'info');\n }\n\n /**\n * Logs any kind of message to the user\n * @param data\n * @param config\n */\n public log(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.className = 'snackbar-default';\n\n this.show(config, 'default');\n }\n\n /**\n * Show the log\n * @requires @mosa-ng/material\n * @param data\n * @param type\n * @param config\n */\n public show(config: ILoggerConfig, type: LogType): void {\n this.uiLogs$.next({ title: config.title, msg: config.msg, type, config });\n }\n\n /**\n * Serializes empty values, so no error is being returned\n * @param config\n * @private\n */\n private serializeConfig(config: ILoggerConfig): ILoggerConfig {\n // Check if user has default config\n if (!this.defaultConfig) {\n this.defaultConfig = {\n debug: true,\n };\n }\n\n if (!config) {\n // Get user default config\n config = {\n showDismiss: this.defaultConfig.showDismiss,\n closeOnClick: isNullOrUndefined(this.defaultConfig.closeOnClick) ? true : this.defaultConfig.closeOnClick,\n className: this.defaultConfig.className,\n duration: this.defaultConfig.duration || 4,\n };\n }\n\n // Serialize configuration\n config.duration = CoreLoggerService.getValue<number>(config.duration, this.defaultConfig.duration, 4);\n config.className = CoreLoggerService.getValue<string>(config.className, this.defaultConfig.className, null);\n config.showDismiss = CoreLoggerService.getValue<boolean>(config.showDismiss, this.defaultConfig.showDismiss, false);\n config.closeOnClick = CoreLoggerService.getValue<boolean>(config.closeOnClick, this.defaultConfig.closeOnClick, true);\n\n return config;\n }\n\n /**\n * Gets a value which is not undefined or null\n * @param val\n * @param val1\n * @param def\n * @private\n */\n private static getValue<T>(val: T, val1: T, def: T): T {\n if (isNullOrUndefined(val)) {\n if (isNullOrUndefined(val1)) {\n return def;\n }\n return val1;\n }\n return val;\n }\n\n}\n","import { HttpClient, HttpErrorResponse, HttpEvent, HttpHeaders, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { IApiOptions } from '../models/api-options.model';\nimport { ITokenSettings } from '../models/token-settings.model';\nimport { CoreLoggerService } from './core-logger.service';\nimport { isNullOrEmpty } from '../utils/commons.util';\n\nexport const LOCAL_STORAGE_TOKEN_KEY = 'tokenSettings';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiService {\n\n constructor(\n private readonly myCoreLoggerService: CoreLoggerService,\n private readonly myHttpClient: HttpClient,\n ) {\n }\n\n /**\n * Gets an access token\n * @deprecated use getToken()\n */\n public getAccessToken(): string {\n return window.localStorage.getItem('jwtAccessToken');\n }\n\n /**\n * Sets an access token\n * @param token\n * @deprecated use setToken()\n */\n public setAccessToken(token: string): void {\n window.localStorage.setItem('jwtAccessToken', token);\n }\n\n /**\n * Removes an access token from local storage\n * @deprecated use deleteAccessToken()\n */\n public removeAccessToken(): void {\n window.localStorage.removeItem('jwtAccessToken');\n }\n\n /**\n * Sets the token\n * @param tokenSettings\n */\n public setToken(tokenSettings: ITokenSettings): void {\n window.localStorage.setItem(LOCAL_STORAGE_TOKEN_KEY, JSON.stringify(tokenSettings));\n }\n\n /**\n * Gets token\n */\n public getToken(): ITokenSettings {\n const tokenSettings: string = window.localStorage.getItem(LOCAL_STORAGE_TOKEN_KEY);\n if (isNullOrEmpty(tokenSettings)) {\n return null;\n }\n\n return JSON.parse(tokenSettings);\n }\n\n /**\n * Deletes token\n */\n public deleteToken(): void {\n window.localStorage.removeItem(LOCAL_STORAGE_TOKEN_KEY);\n }\n\n /**\n * Makes an http get call\n * @param url\n * @param headers\n * @param options\n */\n public get<T>(url: string, headers?: HttpHeaders, options?: IApiOptions): Observable<T> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.get<T>(url, { ...options.httpOptions as any, headers })\n .pipe(\n map((response: HttpEvent<T>) => this.handleResponse(response)),\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Makes an async http get call, which also includes the response headers\n * @param url\n * @param headers\n * @param options\n */\n public async getWithHeadersAsync<T>(url: string, headers?: HttpHeaders, options?: IApiOptions): Promise<HttpEvent<T>> {\n return this.getWithHeaders<T>(url, headers, options).toPromise();\n }\n\n /**\n * Makes an http get call, which also includes the response headers\n * @param url\n * @param headers\n * @param options\n */\n public getWithHeaders<T>(url: string, headers?: HttpHeaders, options?: IApiOptions): Observable<HttpEvent<T>> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.get<T>(url, { ...options.httpOptions as any, headers, observe: 'response' })\n .pipe(\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Makes an http patch call (For partial updates)\n * @param url\n * @param data\n * @param headers\n * @param options\n */\n public patch<T, T1>(url: string, data?: T, headers?: HttpHeaders, options?: IApiOptions): Observable<T1> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.patch<T1>(url, data, { ...options.httpOptions as any, headers })\n .pipe(\n map((response: HttpEvent<T1>) => this.handleResponse(response)),\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Makes an http put call\n * @param url\n * @param data\n * @param headers\n * @param options\n */\n public put<T, T1>(url: string, data?: T, headers?: HttpHeaders, options?: IApiOptions): Observable<T1> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.put<T1>(url, data, { ...options.httpOptions as any, headers })\n .pipe(\n map((response: HttpEvent<T1>) => this.handleResponse(response)),\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Makes an http post call\n * @param url\n * @param data\n * @param headers\n * @param options\n */\n public post<T, T1>(url: string, data?: T, headers?: HttpHeaders, options?: IApiOptions): Observable<T1> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.post<T1>(url, data, { ...options.httpOptions as any, headers })\n .pipe(\n map((response: HttpEvent<T1>) => this.handleResponse(response)),\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * makes an http delete call\n * @param url\n * @param headers\n * @param options\n * @returns Observable\n */\n public delete<T>(url: string, headers?: HttpHeaders, options?: IApiOptions): Observable<T> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n return this.myHttpClient.delete<T>(url, { ...options.httpOptions as {}, headers })\n .pipe(\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Appends a script to the html body\n * @param path\n * @param attributes\n * @param onLoad\n */\n public loadExternalScript(path: string, attributes?: { key: string, value: string }[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onLoad?: ((this: GlobalEventHandlers, ev: Event) => any)): void {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = path;\n script.async = true;\n\n if (onLoad) {\n script.onload = onLoad;\n }\n\n if (attributes) {\n for (const attribute of attributes) {\n script.setAttribute(attribute.key, attribute.value);\n }\n }\n\n document.body.append(script);\n }\n\n private handleError(err: HttpErrorResponse, options: IApiOptions): Observable<never> {\n if (!options?.skipErrorHandling) {\n this.myCoreLoggerService.logError({ msg: err });\n }\n\n return throwError(() => err);\n }\n\n private handleResponse<T>(response: HttpEvent<T>): T {\n if (response instanceof HttpResponse) {\n return response.body;\n }\n return response as T;\n }\n\n private getHeaders(headers: HttpHeaders, options: IApiOptions): HttpHeaders {\n if (!headers) {\n headers = new HttpHeaders();\n }\n\n if (!options.skipContentType) {\n if (!headers.get('Content-Type')) {\n headers = headers.set('Content-Type', 'application/json');\n }\n }\n\n if (!options?.skipAuth) {\n if (this.getToken()) {\n const tokenSettings: ITokenSettings = this.getToken();\n headers = headers.set('Authorization', `${ tokenSettings.tokenType } ${ tokenSettings.token }`);\n } else {\n // Deprecated. Use ITokenSettings\n headers = headers.set('Authorization', `Bearer ${ this.getAccessToken() }`);\n }\n }\n return headers;\n }\n\n private static serializeOptions(options: IApiOptions): IApiOptions {\n if (!options) {\n options = {};\n }\n\n if (!options.httpOptions) {\n options.httpOptions = {};\n }\n\n return options;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Observable, Observer, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MosaSocketService {\n\n private subject: Subject<MessageEvent>;\n\n constructor() {\n }\n\n public connect(url: string): Subject<MessageEvent> {\n if (!this.subject) {\n this.subject = this.create(url);\n }\n return this.subject;\n }\n\n public send(data: MessageEvent): void {\n this.subject.next(data);\n }\n\n private create(url: string): Subject<MessageEvent> {\n const ws = new WebSocket(url);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const observable = new Observable((obs: Observer<MessageEvent>): any => {\n ws.onmessage = obs.next.bind(obs);\n ws.onerror = obs.error.bind(obs);\n ws.onclose = obs.complete.bind(obs);\n return ws.close.bind(ws);\n });\n const observer = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n next: (data: any): void => {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(data));\n }\n },\n };\n return Subject.create(observer, observable);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Observer } from 'rxjs';\nimport { MOSA_FALLBACK_TRANSLATION, MOSA_MERGED_TRANSLATION } from '../../constants/local-storage.constant';\nimport { IKeyMap } from '../../models/key-map.model';\nimport { isNullOrEmpty, tryJsonParse } from '../../utils/commons.util';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomTranslateLoaderService {\n\n public getTranslation(lang: string): Observable<IKeyMap<string>> {\n return new Observable<IKeyMap<string>>((observer: Observer<IKeyMap<string>>) => {\n const item: string = localStorage.getItem(MOSA_MERGED_TRANSLATION(lang));\n const responseObj: IKeyMap<string> = tryJsonParse(item, () => this.loadFallbackLanguage());\n\n observer.next(responseObj);\n observer.complete();\n });\n }\n\n private loadFallbackLanguage(): IKeyMap<string> {\n const defaultTranslation: string = localStorage.getItem(MOSA_FALLBACK_TRANSLATION);\n return isNullOrEmpty(defaultTranslation) ? {} : JSON.parse(defaultTranslation);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nexport interface ICanComponentDeactivate {\n canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CanDeactivateGuard implements CanDeactivate<ICanComponentDeactivate> {\n\n public canDeactivate(component: ICanComponentDeactivate): boolean {\n return component.canDeactivate ? component.canDeactivate() as boolean : true;\n }\n\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IDictionaryItem } from '../models/dictionary-item.model';\nimport { IKeyMap } from '../models/key-map.model';\n\nexport class Dictionary<Key, Value> {\n\n private readonly dictionaryItems$: BehaviorSubject<IDictionaryItem<Key, Value>[]>;\n\n /**\n * Default constructor.\n * @param data Requires an array of IDictionaryItem with a key and a value\n */\n constructor(...data: IDictionaryItem<Key, Value>[]) {\n this.dictionaryItems$ = new BehaviorSubject<IDictionaryItem<Key, Value>[]>(data);\n }\n\n /**\n * Observable to subscribe to dictionary changes\n */\n public valueChanges(): Observable<IDictionaryItem<Key, Value>[]> {\n return this.dictionaryItems$.asObservable();\n }\n\n /**\n * Observable to subscribe to dictionary as object changes\n */\n public objectArray(): Observable<IKeyMap<Value>> {\n return this.dictionaryItems$.asObservable()\n .pipe(\n map((items: IDictionaryItem<Key, Value>[]): IKeyMap<Value> => this.toObject(items)),\n );\n }\n\n /**\n * Gets the items of the dictionary\n * @returns dictionary items\n */\n public get items(): IDictionaryItem<Key, Value>[] {\n return this.dictionaryItems$.value;\n }\n\n /**\n * Gets a dictionary item by key\n * @param key\n * @returns single dictionary item\n */\n public get(key: Key): IDictionaryItem<Key, Value> {\n return this.dictionaryItems$.value.find((item: IDictionaryItem<Key, Value>): boolean => item.key === key);\n }\n\n /**\n * Checks if dictionary contains item\n * @param key\n */\n public contains(key: Key): boolean {\n return this.get(key) != null;\n }\n\n /**\n * Adds a dictionary item\n * @param key\n * @param value\n */\n public add(key: Key, value: Value): void {\n const dictionaryItems: IDictionaryItem<Key, Value>[] = [ ...this.dictionaryItems$.value ];\n dictionaryItems.push({ key, value });\n this.updateItems(dictionaryItems);\n }\n\n /**\n * Updates a dictionary item\n * @param data\n * @param index\n */\n public update(data: IDictionaryItem<Key, Value>, index?: number): void {\n const dictionaryItems: IDictionaryItem<Key, Value>[] = [ ...this.dictionaryItems$.value ];\n if (!index) {\n index = this.getIndex(data.key);\n }\n\n if (index !== -1) {\n dictionaryItems[ index ] = data;\n } else {\n console.warn('Dictionary: Index not found');\n }\n this.updateItems(dictionaryItems);\n }\n\n /**\n * Gets an index with a specific key\n * @param key\n */\n public getIndex(key: Key): number {\n return this.dictionaryItems$.value.findIndex((val: IDictionaryItem<Key, Value>): boolean => val.key === key);\n }\n\n /**\n * Removes an item from the dictionary\n * @param value\n * @param index\n */\n public remove(value: Key, index?: number): void {\n const dictionaryItems: IDictionaryItem<Key, Value>[] = [ ...this.dictionaryItems$.value ];\n if (!index) {\n index = this.getIndex(value);\n }\n\n if (index !== -1) {\n dictionaryItems.splice(index, 1);\n } else {\n console.warn('Dictionary: Index not found');\n }\n this.updateItems(dictionaryItems);\n }\n\n /**\n * Private function to cast array to an object\n * @param items\n * @private\n */\n private toObject(items: IDictionaryItem<Key, Value>[]): IKeyMap<Value> {\n const obj: IKeyMap<Value> = {};\n for (const item of items) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n obj[ item.key as any ] = item.value;\n }\n return obj;\n }\n\n /**\n * Private function to update dictionary items\n * @param items\n * @private\n */\n private updateItems(items: IDictionaryItem<Key, Value>[]): void {\n this.dictionaryItems$.next(items);\n }\n\n}\n","/**\n * Cast any type\n * @param data to be casted\n * @returns casted data\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any,max-classes-per-file\nexport function cast<T>(data: any): T {\n return data as T;\n}\n\nexport class StringExtensions implements IStringExtensions {\n public getPart(maxChars: number, appendDot?: boolean): string {\n let newStr = cast<string>(this).replace(/\\\\n/g, ' ');\n if (newStr.length > maxChars) {\n newStr = newStr.substring(0, maxChars);\n if (appendDot && newStr.length > maxChars - 3) {\n newStr += '...';\n }\n }\n return newStr;\n }\n\n public fromJSON<T>(): T {\n let str: string = cast<string>(this);\n if (typeof this !== 'string') {\n str = JSON.stringify(str);\n }\n\n try {\n str = JSON.parse(str);\n } catch {\n return null;\n }\n\n if (typeof str === 'object') {\n return str as T;\n }\n\n return null;\n }\n\n public toCSSClass(): string {\n return cast<string>(this)?.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase();\n }\n\n public toUTC(): string {\n return `${cast<string>(this)}Z`;\n }\n}\n\nexport class ArrayExtensions implements IArrayExtensions {\n public hasChanges<T>(data: T[]): boolean {\n return JSON.stringify(this) !== JSON.stringify(data);\n }\n\n public replaceRange<T>(data: T[], start: number, end: number): T[] {\n const array: T[] = cast<T[]>(this);\n let replaceDataIndex: number = 0;\n for (let i: number = start; i < end; i++) {\n if (!array[ i ] && !data[ replaceDataIndex ]) {\n array.splice(i, 1);\n continue;\n }\n\n array[ i ] = data[ replaceDataIndex ];\n replaceDataIndex++;\n }\n return array;\n }\n}\n\nexport class NumberExtensions implements INumberExtensions {\n public between(start: number, end: number): boolean {\n const num: number = cast<number>(this);\n return num >= start && num <= end;\n }\n}\n\n/**\n * @interface StringExtensions\n */\nexport interface IStringExtensions {\n /**\n * Gets a part of a string\n * @param maxChars maximum amount of chars\n * @param appendDot append three dots at the end\n * @returns splitted string\n */\n getPart(maxChars: number, appendDot?: boolean): string;\n\n /**\n * Converts a string from json\n * @returns object of expected type\n */\n fromJSON<T>(): T;\n\n /**\n * Converts a string to a css class\n * @returns converted kebab case css class\n */\n toCSSClass(): string;\n\n /**\n * Converts a datetime string to utc format\n */\n toUTC(): string;\n}\n\nexport interface IArrayExtensions {\n /**\n * Checks if array has changes\n * @param data array passed\n * @deprecated learn how to program\n */\n hasChanges: <T>(data: T[]) => boolean;\n /**\n * Replaces a specific element range in an array\n * @param data\n */\n replaceRange: <T>(replaceData: T[], start: number, end: number) => T[];\n}\n\nexport interface INumberExtensions {\n /**\n * checks if a number in a range\n * @param start of range\n * @param end of range\n */\n between(start: number, end: number): boolean;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/naming-convention,id-blacklist,@typescript-eslint/no-empty-object-type\n interface String extends IStringExtensions {\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type,@typescript-eslint/no-unused-vars\n interface Array<T> extends IArrayExtensions {\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention,id-blacklist,@typescript-eslint/no-empty-object-type\n interface Number extends INumberExtensions {\n }\n}\n\nexport class Prototypes {\n\n /**\n * Initialize prototypes\n */\n public static init(): void {\n const stringExtensions = new StringExtensions();\n const arrayExtensions = new ArrayExtensions();\n const numberExtensions = new NumberExtensions();\n\n String.prototype.getPart = stringExtensions.getPart;\n String.prototype.fromJSON = stringExtensions.fromJSON;\n String.prototype.toCSSClass = stringExtensions.toCSSClass;\n String.prototype.toUTC = stringExtensions.toUTC;\n\n Array.prototype.hasChanges = arrayExtensions.hasChanges;\n Array.prototype.replaceRange = arrayExtensions.replaceRange;\n\n Number.prototype.between = numberExtensions.between;\n }\n}\n","import { ISieveFilter } from '../models/sieve/sieve-filter.model';\nimport { SieveOperator } from '../models/sieve/sieve-operator.model';\nimport { ISieveOptions } from '../models/sieve/sieve-options.model';\nimport { ISieveSort } from '../models/sieve/sieve-sort.model';\n\nexport class Sieve {\n\n private readonly options: ISieveOptions;\n\n constructor(options: ISieveOptions) {\n this.options = options;\n this.options.baseUrl = options.baseUrl || '';\n this.options.filters = options.filters || [];\n this.options.sorts = options.sorts || [];\n }\n\n /**\n * public getter to get page size\n */\n public get pageSize(): number {\n return this.options.pageSize;\n }\n\n /**\n * Setter to set page size\n */\n public set pageSize(pageSize: number) {\n this.options.pageSize = pageSize;\n }\n\n /**\n * public getter to get page\n */\n public get page(): number {\n return this.options.page;\n }\n\n /**\n * Setter to set page\n */\n public set page(page: number) {\n this.options.page = page;\n }\n\n /**\n * public getter to get filters\n */\n public get filters(): ISieveFilter[] {\n return this.options.filters;\n }\n\n /**\n * Setter to set filters\n */\n public set filters(filters: ISieveFilter[]) {\n this.options.filters = filters;\n }\n\n /**\n * public getter to get sorts\n */\n public get sorts(): ISieveSort[] {\n return this.options.sorts;\n }\n\n /**\n * Setter to set sorts\n */\n public set sorts(sorts: ISieveSort[]) {\n this.options.sorts = sorts;\n }\n\n /**\n * method to add a sort option\n * @param name of the item to sort\n * @param desc sort descending\n */\n public addSort(name: string, desc?: boolean): void {\n this.options.sorts.push({\n name,\n desc,\n });\n }\n\n /**\n * method to add a filter option\n * @param key of the item\n * @param operator { SieveOperator }\n * @param value filtered value\n */\n public addFilter(key: string, operator: SieveOperator, value: string): void {\n this.options.filters.push({\n key,\n operator,\n value,\n });\n }\n\n /**\n * Getter for base url\n */\n public get baseUrl(): string {\n return this.options.baseUrl;\n }\n\n /**\n * Setter for base url\n * @param url\n */\n public set baseUrl(url: string) {\n this.options.baseUrl = url;\n }\n\n /**\n * Convert to queried string\n */\n public getUrl(): string {\n return `${ this.options.baseUrl }${ this.toQuery() }`;\n }\n\n /**\n * to Query\n * @private converts options to actual query\n */\n private toQuery(): string {\n let query = '?';\n\n if (this.page) {\n query += `page=${ this.page }`;\n }\n\n if (this.pageSize) {\n query += `&pageSize=${ this.pageSize }`;\n }\n\n if (this.filters?.length) {\n let filterQuery: string = '&filters=';\n\n for (const filter of this.filters) {\n if (filter.value) {\n filterQuery += `${ filter.key }${ filter.operator }${ filter.value },`;\n }\n }\n\n if (filterQuery !== '&filters=') {\n filterQuery = filterQuery.slice(0, -1);\n query += filterQuery;\n }\n }\n\n if (this.sorts?.length) {\n let sortQuery: string = '&sorts=';\n\n for (const sort of this.sorts) {\n sortQuery += `${ sort.desc ? '-' : '+' }${ sort.name },`;\n }\n\n sortQuery = sortQuery.slice(0, -1);\n query += sortQuery;\n }\n\n if (query.startsWith('&')) {\n query = query.slice(1);\n }\n\n return query;\n }\n\n}\n","export enum Theme {\n light,\n dark,\n}\n","export enum ContentPosition {\n top = 'top',\n topLeft = 'top-left',\n topRight = 'top-right',\n bottom = 'bottom',\n bottomLeft = 'bottom-left',\n bottomRight = 'bottom-right',\n center = 'center',\n centerLeft = 'center-left',\n centerRight = 'center-right',\n}\n","export enum Browser {\n chrome,\n firefox,\n internetExplorer,\n opera,\n edge,\n safari,\n other,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Dictionary } from '../utils/dictionary.util';\n\n@Pipe({ name: 'dictionaryItem' })\nexport class DictionaryItemPipe implements PipeTransform {\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(key: any, dictionary: Dictionary<any, any>): string {\n return dictionary.get(key)?.value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { some } from '../utils/commons.util';\n\n@Pipe({ name: 'filter' })\nexport class FilterPipe implements PipeTransform {\n\n public transform<T>(array: T[], searchValue: T[keyof T] | T[keyof T][], searchKey?: keyof T): T[] {\n // Return if array is empty or null\n if (!array?.length) {\n return [];\n }\n\n const foundItems: T[] = array.filter((v: T): boolean => some(v, searchValue, searchKey));\n if (!foundItems.length) {\n return [];\n }\n\n // Return whole item\n return foundItems;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { some } from '../utils/commons.util';\n\n@Pipe({ name: 'find' })\nexport class FindPipe implements PipeTransform {\n\n public transform<T>(array: T[], searchValue: T[keyof T] | T[keyof T][], searchKey?: keyof T): T {\n // Return if array is empty or null\n if (!array?.length) {\n return null;\n }\n\n const foundItem: T = array.find((v: T): boolean => some(v, searchValue, searchKey));\n if (!foundItem) {\n return null;\n }\n\n // Return whole item\n return foundItem;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'join' })\nexport class JoinPipe implements PipeTransform {\n\n /**\n * Join array by separator\n * @param array\n * @param returnField\n * @param separator\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(array: any[], returnField: any, separator: string = ', '): string {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return array.map((val: any): string => returnField ? val[ returnField ] : val).join(separator);\n }\n\n}\n","import { DatePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Pipe({ name: 'mosaDate' })\nexport class MosaDatePipe implements PipeTransform {\n\n private readonly store$: BehaviorSubject<number>;\n private templates: Record<string, string>;\n\n constructor(\n private readonly myTranslateService: TranslateService,\n private readonly myDatePipe: DatePipe,\n ) {\n this.store$ = new BehaviorSubject<number>(null);\n this.updateTemplates();\n setInterval((): void => {\n this.store$.next(new Date().getTime());\n }, 10);\n this.myTranslateService.onLangChange.subscribe((): void => {\n this.updateTemplates();\n this.store$.next(new Date().getTime());\n });\n }\n\n public transform(date: string | Date, mode: 'full' | 'timeSince' | 'date' = 'timeSince'): Observable<string> {\n return this.store$.pipe(map((currentDate: number): string => this.calcDate(currentDate, date, mode)));\n }\n\n private calcDate(currentDate: number, date: string | Date, mode: 'full' | 'timeSince' | 'date'): string {\n let parsed: number;\n if (date instanceof Date) {\n parsed = new Date(date.toString()).getTime();\n } else {\n parsed = new Date(date).getTime();\n }\n\n if (!currentDate) {\n currentDate = new Date().getTime();\n }\n\n const convertedDate = this.myDatePipe.transform(parsed, 'dd. MMM. yyyy hh:mm aaa');\n if (mode === 'full' || mode === 'timeSince') {\n const seconds = ((currentDate - parsed) * .001) >> 0;\n const minutes = seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n const years = days / 365;\n\n const timeSince: string = this.templates[ 'prefix' ] + (\n seconds < 60 && this.template('seconds', seconds) ||\n seconds < 120 && this.template('minute', 1) ||\n minutes < 60 && this.template('minutes', minutes) ||\n minutes < 120 && this.template('hour', 1) ||\n hours < 24 && this.template('hours', hours) ||\n hours < 42 && this.template('day', 1) ||\n days < 30 && this.template('days', days) ||\n days < 45 && this.template('month', 1) ||\n days < 365 && this.template('months', days / 30) ||\n years < 1.5 && this.template('year', 1) ||\n this.template('years', years)\n ) + this.templates[ 'prefix' ];\n\n if (mode === 'timeSince') {\n return timeSince;\n }\n\n if (mode === 'full') {\n return `${convertedDate} (${timeSince})`;\n }\n }\n\n return convertedDate;\n }\n\n private template(key: string, val: number): string {\n return this.templates[ key ]?.replace(/%d/i, String(Math.abs(Math.round(val))));\n }\n\n private updateTemplates(): void {\n this.templates = {\n prefix: this.myTranslateService.instant('mosa.pipes.timeSince.prefix'),\n suffix: this.myTranslateService.instant('mosa.pipes.timeSince.suffix'),\n seconds: this.myTranslateService.instant('mosa.pipes.timeSince.seconds'),\n minute: this.myTranslateService.instant('mosa.pipes.timeSince.minute'),\n minutes: this.myTranslateService.instant('mosa.pipes.timeSince.minutes'),\n hour: this.myTranslateService.instant('mosa.pipes.timeSince.hour'),\n hours: this.myTranslateService.instant('mosa.pipes.timeSince.hours'),\n day: this.myTranslateService.instant('mosa.pipes.timeSince.day'),\n days: this.myTranslateService.instant('mosa.pipes.timeSince.days'),\n month: this.myTranslateService.instant('mosa.pipes.timeSince.month'),\n months: this.myTranslateService.instant('mosa.pipes.timeSince.months'),\n year: this.myTranslateService.instant('mosa.pipes.timeSince.year'),\n years: this.myTranslateService.instant('mosa.pipes.timeSince.years'),\n };\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { MosaDurationFormat } from '../models/mosa-duration.model';\n\n@Pipe({ name: 'mosaDuration' })\nexport class MosaDurationPipe implements PipeTransform {\n\n private readonly store$: BehaviorSubject<number>;\n private readonly interval: NodeJS.Timeout;\n\n constructor(\n private readonly myTranslateService: TranslateService,\n ) {\n this.store$ = new BehaviorSubject<number>(new Date().getTime());\n this.interval = setInterval(() => {\n this.store$.next(new Date().getTime());\n }, 1000);\n this.myTranslateService.onLangChange.subscribe((): void => {\n this.store$.next(new Date().getTime());\n });\n }\n\n /**\n * Converts a timestamp to a duration in the given format\n * @param millis\n * @param format\n * @returns\n * auto: 15000 -> 15 seconds\n * seconds: 15000 -> 15 seconds\n * minutes: 60000 -> 1 minute\n * hours: 7200000 -> 2 hours\n * days: 172800000 -> 2 days\n */\n public transform(millis: number, format: MosaDurationFormat = 'auto'): Observable<string> {\n return this.store$.pipe(\n map((currentDate: number): string => {\n if (!millis) {\n clearInterval(this.interval);\n return null;\n }\n\n if (millis - currentDate < 0) {\n clearInterval(this.interval);\n return null;\n }\n\n return this.calcDuration(currentDate, millis, format);\n }),\n );\n }\n\n\n private getTranslation(num: number, format: MosaDurationFormat): string {\n if (num === 1) {\n return `${num.toFixed(0)} ${this.myTranslateService.instant(`mosa.commons.dateTime[${format}].label`)}`;\n }\n return `${num.toFixed(0)} ${this.myTranslateService.instant(`mosa.commons.dateTime[${format}].plural.label`)}`;\n }\n\n\n private calcDuration(currentDate: number, millis: number, format: MosaDurationFormat): string {\n millis = millis - currentDate;\n\n const seconds: number = millis / 1000;\n if (format === 'seconds') {\n return this.getTranslation(seconds, 'seconds');\n }\n\n const minutes: number = seconds / 60;\n if (format === 'minutes') {\n return this.getTranslation(minutes, 'minutes');\n }\n\n const hours: number = minutes / 60;\n if (format === 'hours') {\n return this.getTranslation(hours, 'hours');\n }\n\n const days: number = hours / 24;\n if (format === 'days') {\n return this.getTranslation(days, 'days');\n }\n\n if (format === 'auto') {\n if (seconds < 60) {\n return this.getTranslation(seconds, 'seconds');\n }\n\n if (minutes < 60) {\n return this.getTranslation(minutes, 'minutes');\n }\n\n if (hours < 24) {\n return this.getTranslation(hours, 'hours');\n }\n\n return this.getTranslation(days, 'days');\n }\n\n return null;\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { AssetsI18nLoaderService } from './services/translation/assets-i18n-loader.service';\n\n/*\n * Public API Surface of core\n */\n\n/**\n * Services\n */\nexport * from './services/api.service';\nexport * from './services/mosa-socket.service';\nexport * from './services/core-logger.service';\n\nexport * from './services/translation/translate-collector.service';\nexport * from './services/translation/custom-translate-loader.service';\nexport * from './services/translation/assets-i18n-loader.service';\n\n/**\n * Guards\n */\nexport * from './services/guards/can-deactivate.guard';\n\n/**\n * Models\n */\nexport * from './models/dictionary-item.model';\nexport * from './models/api-options.model';\nexport * from './models/mosa-duration.model';\nexport * from './models/token-settings.model';\nexport * from './models/transform-matrix.model';\nexport * from './models/key-map.model';\nexport * from './models/item.model';\nexport * from './models/size.model';\n\nexport * from './models/sieve/sieve-response.model';\nexport * from './models/sieve/sieve-sort.model';\nexport * from './models/sieve/sieve-filter.model';\nexport * from './models/sieve/sieve-operator.model';\nexport * from './models/sieve/sieve-options.model';\n\nexport * from './models/logger/logger-config.model';\nexport * from './models/logger/log.model';\nexport * from './models/logger/log-event.model';\nexport * from './models/logger/log-message-data.model';\nexport * from './models/logger/logger-base-config.model';\nexport * from './models/logger/logger-default-config.model';\nexport * from './models/logger/log-type.model';\n\nexport * from './models/types/form.type';\n\n/**\n * Utils\n */\nexport * from './utils/commons.util';\nexport * from './utils/dictionary.util';\nexport * from './utils/promise.util';\nexport * from './utils/prototypes.util';\nexport * from './utils/sieve.util';\n\n/**\n * Enums\n */\nexport * from './enums/theme.enum';\nexport * from './enums/content-position.enum';\nexport * from './enums/browser.enum';\nexport * from './enums/i18n-supported.enum';\n\n/**\n * Constants\n */\nexport * from './constants/local-storage.constant';\n\n/**\n * Pipes\n */\nexport * from './pipes/dictionary-item.pipe';\nexport * from './pipes/filter.pipe';\nexport * from './pipes/find.pipe';\nexport * from './pipes/join.pipe';\nexport * from './pipes/mosa-date.pipe';\nexport * from './pipes/mosa-duration.pipe';\n\nfunction initI18n(i18n: AssetsI18nLoaderService): Promise<void> {\n return i18n.init(null, null, 1);\n}\n\nfunction initI18nCore(i18n: AssetsI18nLoaderService): Promise<void> {\n return i18n.init(null, 'mosa');\n}\n\nexport const provideMosaCore: () => EnvironmentProviders = () => makeEnvironmentProviders([\n provideAppInitializer(() => initI18n(inject(AssetsI18nLoaderService))),\n provideAppInitializer(() => initI18nCore(inject(AssetsI18nLoaderService))),\n]);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.TranslateCollectorService","i1.CoreLoggerService","i2"],"mappings":"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"}
1
+ {"version":3,"file":"mosa-ng-core.mjs","sources":["../../../../projects/core/src/lib/utils/commons.util.ts","../../../../projects/core/src/lib/enums/i18n-supported.enum.ts","../../../../projects/core/src/lib/constants/local-storage.constant.ts","../../../../projects/core/src/lib/services/translation/translate-collector.service.ts","../../../../projects/core/src/lib/services/translation/assets-i18n-loader.service.ts","../../../../projects/core/src/lib/services/core-logger.service.ts","../../../../projects/core/src/lib/services/api.service.ts","../../../../projects/core/src/lib/services/mosa-socket.service.ts","../../../../projects/core/src/lib/services/translation/custom-translate-loader.service.ts","../../../../projects/core/src/lib/services/guards/can-deactivate.guard.ts","../../../../projects/core/src/lib/utils/dictionary.util.ts","../../../../projects/core/src/lib/utils/prototypes.util.ts","../../../../projects/core/src/lib/utils/sieve.util.ts","../../../../projects/core/src/lib/enums/theme.enum.ts","../../../../projects/core/src/lib/enums/content-position.enum.ts","../../../../projects/core/src/lib/enums/browser.enum.ts","../../../../projects/core/src/lib/pipes/dictionary-item.pipe.ts","../../../../projects/core/src/lib/pipes/filter.pipe.ts","../../../../projects/core/src/lib/pipes/find.pipe.ts","../../../../projects/core/src/lib/pipes/join.pipe.ts","../../../../projects/core/src/lib/pipes/mosa-date.pipe.ts","../../../../projects/core/src/lib/pipes/mosa-duration.pipe.ts","../../../../projects/core/src/lib/provider.ts","../../../../projects/core/src/mosa-ng-core.ts"],"sourcesContent":["import { ITransformMatrix } from '../models/transform-matrix.model';\n\n/**\n * Checks if an object is null or undefined. Does not check for\n * empty strings, or false booleans\n * @param val\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isNullOrUndefined(val: any): boolean {\n return val === null || val === undefined;\n}\n\n/**\n * Checks if a string is null or empty\n * @param str\n */\nexport function isNullOrEmpty(str: string | null | undefined): boolean {\n return !str?.trim();\n}\n\n/**\n * Checks if a string or number is zero or higher\n * @param num\n */\nexport function isZeroOrHigher(num: number | string | null): boolean {\n return num !== null && +num >= 0;\n}\n\n/**\n * Checks if an object is a number\n * @param num\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isNumber(num: any): boolean {\n return num !== null && !isNaN(+num);\n}\n\n/**\n * Round to nearest number given\n * @param value\n * @param round\n */\nexport function roundNearest(value: number): number {\n return Math.ceil(value / 5) * 5;\n}\n\n/**\n * Merge a two dimensional array\n * @param array\n */\nexport function mergeArray<T>(array: T[][]): T[] {\n return array.reduce((flat: T[], toFlatten: T[] | T[][]): T[] =>\n flat.concat(Array.isArray(toFlatten) ? mergeArray<T>(toFlatten as T[][]) : toFlatten), []);\n}\n\n/**\n * Get CSS Transform matrix from an element\n * @param element\n */\nexport function getTransformMatrix(element: HTMLElement): ITransformMatrix {\n const values = element.style.transform.split(/\\w+\\(|\\);?/);\n const transform = values[ 1 ].split(/,\\s?/g).map((numStr: string): number => parseInt(numStr, 10));\n\n return {\n x: transform[ 0 ],\n y: transform[ 1 ],\n z: transform[ 2 ],\n };\n}\n\nexport function some<T>(item: T, searchValue: T[keyof T] | T[keyof T][], searchKey?: keyof T): boolean {\n let searchValues: T[keyof T][] = searchValue as T[keyof T][];\n if (!Array.isArray(searchValue)) {\n searchValues = [ searchValue ];\n }\n\n return searchValues.includes(searchKey ? item[ searchKey ] : item as T[keyof T]);\n}\n\n/**\n * Generates a random string with numbers and letters\n * @param length\n */\nexport function getRandomString(length: number = 10): string {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result: string = '';\n for (let i: number = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * characters.length));\n }\n return result;\n}\n\n/**\n * Trys to convert a json string. If it fails it returns [null] or a given fallback of [T]\n */\nexport function tryJsonParse<T>(data: string | undefined | null, fallback?: () => T): T | null {\n try {\n if (!isNullOrEmpty(data)) {\n return JSON.parse(data!);\n }\n } catch {\n // Ignore - go on with fallback check\n }\n\n if (fallback) {\n return fallback();\n }\n return null;\n}\n","export enum I18nSupported {\n enUS = 'en-US',\n deDE = 'de-DE',\n deCH = 'de-CH',\n deAT = 'de-AT',\n enGB = 'en-GB',\n frFR = 'fr-FR',\n esES = 'es-ES',\n ptPT = 'pt-PT',\n}\n","import { I18nSupported } from '../enums/i18n-supported.enum';\n\nexport const MOSA_MERGED_TRANSLATION = (lang: string): string => `mosa_${ lang }_merged_${ location.host }`;\nexport const MOSA_FALLBACK_TRANSLATION = `mosa_${ I18nSupported.enUS }_merged_${ location.host }`;\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MOSA_MERGED_TRANSLATION } from '../../constants/local-storage.constant';\nimport { IKeyMap } from '../../models/key-map.model';\nimport { isNullOrUndefined } from '../../utils/commons.util';\n\nexport interface ITranslationMap {\n priority: number;\n translation: IKeyMap<string>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslateCollectorService {\n\n private translationMap: IKeyMap<ITranslationMap[]> = {};\n\n constructor(private readonly myTranslateService: TranslateService) {\n }\n\n public addTranslations(translation: Record<string, string>, lang: string, priority: number): void {\n if (isNullOrUndefined(this.translationMap[ lang ])) {\n this.translationMap[ lang ] = [];\n }\n\n this.translationMap[ lang ].push({ priority, translation });\n this.translationMap[ lang ].sort((a: ITranslationMap, b: ITranslationMap) => a.priority - b.priority);\n const merged: IKeyMap<string> = JSON.parse(localStorage.getItem(MOSA_MERGED_TRANSLATION(lang))|| '{}');\n\n for (const translationsData of this.translationMap[ lang ]) {\n const translations: IKeyMap<string> = translationsData.translation;\n if (translations != null) {\n Object.keys(translations).forEach((key: string) => void (merged[ key ] = translations[ key ]));\n }\n }\n\n let trans: boolean = true;\n let count: number = 0;\n while (trans) {\n count++;\n trans = false;\n if (count >= 10) {\n console.warn('Limit reached! Please check translation file! Last replaced values:');\n }\n Object.keys(merged).forEach((key: string) => {\n if (merged[ key ].startsWith('@:')) {\n merged[ key ] = merged[ merged[ key ].substring(2, merged[ key ].length) ];\n trans = count < 10;\n if (count > 10) {\n console.warn(merged[ key ]);\n }\n }\n });\n }\n localStorage.setItem(MOSA_MERGED_TRANSLATION(lang), JSON.stringify(merged));\n this.myTranslateService.reloadLang(lang);\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { firstValueFrom, Observable, of } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { getRandomString } from '../../utils/commons.util';\nimport { TranslateCollectorService } from './translate-collector.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AssetsI18nLoaderService {\n\n protected priority: number = 0;\n protected supportedLanguages: string[] = [];\n\n constructor(\n protected myHttpClient: HttpClient,\n protected myTranslateCollectorService: TranslateCollectorService,\n ) {\n }\n\n public async init(path?: string, libName?: string, priority?: number): Promise<void> {\n if (this.supportedLanguages.length > 0) {\n for (let i: number = 0; i < this.supportedLanguages.length; i++) {\n await firstValueFrom(this.loadTranslations(this.supportedLanguages[ i ], path, libName, priority));\n }\n return;\n }\n\n const res: { languages: string[] } | null = await firstValueFrom(this.myHttpClient.get<{ languages: string[] }>(`assets/i18n/supported-languages.json?v=${getRandomString()}`)).catch(() => null);\n if (!res) {\n console.error('Missing file -> assets/i18n/supported-languages.json');\n return;\n }\n\n this.supportedLanguages = res.languages;\n\n for (let i: number = 0; i < this.supportedLanguages.length; i++) {\n await firstValueFrom(this.loadTranslations(this.supportedLanguages[ i ], path, libName, priority));\n }\n }\n\n protected loadTranslations(lang: string, path?: string, libName?: string, priority?: number): Observable<Record<string, string> | null> {\n const filename: string = libName ? `${libName}-${lang}.json` : `${lang}.json`;\n return this.myHttpClient.get<Record<string, string>>(`${(path || './assets/i18n/') + filename}?v=${getRandomString()}`)\n .pipe(\n tap((response: Record<string, string>) =>\n this.myTranslateCollectorService.addTranslations(response, lang, priority || this.priority)),\n catchError(() => {\n console.error(`Missing file -> ${filename}`);\n return of(null);\n }),\n );\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ILogEvent } from '../models/logger/log-event.model';\nimport { LogType } from '../models/logger/log-type.model';\nimport { ILoggerConfig } from '../models/logger/logger-config.model';\nimport { ILoggerDefaultConfig } from '../models/logger/logger-default-config.model';\nimport { isNullOrUndefined } from '../utils/commons.util';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CoreLoggerService {\n\n public defaultConfig: ILoggerDefaultConfig | undefined;\n\n private readonly uiLogs$: BehaviorSubject<ILogEvent | null> = new BehaviorSubject<ILogEvent | null>(null);\n\n /**\n * Default constructor\n */\n constructor() {\n }\n\n public subUiLogs(): Observable<ILogEvent | null> {\n return this.uiLogs$.asObservable();\n }\n\n /**\n * Gets the error message from any type of object\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public getErrorMsg(err: any): string {\n let msg: string = 'Unknown Error';\n\n if (!err) {\n return msg;\n }\n\n if (err instanceof HttpErrorResponse) {\n if (typeof err.error !== 'string') {\n return `mosa.commons.errors.status[${err.status}].message`;\n }\n\n return err.error;\n }\n\n if (typeof err === 'string') {\n msg = err;\n } else if (err.msg) {\n msg = err.msg;\n } else if (err.error?.msg) {\n msg = err.error.msg;\n } else if (err.error?.message) {\n msg = err.error.message;\n } else if (err.error?.errors?.[ 0 ]?.message) {\n msg = err.error.errors[ 0 ].message;\n } else if (err.message) {\n msg = err.message;\n } else if (err.Message) {\n msg = err.Message;\n }\n\n if (typeof err.error === 'string') {\n msg = err.error;\n }\n\n return msg;\n }\n\n /**\n * Get the title to be shown in logger toast\n * @param err\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public getErrorTitle(err: any): string {\n let title: string = 'mosa.commons.logs.error.label';\n if (err?.label) {\n title = err.label;\n } else if (err?.title) {\n title = err.title;\n } else if (err?.error?.label) {\n title = err.error.label;\n } else if (err?.error?.title) {\n title = err.error.title;\n }\n return title;\n }\n\n /**\n * Logs an error to the user\n * @param data\n * @param showUser\n * @param config\n */\n public logError(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.msg = this.getErrorMsg(config.msg);\n\n if (!config.title) {\n config.title = this.getErrorTitle(config.msg);\n }\n\n config.className = 'snackbar-error';\n\n this.show(config, 'error');\n }\n\n /**\n * Logs a success message to the user\n * @param data\n * @param config\n */\n public logSuccess(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.className = 'snackbar-success';\n\n this.show(config, 'success');\n }\n\n /**\n * Logs a warning to the user\n * @param data\n * @param showUser\n * @param config\n */\n public logWarning(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.className = 'snackbar-warning';\n\n this.show(config, 'warning');\n }\n\n /**\n * Logs an info to the user\n * @param data\n * @param config\n */\n public logInfo(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.className = 'snackbar-info';\n\n this.show(config, 'info');\n }\n\n /**\n * Logs any kind of message to the user\n * @param data\n * @param config\n */\n public log(config: ILoggerConfig): void {\n config = this.serializeConfig(config);\n config.className = 'snackbar-default';\n\n this.show(config, 'default');\n }\n\n /**\n * Show the log\n * @requires @mosa-ng/material\n * @param data\n * @param type\n * @param config\n */\n public show(config: ILoggerConfig, type: LogType): void {\n this.uiLogs$.next({ title: config.title, msg: config.msg, type, config });\n }\n\n /**\n * Serializes empty values, so no error is being returned\n * @param config\n * @private\n */\n private serializeConfig(config: ILoggerConfig | undefined): ILoggerConfig {\n // Check if user has default config\n if (!this.defaultConfig) {\n this.defaultConfig = {\n debug: true,\n };\n }\n\n if (!config) {\n // Get user default config\n config = {\n showDismiss: this.defaultConfig.showDismiss,\n closeOnClick: isNullOrUndefined(this.defaultConfig.closeOnClick) ? true : this.defaultConfig.closeOnClick,\n className: this.defaultConfig.className,\n duration: this.defaultConfig.duration || 4,\n };\n }\n\n // Serialize configuration\n config.duration = CoreLoggerService.getValue<number>(config.duration!, this.defaultConfig.duration!, 4);\n config.className = CoreLoggerService.getValue<string>(config.className!, this.defaultConfig.className!, '');\n config.showDismiss = CoreLoggerService.getValue<boolean>(config.showDismiss!, this.defaultConfig.showDismiss!, false);\n config.closeOnClick = CoreLoggerService.getValue<boolean>(config.closeOnClick!, this.defaultConfig.closeOnClick!, true);\n\n return config;\n }\n\n /**\n * Gets a value which is not undefined or null\n * @param val\n * @param val1\n * @param def\n * @private\n */\n private static getValue<T>(val: T, val1: T, def: T): T {\n if (isNullOrUndefined(val)) {\n if (isNullOrUndefined(val1)) {\n return def;\n }\n return val1;\n }\n return val;\n }\n\n}\n","import { HttpClient, HttpErrorResponse, HttpEvent, HttpHeaders, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { firstValueFrom, Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { IApiOptions } from '../models/api-options.model';\nimport { ITokenSettings } from '../models/token-settings.model';\nimport { CoreLoggerService } from './core-logger.service';\nimport { isNullOrEmpty } from '../utils/commons.util';\n\nexport const LOCAL_STORAGE_TOKEN_KEY = 'tokenSettings';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiService {\n\n constructor(\n private readonly myCoreLoggerService: CoreLoggerService,\n private readonly myHttpClient: HttpClient,\n ) {\n }\n\n /**\n * Sets the token\n * @param tokenSettings\n */\n public setToken(tokenSettings: ITokenSettings): void {\n window.localStorage.setItem(LOCAL_STORAGE_TOKEN_KEY, JSON.stringify(tokenSettings));\n }\n\n /**\n * Gets token\n */\n public getToken(): ITokenSettings | null {\n const tokenSettings: string | null = window.localStorage.getItem(LOCAL_STORAGE_TOKEN_KEY);\n if (isNullOrEmpty(tokenSettings)) {\n return null;\n }\n\n return JSON.parse(tokenSettings!);\n }\n\n /**\n * Deletes token\n */\n public deleteToken(): void {\n window.localStorage.removeItem(LOCAL_STORAGE_TOKEN_KEY);\n }\n\n /**\n * Makes an http get call\n * @param url\n * @param headers\n * @param options\n */\n public get<T>(url: string, headers?: HttpHeaders, options?: IApiOptions): Observable<T> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.get<T>(url, { ...options.httpOptions as any, headers })\n .pipe(\n map((response: HttpEvent<T>) => this.handleResponse(response)),\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Makes an async http get call, which also includes the response headers\n * @param url\n * @param headers\n * @param options\n */\n public async getWithHeadersAsync<T>(url: string, headers?: HttpHeaders, options?: IApiOptions): Promise<HttpEvent<T>> {\n return firstValueFrom(this.getWithHeaders<T>(url, headers, options));\n }\n\n /**\n * Makes an http get call, which also includes the response headers\n * @param url\n * @param headers\n * @param options\n */\n public getWithHeaders<T>(url: string, headers?: HttpHeaders, options?: IApiOptions): Observable<HttpEvent<T>> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.get<T>(url, { ...options.httpOptions as any, headers, observe: 'response' })\n .pipe(\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Makes an http patch call (For partial updates)\n * @param url\n * @param data\n * @param headers\n * @param options\n */\n public patch<T, T1>(url: string, data?: T, headers?: HttpHeaders, options?: IApiOptions): Observable<T1> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.patch<T1>(url, data, { ...options.httpOptions as any, headers })\n .pipe(\n map((response: HttpEvent<T1>) => this.handleResponse(response)),\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Makes an http put call\n * @param url\n * @param data\n * @param headers\n * @param options\n */\n public put<T, T1>(url: string, data?: T, headers?: HttpHeaders, options?: IApiOptions): Observable<T1> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.put<T1>(url, data, { ...options.httpOptions as any, headers })\n .pipe(\n map((response: HttpEvent<T1>) => this.handleResponse(response)),\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Makes an http post call\n * @param url\n * @param data\n * @param headers\n * @param options\n */\n public post<T, T1>(url: string, data?: T, headers?: HttpHeaders, options?: IApiOptions): Observable<T1> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.myHttpClient.post<T1>(url, data, { ...options.httpOptions as any, headers })\n .pipe(\n map((response: HttpEvent<T1>) => this.handleResponse(response)),\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * makes an http delete call\n * @param url\n * @param headers\n * @param options\n * @returns Observable\n */\n public delete<T>(url: string, headers?: HttpHeaders, options?: IApiOptions): Observable<T> {\n options = ApiService.serializeOptions(options);\n headers = this.getHeaders(headers, options);\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n return this.myHttpClient.delete<T>(url, { ...options.httpOptions as {}, headers })\n .pipe(\n catchError((err: HttpErrorResponse): Observable<never> => this.handleError(err, options)),\n );\n }\n\n /**\n * Appends a script to the html body\n * @param path\n * @param attributes\n * @param onLoad\n */\n public loadExternalScript(path: string, attributes?: { key: string, value: string }[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onLoad?: ((this: GlobalEventHandlers, ev: Event) => any)): void {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = path;\n script.async = true;\n\n if (onLoad) {\n script.onload = onLoad;\n }\n\n if (attributes) {\n for (const attribute of attributes) {\n script.setAttribute(attribute.key, attribute.value);\n }\n }\n\n document.body.append(script);\n }\n\n private handleError(err: HttpErrorResponse, options: IApiOptions): Observable<never> {\n if (!options?.skipErrorHandling) {\n this.myCoreLoggerService.logError({ msg: err });\n }\n\n return throwError(() => err);\n }\n\n private handleResponse<T>(response: HttpEvent<T>): T {\n if (response instanceof HttpResponse) {\n return response.body as T;\n }\n return response as T;\n }\n\n private getHeaders(headers?: HttpHeaders, options?: IApiOptions): HttpHeaders {\n if (!headers) {\n headers = new HttpHeaders();\n }\n\n if (!options?.skipContentType) {\n if (!headers.get('Content-Type')) {\n headers = headers.set('Content-Type', 'application/json');\n }\n }\n\n const tokenSettings: ITokenSettings | null = this.getToken();\n if (!options?.skipAuth && tokenSettings) {\n headers = headers.set('Authorization', `${tokenSettings.tokenType} ${tokenSettings.token}`);\n }\n return headers;\n }\n\n private static serializeOptions(options?: IApiOptions): IApiOptions {\n if (!options) {\n options = {};\n }\n\n if (!options.httpOptions) {\n options.httpOptions = {};\n }\n\n return options;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Observable, Observer, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MosaSocketService {\n\n private subject: Subject<MessageEvent> | undefined;\n\n constructor() {\n }\n\n public connect(url: string): Subject<MessageEvent> {\n if (!this.subject) {\n this.subject = this.create(url);\n }\n return this.subject;\n }\n\n public send(data: MessageEvent): void {\n this.subject?.next(data);\n }\n\n private create(url: string): Subject<MessageEvent> {\n const ws = new WebSocket(url);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const observable = new Observable((obs: Observer<MessageEvent>): any => {\n ws.onmessage = obs.next.bind(obs);\n ws.onerror = obs.error.bind(obs);\n ws.onclose = obs.complete.bind(obs);\n return ws.close.bind(ws);\n });\n const observer = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n next: (data: any): void => {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify(data));\n }\n },\n };\n return Subject.create(observer, observable);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Observer } from 'rxjs';\nimport { MOSA_FALLBACK_TRANSLATION, MOSA_MERGED_TRANSLATION } from '../../constants/local-storage.constant';\nimport { IKeyMap } from '../../models/key-map.model';\nimport { isNullOrEmpty, tryJsonParse } from '../../utils/commons.util';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomTranslateLoaderService {\n\n public getTranslation(lang: string): Observable<IKeyMap<string> | null> {\n return new Observable<IKeyMap<string> | null>((observer: Observer<IKeyMap<string> | null>) => {\n const item: string | null = localStorage.getItem(MOSA_MERGED_TRANSLATION(lang));\n const responseObj: IKeyMap<string> | null = tryJsonParse(item, () => this.loadFallbackLanguage());\n\n observer.next(responseObj);\n observer.complete();\n });\n }\n\n private loadFallbackLanguage(): IKeyMap<string> {\n const defaultTranslation: string | null = localStorage.getItem(MOSA_FALLBACK_TRANSLATION);\n return isNullOrEmpty(defaultTranslation) ? {} : JSON.parse(defaultTranslation!);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nexport interface ICanComponentDeactivate {\n canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CanDeactivateGuard implements CanDeactivate<ICanComponentDeactivate> {\n\n public canDeactivate(component: ICanComponentDeactivate): boolean {\n return component.canDeactivate ? component.canDeactivate() as boolean : true;\n }\n\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IDictionaryItem } from '../models/dictionary-item.model';\nimport { IKeyMap } from '../models/key-map.model';\n\nexport class Dictionary<Key, Value> {\n\n private readonly dictionaryItems$: BehaviorSubject<IDictionaryItem<Key, Value>[]>;\n\n /**\n * Default constructor.\n * @param data Requires an array of IDictionaryItem with a key and a value\n */\n constructor(...data: IDictionaryItem<Key, Value>[]) {\n this.dictionaryItems$ = new BehaviorSubject<IDictionaryItem<Key, Value>[]>(data);\n }\n\n /**\n * Observable to subscribe to dictionary changes\n */\n public valueChanges(): Observable<IDictionaryItem<Key, Value>[]> {\n return this.dictionaryItems$.asObservable();\n }\n\n /**\n * Observable to subscribe to dictionary as object changes\n */\n public objectArray(): Observable<IKeyMap<Value>> {\n return this.dictionaryItems$.asObservable()\n .pipe(\n map((items: IDictionaryItem<Key, Value>[]): IKeyMap<Value> => this.toObject(items)),\n );\n }\n\n /**\n * Gets the items of the dictionary\n * @returns dictionary items\n */\n public get items(): IDictionaryItem<Key, Value>[] {\n return this.dictionaryItems$.value;\n }\n\n /**\n * Gets a dictionary item by key\n * @param key\n * @returns single dictionary item\n */\n public get(key: Key): IDictionaryItem<Key, Value> | undefined {\n return this.dictionaryItems$.value.find((item: IDictionaryItem<Key, Value>): boolean => item.key === key);\n }\n\n /**\n * Checks if dictionary contains item\n * @param key\n */\n public contains(key: Key): boolean {\n return this.get(key) != null;\n }\n\n /**\n * Adds a dictionary item\n * @param key\n * @param value\n */\n public add(key: Key, value: Value): void {\n const dictionaryItems: IDictionaryItem<Key, Value>[] = [ ...this.dictionaryItems$.value ];\n dictionaryItems.push({ key, value });\n this.updateItems(dictionaryItems);\n }\n\n /**\n * Updates a dictionary item\n * @param data\n * @param index\n */\n public update(data: IDictionaryItem<Key, Value>, index?: number): void {\n const dictionaryItems: IDictionaryItem<Key, Value>[] = [ ...this.dictionaryItems$.value ];\n if (!index) {\n index = this.getIndex(data.key);\n }\n\n if (index !== -1) {\n dictionaryItems[ index ] = data;\n } else {\n console.warn('Dictionary: Index not found');\n }\n this.updateItems(dictionaryItems);\n }\n\n /**\n * Gets an index with a specific key\n * @param key\n */\n public getIndex(key: Key): number {\n return this.dictionaryItems$.value.findIndex((val: IDictionaryItem<Key, Value>): boolean => val.key === key);\n }\n\n /**\n * Removes an item from the dictionary\n * @param value\n * @param index\n */\n public remove(value: Key, index?: number): void {\n const dictionaryItems: IDictionaryItem<Key, Value>[] = [ ...this.dictionaryItems$.value ];\n if (!index) {\n index = this.getIndex(value);\n }\n\n if (index !== -1) {\n dictionaryItems.splice(index, 1);\n } else {\n console.warn('Dictionary: Index not found');\n }\n this.updateItems(dictionaryItems);\n }\n\n /**\n * Private function to cast array to an object\n * @param items\n * @private\n */\n private toObject(items: IDictionaryItem<Key, Value>[]): IKeyMap<Value> {\n const obj: IKeyMap<Value> = {};\n for (const item of items) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n obj[ item.key as any ] = item.value;\n }\n return obj;\n }\n\n /**\n * Private function to update dictionary items\n * @param items\n * @private\n */\n private updateItems(items: IDictionaryItem<Key, Value>[]): void {\n this.dictionaryItems$.next(items);\n }\n\n}\n","/**\n * Cast any type\n * @param data to be casted\n * @returns casted data\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any,max-classes-per-file\nexport function cast<T>(data: any): T {\n return data as T;\n}\n\nexport class StringExtensions implements IStringExtensions {\n public getPart(maxChars: number, appendDot?: boolean): string {\n let newStr = cast<string>(this).replace(/\\\\n/g, ' ');\n if (newStr.length > maxChars) {\n newStr = newStr.substring(0, maxChars);\n if (appendDot && newStr.length > maxChars - 3) {\n newStr += '...';\n }\n }\n return newStr;\n }\n\n public fromJSON<T>(): T | null {\n let str: string = cast<string>(this);\n if (typeof this !== 'string') {\n str = JSON.stringify(str);\n }\n\n try {\n str = JSON.parse(str);\n } catch {\n return null;\n }\n\n if (typeof str === 'object') {\n return str as T;\n }\n\n return null;\n }\n\n public toCSSClass(): string {\n return cast<string>(this)?.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase();\n }\n\n public toUTC(): string {\n return `${cast<string>(this)}Z`;\n }\n}\n\nexport class ArrayExtensions implements IArrayExtensions {\n public hasChanges<T>(data: T[]): boolean {\n return JSON.stringify(this) !== JSON.stringify(data);\n }\n\n public replaceRange<T>(data: T[], start: number, end: number): T[] {\n const array: T[] = cast<T[]>(this);\n let replaceDataIndex: number = 0;\n for (let i: number = start; i < end; i++) {\n if (!array[ i ] && !data[ replaceDataIndex ]) {\n array.splice(i, 1);\n continue;\n }\n\n array[ i ] = data[ replaceDataIndex ];\n replaceDataIndex++;\n }\n return array;\n }\n}\n\nexport class NumberExtensions implements INumberExtensions {\n public between(start: number, end: number): boolean {\n const num: number = cast<number>(this);\n return num >= start && num <= end;\n }\n}\n\n/**\n * @interface StringExtensions\n */\nexport interface IStringExtensions {\n /**\n * Gets a part of a string\n * @param maxChars maximum amount of chars\n * @param appendDot append three dots at the end\n * @returns splitted string\n */\n getPart(maxChars: number, appendDot?: boolean): string;\n\n /**\n * Converts a string from json\n * @returns object of expected type\n */\n fromJSON<T>(): T | null;\n\n /**\n * Converts a string to a css class\n * @returns converted kebab case css class\n */\n toCSSClass(): string;\n\n /**\n * Converts a datetime string to utc format\n */\n toUTC(): string;\n}\n\nexport interface IArrayExtensions {\n /**\n * Checks if array has changes\n * @param data array passed\n * @deprecated learn how to program\n */\n hasChanges: <T>(data: T[]) => boolean;\n /**\n * Replaces a specific element range in an array\n * @param data\n */\n replaceRange: <T>(replaceData: T[], start: number, end: number) => T[];\n}\n\nexport interface INumberExtensions {\n /**\n * checks if a number in a range\n * @param start of range\n * @param end of range\n */\n between(start: number, end: number): boolean;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/naming-convention,id-blacklist,@typescript-eslint/no-empty-object-type\n interface String extends IStringExtensions {\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/no-empty-object-type,@typescript-eslint/no-unused-vars\n interface Array<T> extends IArrayExtensions {\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention,id-blacklist,@typescript-eslint/no-empty-object-type\n interface Number extends INumberExtensions {\n }\n}\n\nexport class Prototypes {\n\n /**\n * Initialize prototypes\n */\n public static init(): void {\n const stringExtensions = new StringExtensions();\n const arrayExtensions = new ArrayExtensions();\n const numberExtensions = new NumberExtensions();\n\n String.prototype.getPart = stringExtensions.getPart;\n String.prototype.fromJSON = stringExtensions.fromJSON;\n String.prototype.toCSSClass = stringExtensions.toCSSClass;\n String.prototype.toUTC = stringExtensions.toUTC;\n\n Array.prototype.hasChanges = arrayExtensions.hasChanges;\n Array.prototype.replaceRange = arrayExtensions.replaceRange;\n\n Number.prototype.between = numberExtensions.between;\n }\n}\n","import { ISieveFilter } from '../models/sieve/sieve-filter.model';\nimport { SieveOperator } from '../models/sieve/sieve-operator.model';\nimport { ISieveOptions } from '../models/sieve/sieve-options.model';\nimport { ISieveSort } from '../models/sieve/sieve-sort.model';\n\nexport class Sieve {\n\n private readonly options: ISieveOptions;\n\n constructor(options: ISieveOptions) {\n this.options = options;\n this.options.baseUrl = options.baseUrl || '';\n this.options.filters = options.filters || [];\n this.options.sorts = options.sorts || [];\n }\n\n /**\n * public getter to get page size\n */\n public get pageSize(): number {\n return this.options.pageSize || 10;\n }\n\n /**\n * Setter to set page size\n */\n public set pageSize(pageSize: number) {\n this.options.pageSize = pageSize;\n }\n\n /**\n * public getter to get page\n */\n public get page(): number {\n return this.options.page || 0;\n }\n\n /**\n * Setter to set page\n */\n public set page(page: number) {\n this.options.page = page;\n }\n\n /**\n * public getter to get filters\n */\n public get filters(): ISieveFilter[] | undefined {\n return this.options.filters;\n }\n\n /**\n * Setter to set filters\n */\n public set filters(filters: ISieveFilter[]) {\n this.options.filters = filters;\n }\n\n /**\n * public getter to get sorts\n */\n public get sorts(): ISieveSort[] | undefined {\n return this.options.sorts;\n }\n\n /**\n * Setter to set sorts\n */\n public set sorts(sorts: ISieveSort[]) {\n this.options.sorts = sorts;\n }\n\n /**\n * method to add a sort option\n * @param name of the item to sort\n * @param desc sort descending\n */\n public addSort(name: string, desc?: boolean): void {\n this.options.sorts?.push({\n name,\n desc,\n });\n }\n\n /**\n * method to add a filter option\n * @param key of the item\n * @param operator { SieveOperator }\n * @param value filtered value\n */\n public addFilter(key: string, operator: SieveOperator, value: string): void {\n this.options.filters?.push({\n key,\n operator,\n value,\n });\n }\n\n /**\n * Getter for base url\n */\n public get baseUrl(): string | undefined {\n return this.options.baseUrl;\n }\n\n /**\n * Setter for base url\n * @param url\n */\n public set baseUrl(url: string) {\n this.options.baseUrl = url;\n }\n\n /**\n * Convert to queried string\n */\n public getUrl(): string {\n return `${ this.options.baseUrl }${ this.toQuery() }`;\n }\n\n /**\n * to Query\n * @private converts options to actual query\n */\n private toQuery(): string {\n let query = '?';\n\n if (this.page) {\n query += `page=${ this.page }`;\n }\n\n if (this.pageSize) {\n query += `&pageSize=${ this.pageSize }`;\n }\n\n if (this.filters?.length) {\n let filterQuery: string = '&filters=';\n\n for (const filter of this.filters) {\n if (filter.value) {\n filterQuery += `${ filter.key }${ filter.operator }${ filter.value },`;\n }\n }\n\n if (filterQuery !== '&filters=') {\n filterQuery = filterQuery.slice(0, -1);\n query += filterQuery;\n }\n }\n\n if (this.sorts?.length) {\n let sortQuery: string = '&sorts=';\n\n for (const sort of this.sorts) {\n sortQuery += `${ sort.desc ? '-' : '+' }${ sort.name },`;\n }\n\n sortQuery = sortQuery.slice(0, -1);\n query += sortQuery;\n }\n\n if (query.startsWith('&')) {\n query = query.slice(1);\n }\n\n return query;\n }\n\n}\n","export enum Theme {\n light,\n dark,\n}\n","export enum ContentPosition {\n top = 'top',\n topLeft = 'top-left',\n topRight = 'top-right',\n bottom = 'bottom',\n bottomLeft = 'bottom-left',\n bottomRight = 'bottom-right',\n center = 'center',\n centerLeft = 'center-left',\n centerRight = 'center-right',\n}\n","export enum Browser {\n chrome,\n firefox,\n internetExplorer,\n opera,\n edge,\n safari,\n other,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Dictionary } from '../utils/dictionary.util';\n\n@Pipe({ name: 'dictionaryItem' })\nexport class DictionaryItemPipe implements PipeTransform {\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(key: any, dictionary: Dictionary<any, any>): string {\n return dictionary.get(key)?.value;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { some } from '../utils/commons.util';\n\n@Pipe({ name: 'filter' })\nexport class FilterPipe implements PipeTransform {\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform<T>(array: T[] | undefined, searchValue: any, searchKey?: keyof T): T[] {\n // Return if array is empty or null\n if (!array?.length) {\n return [];\n }\n\n const foundItems: T[] = array.filter((v: T): boolean => some(v, searchValue, searchKey));\n if (!foundItems.length) {\n return [];\n }\n\n // Return whole item\n return foundItems;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { some } from '../utils/commons.util';\n\n@Pipe({ name: 'find' })\nexport class FindPipe implements PipeTransform {\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform<T>(array: T[] | undefined, searchValue: any, searchKey?: keyof T): T | null {\n // Return if array is empty or null\n if (!array?.length) {\n return null;\n }\n\n const foundItem: T | undefined = array.find((v: T): boolean => some(v, searchValue, searchKey));\n if (!foundItem) {\n return null;\n }\n\n // Return whole item\n return foundItem;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'join' })\nexport class JoinPipe implements PipeTransform {\n\n /**\n * Join array by separator\n * @param array\n * @param returnField\n * @param separator\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(array: any[], returnField: any, separator: string = ', '): string {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return array.map((val: any): string => returnField ? val[ returnField ] : val).join(separator);\n }\n\n}\n","import { DatePipe } from '@angular/common';\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Pipe({ name: 'mosaDate' })\nexport class MosaDatePipe implements PipeTransform {\n\n private readonly store$: BehaviorSubject<number> = new BehaviorSubject<number>(new Date().getTime());\n\n private templates: Record<string, string> = {};\n\n private readonly myTranslateService: TranslateService = inject(TranslateService);\n private readonly myDatePipe: DatePipe = inject(DatePipe);\n\n constructor() {\n this.updateTemplates();\n setInterval((): void => this.store$.next(new Date().getTime()), 10);\n this.myTranslateService.onLangChange.subscribe((): void => {\n this.updateTemplates();\n this.store$.next(new Date().getTime());\n });\n }\n\n public transform(date: string | Date | undefined, mode: 'full' | 'timeSince' | 'date' = 'timeSince', options?: { withPrefix?: boolean, withSuffix?: boolean }): Observable<string> {\n return this.store$.pipe(map((currentDate: number): string => this.calcDate(currentDate, date, mode, options)));\n }\n\n private calcDate(currentTimestamp: number, date: string | Date | undefined, mode: 'full' | 'timeSince' | 'date', options?: { withPrefix?: boolean, withSuffix?: boolean }): string {\n if (!date) {\n return '';\n }\n\n let parsed: Date;\n if (date instanceof Date) {\n parsed = new Date(date.toString());\n } else {\n parsed = new Date(date);\n }\n\n if (!currentTimestamp) {\n currentTimestamp = new Date().getTime();\n }\n const currentDate = new Date(currentTimestamp);\n const parsedTimestamp: number = parsed.getTime();\n\n const convertedDate: string | null = this.myDatePipe.transform(parsed, 'dd. MMM. yyyy hh:mm aaa');\n if (mode === 'full' || mode === 'timeSince') {\n const seconds: number = Math.abs(((currentTimestamp - parsedTimestamp) * .001) >> 0);\n const minutes: number = seconds / 60;\n const hours: number = minutes / 60;\n const days: number = hours / 24;\n const years: number = days / 365;\n\n const yearDifference = (currentDate.getFullYear() - parsed.getFullYear()) * 12;\n const monthDifference = currentDate.getMonth() - parsed.getMonth();\n\n let timeSince: string = '';\n if (parsedTimestamp > currentTimestamp) {\n timeSince = (options?.withPrefix ? this.templates[ 'prefixFuture' ] : '') + (\n seconds < 60 && this.template('seconds', seconds) ||\n seconds < 120 && this.template('minute', 1) ||\n minutes < 60 && this.template('minutes', minutes) ||\n minutes < 120 && this.template('hour', 1) ||\n hours < 24 && this.template('hours', hours) ||\n hours < 42 && this.template('day', 1) ||\n days < 30 && this.template('days', days) ||\n days < 45 && this.template('month', 1) ||\n days < 365 && this.template('months', yearDifference + monthDifference) ||\n years < 1.5 && this.template('year', 1) ||\n this.template('years', years)\n ) + (options?.withSuffix ? this.templates[ 'suffixFuture' ] : '');\n } else {\n timeSince = (options?.withPrefix ? this.templates[ 'prefixPast' ] : '') + (\n seconds < 60 && this.template('seconds', seconds) ||\n seconds < 120 && this.template('minute', 1) ||\n minutes < 60 && this.template('minutes', minutes) ||\n minutes < 120 && this.template('hour', 1) ||\n hours < 24 && this.template('hours', hours) ||\n hours < 42 && this.template('day', 1) ||\n days < 30 && this.template('days', days) ||\n days < 45 && this.template('month', 1) ||\n days < 365 && this.template('months', yearDifference + monthDifference) ||\n years < 1.5 && this.template('year', 1) ||\n this.template('years', years)\n ) + (options?.withSuffix ? this.templates[ 'suffixPast' ] : '');\n }\n\n if (mode === 'timeSince') {\n return timeSince;\n }\n\n if (mode === 'full') {\n return `${convertedDate} (${timeSince})`;\n }\n }\n\n return convertedDate || '';\n }\n\n private template(key: string, val: number): string {\n return this.templates[ key ]?.replace(/%d/i, String(Math.abs(Math.round(val))));\n }\n\n private updateTemplates(): void {\n this.templates = {\n prefixPast: this.myTranslateService.instant('mosa.pipes.timeSince.prefix.past'),\n suffixPast: this.myTranslateService.instant('mosa.pipes.timeSince.suffix.past'),\n prefixFuture: this.myTranslateService.instant('mosa.pipes.timeSince.prefix.future'),\n suffixFuture: this.myTranslateService.instant('mosa.pipes.timeSince.suffix.future'),\n seconds: this.myTranslateService.instant('mosa.pipes.timeSince.seconds'),\n minute: this.myTranslateService.instant('mosa.pipes.timeSince.minute'),\n minutes: this.myTranslateService.instant('mosa.pipes.timeSince.minutes'),\n hour: this.myTranslateService.instant('mosa.pipes.timeSince.hour'),\n hours: this.myTranslateService.instant('mosa.pipes.timeSince.hours'),\n day: this.myTranslateService.instant('mosa.pipes.timeSince.day'),\n days: this.myTranslateService.instant('mosa.pipes.timeSince.days'),\n month: this.myTranslateService.instant('mosa.pipes.timeSince.month'),\n months: this.myTranslateService.instant('mosa.pipes.timeSince.months'),\n year: this.myTranslateService.instant('mosa.pipes.timeSince.year'),\n years: this.myTranslateService.instant('mosa.pipes.timeSince.years'),\n };\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { MosaDurationFormat } from '../models/mosa-duration.model';\n\n@Pipe({ name: 'mosaDuration' })\nexport class MosaDurationPipe implements PipeTransform {\n\n private readonly store$: BehaviorSubject<number> = new BehaviorSubject<number>(new Date().getTime());\n private readonly interval: NodeJS.Timeout;\n\n constructor(\n private readonly myTranslateService: TranslateService,\n ) {\n this.interval = setInterval(() => this.store$.next(new Date().getTime()), 1000);\n this.myTranslateService.onLangChange.subscribe((): void => this.store$.next(new Date().getTime()));\n }\n\n /**\n * Converts a timestamp to a duration in the given format\n * @param millis\n * @param format\n * @returns\n * auto: 15000 -> 15 seconds\n * seconds: 15000 -> 15 seconds\n * minutes: 60000 -> 1 minute\n * hours: 7200000 -> 2 hours\n * days: 172800000 -> 2 days\n */\n public transform(millis: number | undefined, format: MosaDurationFormat = 'auto'): Observable<string> {\n return this.store$.pipe(\n map((currentDate: number): string => {\n if (!millis) {\n clearInterval(this.interval);\n return '';\n }\n\n if (millis - currentDate < 0) {\n clearInterval(this.interval);\n return '';\n }\n\n return this.calcDuration(currentDate, millis, format);\n }),\n );\n }\n\n\n private getTranslation(num: number, format: MosaDurationFormat): string {\n if (num === 1) {\n return `${num.toFixed(0)} ${this.myTranslateService.instant(`mosa.commons.dateTime[${format}].label`)}`;\n }\n return `${num.toFixed(0)} ${this.myTranslateService.instant(`mosa.commons.dateTime[${format}].plural.label`)}`;\n }\n\n\n private calcDuration(currentDate: number, millis: number, format: MosaDurationFormat): string {\n millis = millis - currentDate;\n\n const seconds: number = millis / 1000;\n if (format === 'seconds') {\n return this.getTranslation(seconds, 'seconds');\n }\n\n const minutes: number = seconds / 60;\n if (format === 'minutes') {\n return this.getTranslation(minutes, 'minutes');\n }\n\n const hours: number = minutes / 60;\n if (format === 'hours') {\n return this.getTranslation(hours, 'hours');\n }\n\n const days: number = hours / 24;\n if (format === 'days') {\n return this.getTranslation(days, 'days');\n }\n\n if (format === 'auto') {\n if (seconds < 60) {\n return this.getTranslation(seconds, 'seconds');\n }\n\n if (minutes < 60) {\n return this.getTranslation(minutes, 'minutes');\n }\n\n if (hours < 24) {\n return this.getTranslation(hours, 'hours');\n }\n\n return this.getTranslation(days, 'days');\n }\n\n return '';\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { AssetsI18nLoaderService } from './services/translation/assets-i18n-loader.service';\n\n/*\n * Public API Surface of core\n */\n\n/**\n * Services\n */\nexport * from './services/api.service';\nexport * from './services/mosa-socket.service';\nexport * from './services/core-logger.service';\n\nexport * from './services/translation/translate-collector.service';\nexport * from './services/translation/custom-translate-loader.service';\nexport * from './services/translation/assets-i18n-loader.service';\n\n/**\n * Guards\n */\nexport * from './services/guards/can-deactivate.guard';\n\n/**\n * Models\n */\nexport * from './models/dictionary-item.model';\nexport * from './models/api-options.model';\nexport * from './models/mosa-duration.model';\nexport * from './models/token-settings.model';\nexport * from './models/transform-matrix.model';\nexport * from './models/key-map.model';\nexport * from './models/item.model';\nexport * from './models/size.model';\n\nexport * from './models/sieve/sieve-response.model';\nexport * from './models/sieve/sieve-sort.model';\nexport * from './models/sieve/sieve-filter.model';\nexport * from './models/sieve/sieve-operator.model';\nexport * from './models/sieve/sieve-options.model';\n\nexport * from './models/logger/logger-config.model';\nexport * from './models/logger/log.model';\nexport * from './models/logger/log-event.model';\nexport * from './models/logger/log-message-data.model';\nexport * from './models/logger/logger-base-config.model';\nexport * from './models/logger/logger-default-config.model';\nexport * from './models/logger/log-type.model';\n\nexport * from './models/types/form.type';\n\n/**\n * Utils\n */\nexport * from './utils/commons.util';\nexport * from './utils/dictionary.util';\nexport * from './utils/promise.util';\nexport * from './utils/prototypes.util';\nexport * from './utils/sieve.util';\n\n/**\n * Enums\n */\nexport * from './enums/theme.enum';\nexport * from './enums/content-position.enum';\nexport * from './enums/browser.enum';\nexport * from './enums/i18n-supported.enum';\n\n/**\n * Constants\n */\nexport * from './constants/local-storage.constant';\n\n/**\n * Pipes\n */\nexport * from './pipes/dictionary-item.pipe';\nexport * from './pipes/filter.pipe';\nexport * from './pipes/find.pipe';\nexport * from './pipes/join.pipe';\nexport * from './pipes/mosa-date.pipe';\nexport * from './pipes/mosa-duration.pipe';\n\nfunction initI18n(i18n: AssetsI18nLoaderService): Promise<void> {\n return i18n.init(undefined, undefined, 1);\n}\n\nfunction initI18nCore(i18n: AssetsI18nLoaderService): Promise<void> {\n return i18n.init(undefined, 'mosa');\n}\n\nexport const provideMosaCore: () => EnvironmentProviders = () => makeEnvironmentProviders([\n provideAppInitializer(() => initI18n(inject(AssetsI18nLoaderService))),\n provideAppInitializer(() => initI18nCore(inject(AssetsI18nLoaderService))),\n]);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.TranslateCollectorService","i1.CoreLoggerService","i2"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -5,7 +5,6 @@ import { Observable, Subject } from 'rxjs';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
6
  import { CanDeactivate } from '@angular/router';
7
7
  import { AbstractControl } from '@angular/forms';
8
- import { DatePipe } from '@angular/common';
9
8
 
10
9
  type ApiResponseTypes = 'json' | 'blob' | 'text' | 'arraybuffer';
11
10
  type ApiObserveTypes = 'body' | 'response' | 'events';
@@ -61,13 +60,13 @@ interface ILoggerDefaultConfig extends ILoggerBaseConfig {
61
60
  }
62
61
 
63
62
  declare class CoreLoggerService {
64
- defaultConfig: ILoggerDefaultConfig;
63
+ defaultConfig: ILoggerDefaultConfig | undefined;
65
64
  private readonly uiLogs$;
66
65
  /**
67
66
  * Default constructor
68
67
  */
69
68
  constructor();
70
- subUiLogs(): Observable<ILogEvent>;
69
+ subUiLogs(): Observable<ILogEvent | null>;
71
70
  /**
72
71
  * Gets the error message from any type of object
73
72
  */
@@ -140,22 +139,6 @@ declare class ApiService {
140
139
  private readonly myCoreLoggerService;
141
140
  private readonly myHttpClient;
142
141
  constructor(myCoreLoggerService: CoreLoggerService, myHttpClient: HttpClient);
143
- /**
144
- * Gets an access token
145
- * @deprecated use getToken()
146
- */
147
- getAccessToken(): string;
148
- /**
149
- * Sets an access token
150
- * @param token
151
- * @deprecated use setToken()
152
- */
153
- setAccessToken(token: string): void;
154
- /**
155
- * Removes an access token from local storage
156
- * @deprecated use deleteAccessToken()
157
- */
158
- removeAccessToken(): void;
159
142
  /**
160
143
  * Sets the token
161
144
  * @param tokenSettings
@@ -164,7 +147,7 @@ declare class ApiService {
164
147
  /**
165
148
  * Gets token
166
149
  */
167
- getToken(): ITokenSettings;
150
+ getToken(): ITokenSettings | null;
168
151
  /**
169
152
  * Deletes token
170
153
  */
@@ -266,7 +249,7 @@ declare class TranslateCollectorService {
266
249
  }
267
250
 
268
251
  declare class CustomTranslateLoaderService {
269
- getTranslation(lang: string): Observable<IKeyMap<string>>;
252
+ getTranslation(lang: string): Observable<IKeyMap<string> | null>;
270
253
  private loadFallbackLanguage;
271
254
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomTranslateLoaderService, never>;
272
255
  static ɵprov: i0.ɵɵInjectableDeclaration<CustomTranslateLoaderService>;
@@ -277,10 +260,9 @@ declare class AssetsI18nLoaderService {
277
260
  protected myTranslateCollectorService: TranslateCollectorService;
278
261
  protected priority: number;
279
262
  protected supportedLanguages: string[];
280
- private subLanguages;
281
263
  constructor(myHttpClient: HttpClient, myTranslateCollectorService: TranslateCollectorService);
282
264
  init(path?: string, libName?: string, priority?: number): Promise<void>;
283
- protected loadTranslations(lang: string, path?: string, libName?: string, priority?: number): Observable<Record<string, string>>;
265
+ protected loadTranslations(lang: string, path?: string, libName?: string, priority?: number): Observable<Record<string, string> | null>;
284
266
  static ɵfac: i0.ɵɵFactoryDeclaration<AssetsI18nLoaderService, never>;
285
267
  static ɵprov: i0.ɵɵInjectableDeclaration<AssetsI18nLoaderService>;
286
268
  }
@@ -446,12 +428,12 @@ declare function isNullOrUndefined(val: any): boolean;
446
428
  * Checks if a string is null or empty
447
429
  * @param str
448
430
  */
449
- declare function isNullOrEmpty(str: string): boolean;
431
+ declare function isNullOrEmpty(str: string | null | undefined): boolean;
450
432
  /**
451
433
  * Checks if a string or number is zero or higher
452
434
  * @param num
453
435
  */
454
- declare function isZeroOrHigher(num: number | string): boolean;
436
+ declare function isZeroOrHigher(num: number | string | null): boolean;
455
437
  /**
456
438
  * Checks if an object is a number
457
439
  * @param num
@@ -482,7 +464,7 @@ declare function getRandomString(length?: number): string;
482
464
  /**
483
465
  * Trys to convert a json string. If it fails it returns [null] or a given fallback of [T]
484
466
  */
485
- declare function tryJsonParse<T>(data: string, fallback?: () => T): T | null;
467
+ declare function tryJsonParse<T>(data: string | undefined | null, fallback?: () => T): T | null;
486
468
 
487
469
  declare class Dictionary<Key, Value> {
488
470
  private readonly dictionaryItems$;
@@ -509,7 +491,7 @@ declare class Dictionary<Key, Value> {
509
491
  * @param key
510
492
  * @returns single dictionary item
511
493
  */
512
- get(key: Key): IDictionaryItem<Key, Value>;
494
+ get(key: Key): IDictionaryItem<Key, Value> | undefined;
513
495
  /**
514
496
  * Checks if dictionary contains item
515
497
  * @param key
@@ -563,7 +545,7 @@ type PromiseReject = (reason?: any) => void;
563
545
  declare function cast<T>(data: any): T;
564
546
  declare class StringExtensions implements IStringExtensions {
565
547
  getPart(maxChars: number, appendDot?: boolean): string;
566
- fromJSON<T>(): T;
548
+ fromJSON<T>(): T | null;
567
549
  toCSSClass(): string;
568
550
  toUTC(): string;
569
551
  }
@@ -589,7 +571,7 @@ interface IStringExtensions {
589
571
  * Converts a string from json
590
572
  * @returns object of expected type
591
573
  */
592
- fromJSON<T>(): T;
574
+ fromJSON<T>(): T | null;
593
575
  /**
594
576
  * Converts a string to a css class
595
577
  * @returns converted kebab case css class
@@ -658,7 +640,7 @@ declare class Sieve {
658
640
  /**
659
641
  * public getter to get filters
660
642
  */
661
- get filters(): ISieveFilter[];
643
+ get filters(): ISieveFilter[] | undefined;
662
644
  /**
663
645
  * Setter to set filters
664
646
  */
@@ -666,7 +648,7 @@ declare class Sieve {
666
648
  /**
667
649
  * public getter to get sorts
668
650
  */
669
- get sorts(): ISieveSort[];
651
+ get sorts(): ISieveSort[] | undefined;
670
652
  /**
671
653
  * Setter to set sorts
672
654
  */
@@ -687,7 +669,7 @@ declare class Sieve {
687
669
  /**
688
670
  * Getter for base url
689
671
  */
690
- get baseUrl(): string;
672
+ get baseUrl(): string | undefined;
691
673
  /**
692
674
  * Setter for base url
693
675
  * @param url
@@ -752,13 +734,13 @@ declare class DictionaryItemPipe implements PipeTransform {
752
734
  }
753
735
 
754
736
  declare class FilterPipe implements PipeTransform {
755
- transform<T>(array: T[], searchValue: T[keyof T] | T[keyof T][], searchKey?: keyof T): T[];
737
+ transform<T>(array: T[] | undefined, searchValue: any, searchKey?: keyof T): T[];
756
738
  static ɵfac: i0.ɵɵFactoryDeclaration<FilterPipe, never>;
757
739
  static ɵpipe: i0.ɵɵPipeDeclaration<FilterPipe, "filter", true>;
758
740
  }
759
741
 
760
742
  declare class FindPipe implements PipeTransform {
761
- transform<T>(array: T[], searchValue: T[keyof T] | T[keyof T][], searchKey?: keyof T): T;
743
+ transform<T>(array: T[] | undefined, searchValue: any, searchKey?: keyof T): T | null;
762
744
  static ɵfac: i0.ɵɵFactoryDeclaration<FindPipe, never>;
763
745
  static ɵpipe: i0.ɵɵPipeDeclaration<FindPipe, "find", true>;
764
746
  }
@@ -776,12 +758,15 @@ declare class JoinPipe implements PipeTransform {
776
758
  }
777
759
 
778
760
  declare class MosaDatePipe implements PipeTransform {
779
- private readonly myTranslateService;
780
- private readonly myDatePipe;
781
761
  private readonly store$;
782
762
  private templates;
783
- constructor(myTranslateService: TranslateService, myDatePipe: DatePipe);
784
- transform(date: string | Date, mode?: 'full' | 'timeSince' | 'date'): Observable<string>;
763
+ private readonly myTranslateService;
764
+ private readonly myDatePipe;
765
+ constructor();
766
+ transform(date: string | Date | undefined, mode?: 'full' | 'timeSince' | 'date', options?: {
767
+ withPrefix?: boolean;
768
+ withSuffix?: boolean;
769
+ }): Observable<string>;
785
770
  private calcDate;
786
771
  private template;
787
772
  private updateTemplates;
@@ -805,7 +790,7 @@ declare class MosaDurationPipe implements PipeTransform {
805
790
  * hours: 7200000 -> 2 hours
806
791
  * days: 172800000 -> 2 days
807
792
  */
808
- transform(millis: number, format?: MosaDurationFormat): Observable<string>;
793
+ transform(millis: number | undefined, format?: MosaDurationFormat): Observable<string>;
809
794
  private getTranslation;
810
795
  private calcDuration;
811
796
  static ɵfac: i0.ɵɵFactoryDeclaration<MosaDurationPipe, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mosa-ng/core",
3
- "version": "20.0.1",
3
+ "version": "20.1.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=20.0.0 < 21.0.0",
6
6
  "@angular/core": ">=20.0.0 < 21.0.0"
@@ -10,8 +10,10 @@
10
10
  "mosa.components.cellEditorBase.discardChanges.label": "Änderungen verwerfen?",
11
11
  "mosa.components.cellEditorBase.discardChanges.message": "Sie haben noch nicht gespeicherte Änderungen. Wollen Sie diese Seite wirklich schließen?",
12
12
 
13
- "mosa.pipes.timeSince.prefix": "vor ",
14
- "mosa.pipes.timeSince.suffix": "",
13
+ "mosa.pipes.timeSince.prefix.past": "vor ",
14
+ "mosa.pipes.timeSince.prefix.future": "in ",
15
+ "mosa.pipes.timeSince.suffix.past": "",
16
+ "mosa.pipes.timeSince.suffix.future": "",
15
17
  "mosa.pipes.timeSince.seconds": "%d Sekunden",
16
18
  "mosa.pipes.timeSince.minute": "einer Minute",
17
19
  "mosa.pipes.timeSince.minutes": "%d Minuten",
@@ -1,60 +1,62 @@
1
1
  {
2
- "mosa.confirmDialog.label": "Confirm Action",
3
- "mosa.confirmDialog.message": "Do you really want to execute this action?",
4
- "mosa.updateDialog.label": "Update available",
5
- "mosa.updateDialog.message": "A new update was found. Which action do you want to take?",
2
+ "mosa.confirmDialog.label": "Confirm Action",
3
+ "mosa.confirmDialog.message": "Do you really want to execute this action?",
4
+ "mosa.updateDialog.label": "Update available",
5
+ "mosa.updateDialog.message": "A new update was found. Which action do you want to take?",
6
6
 
7
- "mosa.cellEditor.discardChanges.label": "Discard changes?",
8
- "mosa.cellEditor.discardChanges.message": "Do you really want to discard your changes?",
7
+ "mosa.cellEditor.discardChanges.label": "Discard changes?",
8
+ "mosa.cellEditor.discardChanges.message": "Do you really want to discard your changes?",
9
9
 
10
- "mosa.components.cellEditorBase.discardChanges.label": "Discard changes?",
11
- "mosa.components.cellEditorBase.discardChanges.message": "You have still unsaved changes. Are you sure you want to close the page?",
10
+ "mosa.components.cellEditorBase.discardChanges.label": "Discard changes?",
11
+ "mosa.components.cellEditorBase.discardChanges.message": "You have still unsaved changes. Are you sure you want to close the page?",
12
12
 
13
- "mosa.pipes.timeSince.prefix": "",
14
- "mosa.pipes.timeSince.suffix": " ago",
15
- "mosa.pipes.timeSince.seconds": "%d seconds",
16
- "mosa.pipes.timeSince.minute": "a minute",
17
- "mosa.pipes.timeSince.minutes": "%d minutes",
18
- "mosa.pipes.timeSince.hour": "an hour",
19
- "mosa.pipes.timeSince.hours": "%d hours",
20
- "mosa.pipes.timeSince.day": "a day",
21
- "mosa.pipes.timeSince.days": "%d days",
22
- "mosa.pipes.timeSince.month": "a month",
23
- "mosa.pipes.timeSince.months": "%d months",
24
- "mosa.pipes.timeSince.year": "a year",
25
- "mosa.pipes.timeSince.years": "%d years",
13
+ "mosa.pipes.timeSince.prefix.past": "",
14
+ "mosa.pipes.timeSince.prefix.future": "",
15
+ "mosa.pipes.timeSince.suffix.past": " ago",
16
+ "mosa.pipes.timeSince.suffix.future": "",
17
+ "mosa.pipes.timeSince.seconds": "%d seconds",
18
+ "mosa.pipes.timeSince.minute": "a minute",
19
+ "mosa.pipes.timeSince.minutes": "%d minutes",
20
+ "mosa.pipes.timeSince.hour": "an hour",
21
+ "mosa.pipes.timeSince.hours": "%d hours",
22
+ "mosa.pipes.timeSince.day": "a day",
23
+ "mosa.pipes.timeSince.days": "%d days",
24
+ "mosa.pipes.timeSince.month": "a month",
25
+ "mosa.pipes.timeSince.months": "%d months",
26
+ "mosa.pipes.timeSince.year": "a year",
27
+ "mosa.pipes.timeSince.years": "%d years",
26
28
 
27
- "mosa.commons.logs.success.label": "Success",
28
- "mosa.commons.logs.success.message": "Action processed successfully",
29
- "mosa.commons.logs.warning.label": "Warning",
30
- "mosa.commons.logs.warning.message": "Action processed with warnings",
31
- "mosa.commons.logs.info.label": "Info",
32
- "mosa.commons.logs.info.message": "Action was processed",
33
- "mosa.commons.logs.error.label": "Error",
34
- "mosa.commons.logs.error.message": "An error happened",
29
+ "mosa.commons.logs.success.label": "Success",
30
+ "mosa.commons.logs.success.message": "Action processed successfully",
31
+ "mosa.commons.logs.warning.label": "Warning",
32
+ "mosa.commons.logs.warning.message": "Action processed with warnings",
33
+ "mosa.commons.logs.info.label": "Info",
34
+ "mosa.commons.logs.info.message": "Action was processed",
35
+ "mosa.commons.logs.error.label": "Error",
36
+ "mosa.commons.logs.error.message": "An error happened",
35
37
 
36
- "mosa.commons.errors.status[400].message": "An unexpected error happened",
37
- "mosa.commons.errors.status[403].message": "Forbidden request",
38
- "mosa.commons.errors.status[401].message": "Unauthorized request",
39
- "mosa.commons.errors.status[404].message": "Not found",
40
- "mosa.commons.errors.status[500].message": "Internal Server Error",
38
+ "mosa.commons.errors.status[400].message": "An unexpected error happened",
39
+ "mosa.commons.errors.status[403].message": "Forbidden request",
40
+ "mosa.commons.errors.status[401].message": "Unauthorized request",
41
+ "mosa.commons.errors.status[404].message": "Not found",
42
+ "mosa.commons.errors.status[500].message": "Internal Server Error",
41
43
 
42
- "mosa.commons.dateTime.seconds.label": "second",
43
- "mosa.commons.dateTime.seconds.plural.label": "seconds",
44
- "mosa.commons.dateTime.minutes.label": "minute",
45
- "mosa.commons.dateTime.minutes.plural.label": "minutes",
46
- "mosa.commons.dateTime.hours.label": "hour",
47
- "mosa.commons.dateTime.hours.plural.label": "hours",
48
- "mosa.commons.dateTime.days.label": "day",
49
- "mosa.commons.dateTime.days.plural.label": "days",
44
+ "mosa.commons.dateTime.seconds.label": "second",
45
+ "mosa.commons.dateTime.seconds.plural.label": "seconds",
46
+ "mosa.commons.dateTime.minutes.label": "minute",
47
+ "mosa.commons.dateTime.minutes.plural.label": "minutes",
48
+ "mosa.commons.dateTime.hours.label": "hour",
49
+ "mosa.commons.dateTime.hours.plural.label": "hours",
50
+ "mosa.commons.dateTime.days.label": "day",
51
+ "mosa.commons.dateTime.days.plural.label": "days",
50
52
 
51
- "mosa.commons.buttons.save": "Save",
52
- "mosa.commons.buttons.deny": "Deny",
53
- "mosa.commons.buttons.dismiss": "Dismiss",
54
- "mosa.commons.buttons.confirm": "Confirm",
55
- "mosa.commons.buttons.cancel": "Cancel",
56
- "mosa.commons.buttons.delete": "Delete",
57
- "mosa.commons.buttons.accept": "Accept",
58
- "mosa.commons.buttons.reloadNow": "Reload now",
59
- "mosa.commons.buttons.ignoreFor": "Ignore for {{ duration }}"
53
+ "mosa.commons.buttons.save": "Save",
54
+ "mosa.commons.buttons.deny": "Deny",
55
+ "mosa.commons.buttons.dismiss": "Dismiss",
56
+ "mosa.commons.buttons.confirm": "Confirm",
57
+ "mosa.commons.buttons.cancel": "Cancel",
58
+ "mosa.commons.buttons.delete": "Delete",
59
+ "mosa.commons.buttons.accept": "Accept",
60
+ "mosa.commons.buttons.reloadNow": "Reload now",
61
+ "mosa.commons.buttons.ignoreFor": "Ignore for {{ duration }}"
60
62
  }