@shival99/z-ui 2.2.4 → 2.2.6

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 (27) hide show
  1. package/assets/css/themes/hospital.css +28 -2
  2. package/fesm2022/shival99-z-ui-components-z-drawer.mjs +22 -13
  3. package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
  4. package/fesm2022/shival99-z-ui-components-z-icon.mjs +80 -8
  5. package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
  6. package/fesm2022/shival99-z-ui-components-z-menu.mjs +5 -5
  7. package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
  8. package/fesm2022/shival99-z-ui-components-z-table.mjs +2 -2
  9. package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
  10. package/fesm2022/shival99-z-ui-providers.mjs +9 -2
  11. package/fesm2022/shival99-z-ui-providers.mjs.map +1 -1
  12. package/fesm2022/shival99-z-ui-services.mjs +161 -73
  13. package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
  14. package/package.json +1 -1
  15. package/types/shival99-z-ui-components-z-autocomplete.d.ts +1 -1
  16. package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
  17. package/types/shival99-z-ui-components-z-drawer.d.ts +13 -5
  18. package/types/shival99-z-ui-components-z-editor.d.ts +1 -1
  19. package/types/shival99-z-ui-components-z-gallery.d.ts +4 -4
  20. package/types/shival99-z-ui-components-z-icon.d.ts +16 -4
  21. package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
  22. package/types/shival99-z-ui-components-z-popover.d.ts +1 -1
  23. package/types/shival99-z-ui-components-z-select.d.ts +1 -1
  24. package/types/shival99-z-ui-components-z-table.d.ts +1 -1
  25. package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
  26. package/types/shival99-z-ui-providers.d.ts +3 -1
  27. package/types/shival99-z-ui-services.d.ts +21 -6
@@ -1,5 +1,5 @@
1
1
  import { InjectionToken, makeEnvironmentProviders, provideEnvironmentInitializer, inject, provideAppInitializer } from '@angular/core';
2
- import { ZCacheService, ZIndexDbService, Z_THEME_CONFIG, Z_LANG_CACHE_KEY } from '@shival99/z-ui/services';
2
+ import { ZCacheService, ZIndexDbService, zConfigureStorageAppName, Z_THEME_CONFIG, Z_LANG_CACHE_KEY } from '@shival99/z-ui/services';
3
3
  import { provideEnvironmentNgxMask } from 'ngx-mask';
4
4
  import { provideScrollbarOptions } from 'ngx-scrollbar';
5
5
  import { HttpClient } from '@angular/common/http';
