@shival99/z-ui 1.0.11 → 1.0.13

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 +1 @@
1
- {"version":3,"file":"shival99-z-ui-services.mjs","sources":["../../../../libs/core-ui/services/z-cache.service.ts","../../../../libs/core-ui/services/z-indexdb.service.ts","../../../../libs/core-ui/services/z-subject.service.ts","../../../../libs/core-ui/services/types/z-theme.types.ts","../../../../libs/core-ui/services/z-theme.service.ts","../../../../libs/core-ui/services/z-translate.service.ts","../../../../libs/core-ui/services/types/z-cache.types.ts","../../../../libs/core-ui/services/types/z-http.types.ts","../../../../libs/core-ui/services/types/z-indexdb.types.ts","../../../../libs/core-ui/services/types/z-translate.types.ts","../../../../libs/core-ui/services/types/index.ts","../../../../libs/core-ui/services/index.ts","../../../../libs/core-ui/services/shival99-z-ui-services.ts"],"sourcesContent":["/**\n * Z-Cache Service\n * A localStorage-based cache service with optional encryption\n */\n\nimport type { ZCacheConfig } from './types/z-cache.types';\n\nconst Z_CACHE_DEFAULT_PREFIX = 'z_';\nexport class ZCacheService {\n private static _prefix = Z_CACHE_DEFAULT_PREFIX;\n private static _encrypt = true;\n\n /**\n * Configure the cache service\n */\n public static configure(config: ZCacheConfig): void {\n if (config.prefix) {\n ZCacheService._prefix = config.prefix;\n }\n if (config.encrypt !== undefined) {\n ZCacheService._encrypt = config.encrypt;\n }\n }\n\n private static _encode(data: unknown): string {\n const payload = { __z: true, __d: data };\n return btoa(encodeURIComponent(JSON.stringify(payload)));\n }\n\n private static _decode<T>(data: string): T | null {\n try {\n const decoded = JSON.parse(decodeURIComponent(atob(data)));\n if (!decoded.__z) {\n return null;\n }\n return decoded.__d as T;\n } catch {\n return null;\n }\n }\n\n private static _getFullKey(key: string, encrypt: boolean): string {\n const prefixedKey = `${ZCacheService._prefix}${key}`;\n return encrypt ? ZCacheService._encode(prefixedKey) : prefixedKey;\n }\n\n private static _safeOperation<T>(operation: () => T, fallback: T): T {\n try {\n return operation();\n } catch (error) {\n console.error('[ZCache] Operation error:', error);\n return fallback;\n }\n }\n\n /**\n * Get a value from cache\n * @param key - Cache key\n * @param defaultValue - Default value if not found\n * @param encrypt - Whether to use encryption (default: service config)\n */\n public static get<T>(key: string, defaultValue?: T, encrypt = ZCacheService._encrypt): T | undefined {\n return ZCacheService._safeOperation(() => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n const result = localStorage.getItem(_key);\n\n if (!result) {\n return defaultValue;\n }\n\n const data = encrypt ? ZCacheService._decode<T>(result) : (JSON.parse(result) as T);\n return data ?? defaultValue;\n }, defaultValue);\n }\n\n /**\n * Set a value in cache\n * @param key - Cache key\n * @param data - Data to store\n * @param encrypt - Whether to use encryption\n */\n public static set<T>(key: string, data: T, encrypt = ZCacheService._encrypt): boolean {\n return ZCacheService._safeOperation(() => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n const _value = encrypt ? ZCacheService._encode(data) : JSON.stringify(data);\n localStorage.setItem(_key, _value);\n return true;\n }, false);\n }\n\n /**\n * Delete a key from cache\n * @param key - Cache key\n * @param encrypt - Whether key is encrypted\n */\n public static delete(key: string, encrypt = ZCacheService._encrypt): boolean {\n return ZCacheService._safeOperation(() => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n localStorage.removeItem(_key);\n return true;\n }, false);\n }\n\n /**\n * Delete multiple keys from cache\n * @param keys - Array of cache keys\n * @param encrypt - Whether keys are encrypted\n */\n public static deleteMultiple(keys: string[], encrypt = ZCacheService._encrypt): boolean {\n return ZCacheService._safeOperation(() => {\n keys.forEach(key => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n localStorage.removeItem(_key);\n });\n return true;\n }, false);\n }\n\n /**\n * Clear all cache with the configured prefix\n */\n public static clear(): boolean {\n return ZCacheService._safeOperation(() => {\n const keysToRemove: string[] = [];\n const prefixEncoded = ZCacheService._encode(ZCacheService._prefix);\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(ZCacheService._prefix) || key?.startsWith(prefixEncoded)) {\n keysToRemove.push(key);\n }\n }\n\n keysToRemove.forEach(key => localStorage.removeItem(key));\n return true;\n }, false);\n }\n\n /**\n * Check if a key exists in cache\n * @param key - Cache key\n * @param encrypt - Whether key is encrypted\n */\n public static has(key: string, encrypt = ZCacheService._encrypt): boolean {\n return ZCacheService._safeOperation(() => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n return localStorage.getItem(_key) !== null;\n }, false);\n }\n\n /**\n * Get all keys with the configured prefix\n */\n public static keys(): string[] {\n return ZCacheService._safeOperation(() => {\n const result: string[] = [];\n const prefixEncoded = ZCacheService._encode(ZCacheService._prefix);\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(ZCacheService._prefix)) {\n result.push(key.slice(ZCacheService._prefix.length));\n } else if (key?.startsWith(prefixEncoded)) {\n const decoded = ZCacheService._decode<string>(key);\n if (decoded) {\n result.push(decoded.slice(ZCacheService._prefix.length));\n }\n }\n }\n\n return result;\n }, []);\n }\n}\n","/**\n * Z-IndexDB Service\n * A robust IndexedDB service with multi-store support, encryption, and retry logic\n */\n\nimport type { ZIndexDbConfig, ZIndexDbStoreConfig } from './types/z-indexdb.types';\n\n/** Default configuration */\nconst Z_INDEXDB_DEFAULT_CONFIG: Required<Pick<ZIndexDbConfig, 'dbName' | 'version' | 'mode' | 'defaultStore'>> = {\n dbName: 'ZDatabase',\n version: 1,\n mode: 'readwrite',\n defaultStore: 'ZStore',\n};\n\n/** Batch size for bulk operations */\nconst Z_INDEXDB_BATCH_SIZE = 100;\n\nexport class ZIndexDbService {\n private _db: IDBDatabase | null = null;\n private _dbName: string;\n private _version: number;\n private _mode: IDBTransactionMode;\n private _dbReady: Promise<void>;\n private _stores: Map<string, ZIndexDbStoreConfig> = new Map();\n private _defaultStoreName: string;\n private _globalProtectedKeys: string[];\n\n public constructor(config: ZIndexDbConfig = {}) {\n this._dbName = config.dbName ?? Z_INDEXDB_DEFAULT_CONFIG.dbName;\n this._version = config.version ?? Z_INDEXDB_DEFAULT_CONFIG.version;\n this._mode = config.mode ?? Z_INDEXDB_DEFAULT_CONFIG.mode;\n this._defaultStoreName = config.defaultStore ?? Z_INDEXDB_DEFAULT_CONFIG.defaultStore;\n this._globalProtectedKeys = config.protectedKeys ?? [];\n\n if (config.stores?.length) {\n config.stores.forEach(store => this._stores.set(store.name, store));\n }\n if (!this._stores.has(this._defaultStoreName)) {\n this._stores.set(this._defaultStoreName, { name: this._defaultStoreName, encrypt: true });\n }\n\n this._dbReady = this._initDb();\n }\n\n private _getStoreConfig(storeName?: string): ZIndexDbStoreConfig {\n const name = storeName ?? this._defaultStoreName;\n return this._stores.get(name) ?? { name, encrypt: true };\n }\n\n private _encrypt(data: unknown): string {\n const payload = {\n __z: true,\n __t: typeof data,\n __d: data,\n };\n return btoa(encodeURIComponent(JSON.stringify(payload)));\n }\n\n private _decrypt<T>(data: string): T | null {\n try {\n const decoded = JSON.parse(decodeURIComponent(atob(data)));\n if (!decoded.__z) {\n return null;\n }\n return decoded.__d as T;\n } catch {\n return null;\n }\n }\n\n private _closeConnection(): void {\n if (this._db) {\n this._db.close();\n this._db = null;\n }\n }\n\n private async _reconnect(): Promise<void> {\n console.warn('[ZIndexDb] Reconnecting...');\n this._closeConnection();\n this._dbReady = this._initDb();\n await this._dbReady;\n }\n\n private async _withRetry<T>(operation: () => Promise<T>, retries = 3): Promise<T> {\n let lastError: unknown;\n\n for (let i = 0; i < retries; i++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error;\n if (error instanceof Error && error.name === 'InvalidStateError') {\n await this._reconnect();\n }\n await new Promise(resolve => setTimeout(resolve, Math.pow(2, i) * 100));\n }\n }\n\n throw lastError;\n }\n\n private async _initDb(): Promise<void> {\n if (this._db) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n try {\n const request = indexedDB.open(this._dbName, this._version);\n\n request.onupgradeneeded = event => {\n const db = (event.target as IDBOpenDBRequest).result;\n this._stores.forEach((_, storeName) => {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n });\n };\n\n request.onsuccess = event => {\n this._db = (event.target as IDBOpenDBRequest).result;\n this._db.onerror = e => console.error('[ZIndexDb] Error:', (e.target as IDBRequest).error);\n this._db.onclose = () => {\n console.warn('[ZIndexDb] Connection closed unexpectedly');\n this._db = null;\n };\n resolve();\n };\n\n request.onerror = event => {\n console.error('[ZIndexDb] Open error:', (event.target as IDBOpenDBRequest).error);\n reject((event.target as IDBOpenDBRequest).error);\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Get a value from the store\n * @param key - The key to retrieve\n * @param defaultValue - Default value if key not found\n * @param storeName - Optional store name (uses default if not specified)\n */\n public async get<T>(key: string, defaultValue?: T, storeName?: string): Promise<T | undefined> {\n const storeConfig = this._getStoreConfig(storeName);\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n return defaultValue;\n }\n }\n\n const _key = storeConfig.encrypt !== false ? this._encrypt(key) : key;\n\n return new Promise<T | undefined>(resolve => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], this._mode);\n const store = transaction.objectStore(storeConfig.name);\n const request = store.get(_key);\n\n request.onsuccess = () => {\n try {\n const { result } = request;\n if (!result) {\n resolve(defaultValue);\n return;\n }\n const decrypted = storeConfig.encrypt !== false ? this._decrypt<T>(result) : result;\n resolve(decrypted ?? defaultValue);\n } catch {\n resolve(defaultValue);\n }\n };\n\n request.onerror = () => resolve(defaultValue);\n transaction.onerror = () => resolve(defaultValue);\n } catch {\n resolve(defaultValue);\n }\n });\n });\n }\n\n /**\n * Set a value in the store\n * @param key - The key to set\n * @param value - The value to store\n * @param storeName - Optional store name\n */\n public async set<T>(key: string, value: T, storeName?: string): Promise<void> {\n const storeConfig = this._getStoreConfig(storeName);\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n throw new Error('Database not initialized');\n }\n }\n\n const _key = storeConfig.encrypt !== false ? this._encrypt(key) : key;\n const _value = storeConfig.encrypt !== false ? this._encrypt(value) : value;\n\n return new Promise<void>((resolve, reject) => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n const request = store.put(_value, _key);\n\n request.onerror = () => reject(request.error);\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n\n /**\n * Delete a key from the store\n * @param key - Key or array of keys to delete\n * @param storeName - Optional store name\n */\n public async delete(key: string | string[], storeName?: string): Promise<void> {\n const storeConfig = this._getStoreConfig(storeName);\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n throw new Error('Database not initialized');\n }\n }\n\n const keys = Array.isArray(key) ? key : [key];\n\n return new Promise<void>((resolve, reject) => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n\n keys.forEach(k => {\n const _key = storeConfig.encrypt !== false ? this._encrypt(k) : k;\n store.delete(_key);\n });\n\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n\n /**\n * Clear all data from a store (respecting protected keys)\n * @param storeName - Optional store name\n */\n public async clear(storeName?: string): Promise<void> {\n const storeConfig = this._getStoreConfig(storeName);\n const protectedKeys = [...this._globalProtectedKeys, ...(storeConfig.protectedKeys ?? [])];\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n throw new Error('Database not initialized');\n }\n }\n\n if (protectedKeys.length === 0) {\n return new Promise<void>((resolve, reject) => {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n const request = store.clear();\n\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n\n return new Promise<void>((resolve, reject) => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n const keyRequest = store.getAllKeys();\n\n keyRequest.onsuccess = () => {\n const allKeys = keyRequest.result as string[];\n const encryptedProtected = protectedKeys.map(k => this._encrypt(k));\n\n allKeys.forEach(k => {\n if (!encryptedProtected.includes(k) && !protectedKeys.includes(k)) {\n try {\n const decrypted = this._decrypt<string>(k);\n if (!protectedKeys.includes(decrypted ?? '')) {\n store.delete(k);\n }\n } catch {\n store.delete(k);\n }\n }\n });\n };\n\n keyRequest.onerror = () => reject(keyRequest.error);\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n\n /**\n * Get all items from a store\n * @param storeName - Optional store name\n */\n public async getAll<T = unknown>(storeName?: string): Promise<Record<string, T>> {\n const storeConfig = this._getStoreConfig(storeName);\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n return {};\n }\n }\n\n return new Promise<Record<string, T>>(resolve => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], this._mode);\n const store = transaction.objectStore(storeConfig.name);\n const keysRequest = store.getAllKeys();\n const valuesRequest = store.getAll();\n const results: Record<string, T> = {};\n\n keysRequest.onsuccess = () => {\n const keys = keysRequest.result;\n const values = valuesRequest.result;\n\n keys.forEach((key, index) => {\n if (typeof key === 'string') {\n try {\n const _key = storeConfig.encrypt !== false ? this._decrypt<string>(key) : key;\n const _value = storeConfig.encrypt !== false ? this._decrypt<T>(values[index]) : values[index];\n if (_key && _value !== null) {\n results[_key] = _value;\n }\n } catch {\n // Skip invalid entries\n }\n }\n });\n\n resolve(results);\n };\n\n keysRequest.onerror = () => resolve({});\n transaction.onerror = () => resolve({});\n } catch {\n resolve({});\n }\n });\n });\n }\n\n /**\n * Set multiple items at once\n * @param items - Object with key-value pairs\n * @param storeName - Optional store name\n */\n public async setMultiple<T>(items: Record<string, T>, storeName?: string): Promise<void> {\n const storeConfig = this._getStoreConfig(storeName);\n const entries = Object.entries(items);\n\n for (let i = 0; i < entries.length; i += Z_INDEXDB_BATCH_SIZE) {\n const batch = entries.slice(i, i + Z_INDEXDB_BATCH_SIZE);\n\n await this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n throw new Error('Database not initialized');\n }\n }\n\n return new Promise<void>((resolve, reject) => {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n\n batch.forEach(([key, value]) => {\n const _key = storeConfig.encrypt !== false ? this._encrypt(key) : key;\n const _value = storeConfig.encrypt !== false ? this._encrypt(value) : value;\n store.put(_value, _key);\n });\n\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n });\n });\n }\n }\n\n /**\n * Get the list of available store names\n */\n public getStoreNames(): string[] {\n return Array.from(this._stores.keys());\n }\n\n /**\n * Check if a store exists\n * @param storeName - Store name to check\n */\n public hasStore(storeName: string): boolean {\n return this._stores.has(storeName);\n }\n\n /**\n * Add a new store (requires database version upgrade)\n * Note: This will cause database reconnection\n * @param config - Store configuration\n */\n public async addStore(config: ZIndexDbStoreConfig): Promise<void> {\n if (this._stores.has(config.name)) {\n return;\n }\n\n this._stores.set(config.name, config);\n this._version += 1;\n this._closeConnection();\n this._dbReady = this._initDb();\n await this._dbReady;\n }\n}\n","/**\n * Z-Subject Service\n * A service for managing reactive subjects (Subject and BehaviorSubject)\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\ntype SubjectType = 'subject' | 'behavior';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZSubjectService {\n private readonly _subjects = new Map<string, Subject<unknown>>();\n private readonly _behaviorSubjects = new Map<string, BehaviorSubject<unknown>>();\n\n /**\n * Emit a value to a subject\n * @param key - Subject identifier\n * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n * @param value - Value to emit\n */\n public emit<T>(key: string, type: SubjectType, value: T): void {\n if (type === 'behavior') {\n const existingSubject = this._behaviorSubjects.get(key) as BehaviorSubject<T> | undefined;\n if (existingSubject) {\n existingSubject.next(value);\n return;\n }\n\n const newSubject = new BehaviorSubject<T>(value);\n this._behaviorSubjects.set(key, newSubject as BehaviorSubject<unknown>);\n return;\n }\n\n const existingSubject = this._subjects.get(key) as Subject<T> | undefined;\n if (existingSubject) {\n existingSubject.next(value);\n return;\n }\n\n const newSubject = new Subject<T>();\n this._subjects.set(key, newSubject as Subject<unknown>);\n newSubject.next(value);\n }\n\n /**\n * Get an observable for a subject\n * @param key - Subject identifier\n * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n * @param initialValue - Initial value for BehaviorSubject (required for new behavior subjects)\n */\n public on$<T>(key: string, type: SubjectType, initialValue?: T): Observable<T> {\n if (type === 'behavior') {\n const existingSubject = this._behaviorSubjects.get(key) as BehaviorSubject<T> | undefined;\n if (existingSubject) {\n return existingSubject.asObservable();\n }\n\n const newSubject = new BehaviorSubject<T>(initialValue as T);\n this._behaviorSubjects.set(key, newSubject as BehaviorSubject<unknown>);\n return newSubject.asObservable();\n }\n\n const existingSubject = this._subjects.get(key) as Subject<T> | undefined;\n if (existingSubject) {\n return existingSubject.asObservable();\n }\n\n const newSubject = new Subject<T>();\n this._subjects.set(key, newSubject as Subject<unknown>);\n return newSubject.asObservable();\n }\n\n /**\n * Get the current value of a BehaviorSubject\n * @param key - Subject identifier\n */\n public getValue<T>(key: string): T | undefined {\n const subject = this._behaviorSubjects.get(key);\n if (!subject) {\n return undefined;\n }\n return subject.getValue() as T;\n }\n\n /**\n * Complete and remove a subject\n * @param key - Subject identifier\n * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n */\n public complete(key: string, type: SubjectType): void {\n if (type === 'behavior') {\n const subject = this._behaviorSubjects.get(key);\n if (!subject) {\n return;\n }\n subject.complete();\n this._behaviorSubjects.delete(key);\n return;\n }\n\n const subject = this._subjects.get(key);\n if (!subject) {\n return;\n }\n subject.complete();\n this._subjects.delete(key);\n }\n\n /**\n * Complete all subjects\n */\n public completeAll(): void {\n this._subjects.forEach(subject => subject.complete());\n this._behaviorSubjects.forEach(subject => subject.complete());\n this._subjects.clear();\n this._behaviorSubjects.clear();\n }\n\n /**\n * Check if a subject exists\n * @param key - Subject identifier\n * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n */\n public has(key: string, type: SubjectType): boolean {\n if (type === 'behavior') {\n return this._behaviorSubjects.has(key);\n }\n return this._subjects.has(key);\n }\n}\n","/**\n * Z-Theme Types\n */\n\nimport { InjectionToken } from '@angular/core';\n\nexport type ZThemeName = 'green' | 'orange' | 'violet' | 'neutral' | 'stone' | 'zinc' | 'gray' | 'slate' | 'hospital';\n\nexport interface ZThemeConfig {\n defaultTheme?: ZThemeName;\n defaultDarkMode?: boolean;\n}\n\nexport const Z_THEME_CONFIG = new InjectionToken<ZThemeConfig>('Z_THEME_CONFIG');\nexport const Z_DEFAULT_THEME: ZThemeName = 'neutral';\nexport const Z_THEME_CACHE_KEY = 'z-theme';\nexport const Z_DARK_MODE_CACHE_KEY = 'z-dark-mode';\n\nexport const Z_THEME_CSS_MAP: Record<ZThemeName, string> = {\n neutral: '',\n green: 'assets/css/themes/green.css',\n orange: 'assets/css/themes/orange.css',\n violet: 'assets/css/themes/violet.css',\n stone: 'assets/css/themes/stone.css',\n zinc: 'assets/css/themes/zinc.css',\n gray: 'assets/css/themes/gray.css',\n slate: 'assets/css/themes/slate.css',\n hospital: 'assets/css/themes/hospital.css',\n};\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport {\n type ZThemeConfig,\n type ZThemeName,\n Z_DARK_MODE_CACHE_KEY,\n Z_DEFAULT_THEME,\n Z_THEME_CACHE_KEY,\n Z_THEME_CONFIG,\n Z_THEME_CSS_MAP,\n} from './types/z-theme.types';\nimport { ZCacheService } from './z-cache.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZThemeService {\n private readonly _document = inject(DOCUMENT);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _config = inject(Z_THEME_CONFIG, { optional: true }) as ZThemeConfig | null;\n private readonly _isBrowser = isPlatformBrowser(this._platformId);\n\n private readonly _defaultTheme = this._config?.defaultTheme ?? Z_DEFAULT_THEME;\n private readonly _defaultDarkMode = this._config?.defaultDarkMode ?? false;\n\n private readonly _isDark = signal(this._getSavedDarkMode());\n private readonly _currentTheme = signal<ZThemeName>(this._getSavedTheme());\n private readonly _loadedThemes = new Set<ZThemeName>(['neutral']);\n\n public readonly isDark = this._isDark.asReadonly();\n public readonly currentTheme = this._currentTheme.asReadonly();\n\n constructor() {\n if (this._isBrowser) {\n this._initializeTheme();\n }\n\n effect(() => {\n const isDark = this._isDark();\n if (this._isBrowser) {\n ZCacheService.set(Z_DARK_MODE_CACHE_KEY, isDark);\n }\n });\n\n effect(() => {\n const theme = this._currentTheme();\n if (this._isBrowser) {\n ZCacheService.set(Z_THEME_CACHE_KEY, theme);\n }\n });\n }\n\n public setTheme(theme: ZThemeName): void {\n this._currentTheme.set(theme);\n\n if (this._loadedThemes.has(theme)) {\n this._document.documentElement.setAttribute('z-theme', theme);\n return;\n }\n\n if (!Z_THEME_CSS_MAP[theme]) {\n this._document.documentElement.setAttribute('z-theme', theme);\n return;\n }\n\n this._loadThemeCSS(theme, () => {\n this._document.documentElement.setAttribute('z-theme', theme);\n });\n }\n\n public toggleDarkMode(isDark: boolean): void {\n this._isDark.set(isDark);\n\n if (isDark) {\n this._document.documentElement.classList.add('dark');\n return;\n }\n\n this._document.documentElement.classList.remove('dark');\n }\n\n public preloadTheme(theme: ZThemeName): void {\n if (this._loadedThemes.has(theme) || !Z_THEME_CSS_MAP[theme]) {\n return;\n }\n\n this._loadThemeCSS(theme);\n }\n\n private _initializeTheme(): void {\n const savedTheme = this._currentTheme();\n const savedDarkMode = this._isDark();\n\n this.setTheme(savedTheme);\n if (savedDarkMode) {\n this.toggleDarkMode(savedDarkMode);\n }\n }\n\n private _getSavedTheme(): ZThemeName {\n if (!this._isBrowser) {\n return this._defaultTheme;\n }\n\n return ZCacheService.get<ZThemeName>(Z_THEME_CACHE_KEY) ?? this._defaultTheme;\n }\n\n private _getSavedDarkMode(): boolean {\n if (!this._isBrowser) {\n return this._defaultDarkMode;\n }\n return ZCacheService.get<boolean>(Z_DARK_MODE_CACHE_KEY) ?? this._defaultDarkMode;\n }\n\n private _loadThemeCSS(theme: ZThemeName, onLoad?: () => void): void {\n const cssPath = Z_THEME_CSS_MAP[theme];\n if (!cssPath) {\n onLoad?.();\n return;\n }\n\n const existingLink = this._document.querySelector(`link[data-theme=\"${theme}\"]`);\n if (existingLink) {\n this._loadedThemes.add(theme);\n onLoad?.();\n return;\n }\n\n const link = this._document.createElement('link');\n link.rel = 'stylesheet';\n link.href = cssPath;\n link.setAttribute('data-theme', theme);\n\n link.onload = (): void => {\n this._loadedThemes.add(theme);\n onLoad?.();\n };\n\n link.onerror = (): void => {\n console.error(`Failed to load theme \"${theme}\" from ${cssPath}`);\n onLoad?.();\n };\n\n this._document.head.appendChild(link);\n }\n}\n","/**\n * Z-Translate Service\n * A translation service with async support and caching\n */\n\nimport { inject, Injectable, signal } from '@angular/core';\nimport { TranslateService, TranslationObject } from '@ngx-translate/core';\nimport { firstValueFrom, Observable } from 'rxjs';\nimport { ZCacheService } from './z-cache.service';\n\nconst LANG_CACHE_KEY = 'Z_LANGUAGE';\nconst DEFAULT_LANG = 'vi';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZTranslateService {\n private readonly _translate = inject(TranslateService);\n\n /** Current language signal */\n public readonly currentLang = signal<string>(DEFAULT_LANG);\n\n /** Available languages */\n public readonly availableLangs = signal<string[]>(['vi', 'en']);\n\n public constructor() {\n this._initialize();\n }\n\n private _initialize(): void {\n const savedLang = ZCacheService.get<string>(LANG_CACHE_KEY) ?? DEFAULT_LANG;\n this._translate.setFallbackLang(DEFAULT_LANG);\n this._translate.use(savedLang);\n this.currentLang.set(savedLang);\n }\n\n /**\n * Change the current language\n * @param lang - Language code\n */\n public use(lang: string): void {\n this._translate.use(lang);\n ZCacheService.set(LANG_CACHE_KEY, lang);\n this.currentLang.set(lang);\n }\n\n /**\n * Get the current language code\n */\n public getLang(): string {\n return this._translate.getCurrentLang() ?? DEFAULT_LANG;\n }\n\n /**\n * Get translation synchronously (returns key if not found)\n * @param key - Translation key\n * @param params - Interpolation parameters\n */\n public instant(key: string, params?: Record<string, unknown>): string {\n if (!key) {\n return '';\n }\n return this._translate.instant(key, params);\n }\n\n /**\n * Get translation asynchronously\n * @param key - Translation key\n * @param params - Interpolation parameters\n */\n public async get(key: string, params?: Record<string, unknown>): Promise<string> {\n if (!key) {\n return '';\n }\n return firstValueFrom(this._translate.get(key, params));\n }\n\n /**\n * Get translation as observable\n * @param key - Translation key\n * @param params - Interpolation parameters\n */\n public get$(key: string, params?: Record<string, unknown>): Observable<string> {\n return this._translate.get(key, params);\n }\n\n /**\n * Stream translations (re-emits on language change)\n * @param key - Translation key\n * @param params - Interpolation parameters\n */\n public stream$(key: string, params?: Record<string, unknown>): Observable<string> {\n return this._translate.stream(key, params);\n }\n\n /**\n * Get multiple translations at once\n * @param keys - Array of translation keys\n * @param params - Interpolation parameters (applied to all)\n */\n public async getMany(keys: string[], params?: Record<string, unknown>): Promise<Record<string, string>> {\n const results: Record<string, string> = {};\n await Promise.all(\n keys.map(async key => {\n results[key] = await this.get(key, params);\n })\n );\n return results;\n }\n\n /**\n * Check if a translation key exists\n * @param key - Translation key\n */\n public has(key: string): boolean {\n const translation = this._translate.instant(key);\n return translation !== key;\n }\n\n /**\n * Add translations dynamically\n * @param lang - Language code\n * @param translations - Translation object\n * @param shouldMerge - Whether to merge with existing translations\n */\n public setTranslation(lang: string, translations: TranslationObject, shouldMerge = true): void {\n this._translate.setTranslation(lang, translations, shouldMerge);\n }\n\n /**\n * Get the underlying TranslateService for advanced usage\n */\n public getNgxTranslate(): TranslateService {\n return this._translate;\n }\n}\n","/**\n * Z-Cache Types\n */\n\n/** Cache entry with TTL */\nexport interface ZCacheEntry<T = unknown> {\n data: T;\n timestamp: number;\n ttl: number;\n}\n\n/** Cache service configuration */\nexport interface ZCacheConfig {\n /** Prefix for cache keys */\n prefix?: string;\n /** Whether to encrypt data */\n encrypt?: boolean;\n}\n","/**\n * Z-Http Types\n */\n\n/** HTTP cache entry */\nexport interface ZHttpCacheEntry<T = unknown> {\n data: T;\n timestamp: number;\n ttl: number;\n}\n\n/** HTTP error response */\nexport interface ZHttpError {\n message: string;\n status: number;\n error?: unknown;\n endpoint?: string;\n method?: string;\n body?: unknown;\n}\n\n/** HTTP request options */\nexport interface ZHttpOptions<TParams extends object = object> {\n params?: TParams;\n headers?: Record<string, string | string[]>;\n enableCache?: boolean;\n timeCache?: number;\n contentType?: 'json' | 'urlencoded' | 'form-data';\n skipToken?: boolean;\n}\n","/**\n * Z-IndexDB Types\n */\n\n/** Configuration for a single IndexedDB store */\nexport interface ZIndexDbStoreConfig {\n /** Name of the store */\n name: string;\n /** Whether to encrypt data (default: true) */\n encrypt?: boolean;\n /** Keys to avoid during clear operation */\n protectedKeys?: string[];\n}\n\n/** Configuration for Z-IndexDB Service */\nexport interface ZIndexDbConfig {\n /** Database name */\n dbName?: string;\n /** Database version */\n version?: number;\n /** Transaction mode */\n mode?: IDBTransactionMode;\n /** Store configurations - supports multiple stores */\n stores?: ZIndexDbStoreConfig[];\n /** Default store name (for backward compatibility) */\n defaultStore?: string;\n /** Keys to avoid during clear operation (global) */\n protectedKeys?: string[];\n}\n","/**\n * Z-Translate Types\n */\n\n/** Translate service configuration */\nexport interface ZTranslateConfig {\n /** Default language */\n defaultLang?: string;\n /** Available languages */\n availableLangs?: string[];\n /** Path to translation files */\n translationPath?: string;\n /** Translation file extension */\n fileExtension?: string;\n}\n\n/** Translate I18n configuration */\nexport interface ZTranslateI18nConfig {\n defaultLang?: string;\n availableLangs?: string[];\n}\n","/**\n * Services types index\n */\n\nexport * from './z-cache.types';\nexport * from './z-http.types';\nexport * from './z-indexdb.types';\nexport * from './z-theme.types';\nexport * from './z-translate.types';\n","/**\n * Services index\n */\n\nexport { ZCacheService } from './z-cache.service';\nexport { ZIndexDbService } from './z-indexdb.service';\nexport { ZSubjectService } from './z-subject.service';\nexport { ZThemeService } from './z-theme.service';\nexport { ZTranslateService } from './z-translate.service';\nexport * from './types';\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-services.mjs","sources":["../../../../libs/core-ui/services/z-cache.service.ts","../../../../libs/core-ui/services/z-indexdb.service.ts","../../../../libs/core-ui/services/z-translate.service.ts","../../../../libs/core-ui/services/z-http-abstract.service.ts","../../../../libs/core-ui/services/z-subject.service.ts","../../../../libs/core-ui/services/types/z-theme.types.ts","../../../../libs/core-ui/services/z-theme.service.ts","../../../../libs/core-ui/services/index.ts","../../../../libs/core-ui/services/shival99-z-ui-services.ts"],"sourcesContent":["import type { ZCacheConfig } from './types/z-cache.types';\n\nconst Z_CACHE_DEFAULT_PREFIX = 'z_';\nexport class ZCacheService {\n private static _prefix = Z_CACHE_DEFAULT_PREFIX;\n private static _encrypt = true;\n\n public static configure(config: ZCacheConfig): void {\n if (config.prefix) {\n ZCacheService._prefix = config.prefix;\n }\n if (config.encrypt !== undefined) {\n ZCacheService._encrypt = config.encrypt;\n }\n }\n\n private static _encode(data: unknown): string {\n const payload = { __z: true, __d: data };\n return btoa(encodeURIComponent(JSON.stringify(payload)));\n }\n\n private static _decode<T>(data: string): T | null {\n try {\n const decoded = JSON.parse(decodeURIComponent(atob(data)));\n if (!decoded.__z) {\n return null;\n }\n return decoded.__d as T;\n } catch {\n return null;\n }\n }\n\n private static _getFullKey(key: string, encrypt: boolean): string {\n const prefixedKey = `${ZCacheService._prefix}${key}`;\n return encrypt ? ZCacheService._encode(prefixedKey) : prefixedKey;\n }\n\n private static _safeOperation<T>(operation: () => T, fallback: T): T {\n try {\n return operation();\n } catch (error) {\n console.error('[ZCache] Operation error:', error);\n return fallback;\n }\n }\n\n /**\n * Get a value from cache\n * @param key - Cache key\n * @param defaultValue - Default value if not found\n * @param encrypt - Whether to use encryption (default: service config)\n */\n public static get<T>(key: string, defaultValue?: T, encrypt = ZCacheService._encrypt): T | undefined {\n return ZCacheService._safeOperation(() => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n const result = localStorage.getItem(_key);\n\n if (!result) {\n return defaultValue;\n }\n\n const data = encrypt ? ZCacheService._decode<T>(result) : (JSON.parse(result) as T);\n return data ?? defaultValue;\n }, defaultValue);\n }\n\n /**\n * Set a value in cache\n * @param key - Cache key\n * @param data - Data to store\n * @param encrypt - Whether to use encryption\n */\n public static set<T>(key: string, data: T, encrypt = ZCacheService._encrypt): boolean {\n return ZCacheService._safeOperation(() => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n const _value = encrypt ? ZCacheService._encode(data) : JSON.stringify(data);\n localStorage.setItem(_key, _value);\n return true;\n }, false);\n }\n\n /**\n * Delete a key from cache\n * @param key - Cache key\n * @param encrypt - Whether key is encrypted\n */\n public static delete(key: string, encrypt = ZCacheService._encrypt): boolean {\n return ZCacheService._safeOperation(() => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n localStorage.removeItem(_key);\n return true;\n }, false);\n }\n\n /**\n * Delete multiple keys from cache\n * @param keys - Array of cache keys\n * @param encrypt - Whether keys are encrypted\n */\n public static deleteMultiple(keys: string[], encrypt = ZCacheService._encrypt): boolean {\n return ZCacheService._safeOperation(() => {\n keys.forEach(key => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n localStorage.removeItem(_key);\n });\n return true;\n }, false);\n }\n\n /**\n * Clear all cache with the configured prefix\n */\n public static clear(): boolean {\n return ZCacheService._safeOperation(() => {\n const keysToRemove: string[] = [];\n const prefixEncoded = ZCacheService._encode(ZCacheService._prefix);\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(ZCacheService._prefix) || key?.startsWith(prefixEncoded)) {\n keysToRemove.push(key);\n }\n }\n\n keysToRemove.forEach(key => localStorage.removeItem(key));\n return true;\n }, false);\n }\n\n /**\n * Check if a key exists in cache\n * @param key - Cache key\n * @param encrypt - Whether key is encrypted\n */\n public static has(key: string, encrypt = ZCacheService._encrypt): boolean {\n return ZCacheService._safeOperation(() => {\n const _key = ZCacheService._getFullKey(key, encrypt);\n return localStorage.getItem(_key) !== null;\n }, false);\n }\n\n /**\n * Get all keys with the configured prefix\n */\n public static keys(): string[] {\n return ZCacheService._safeOperation(() => {\n const result: string[] = [];\n const prefixEncoded = ZCacheService._encode(ZCacheService._prefix);\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(ZCacheService._prefix)) {\n result.push(key.slice(ZCacheService._prefix.length));\n } else if (key?.startsWith(prefixEncoded)) {\n const decoded = ZCacheService._decode<string>(key);\n if (decoded) {\n result.push(decoded.slice(ZCacheService._prefix.length));\n }\n }\n }\n\n return result;\n }, []);\n }\n}\n","import type { ZIndexDbConfig, ZIndexDbStoreConfig } from './types/z-indexdb.types';\n\nconst Z_INDEXDB_DEFAULT_CONFIG: Required<Pick<ZIndexDbConfig, 'dbName' | 'version' | 'mode' | 'defaultStore'>> = {\n dbName: 'ZDatabase',\n version: 1,\n mode: 'readwrite',\n defaultStore: 'ZStore',\n};\n\nconst Z_INDEXDB_BATCH_SIZE = 100;\n\nexport class ZIndexDbService {\n private _db: IDBDatabase | null = null;\n private _dbName: string;\n private _version: number;\n private _mode: IDBTransactionMode;\n private _dbReady: Promise<void>;\n private _stores: Map<string, ZIndexDbStoreConfig> = new Map();\n private _defaultStoreName: string;\n private _globalProtectedKeys: string[];\n\n public constructor(config: ZIndexDbConfig = {}) {\n this._dbName = config.dbName ?? Z_INDEXDB_DEFAULT_CONFIG.dbName;\n this._version = config.version ?? Z_INDEXDB_DEFAULT_CONFIG.version;\n this._mode = config.mode ?? Z_INDEXDB_DEFAULT_CONFIG.mode;\n this._defaultStoreName = config.defaultStore ?? Z_INDEXDB_DEFAULT_CONFIG.defaultStore;\n this._globalProtectedKeys = config.protectedKeys ?? [];\n\n if (config.stores?.length) {\n config.stores.forEach(store => this._stores.set(store.name, store));\n }\n if (!this._stores.has(this._defaultStoreName)) {\n this._stores.set(this._defaultStoreName, { name: this._defaultStoreName, encrypt: true });\n }\n\n this._dbReady = this._initDb();\n }\n\n private _getStoreConfig(storeName?: string): ZIndexDbStoreConfig {\n const name = storeName ?? this._defaultStoreName;\n return this._stores.get(name) ?? { name, encrypt: true };\n }\n\n private _encrypt(data: unknown): string {\n const payload = {\n __z: true,\n __t: typeof data,\n __d: data,\n };\n return btoa(encodeURIComponent(JSON.stringify(payload)));\n }\n\n private _decrypt<T>(data: string): T | null {\n try {\n const decoded = JSON.parse(decodeURIComponent(atob(data)));\n if (!decoded.__z) {\n return null;\n }\n return decoded.__d as T;\n } catch {\n return null;\n }\n }\n\n private _closeConnection(): void {\n if (this._db) {\n this._db.close();\n this._db = null;\n }\n }\n\n private async _reconnect(): Promise<void> {\n console.warn('[ZIndexDb] Reconnecting...');\n this._closeConnection();\n this._dbReady = this._initDb();\n await this._dbReady;\n }\n\n private async _withRetry<T>(operation: () => Promise<T>, retries = 3): Promise<T> {\n let lastError: unknown;\n\n for (let i = 0; i < retries; i++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error;\n if (error instanceof Error && error.name === 'InvalidStateError') {\n await this._reconnect();\n }\n await new Promise(resolve => setTimeout(resolve, Math.pow(2, i) * 100));\n }\n }\n\n throw lastError;\n }\n\n private async _initDb(): Promise<void> {\n if (this._db) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n try {\n const request = indexedDB.open(this._dbName, this._version);\n\n request.onupgradeneeded = event => {\n const db = (event.target as IDBOpenDBRequest).result;\n this._stores.forEach((_, storeName) => {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n });\n };\n\n request.onsuccess = event => {\n this._db = (event.target as IDBOpenDBRequest).result;\n this._db.onerror = e => console.error('[ZIndexDb] Error:', (e.target as IDBRequest).error);\n this._db.onclose = () => {\n console.warn('[ZIndexDb] Connection closed unexpectedly');\n this._db = null;\n };\n resolve();\n };\n\n request.onerror = event => {\n console.error('[ZIndexDb] Open error:', (event.target as IDBOpenDBRequest).error);\n reject((event.target as IDBOpenDBRequest).error);\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Get a value from the store\n * @param key - The key to retrieve\n * @param defaultValue - Default value if key not found\n * @param storeName - Optional store name (uses default if not specified)\n */\n public async get<T>(key: string, defaultValue?: T, storeName?: string): Promise<T | undefined> {\n const storeConfig = this._getStoreConfig(storeName);\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n return defaultValue;\n }\n }\n\n const _key = storeConfig.encrypt !== false ? this._encrypt(key) : key;\n\n return new Promise<T | undefined>(resolve => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], this._mode);\n const store = transaction.objectStore(storeConfig.name);\n const request = store.get(_key);\n\n request.onsuccess = () => {\n try {\n const { result } = request;\n if (!result) {\n resolve(defaultValue);\n return;\n }\n const decrypted = storeConfig.encrypt !== false ? this._decrypt<T>(result) : result;\n resolve(decrypted ?? defaultValue);\n } catch {\n resolve(defaultValue);\n }\n };\n\n request.onerror = () => resolve(defaultValue);\n transaction.onerror = () => resolve(defaultValue);\n } catch {\n resolve(defaultValue);\n }\n });\n });\n }\n\n /**\n * Set a value in the store\n * @param key - The key to set\n * @param value - The value to store\n * @param storeName - Optional store name\n */\n public async set<T>(key: string, value: T, storeName?: string): Promise<void> {\n const storeConfig = this._getStoreConfig(storeName);\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n throw new Error('Database not initialized');\n }\n }\n\n const _key = storeConfig.encrypt !== false ? this._encrypt(key) : key;\n const _value = storeConfig.encrypt !== false ? this._encrypt(value) : value;\n\n return new Promise<void>((resolve, reject) => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n const request = store.put(_value, _key);\n\n request.onerror = () => reject(request.error);\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n\n /**\n * Delete a key from the store\n * @param key - Key or array of keys to delete\n * @param storeName - Optional store name\n */\n public async delete(key: string | string[], storeName?: string): Promise<void> {\n const storeConfig = this._getStoreConfig(storeName);\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n throw new Error('Database not initialized');\n }\n }\n\n const keys = Array.isArray(key) ? key : [key];\n\n return new Promise<void>((resolve, reject) => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n\n keys.forEach(k => {\n const _key = storeConfig.encrypt !== false ? this._encrypt(k) : k;\n store.delete(_key);\n });\n\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n\n /**\n * Clear all data from a store (respecting protected keys)\n * @param storeName - Optional store name\n */\n public async clear(storeName?: string): Promise<void> {\n const storeConfig = this._getStoreConfig(storeName);\n const protectedKeys = [...this._globalProtectedKeys, ...(storeConfig.protectedKeys ?? [])];\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n throw new Error('Database not initialized');\n }\n }\n\n if (protectedKeys.length === 0) {\n return new Promise<void>((resolve, reject) => {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n const request = store.clear();\n\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n\n return new Promise<void>((resolve, reject) => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n const keyRequest = store.getAllKeys();\n\n keyRequest.onsuccess = () => {\n const allKeys = keyRequest.result as string[];\n const encryptedProtected = protectedKeys.map(k => this._encrypt(k));\n\n allKeys.forEach(k => {\n if (!encryptedProtected.includes(k) && !protectedKeys.includes(k)) {\n try {\n const decrypted = this._decrypt<string>(k);\n if (!protectedKeys.includes(decrypted ?? '')) {\n store.delete(k);\n }\n } catch {\n store.delete(k);\n }\n }\n });\n };\n\n keyRequest.onerror = () => reject(keyRequest.error);\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n\n /**\n * Get all items from a store\n * @param storeName - Optional store name\n */\n public async getAll<T = unknown>(storeName?: string): Promise<Record<string, T>> {\n const storeConfig = this._getStoreConfig(storeName);\n\n return this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n return {};\n }\n }\n\n return new Promise<Record<string, T>>(resolve => {\n try {\n const transaction = this._db!.transaction([storeConfig.name], this._mode);\n const store = transaction.objectStore(storeConfig.name);\n const keysRequest = store.getAllKeys();\n const valuesRequest = store.getAll();\n const results: Record<string, T> = {};\n\n keysRequest.onsuccess = () => {\n const keys = keysRequest.result;\n const values = valuesRequest.result;\n\n keys.forEach((key, index) => {\n if (typeof key === 'string') {\n try {\n const _key = storeConfig.encrypt !== false ? this._decrypt<string>(key) : key;\n const _value = storeConfig.encrypt !== false ? this._decrypt<T>(values[index]) : values[index];\n if (_key && _value !== null) {\n results[_key] = _value;\n }\n } catch {\n // Skip invalid entries\n }\n }\n });\n\n resolve(results);\n };\n\n keysRequest.onerror = () => resolve({});\n transaction.onerror = () => resolve({});\n } catch {\n resolve({});\n }\n });\n });\n }\n\n /**\n * Set multiple items at once\n * @param items - Object with key-value pairs\n * @param storeName - Optional store name\n */\n public async setMultiple<T>(items: Record<string, T>, storeName?: string): Promise<void> {\n const storeConfig = this._getStoreConfig(storeName);\n const entries = Object.entries(items);\n\n for (let i = 0; i < entries.length; i += Z_INDEXDB_BATCH_SIZE) {\n const batch = entries.slice(i, i + Z_INDEXDB_BATCH_SIZE);\n\n await this._withRetry(async () => {\n await this._dbReady;\n\n if (!this._db) {\n await this._reconnect();\n if (!this._db) {\n throw new Error('Database not initialized');\n }\n }\n\n return new Promise<void>((resolve, reject) => {\n const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n const store = transaction.objectStore(storeConfig.name);\n\n batch.forEach(([key, value]) => {\n const _key = storeConfig.encrypt !== false ? this._encrypt(key) : key;\n const _value = storeConfig.encrypt !== false ? this._encrypt(value) : value;\n store.put(_value, _key);\n });\n\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n });\n });\n }\n }\n\n /**\n * Get the list of available store names\n */\n public getStoreNames(): string[] {\n return Array.from(this._stores.keys());\n }\n\n /**\n * Check if a store exists\n * @param storeName - Store name to check\n */\n public hasStore(storeName: string): boolean {\n return this._stores.has(storeName);\n }\n\n /**\n * Add a new store (requires database version upgrade)\n * Note: This will cause database reconnection\n * @param config - Store configuration\n */\n public async addStore(config: ZIndexDbStoreConfig): Promise<void> {\n if (this._stores.has(config.name)) {\n return;\n }\n\n this._stores.set(config.name, config);\n this._version += 1;\n this._closeConnection();\n this._dbReady = this._initDb();\n await this._dbReady;\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { TranslateService, TranslationObject } from '@ngx-translate/core';\nimport { firstValueFrom, Observable } from 'rxjs';\nimport { ZCacheService } from './z-cache.service';\n\nconst LANG_CACHE_KEY = 'Z_LANGUAGE';\nconst DEFAULT_LANG = 'vi';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZTranslateService {\n private readonly _translate = inject(TranslateService);\n\n public readonly currentLang = signal<string>(DEFAULT_LANG);\n public readonly availableLangs = signal<string[]>(['vi', 'en']);\n\n public constructor() {\n this._initialize();\n }\n\n private _initialize(): void {\n const savedLang = ZCacheService.get<string>(LANG_CACHE_KEY) ?? DEFAULT_LANG;\n this._translate.setFallbackLang(DEFAULT_LANG);\n this._translate.use(savedLang);\n this.currentLang.set(savedLang);\n }\n\n /**\n * Change the current language\n * @param lang - Language code\n */\n public use(lang: string): void {\n this._translate.use(lang);\n ZCacheService.set(LANG_CACHE_KEY, lang);\n this.currentLang.set(lang);\n }\n\n /**\n * Get the current language code\n */\n public getLang(): string {\n return this._translate.getCurrentLang() ?? DEFAULT_LANG;\n }\n\n /**\n * Get translation synchronously (returns key if not found)\n * @param key - Translation key\n * @param params - Interpolation parameters\n */\n public instant(key: string, params?: Record<string, unknown>): string {\n if (!key) {\n return '';\n }\n return this._translate.instant(key, params);\n }\n\n /**\n * Get translation asynchronously\n * @param key - Translation key\n * @param params - Interpolation parameters\n */\n public async get(key: string, params?: Record<string, unknown>): Promise<string> {\n if (!key) {\n return '';\n }\n return firstValueFrom(this._translate.get(key, params));\n }\n\n /**\n * Get translation as observable\n * @param key - Translation key\n * @param params - Interpolation parameters\n */\n public get$(key: string, params?: Record<string, unknown>): Observable<string> {\n return this._translate.get(key, params);\n }\n\n /**\n * Stream translations (re-emits on language change)\n * @param key - Translation key\n * @param params - Interpolation parameters\n */\n public stream$(key: string, params?: Record<string, unknown>): Observable<string> {\n return this._translate.stream(key, params);\n }\n\n /**\n * Get multiple translations at once\n * @param keys - Array of translation keys\n * @param params - Interpolation parameters (applied to all)\n */\n public async getMany(keys: string[], params?: Record<string, unknown>): Promise<Record<string, string>> {\n const results: Record<string, string> = {};\n await Promise.all(\n keys.map(async key => {\n results[key] = await this.get(key, params);\n })\n );\n return results;\n }\n\n /**\n * Check if a translation key exists\n * @param key - Translation key\n */\n public has(key: string): boolean {\n const translation = this._translate.instant(key);\n return translation !== key;\n }\n\n /**\n * Add translations dynamically\n * @param lang - Language code\n * @param translations - Translation object\n * @param shouldMerge - Whether to merge with existing translations\n */\n public setTranslation(lang: string, translations: TranslationObject, shouldMerge = true): void {\n this._translate.setTranslation(lang, translations, shouldMerge);\n }\n\n /**\n * Get the underlying TranslateService for advanced usage\n */\n public getNgxTranslate(): TranslateService {\n return this._translate;\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { catchError, defer, from, map, Observable, of, switchMap, tap, throwError } from 'rxjs';\nimport type {\n ZHttpCacheEntry,\n ZHttpConfig,\n ZHttpContentType,\n ZHttpError,\n ZHttpNetworkCheck,\n ZHttpOptions,\n} from './types/z-http.types';\nimport { ZCacheService } from './z-cache.service';\nimport { ZIndexDbService } from './z-indexdb.service';\nimport { ZTranslateService } from './z-translate.service';\n\nconst Z_HTTP_DEFAULT_CONFIG: Required<ZHttpConfig> = {\n defaultCacheTime: 3 * 60 * 1000,\n networkCheckCacheTime: 10000,\n tokenKey: 'Z_TOKEN',\n userInfoKey: 'Z_USER_INFO',\n lastUrlKey: 'Z_LAST_URL',\n loginRoute: '/login',\n homeRoute: '/',\n};\n\n@Injectable()\nexport abstract class ZHttpAbstractService<TApiType extends string = string> {\n protected readonly http = inject(HttpClient);\n protected readonly router = inject(Router);\n protected readonly cacheService = ZCacheService;\n protected readonly translateService = inject(ZTranslateService);\n protected readonly indexDbService: ZIndexDbService;\n protected readonly config: Required<ZHttpConfig> = Z_HTTP_DEFAULT_CONFIG;\n\n private _networkCache: ZHttpNetworkCheck | null = null;\n\n public constructor() {\n this.indexDbService = new ZIndexDbService({\n dbName: 'ZHttpCache',\n defaultStore: 'HttpCache',\n stores: [{ name: 'HttpCache', encrypt: false }],\n });\n }\n\n protected abstract resolveBaseUrl(apiType?: TApiType): string;\n\n protected get<T, TParams extends object = object>(\n endpoint: string,\n options?: ZHttpOptions<TParams, TApiType>\n ): Observable<T> {\n const httpCall = (): Observable<T> => {\n const { headers, params } = this._buildRequest(options);\n const httpOptions = this._buildHttpOptions({ ...options, headers, params });\n const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n return this.http.get<T>(url, httpOptions) as Observable<T>;\n };\n\n return this._handleCacheAndRequest('GET', endpoint, httpCall, options);\n }\n\n protected post<T, TParams extends object = object>(\n endpoint: string,\n body: unknown,\n options?: ZHttpOptions<TParams, TApiType>\n ): Observable<T> {\n const httpCall = (): Observable<T> => {\n const { headers, body: transformedBody } = this._buildRequest(options, body);\n const httpOptions = this._buildHttpOptions({ ...options, headers });\n const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n return this.http.post<T>(url, transformedBody, httpOptions) as Observable<T>;\n };\n\n return this._handleCacheAndRequest('POST', endpoint, httpCall, options, body);\n }\n\n protected put<T, TParams extends object = object>(\n endpoint: string,\n body: unknown,\n options?: ZHttpOptions<TParams, TApiType>\n ): Observable<T> {\n const httpCall = (): Observable<T> => {\n const { headers, body: transformedBody } = this._buildRequest(options, body);\n const httpOptions = this._buildHttpOptions({ ...options, headers });\n const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n return this.http.put<T>(url, transformedBody, httpOptions) as Observable<T>;\n };\n\n return this._handleCacheAndRequest('PUT', endpoint, httpCall, options, body);\n }\n\n protected patch<T, TParams extends object = object>(\n endpoint: string,\n body: unknown,\n options?: ZHttpOptions<TParams, TApiType>\n ): Observable<T> {\n const httpCall = (): Observable<T> => {\n const { headers, body: transformedBody } = this._buildRequest(options, body);\n const httpOptions = this._buildHttpOptions({ ...options, headers });\n const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n return this.http.patch<T>(url, transformedBody, httpOptions) as Observable<T>;\n };\n\n return this._handleCacheAndRequest('PATCH', endpoint, httpCall, options, body);\n }\n\n protected delete<T, TParams extends object = object>(\n endpoint: string,\n body?: unknown,\n options?: ZHttpOptions<TParams, TApiType>\n ): Observable<T> {\n const httpCall = (): Observable<T> => {\n const { headers, body: transformedBody } = this._buildRequest(options, body);\n const httpOptions = this._buildHttpOptions({\n ...options,\n headers,\n body: transformedBody,\n });\n if ('transferCache' in httpOptions) {\n delete httpOptions['transferCache'];\n }\n const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n return this.http.delete<T>(url, httpOptions) as Observable<T>;\n };\n\n return this._handleCacheAndRequest('DELETE', endpoint, httpCall, options, body);\n }\n\n private _buildRequest(\n options?: ZHttpOptions<object, TApiType>,\n body?: unknown\n ): { headers: HttpHeaders; body?: unknown; params?: Record<string, string> } {\n let headers = new HttpHeaders().set('Accept', 'application/json');\n const contentType: ZHttpContentType = options?.contentType ?? 'json';\n let finalBody = body;\n let params: Record<string, string> | undefined;\n\n if (contentType === 'json') {\n headers = headers.set('Content-Type', 'application/json');\n if (body !== undefined && body !== null) {\n finalBody = JSON.stringify(body);\n }\n }\n\n if (contentType === 'urlencoded') {\n headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');\n if (body && typeof body === 'object') {\n const urlParams = new URLSearchParams();\n Object.entries(body).forEach(([key, value]) => {\n urlParams.set(key, String(value));\n });\n finalBody = urlParams.toString();\n }\n }\n\n if (contentType === 'form-data') {\n if (body instanceof FormData) {\n finalBody = body;\n }\n if (!(body instanceof FormData) && body && typeof body === 'object') {\n const formData = new FormData();\n Object.entries(body).forEach(([key, value]) => {\n formData.append(key, value as string | Blob);\n });\n finalBody = formData;\n }\n }\n\n if (options?.headers && !(options.headers instanceof HttpHeaders)) {\n const headersObj = options.headers as Record<string, string | string[]>;\n Object.keys(headersObj).forEach(key => {\n const value = headersObj[key];\n headers = headers.set(key, Array.isArray(value) ? value.join(',') : value);\n });\n }\n\n const token = this.cacheService.get<string>(this.config.tokenKey);\n if (token && !options?.skipToken) {\n headers = headers.set('Authorization', `Bearer ${token}`);\n }\n\n if (options?.params && !(options.params instanceof Object.getPrototypeOf(URLSearchParams).constructor)) {\n const paramsObj = options.params as Record<string, unknown>;\n params = {};\n Object.keys(paramsObj).forEach(key => {\n const value = paramsObj[key];\n if (value !== undefined && value !== null) {\n params![key] = String(value);\n }\n });\n }\n\n return { headers, body: finalBody, params };\n }\n\n private _buildHttpOptions(options?: ZHttpOptions<object, TApiType>): Record<string, unknown> {\n const httpOptions: Record<string, unknown> = { ...options };\n delete httpOptions['enableCache'];\n delete httpOptions['timeCache'];\n delete httpOptions['contentType'];\n delete httpOptions['api'];\n delete httpOptions['skipToken'];\n delete httpOptions['skipErrorToast'];\n return httpOptions;\n }\n\n private _handleCacheAndRequest<T>(\n method: string,\n endpoint: string,\n httpCall: () => Observable<T>,\n options?: ZHttpOptions<object, TApiType>,\n body?: unknown\n ): Observable<T> {\n if (!options?.enableCache) {\n return this._executeHttpCall(httpCall, options, method, endpoint, body);\n }\n\n const cacheKey = this._generateCacheKey(method, endpoint, options, body);\n\n return from(this._getCachedData<T>(cacheKey)).pipe(\n switchMap(cachedData => {\n if (cachedData !== null) {\n return of(cachedData);\n }\n return this._executeHttpCall(httpCall, options, method, endpoint, body);\n }),\n catchError(() => this._executeHttpCall(httpCall, options, method, endpoint, body))\n );\n }\n\n private _executeHttpCall<T>(\n httpCall: () => Observable<T>,\n options?: ZHttpOptions<object, TApiType>,\n method?: string,\n endpoint?: string,\n body?: unknown\n ): Observable<T> {\n return this._detectNetworkStatus().pipe(\n switchMap(isOnline => {\n if (!isOnline) {\n const error: ZHttpError<TApiType> = {\n message: this.translateService.instant('i18n_z_ui_http_network_offline'),\n status: 0,\n };\n return throwError(() => error);\n }\n\n return httpCall().pipe(\n catchError(err => this._handleError(err, options, method, endpoint, body)),\n tap(data => {\n if (options?.enableCache && method && endpoint) {\n const cacheKey = this._generateCacheKey(method, endpoint, options, body);\n const ttl = options.timeCache ?? this.config.defaultCacheTime;\n this._cacheData(cacheKey, data, ttl).catch(console.warn);\n }\n })\n );\n })\n );\n }\n\n private _generateCacheKey(\n method: string,\n endpoint: string,\n options?: ZHttpOptions<object, TApiType>,\n body?: unknown\n ): string {\n const api = options?.api ?? 'default';\n const params = options?.params ? JSON.stringify(options.params) : '';\n const bodyStr = body ? JSON.stringify(body) : '';\n return `${method}_${api}_${endpoint}_${params}_${bodyStr}`;\n }\n\n private async _cacheData<T>(key: string, data: T, ttl: number): Promise<void> {\n const cacheEntry: ZHttpCacheEntry<T> = { data, timestamp: Date.now(), ttl };\n await this.indexDbService.set(key, cacheEntry, 'HttpCache');\n }\n\n private async _getCachedData<T>(key: string): Promise<T | null> {\n try {\n const cached = await this.indexDbService.get<ZHttpCacheEntry<T>>(key, undefined, 'HttpCache');\n if (!cached) {\n return null;\n }\n\n if (Date.now() - cached.timestamp > cached.ttl) {\n await this.indexDbService.delete(key, 'HttpCache');\n return null;\n }\n return cached.data;\n } catch {\n return null;\n }\n }\n\n private _detectNetworkStatus(): Observable<boolean> {\n const now = Date.now();\n if (this._networkCache && now - this._networkCache.time < this.config.networkCheckCacheTime) {\n return of(this._networkCache.isOnline);\n }\n\n if (!navigator.onLine) {\n this._networkCache = { time: now, isOnline: false };\n return of(false);\n }\n\n return this._checkNetworkWithRetry().pipe(\n map(isOnline => {\n this._networkCache = { time: Date.now(), isOnline };\n return isOnline;\n }),\n catchError(() => {\n this._networkCache = { time: Date.now(), isOnline: false };\n return of(false);\n })\n );\n }\n\n private _checkNetworkWithRetry(retries = 2): Observable<boolean> {\n return defer(() => this._performNetworkCheck()).pipe(\n catchError(() => {\n if (retries > 0) {\n return this._checkNetworkWithRetry(retries - 1);\n }\n return of(false);\n })\n );\n }\n\n private _performNetworkCheck(): Observable<boolean> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 3000);\n\n return from(fetch('data:,', { method: 'HEAD', signal: controller.signal })).pipe(\n tap(() => clearTimeout(timeoutId)),\n map(() => true),\n catchError(() => {\n clearTimeout(timeoutId);\n throw new Error('Network check failed');\n })\n );\n }\n\n private _handleError(\n error: Error,\n options?: ZHttpOptions<object, TApiType>,\n method?: string,\n endpoint?: string,\n body?: unknown\n ): Observable<never> {\n const statusCode = error instanceof HttpErrorResponse ? error.status : 500;\n const fullEndpoint = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n\n const httpError = this._buildErrorObject(error, statusCode, fullEndpoint, method, body, options);\n const localizedError = this._localizeError(httpError, statusCode);\n\n console.error('[ZHttp] Request failed:', {\n method,\n endpoint: fullEndpoint,\n status: statusCode,\n error: localizedError,\n });\n\n this._handleStatusCode(statusCode);\n\n return throwError(() => localizedError);\n }\n\n private _buildErrorObject(\n error: Error,\n statusCode: number,\n endpoint: string,\n method?: string,\n body?: unknown,\n options?: ZHttpOptions<object, TApiType>\n ): ZHttpError<TApiType> {\n const baseError: ZHttpError<TApiType> = { message: '', status: statusCode, endpoint, method, body, options };\n\n if (!(error instanceof HttpErrorResponse)) {\n return {\n ...baseError,\n error: error.message,\n message: error.message || this.translateService.instant('i18n_z_ui_http_error_default'),\n };\n }\n\n const errorBody = error.error;\n\n if (typeof errorBody?.message === 'string') {\n const message =\n errorBody.message === 'Failed to fetch'\n ? this.translateService.instant('i18n_z_ui_http_error_failed_to_fetch', { url: endpoint })\n : errorBody.message;\n return { ...baseError, error: errorBody, message };\n }\n\n if (Array.isArray(errorBody?.errors) && errorBody.errors.length > 0) {\n const message = errorBody.errors\n .map((err: unknown) => (typeof err === 'string' ? err : JSON.stringify(err)))\n .join(', ');\n return { ...baseError, error: errorBody, message };\n }\n\n if (\n typeof errorBody === 'object' &&\n errorBody !== null &&\n !Array.isArray(errorBody) &&\n Object.keys(errorBody).length > 0\n ) {\n return { ...baseError, error: errorBody, message: JSON.stringify(errorBody) };\n }\n\n if (typeof errorBody === 'string') {\n return { ...baseError, error: errorBody, message: errorBody };\n }\n\n return {\n ...baseError,\n error: error.message,\n message: error.message || this.translateService.instant('i18n_z_ui_http_error_default'),\n };\n }\n\n private _localizeError(error: ZHttpError<TApiType>, statusCode: number): ZHttpError<TApiType> {\n const localizedError = { ...error };\n\n const errorMessages: Record<number, string> = {\n 400: error.message || this.translateService.instant('i18n_z_ui_http_error_400'),\n 401: this._get401Message(),\n 403: this.translateService.instant('i18n_z_ui_http_error_403'),\n 404: this.translateService.instant('i18n_z_ui_http_error_404'),\n 500: this.translateService.instant('i18n_z_ui_http_error_500'),\n };\n\n if (errorMessages[statusCode]) {\n localizedError.message = errorMessages[statusCode];\n }\n\n return localizedError;\n }\n\n private _get401Message(): string {\n const userInfo = this.cacheService.get<{ timeExpired?: number }>(this.config.userInfoKey);\n const isExpired = userInfo?.timeExpired ? Date.now() >= userInfo.timeExpired : false;\n\n if (isExpired) {\n return this.translateService.instant('i18n_z_ui_http_error_401_expired');\n }\n return this.translateService.instant('i18n_z_ui_http_error_401_permission');\n }\n\n private _handleStatusCode(statusCode: number): void {\n if (statusCode !== 401) {\n return;\n }\n\n const userInfo = this.cacheService.get<{ timeExpired?: number }>(this.config.userInfoKey);\n const isExpired = userInfo?.timeExpired ? Date.now() >= userInfo.timeExpired : false;\n\n if (isExpired) {\n this.indexDbService.clear('HttpCache').catch(console.error);\n this.cacheService.deleteMultiple([this.config.tokenKey, this.config.userInfoKey]);\n this.router.navigate([this.config.loginRoute]).catch(console.error);\n return;\n }\n\n this.router.navigate([this.config.homeRoute]).catch(console.error);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\ntype SubjectType = 'subject' | 'behavior';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZSubjectService {\n private readonly _subjects = new Map<string, Subject<unknown>>();\n private readonly _behaviorSubjects = new Map<string, BehaviorSubject<unknown>>();\n\n /**\n * Emit a value to a subject\n * @param key - Subject identifier\n * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n * @param value - Value to emit\n */\n public emit<T>(key: string, type: SubjectType, value: T): void {\n if (type === 'behavior') {\n const existingSubject = this._behaviorSubjects.get(key) as BehaviorSubject<T> | undefined;\n if (existingSubject) {\n existingSubject.next(value);\n return;\n }\n\n const newSubject = new BehaviorSubject<T>(value);\n this._behaviorSubjects.set(key, newSubject as BehaviorSubject<unknown>);\n return;\n }\n\n const existingSubject = this._subjects.get(key) as Subject<T> | undefined;\n if (existingSubject) {\n existingSubject.next(value);\n return;\n }\n\n const newSubject = new Subject<T>();\n this._subjects.set(key, newSubject as Subject<unknown>);\n newSubject.next(value);\n }\n\n /**\n * Get an observable for a subject\n * @param key - Subject identifier\n * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n * @param initialValue - Initial value for BehaviorSubject (required for new behavior subjects)\n */\n public on$<T>(key: string, type: SubjectType, initialValue?: T): Observable<T> {\n if (type === 'behavior') {\n const existingSubject = this._behaviorSubjects.get(key) as BehaviorSubject<T> | undefined;\n if (existingSubject) {\n return existingSubject.asObservable();\n }\n\n const newSubject = new BehaviorSubject<T>(initialValue as T);\n this._behaviorSubjects.set(key, newSubject as BehaviorSubject<unknown>);\n return newSubject.asObservable();\n }\n\n const existingSubject = this._subjects.get(key) as Subject<T> | undefined;\n if (existingSubject) {\n return existingSubject.asObservable();\n }\n\n const newSubject = new Subject<T>();\n this._subjects.set(key, newSubject as Subject<unknown>);\n return newSubject.asObservable();\n }\n\n /**\n * Get the current value of a BehaviorSubject\n * @param key - Subject identifier\n */\n public getValue<T>(key: string): T | undefined {\n const subject = this._behaviorSubjects.get(key);\n if (!subject) {\n return undefined;\n }\n return subject.getValue() as T;\n }\n\n /**\n * Complete and remove a subject\n * @param key - Subject identifier\n * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n */\n public complete(key: string, type: SubjectType): void {\n if (type === 'behavior') {\n const subject = this._behaviorSubjects.get(key);\n if (!subject) {\n return;\n }\n subject.complete();\n this._behaviorSubjects.delete(key);\n return;\n }\n\n const subject = this._subjects.get(key);\n if (!subject) {\n return;\n }\n subject.complete();\n this._subjects.delete(key);\n }\n\n /**\n * Complete all subjects\n */\n public completeAll(): void {\n this._subjects.forEach(subject => subject.complete());\n this._behaviorSubjects.forEach(subject => subject.complete());\n this._subjects.clear();\n this._behaviorSubjects.clear();\n }\n\n /**\n * Check if a subject exists\n * @param key - Subject identifier\n * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n */\n public has(key: string, type: SubjectType): boolean {\n if (type === 'behavior') {\n return this._behaviorSubjects.has(key);\n }\n return this._subjects.has(key);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type ZThemeName = 'green' | 'orange' | 'violet' | 'neutral' | 'stone' | 'zinc' | 'gray' | 'slate' | 'hospital';\n\nexport interface ZThemeConfig {\n defaultTheme?: ZThemeName;\n defaultDarkMode?: boolean;\n}\n\nexport const Z_THEME_CONFIG = new InjectionToken<ZThemeConfig>('Z_THEME_CONFIG');\nexport const Z_DEFAULT_THEME: ZThemeName = 'neutral';\nexport const Z_THEME_CACHE_KEY = 'z-theme';\nexport const Z_DARK_MODE_CACHE_KEY = 'z-dark-mode';\n\nexport const Z_THEME_CSS_MAP: Record<ZThemeName, string> = {\n neutral: '',\n green: 'assets/css/themes/green.css',\n orange: 'assets/css/themes/orange.css',\n violet: 'assets/css/themes/violet.css',\n stone: 'assets/css/themes/stone.css',\n zinc: 'assets/css/themes/zinc.css',\n gray: 'assets/css/themes/gray.css',\n slate: 'assets/css/themes/slate.css',\n hospital: 'assets/css/themes/hospital.css',\n};\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport {\n type ZThemeConfig,\n type ZThemeName,\n Z_DARK_MODE_CACHE_KEY,\n Z_DEFAULT_THEME,\n Z_THEME_CACHE_KEY,\n Z_THEME_CONFIG,\n Z_THEME_CSS_MAP,\n} from './types/z-theme.types';\nimport { ZCacheService } from './z-cache.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ZThemeService {\n private readonly _document = inject(DOCUMENT);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _config = inject(Z_THEME_CONFIG, { optional: true }) as ZThemeConfig | null;\n private readonly _isBrowser = isPlatformBrowser(this._platformId);\n\n private readonly _defaultTheme = this._config?.defaultTheme ?? Z_DEFAULT_THEME;\n private readonly _defaultDarkMode = this._config?.defaultDarkMode ?? false;\n\n private readonly _isDark = signal(this._getSavedDarkMode());\n private readonly _currentTheme = signal<ZThemeName>(this._getSavedTheme());\n private readonly _loadedThemes = new Set<ZThemeName>(['neutral']);\n\n public readonly isDark = this._isDark.asReadonly();\n public readonly currentTheme = this._currentTheme.asReadonly();\n\n constructor() {\n if (this._isBrowser) {\n this._initializeTheme();\n }\n\n effect(() => {\n const isDark = this._isDark();\n if (this._isBrowser) {\n ZCacheService.set(Z_DARK_MODE_CACHE_KEY, isDark);\n }\n });\n\n effect(() => {\n const theme = this._currentTheme();\n if (this._isBrowser) {\n ZCacheService.set(Z_THEME_CACHE_KEY, theme);\n }\n });\n }\n\n public setTheme(theme: ZThemeName): void {\n this._currentTheme.set(theme);\n\n if (this._loadedThemes.has(theme)) {\n this._document.documentElement.setAttribute('z-theme', theme);\n return;\n }\n\n if (!Z_THEME_CSS_MAP[theme]) {\n this._document.documentElement.setAttribute('z-theme', theme);\n return;\n }\n\n this._loadThemeCSS(theme, () => {\n this._document.documentElement.setAttribute('z-theme', theme);\n });\n }\n\n public toggleDarkMode(isDark: boolean): void {\n this._isDark.set(isDark);\n\n if (isDark) {\n this._document.documentElement.classList.add('dark');\n return;\n }\n\n this._document.documentElement.classList.remove('dark');\n }\n\n public preloadTheme(theme: ZThemeName): void {\n if (this._loadedThemes.has(theme) || !Z_THEME_CSS_MAP[theme]) {\n return;\n }\n\n this._loadThemeCSS(theme);\n }\n\n private _initializeTheme(): void {\n const savedTheme = this._currentTheme();\n const savedDarkMode = this._isDark();\n\n this.setTheme(savedTheme);\n if (savedDarkMode) {\n this.toggleDarkMode(savedDarkMode);\n }\n }\n\n private _getSavedTheme(): ZThemeName {\n if (!this._isBrowser) {\n return this._defaultTheme;\n }\n\n return ZCacheService.get<ZThemeName>(Z_THEME_CACHE_KEY) ?? this._defaultTheme;\n }\n\n private _getSavedDarkMode(): boolean {\n if (!this._isBrowser) {\n return this._defaultDarkMode;\n }\n return ZCacheService.get<boolean>(Z_DARK_MODE_CACHE_KEY) ?? this._defaultDarkMode;\n }\n\n private _loadThemeCSS(theme: ZThemeName, onLoad?: () => void): void {\n const cssPath = Z_THEME_CSS_MAP[theme];\n if (!cssPath) {\n onLoad?.();\n return;\n }\n\n const existingLink = this._document.querySelector(`link[data-theme=\"${theme}\"]`);\n if (existingLink) {\n this._loadedThemes.add(theme);\n onLoad?.();\n return;\n }\n\n const link = this._document.createElement('link');\n link.rel = 'stylesheet';\n link.href = cssPath;\n link.setAttribute('data-theme', theme);\n\n link.onload = (): void => {\n this._loadedThemes.add(theme);\n onLoad?.();\n };\n\n link.onerror = (): void => {\n console.error(`Failed to load theme \"${theme}\" from ${cssPath}`);\n onLoad?.();\n };\n\n this._document.head.appendChild(link);\n }\n}\n","/**\n * Services index\n */\n\nexport { ZCacheService } from './z-cache.service';\nexport { ZHttpAbstractService } from './z-http-abstract.service';\nexport { ZIndexDbService } from './z-indexdb.service';\nexport { ZSubjectService } from './z-subject.service';\nexport { ZThemeService } from './z-theme.service';\nexport { ZTranslateService } from './z-translate.service';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -6,14 +6,18 @@ import { twMerge } from 'tailwind-merge';
6
6
  import * as echarts from 'echarts';
7
7
  import { FormGroup, FormArray } from '@angular/forms';
8
8
 
9
- /**
10
- * Z-Common Utils
11
- * Common utility functions for z-ui library
12
- * All functions are prefixed with 'z' for consistency
13
- */
14
- /** Merge Tailwind CSS classes with clsx */
9
+ const Z_DIVIDE_SCALE = {
10
+ none: 1,
11
+ thousand: 1_000,
12
+ million: 1_000_000,
13
+ billion: 1_000_000_000,
14
+ };
15
+ const Z_LOCALE_MAP = {
16
+ vi: 'vi-VN',
17
+ en: 'en-US',
18
+ };
19
+
15
20
  const zMergeClasses = (...inputs) => twMerge(clsx(inputs));
16
- /** Transform boolean-like values to boolean */
17
21
  const zTransform = (value) => {
18
22
  if (typeof value === 'string') {
19
23
  return value === '';
@@ -23,13 +27,33 @@ const zTransform = (value) => {
23
27
  }
24
28
  return value;
25
29
  };
26
- /** Generate a unique ID with optional prefix */
27
30
  const zGenerateId = (prefix = '') => {
28
31
  const id = crypto.randomUUID();
29
32
  return prefix ? `${prefix}-${id}` : id;
30
33
  };
31
34
  const zNoop = () => void 0;
32
- /** Simple UUID generator */
35
+ const zFormatNum = (value, options = {}) => {
36
+ const { divide = 'none', format = '1.0-2', percent = false, emptyCheck = 'strict', locale = 'vi', placeholder = '-', } = options;
37
+ if (value === null || value === undefined) {
38
+ return placeholder;
39
+ }
40
+ const numValue = Number(value);
41
+ if (Number.isNaN(numValue)) {
42
+ return placeholder;
43
+ }
44
+ if (emptyCheck === 'includeZero' && numValue === 0) {
45
+ return placeholder;
46
+ }
47
+ const scaledValue = numValue / Z_DIVIDE_SCALE[divide];
48
+ const matched = format.match(/1\.(\d)-(\d)/);
49
+ const minDigits = matched ? parseInt(matched[1], 10) : 0;
50
+ const maxDigits = matched ? parseInt(matched[2], 10) : 2;
51
+ const formatted = new Intl.NumberFormat(Z_LOCALE_MAP[locale] || 'vi-VN', {
52
+ minimumFractionDigits: minDigits,
53
+ maximumFractionDigits: maxDigits,
54
+ }).format(scaledValue);
55
+ return percent ? `${formatted}%` : formatted;
56
+ };
33
57
  const zUuid = () => {
34
58
  const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
35
59
  const time = Date.now();
@@ -40,7 +64,6 @@ const zUuid = () => {
40
64
  return chars[index];
41
65
  });
42
66
  };
43
- /** Capitalize each word in a string */
44
67
  const zCapitalCase = (text) => {
45
68
  if (!text) {
46
69
  return '';
@@ -50,7 +73,6 @@ const zCapitalCase = (text) => {
50
73
  .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
51
74
  .join(' ');
52
75
  };
53
- /** Check if text is truncated (requires element to be rendered) */
54
76
  const zIsTextTruncated = async (el) => {
55
77
  if (!el.offsetWidth || !el.isConnected) {
56
78
  return false;
@@ -68,7 +90,6 @@ const zIsTextTruncated = async (el) => {
68
90
  }
69
91
  return false;
70
92
  };
71
- /** Decode unicode escape sequences */
72
93
  const zDecodeUnicode = (str) => {
73
94
  if (!str) {
74
95
  return '';
@@ -83,7 +104,6 @@ const zDecodeUnicode = (str) => {
83
104
  return String.fromCodePoint(codePoint);
84
105
  });
85
106
  };
86
- /** Generate a random color in hex, rgb, and hsl formats */
87
107
  const zRandomColor = () => {
88
108
  const h = Math.floor(Math.random() * 360);
89
109
  const s = Math.floor(Math.random() * 40) + 60;
@@ -94,25 +114,16 @@ const zRandomColor = () => {
94
114
  const c = (1 - Math.abs(2 * b - 1)) * a;
95
115
  const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
96
116
  const m = b - c / 2;
97
- let r = 0, g = 0, bl = 0;
98
- if (h >= 0 && h < 60) {
99
- [r, g, bl] = [c, x, 0];
100
- }
101
- else if (h >= 60 && h < 120) {
102
- [r, g, bl] = [x, c, 0];
103
- }
104
- else if (h >= 120 && h < 180) {
105
- [r, g, bl] = [0, c, x];
106
- }
107
- else if (h >= 180 && h < 240) {
108
- [r, g, bl] = [0, x, c];
109
- }
110
- else if (h >= 240 && h < 300) {
111
- [r, g, bl] = [x, 0, c];
112
- }
113
- else {
114
- [r, g, bl] = [c, 0, x];
115
- }
117
+ const hueSegment = Math.floor(h / 60) % 6;
118
+ const rgbMap = [
119
+ [c, x, 0],
120
+ [x, c, 0],
121
+ [0, c, x],
122
+ [0, x, c],
123
+ [x, 0, c],
124
+ [c, 0, x],
125
+ ];
126
+ const [r, g, bl] = rgbMap[hueSegment];
116
127
  const R = Math.round((r + m) * 255);
117
128
  const G = Math.round((g + m) * 255);
118
129
  const B = Math.round((bl + m) * 255);
@@ -121,7 +132,6 @@ const zRandomColor = () => {
121
132
  const hex = `#${toHex(R)}${toHex(G)}${toHex(B)}`;
122
133
  return { hex, rgb, hsl };
123
134
  };
124
- /** Convert color string to ARGB format */
125
135
  const zConvertColorToArgb = (color) => {
126
136
  if (color.startsWith('#')) {
127
137
  return 'FF' + color.substring(1).toUpperCase();
@@ -137,7 +147,6 @@ const zConvertColorToArgb = (color) => {
137
147
  }
138
148
  return 'FF000000';
139
149
  };
140
- /** Clean null/undefined values from object recursively */
141
150
  const zCleanObject = (obj) => {
142
151
  if (obj !== Object(obj)) {
143
152
  return obj;
@@ -155,7 +164,6 @@ const zCleanObject = (obj) => {
155
164
  return acc;
156
165
  }, {});
157
166
  };
158
- /** Flatten tree structure to flat array */
159
167
  const zTreeFlatten = (list, keyMap, parentKeyMap, sortFn) => {
160
168
  const sortedList = sortFn ? [...list].sort(sortFn) : list;
161
169
  const byParent = {};
@@ -176,7 +184,6 @@ const zTreeFlatten = (list, keyMap, parentKeyMap, sortFn) => {
176
184
  };
177
185
  return flatten(null, 0, []);
178
186
  };
179
- /** Build tree structure from flat array */
180
187
  const zTreeBuild = (list, keyMap, parentKeyMap, sortFn) => {
181
188
  const sortedList = sortFn ? [...list].sort(sortFn) : list;
182
189
  const byParent = {};
@@ -202,7 +209,6 @@ const zTreeBuild = (list, keyMap, parentKeyMap, sortFn) => {
202
209
  };
203
210
  return buildTree(null, 0, []);
204
211
  };
205
- /** Vietnamese character map for normalization */
206
212
  const VIETNAMESE_MAP = {
207
213
  à: 'a',
208
214
  á: 'a',
@@ -339,12 +345,10 @@ const VIETNAMESE_MAP = {
339
345
  Ỹ: 'Y',
340
346
  Đ: 'D',
341
347
  };
342
- /** Remove Vietnamese diacritics from string */
343
348
  const zRemoveVietnamese = (str) => str
344
349
  .split('')
345
350
  .map(char => VIETNAMESE_MAP[char] || char)
346
351
  .join('');
347
- /** Get nested object value by path */
348
352
  const getDeepValue = (obj, path) => {
349
353
  try {
350
354
  const value = path.split('.').reduce((acc, key) => {
@@ -362,7 +366,6 @@ const getDeepValue = (obj, path) => {
362
366
  return '';
363
367
  }
364
368
  };
365
- /** Full-text search using MiniSearch */
366
369
  const zMiniSearch = (data, query, fields) => {
367
370
  if (!query) {
368
371
  return data;
@@ -386,7 +389,6 @@ const zMiniSearch = (data, query, fields) => {
386
389
  const results = search.search(query, { prefix: true });
387
390
  return results.map(result => data[result._index]);
388
391
  };
389
- /** Full-text search as Observable with loading state */
390
392
  const zMiniSearch$ = (data, query, fields, loading, fakeDelay = 200) => {
391
393
  if (loading && isSignal(loading)) {
392
394
  loading.set(true);
@@ -397,7 +399,6 @@ const zMiniSearch$ = (data, query, fields, loading, fakeDelay = 200) => {
397
399
  }
398
400
  }));
399
401
  };
400
- /** Detect device type from user agent */
401
402
  const _detectDevice = (ua) => {
402
403
  if (/Mobi|Android.*Mobile|iPhone|iPod|BlackBerry|IEMobile/i.test(ua)) {
403
404
  return 'mobile';
@@ -407,7 +408,6 @@ const _detectDevice = (ua) => {
407
408
  }
408
409
  return 'desktop';
409
410
  };
410
- /** Detect browser information */
411
411
  const zDetectBrowser = () => {
412
412
  const ua = navigator.userAgent;
413
413
  const result = {
@@ -439,10 +439,6 @@ const zDetectBrowser = () => {
439
439
  return result;
440
440
  };
441
441
 
442
- /**
443
- * Z-Echarts Utils
444
- * ECharts utility functions
445
- */
446
442
  const Z_ECHARTS_DEFAULT_FONT = `'Lexend', 'Arial', 'Helvetica', 'sans-serif'`;
447
443
  /**
448
444
  * Register custom Z-UI theme for ECharts
@@ -501,13 +497,7 @@ function zRegisterEchartsTheme(options = {}) {
501
497
  },
502
498
  });
503
499
  }
504
- /** @deprecated Use zRegisterEchartsTheme instead */
505
- const registerEchartsMsgTheme = () => zRegisterEchartsTheme({ themeName: 'msgThemes' });
506
500
 
507
- /**
508
- * Z-Form Utils
509
- * Form utility functions
510
- */
511
501
  /**
512
502
  * Submit form and mark invalid controls as dirty
513
503
  * @param form - FormGroup or FormArray to submit
@@ -561,20 +551,6 @@ const zDebugFormInvalid = (form, parentKey = '') => {
561
551
  /** Legacy alias */
562
552
  const debugFormInvalid = zDebugFormInvalid;
563
553
 
564
- /**
565
- * Z-Common Types
566
- * Common utility types
567
- */
568
-
569
- /**
570
- * Z-Echarts Types
571
- */
572
-
573
- /**
574
- * Z-Form Types
575
- * Form utility types
576
- */
577
-
578
554
  /**
579
555
  * Utils types index
580
556
  */
@@ -587,5 +563,5 @@ const debugFormInvalid = zDebugFormInvalid;
587
563
  * Generated bundle index. Do not edit.
588
564
  */
589
565
 
590
- export { VIETNAMESE_MAP, debugFormInvalid, registerEchartsMsgTheme, submitForm, zCapitalCase, zCleanObject, zConvertColorToArgb, zDebugFormInvalid, zDecodeUnicode, zDetectBrowser, zGenerateId, zIsTextTruncated, zMergeClasses, zMiniSearch, zMiniSearch$, zNoop, zRandomColor, zRegisterEchartsTheme, zRemoveVietnamese, zSubmitForm, zTransform, zTreeBuild, zTreeFlatten, zUuid };
566
+ export { VIETNAMESE_MAP, Z_DIVIDE_SCALE, Z_LOCALE_MAP, debugFormInvalid, submitForm, zCapitalCase, zCleanObject, zConvertColorToArgb, zDebugFormInvalid, zDecodeUnicode, zDetectBrowser, zFormatNum, zGenerateId, zIsTextTruncated, zMergeClasses, zMiniSearch, zMiniSearch$, zNoop, zRandomColor, zRegisterEchartsTheme, zRemoveVietnamese, zSubmitForm, zTransform, zTreeBuild, zTreeFlatten, zUuid };
591
567
  //# sourceMappingURL=shival99-z-ui-utils.mjs.map