@acorex/core 21.0.1-next.57 → 21.0.1-next.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/fesm2022/acorex-core-components.mjs +3 -3
  2. package/fesm2022/acorex-core-components.mjs.map +1 -1
  3. package/fesm2022/acorex-core-config.mjs +3 -3
  4. package/fesm2022/acorex-core-config.mjs.map +1 -1
  5. package/fesm2022/acorex-core-constants.mjs.map +1 -1
  6. package/fesm2022/acorex-core-date-time.mjs +25 -25
  7. package/fesm2022/acorex-core-date-time.mjs.map +1 -1
  8. package/fesm2022/acorex-core-events.mjs +3 -3
  9. package/fesm2022/acorex-core-events.mjs.map +1 -1
  10. package/fesm2022/acorex-core-file.mjs +10 -10
  11. package/fesm2022/acorex-core-file.mjs.map +1 -1
  12. package/fesm2022/acorex-core-format.mjs +19 -19
  13. package/fesm2022/acorex-core-format.mjs.map +1 -1
  14. package/fesm2022/acorex-core-full-screen.mjs +3 -3
  15. package/fesm2022/acorex-core-full-screen.mjs.map +1 -1
  16. package/fesm2022/acorex-core-icon.mjs +3 -3
  17. package/fesm2022/acorex-core-icon.mjs.map +1 -1
  18. package/fesm2022/acorex-core-image.mjs +3 -3
  19. package/fesm2022/acorex-core-image.mjs.map +1 -1
  20. package/fesm2022/acorex-core-locale.mjs +10 -10
  21. package/fesm2022/acorex-core-locale.mjs.map +1 -1
  22. package/fesm2022/acorex-core-memoize.mjs.map +1 -1
  23. package/fesm2022/acorex-core-network.mjs +3 -3
  24. package/fesm2022/acorex-core-network.mjs.map +1 -1
  25. package/fesm2022/acorex-core-pipes.mjs +3 -3
  26. package/fesm2022/acorex-core-pipes.mjs.map +1 -1
  27. package/fesm2022/acorex-core-platform.mjs +10 -10
  28. package/fesm2022/acorex-core-platform.mjs.map +1 -1
  29. package/fesm2022/acorex-core-storage.mjs +9 -9
  30. package/fesm2022/acorex-core-storage.mjs.map +1 -1
  31. package/fesm2022/acorex-core-translation.mjs +142 -77
  32. package/fesm2022/acorex-core-translation.mjs.map +1 -1
  33. package/fesm2022/acorex-core-utils.mjs +3 -3
  34. package/fesm2022/acorex-core-utils.mjs.map +1 -1
  35. package/fesm2022/acorex-core-validation.mjs +40 -40
  36. package/fesm2022/acorex-core-validation.mjs.map +1 -1
  37. package/fesm2022/acorex-core-z-index.mjs +3 -3
  38. package/fesm2022/acorex-core-z-index.mjs.map +1 -1
  39. package/fesm2022/acorex-core.mjs.map +1 -1
  40. package/package.json +23 -23
  41. package/{format/index.d.ts → types/acorex-core-format.d.ts} +2 -2
  42. package/{translation/index.d.ts → types/acorex-core-translation.d.ts} +29 -7
  43. package/{validation/index.d.ts → types/acorex-core-validation.d.ts} +10 -10
  44. /package/{components/index.d.ts → types/acorex-core-components.d.ts} +0 -0
  45. /package/{config/index.d.ts → types/acorex-core-config.d.ts} +0 -0
  46. /package/{constants/index.d.ts → types/acorex-core-constants.d.ts} +0 -0
  47. /package/{date-time/index.d.ts → types/acorex-core-date-time.d.ts} +0 -0
  48. /package/{events/index.d.ts → types/acorex-core-events.d.ts} +0 -0
  49. /package/{file/index.d.ts → types/acorex-core-file.d.ts} +0 -0
  50. /package/{full-screen/index.d.ts → types/acorex-core-full-screen.d.ts} +0 -0
  51. /package/{icon/index.d.ts → types/acorex-core-icon.d.ts} +0 -0
  52. /package/{image/index.d.ts → types/acorex-core-image.d.ts} +0 -0
  53. /package/{locale/index.d.ts → types/acorex-core-locale.d.ts} +0 -0
  54. /package/{memoize/index.d.ts → types/acorex-core-memoize.d.ts} +0 -0
  55. /package/{network/index.d.ts → types/acorex-core-network.d.ts} +0 -0
  56. /package/{pipes/index.d.ts → types/acorex-core-pipes.d.ts} +0 -0
  57. /package/{platform/index.d.ts → types/acorex-core-platform.d.ts} +0 -0
  58. /package/{storage/index.d.ts → types/acorex-core-storage.d.ts} +0 -0
  59. /package/{utils/index.d.ts → types/acorex-core-utils.d.ts} +0 -0
  60. /package/{z-index/index.d.ts → types/acorex-core-z-index.d.ts} +0 -0
  61. /package/{index.d.ts → types/acorex-core.d.ts} +0 -0
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, Injectable, TemplateRef, ViewContainerRef, Directive, Pipe, provideAppInitializer, NgModule } from '@angular/core';
3
3
  import { get } from 'lodash-es';