@@ -19,7 +19,8 @@ const Z_CACHE_CONFIG = new InjectionToken('Z_CACHE_CONFIG');
19
19
  * export const appConfig: ApplicationConfig = {
20
20
  * providers: [
21
21
  * provideZCache({
22
- * prefix: 'myapp_',
22
+ * appName: 'my-app',
23
+ * prefix: 'custom_',
23
24
  * encrypt: false, // Disable encryption for debugging
24
25
  * }),
25
26
  * ],
@@ -51,6 +52,7 @@ const Z_INDEXDB_SERVICE = new InjectionToken('ZIndexDbService');
51
52
  * export const appConfig: ApplicationConfig = {
52
53
  * providers: [
53
54
  * provideZIndexDb({
55
+ * appName: 'my-app',
54
56
  * dbName: 'MyApp',
55
57
  * version: 1,
56
58
  * stores: [
@@ -67,6 +69,11 @@ const Z_INDEXDB_SERVICE = new InjectionToken('ZIndexDbService');
67
69
  */
68
70
  function provideZIndexDb(config = {}) {
69
71
  return makeEnvironmentProviders([
72
+ provideEnvironmentInitializer(() => {
73
+ if (config.appName !== undefined) {
74
+ zConfigureStorageAppName(config.appName);
75
+ }
76
+ }),
70
77
  {
71
78
  provide: Z_INDEXDB_SERVICE,
72
79
  useFactory: () => new ZIndexDbService(config),
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-providers.mjs","sources":["../../../../libs/core-ui/providers/z-cache.provider.ts","../../../../libs/core-ui/providers/z-indexdb.provider.ts","../../../../libs/core-ui/providers/z-ngx-mask.provider.ts","../../../../libs/core-ui/providers/z-scrollbar.provider.ts","../../../../libs/core-ui/providers/z-theme.provider.ts","../../../../libs/core-ui/providers/z-translate.provider.ts","../../../../libs/core-ui/providers/types/z-ngx-mask.types.ts","../../../../libs/core-ui/providers/shival99-z-ui-providers.ts"],"sourcesContent":["import {\n type EnvironmentProviders,\n inject,\n InjectionToken,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type ZCacheConfig, ZCacheService } from '@shival99/z-ui/services';\n\n/** Injection token for ZCacheService configuration */\nexport const Z_CACHE_CONFIG = new InjectionToken<ZCacheConfig>('Z_CACHE_CONFIG');\n\n/**\n * Provide Z-Cache service with configuration\n * @param config - Cache configuration with prefix and encrypt options\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZCache({\n * prefix: 'myapp_',\n * encrypt: false, // Disable encryption for debugging\n * }),\n * ],\n * };\n * ```\n */\nexport function provideZCache(config: ZCacheConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: Z_CACHE_CONFIG,\n useValue: config,\n },\n provideEnvironmentInitializer(() => {\n const cacheConfig = inject(Z_CACHE_CONFIG);\n ZCacheService.configure(cacheConfig);\n }),\n ]);\n}\n","import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { type ZIndexDbConfig, ZIndexDbService } from '@shival99/z-ui/services';\n\n/** Injection token for ZIndexDbService */\nexport const Z_INDEXDB_SERVICE = new InjectionToken<ZIndexDbService>('ZIndexDbService');\n\n/**\n * Provide Z-IndexDB service with configuration\n * @param config - IndexDB configuration with multi-store support\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZIndexDb({\n * dbName: 'MyApp',\n * version: 1,\n * stores: [\n * { name: 'cache', encrypt: true },\n * { name: 'userData', encrypt: true, protectedKeys: ['profile'] },\n * { name: 'settings', encrypt: false },\n * ],\n * defaultStore: 'cache',\n * protectedKeys: ['token'],\n * }),\n * ],\n * };\n * ```\n */\nexport function provideZIndexDb(config: ZIndexDbConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: Z_INDEXDB_SERVICE,\n useFactory: () => new ZIndexDbService(config),\n },\n {\n provide: ZIndexDbService,\n useExisting: Z_INDEXDB_SERVICE,\n },\n ]);\n}\n","import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { ZCacheService } from '@shival99/z-ui/services';\nimport { provideEnvironmentNgxMask } from 'ngx-mask';\nimport type { ZNgxMaskConfig } from './types/z-ngx-mask.types';\n\nconst LANG_CACHE_KEY = 'Z_LANGUAGE';\n\nexport const Z_NGX_MASK_CONFIG = new InjectionToken<ZNgxMaskConfig>('Z_NGX_MASK_CONFIG');\n\n/**\n * Get locale-specific mask configuration\n */\nfunction getMaskConfig(lang: string, config: ZNgxMaskConfig = {}) {\n const normalizedLang = lang.toLowerCase().replace('_', '-');\n const isVietnamese = normalizedLang === 'vi' || normalizedLang.startsWith('vi-');\n const { lang: _lang, decimalPlaces: _decimalPlaces, ...maskConfig } = config;\n\n return {\n ...maskConfig,\n validation: maskConfig.validation ?? true,\n thousandSeparator: maskConfig.thousandSeparator ?? (isVietnamese ? '.' : ','),\n decimalMarker: maskConfig.decimalMarker ?? (isVietnamese ? ',' : '.'),\n allowNegativeNumbers: maskConfig.allowNegativeNumbers ?? true,\n };\n}\n\n/**\n * Provide Z-NgxMask with locale-aware configuration\n * @param config - Mask configuration\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZNgxMask({ lang: 'vi' }),\n * ],\n * };\n * ```\n *\n * Vietnamese defaults: thousandSeparator '.', decimalMarker ','.\n */\nexport function provideZNgxMask(config: ZNgxMaskConfig = {}): EnvironmentProviders {\n const savedLang = typeof window !== 'undefined' ? ZCacheService.get<string>(LANG_CACHE_KEY) : null;\n const lang = config.lang ?? savedLang ?? 'vi';\n const maskConfig = getMaskConfig(lang, config);\n const zMaskConfig: ZNgxMaskConfig = {\n ...maskConfig,\n lang,\n decimalPlaces: config.decimalPlaces,\n };\n\n return makeEnvironmentProviders([\n {\n provide: Z_NGX_MASK_CONFIG,\n useValue: zMaskConfig,\n },\n provideEnvironmentNgxMask(maskConfig),\n ]);\n}\n","import { type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideScrollbarOptions } from 'ngx-scrollbar';\n\n/**\n * Provides global scrollbar options for ngx-scrollbar\n * Use this in app.config.ts: providers: [provideZScrollbar()]\n */\nexport function provideZScrollbar(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideScrollbarOptions({\n visibility: 'hover',\n appearance: 'compact',\n withButtons: false,\n sensorThrottleTime: 200,\n }),\n ]);\n}\n","import { makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport { type ZThemeConfig, Z_THEME_CONFIG } from '@shival99/z-ui/services';\n\n/**\n * Provide theme configuration for the application\n * @param config - Theme configuration with defaultTheme, defaultDarkMode, and optional cacheKey\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZTheme({\n * defaultTheme: 'hospital',\n * defaultDarkMode: false,\n * cacheKey: 'Z_THEME_PREFERENCES_CRM',\n * })\n * ]\n * };\n * ```\n */\nexport function provideZTheme(config: ZThemeConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: Z_THEME_CONFIG, useValue: config }]);\n}\n","/* eslint-disable @stylistic/indent */\nimport { HttpClient } from '@angular/common/http';\nimport { inject, makeEnvironmentProviders, provideAppInitializer, type EnvironmentProviders } from '@angular/core';\nimport {\n provideTranslateService,\n TranslateLoader,\n TranslateService,\n type TranslationObject,\n} from '@ngx-translate/core';\nimport type { ZUITranslations } from '@shival99/z-ui/i18n';\nimport { Z_LANG_CACHE_KEY, ZCacheService } from '@shival99/z-ui/services';\nimport { firstValueFrom, forkJoin, from, map, type Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport type { ZTranslateProviderConfig, ZUITranslationsLoader } from './types/z-translate.types';\n\nconst DEFAULT_LANG = 'en';\nconst zuiTranslationsPromiseCache = new Map<string, Promise<ZUITranslations>>();\n\nasync function zLoadDefaultZUITranslations(lang: string): Promise<ZUITranslations> {\n const module = await import('@shival99/z-ui/i18n');\n return module.getZUITranslations(lang) ?? module.getZUITranslations(DEFAULT_LANG);\n}\n\nclass ZTranslateHttpLoader implements TranslateLoader {\n public constructor(\n private readonly _http: HttpClient,\n private readonly _prefix: string,\n private readonly _suffix: string,\n private readonly _includeZUI: boolean,\n private readonly _zuiOverridePath?: string,\n private readonly _zuiLoader: ZUITranslationsLoader = zLoadDefaultZUITranslations\n ) {}\n\n private _loadZUITranslations(lang: string): Promise<ZUITranslations> {\n const cached = zuiTranslationsPromiseCache.get(lang);\n if (cached) {\n return cached;\n }\n\n const loadPromise = this._zuiLoader(lang).catch(async () => {\n if (lang === DEFAULT_LANG) {\n return {};\n }\n return this._zuiLoader(DEFAULT_LANG).catch(() => ({}));\n });\n\n zuiTranslationsPromiseCache.set(lang, loadPromise);\n return loadPromise;\n }\n\n public getTranslation(lang: string): Observable<TranslationObject> {\n const userTranslations$ = this._http\n .get<TranslationObject>(`${this._prefix}${lang}${this._suffix}`)\n .pipe(catchError(() => of({} as TranslationObject)));\n\n if (!this._includeZUI) {\n return userTranslations$;\n }\n\n const zuiDefaults$ = from(this._loadZUITranslations(lang)).pipe(catchError(() => of({} as ZUITranslations)));\n const zuiFileOverrides$ = this._zuiOverridePath\n ? this._http\n .get<ZUITranslations>(`${this._zuiOverridePath}${lang}${this._suffix}`)\n .pipe(catchError(() => of({} as ZUITranslations)))\n : of({} as ZUITranslations);\n\n return forkJoin([zuiDefaults$, zuiFileOverrides$, userTranslations$]).pipe(\n map(\n ([defaults, fileOverrides, user]) =>\n ({\n ...defaults,\n ...fileOverrides,\n ...(user as Record<string, unknown>),\n }) as TranslationObject\n )\n );\n }\n}\n\nexport function zCreateTranslateLoader(\n http: HttpClient,\n path = './assets/i18n/',\n extension = '.json',\n includeZUI = true,\n zuiOverridePath?: string,\n zuiLoader: ZUITranslationsLoader = zLoadDefaultZUITranslations\n): TranslateLoader {\n return new ZTranslateHttpLoader(http, path, extension, includeZUI, zuiOverridePath, zuiLoader);\n}\n\nfunction initializeTranslate(defaultLang: string): Promise<unknown> {\n const translate = inject(TranslateService);\n const savedLang = ZCacheService.get<string>(Z_LANG_CACHE_KEY) ?? defaultLang;\n ZCacheService.set(Z_LANG_CACHE_KEY, savedLang);\n translate.setFallbackLang(defaultLang);\n return firstValueFrom(translate.use(savedLang));\n}\n\nexport function provideZTranslate(config: ZTranslateProviderConfig = {}): EnvironmentProviders {\n const {\n defaultLang = 'vi',\n translationPath = './assets/i18n/',\n fileExtension = '.json',\n includeZUITranslations = true,\n zuiOverridePath,\n zuiTranslationsLoader = zLoadDefaultZUITranslations,\n } = config;\n\n return makeEnvironmentProviders([\n provideTranslateService({\n fallbackLang: defaultLang,\n loader: {\n provide: TranslateLoader,\n useFactory: (http: HttpClient) =>\n zCreateTranslateLoader(\n http,\n translationPath,\n fileExtension,\n includeZUITranslations,\n zuiOverridePath,\n zuiTranslationsLoader\n ),\n deps: [HttpClient],\n },\n }),\n provideAppInitializer(() => initializeTranslate(defaultLang)),\n ]);\n}\n\nexport type { ZUITranslations, ZUILanguage, ZUITranslationSet } from '@shival99/z-ui/i18n';\n","/**\n * Z-NgxMask Provider Types\n */\n\nimport type { NgxMaskOptions } from 'ngx-mask';\n\nexport interface ZNgxMaskConfig extends NgxMaskOptions {\n /** Language code (vi, en, etc.) */\n lang?: string;\n /** Default decimal places for Z-UI number inputs. */\n decimalPlaces?: number;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shival99-z-ui-providers.mjs","sources":["../../../../libs/core-ui/providers/z-cache.provider.ts","../../../../libs/core-ui/providers/z-indexdb.provider.ts","../../../../libs/core-ui/providers/z-ngx-mask.provider.ts","../../../../libs/core-ui/providers/z-scrollbar.provider.ts","../../../../libs/core-ui/providers/z-theme.provider.ts","../../../../libs/core-ui/providers/z-translate.provider.ts","../../../../libs/core-ui/providers/types/z-ngx-mask.types.ts","../../../../libs/core-ui/providers/shival99-z-ui-providers.ts"],"sourcesContent":["import {\n type EnvironmentProviders,\n inject,\n InjectionToken,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type ZCacheConfig, ZCacheService } from '@shival99/z-ui/services';\n\n/** Injection token for ZCacheService configuration */\nexport const Z_CACHE_CONFIG = new InjectionToken<ZCacheConfig>('Z_CACHE_CONFIG');\n\n/**\n * Provide Z-Cache service with configuration\n * @param config - Cache configuration with prefix and encrypt options\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZCache({\n * appName: 'my-app',\n * prefix: 'custom_',\n * encrypt: false, // Disable encryption for debugging\n * }),\n * ],\n * };\n * ```\n */\nexport function provideZCache(config: ZCacheConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: Z_CACHE_CONFIG,\n useValue: config,\n },\n provideEnvironmentInitializer(() => {\n const cacheConfig = inject(Z_CACHE_CONFIG);\n ZCacheService.configure(cacheConfig);\n }),\n ]);\n}\n","import {\n type EnvironmentProviders,\n InjectionToken,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type ZIndexDbConfig, zConfigureStorageAppName, ZIndexDbService } from '@shival99/z-ui/services';\n\n/** Injection token for ZIndexDbService */\nexport const Z_INDEXDB_SERVICE = new InjectionToken<ZIndexDbService>('ZIndexDbService');\n\n/**\n * Provide Z-IndexDB service with configuration\n * @param config - IndexDB configuration with multi-store support\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZIndexDb({\n * appName: 'my-app',\n * dbName: 'MyApp',\n * version: 1,\n * stores: [\n * { name: 'cache', encrypt: true },\n * { name: 'userData', encrypt: true, protectedKeys: ['profile'] },\n * { name: 'settings', encrypt: false },\n * ],\n * defaultStore: 'cache',\n * protectedKeys: ['token'],\n * }),\n * ],\n * };\n * ```\n */\nexport function provideZIndexDb(config: ZIndexDbConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideEnvironmentInitializer(() => {\n if (config.appName !== undefined) {\n zConfigureStorageAppName(config.appName);\n }\n }),\n {\n provide: Z_INDEXDB_SERVICE,\n useFactory: () => new ZIndexDbService(config),\n },\n {\n provide: ZIndexDbService,\n useExisting: Z_INDEXDB_SERVICE,\n },\n ]);\n}\n","import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { ZCacheService } from '@shival99/z-ui/services';\nimport { provideEnvironmentNgxMask } from 'ngx-mask';\nimport type { ZNgxMaskConfig } from './types/z-ngx-mask.types';\n\nconst LANG_CACHE_KEY = 'Z_LANGUAGE';\n\nexport const Z_NGX_MASK_CONFIG = new InjectionToken<ZNgxMaskConfig>('Z_NGX_MASK_CONFIG');\n\n/**\n * Get locale-specific mask configuration\n */\nfunction getMaskConfig(lang: string, config: ZNgxMaskConfig = {}) {\n const normalizedLang = lang.toLowerCase().replace('_', '-');\n const isVietnamese = normalizedLang === 'vi' || normalizedLang.startsWith('vi-');\n const { lang: _lang, decimalPlaces: _decimalPlaces, ...maskConfig } = config;\n\n return {\n ...maskConfig,\n validation: maskConfig.validation ?? true,\n thousandSeparator: maskConfig.thousandSeparator ?? (isVietnamese ? '.' : ','),\n decimalMarker: maskConfig.decimalMarker ?? (isVietnamese ? ',' : '.'),\n allowNegativeNumbers: maskConfig.allowNegativeNumbers ?? true,\n };\n}\n\n/**\n * Provide Z-NgxMask with locale-aware configuration\n * @param config - Mask configuration\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZNgxMask({ lang: 'vi' }),\n * ],\n * };\n * ```\n *\n * Vietnamese defaults: thousandSeparator '.', decimalMarker ','.\n */\nexport function provideZNgxMask(config: ZNgxMaskConfig = {}): EnvironmentProviders {\n const savedLang = typeof window !== 'undefined' ? ZCacheService.get<string>(LANG_CACHE_KEY) : null;\n const lang = config.lang ?? savedLang ?? 'vi';\n const maskConfig = getMaskConfig(lang, config);\n const zMaskConfig: ZNgxMaskConfig = {\n ...maskConfig,\n lang,\n decimalPlaces: config.decimalPlaces,\n };\n\n return makeEnvironmentProviders([\n {\n provide: Z_NGX_MASK_CONFIG,\n useValue: zMaskConfig,\n },\n provideEnvironmentNgxMask(maskConfig),\n ]);\n}\n","import { type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideScrollbarOptions } from 'ngx-scrollbar';\n\n/**\n * Provides global scrollbar options for ngx-scrollbar\n * Use this in app.config.ts: providers: [provideZScrollbar()]\n */\nexport function provideZScrollbar(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideScrollbarOptions({\n visibility: 'hover',\n appearance: 'compact',\n withButtons: false,\n sensorThrottleTime: 200,\n }),\n ]);\n}\n","import { makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport { type ZThemeConfig, Z_THEME_CONFIG } from '@shival99/z-ui/services';\n\n/**\n * Provide theme configuration for the application\n * @param config - Theme configuration with defaultTheme, defaultDarkMode, and optional cacheKey\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZTheme({\n * defaultTheme: 'hospital',\n * defaultDarkMode: false,\n * cacheKey: 'Z_THEME_PREFERENCES_CRM',\n * })\n * ]\n * };\n * ```\n */\nexport function provideZTheme(config: ZThemeConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: Z_THEME_CONFIG, useValue: config }]);\n}\n","/* eslint-disable @stylistic/indent */\nimport { HttpClient } from '@angular/common/http';\nimport { inject, makeEnvironmentProviders, provideAppInitializer, type EnvironmentProviders } from '@angular/core';\nimport {\n provideTranslateService,\n TranslateLoader,\n TranslateService,\n type TranslationObject,\n} from '@ngx-translate/core';\nimport type { ZUITranslations } from '@shival99/z-ui/i18n';\nimport { Z_LANG_CACHE_KEY, ZCacheService } from '@shival99/z-ui/services';\nimport { firstValueFrom, forkJoin, from, map, type Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport type { ZTranslateProviderConfig, ZUITranslationsLoader } from './types/z-translate.types';\n\nconst DEFAULT_LANG = 'en';\nconst zuiTranslationsPromiseCache = new Map<string, Promise<ZUITranslations>>();\n\nasync function zLoadDefaultZUITranslations(lang: string): Promise<ZUITranslations> {\n const module = await import('@shival99/z-ui/i18n');\n return module.getZUITranslations(lang) ?? module.getZUITranslations(DEFAULT_LANG);\n}\n\nclass ZTranslateHttpLoader implements TranslateLoader {\n public constructor(\n private readonly _http: HttpClient,\n private readonly _prefix: string,\n private readonly _suffix: string,\n private readonly _includeZUI: boolean,\n private readonly _zuiOverridePath?: string,\n private readonly _zuiLoader: ZUITranslationsLoader = zLoadDefaultZUITranslations\n ) {}\n\n private _loadZUITranslations(lang: string): Promise<ZUITranslations> {\n const cached = zuiTranslationsPromiseCache.get(lang);\n if (cached) {\n return cached;\n }\n\n const loadPromise = this._zuiLoader(lang).catch(async () => {\n if (lang === DEFAULT_LANG) {\n return {};\n }\n return this._zuiLoader(DEFAULT_LANG).catch(() => ({}));\n });\n\n zuiTranslationsPromiseCache.set(lang, loadPromise);\n return loadPromise;\n }\n\n public getTranslation(lang: string): Observable<TranslationObject> {\n const userTranslations$ = this._http\n .get<TranslationObject>(`${this._prefix}${lang}${this._suffix}`)\n .pipe(catchError(() => of({} as TranslationObject)));\n\n if (!this._includeZUI) {\n return userTranslations$;\n }\n\n const zuiDefaults$ = from(this._loadZUITranslations(lang)).pipe(catchError(() => of({} as ZUITranslations)));\n const zuiFileOverrides$ = this._zuiOverridePath\n ? this._http\n .get<ZUITranslations>(`${this._zuiOverridePath}${lang}${this._suffix}`)\n .pipe(catchError(() => of({} as ZUITranslations)))\n : of({} as ZUITranslations);\n\n return forkJoin([zuiDefaults$, zuiFileOverrides$, userTranslations$]).pipe(\n map(\n ([defaults, fileOverrides, user]) =>\n ({\n ...defaults,\n ...fileOverrides,\n ...(user as Record<string, unknown>),\n }) as TranslationObject\n )\n );\n }\n}\n\nexport function zCreateTranslateLoader(\n http: HttpClient,\n path = './assets/i18n/',\n extension = '.json',\n includeZUI = true,\n zuiOverridePath?: string,\n zuiLoader: ZUITranslationsLoader = zLoadDefaultZUITranslations\n): TranslateLoader {\n return new ZTranslateHttpLoader(http, path, extension, includeZUI, zuiOverridePath, zuiLoader);\n}\n\nfunction initializeTranslate(defaultLang: string): Promise<unknown> {\n const translate = inject(TranslateService);\n const savedLang = ZCacheService.get<string>(Z_LANG_CACHE_KEY) ?? defaultLang;\n ZCacheService.set(Z_LANG_CACHE_KEY, savedLang);\n translate.setFallbackLang(defaultLang);\n return firstValueFrom(translate.use(savedLang));\n}\n\nexport function provideZTranslate(config: ZTranslateProviderConfig = {}): EnvironmentProviders {\n const {\n defaultLang = 'vi',\n translationPath = './assets/i18n/',\n fileExtension = '.json',\n includeZUITranslations = true,\n zuiOverridePath,\n zuiTranslationsLoader = zLoadDefaultZUITranslations,\n } = config;\n\n return makeEnvironmentProviders([\n provideTranslateService({\n fallbackLang: defaultLang,\n loader: {\n provide: TranslateLoader,\n useFactory: (http: HttpClient) =>\n zCreateTranslateLoader(\n http,\n translationPath,\n fileExtension,\n includeZUITranslations,\n zuiOverridePath,\n zuiTranslationsLoader\n ),\n deps: [HttpClient],\n },\n }),\n provideAppInitializer(() => initializeTranslate(defaultLang)),\n ]);\n}\n\nexport type { ZUITranslations, ZUILanguage, ZUITranslationSet } from '@shival99/z-ui/i18n';\n","/**\n * Z-NgxMask Provider Types\n */\n\nimport type { NgxMaskOptions } from 'ngx-mask';\n\nexport interface ZNgxMaskConfig extends NgxMaskOptions {\n /** Language code (vi, en, etc.) */\n lang?: string;\n /** Default decimal places for Z-UI number inputs. */\n decimalPlaces?: number;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AASA;MACa,cAAc,GAAG,IAAI,cAAc,CAAe,gBAAgB;AAE/E;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,aAAa,CAAC,MAAA,GAAuB,EAAE,EAAA;AACrD,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA;QACD,6BAA6B,CAAC,MAAK;AACjC,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AAC1C,YAAA,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC;AACtC,QAAA,CAAC,CAAC;AACH,KAAA,CAAC;AACJ;;ACjCA;MACa,iBAAiB,GAAG,IAAI,cAAc,CAAkB,iBAAiB;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACG,SAAU,eAAe,CAAC,MAAA,GAAyB,EAAE,EAAA;AACzD,IAAA,OAAO,wBAAwB,CAAC;QAC9B,6BAA6B,CAAC,MAAK;AACjC,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;AAChC,gBAAA,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC;YAC1C;AACF,QAAA,CAAC,CAAC;AACF,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;YAC1B,UAAU,EAAE,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC;AAC9C,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,WAAW,EAAE,iBAAiB;AAC/B,SAAA;AACF,KAAA,CAAC;AACJ;;AC/CA,MAAM,cAAc,GAAG,YAAY;MAEtB,iBAAiB,GAAG,IAAI,cAAc,CAAiB,mBAAmB;AAEvF;;AAEG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,SAAyB,EAAE,EAAA;AAC9D,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AAC3D,IAAA,MAAM,YAAY,GAAG,cAAc,KAAK,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;AAChF,IAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM;IAE5E,OAAO;AACL,QAAA,GAAG,UAAU;AACb,QAAA,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,IAAI;AACzC,QAAA,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,KAAK,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC;AAC7E,QAAA,aAAa,EAAE,UAAU,CAAC,aAAa,KAAK,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC;AACrE,QAAA,oBAAoB,EAAE,UAAU,CAAC,oBAAoB,IAAI,IAAI;KAC9D;AACH;AAEA;;;;;;;;;;;;;;;AAeG;AACG,SAAU,eAAe,CAAC,MAAA,GAAyB,EAAE,EAAA;AACzD,IAAA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,aAAa,CAAC,GAAG,CAAS,cAAc,CAAC,GAAG,IAAI;IAClG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC9C,IAAA,MAAM,WAAW,GAAmB;AAClC,QAAA,GAAG,UAAU;QACb,IAAI;QACJ,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC;AAED,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,QAAQ,EAAE,WAAW;AACtB,SAAA;QACD,yBAAyB,CAAC,UAAU,CAAC;AACtC,KAAA,CAAC;AACJ;;ACxDA;;;AAGG;SACa,iBAAiB,GAAA;AAC/B,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,uBAAuB,CAAC;AACtB,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,kBAAkB,EAAE,GAAG;SACxB,CAAC;AACH,KAAA,CAAC;AACJ;;ACbA;;;;;;;;;;;;;;;;AAgBG;AACG,SAAU,aAAa,CAAC,MAAA,GAAuB,EAAE,EAAA;AACrD,IAAA,OAAO,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AAClF;;ACtBA;AAeA,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAoC;AAE/E,eAAe,2BAA2B,CAAC,IAAY,EAAA;AACrD,IAAA,MAAM,MAAM,GAAG,MAAM,OAAO,qBAAqB,CAAC;AAClD,IAAA,OAAO,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC;AACnF;AAEA,MAAM,oBAAoB,CAAA;AAEL,IAAA,KAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,WAAA;AACA,IAAA,gBAAA;AACA,IAAA,UAAA;IANnB,WAAA,CACmB,KAAiB,EACjB,OAAe,EACf,OAAe,EACf,WAAoB,EACpB,gBAAyB,EACzB,UAAA,GAAoC,2BAA2B,EAAA;QAL/D,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,UAAU,GAAV,UAAU;IAC1B;AAEK,IAAA,oBAAoB,CAAC,IAAY,EAAA;QACvC,MAAM,MAAM,GAAG,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC;QACpD,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAW;AACzD,YAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACxD,QAAA,CAAC,CAAC;AAEF,QAAA,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;AAClD,QAAA,OAAO,WAAW;IACpB;AAEO,IAAA,cAAc,CAAC,IAAY,EAAA;AAChC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC5B,aAAA,GAAG,CAAoB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,CAAE;AAC9D,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAuB,CAAC,CAAC,CAAC;AAEtD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,iBAAiB;QAC1B;QAEA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAqB,CAAC,CAAC,CAAC;AAC5G,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC;cAC3B,IAAI,CAAC;AACF,iBAAA,GAAG,CAAkB,CAAA,EAAG,IAAI,CAAC,gBAAgB,CAAA,EAAG,IAAI,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,CAAE;iBACrE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAqB,CAAC,CAAC;AACrD,cAAE,EAAE,CAAC,EAAqB,CAAC;QAE7B,OAAO,QAAQ,CAAC,CAAC,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CACxE,GAAG,CACD,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,MAC7B;AACC,YAAA,GAAG,QAAQ;AACX,YAAA,GAAG,aAAa;AAChB,YAAA,GAAI,IAAgC;SACrC,CAAsB,CAC1B,CACF;IACH;AACD;AAEK,SAAU,sBAAsB,CACpC,IAAgB,EAChB,IAAI,GAAG,gBAAgB,EACvB,SAAS,GAAG,OAAO,EACnB,UAAU,GAAG,IAAI,EACjB,eAAwB,EACxB,YAAmC,2BAA2B,EAAA;AAE9D,IAAA,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,CAAC;AAChG;AAEA,SAAS,mBAAmB,CAAC,WAAmB,EAAA;AAC9C,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAS,gBAAgB,CAAC,IAAI,WAAW;AAC5E,IAAA,aAAa,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC;AAC9C,IAAA,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC;IACtC,OAAO,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjD;AAEM,SAAU,iBAAiB,CAAC,MAAA,GAAmC,EAAE,EAAA;IACrE,MAAM,EACJ,WAAW,GAAG,IAAI,EAClB,eAAe,GAAG,gBAAgB,EAClC,aAAa,GAAG,OAAO,EACvB,sBAAsB,GAAG,IAAI,EAC7B,eAAe,EACf,qBAAqB,GAAG,2BAA2B,GACpD,GAAG,MAAM;AAEV,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,uBAAuB,CAAC;AACtB,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,UAAU,EAAE,CAAC,IAAgB,KAC3B,sBAAsB,CACpB,IAAI,EACJ,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,qBAAqB,CACtB;gBACH,IAAI,EAAE,CAAC,UAAU,CAAC;AACnB,aAAA;SACF,CAAC;QACF,qBAAqB,CAAC,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAC9D,KAAA,CAAC;AACJ;;AC/HA;;AAEG;;ACFH;;AAEG;;;;"}
@@ -14,50 +14,107 @@ import { Router } from '@angular/router';
14
14
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
15
15
  import { TranslateService } from '@ngx-translate/core';
16
16
 
17
- const Z_CACHE_SCOPE_SEPARATOR = '::';
17
+ const Z_CACHE_SCOPE_SEPARATOR = '-';
18
18
  const Z_DB_SCOPE_SEPARATOR = '__';
19
- const Z_SCOPE_FALLBACK = 'global';
20
- const Z_RUNTIME_SCOPE = (() => {
19
+ const Z_STORAGE_SCOPE_FALLBACK = 'global';
20
+ const Z_CACHE_DEFAULT_PREFIX = 'z_';
21
+
22
+ const Z_LEGACY_CACHE_SCOPE_SEPARATOR = '::';
23
+ const Z_LEGACY_RUNTIME_SCOPE = (() => {
21
24
  if (typeof window === 'undefined') {
22
- return Z_SCOPE_FALLBACK;
25
+ return Z_STORAGE_SCOPE_FALLBACK;
23
26
  }
24
27
  const origin = zNormalize(window.location.origin);
25
28
  const baseHref = typeof document !== 'undefined' ? zNormalize(document.querySelector('base')?.getAttribute('href') ?? '') : '';
26
29
  if (!origin && !baseHref) {
27
- return Z_SCOPE_FALLBACK;
30
+ return Z_STORAGE_SCOPE_FALLBACK;
28
31
  }
29
32
  if (!origin) {
30
- return baseHref || Z_SCOPE_FALLBACK;
33
+ return baseHref || Z_STORAGE_SCOPE_FALLBACK;
31
34
  }
32
35
  if (!baseHref) {
33
36
  return origin;
34
37
  }
35
38
  return `${origin}__${baseHref}`;
36
39
  })();
37
- const Z_CACHE_SCOPE_SUFFIX = `${Z_CACHE_SCOPE_SEPARATOR}${Z_RUNTIME_SCOPE}`;
38
- const Z_DB_SCOPE_SUFFIX = `${Z_DB_SCOPE_SEPARATOR}${Z_RUNTIME_SCOPE}`;
39
- function zAppendScope(value, scopeSuffix) {
40
- const trimmed = value.trim();
41
- if (!trimmed || trimmed.endsWith(scopeSuffix)) {
42
- return value;
43
- }
44
- return `${trimmed}${scopeSuffix}`;
40
+ const Z_LEGACY_CACHE_SCOPE_SUFFIX = `${Z_LEGACY_CACHE_SCOPE_SEPARATOR}${Z_LEGACY_RUNTIME_SCOPE}`;
41
+ const Z_LEGACY_DB_SCOPE_SUFFIX = `${Z_DB_SCOPE_SEPARATOR}${Z_LEGACY_RUNTIME_SCOPE}`;
42
+ const Z_STORAGE_SCOPE_STATE = {};
43
+ function zNormalizeStorageAppName(appName) {
44
+ const normalized = (appName ?? '')
45
+ .trim()
46
+ .toLowerCase()
47
+ .replace(/[^a-z0-9]+/g, Z_CACHE_SCOPE_SEPARATOR)
48
+ .replace(/^-+|-+$/g, '');
49
+ return normalized || Z_STORAGE_SCOPE_FALLBACK;
45
50
  }
46
- function zBuildScopedCacheKey(baseKey) {
47
- return zAppendScope(baseKey, Z_CACHE_SCOPE_SUFFIX);
51
+ function zConfigureStorageAppName(appName) {
52
+ Z_STORAGE_SCOPE_STATE.appName = appName === undefined ? undefined : zNormalizeStorageAppName(appName);
48
53
  }
49
- function zBuildScopedDbName(baseDbName) {
50
- return zAppendScope(baseDbName, Z_DB_SCOPE_SUFFIX);
54
+ function zGetStorageAppName() {
55
+ return Z_STORAGE_SCOPE_STATE.appName;
51
56
  }
52
- function zStripScopedCacheKey(key) {
57
+ function zBuildScopedCacheKey(baseKey, appName = zGetStorageAppName()) {
58
+ if (appName === undefined) {
59
+ return zBuildLegacyScopedCacheKey(baseKey);
60
+ }
61
+ const trimmedKey = baseKey.trim();
62
+ if (!trimmedKey) {
63
+ return baseKey;
64
+ }
65
+ const scopePrefix = `${zNormalizeStorageAppName(appName)}${Z_CACHE_SCOPE_SEPARATOR}`;
66
+ if (trimmedKey.startsWith(scopePrefix)) {
67
+ return trimmedKey;
68
+ }
69
+ return `${scopePrefix}${trimmedKey}`;
70
+ }
71
+ function zBuildScopedDbName(baseDbName, appName = zGetStorageAppName()) {
72
+ if (appName === undefined) {
73
+ return zBuildLegacyScopedDbName(baseDbName);
74
+ }
75
+ const trimmedName = baseDbName.trim();
76
+ if (!trimmedName) {
77
+ return baseDbName;
78
+ }
79
+ const scopeSuffix = `${Z_DB_SCOPE_SEPARATOR}${zNormalizeStorageAppName(appName)}`;
80
+ if (trimmedName.endsWith(scopeSuffix)) {
81
+ return trimmedName;
82
+ }
83
+ return `${trimmedName}${scopeSuffix}`;
84
+ }
85
+ function zStripScopedCacheKey(key, appName = zGetStorageAppName()) {
86
+ if (appName === undefined) {
87
+ return zStripLegacyScopedCacheKey(key);
88
+ }
53
89
  const normalizedKey = key.trim();
54
90
  if (!normalizedKey) {
55
91
  return key;
56
92
  }
57
- if (!normalizedKey.endsWith(Z_CACHE_SCOPE_SUFFIX)) {
93
+ const scopePrefix = `${zNormalizeStorageAppName(appName)}${Z_CACHE_SCOPE_SEPARATOR}`;
94
+ if (!normalizedKey.startsWith(scopePrefix)) {
58
95
  return normalizedKey;
59
96
  }
60
- return normalizedKey.slice(0, normalizedKey.length - Z_CACHE_SCOPE_SUFFIX.length);
97
+ return normalizedKey.slice(scopePrefix.length);
98
+ }
99
+ function zBuildLegacyScopedCacheKey(baseKey) {
100
+ return zAppendLegacyScope(baseKey, Z_LEGACY_CACHE_SCOPE_SUFFIX);
101
+ }
102
+ function zBuildLegacyScopedDbName(baseDbName) {
103
+ return zAppendLegacyScope(baseDbName, Z_LEGACY_DB_SCOPE_SUFFIX);
104
+ }
105
+ function zStripLegacyScopedCacheKey(key) {
106
+ const normalizedKey = key.trim();
107
+ if (!normalizedKey || !normalizedKey.endsWith(Z_LEGACY_CACHE_SCOPE_SUFFIX)) {
108
+ return normalizedKey || key;
109
+ }
110
+ return normalizedKey.slice(0, normalizedKey.length - Z_LEGACY_CACHE_SCOPE_SUFFIX.length);
111
+ }
112
+ function zAppendLegacyScope(value, scopeSuffix) {
113
+ const trimmed = value.trim();
114
+ if (!trimmed || trimmed.endsWith(scopeSuffix)) {
115
+ return value;
116
+ }
117
+ return `${trimmed}${scopeSuffix}`;
61
118
  }
62
119
 
63
120
  /** Injection token for data passed to a dynamic component or template. */
@@ -274,10 +331,11 @@ const Z_LANG_TO_LOCALE = {
274
331
  };
275
332
 
276
333
  class ZCacheService {
277
- static _prefix = 'z_';
334
+ static _prefix = Z_CACHE_DEFAULT_PREFIX;
278
335
  static _encrypt = true;
279
336
  static configure(config) {
280
- if (config.prefix) {
337
+ zConfigureStorageAppName(config.appName);
338
+ if (config.prefix !== undefined) {
281
339
  ZCacheService._prefix = config.prefix;
282
340
  }
283
341
  if (config.encrypt !== undefined) {
@@ -310,21 +368,31 @@ class ZCacheService {
310
368
  const prefixedKey = `${ZCacheService._prefix}${normalizedKey}`;
311
369
  return encrypt ? ZCacheService._encode(prefixedKey) : prefixedKey;
312
370
  }
371
+ static _toLegacyStorageKey(normalizedKey, encrypt) {
372
+ const prefixedKey = `z_${normalizedKey}`;
373
+ return encrypt ? ZCacheService._encode(prefixedKey) : prefixedKey;
374
+ }
313
375
  static _getFullKey(key, encrypt) {
314
376
  return ZCacheService._toStorageKey(ZCacheService._normalizeKey(key), encrypt);
315
377
  }
316
- static _getLegacyFullKey(key, encrypt) {
378
+ static _getLegacyFullKeys(key, encrypt) {
317
379
  const legacyNormalized = ZCacheService._normalizeLegacyKey(key);
318
380
  const scopedNormalized = ZCacheService._normalizeKey(key);
319
- if (legacyNormalized === scopedNormalized) {
320
- return null;
381
+ const legacyLogicalKeys = zGetStorageAppName() === undefined
382
+ ? [legacyNormalized]
383
+ : [zBuildLegacyScopedCacheKey(legacyNormalized), legacyNormalized];
384
+ if (legacyLogicalKeys.includes(scopedNormalized)) {
385
+ return [];
321
386
  }
322
- return ZCacheService._toStorageKey(legacyNormalized, encrypt);
387
+ const legacyKeys = legacyLogicalKeys.flatMap(logicalKey => [
388
+ ZCacheService._toStorageKey(logicalKey, encrypt),
389
+ ZCacheService._toLegacyStorageKey(logicalKey, encrypt),
390
+ ]);
391
+ return [...new Set(legacyKeys)];
323
392
  }
324
393
  static _getCandidateStorageKeys(key, encrypt) {
325
394
  const scopedKey = ZCacheService._getFullKey(key, encrypt);
326
- const legacyKey = ZCacheService._getLegacyFullKey(key, encrypt);
327
- return legacyKey ? [scopedKey, legacyKey] : [scopedKey];
395
+ return [scopedKey, ...ZCacheService._getLegacyFullKeys(key, encrypt)];
328
396
  }
329
397
  static _decodeStorageKey(storageKey) {
330
398
  const decoded = ZCacheService._decode(storageKey);
@@ -334,14 +402,14 @@ class ZCacheService {
334
402
  return decoded;
335
403
  }
336
404
  static _isManagedStorageKey(storageKey) {
337
- if (storageKey.startsWith(ZCacheService._prefix)) {
405
+ if (storageKey.startsWith(ZCacheService._prefix) || storageKey.startsWith('z_')) {
338
406
  return true;
339
407
  }
340
408
  const decoded = ZCacheService._decodeStorageKey(storageKey);
341
409
  if (!decoded) {
342
410
  return false;
343
411
  }
344
- return decoded.startsWith(ZCacheService._prefix);
412
+ return decoded.startsWith(ZCacheService._prefix) || decoded.startsWith('z_');
345
413
  }
346
414
  static _safeOperation(operation, fallback) {
347
415
  try {
@@ -377,12 +445,10 @@ class ZCacheService {
377
445
  static set(key, data, encrypt = ZCacheService._encrypt) {
378
446
  return ZCacheService._safeOperation(() => {
379
447
  const _key = ZCacheService._getFullKey(key, encrypt);
380
- const legacyKey = ZCacheService._getLegacyFullKey(key, encrypt);
448
+ const legacyKeys = ZCacheService._getLegacyFullKeys(key, encrypt);
381
449
  const _value = encrypt ? ZCacheService._encode(data) : JSON.stringify(data);
382
450
  localStorage.setItem(_key, _value);
383
- if (legacyKey) {
384
- localStorage.removeItem(legacyKey);
385
- }
451
+ legacyKeys.forEach(legacyKey => localStorage.removeItem(legacyKey));
386
452
  return true;
387
453
  }, false);
388
454
  }
@@ -1251,6 +1317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
1251
1317
  class ZIndexDbService {
1252
1318
  _db = null;
1253
1319
  _dbName;
1320
+ _appName;
1254
1321
  _legacyDbName = null;
1255
1322
  _version;
1256
1323
  _mode;
@@ -1261,9 +1328,16 @@ class ZIndexDbService {
1261
1328
  _encrypt = true;
1262
1329
  constructor(config = {}) {
1263
1330
  const baseDbName = config.dbName ?? Z_INDEXDB_DEFAULT_CONFIG.dbName;
1264
- const scopedDbName = zBuildScopedDbName(baseDbName);
1331
+ this._appName = config.appName ?? zGetStorageAppName();
1332
+ if (config.appName !== undefined) {
1333
+ zConfigureStorageAppName(config.appName);
1334
+ }
1335
+ const scopedDbName = this._appName === undefined
1336
+ ? zBuildLegacyScopedDbName(baseDbName)
1337
+ : zBuildScopedDbName(baseDbName, this._appName);
1265
1338
  this._dbName = scopedDbName;
1266
- this._legacyDbName = scopedDbName === baseDbName ? null : baseDbName;
1339
+ const legacyDbName = this._appName === undefined ? baseDbName : zBuildLegacyScopedDbName(baseDbName);
1340
+ this._legacyDbName = scopedDbName === legacyDbName ? null : legacyDbName;
1267
1341
  this._version = config.version ?? Z_INDEXDB_DEFAULT_CONFIG.version;
1268
1342
  this._mode = config.mode ?? Z_INDEXDB_DEFAULT_CONFIG.mode;
1269
1343
  this._defaultStoreName = config.defaultStore ?? Z_INDEXDB_DEFAULT_CONFIG.defaultStore;
@@ -1297,17 +1371,16 @@ class ZIndexDbService {
1297
1371
  return key.trim().toLowerCase();
1298
1372
  }
1299
1373
  _normalizeKey(key) {
1300
- return zBuildScopedCacheKey(this._normalizeLegacyKey(key));
1301
- }
1302
- _resolveLegacyNormalizedKey(key) {
1303
- const legacyKey = this._normalizeLegacyKey(key);
1304
- const scopedKey = this._normalizeKey(key);
1305
- return legacyKey === scopedKey ? null : legacyKey;
1374
+ const normalizedKey = this._normalizeLegacyKey(key);
1375
+ return this._appName === undefined
1376
+ ? zBuildLegacyScopedCacheKey(normalizedKey)
1377
+ : zBuildScopedCacheKey(normalizedKey, this._appName);
1306
1378
  }
1307
1379
  _buildStorageKeys(key, encrypt) {
1380
+ const normalizedKey = this._normalizeLegacyKey(key);
1308
1381
  const scopedKey = this._normalizeKey(key);
1309
- const legacyKey = this._resolveLegacyNormalizedKey(key);
1310
- const logicalKeys = legacyKey ? [scopedKey, legacyKey] : [scopedKey];
1382
+ const legacyLogicalKeys = this._appName === undefined ? [normalizedKey] : [zBuildLegacyScopedCacheKey(normalizedKey), normalizedKey];
1383
+ const logicalKeys = [...new Set([scopedKey, ...legacyLogicalKeys])];
1311
1384
  if (!encrypt) {
1312
1385
  return logicalKeys;
1313
1386
  }
@@ -1531,6 +1604,12 @@ class ZIndexDbService {
1531
1604
  }
1532
1605
  return this._db.objectStoreNames.contains(storeName);
1533
1606
  }
1607
+ _getDbOrThrow() {
1608
+ if (!this._db) {
1609
+ throw new Error('Database not initialized');
1610
+ }
1611
+ return this._db;
1612
+ }
1534
1613
  async get(key, options) {
1535
1614
  const storeConfig = this._getStoreConfig(options?.storeName);
1536
1615
  const shouldEncrypt = this._shouldEncrypt(storeConfig, options?.encrypt);
@@ -1552,34 +1631,44 @@ class ZIndexDbService {
1552
1631
  const storageKeys = this._buildStorageKeys(key, shouldEncrypt);
1553
1632
  return new Promise(resolve => {
1554
1633
  try {
1555
- const transaction = this._db.transaction([storeConfig.name], this._mode);
1634
+ const transaction = this._getDbOrThrow().transaction([storeConfig.name], this._mode);
1556
1635
  const store = transaction.objectStore(storeConfig.name);
1557
1636
  const request = store.get(storageKeys[0]);
1558
1637
  request.onsuccess = () => {
1559
1638
  const resolveData = (rawValue) => {
1560
1639
  try {
1561
- if (!rawValue) {
1562
- resolve(defaultValue);
1563
- return;
1640
+ if (rawValue === undefined) {
1641
+ return false;
1564
1642
  }
1565
1643
  const decrypted = shouldEncrypt ? this._decryptData(rawValue) : rawValue;
1644
+ if (decrypted === null) {
1645
+ return false;
1646
+ }
1566
1647
  resolve(decrypted ?? defaultValue);
1648
+ return true;
1567
1649
  }
1568
1650
  catch {
1569
- resolve(defaultValue);
1651
+ return false;
1570
1652
  }
1571
1653
  };
1572
- if (request.result) {
1573
- resolveData(request.result);
1654
+ if (resolveData(request.result)) {
1574
1655
  return;
1575
1656
  }
1576
- if (storageKeys.length < 2) {
1577
- resolve(defaultValue);
1578
- return;
1579
- }
1580
- const legacyRequest = store.get(storageKeys[1]);
1581
- legacyRequest.onsuccess = () => resolveData(legacyRequest.result);
1582
- legacyRequest.onerror = () => resolve(defaultValue);
1657
+ const readFallback = (index) => {
1658
+ if (index >= storageKeys.length) {
1659
+ resolve(defaultValue);
1660
+ return;
1661
+ }
1662
+ const fallbackRequest = store.get(storageKeys[index]);
1663
+ fallbackRequest.onsuccess = () => {
1664
+ if (resolveData(fallbackRequest.result)) {
1665
+ return;
1666
+ }
1667
+ readFallback(index + 1);
1668
+ };
1669
+ fallbackRequest.onerror = () => readFallback(index + 1);
1670
+ };
1671
+ readFallback(1);
1583
1672
  };
1584
1673
  request.onerror = () => resolve(defaultValue);
1585
1674
  transaction.onerror = () => resolve(defaultValue);
@@ -1612,12 +1701,10 @@ class ZIndexDbService {
1612
1701
  const _value = shouldEncrypt ? this._encryptData(value) : value;
1613
1702
  return new Promise((resolve, reject) => {
1614
1703
  try {
1615
- const transaction = this._db.transaction([storeConfig.name], 'readwrite');
1704
+ const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
1616
1705
  const store = transaction.objectStore(storeConfig.name);
1617
1706
  const request = store.put(_value, _key);
1618
- if (storageKeys.length > 1) {
1619
- store.delete(storageKeys[1]);
1620
- }
1707
+ storageKeys.slice(1).forEach(item => store.delete(item));
1621
1708
  request.onerror = () => reject(request.error);
1622
1709
  transaction.oncomplete = () => resolve();
1623
1710
  transaction.onerror = () => reject(transaction.error);
@@ -1655,7 +1742,7 @@ class ZIndexDbService {
1655
1742
  const keys = Array.isArray(key) ? key : [key];
1656
1743
  return new Promise((resolve, reject) => {
1657
1744
  try {
1658
- const transaction = this._db.transaction([storeConfig.name], 'readwrite');
1745
+ const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
1659
1746
  const store = transaction.objectStore(storeConfig.name);
1660
1747
  keys.forEach(k => {
1661
1748
  const plainKeys = this._buildStorageKeys(k, false);
@@ -1688,7 +1775,7 @@ class ZIndexDbService {
1688
1775
  }
1689
1776
  if (protectedKeys.length === 0) {
1690
1777
  return new Promise((resolve, reject) => {
1691
- const transaction = this._db.transaction([storeConfig.name], 'readwrite');
1778
+ const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
1692
1779
  const store = transaction.objectStore(storeConfig.name);
1693
1780
  const request = store.clear();
1694
1781
  request.onsuccess = () => resolve();
@@ -1697,7 +1784,7 @@ class ZIndexDbService {
1697
1784
  }
1698
1785
  return new Promise((resolve, reject) => {
1699
1786
  try {
1700
- const transaction = this._db.transaction([storeConfig.name], 'readwrite');
1787
+ const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
1701
1788
  const store = transaction.objectStore(storeConfig.name);
1702
1789
  const keyRequest = store.getAllKeys();
1703
1790
  const protectedSet = new Set();
@@ -1747,7 +1834,7 @@ class ZIndexDbService {
1747
1834
  }
1748
1835
  return new Promise(resolve => {
1749
1836
  try {
1750
- const transaction = this._db.transaction([storeConfig.name], this._mode);
1837
+ const transaction = this._getDbOrThrow().transaction([storeConfig.name], this._mode);
1751
1838
  const store = transaction.objectStore(storeConfig.name);
1752
1839
  const keysRequest = store.getAllKeys();
1753
1840
  const valuesRequest = store.getAll();
@@ -1761,7 +1848,10 @@ class ZIndexDbService {
1761
1848
  const _key = this._shouldEncrypt(storeConfig) ? this._decryptData(key) : key;
1762
1849
  const _value = this._shouldEncrypt(storeConfig) ? this._decryptData(values[index]) : values[index];
1763
1850
  if (_key && _value !== null) {
1764
- results[zStripScopedCacheKey(_key)] = _value;
1851
+ const scopedKey = this._appName === undefined
1852
+ ? zStripLegacyScopedCacheKey(_key)
1853
+ : zStripScopedCacheKey(_key, this._appName);
1854
+ results[zStripLegacyScopedCacheKey(scopedKey)] = _value;
1765
1855
  }
1766
1856
  }
1767
1857
  catch {
@@ -1802,16 +1892,14 @@ class ZIndexDbService {
1802
1892
  throw new Error(`Store "${storeConfig.name}" does not exist`);
1803
1893
  }
1804
1894
  return new Promise((resolve, reject) => {
1805
- const transaction = this._db.transaction([storeConfig.name], 'readwrite');
1895
+ const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
1806
1896
  const store = transaction.objectStore(storeConfig.name);
1807
1897
  batch.forEach(([key, value]) => {
1808
1898
  const storageKeys = this._buildStorageKeys(key, shouldEncrypt);
1809
1899
  const _key = storageKeys[0];
1810
1900
  const _value = shouldEncrypt ? this._encryptData(value) : value;
1811
1901
  store.put(_value, _key);
1812
- if (storageKeys.length > 1) {
1813
- store.delete(storageKeys[1]);
1814
- }
1902
+ storageKeys.slice(1).forEach(item => store.delete(item));
1815
1903
  });
1816
1904
  transaction.oncomplete = () => resolve();
1817
1905
  transaction.onerror = () => reject(transaction.error);
@@ -2584,5 +2672,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
2584
2672
  * Generated bundle index. Do not edit.
2585
2673
  */
2586
2674
 
2587
- export { ZCacheService, ZDynamicRef, ZDynamicService, ZExcelService, ZHttpAbstractService, ZIndexDbService, ZOverlayContainerService, ZOverlayZIndexService, ZSubjectService, ZThemeService, ZTranslateService, Z_DEFAULT_THEME, Z_DYNAMIC_DATA, Z_EXCEL_BORDER_THIN, Z_EXCEL_CHAR_WIDTH_MAP, Z_EXCEL_COLORS, Z_EXCEL_DEFAULT_CONFIG, Z_EXCEL_FONT_MULTIPLIERS, Z_EXCEL_WIDTH_LIMITS, Z_HTTP_DEFAULT_CONFIG, Z_INDEXDB_BATCH_SIZE, Z_INDEXDB_DEFAULT_CONFIG, Z_INDEXDB_MAX_VERSION, Z_LANG_CACHE_KEY, Z_LANG_TO_LOCALE, Z_THEME_CONFIG, Z_THEME_CSS_MAP, Z_THEME_PREFERENCES_CACHE_KEY, zBuildScopedCacheKey, zBuildScopedDbName, zStripScopedCacheKey };
2675
+ export { ZCacheService, ZDynamicRef, ZDynamicService, ZExcelService, ZHttpAbstractService, ZIndexDbService, ZOverlayContainerService, ZOverlayZIndexService, ZSubjectService, ZThemeService, ZTranslateService, Z_CACHE_DEFAULT_PREFIX, Z_CACHE_SCOPE_SEPARATOR, Z_DB_SCOPE_SEPARATOR, Z_DEFAULT_THEME, Z_DYNAMIC_DATA, Z_EXCEL_BORDER_THIN, Z_EXCEL_CHAR_WIDTH_MAP, Z_EXCEL_COLORS, Z_EXCEL_DEFAULT_CONFIG, Z_EXCEL_FONT_MULTIPLIERS, Z_EXCEL_WIDTH_LIMITS, Z_HTTP_DEFAULT_CONFIG, Z_INDEXDB_BATCH_SIZE, Z_INDEXDB_DEFAULT_CONFIG, Z_INDEXDB_MAX_VERSION, Z_LANG_CACHE_KEY, Z_LANG_TO_LOCALE, Z_STORAGE_SCOPE_FALLBACK, Z_THEME_CONFIG, Z_THEME_CSS_MAP, Z_THEME_PREFERENCES_CACHE_KEY, zBuildLegacyScopedCacheKey, zBuildLegacyScopedDbName, zBuildScopedCacheKey, zBuildScopedDbName, zConfigureStorageAppName, zGetStorageAppName, zNormalizeStorageAppName, zStripLegacyScopedCacheKey, zStripScopedCacheKey };
2588
2676
  //# sourceMappingURL=shival99-z-ui-services.mjs.map