@shival99/z-ui 1.0.12 → 1.0.14
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.
- package/fesm2022/shival99-z-ui-components-z-menu.mjs +2 -2
- package/fesm2022/shival99-z-ui-i18n.mjs +20 -6
- package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-providers.mjs +0 -12
- package/fesm2022/shival99-z-ui-providers.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-services.mjs +444 -163
- package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-utils.mjs +44 -68
- package/fesm2022/shival99-z-ui-utils.mjs.map +1 -1
- package/fesm2022/z-ui.mjs +0 -1
- package/fesm2022/z-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-calendar.d.ts +5 -5
- package/types/shival99-z-ui-components-z-input.d.ts +2 -2
- package/types/shival99-z-ui-i18n.d.ts +0 -6
- package/types/shival99-z-ui-providers.d.ts +0 -10
- package/types/shival99-z-ui-services.d.ts +163 -129
- package/types/shival99-z-ui-utils.d.ts +15 -50
- package/types/z-ui.d.ts +0 -1
|
@@ -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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
[
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
[
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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,
|
|
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
|