4
- import { of, tap, shareReplay, firstValueFrom, BehaviorSubject, switchMap, from, map } from 'rxjs';
4
+ import { of, tap, shareReplay, firstValueFrom, BehaviorSubject, distinctUntilChanged, switchMap, from } from 'rxjs';
5
5
  import { AXEventService, AXSystemEvents } from '@acorex/core/events';
6
6
  import { AXLocaleService } from '@acorex/core/locale';
7
7
  import { waitFor } from '@acorex/core/utils';
@@ -157,10 +157,10 @@ class AXTranslationLoaderService {
157
157
  getFallbackScopes(scope) {
158
158
  return this.config.fallbacks?.scopes?.[scope] ?? [];
159
159
  }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
161
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationLoaderService, providedIn: 'root' }); }
160
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
161
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationLoaderService, providedIn: 'root' }); }
162
162
  }
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationLoaderService, decorators: [{
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationLoaderService, decorators: [{
164
164
  type: Injectable,
165
165
  args: [{ providedIn: 'root' }]
166
166
  }] });
@@ -215,36 +215,18 @@ function escapeRegExp(string) {
215
215
  class TranslationResolverService {
216
216
  constructor() {
217
217
  this.loaderService = inject(AXTranslationLoaderService);
218
- this.cache = new Map();
219
- this.inflight = new Map();
220
218
  this.parser = new TranslationParserService();
221
219
  }
222
220
  async resolve(lang, scope, key, params) {
223
- const cacheKey = `${lang}:${scope}`;
224
- // Load and cache if not present
225
- if (!this.cache.has(cacheKey)) {
226
- if (!this.inflight.has(cacheKey)) {
227
- const fetchPromise = firstValueFrom(this.loaderService.load(lang, scope));
228
- this.inflight.set(cacheKey, fetchPromise);
229
- try {
230
- const data = await fetchPromise;
231
- this.cache.set(cacheKey, data);
232
- }
233
- finally {
234
- this.inflight.delete(cacheKey);
235
- }
236
- }
237
- else {
238
- await this.inflight.get(cacheKey);
239
- }
221
+ let result = this.loaderService.peek(lang, scope, key);
222
+ if (result == null) {
223
+ await firstValueFrom(this.loaderService.load(lang, scope));
224
+ result = this.loaderService.peek(lang, scope, key);
240
225
  }
241
- const translations = this.cache.get(cacheKey);
242
- if (!translations) {
243
- console.warn(`Translations not found for ${cacheKey} after attempting to load.`);
226
+ if (result == null) {
244
227
  const unresolvedResult = key;
245
228
  return this.format(unresolvedResult, params);
246
229
  }
247
- let result = get(translations, key, key);
248
230
  // Recursively resolve references
249
231
  if (typeof result === 'string' && this.parser.isExpression(result)) {
250
232
  const tokens = this.parser.parse(result, lang, scope);
@@ -284,6 +266,57 @@ class TranslationResolverService {
284
266
  }
285
267
  }
286
268
 
269
+ const LOCALE_KEY_REGEX = /^(\*-\*|[a-z]{2}-[A-Z]{2})$/;
270
+ function resolveMultiLanguageValue(value, locale) {
271
+ return value[locale] ?? value['en-US'] ?? Object.values(value).find((item) => item != null) ?? '';
272
+ }
273
+ function isValidMultiLanguageObject(value) {
274
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
275
+ return false;
276
+ }
277
+ const entries = Object.entries(value);
278
+ if (!entries.length) {
279
+ return false;
280
+ }
281
+ return entries.every(([key, entryValue]) => LOCALE_KEY_REGEX.test(key) && typeof entryValue === 'string');
282
+ }
283
+ /**
284
+ * Resolves {@link AXMultiLanguageString} to a single string for the given locale.
285
+ * Fallback order: `currentLocale` → `en-US` → first map value.
286
+ */
287
+ function resolveMultiLanguageString(content, currentLocale) {
288
+ if (content == null || content === '') {
289
+ return '';
290
+ }
291
+ if (typeof content === 'string') {
292
+ return content;
293
+ }
294
+ if (!isValidMultiLanguageObject(content)) {
295
+ return String(content);
296
+ }
297
+ return resolveMultiLanguageValue(content, currentLocale);
298
+ }
299
+ /**
300
+ * Creates an {@link AXMultiLanguageMap} with `en-US` and `fa-IR` entries.
301
+ * Use for seed data, tests, and demos that supply English and Persian copy explicitly.
302
+ */
303
+ function createMultiLanguageString(enUs, faIr) {
304
+ return { 'en-US': enUs, 'fa-IR': faIr };
305
+ }
306
+ /**
307
+ * True when there is no displayable text in any locale (plain string or ML map).
308
+ */
309
+ function isEffectivelyEmptyLocalizedValue(value) {
310
+ if (value == null)
311
+ return true;
312
+ if (typeof value === 'string')
313
+ return value.trim() === '';
314
+ if (typeof value !== 'object' || Array.isArray(value))
315
+ return false;
316
+ const record = value;
317
+ return Object.values(record).every((v) => v == null || String(v).trim() === '');
318
+ }
319
+
287
320
  let singletonInstance;
288
321
  function translateSync(key, options) {
289
322
  return singletonInstance.translateSync(key, options);
@@ -298,6 +331,7 @@ class AXTranslationService {
298
331
  this.resolver = new TranslationResolverService();
299
332
  this.activeLang = new BehaviorSubject(this.config.defaults.lang);
300
333
  this.langChanges$ = this.activeLang.asObservable();
334
+ this.currentLocale$ = this.langChanges$.pipe(distinctUntilChanged());
301
335
  singletonInstance = this;
302
336
  this.localeService.profileChanged$.subscribe((locale) => {
303
337
  if (locale?.localeInfo?.code) {
@@ -320,37 +354,55 @@ class AXTranslationService {
320
354
  getDefaultLang() {
321
355
  return this.config.defaults.lang;
322
356
  }
323
- translate$(text, options) {
324
- if (!text) {
325
- return of('');
357
+ resolve(value, locale) {
358
+ if (value == null) {
359
+ return '';
326
360
  }
327
- const staticOptions = { ...options };
328
- const staticScope = staticOptions.scope ?? this.config.defaults.scope;
329
- return this.langChanges$.pipe(switchMap((lang) => {
330
- return from(this.translateAsync(text, {
331
- ...staticOptions,
332
- lang: staticOptions.lang ?? lang,
333
- scope: staticScope,
361
+ if (typeof value === 'string') {
362
+ return value;
363
+ }
364
+ if (!isValidMultiLanguageObject(value)) {
365
+ return '';
366
+ }
367
+ return resolveMultiLanguageValue(value, locale ?? this.getActiveLang());
368
+ }
369
+ toLocaleMap(value, activeLocale = this.getActiveLang()) {
370
+ if (isValidMultiLanguageObject(value)) {
371
+ return { ...value };
372
+ }
373
+ return {
374
+ [activeLocale]: typeof value === 'string' ? value : '',
375
+ };
376
+ }
377
+ translate$(value, options) {
378
+ if (isValidMultiLanguageObject(value)) {
379
+ return this.langChanges$.pipe(switchMap((activeLang) => {
380
+ const targetLang = options?.lang ?? activeLang;
381
+ const selectedValue = resolveMultiLanguageValue(value, targetLang);
382
+ const scope = options?.scope ?? this.config.defaults.scope;
383
+ return from(this.translateAsync(selectedValue, {
384
+ ...options,
385
+ lang: targetLang,
386
+ scope,
387
+ }));
334
388
  }));
335
- }), shareReplay({ bufferSize: 1, refCount: true }));
389
+ }
390
+ return this.translateValue$(value, options);
336
391
  }
337
392
  async translateAsync(text, options) {
338
- const lang = options?.lang ?? this.getActiveLang() ?? this.config.defaults.lang;
339
- const scope = options?.scope ?? this.config.defaults.scope;
393
+ const { lang, scope } = this.resolveContext(options);
340
394
  const params = options?.params;
341
395
  if (!this.parser.isExpression(text)) {
342
- const resolved = await this.resolver.resolve(lang, scope, text, params);
343
- return this.resolver.format(resolved, params);
396
+ return this.resolver.resolve(lang, scope, text, params);
344
397
  }
345
398
  const tokens = this.parser.parse(text, lang, scope);
346
399
  const results = await Promise.all(tokens.map((token) => this.resolver
347
400
  .resolve(token.lang ?? lang, token.scope ?? scope, token.key, params)
348
- .then((translated) => [token.fullMatch, this.resolver.format(translated, params)])));
401
+ .then((translated) => [token.fullMatch, translated])));
349
402
  return results.reduce((output, [match, translated]) => output.replace(match, translated), text);
350
403
  }
351
404
  translateSync(text, options) {
352
- const lang = options?.lang ?? this.getActiveLang() ?? this.config.defaults.lang;
353
- const scope = options?.scope ?? this.config.defaults.scope;
405
+ const { lang, scope } = this.resolveContext(options);
354
406
  const params = options?.params;
355
407
  const waitForLoad = options?.waitForLoad ?? false;
356
408
  const timeoutMs = options?.timeoutMs ?? 100;
@@ -376,10 +428,40 @@ class AXTranslationService {
376
428
  }
377
429
  return result;
378
430
  }
379
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
380
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationService, providedIn: 'root' }); }
431
+ translateValue$(text, options) {
432
+ if (!text) {
433
+ return of('');
434
+ }
435
+ const staticOptions = { ...options };
436
+ const staticScope = staticOptions.scope ?? this.config.defaults.scope;
437
+ return this.langChanges$.pipe(switchMap((lang) => {
438
+ return from(this.translateAsync(text, {
439
+ ...staticOptions,
440
+ lang: staticOptions.lang ?? lang,
441
+ scope: staticScope,
442
+ }));
443
+ }), shareReplay({ bufferSize: 1, refCount: true }));
444
+ }
445
+ resolveContext(options) {
446
+ return {
447
+ lang: options?.lang ?? this.getActiveLang() ?? this.config.defaults.lang,
448
+ scope: options?.scope ?? this.config.defaults.scope,
449
+ };
450
+ }
451
+ isValidMultiLanguageObject(value) {
452
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
453
+ return false;
454
+ }
455
+ const entries = Object.entries(value);
456
+ if (!entries.length) {
457
+ return false;
458
+ }
459
+ return entries.every(([key, entryValue]) => LOCALE_KEY_REGEX.test(key) && typeof entryValue === 'string');
460
+ }
461
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
462
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationService, providedIn: 'root' }); }
381
463
  }
382
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationService, decorators: [{
464
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationService, decorators: [{
383
465
  type: Injectable,
384
466
  args: [{
385
467
  providedIn: 'root',
@@ -413,45 +495,28 @@ class AXTranslatorDirective {
413
495
  this.vc.clear();
414
496
  this.vc.createEmbeddedView(this.templateRef, { $implicit: t });
415
497
  }
416
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
417
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.3", type: AXTranslatorDirective, isStandalone: true, selector: "[translate]", ngImport: i0 }); }
498
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
499
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: AXTranslatorDirective, isStandalone: true, selector: "[translate]", ngImport: i0 }); }
418
500
  }
419
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslatorDirective, decorators: [{
501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslatorDirective, decorators: [{
420
502
  type: Directive,
421
503
  args: [{ selector: '[translate]' }]
422
504
  }] });
423
505
 
424
- const LOCALE_KEY_REGEX = /^(\*-\*|[a-z]{2}-[A-Z]{2})$/;
425
506
  class AXTranslatorPipe {
426
507
  constructor() {
427
508
  this.service = inject(AXTranslationService);
428
509
  }
429
510
  transform(value, options) {
430
511
  if (!value) {
431
- return of(''); // Return an empty observable if the key is not provided
432
- }
433
- if (this.isMultiLanguageMap(value)) {
434
- return this.service.langChanges$.pipe(map((activeLang) => this.resolveMultiLanguageValue(value, options?.lang ?? activeLang)));
512
+ return of('');
435
513
  }
436
514
  return this.service.translate$(value, options);
437
515
  }
438
- isMultiLanguageMap(value) {
439
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
440
- return false;
441
- }
442
- const entries = Object.entries(value);
443
- if (!entries.length) {
444
- return false;
445
- }
446
- return entries.every(([key, entryValue]) => LOCALE_KEY_REGEX.test(key) && typeof entryValue === 'string');
447
- }
448
- resolveMultiLanguageValue(value, locale) {
449
- return value[locale] ?? value['en-US'] ?? Object.values(value).find((item) => item != null) ?? '';
450
- }
451
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
452
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.3", ngImport: i0, type: AXTranslatorPipe, isStandalone: true, name: "translate" }); }
516
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
517
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: AXTranslatorPipe, isStandalone: true, name: "translate" }); }
453
518
  }
454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslatorPipe, decorators: [{
519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslatorPipe, decorators: [{
455
520
  type: Pipe,
456
521
  args: [{
457
522
  name: 'translate',
@@ -465,16 +530,16 @@ function initializeApp(translatorService) {
465
530
  };
466
531
  }
467
532
  class AXTranslationModule {
468
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
469
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationModule, imports: [AXTranslatorPipe, AXTranslatorDirective], exports: [AXTranslatorPipe, AXTranslatorDirective] }); }
470
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationModule, providers: [
533
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
534
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationModule, imports: [AXTranslatorPipe, AXTranslatorDirective], exports: [AXTranslatorPipe, AXTranslatorDirective] }); }
535
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationModule, providers: [
471
536
  provideAppInitializer(() => {
472
537
  const initializerFn = initializeApp(inject(AXTranslationLoaderService));
473
538
  return initializerFn();
474
539
  }),
475
540
  ] }); }
476
541
  }
477
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXTranslationModule, decorators: [{
542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXTranslationModule, decorators: [{
478
543
  type: NgModule,
479
544
  args: [{
480
545
  imports: [AXTranslatorPipe, AXTranslatorDirective],
@@ -492,5 +557,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
492
557
  * Generated bundle index. Do not edit.
493
558
  */
494
559
 
495
- export { AXTranslationDefaultConfig, AXTranslationLoaderDefault, AXTranslationModule, AXTranslationService, AXTranslatorDirective, AXTranslatorPipe, AX_TRANSLATION_CONFIG, AX_TRANSLATION_LOADER, loadTranslationScope, translateSync, translationConfig };
560
+ export { AXTranslationDefaultConfig, AXTranslationLoaderDefault, AXTranslationModule, AXTranslationService, AXTranslatorDirective, AXTranslatorPipe, AX_TRANSLATION_CONFIG, AX_TRANSLATION_LOADER, LOCALE_KEY_REGEX, createMultiLanguageString, isEffectivelyEmptyLocalizedValue, isValidMultiLanguageObject, loadTranslationScope, resolveMultiLanguageString, resolveMultiLanguageValue, translateSync, translationConfig };
496
561
  //# sourceMappingURL=acorex-core-translation.mjs.map