@libs-ui/utils 0.2.355-9 → 0.2.356-0
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/README.md +633 -2
- package/base64.d.ts +25 -0
- package/cache.d.ts +73 -0
- package/collection.d.ts +12 -0
- package/color.d.ts +37 -0
- package/communicate-micro.d.ts +34 -1
- package/crypto-3rd.d.ts +12 -0
- package/crypto.d.ts +17 -0
- package/dangerous-object.d.ts +8 -1
- package/data.d.ts +5 -3
- package/date.d.ts +12 -0
- package/dom.d.ts +56 -0
- package/download.d.ts +21 -0
- package/esm2022/base64.mjs +27 -2
- package/esm2022/cache.mjs +74 -1
- package/esm2022/collection.mjs +13 -1
- package/esm2022/color.mjs +38 -1
- package/esm2022/communicate-micro.mjs +37 -5
- package/esm2022/crypto-3rd.mjs +13 -1
- package/esm2022/crypto.mjs +18 -1
- package/esm2022/dangerous-object.mjs +11 -2
- package/esm2022/data.mjs +6 -4
- package/esm2022/date.mjs +13 -1
- package/esm2022/dom.mjs +57 -1
- package/esm2022/download.mjs +22 -1
- package/esm2022/file.mjs +54 -1
- package/esm2022/format-number.mjs +31 -3
- package/esm2022/format-text.mjs +73 -2
- package/esm2022/function-check-embed-frame.mjs +28 -1
- package/esm2022/pattern.mjs +83 -3
- package/esm2022/trace.mjs +8 -1
- package/esm2022/two-way-signal-object.mjs +14 -1
- package/esm2022/uri.mjs +22 -3
- package/esm2022/url-search-params.mjs +68 -1
- package/esm2022/url.mjs +10 -1
- package/esm2022/uuid.mjs +7 -1
- package/esm2022/xss-filter.mjs +14 -1
- package/fesm2022/libs-ui-utils.mjs +723 -21
- package/fesm2022/libs-ui-utils.mjs.map +1 -1
- package/file.d.ts +53 -0
- package/format-number.d.ts +29 -1
- package/format-text.d.ts +71 -0
- package/function-check-embed-frame.d.ts +22 -0
- package/package.json +2 -2
- package/pattern.d.ts +81 -1
- package/trace.d.ts +7 -0
- package/two-way-signal-object.d.ts +13 -0
- package/uri.d.ts +20 -0
- package/url-search-params.d.ts +67 -0
- package/url.d.ts +9 -0
- package/uuid.d.ts +6 -0
- package/xss-filter.d.ts +13 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-utils.mjs","sources":["../../../../libs-ui/utils/src/dangerous-object.ts","../../../../libs-ui/utils/src/crypto.ts","../../../../libs-ui/utils/src/crypto-3rd.ts","../../../../libs-ui/utils/src/function-check-embed-frame.ts","../../../../libs-ui/utils/src/constants.ts","../../../../libs-ui/utils/src/communicate-micro.ts","../../../../libs-ui/utils/src/language.ts","../../../../libs-ui/utils/src/uuid.ts","../../../../libs-ui/utils/src/cache.ts","../../../../libs-ui/utils/src/date.ts","../../../../libs-ui/utils/src/http-params.ts","../../../../libs-ui/utils/src/two-way-signal-object.ts","../../../../libs-ui/utils/src/helpers.ts","../../../../libs-ui/utils/src/dom.ts","../../../../libs-ui/utils/src/url-search-params.ts","../../../../libs-ui/utils/src/color.ts","../../../../libs-ui/utils/src/key-code.ts","../../../../libs-ui/utils/src/key-cache.ts","../../../../libs-ui/utils/src/format-number.ts","../../../../libs-ui/utils/src/pattern.ts","../../../../libs-ui/utils/src/xss-filter.ts","../../../../libs-ui/utils/src/uri.ts","../../../../libs-ui/utils/src/base64.ts","../../../../libs-ui/utils/src/download.ts","../../../../libs-ui/utils/src/inject-token.ts","../../../../libs-ui/utils/src/file.ts","../../../../libs-ui/utils/src/format-text.ts","../../../../libs-ui/utils/src/get-smart-axis-scale.ts","../../../../libs-ui/utils/src/random.ts","../../../../libs-ui/utils/src/collection.ts","../../../../libs-ui/utils/src/data.ts","../../../../libs-ui/utils/src/url.ts","../../../../libs-ui/utils/src/trace.ts","../../../../libs-ui/utils/src/libs-ui-utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { TemplateRef, ElementRef } from '@angular/core';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Observable } from 'rxjs';\n\n/**\n * Danh sách các constructor name nguy hiểm\n */\nconst DANGEROUS_CONSTRUCTOR_NAMES = ['Window', 'Document', 'HTMLDocument', 'HTMLElement', 'Element', 'Node', 'Location', 'Navigator', 'Screen', 'History', 'Storage', 'Console', 'Performance'] as const;\n\n/**\n * Kiểm tra xem đối tượng có phải là browser global object không\n */\nexport const isBrowserGlobalObject = (obj: any): obj is Window | Document | Window | Document | typeof globalThis => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Window || obj instanceof Document || obj === window || obj === document || obj === globalThis;\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là DOM object không\n */\nexport const isDOMObject = (obj: any): obj is HTMLElement | Node | Element => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof HTMLElement || obj instanceof Node || obj instanceof Element;\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là browser API object không\n */\nexport const isBrowserAPIObject = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object' || typeof window === 'undefined') {\n return false;\n }\n return obj === window.location || obj === window.navigator || obj === window.screen || obj === window.history || obj === window.localStorage || obj === window.sessionStorage || obj === window.console || obj === window.performance;\n};\n\n/**\n * Kiểm tra constructor name có nằm trong danh sách nguy hiểm không\n */\nexport const hasDangerousConstructorName = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n const constructorName = obj.constructor?.name;\n return constructorName && DANGEROUS_CONSTRUCTOR_NAMES.includes(constructorName as any);\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là DOM object hoặc browser object nguy hiểm không\n * Những đối tượng này có thể gây ra circular reference và maximum call stack\n */\nexport const isDangerousObject = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n\n return isBrowserGlobalObject(obj) || isDOMObject(obj) || isBrowserAPIObject(obj) || hasDangerousConstructorName(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là Angular/Framework object không\n */\nexport const isFrameworkObject = <T = any>(obj: any): obj is TemplateRef<T> | ElementRef<T> => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof TemplateRef || obj instanceof ElementRef;\n};\n\n/**\n * Kiểm tra đối tượng có phải là File/Blob object không\n */\nexport const isFile = (obj: any): obj is File | Blob => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof File || obj instanceof Blob || Object.prototype.toString.call(obj) === '[object File]';\n};\n\n/**\n * Kiểm tra đối tượng có phải là Built-in object không\n */\nexport const isBuiltInObject = (obj: any): obj is Date | RegExp | HttpParams => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Date || isRegExp(obj) || obj instanceof HttpParams || ('hasOwnProperty' in obj && '__ngContext__' in obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là RegExp object không\n */\nexport const isRegExp = (obj: any): obj is RegExp => {\n return obj instanceof RegExp;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Async object không\n */\nexport const isAsyncObject = <T = any>(obj: any): obj is Promise<T> | Observable<T> => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Promise || obj instanceof Observable;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Special object cần bỏ qua không\n * Bao gồm: Framework objects, File objects, Built-in objects, Async objects\n */\nexport const isSpecialObject = (obj: any): boolean => {\n return isFrameworkObject(obj) || isFile(obj) || isBuiltInObject(obj) || isAsyncObject(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là dayjs object không\n */\nexport const isDayjsObject = (obj: any): obj is Dayjs => {\n return dayjs.isDayjs(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là object cần bỏ qua trong quá trình convert không\n */\nexport const isSkippableObject = (obj: any): boolean => {\n return isDangerousObject(obj) || isSpecialObject(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là Map object không\n */\nexport const isMap = <T = any>(obj: any): obj is Map<string, T> => {\n return obj instanceof Map;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Set object không\n */\nexport const isSet = <T = any>(obj: any): obj is Set<T> => {\n return obj instanceof Set;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Array object không\n */\nexport const isArray = <T = any>(obj: any): obj is Array<T> => {\n return Array.isArray(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là object cần trả về nguyên trạng không\n * Bao gồm: dangerous objects, special objects, dayjs objects\n */\nexport const isReturnAsIsObject = (obj: any): boolean => {\n return isSkippableObject(obj) || isDayjsObject(obj);\n};\n\n/**\n * Kiểm tra xem đối tượng có an toàn để clone/convert không\n */\nexport const isSafeToProcess = (obj: any): boolean => {\n return !isDangerousObject(obj);\n};\n","import CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\n/**\n * @description Thiết lập key mã hóa\n * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.\n */\nexport const setKeyCrypto = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n};\n\nexport const encrypt = (plainData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n\nexport const md5 = (plainData: string) => {\n return CryptoES.MD5(plainData).toString();\n};\n","import CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\n/**\n * @description Thiết lập key mã hóa\n * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.\n */\nexport const setKeyCrypto3rd = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n};\n\nexport const encrypt3rd = (plainData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt3rd = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n","//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test\nlet functionCheck = () => {\n return window.parent !== window.top;\n};\nexport const updateFunctionCheckEmbedFrame = (functionCustom: () => boolean) => {\n functionCheck = functionCustom;\n};\n\nexport const isEmbedFrame = (): boolean => {\n return functionCheck();\n};\n","export const ERROR_MESSAGE_EMPTY_VALID = 'i18n_valid_empty_message';\nexport const ERROR_MESSAGE_PATTEN_VALID = 'i18n_valid_pattern_message';\nexport const ERROR_MESSAGE_MIN_VALID = 'i18n_message_error_input_min_value';\nexport const ERROR_MESSAGE_MAX_VALID = 'i18n_message_error_input_max_value';\nexport const ERROR_MESSAGE_MIN_LENGTH = 'i18n_message_error_input_min_length';\nexport const ERROR_MESSAGE_MAX_LENGTH = 'i18n_message_error_input_max_length';\nexport const CHARACTER_DATA_EMPTY = '__';\nexport const DEFAULT_START_PAGE_0 = 'defaultStartPage0';\nexport const COMMUNICATE_MICRO_PREFIX_TYPE = '3RD_INTEGRATE_MICRO_SITE_';\nexport const COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE = 'MICRO_SITES_ALL_MESSAGE';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Subject, filter, fromEvent, takeUntil } from 'rxjs';\nimport { decrypt, encrypt } from './crypto';\nimport { decrypt3rd, encrypt3rd } from './crypto-3rd';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { UtilsCache } from './cache';\nimport { COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE } from './constants';\nimport { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nexport class UtilsCommunicateMicroKeyGlobal {\n public static KEY_MESSAGE_MODAL = 'LIBS_UI_MODEL_EVENT';\n public static IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL = false;\n}\n\nexport class UtilsCommunicateMicro {\n private static initdEvent?: boolean;\n private static subs: Map<string, Subject<MessageEvent>> = new Map();\n private static allMessageSub: Subject<MessageEvent> = new Subject();\n\n public static initEvent(currentWindow: Window, destroyRef: DestroyRef) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (!this.subs.get(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE)) {\n this.subs.set(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, UtilsCommunicateMicro.allMessageSub);\n }\n\n fromEvent<MessageEvent>(currentWindow, 'message')\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe((e: MessageEvent) => {\n const event = { data: { ...e.data } } as MessageEvent;\n\n const data = event.data;\n const type = data.type;\n\n if (!type) {\n return this.allMessageSub.next(event);\n }\n const sub = UtilsCommunicateMicro.GetMessage(type);\n\n if (!type || !data.response) {\n return;\n }\n try {\n if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {\n data.response = JSON.parse(decrypt3rd(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n\n return;\n }\n data.response = JSON.parse(decrypt(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n } catch (error) {\n console.log(error);\n sub.next(event);\n this.allMessageSub.next(event);\n }\n });\n\n UtilsCommunicateMicro.GetMessage(UtilsCache.typeKeyClearLocalStorage)\n .pipe(\n filter((e) => e.data.response !== UtilsCache.idService),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe(() => {\n console.log('clear all cache by event');\n UtilsCache.ClearAll();\n });\n }\n\n static PostMessageToParent(data: any) {\n data = this.convertData(data);\n try {\n if (isEmbedFrame()) {\n window?.parent?.postMessage(data, '*');\n\n return;\n }\n\n window?.top?.postMessage(data, '*');\n } catch (error) {\n console.log(error);\n }\n }\n\n static PostMessageToChildren(data: any) {\n data = this.convertData(data);\n const iframes = document.querySelectorAll('iframe');\n\n Array.from(iframes).forEach((iframe) => {\n iframe?.contentWindow?.postMessage(data, '*');\n });\n }\n\n static PostMessageToOpener(data: any) {\n if (!window.opener) {\n return;\n }\n data = this.convertData(data);\n\n window.opener.postMessage(data, '*');\n }\n\n private static convertData(data: any) {\n if (!data || !data.type || !data.response) {\n return data;\n }\n data = { ...data };\n const type = data.type;\n\n if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {\n try {\n JSON.parse(decrypt3rd(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt3rd(JSON.stringify(data.response));\n\n return data;\n }\n }\n try {\n JSON.parse(decrypt(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt(JSON.stringify(data.response));\n\n return data;\n }\n }\n\n static GetMessage(messageType: string | Array<string>): Subject<MessageEvent> {\n if (!this.initdEvent) {\n throw Error('chưa khơi tạo hàm lắng nghe sự kiện, gọi UtilsCommunicateMicro.initEvent(window) tại root component');\n }\n if (typeof messageType === 'string') {\n let sub = this.subs.get(messageType);\n\n if (!sub) {\n sub = new Subject();\n this.subs.set(messageType, sub);\n\n return sub;\n }\n\n return sub;\n }\n if (!Array.isArray(messageType) || !messageType.length) {\n throw new Error('message type empty');\n }\n if (messageType.length === 1) {\n return this.GetMessage(messageType[0]);\n }\n const types = messageType.sort().join(';');\n\n let sub = this.subs.get(types);\n\n if (sub) {\n return sub;\n }\n\n sub = new Subject();\n this.subs.set(types, sub);\n this.initSubject(sub, messageType);\n\n return sub;\n }\n\n private static initSubject(subRoot: Subject<MessageEvent>, messageType: Array<string>) {\n messageType.forEach((key) => {\n this.GetMessage(key).subscribe((e) => {\n subRoot.next(e);\n });\n });\n }\n}\n","import { TYPE_LANGUAGE_SUPPORT } from '@libs-ui/interfaces-types';\n\nexport class UtilsLanguageConstants {\n public static VI = 'vi'; // Tiếng Việt\n public static EN = 'en'; // Tiếng Anh\n public static FR = 'fr'; // Tiếng Pháp\n public static DE = 'de'; // Tiếng Đức\n public static ES = 'es'; // Tiếng Tây Ban Nha\n public static ZH = 'zh'; // Tiếng Trung (Giản thể)\n public static ZH_TW = 'zh-TW'; // Tiếng Trung (Phồn thể)\n public static JA = 'ja'; // Tiếng Nhật\n public static KO = 'ko'; // Tiếng Hàn\n public static RU = 'ru'; // Tiếng Nga\n public static IT = 'it'; // Tiếng Ý\n public static PT = 'pt'; // Tiếng Bồ Đào Nha\n public static TH = 'th'; // Tiếng Thái\n public static ID = 'id'; // Tiếng Indonesia\n public static MS = 'ms'; // Tiếng Malaysia\n public static AR = 'ar'; // Tiếng Ả Rập\n public static HI = 'hi'; // Tiếng Hindi\n public static BN = 'bn'; // Tiếng Bengal\n public static TR = 'tr'; // Tiếng Thổ Nhĩ Kỳ\n public static NL = 'nl'; // Tiếng Hà Lan\n public static KM = 'km'; // Tiếng Khmer (Campuchia)\n public static LO = 'lo'; // Tiếng Lào\n public static MY = 'my'; // Tiếng Miến Điện (Myanmar)\n public static TL = 'tl'; // Tiếng Tagalog (Philippines)\n public static CEB = 'ceb'; // Tiếng Cebuano (Philippines)\n public static JV = 'jv'; // Tiếng Java (Indonesia)\n public static SU = 'su'; // Tiếng Sundanese (Indonesia)\n\n public static defaultLang = (): string => {\n const browserLang = 'navigator' in window ? navigator.language || UtilsLanguageConstants.EN : UtilsLanguageConstants.EN;\n const lang = browserLang.split('-')[0] || UtilsLanguageConstants.EN;\n if (UtilsLanguageConstants.isSupported(lang)) {\n return lang;\n }\n return UtilsLanguageConstants.EN;\n };\n\n // Danh sách các ngôn ngữ được hỗ trợ\n private static supportedLanguages = new Set([\n UtilsLanguageConstants.VI,\n UtilsLanguageConstants.EN,\n UtilsLanguageConstants.FR,\n UtilsLanguageConstants.DE,\n UtilsLanguageConstants.ES,\n UtilsLanguageConstants.ZH,\n UtilsLanguageConstants.ZH_TW,\n UtilsLanguageConstants.JA,\n UtilsLanguageConstants.KO,\n UtilsLanguageConstants.RU,\n UtilsLanguageConstants.IT,\n UtilsLanguageConstants.PT,\n UtilsLanguageConstants.TH,\n UtilsLanguageConstants.ID,\n UtilsLanguageConstants.MS,\n UtilsLanguageConstants.AR,\n UtilsLanguageConstants.HI,\n UtilsLanguageConstants.BN,\n UtilsLanguageConstants.TR,\n UtilsLanguageConstants.NL,\n UtilsLanguageConstants.KM,\n UtilsLanguageConstants.LO,\n UtilsLanguageConstants.MY,\n UtilsLanguageConstants.TL,\n UtilsLanguageConstants.CEB,\n UtilsLanguageConstants.JV,\n UtilsLanguageConstants.SU,\n ]);\n\n public static setSupportedLanguages(languages: Array<TYPE_LANGUAGE_SUPPORT>) {\n if (languages.length === 0) {\n throw new Error('Languages is required');\n }\n this.supportedLanguages = new Set(languages);\n }\n\n /**\n * Kiểm tra xem ngôn ngữ đầu vào có được hỗ trợ không\n * @param lang Mã ngôn ngữ cần kiểm tra\n * @returns True nếu được hỗ trợ, False nếu không\n */\n public static isSupported(lang: string): boolean {\n return this.supportedLanguages.has(lang);\n }\n}\n","import { md5 } from './crypto';\n\nexport const uuid = (): string => {\n const timestamp = performance.now() * 1000;\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?/~';\n let randomString = '';\n\n for (let i = 0; i < 5; i++) {\n randomString += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n const baseString = `${Math.floor(timestamp)}-${randomString}`;\n const charArray = baseString.split('');\n\n for (let i = charArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n\n [charArray[i], charArray[j]] = [charArray[j], charArray[i]];\n }\n\n const shuffledString = charArray.join('');\n\n return md5(shuffledString);\n};\n","/* eslint-disable no-async-promise-executor */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IEvent, TYPE_LANGUAGE_SUPPORT } from '@libs-ui/interfaces-types';\nimport { UtilsCommunicateMicro } from './communicate-micro';\nimport { decrypt, encrypt, md5 } from './crypto';\nimport { getDeviceInfo } from './dom';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { get, isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\nimport { uuid } from './uuid';\n\nexport class UtilsCache {\n public static readonly CACHE_EXPIRE_TIME_DEFAULT = 5 * 60;\n public static readonly CACHE_EXPIRE_NONE = -1;\n public static readonly idService = uuid();\n public static typeKeyClearLocalStorage = 'LIBS_UI_CLEAR_LOCAL_STORAGE_EVENT';\n\n private static languageKeyCache = 'SR3xQKxHgffiCevPQRralg';\n private static listKeyKeepWhenClearALll = Array<string>();\n private static initdEvent?: boolean;\n private static storage: { [key: string]: unknown };\n private static dbName = 'libs-ui-cache';\n private static itemIndexByKey = 'key';\n private static dbVersion = 1;\n private static db: IDBDatabase | null = null;\n\n public static init(config: { indexedDBName?: string; languageKeyCache?: string; typeKeyClearLocalStorage?: string; listKeyKeepWhenClearAll?: Array<string> }) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (config.indexedDBName) {\n this.dbName = config.indexedDBName;\n }\n if (config.typeKeyClearLocalStorage) {\n this.typeKeyClearLocalStorage = config.typeKeyClearLocalStorage;\n }\n if (config.listKeyKeepWhenClearAll) {\n this.listKeyKeepWhenClearALll = config.listKeyKeepWhenClearAll;\n }\n if (config.languageKeyCache) {\n this.languageKeyCache = config.languageKeyCache;\n }\n }\n\n public static setLang(lang: TYPE_LANGUAGE_SUPPORT) {\n if (!UtilsLanguageConstants.isSupported(lang)) {\n throw Error(`Language not support ${lang}`);\n }\n this.Set(this.languageKeyCache, lang, this.CACHE_EXPIRE_NONE);\n }\n\n public static getLang(): TYPE_LANGUAGE_SUPPORT {\n return this.Get(this.languageKeyCache, UtilsLanguageConstants.defaultLang());\n }\n\n private static openDB() {\n return new Promise((resolve) => {\n const request = indexedDB.open(this.dbName, this.dbVersion);\n\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n if (!db.objectStoreNames.contains(this.dbName)) {\n const objectStore = db.createObjectStore(this.dbName, { keyPath: this.itemIndexByKey });\n\n objectStore.createIndex(this.itemIndexByKey, this.itemIndexByKey, { unique: true });\n }\n };\n\n request.onsuccess = () => {\n this.db = request.result;\n resolve(true);\n };\n\n request.onerror = (event) => {\n console.trace('Error opening IndexedDB:', event);\n resolve(false);\n };\n });\n }\n\n private static async getObjectStore() {\n if (!this.db) {\n await this.openDB();\n }\n const transaction = this.db?.transaction([this.dbName], 'readwrite');\n if (!transaction) {\n return null;\n }\n\n return transaction.objectStore(this.dbName);\n }\n\n private static get LocalStorage(): any {\n try {\n if (typeof window.localStorage !== 'undefined') {\n if (getDeviceInfo().satisfies({ safari: '>=16' })) {\n return this.getLocalStorageFakeOnSafari();\n }\n\n return localStorage;\n }\n\n return this.getLocalStorageFake();\n } catch (error) {\n console.trace(`LocalStorage `, error);\n return this.getLocalStorageFake();\n }\n }\n\n private static getLocalStorageFakeOnSafari() {\n if (typeof window.localStorage !== 'undefined' && !this.storage && Object.keys(localStorage).length) {\n this.storage = { ...localStorage };\n }\n\n return {\n setItem: (key: string, value: string) => {\n localStorage.setItem(key, value);\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n const value = localStorage.getItem(key);\n\n if (value) {\n return value;\n }\n\n if (!this.storage || isNil(this.storage[key])) {\n return null;\n }\n\n localStorage.setItem(key, this.storage[key] as string);\n\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n localStorage.removeItem(key);\n },\n clear: () => {\n this.storage = {};\n localStorage.clear();\n },\n };\n }\n\n private static getLocalStorageFake() {\n if (!this.storage) {\n this.storage = {};\n }\n\n return {\n setItem: (key: string, value: unknown) => {\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n },\n clear: () => {\n this.storage = {};\n },\n };\n }\n\n public static async GetAsync<T = any>(key: string, default_value?: any, isKeyMD5 = false): Promise<T> {\n key = isKeyMD5 ? key : md5(key);\n\n return new Promise<T>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve(default_value);\n }\n const request = objectStore.get(key);\n\n request.onsuccess = () => {\n if (!request.result) {\n return resolve(default_value);\n }\n const data = JSON.parse(decrypt(request.result.value));\n\n if (data.expire === this.CACHE_EXPIRE_NONE) {\n return resolve(data.json);\n }\n const currentMillisecond = new Date().valueOf() / 1000;\n\n if (data.expire < currentMillisecond) {\n return resolve(default_value);\n }\n\n return resolve(data.json);\n };\n\n request.onerror = () => {\n console.trace(`Get key ${key} Error, return default value: ${default_value}`);\n return resolve(default_value);\n };\n });\n }\n\n public static Get<T = any>(key: string, default_value?: any): T {\n // support cho những file không thể inject UtilsCache\n if (!key) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n const cachedData = this.LocalStorage.getItem(key);\n\n if (!cachedData) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n try {\n const data = JSON.parse(decrypt(cachedData));\n\n if (data.expire === this.CACHE_EXPIRE_NONE) {\n return data.value ?? default_value;\n }\n const currentMillisecond = new Date().valueOf() / 1000;\n\n if (data.expire < currentMillisecond) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n\n return data.value;\n } catch (error) {\n console.trace(`Get key ${key} Error, return default value: ${default_value}`, error);\n\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n }\n\n public static GetDefaultValueBySpecificKey(key: string, default_value: any) {\n return default_value;\n }\n\n public static async SetAsync<T = any>(key: string, value: any, expireTimeBySecond = this.CACHE_EXPIRE_TIME_DEFAULT, isKeyMD5 = false): Promise<T> {\n // support inject UtilsCache\n return new Promise<T>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n key = isKeyMD5 ? key : md5(key);\n try {\n const currentMillisecond = expireTimeBySecond === this.CACHE_EXPIRE_NONE ? this.CACHE_EXPIRE_NONE : new Date().valueOf() / 1000 + expireTimeBySecond;\n const data: any = {\n value: encrypt(JSON.stringify({ json: value, expire: currentMillisecond })),\n };\n data[this.itemIndexByKey] = key;\n\n if (!objectStore) {\n console.trace(`Can not open object store`);\n return resolve({ key, messageError: 'Can not open object store' } as any);\n }\n const request = objectStore?.put(data);\n request.onsuccess = () => {\n console.log(`Set key ${key} Success`);\n resolve(request.result as any);\n };\n\n request.onerror = (error) => {\n console.trace(`Set key ${key} Error`);\n resolve({ key, messageError: get(error as IEvent, 'message') } as any);\n };\n } catch (error) {\n console.trace(`Set key ${key} Error`);\n resolve({ key, messageError: get(error, 'message') } as any);\n }\n });\n }\n\n static Set(key: string, value: any, expireTimeBySecond = this.CACHE_EXPIRE_TIME_DEFAULT): boolean {\n // support cho những file không inject UtilsCache\n const currentMillisecond = expireTimeBySecond === this.CACHE_EXPIRE_NONE ? this.CACHE_EXPIRE_NONE : new Date().valueOf() / 1000 + expireTimeBySecond;\n const data = {\n value: value,\n expire: currentMillisecond,\n };\n\n try {\n this.LocalStorage.setItem(key, encrypt(JSON.stringify(data)));\n return true;\n } catch (error) {\n console.trace(`Set key ${key} Error`, error);\n return false;\n }\n }\n\n public static async ClearAsync(key: string, isMD5 = false) {\n return new Promise<void>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n const request = objectStore.delete(isMD5 ? key : md5(key));\n\n request.onsuccess = () => {\n resolve({ clearSuccess: true } as any);\n };\n request.onerror = (event: Event) => {\n console.trace('Error deleting Key:', get((event.target as IDBRequest).error, 'message'));\n resolve({ messageError: get((event.target as IDBRequest).error, 'message'), clearSuccess: false } as any);\n };\n });\n }\n\n static Clear(key: string) {\n if (key.includes('kc-callback-')) {\n return;\n }\n this.LocalStorage.removeItem(key);\n }\n\n public static ClearAllAsync() {\n return new Promise<void>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n\n const request = objectStore.clear();\n request.onsuccess = () => {\n console.log('clear all successfully');\n resolve({ clearSuccess: true } as any);\n };\n\n request.onerror = (event: Event) => {\n console.trace('Error deleting key:', get((event.target as IDBRequest).error, 'message'));\n resolve({ messageError: get((event.target as IDBRequest).error, 'message'), clearSuccess: false } as any);\n };\n });\n }\n\n static ClearAll() {\n if (isEmbedFrame()) {\n const data = {\n type: this.typeKeyClearLocalStorage,\n response: {\n idEvent: this.idService,\n },\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n const keys = [...this.listKeyKeepWhenClearALll];\n Object.keys(this.LocalStorage).forEach((key) => {\n if (key.includes('kc-callback-')) {\n keys.push(key);\n }\n });\n\n const stores = this.GetDataByKeys(Array.from(keys));\n\n this.LocalStorage.clear();\n\n this.SetDataByKey(stores);\n }\n\n private static GetDataByKeys(keys: Array<string>) {\n const stores = new Map();\n\n keys.forEach((key: string) => {\n if (key.includes('kc-callback-')) {\n stores.set(key, this.LocalStorage.getItem(key));\n\n return;\n }\n stores.set(key, this.Get(key));\n });\n\n return stores;\n }\n\n private static SetDataByKey(stores: Map<string, any>) {\n stores.forEach((value: any, key: string) => {\n if (key.includes('kc-callback-')) {\n this.LocalStorage.setItem(key, value);\n\n return;\n }\n if (key === this.languageKeyCache) {\n return this.setLang(value);\n }\n this.Set(key, value, this.CACHE_EXPIRE_NONE);\n });\n }\n\n public static DeleteKeyStartWithAsync(keyCacheStartWith: string, isKeyMD5 = false) {\n return new Promise(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve({});\n }\n\n // Lấy tất cả các keys từ index\n const request = objectStore.getAll();\n\n keyCacheStartWith = isKeyMD5 ? keyCacheStartWith : md5(keyCacheStartWith);\n\n request.onsuccess = (e: any) => {\n const data = e.target.result as Array<any>;\n\n if (!Array.isArray(data)) {\n return resolve({});\n }\n\n data.forEach((obj) => {\n if (obj[this.itemIndexByKey].startsWith(keyCacheStartWith)) {\n this.ClearAsync(obj[this.itemIndexByKey], true);\n }\n });\n\n return resolve({});\n };\n\n request.onerror = () => {\n return resolve({});\n };\n });\n }\n\n public static DeleteKeyStartWith(keyCache: string, isMD5 = false) {\n keyCache = isMD5 ? md5(keyCache) : keyCache;\n const keys = Object.keys(this.LocalStorage);\n\n if (!keys || !keys.length) {\n return;\n }\n\n keys.forEach((key) => {\n if (key.startsWith(keyCache)) {\n this.Clear(key);\n }\n });\n }\n\n public static DeleteDatabaseIndexDB(dbName?: string) {\n return new Promise((resolve) => {\n dbName = (dbName || this.dbName) as string;\n const request = indexedDB.deleteDatabase(dbName as string);\n\n request.onsuccess = () => {\n console.trace('Database deleted successfully');\n resolve({ deleteSuccess: true });\n };\n\n request.onerror = (event: Event) => {\n const error = (event.target as IDBRequest).error;\n console.trace('Error deleting database:', error);\n resolve({ messageError: get((error as Record<string, any>) || {}, 'message'), deleteSuccess: false } as any);\n };\n\n request.onblocked = () => {\n console.trace('Delete request is blocked');\n resolve({ messageError: 'Delete request is blocked', deleteSuccess: false } as any);\n };\n });\n }\n}\n","import { isSignal } from '@angular/core';\nimport { GetDayjsConfig, GetDayjsReturn, NonNullableDate, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/vi';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport timezone from 'dayjs/plugin/timezone';\nimport updateLocale from 'dayjs/plugin/updateLocale';\nimport utc from 'dayjs/plugin/utc';\nimport { UtilsCache } from './cache';\ndayjs.extend(localeData);\ndayjs.extend(updateLocale);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(customParseFormat);\nlet timeZoneSetup = 'Asia/Ho_Chi_Minh';\nlet patternCheckTimeUTC: RegExp | undefined = undefined;\n\nexport const setDefaultTimeZone = (localeZone = timeZoneSetup) => {\n timeZoneSetup = localeZone;\n dayjs.tz.setDefault(localeZone);\n};\n\nexport const setPatternCheckTimeUTC = (pattern: RegExp) => {\n patternCheckTimeUTC = pattern;\n};\n\nexport type TYPE_FUNCTION_FORMAT_DATE = (time: dayjs.ConfigType, formatOutput: string, lang?: string) => string;\nlet functionFormatDate: TYPE_FUNCTION_FORMAT_DATE | undefined = undefined;\n\nexport const updateFunctionFormatDate = (functionCustom: TYPE_FUNCTION_FORMAT_DATE) => {\n functionFormatDate = functionCustom;\n};\n\n/**\n * @description Lấy đối tượng dayjs theo config\n * @param config nếu không có config sẽ trả về đối tượng dayjs là thời gian hiện tại\n * @param config.date thời gian cần lấy\n * @param config.returnDayjsIfConfigDateNotExist true nếu muốn trả về đối tượng dayjs nếu config.date không có\n * @param config.utc true nếu muốn lấy thời gian UTC\n * @param config.formatOfDate định dạng thời gian đang được truyền vào\n */\nexport const getDayjs = <C extends GetDayjsConfig | undefined = undefined>(config?: C): GetDayjsReturn<C> => {\n // helper cast để tránh lặp lại kiểu điều kiện ở các return\n const out = (v: unknown) => v as GetDayjsReturn<C>;\n if (!config) {\n return out(dayjs().tz());\n }\n config.date = !config.date && config.returnDayjsIfConfigDateNotExist ? dayjs().tz() : config.date;\n if (typeof config.date === 'number') {\n config.date = dayjs.unix(config.date);\n }\n if (!config.date) {\n return out(undefined);\n }\n let { date, utc, formatOfDate } = config as TYPE_OBJECT;\n\n while (isSignal(date)) {\n date = date();\n }\n while (isSignal(utc)) {\n utc = utc();\n }\n while (isSignal(formatOfDate)) {\n formatOfDate = formatOfDate();\n }\n\n if (typeof date === 'string' && patternCheckTimeUTC && new RegExp(patternCheckTimeUTC, 'gi').test(date)) {\n date = dayjs(date.replace(new RegExp(patternCheckTimeUTC, 'gi'), '$1$2$3T$5$6$7$8Z')).utc();\n }\n\n if (utc) {\n if (formatOfDate) {\n return out(dayjs(date, formatOfDate).utc());\n }\n const dateInputIsUTC = (dayjs.isDayjs(date) && date.isUTC()) || (typeof date === 'string' && (date as string).includes('Z'));\n\n if (dateInputIsUTC) {\n return out(dayjs(date));\n }\n\n return out(dayjs(date).utc());\n }\n\n if (typeof date === 'string' && !(date as string).includes('Z') && !(date as string).includes('+')) {\n return out(formatOfDate ? dayjs.tz(date, formatOfDate, config.localeZone || timeZoneSetup) : dayjs.tz(date, config.localeZone || timeZoneSetup));\n }\n\n return out((formatOfDate ? dayjs(date, formatOfDate) : dayjs(date)).tz());\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác nhau không (khác ngày trong tuần)\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác nhau, false nếu giống nhau hoặc không thể so sánh\n */\nexport const isDifferenceDay = (date1: NonNullableDate, date2: NonNullableDate) => {\n if (isDifferenceMonth(date1, date2)) {\n return true;\n }\n const day1 = getDayjs({ date: date1 })?.day();\n const day2 = getDayjs({ date: date2 })?.day();\n\n return day1 !== day2;\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác tháng không\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác tháng, false nếu cùng tháng hoặc không thể so sánh\n */\nexport const isDifferenceMonth = (date1: NonNullableDate, date2: NonNullableDate) => {\n if (isDifferenceYear(date1, date2)) {\n return true;\n }\n const month1 = getDayjs({ date: date1 })?.month();\n const month2 = getDayjs({ date: date2 })?.month();\n\n return month1 !== month2;\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác năm không\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác năm, false nếu cùng năm hoặc không thể so sánh\n */\nexport const isDifferenceYear = (date1: NonNullableDate, date2: NonNullableDate) => {\n const year1 = getDayjs({ date: date1 })?.year();\n const year2 = getDayjs({ date: date2 })?.year();\n\n return year1 !== year2;\n};\n\n/**\n * @description Lấy ra chuỗi thời gian hiển thị theo định dạng và ngôn ngữ\n * @param date thời gian cần định dạng\n * @param format định dạng thời gian muốn lấy ra\n * @param lang lấy theo ngôn ngữ\n */\nexport const formatDate = (date: dayjs.ConfigType, formatOutput = 'YYYY/MM/DD HH:mm', lang?: string, formatInput?: string): string => {\n if (!date) {\n return '';\n }\n lang = lang || (UtilsCache.getLang() as string);\n if (functionFormatDate) {\n return functionFormatDate(date, formatOutput, lang);\n }\n\n date = getDayjs({ date, formatOfDate: formatInput }).locale(lang);\n if (lang === 'vi') {\n dayjs.updateLocale('vi', {\n monthsShort: 'Thg 1_Thg 2_Thg 3_Thg 4_Thg 5_Thg 6_Thg 7_Thg 8_Thg 9_Thg 10_Thg 11_Thg 12'.split('_'),\n });\n }\n\n return date.format(getFormatData(getTypeByFormat(formatOutput), lang)) || '';\n};\n\nconst getTypeByFormat = (format: string): 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' | 'hh:mm' | 'HH:mm' | 'hh:mm A' | 'HH:mm A' | 'dmy hmsS' => {\n if (format === 'dm' || format === 'dmy' || format === 'dmy hm' || format === 'my' || format === 'dmy hms' || format === 'hh:mm' || format === 'HH:mm' || format === 'hh:mm A' || format === 'HH:mm A' || format === 'dmy hmsS') {\n return format;\n }\n\n if (format === 'DD/MM/YYYY' || format === 'YYYY-MM-DD' || format === 'dd/MM/yyyy' || format === 'dd-MM-yyyy' || format === 'dd/mm/yyyy') {\n return 'dmy';\n }\n\n if (format === 'MM-DD' || format === 'dd/MM' || format === 'dd/mm') {\n return 'dm';\n }\n\n if (format === 'M/YYYY' || format === 'YYYY-MM' || format === 'MM/yyyy') {\n return 'my';\n }\n\n if (format === 'YYYY/MM/DD hh:mm:ss' || format === 'dmy hms' || format === 'dd/mm/yyyy hh:mm:ss') {\n return 'dmy hms';\n }\n\n if(format.toLowerCase() === 'dd/mm/yyyy hh:mm:ss:ss' || format.toLowerCase() === 'yyyy/mm/dd hh:mm:ss:ss' || format.toLowerCase() === 'yyyy-mm-dd hh:mm:ss:ss' || format.toLowerCase() === 'dd-mm-yyyy hh:mm:ss:ss'){\n return 'dmy hmsS';\n }\n\n if (format === 'hh:mm' || format === 'HH:mm') {\n return 'hh:mm';\n }\n\n if (format === 'hh:mm A' || format === 'HH:mm A') {\n return 'hh:mm A';\n }\n\n return 'dmy hm';\n};\n\nconst getFormatData = (type: 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' | 'hh:mm' | 'hh:mm A' | 'HH:mm' | 'HH:mm A' | 'dmy hmsS', lang: string) => {\n switch (type) {\n case 'dm':\n if (lang === 'vi') {\n return 'D MMM';\n }\n\n return 'MMM D';\n\n case 'dmy':\n if (lang === 'vi') {\n return 'D MMM, YYYY';\n }\n\n return 'MMM D, YYYY';\n\n case 'dmy hm':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm';\n }\n\n return 'MMM D, YYYY HH:mm';\n\n case 'my':\n if (lang === 'vi') {\n return 'MMM, YYYY';\n }\n\n return 'MMM YYYY ';\n\n case 'dmy hms':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss';\n }\n\n return 'MMM D, YYYY HH:mm:ss';\n\n case 'hh:mm':\n case 'HH:mm':\n return 'HH:mm';\n\n case 'hh:mm A':\n case 'HH:mm A':\n return 'HH:mm A';\n case 'dmy hmsS':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss:SSS';\n }\n\n return 'MMM D, YYYY HH:mm:ss:SSS';\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParameterCodec, HttpParams } from '@angular/common/http';\n\nexport const UtilsHttpParamsRequestInstance = <Type>(options?: HttpParamsOptions<Type>, instance?: HttpParams): UtilsHttpParamsRequest<Type> => {\n return new UtilsHttpParamsRequest<Type>(options, instance);\n};\n\nexport class UtilsHttpParamsRequest<Type = { pem: string }> extends HttpParams {\n protected params = new HttpParams();\n\n constructor(options?: HttpParamsOptions<Type>, instance?: HttpParams) {\n super(options as any);\n\n if (!instance) {\n this.params = new HttpParams(options);\n\n return;\n }\n\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n getInstance(): HttpParams {\n return this.params;\n }\n\n setInstance(instance: HttpParams) {\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n override set(param: string, value: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.set(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override has(param: string): boolean {\n return this.params.has(param);\n }\n\n override get(param: string): string | null {\n return this.params.get(param);\n }\n\n override getAll(param: string): string[] | null {\n return this.params.getAll(param);\n }\n\n override keys(): string[] {\n return this.params.keys();\n }\n\n override append(param: string, value: string | number | boolean): HttpParams {\n this.params = this.params.append(param, value);\n\n return this as HttpParams;\n }\n\n override appendAll(params: { [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean> }): HttpParams {\n this.params = this.params.appendAll(params);\n\n return this as HttpParams;\n }\n\n override delete(param: string, value?: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.delete(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override toString(): string {\n return this.params.toString();\n }\n}\n\nexport declare interface HttpParamsOptions<Type> {\n fromString?: string;\n fromObject?: TYPE_FROM_OBJECT<Type>;\n encoder?: HttpParameterCodec;\n}\nexport type GET_PATH_VARIABLE<TypePath, TypeOther = unknown> = {\n [Property in keyof TypePath as `pathVariable-${Lowercase<string & Property>}`]: TypePath[Property];\n} & TypeOther;\n\ntype TYPE_FROM_OBJECT<Type> = Type extends undefined | null\n ? { pem: string }\n : { pem?: string } & {\n [Property in keyof Type]?: Type[Property];\n };\n\n// Demo su dung GET_PATH_VARIABLE\n\n// interface Person {\n// name: string;\n// age: number;\n// location: string;\n// }\n\n// type c = GET_PATH_VARIABLE<Person, unknown>;\n\n// const a: c = {\n// \"pathVariable-age\": 1,\n// \"pathVariable-location\": '12',\n// \"pathVariable-name\": '124',\n// };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isSignal, signal, WritableSignal } from '@angular/core';\nimport { isArray, isAsyncObject, isMap, isReturnAsIsObject, isSet } from './dangerous-object';\nimport { cloneDeep } from './helpers';\n\n/**\n * Chuyển đổi một đối tượng hoặc giá trị thành signal\n * @param data Dữ liệu cần chuyển đổi thành signal\n * @param cloneDeepIfNotSignal Có thực hiện sao chép sâu dữ liệu trước khi chuyển đổi hay không nếu data không phải signal. Mặc định là true.\n * Đặt false nếu muốn giữ nguyên tham chiếu đến dữ liệu gốc.\n * Nếu muốn sao chép sâu đối tượng signal thì đặt cloneDeepIfNotSignal là true và acceptConvertObjectInnerWritableSignal là true.\n * @param isSignalPrimitiveType Có chuyển đổi các giá trị nguyên thủy (string, number, boolean) thành signal hay không. Mặc định là false.\n * Đặt true nếu muốn bọc các giá trị nguyên thủy trong signal.\n * @param acceptConvertObjectInnerWritableSignal Có tiếp tục tìm kiếm và chuyển đổi các đối tượng bên trong signal hay không. Mặc định là false.\n * Đặt true nếu muốn tìm và chuyển đổi các đối tượng bên trong signal hoặc chính nó thành signal mới.\n * @returns Dữ liệu đã được chuyển đổi theo kiểu T\n */\nexport const convertObjectToSignal = <T = any>(data: any, cloneDeepIfNotSignal = true, isSignalPrimitiveType = false, acceptConvertObjectInnerWritableSignal = false, seen = new WeakMap()): T => {\n if ((data === null || typeof data !== 'object') && !isSignal(data)) {\n return (isSignalPrimitiveType ? signal(data) : data) as T;\n }\n if (seen.has(data)) {\n return seen.get(data);\n }\n\n if (isSignal(data)) {\n if (!acceptConvertObjectInnerWritableSignal) {\n return data as T;\n }\n seen.set(data, convertObjectToSignal(data(), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen));\n return seen.get(data);\n }\n\n if (isArray(data)) {\n seen.set(data, signal(data.map((item) => convertObjectToSignal(item, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen))) as T);\n return seen.get(data);\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach((key) => {\n mapCopy.set(key, convertObjectToSignal(data.get(key), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal));\n });\n seen.set(data, signal(mapCopy) as T);\n return seen.get(data);\n }\n\n // Bỏ qua các đối tượng async\n if (isAsyncObject(data)) {\n return data as T;\n }\n\n data = signal(cloneDeepIfNotSignal ? { ...data } : data);\n seen.set(data, data);\n for (const key in data()) {\n const value = data()[key];\n // Bỏ qua các đối tượng nguy hiểm và đặc biệt\n if (isReturnAsIsObject(value)) {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(data(), key)) {\n data()[key] = convertObjectToSignal(value, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal);\n }\n }\n\n return data as T;\n};\n\nexport const convertSignalToObject = <T = any>(data: any, isCloneDeep = true, seen = new WeakMap(), options?: { convertWhenFirstItemArrayNotIsSignal?: boolean }): T => {\n let ignoreCheckSeenHasDataAfterWhile = false;\n while (isSignal(data) && !seen.has(data)) {\n const dataConvert = (data as WritableSignal<unknown>)();\n if (typeof dataConvert === 'object') {\n if (dataConvert === null || isReturnAsIsObject(dataConvert)) {\n return dataConvert as T;\n }\n seen.set(dataConvert as object, dataConvert);\n data = dataConvert;\n ignoreCheckSeenHasDataAfterWhile = true;\n break;\n }\n seen.set(data, dataConvert);\n data = dataConvert;\n }\n\n if (data === null || typeof data === 'function' || typeof data !== 'object' || isReturnAsIsObject(data)) {\n return data;\n }\n\n if (!ignoreCheckSeenHasDataAfterWhile && seen.has(data)) {\n return seen.get(data);\n }\n\n if (isArray(data)) {\n if (!options?.convertWhenFirstItemArrayNotIsSignal && !isSignal(data[0])) {\n return data as T;\n }\n seen.set(data, data.map((item: any) => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep, seen, options)) as T);\n return seen.get(data);\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach((key) => {\n mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep, seen, options));\n });\n seen.set(data, mapCopy as T);\n return seen.get(data);\n }\n\n if (isSet(data)) {\n const setCopy = new Set();\n Array.from(data.values()).forEach((value) => {\n setCopy.add(convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep, seen, options));\n });\n seen.set(data, setCopy as T);\n return seen.get(data);\n }\n\n // Bỏ qua các đối tượng nguy hiểm và đặc biệt\n if (isReturnAsIsObject(data)) {\n return data as T;\n }\n\n const result: Record<string, any> = isCloneDeep ? {} : data;\n seen.set(data, result);\n for (const key in data) {\n const value = data[key];\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n // Bỏ qua các đối tượng nguy hiểm để tránh maximum call stack\n if (isReturnAsIsObject(value)) {\n result[key] = value;\n continue;\n }\n result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep, seen, options);\n }\n }\n\n return result as T;\n};\n\nexport const unwrapSignal = (data: any) => {\n while (isSignal(data)) {\n data = data();\n }\n return data;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { Signal, WritableSignal, isSignal, signal } from '@angular/core';\nimport { GetReturnType, GetValueAtPath, PathOf, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport dayjs from 'dayjs';\nimport { isArray, isDangerousObject, isDayjsObject, isMap, isRegExp, isReturnAsIsObject, isSet } from './dangerous-object';\nimport { getDayjs } from './date';\nimport { UtilsHttpParamsRequest } from './http-params';\nimport { unwrapSignal } from './two-way-signal-object';\n\n/**Các hàm tương tự thư viện lodash */\n/**\n * Kiểm tra xem một giá trị có phải là null hoặc undefined hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là null hoặc undefined, false nếu không\n * @example\n * isNil(null); // true\n * isNil(undefined); // true\n * isNil(0); // false\n * isNil('hello'); // false\n */\nexport const isNil = (value: unknown, options?: { ignoreUnWrapSignal?: boolean }): value is null | undefined => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n return value === null || value === undefined;\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là rỗng hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là null, rỗng hoặc undefined, false nếu không\n * @example\n * isEmpty(null); // true\n * isEmpty(''); // true\n * isEmpty(undefined); // true\n * isEmpty({}); // true\n * isEmpty([]); // true\n * isEmpty([1, 2, 3]); // false\n * isEmpty({ a: 1 }); // false\n */\nexport const isEmpty = (value: any, options?: { ignoreCheckTypePrimitive?: boolean; ignoreUnWrapSignal?: boolean; ignoreCheckString?: boolean }): value is null | undefined | '' | 0 => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n if (options?.ignoreCheckString && value === '') {\n return false;\n }\n if (options?.ignoreCheckTypePrimitive) {\n return typeof value === 'object' && isEmptyTypeObject(value);\n }\n\n return isEmptyTypeObject(value);\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là object rỗng hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là object rỗng, false nếu không\n * @example\n * isEmptyTypeObject({}); // true\n * isEmptyTypeObject({ a: 1 }); // false\n */\nconst isEmptyTypeObject = <T = null>(value: any): value is T => {\n try {\n if (isNil(value, { ignoreUnWrapSignal: true }) || value === '') {\n return true;\n }\n if (typeof value !== 'object') {\n return false;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n return Object.keys(value).length === 0;\n } catch (error) {\n console.error(error);\n return false;\n }\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không\n * @param value Giá trị cần kiểm tra\n * @param options Cấu hình tùy chọn\n * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0\n * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không\n * @example\n * isTruthy(null); // false\n * isTruthy(''); // false\n * isTruthy(undefined); // false\n * isTruthy(0); // false\n * isTruthy({}); // true\n * isTruthy(0, { ignoreZero: true }); // true\n */\n\nexport const isTruthy = <T>(value: T, options?: { ignoreZero?: boolean; ignoreCheckString?: boolean; ignoreUnWrapSignal?: boolean }): value is NonNullable<T> => {\n return !isFalsy(value, options);\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không\n * @param value Giá trị cần kiểm tra\n * @param options Cấu hình tùy chọn\n * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0\n * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không\n * @example\n * isFalsy(null); // true\n * isFalsy(''); // true\n * isFalsy(undefined); // true\n * isFalsy(0); // true\n * isFalsy({}); // false\n * isFalsy(0, { ignoreZero: true }); // false\n */\nexport const isFalsy = (value: unknown, options?: { ignoreZero?: boolean; ignoreCheckString?: boolean; ignoreUnWrapSignal?: boolean }): value is null | undefined | '' | 0 => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n\n if (options?.ignoreZero && value === 0) {\n return false;\n }\n\n if (options?.ignoreCheckString && value === '') {\n return false;\n }\n\n return !value;\n};\n\n/**\n * Loại bỏ các thuộc tính của đối tượng dựa trên một hàm điều kiện\n * @param objData Đối tượng cần xử lý\n * @param predicate Hàm điều kiện để kiểm tra giá trị của thuộc tính. Nếu hàm trả về true thì thuộc tính đó sẽ bị loại bỏ\n * @returns Đối tượng mới sau khi đã loại bỏ các thuộc tính thỏa mãn điều kiện\n * @example\n * const obj = { a: 1, b: null, c: 3, d: undefined };\n * omitBy(obj, isNil); // { a: 1, c: 3 }\n */\nexport const omitBy = <T>(objData: Record<string, any>, predicate: (val: any) => boolean): T => {\n if (!objData || typeof objData !== 'object' || Array.isArray(objData)) {\n return objData as T;\n }\n const newObj = {} as T;\n\n Object.keys(objData).forEach((key) => {\n const valueOfKey = get(objData, key);\n if (!predicate(valueOfKey)) {\n set(newObj, key as PathOf<T>, valueOfKey);\n }\n });\n return newObj;\n};\n\n/**\n * Lấy giá trị từ đối tượng theo đường dẫn chỉ định\n *\n * Hàm này giúp bạn truy cập vào các thuộc tính sâu bên trong một đối tượng một cách an toàn,\n * tránh lỗi khi thuộc tính không tồn tại.\n *\n * @param obj Đối tượng nguồn cần lấy giá trị\n * @param path Đường dẫn đến thuộc tính cần lấy. Có thể là:\n * - Chuỗi: 'user.profile.name' hoặc 'items[0].title'\n * - Mảng: ['user', 'profile', 'name'] hoặc ['items', '0', 'title']\n * - Chuỗi rỗng '': trả về chính đối tượng gốc\n * @param defaultValue Giá trị mặc định trả về khi không tìm thấy thuộc tính (mặc định: undefined)\n * @param keepLastValueIfSignal Có giữ nguyên signal cuối cùng hay không (mặc định: false - sẽ gọi signal())\n * @returns Giá trị tìm được hoặc giá trị mặc định\n *\n * @example\n * // Ví dụ cơ bản\n * const user = { name: 'John', age: 30 };\n * get(user, 'name'); // 'John'\n * get(user, 'email'); // undefined\n * get(user, 'email', 'no-email'); // 'no-email'\n *\n * @example\n * // Truyền path rỗng - trả về chính đối tượng gốc\n * const data = { name: 'Alice', age: 25 };\n * get(data, ''); // { name: 'Alice', age: 25 } (chính đối tượng data)\n * get(data, '', 'default'); // { name: 'Alice', age: 25 } (bỏ qua defaultValue)\n *\n * @example\n * // Truy cập thuộc tính sâu\n * const data = {\n * user: {\n * profile: {\n * name: 'Alice',\n * settings: { theme: 'dark' }\n * }\n * }\n * };\n * get(data, 'user.profile.name'); // 'Alice'\n * get(data, 'user.profile.settings.theme'); // 'dark'\n * get(data, 'user.profile.avatar', 'default.jpg'); // 'default.jpg'\n *\n * @example\n * // Truy cập mảng\n * const items = [\n * { name: 'Item 1', price: 100 },\n * { name: 'Item 2', price: 200 }\n * ];\n * get(items, '[0].name'); // 'Item 1'\n * get(items, '[1].name'); // 'Item 2'\n * get(items, '[2].name', 'Not found'); // 'Not found'\n *\n * @example\n * // Sử dụng với mảng path\n * const nested = { a: { b: { c: 'deep value' } } };\n * get(nested, ['a', 'b', 'c']); // 'deep value'\n * get(nested, ['a', 'b', 'd'], 'default'); // 'default'\n *\n * @example\n * // Trường hợp đặc biệt\n * get(null, 'any.path'); // undefined\n * get(undefined, 'any.path', 'fallback'); // 'fallback'\n */\nexport const get = <O, P extends PathOf<O> = PathOf<O>, KS extends boolean = false, D extends GetValueAtPath<O, P, KS> | undefined = undefined>(\n obj: Signal<O> | O,\n path: P,\n defaultValue?: D,\n keepLastValueIfSignal?: KS\n): GetReturnType<O, P, KS, D> => {\n // helper cast để tránh lặp lại kiểu điều kiện ở các return\n const out = (v: unknown) => v as GetReturnType<O, P, KS, D>;\n\n if (isNil(obj)) {\n return out(defaultValue);\n }\n obj = unwrapSignal(obj);\n if (path === '') {\n return out(obj);\n }\n if (obj instanceof HttpParams) {\n return out(obj.get(`${path}`) ?? defaultValue);\n }\n if (obj instanceof DOMRect) {\n return out(obj[path as keyof DOMRect]);\n }\n\n const paths = Array.isArray(path)\n ? path\n : (path as string)\n .replace(/\\[(\\d+)]/g, '.$1')\n .split('.')\n .filter((key) => key);\n\n for (const index in paths) {\n const key = paths[index];\n if (obj instanceof CSSStyleDeclaration) {\n obj = obj[key as keyof CSSStyleDeclaration] as O;\n continue;\n }\n\n if (obj instanceof HTMLElement) {\n obj = obj[key as keyof HTMLElement] as O;\n continue;\n }\n obj = unwrapSignal(obj);\n if (isNil(obj) || !Object.prototype.hasOwnProperty.call(obj, key)) {\n return out(defaultValue);\n }\n const val = isSignal((obj as any)[key]) && !keepLastValueIfSignal ? (obj as any)[key]() : (obj as any)[key];\n\n obj = val as O;\n }\n\n return out(obj ?? defaultValue);\n};\n\n/**\n * Thiết lập giá trị cho một thuộc tính trong đối tượng theo đường dẫn chỉ định\n * @param obj Đối tượng cần thiết lập giá trị\n * @param path Đường dẫn đến thuộc tính, có thể là chuỗi (vd: 'a.b.c') hoặc mảng (vd: ['a', 'b', 'c'])\n * @param value Giá trị cần thiết lập\n * @returns Đối tượng sau khi đã thiết lập giá trị\n * @throws Error nếu tham số đầu tiên không phải là đối tượng\n * @example\n * const obj = { a: { b: 1 } };\n * set(obj, 'a.b', 2); // { a: { b: 2 } }\n */\nexport const set = <O, P extends PathOf<O> = PathOf<O>, T extends GetValueAtPath<O, P, true> = GetValueAtPath<O, P, true>>(\n obj: Signal<O> | O,\n path: P,\n value: T,\n options?: { valueDefaultPathObjectUndefined?: any; valueDefaultPathArrayUndefined?: any }\n): O => {\n if (isNil(obj) || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {\n throw new Error('The first argument must be an object');\n }\n\n if (obj instanceof HttpParams) {\n return obj.set(`${path}`, value as string) as O;\n }\n\n const pathArray = Array.isArray(path)\n ? path\n : (path as string)\n .replace(/\\[(\\d+)]/g, '.[$1]')\n .split('.')\n .filter((key) => key);\n\n let currentObjectByKey: any = isSignal(obj) ? obj() : obj;\n let preObjectByKey = obj;\n\n pathArray.forEach((key, index) => {\n if (index < pathArray.length - 1) {\n if (!(key in currentObjectByKey) || (typeof currentObjectByKey[key] !== 'object' && !isSignal(currentObjectByKey[key]))) {\n const nextKey = pathArray[index + 1];\n key = key.replace(/\\[(\\d+)]/g, '$1');\n if (isNil(currentObjectByKey[key])) {\n currentObjectByKey[key] = /\\[(\\d+)]/g.test(nextKey) ? (options?.valueDefaultPathArrayUndefined ?? []) : (options?.valueDefaultPathObjectUndefined ?? {});\n }\n }\n currentObjectByKey = key ? currentObjectByKey[key] : currentObjectByKey;\n preObjectByKey = currentObjectByKey;\n currentObjectByKey = isSignal(currentObjectByKey) ? currentObjectByKey() : currentObjectByKey;\n return;\n }\n\n if (typeof currentObjectByKey !== 'object') {\n return;\n }\n\n // Gán giá trị ở cuối đường dẫn\n key = key.replace(/\\[(\\d+)]/g, '$1');\n const valueOfKey = currentObjectByKey[key];\n const valueOfKeyIsSignal = isSignal(valueOfKey);\n\n if (valueOfKeyIsSignal && (typeof valueOfKey() !== 'object' || valueOfKey() === null)) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n return;\n }\n if (isSignal(preObjectByKey)) {\n (preObjectByKey as WritableSignal<any>).update((data: any) => {\n const dataOfKey = data[key];\n if (isNil(dataOfKey) || !valueOfKeyIsSignal) {\n data[key] = value;\n }\n\n if (valueOfKeyIsSignal) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n }\n\n if (Array.isArray(data)) {\n return [...data];\n }\n return { ...data };\n });\n return;\n }\n if (valueOfKeyIsSignal) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n return;\n }\n currentObjectByKey[key] = value;\n });\n\n return obj as O;\n};\n\n/**\n * Tạo một bản sao sâu của một đối tượng hoặc giá trị bất kỳ\n * @param data Dữ liệu cần sao chép\n * @param options Tùy chọn cấu hình\n * @param options.ignoreSignal Nếu true, sẽ không sao chép các signal mà trả về signal gốc\n * @param seen WeakMap để theo dõi các tham chiếu đã được sao chép, tránh lặp vô hạn với các tham chiếu vòng\n * @returns Bản sao sâu của dữ liệu đầu vào\n * @example\n * const obj = {\n * a: 1,\n * b: { c: 2 },\n * d: [1, 2, 3]\n * };\n * const clone = cloneDeep(obj);\n * // clone là một bản sao hoàn toàn độc lập của obj\n */\nexport const cloneDeep = <T = any>(data: any, options = { ignoreSignal: false }, seen = new WeakMap()): T => {\n if (data === null || (typeof data !== 'object' && !isSignal(data)) || isDangerousObject(data)) {\n return data;\n }\n\n if (seen.has(data)) {\n return seen.get(data);\n }\n\n if (data instanceof HttpParams) {\n return new UtilsHttpParamsRequest(undefined, data) as T;\n }\n\n if (data instanceof Date) {\n return new Date(data.getTime()) as T;\n }\n\n if (isDayjsObject(data)) {\n return getDayjs({ date: data.valueOf() }) as T;\n }\n\n if (isRegExp(data)) {\n return new RegExp(data.source, data.flags) as T;\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n seen.set(data, mapCopy);\n data.forEach((val, key) => {\n mapCopy.set(cloneDeep(key, options, seen), cloneDeep(val, options, seen));\n });\n return mapCopy as T;\n }\n\n if (isSet(data)) {\n const setCopy = new Set();\n seen.set(data, setCopy);\n data.forEach((val) => {\n setCopy.add(cloneDeep(val, options, seen));\n });\n return setCopy as T;\n }\n\n if (isArray(data)) {\n seen.set(data, data.map((item) => cloneDeep(item, options, seen)) as T);\n return seen.get(data) as T;\n }\n\n if (isReturnAsIsObject(data)) {\n return data as T;\n }\n\n if (isSignal(data)) {\n if (options?.ignoreSignal) {\n return data as T;\n }\n seen.set(data, signal(cloneDeep(data(), options, seen)));\n return seen.get(data) as T;\n }\n\n const result: Record<string, any> = {};\n seen.set(data, result);\n for (const key in data) {\n const value = data[key];\n if (value instanceof HttpParams) {\n result[key] = new UtilsHttpParamsRequest(undefined, value) as T;\n continue;\n }\n\n if (value instanceof Date) {\n result[key] = new Date(value.getTime()) as T;\n continue;\n }\n\n if (dayjs.isDayjs(value)) {\n result[key] = getDayjs({ date: value.valueOf() }) as T;\n continue;\n }\n\n if (isRegExp(data)) {\n result[key] = new RegExp(value.source, value.flags) as T;\n continue;\n }\n if (isReturnAsIsObject(data)) {\n result[key] = value;\n continue;\n }\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n result[key] = cloneDeep(value, options, seen);\n }\n }\n\n return result as T;\n};\n\n/**\n * Chuyển đổi một mảng các đối tượng thành một đối tượng với khóa được chỉ định\n * @param data Mảng các đối tượng cần chuyển đổi\n * @param key Tên thuộc tính được sử dụng làm khóa trong đối tượng kết quả\n * @returns Đối tượng với các giá trị từ mảng được đánh key theo thuộc tính đã chỉ định\n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' }\n * ];\n * keyBy(data, 'id');\n * // Kết quả: {\n * // '1': { id: 1, name: 'John' },\n * // '2': { id: 2, name: 'Jane' }\n * // }\n */\nexport const keyBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = get(nextItem, key as PathOf<TYPE_OBJECT>);\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number' && typeof valueOfKey !== 'boolean') {\n return dir;\n }\n if (!Object.keys(dir).includes(`${valueOfKey}`)) {\n dir[`${valueOfKey}`] = nextItem;\n }\n return dir;\n }, {});\n};\n\n/**\n * Nhóm các đối tượng trong một mảng thành các nhóm dựa trên một thuộc tính cụ thể\n * @param data Mảng các đối tượng cần nhóm\n * @param key Tên thuộc tính được sử dụng làm khóa nhóm\n * @returns Đối tượng với các giá trị từ mảng được nhóm theo thuộc tính đã chỉ định\n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' },\n * { id: 1, name: 'John' }\n * ];\n * groupBy(data, 'id');\n * // Kết quả: {\n * // '1': [\n * // { id: 1, name: 'John' },\n * // { id: 1, name: 'John' }\n * // ],\n * // '2': [\n * // { id: 2, name: 'Jane' }\n * // }\n */\nexport const groupBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !Object.keys(get(data, '[0]')).length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = get(nextItem, key as PathOf<TYPE_OBJECT>);\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number' && typeof valueOfKey !== 'boolean') {\n return dir;\n }\n if (!Object.keys(dir).includes(`${valueOfKey}`)) {\n dir[`${valueOfKey}`] = [];\n }\n dir[`${valueOfKey}`].push(nextItem);\n return dir;\n }, {});\n};\n\n/**\n * Tạo một mảng các số từ giá trị bắt đầu đến giá trị kết thúc với bước nhảy tùy chọn\n * @param start Giá trị bắt đầu của dãy số. Nếu chỉ có một tham số, đây sẽ là giá trị kết thúc và giá trị bắt đầu sẽ là 0\n * @param end Giá trị kết thúc của dãy số (tùy chọn)\n * @param step Bước nhảy giữa các số trong dãy (tùy chọn). Mặc định là 1 nếu end > start, -1 nếu end < start\n * @returns Mảng các số từ start đến end với bước nhảy step\n * @example\n * range(4); // [0, 1, 2, 3]\n * range(1, 5); // [1, 2, 3, 4]\n * range(0, 20, 5); // [0, 5, 10, 15]\n * range(5, 2); // [5, 4, 3]\n */\nexport const range = (start: number, end?: number, step?: number): Array<number> => {\n if (end === undefined || end === null) {\n end = start;\n start = 0;\n }\n\n if (!step) {\n step = end < 0 ? -1 : 1;\n }\n\n if (end < start && step > 0) {\n step *= -1;\n }\n\n const valueStartByStep = step + start;\n const direction = start < end ? 'asc' : 'desc';\n if ((direction === 'asc' && (valueStartByStep < start || valueStartByStep > end)) || (direction === 'desc' && (valueStartByStep > start || valueStartByStep < end))) {\n return [start];\n }\n\n const arr = new Array<number>();\n\n for (let index = 0; index < Math.abs(end - start); index++) {\n let value = start + index * step;\n if (index === 0) {\n value = start;\n }\n\n if ((direction === 'asc' && (value < start || value > end)) || (direction === 'desc' && (value > start || value < end))) {\n return arr;\n }\n\n arr.push(value);\n }\n\n return arr;\n};\n\n/**\n * So sánh hai giá trị bất kỳ có bằng nhau hay không\n * @param value1 Giá trị thứ nhất cần so sánh\n * @param value2 Giá trị thứ hai cần so sánh\n * @param exactlyPosition Có so sánh chính xác vị trí các phần tử trong mảng hay không\n * @returns true nếu hai giá trị bằng nhau, false nếu không bằng nhau\n * @example\n * isEqual([1,2,3], [1,2,3]); // true\n * isEqual([1,2,3], [3,2,1]); // true khi exactlyPosition = false\n * isEqual([1,2,3], [3,2,1]); // false khi exactlyPosition = true\n * isEqual({a:1}, {a:1}); // true\n */\nexport const isEqual = (\n value1: any,\n value2: any,\n options?: {\n exactlyPosition?: boolean;\n ignoreExactlyDataType?: boolean;\n ignoreUnWrapSignal?: boolean;\n }\n): boolean => {\n // Handle signals\n if (!options?.ignoreUnWrapSignal) {\n value1 = unwrapSignal(value1);\n value2 = unwrapSignal(value2);\n }\n const { exactlyPosition = false, ignoreExactlyDataType = false } = options || {};\n\n if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {\n return true;\n }\n\n if (ignoreExactlyDataType) {\n return isEqual(isNil(value1) ? undefined : `${value1}`, isNil(value2) ? undefined : `${value2}`);\n }\n\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2)) || (!Array.isArray(value1) && Array.isArray(value2))) {\n return false;\n }\n\n if (Array.isArray(value1) || Array.isArray(value2)) {\n if (value1.length !== value2.length) {\n return false;\n }\n if (!exactlyPosition) {\n return !value1.some((item: any) => !value2.includes(item));\n }\n\n return !value1.some((item: any, index: number) => !isEqual(item, value2[index], options));\n }\n\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n return !Object.keys(value1).some((key) => !isEqual(value1[key], value2[key], options));\n};\n\n/**\n * Loại bỏ các phần tử trùng lặp trong mảng dựa trên một thuộc tính chỉ định\n * @param data Mảng dữ liệu cần xử lý\n * @param key Tên thuộc tính dùng để so sánh trùng lặp. Nếu không có key thì so sánh trực tiếp giá trị\n * @returns Mảng mới chứa các phần tử không trùng lặp\n * @example\n * const arr = [\n * { id: 1, name: 'A' },\n * { id: 2, name: 'B' },\n * { id: 1, name: 'C' }\n * ];\n * uniqBy(arr, 'id'); // [{ id: 1, name: 'A' }, { id: 2, name: 'B' }]\n *\n * const numbers = [1, 2, 2, 3, 3];\n * uniqBy(numbers); // [1, 2, 3]\n *\n * const numbersSignal = [signal(1), signal(2), signal(3), signal(2), signal(5), signal(4), signal(1), signal(6), signal(7), signal(6)];\n * uniqBy(numbersSignal); // [signal(1), signal(2), signal(3), signal(5), signal(4), signal(6), signal(7)]\n */\nexport const uniqBy = <T>(data: Array<T>, key?: string): Array<T> => {\n if (!key || !data?.length || typeof get(data, '[0]') !== 'object') {\n // Xử lý mảng chứa signal values\n if (data[0] && isSignal(data[0])) {\n const seen = new Set<string>();\n\n return data.filter((item) => {\n const value = `${get<any>(item, '')}`;\n if (seen.has(value)) {\n return false;\n }\n seen.add(value);\n return true;\n });\n }\n // Xử lý mảng primitive values\n return Array.from(new Set(data));\n }\n\n const dataUnique = keyBy(data as Array<Record<string, any>>, key);\n\n return Object.keys(dataUnique).map((key) => dataUnique[key]);\n};\n\nexport const generateInterface = (obj: any, interfaceName: string): string => {\n const generateType = (value: any): string => {\n if (value === null) {\n return 'null';\n }\n const type = typeof value;\n\n if (type === 'string') {\n return 'string';\n }\n if (type === 'number') {\n return 'number';\n }\n if (type === 'boolean') {\n return 'boolean';\n }\n if (type === 'undefined') {\n return 'any';\n }\n\n if (value instanceof Date) {\n return 'Date';\n }\n\n if (value instanceof RegExp) {\n return 'RegExp';\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'Array<any>';\n }\n return `Array<${generateType(value[0])}>`;\n }\n\n if (type === 'object') {\n let interfaceStr = '{\\n';\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const valueType = generateType(value[key]);\n interfaceStr += ` ${key}: ${valueType};\\n`;\n }\n }\n interfaceStr += '}';\n return interfaceStr;\n }\n\n return 'any';\n };\n\n const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;\n return interfaceStr;\n};\n","import { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\n\nimport Bowser from 'bowser';\nimport { finalize, fromEvent, mergeMap, startWith, takeUntil, tap } from 'rxjs';\nimport { set } from './helpers';\n\nlet parser: DOMParser | null = null;\nlet bowserParser: Bowser.Parser.Parser | null = null;\n\nexport const getDeviceInfo = () => {\n if (!bowserParser) {\n bowserParser = Bowser.getParser(window.navigator.userAgent);\n }\n return bowserParser;\n};\n\nexport const isTouchDevice = (): boolean => ('onpointerdown' in navigator && navigator.maxTouchPoints > 0) || 'ontouchstart' in window || (window.matchMedia?.('(pointer: coarse)').matches ?? false);\n\nexport const getEventNameHandleClick = (() => {\n if (isTouchDevice()) {\n return 'pointerdown';\n }\n const deviceInfo = getDeviceInfo();\n\n return deviceInfo.isPlatform('desktop') ? 'click' : 'touchstart';\n})();\n\nexport const getDocumentByString = (htmlStr: string): Document => {\n if (!parser) {\n parser = new DOMParser();\n }\n return parser.parseFromString(htmlStr, 'text/html');\n};\n\nexport const cloneIBoundingClientRect = (rect: IBoundingClientRect): IBoundingClientRect => {\n return {\n top: rect['top'],\n left: rect['left'],\n width: rect['width'],\n height: rect['height'],\n bottom: rect['bottom'],\n };\n};\n\nexport const setStylesElement = (el: HTMLElement, styles: Record<string, string>): void => {\n Object.keys(styles).forEach((key: string) => set(el, `style.${key}`, styles[key]));\n};\n\nexport const getViewport = (win: Window = window): { width: number; height: number } => {\n const doc = win.document.documentElement,\n body = win.document.getElementsByTagName('body')[0],\n w = win.innerWidth || doc.clientWidth || body.clientWidth,\n h = win.innerHeight || doc.clientHeight || body.clientHeight;\n\n return { width: w, height: h };\n};\n\nexport const setCaretPosition = (element: HTMLTextAreaElement | HTMLInputElement, position: number): void => {\n if (!element || !element.setSelectionRange) {\n return;\n }\n element.focus();\n element.setSelectionRange(position, position);\n};\n\nexport const checkViewInScreen = (container: HTMLElement, element: HTMLElement, elementScroll?: HTMLElement, maxTopLeft?: { top?: number; left?: number }): boolean => {\n if (!container || !element) {\n return false;\n }\n\n const rectContainer = cloneIBoundingClientRect(container.getBoundingClientRect());\n\n if (elementScroll) {\n const rectElementScroll = elementScroll.getBoundingClientRect();\n\n rectContainer['left'] = rectElementScroll.left;\n rectContainer['top'] = rectElementScroll.top;\n }\n\n const rectElement = element.getBoundingClientRect();\n const { left, top } = rectElement;\n const topContainer = rectContainer['top'];\n const leftContainer = rectContainer['left'];\n const widthContainer = rectContainer['width'];\n const heightContainer = rectContainer['height'];\n const scrollTopContainer = container.scrollTop;\n const scrollLeftContainer = container.scrollLeft;\n const limitTop = topContainer + scrollTopContainer + heightContainer;\n const limitLeft = leftContainer + scrollLeftContainer + widthContainer;\n\n const maxTopItem = top + (maxTopLeft?.top || 0);\n const maxLeftItem = left + (maxTopLeft?.left || 0);\n\n if (topContainer <= maxTopItem && maxTopItem <= limitTop && leftContainer <= maxLeftItem && maxLeftItem <= limitLeft) {\n return true;\n }\n\n return false;\n};\n\nexport const checkMouseOverInContainer = (mousePosition: { clientX: number; clientY: number }, element?: HTMLElement, rect?: DOMRect): boolean => {\n if (!element && !rect) {\n return false;\n }\n const rectElement = rect || element?.getBoundingClientRect() || ({} as DOMRect);\n const { left, top, width, height } = rectElement;\n const limitLeft = left + width;\n const limitTop = top + height;\n const { clientX, clientY } = mousePosition;\n if (left <= clientX && clientX <= limitLeft && top <= clientY && clientY <= limitTop) {\n return true;\n }\n\n return false;\n};\n\nexport const getDragEventByElement = (config: {\n elementMouseDown: HTMLElement;\n functionMouseDown?: (event: MouseEvent) => void;\n isStartWithMouseDownEvent?: boolean;\n elementMouseMove?: HTMLElement;\n functionMouseMove?: (event: MouseEvent) => void;\n elementMouseUp?: HTMLElement;\n functionMouseUp?: (event: MouseEvent) => void;\n destroyRef: DestroyRef;\n}) => {\n let timer: ReturnType<typeof setTimeout>;\n const addClass = () => {\n timer = setTimeout(() => {\n document.body.classList.add('!select-none');\n document.body.classList.add('!cursor-grabbing');\n }, 250);\n };\n const removeClass = () => {\n document.body.classList.remove('!select-none');\n document.body.classList.remove('!cursor-grabbing');\n clearTimeout(timer);\n };\n fromEvent(config.elementMouseDown, 'mouseleave')\n .pipe(\n tap(() => document.body.classList.remove('cursor-pointer')),\n takeUntilDestroyed(config.destroyRef)\n )\n .subscribe();\n fromEvent(config.elementMouseDown, 'mouseenter')\n .pipe(\n tap(() => document.body.classList.add('cursor-pointer')),\n takeUntilDestroyed(config.destroyRef)\n )\n .subscribe();\n\n const mouseDown = fromEvent<MouseEvent>(config.elementMouseDown, 'mousedown').pipe(\n tap((e) => {\n e.stopPropagation();\n addClass();\n config.functionMouseDown?.(e);\n })\n );\n const mouseup = fromEvent<MouseEvent>(config.elementMouseUp || document, 'mouseup').pipe(\n tap((e) => {\n e.stopPropagation();\n removeClass();\n config.functionMouseUp?.(e);\n })\n );\n\n const mousemove = fromEvent<MouseEvent>(config.elementMouseMove || document, 'mousemove').pipe(\n tap((e) => {\n e.stopPropagation();\n config.functionMouseMove?.(e);\n }),\n takeUntil(mouseup)\n );\n\n return mouseDown.pipe(\n mergeMap((e: MouseEvent) => (config.isStartWithMouseDownEvent ? mousemove.pipe(startWith(e)) : mousemove)),\n takeUntilDestroyed(config.destroyRef),\n finalize(removeClass)\n );\n};\n","export class UtilsUrlSearchParams {\n private static instance: UtilsUrlSearchParams;\n private params: Array<{ key: string; value: string }>;\n constructor(paramString: string) {\n this.params = new Array<{ key: string; value: string }>();\n this.params.length = 0;\n this.params.push(...this.buildParams(paramString));\n }\n\n static getInstance() {\n if (!this.instance) {\n this.instance = new UtilsUrlSearchParams('');\n }\n\n return this.instance;\n }\n\n public static toStringParamObject(params: { [key in string]: string }) {\n const paramsArr: Array<{ key: string; value: string }> = Object.keys(params).map((key) => {\n return {\n key,\n value: params[key],\n };\n });\n\n return UtilsUrlSearchParams.ToString(paramsArr);\n }\n\n public static ToString(params: Array<{ key: string; value: string }>) {\n let paramsStr = '';\n\n params\n .sort((item1, item2) => item1.key.localeCompare(item2.key))\n .forEach((item) => {\n const { key, value } = item;\n\n paramsStr = `${paramsStr}${paramsStr ? '&' : ''}${key}=${value}`;\n });\n\n return paramsStr;\n }\n\n private buildParams(paramString: string): Array<{ key: string; value: string }> {\n const paramsBuild = new Array<{ key: string; value: string }>();\n\n if (!paramString) {\n return paramsBuild;\n }\n\n const paramsError = paramString.split('?');\n\n if (paramsError.length > 2) {\n paramString = `${paramsError[0]}?${paramsError[1]}&${paramsError.slice(2).join('&')}`;\n }\n\n const params = paramString.replace(/\\S+[?]/g, '').split('&');\n\n if (params) {\n params.forEach((param) => {\n if (param.indexOf('=') < 0) {\n return;\n }\n let [key, value] = param.split('=');\n\n key = key.replace(/[?&]+/g, '');\n value = decodeURIComponent(value.replace(/\\+/g, ' '));\n if (!paramsBuild.some((param) => param.key === key)) {\n paramsBuild.push({ key, value });\n }\n });\n }\n\n return paramsBuild;\n }\n\n public set(key: string, value: string) {\n const paramByKey = this.params.find((param) => param.key === key) as Record<string, string>;\n\n if (!paramByKey) {\n this.params.push({ key, value: decodeURIComponent(value.replace(/\\+/g, ' ')) });\n\n return;\n }\n\n paramByKey['value'] = value;\n }\n\n public get(key: string) {\n return this.params.find((param) => param.key === key)?.value;\n }\n\n public has(key: string) {\n return this.params.some((param) => param.key === key);\n }\n\n public delete(key: string) {\n const index = this.params.findIndex((param) => param.key === key);\n\n if (index >= 0) {\n this.params.splice(index, 1);\n }\n }\n\n public length() {\n return this.params.length;\n }\n\n public toString(params?: Array<{ key: string; value: string }>) {\n params = params || this.params;\n\n return UtilsUrlSearchParams.ToString(params);\n }\n\n public getParamObject() {\n const params = {} as Record<string, string>;\n\n this.params.forEach((item) => {\n params[item.key] = item.value;\n });\n\n return params;\n }\n\n public compareParams(param1: string, param2: string) {\n const params1 = this.toString(this.buildParams(param1));\n const params2 = this.toString(this.buildParams(param2));\n\n return params1 === params2;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface IColorContrastFromOrigin {\n step: number;\n label: string;\n light: string;\n dark: string;\n}\n\nconst step = 20;\nconst percent = 0.05;\n\nexport const colorStepContrastFromOrigin = (color: string, stepNumber: number) => {\n return colorContrastFromOrigin(color).find((item) => item.step === stepNumber);\n};\n\nexport const colorContrastFromOrigin = (color: string): Array<IColorContrastFromOrigin> => {\n const parsedColorsArray = parseColorValues(color);\n const colors: any = [];\n let calculatedShades: Array<string> = [];\n let calculatedTints: Array<string> = [];\n\n if (parsedColorsArray !== null) {\n for (let i = 0; i < parsedColorsArray.length; i++) {\n calculatedShades = calculateShades(parsedColorsArray[i]);\n calculatedTints = calculateTints(parsedColorsArray[i]);\n }\n\n for (let i = 0; i <= step; i++) {\n colors.push({ step: i * 5, label: `${i * 5}%`, dark: `#${calculatedShades[i]}`, light: `#${calculatedTints[i]}` });\n }\n }\n\n return colors;\n};\n\nconst parseColorValues = (colorValues: any) => {\n let colorValuesArray = colorValues.match(/\\b[0-9A-Fa-f]{3}\\b|[0-9A-Fa-f]{6}\\b/g);\n\n if (colorValuesArray) {\n colorValuesArray = colorValuesArray.map((item: any) => {\n if (item.length === 3) {\n let newItem = item.toString().split('');\n\n newItem = newItem.reduce((acc: any, it: any) => {\n return acc + it + it;\n }, '');\n\n return newItem;\n }\n\n return item;\n });\n }\n\n return colorValuesArray;\n};\n\nconst calculateShades = (colorValue: any) => {\n return calculate(colorValue, rgbShade).concat('000000');\n};\n\nconst calculateTints = (colorValue: any) => {\n return calculate(colorValue, rgbTint).concat('ffffff');\n};\n\nconst calculate = (colorValue: any, shadeOrTint: any) => {\n const color = hexToRGB(colorValue);\n const shadeValues: Array<string> = [];\n\n for (let i = 0; i < step; i++) {\n shadeValues[i] = rgbToHex(shadeOrTint(color, i));\n }\n\n return shadeValues;\n};\n\nconst rgbShade = (rgb: any, i: any) => {\n return { red: rgb.red * (1 - percent * i), green: rgb.green * (1 - percent * i), blue: rgb.blue * (1 - percent * i) };\n};\nconst rgbTint = (rgb: any, i: any) => {\n return { red: rgb.red + (255 - rgb.red) * i * percent, green: rgb.green + (255 - rgb.green) * i * percent, blue: rgb.blue + (255 - rgb.blue) * i * percent };\n};\n\nexport const rgbToHex = (rgb: any) => {\n return intToHex(rgb.red) + intToHex(rgb.green) + intToHex(rgb.blue);\n};\nconst hexToRGB = (colorValue: any) => {\n return { red: parseInt(colorValue.substr(0, 2), 16), green: parseInt(colorValue.substr(2, 2), 16), blue: parseInt(colorValue.substr(4, 2), 16) };\n};\nconst intToHex = (rgbint: any) => {\n return pad(Math.min(Math.max(Math.round(rgbint), 0), 255).toString(16), 2);\n};\n\nconst pad = (number: any, length: any) => {\n let str = '' + number;\n\n while (str.length < length) {\n str = '0' + str;\n }\n\n return str;\n};\n\nexport const listColorDefine: Array<string> = [\n '#E62222',\n '#B81B1B',\n '#EB4E4E',\n '#F97316',\n '#C75C12',\n '#FA8F45',\n '#FFB700',\n '#CC9200',\n '#FFC533',\n '#84CC16',\n '#6AA312',\n '#9dd645',\n '#00BC62',\n '#00A757',\n '#33DA8A',\n '#06B6D4',\n '#1B59C4',\n '#4E8CF7',\n '#0EA5E9',\n '#1B59C4',\n '#4E8CF7',\n '#226FF5',\n '#1B59C4',\n '#4E8CF7',\n '#6366F1',\n '#4F52C1',\n '#8285F4',\n '#5B04B3',\n '#49038F',\n '#7C36C2',\n '#D946EF',\n '#AE38BF',\n '#E16BF2',\n '#EC4899',\n '#BD3A7A',\n '#F06DAD',\n '#F43F5E',\n '#C3324B',\n '#F6657E',\n '#757380',\n '#5E5C66',\n '#918F99',\n '#202020',\n '#1A1A1A',\n '#4D4D4D',\n];\n\nexport const getColorById = (str: string): string => {\n let hashString = 0;\n\n if (!str) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n\n hashString = (hashString << 5) - hashString + char;\n hashString = hashString & hashString;\n }\n\n return listColorDefine[Math.abs(hashString) % listColorDefine.length];\n};\n\nexport const detectAndCleanNearWhiteColors = (style: string): string => {\n if (!style) return style;\n\n const styleMap: Record<string, string> = {};\n const rules = style\n .split(';')\n .map((s) => s.trim())\n .filter(Boolean);\n\n for (const rule of rules) {\n const [keyRaw, valueRaw] = rule.split(':').map((s) => s.trim());\n if (!keyRaw || !valueRaw) continue;\n const key = keyRaw.toLowerCase();\n styleMap[key] = valueRaw;\n }\n\n const colorKeys = ['color', 'background', 'background-color', 'border-color'];\n for (const key of colorKeys) {\n const value = styleMap[key];\n if (value && isNearWhite(value)) {\n delete styleMap[key];\n }\n }\n\n return Object.entries(styleMap)\n .map(([k, v]) => `${k}: ${v}`)\n .join('; ');\n};\n\nexport const isNearWhite = (color: string): boolean => {\n if (!color) return false;\n color = color.trim().toLowerCase();\n\n // Chuyển HEX, RGB hoặc tên màu sang r,g,b\n const parseColor = (input: string): [number, number, number] | null => {\n if (input.startsWith('#')) {\n let hex = input.slice(1);\n if (hex.length === 3)\n hex = hex\n .split('')\n .map((c) => c + c)\n .join('');\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return [r, g, b];\n }\n\n const rgbMatch = input.match(/rgba?\\s*\\(([^)]+)\\)/);\n if (rgbMatch) {\n const [r, g, b] = rgbMatch[1]\n .split(',')\n .slice(0, 3)\n .map((v) => parseFloat(v.trim()));\n return [r, g, b];\n }\n\n const whiteNames = ['white', 'snow', 'ivory', 'ghostwhite', 'floralwhite', 'seashell', 'whitesmoke'];\n if (whiteNames.includes(input)) return [255, 255, 255];\n return null;\n };\n\n const rgb = parseColor(color);\n if (!rgb) return false;\n\n const [r, g, b] = rgb;\n\n // Tính luminance (độ sáng)\n const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\n\n // Tính saturation (độ bão hòa)\n const max = Math.max(r, g, b) / 255;\n const min = Math.min(r, g, b) / 255;\n const saturation = max === 0 ? 0 : (max - min) / max;\n\n // Chỉ coi là \"gần trắng\" nếu:\n // 1. rất sáng (luminance > 0.95)\n // 2. và rất ít màu (saturation < 0.1)\n return luminance > 0.95 && saturation < 0.1;\n};\n","export abstract class UtilsKeyCodeConstant {\n static readonly MAC_ENTER = 3;\n static readonly BACKSPACE = 8;\n static readonly TAB = 9;\n static readonly NUM_CENTER = 12;\n static readonly ENTER = 13;\n static readonly SHIFT = 16;\n static readonly CONTROL = 17;\n static readonly ALT = 18;\n static readonly PAUSE = 19;\n static readonly CAPS_LOCK = 20;\n static readonly ESCAPE = 27;\n static readonly SPACE = 32;\n static readonly PAGE_UP = 33;\n static readonly PAGE_DOWN = 34;\n static readonly END = 35;\n static readonly HOME = 36;\n static readonly LEFT_ARROW = 37;\n static readonly UP_ARROW = 38;\n static readonly RIGHT_ARROW = 39;\n static readonly DOWN_ARROW = 40;\n static readonly PLUS_SIGN = 43;\n static readonly PRINT_SCREEN = 44;\n static readonly INSERT = 45;\n static readonly DELETE = 46;\n static readonly ZERO = 48;\n static readonly ONE = 49;\n static readonly TWO = 50;\n static readonly THREE = 51;\n static readonly FOUR = 52;\n static readonly FIVE = 53;\n static readonly SIX = 54;\n static readonly SEVEN = 55;\n static readonly EIGHT = 56;\n static readonly NINE = 57;\n static readonly FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\n static readonly FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\n static readonly QUESTION_MARK = 63;\n static readonly AT_SIGN = 64;\n static readonly A = 65;\n static readonly B = 66;\n static readonly C = 67;\n static readonly D = 68;\n static readonly E = 69;\n static readonly F = 70;\n static readonly G = 71;\n static readonly H = 72;\n static readonly I = 73;\n static readonly J = 74;\n static readonly K = 75;\n static readonly L = 76;\n static readonly M = 77;\n static readonly N = 78;\n static readonly O = 79;\n static readonly P = 80;\n static readonly Q = 81;\n static readonly R = 82;\n static readonly S = 83;\n static readonly T = 84;\n static readonly U = 85;\n static readonly V = 86;\n static readonly W = 87;\n static readonly X = 88;\n static readonly Y = 89;\n static readonly Z = 90;\n static readonly META = 91; // WIN_KEY_LEFT\n static readonly MAC_WK_CMD_LEFT = 91;\n static readonly MAC_WK_CMD_RIGHT = 93;\n static readonly CONTEXT_MENU = 93;\n static readonly NUMPAD_ZERO = 96;\n static readonly NUMPAD_ONE = 97;\n static readonly NUMPAD_TWO = 98;\n static readonly NUMPAD_THREE = 99;\n static readonly NUMPAD_FOUR = 100;\n static readonly NUMPAD_FIVE = 101;\n static readonly NUMPAD_SIX = 102;\n static readonly NUMPAD_SEVEN = 103;\n static readonly NUMPAD_EIGHT = 104;\n static readonly NUMPAD_NINE = 105;\n static readonly NUMPAD_MULTIPLY = 106;\n static readonly NUMPAD_PLUS = 107;\n static readonly NUMPAD_MINUS = 109;\n static readonly NUMPAD_PERIOD = 110;\n static readonly NUMPAD_DIVIDE = 111;\n static readonly F1 = 112;\n static readonly F2 = 113;\n static readonly F3 = 114;\n static readonly F4 = 115;\n static readonly F5 = 116;\n static readonly F6 = 117;\n static readonly F7 = 118;\n static readonly F8 = 119;\n static readonly F9 = 120;\n static readonly F10 = 121;\n static readonly F11 = 122;\n static readonly F12 = 123;\n static readonly NUM_LOCK = 144;\n static readonly SCROLL_LOCK = 145;\n static readonly FIRST_MEDIA = 166;\n static readonly FF_MINUS = 173;\n static readonly MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\n static readonly VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\n static readonly VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\n static readonly FF_MUTE = 181;\n static readonly FF_VOLUME_DOWN = 182;\n static readonly LAST_MEDIA = 183;\n static readonly FF_VOLUME_UP = 183;\n static readonly SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\n static readonly EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\n static readonly COMMA = 188;\n static readonly DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\n static readonly PERIOD = 190;\n static readonly SLASH = 191;\n static readonly APOSTROPHE = 192;\n static readonly TILDE = 192;\n static readonly OPEN_SQUARE_BRACKET = 219;\n static readonly BACKSLASH = 220;\n static readonly CLOSE_SQUARE_BRACKET = 221;\n static readonly SINGLE_QUOTE = 222;\n static readonly MAC_META = 224;\n static readonly BUFFERED = 229;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { md5 } from './crypto';\nimport { get } from './helpers';\n\nexport const getKeyCacheByArrayObject = (keyCache: string, argumentsValue?: Array<unknown>): string => {\n if (!keyCache || !argumentsValue) {\n return '';\n }\n let keyBuild = `${JSON.stringify(argumentsValue.slice(1))}-key-cache-plus`;\n\n argumentsValue.forEach((item: any) => {\n if (typeof item === 'object') {\n if (Array.isArray(item)) {\n keyBuild = `${keyBuild}${JSON.stringify(item)}`;\n return;\n }\n const keys = (item instanceof HttpParams ? item.keys() : Object.keys(item)).sort((str1: string, str2: string) => str1.localeCompare(str2)) as Array<string>;\n\n keys.forEach((key) => {\n if (key.toLocaleLowerCase() === 'pem') {\n return;\n }\n keyBuild = `${keyBuild}${JSON.stringify(get(item, key))}`;\n });\n return;\n }\n keyBuild = `${keyBuild}${item}`;\n });\n\n const keyCachePlus = md5(keyBuild);\n const keyCacheMD5 = md5(keyCache);\n\n return `${keyCacheMD5}-${md5(`${keyCacheMD5}-${keyCachePlus}`)}`;\n};\n","import { UtilsCache } from './cache';\nimport { isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\n\nexport const formatNumber = (value: string | number): string => {\n const lang = UtilsCache.getLang();\n\n if (lang === UtilsLanguageConstants.EN) {\n return `${value}`.replace(/[,]/g, '');\n }\n\n return `${value}`.replace(/[.]/g, '').replace(/[,]/g, '.');\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const viewDataNumberByLanguage = (value: string | number, acceptNegativeValue: boolean | undefined, parseFixed = 1, ignoreFormatSeparator = false, ignoreParseFloat = false): any => {\n const lang = UtilsCache.getLang();\n\n if (!`${value}`.trim()) {\n return '';\n }\n if (isNil(value) || (!acceptNegativeValue && +value <= 0)) {\n return 0;\n }\n if (typeof value === 'string' && !ignoreFormatSeparator) {\n value = formatNumber(value);\n }\n\n const isFloat = value.toString().includes('.');\n const [intStr, floatStr] = value.toString().split('.');\n\n if (!floatStr?.length) {\n parseFixed = 0;\n }\n const round = (value: number, parseFixed: number) => {\n const fixed = Math.pow(10, parseFixed);\n\n return Math.round(value * fixed) / fixed;\n };\n\n if (parseFixed > (floatStr?.length || 0)) {\n const maxParseFixed = acceptNegativeValue && +value < 0 ? 17 : 16;\n const fixed = maxParseFixed - (intStr?.length || 0);\n\n parseFixed = parseFixed < fixed ? parseFixed : fixed;\n }\n\n if (isFloat && !ignoreParseFloat) {\n value = parseFloat(round(+value, parseFixed).toFixed(parseFixed));\n }\n\n // Xử lý không format dữ liệu phần thập phân\n const valueString = value.toString();\n const index = valueString.indexOf('.');\n\n if (index !== -1 && (parseFixed > 3 || ignoreParseFloat)) {\n let decimalPart = valueString.substring(index + 1, valueString.length);\n let int = valueString.substring(0, index + 1);\n\n if (ignoreParseFloat) {\n decimalPart = decimalPart.substring(0, parseFixed);\n }\n if (lang === UtilsLanguageConstants.EN) {\n int = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n return `${int}${decimalPart}`;\n }\n int = int.replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${int}${decimalPart}`;\n }\n if (index === -1 || parseFixed <= 3) {\n if (lang === UtilsLanguageConstants.EN) {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n return value\n .toString()\n .replace('.', ',')\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n }\n};\n","/* eslint-disable no-useless-escape */\nexport const patternEmail = () => {\n return /^[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]@[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]\\.[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]$/;\n};\n\nexport const patterProtocolUrl = () => {\n return /(http|https|ftp):/;\n};\n\nexport const patternUrl = () => {\n return /^(http|https|ftp):(\\/){2}[^\\s]+[.]{1}[^\\s]+$/;\n};\n\nexport const patternHostUrl = () => {\n return /^((https|http|ftp):[/]{2}[^/\\s]+)/;\n};\n\nexport const patternDomain = () => {\n return /^([a-zA-Z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\\.[a-zA-Z]{2,4})+$/;\n};\n\nexport const patternMobilePhone = () => {\n return /^(\\+?84|0|84)([0-9]{9})$/;\n};\n\nexport const patternPhone = () => {\n return /^(\\+?84|[0-9]|84)([0-9]{2,9})$/;\n};\n\nexport const patternNumber = () => {\n return /\\d+/g;\n};\nexport const patternEncodeUri = () => {\n return /%([0-9A-F]{2})/g;\n};\nexport const patternName = () => {\n return /^\\w+[A-Za-z\\s\\d]+$/;\n};\nexport const patternNameUtf8 = () => {\n return /^[ àáảãạăắằẵặẳâầấậẫẩđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹÀÁẢÃẠĂẮẰẴẶẲÂẦẤẬẪẨĐÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸA-Za-z0-9]+$/;\n};\nexport const patternNameSpecial = () => {\n return /[~!@#$%^&*()-+=<>,?\\/\\\\:;\"']/;\n};\nexport const patternNameProfile = () => {\n return /([\\w\\W\\d\\s]+)+/;\n};\nexport const patternEmoji = () => {\n return /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/g;\n};\nexport const patternRuleFieldReplace = () => {\n return /[{]{2}[a-zA-Z_-]+[}]{2}/g;\n};\nexport const patternGetFieldByRuleFieldReplace = () => {\n return /[a-zA-Z_-]+/g;\n};\n\nexport const patternPem = () => {\n return /^(0|1):([0-9]{1,2}):(\\{\\{path-api\\}\\}):([a-zA-Z0-9\\/]+)$/g;\n};\n\nexport const patternTax = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n};\n\nexport const patternKey = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n};\n\nexport const patternAccount = () => {\n return /^(?=.*@)[a-z0-9@._-]{2,63}$/;\n};\n","//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test\nexport type TYPE_FUNCTION_XSS = (data: string) => Promise<string>;\nlet functionXssFilter: TYPE_FUNCTION_XSS = async (value: string): Promise<string> => {\n return value;\n};\n\nexport const updateFunctionXssFilter = (functionCustom: TYPE_FUNCTION_XSS) => {\n functionXssFilter = functionCustom;\n};\n\nexport const xssFilter: TYPE_FUNCTION_XSS = async (data: string) => {\n return await functionXssFilter(data);\n};\n","import { TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { omitBy } from './helpers';\nimport { isNil } from './helpers';\n\nexport const ENCODE_URI_PATTERN = /%([0-9A-F]{2})/g;\n\nexport const decodeURI = (value: string) => {\n return decodeURIComponent(\n value\n .split('')\n .map((c: string) => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n};\n\nexport const encodeURI = (value: string) => {\n return encodeURIComponent(value).replace(ENCODE_URI_PATTERN, (match, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n });\n};\n\nexport const endCodeUrl = (params: TYPE_OBJECT, isBody: boolean): string => {\n params = omitBy(params, (param) => param === '' || isNil(param));\n let res = '';\n\n for (const p in params) {\n res += `&${p}=${encodeURIComponent(params[p])}`;\n }\n\n return res === '' ? '' : `${isBody ? '' : '?'}${res.substring(1)}`;\n};\n","import { encodeURI, decodeURI } from './uri';\n\nexport const base64Encode = (value: string) => {\n return btoa(encodeURI(value));\n};\n\nexport const base64Decode = (value: string) => {\n return decodeURI(atob(value));\n};\n\nexport const convertBase64ToBlob = (dataBase64: string) => {\n const BASE64_MARKER = ';base64,';\n\n if (dataBase64.indexOf(BASE64_MARKER) === -1) {\n const parts = dataBase64.split(',');\n const contentType = parts[0].split(':')[1];\n const raw = parts[1];\n const blob = new Blob([raw], { type: contentType });\n\n return blob;\n }\n const parts = dataBase64.split(BASE64_MARKER);\n const contentType = parts[0].split(':')[1];\n const raw = window.atob(parts[1]);\n const rawLength = raw.length;\n const uInt8Array = new Uint8Array(rawLength);\n\n for (let i = 0; i < rawLength; ++i) {\n uInt8Array[i] = raw.charCodeAt(i);\n }\n\n const blob = new Blob([uInt8Array], { type: contentType });\n\n return blob;\n};\n\nexport const convertFileToBase64_ObjectUrl = async (file: File): Promise<string | ArrayBuffer> => {\n if (!file.type.match(/image.*/)) {\n return URL.createObjectURL(file);\n }\n\n return await convertFileToBase64(file);\n};\n\nexport const convertFileToBase64 = (file: File): Promise<string | ArrayBuffer> => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n reader.onload = (event) => {\n resolve(event.target?.result ?? '');\n };\n });\n};\n","import { convertBase64ToBlob } from './base64';\n\nexport const downloadFileByUrlUseXmlRequest = (fileUrl: string, filename: string) => {\n const xmlRequest = new XMLHttpRequest();\n\n xmlRequest.open('GET', fileUrl, true);\n xmlRequest.responseType = 'blob';\n xmlRequest.onerror = () => {\n const url = window.URL.createObjectURL(xmlRequest.response);\n\n downloadFileByUrl(url, filename);\n };\n xmlRequest.onload = () => {\n const url = window.URL.createObjectURL(xmlRequest.response);\n\n downloadFileByUrl(url, filename);\n };\n xmlRequest.send();\n};\n\nexport const downloadFileByUrl = async (fileUrl: string, filename: string, onlyOpen?: boolean) => {\n const downloadFileElement = document.createElement('a');\n\n if (!onlyOpen) {\n const response = await fetch(fileUrl);\n\n if (response.ok) {\n const blob = await response.blob();\n\n fileUrl = URL.createObjectURL(blob);\n }\n }\n downloadFileElement.href = fileUrl;\n downloadFileElement.download = filename;\n downloadFileElement.target = '_blank';\n downloadFileElement.click();\n downloadFileElement.remove();\n};\n\nexport const downloadImageFromELement = (imageElement: HTMLImageElement, typeFileDownload?: string, nameFile?: string) => {\n const parentElement = imageElement?.src;\n const blobData = convertBase64ToBlob(parentElement);\n const blob = new Blob([blobData], { type: typeFileDownload || 'image/png' });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = url;\n link.download = nameFile || 'barcode';\n link.click();\n};\n","import { InjectionToken } from '@angular/core';\n\n//NOTE: Đây là các hàm token inject để các module khác có thể inject vào để sử dụng\nexport const LINK_IMAGE_ERROR_TOKEN_INJECT = new InjectionToken<string>('LINK_IMAGE_ERROR_TOKEN_INJECT');\nexport const PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT = new InjectionToken<string>('PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT');\nexport const PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT = new InjectionToken<string>('PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT');\n","import { IFile } from '@libs-ui/interfaces-types';\nimport { convertBase64ToBlob } from './base64';\nimport { get, set } from './helpers';\nimport { uuid } from './uuid';\n\nexport const isTypeImage = (file: File | Blob) => (file.type.match(/image.*/) ? true : false);\nexport const isTypeVideo = (file: File | Blob) => (file.type.match(/video.*/) ? true : false);\nexport const isTypeAudio = (file: File | Blob) => (file.type.match(/audio.*/) ? true : false);\nexport const isTypeFile = (file: File) => (file instanceof File || Object.prototype.toString.call(file) === '[object File]' ? true : false);\n\nexport const ExcelExtList = ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];\nexport const DocumentExtList = [\n 'doc',\n 'docx',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n 'pdf',\n 'json',\n 'xml',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/pdf',\n 'application/json',\n 'application/xml',\n];\nexport const isIncludeDocumentExtList = (ext: string, listExt: Array<string> = DocumentExtList) => listExt.includes(ext) || listExt.includes(`application/${ext}`);\n\nexport const ImageExtList = ['gif', 'jpg', 'jpeg', 'png', 'image/gif', 'image/jpeg', 'image/jpeg', 'image/png', 'webp'];\nexport const isIncludeImageExtList = (ext: string, listExt: Array<string> = ImageExtList) => listExt.includes(ext);\n\nexport const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv', 'video/mp4', 'video/quicktime', 'video/mpeg', 'video/x-msvideo', 'video/x-ms-wmv'];\nexport const isIncludeVideoExtList = (ext: string, listExt: Array<string> = VideoExtList) => listExt.includes(ext);\nexport const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma', 'audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/aac', 'audio/mp4', 'audio/flac', 'audio/x-ms-wma'];\nexport const isIncludeAudioExtList = (ext: string, listExt: Array<string> = AudioExtList) => listExt.includes(ext);\n\nexport const getFileExtension = (file: IFile | File) => {\n if (file instanceof File && file.type) {\n return (file.type.split('/').pop() || '').toLowerCase();\n }\n file = file as IFile;\n if (file.mimetype || file.file?.type) {\n return file.mimetype || file.file?.type;\n }\n\n let fileName = file.name as string;\n const url = get(file, 'url') || get(file, 'origin_url');\n if (!fileName && !url) {\n return;\n }\n if (!fileName && url) {\n fileName = url.split('/').pop() || '';\n set(file, 'name', fileName);\n }\n const dots = fileName.split('.');\n\n if (!dots) {\n return;\n }\n\n return (dots.pop() || '').toLowerCase();\n};\n\nexport const getLabelBySizeFile = (size: number, toFixed = 2) => {\n if (size < 1024 * 1024) {\n return ` ${(size / 1024).toFixed(toFixed)} KB`;\n }\n\n return ` ${(size / (1024 * 1024)).toFixed(toFixed)} MB`;\n};\n\nexport const convertBlobToFile = (blob: Blob, fileName?: string): File => {\n const type = blob.type.split('/')[1];\n const name = fileName ? `${fileName.split('.')[0]}.${type}` : `${uuid()}.${type}`;\n\n return new File([blob], name, { type: blob.type, lastModified: Date.now() });\n};\n\nexport const convertUrlToFile = (url: string, fileName?: string) => {\n return new Promise<File | undefined>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = () => {\n const file = convertBase64ToBlob(reader.result as string);\n resolve(convertBlobToFile(file, fileName || Date.now().toLocaleString()));\n };\n reader.onerror = () => resolve(undefined);\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = (err) => {\n reject(err);\n };\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.send();\n });\n};\n","import { ITextFormatOptions } from '@libs-ui/interfaces-types';\nimport { CHARACTER_DATA_EMPTY } from './constants';\nimport { patternEmoji } from './pattern';\n\nexport const highlightByKeyword = (value: string | undefined, search: string | undefined, ignoreHighlight?: boolean, classHightLight?: string) => {\n if (!value) {\n return CHARACTER_DATA_EMPTY;\n }\n try {\n if (!search || ignoreHighlight) {\n return value;\n }\n const keysReplace: Array<string> = getValueReplace(search, value);\n\n if (!keysReplace || !keysReplace.length) {\n return value;\n }\n if (!classHightLight) {\n classHightLight = 'bg-[#19344a] text-white';\n }\n keysReplace.forEach((key) => {\n const regExp = new RegExp(key, 'gi');\n\n value = value?.replace(regExp, `<span class=\"${classHightLight}\">$&</span>`);\n });\n } catch (error) {\n console.log(error);\n } finally {\n // eslint-disable-next-line no-unsafe-finally\n return value;\n }\n};\n\nconst getValueReplace = (search: string, value: string): string[] => {\n const searchConvert = deleteUnicode(search).toLowerCase();\n const valueConvert = deleteUnicode(value).toLowerCase();\n const keys: Set<string> = new Set();\n let i = 0;\n\n while ((i = valueConvert.indexOf(searchConvert, i)) >= 0) {\n const endIndex = i + search.length;\n\n keys.add(value.substring(i, endIndex));\n i += +valueConvert.length;\n }\n\n return Array.from(keys);\n};\n\nexport const formatTextCompare = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n\n text = text.normalize('NFC');\n\n return formatByOptions(text, options);\n};\n\nexport const fullNameFormat = (value: string) => {\n if (!value) {\n return value;\n }\n return capitalize(value, { lowercaseOtherCharacter: true, trim: true, removeMultipleSpace: true, removeEmoji: true });\n};\n\nexport const capitalize = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n text = formatByOptions(text, options);\n return text\n .split(' ')\n .map((word) => firstLetterToUpperCase(word))\n .join(' ');\n};\n\nexport const firstLetterToUpperCase = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n return uppercaseByPosition(text, 0, options);\n};\n\nexport const uppercaseByPosition = (text: string, position: number, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n text = formatByOptions(text, options);\n return `${text.substring(0, position)}${text.charAt(position).toUpperCase()}${text.substring(position + 1)}`;\n};\n\nconst formatByOptions = (text: string, options?: ITextFormatOptions) => {\n if (!text || !options) {\n return text;\n }\n if (options?.uppercaseOtherCharacter) {\n text = text.toUpperCase();\n }\n\n if (options?.lowercaseOtherCharacter) {\n text = text.toLowerCase();\n }\n\n if (options?.removeMultipleSpace) {\n text = text.replace(/\\u200B|\\u00A0/g, '');\n text = text.replace(/\\s+/g, ' ');\n }\n\n if (options?.removeEmoji) {\n text = removeEmoji(text);\n }\n\n if (options?.removeUnicode) {\n text = deleteUnicode(text);\n }\n\n if (options?.trim) {\n text = text.trim();\n }\n\n return text;\n};\n\nexport const escapeHtml = (str: string): string => {\n if (!str || typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''');\n};\n\nexport const decodeEscapeHtml = (str: string): string => {\n const htmlTag = document.createElement('textarea');\n\n htmlTag.innerHTML = str;\n while (str) {\n if (str === htmlTag.value) {\n str = htmlTag.value;\n htmlTag.remove();\n break;\n }\n str = htmlTag.value;\n htmlTag.innerHTML = str;\n }\n\n return str;\n};\n\nexport const deleteUnicode = (str: string) => {\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ|ễ/g, 'e');\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\n str = str.replace(/đ/g, 'd');\n str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');\n str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');\n str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I');\n str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O');\n str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');\n str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');\n str = str.replace(/Đ/g, 'D');\n\n str = str.replace(/\\u0300|\\u0301|\\u0303|\\u0309|\\u0323/g, ''); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng\n str = str.replace(/\\u02C6|\\u0306|\\u031B/g, ''); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư\n\n return str.normalize('NFC');\n};\n\nexport const removeEmoji = (text: string) => {\n if (!text || !text.trim()) {\n return text;\n }\n\n return text.replace(patternEmoji(), '');\n};\n","import { isNil } from './helpers';\nconst DEFAULT_MIN_TICK_COUNT = 5;\nconst DEFAULT_MAX_TICK_COUNT = 10;\nconst MIN_DISTANCE_TO_ZERO = 3;\nconst NEGATIVE_THRESHOLD = -5;\nconst FALLBACK_NEGATIVE_VALUE = -4;\nconst MAX_POW_NUMBER = 14;\nconst MAX_TEMPLATE_NUMBER = 10;\n\n// ✅ Thêm interfaces để tăng cường type safety\ninterface AxisScaleOptions {\n minTickCount?: number; // Số lượng tick tối thiểu\n maxTickCount?: number; // Số lượng tick tối đa\n stepCandidates?: number[]; // Danh sách các step candidates tùy chỉnh\n acceptNegative?: boolean; // Có chấp nhận giá trị âm không\n minNegative?: number; // Giá trị âm tối thiểu\n acceptStepIsTypeFloat?: boolean; // Có chấp nhận step là số thập phân không\n}\n\ninterface AxisScaleResult {\n stepSize: number; // Kích thước bước\n max: number; // Giá trị tối đa của trục\n min: number; // Giá trị tối thiểu của trục\n tickAmount: number; // Số lượng tick\n}\n\n/**\n * Tính toán smart axis scale cho biểu đồ\n *\n * @param maxData - Giá trị tối đa của dữ liệu\n * @param options - Các tùy chọn cấu hình axis scale\n * @returns Cấu hình axis scale bao gồm stepSize, max, min, tickAmount\n *\n * @throws {Error} INVALID_NEGATIVE_DATA - khi maxData < 0 mà acceptNegative = false\n * @throws {Error} MISSING_MIN_NEGATIVE - khi acceptNegative = true nhưng thiếu minNegative\n * @throws {Error} INVALID_RANGE - khi maxData < minNegative\n * @throws {Error} INVALID_MIN_NEGATIVE - khi minNegative >= 0\n *\n * @example\n * ```typescript\n * const result = getSmartAxisScale(100, { minTickCount: 5, maxTickCount: 10 });\n * // returns { stepSize: 20, max: 120, min: 0, tickAmount: 6 }\n * ```\n */\nexport const getSmartAxisScale = (originalMaxData: number, options?: AxisScaleOptions): AxisScaleResult => {\n let maxData = originalMaxData;\n\n validateInputs(maxData, options);\n const minTickCount = options?.minTickCount || DEFAULT_MIN_TICK_COUNT;\n const maxTickCount = options?.maxTickCount || DEFAULT_MAX_TICK_COUNT;\n\n let scaleDirection = 1;\n let rangeDistance = maxData;\n\n if (options?.acceptNegative && !isNil(options.minNegative)) {\n if (maxData === 0) {\n maxData = -1;\n }\n if (maxData <= 0) {\n rangeDistance = options.minNegative;\n }\n if (rangeDistance > NEGATIVE_THRESHOLD) {\n rangeDistance = FALLBACK_NEGATIVE_VALUE;\n }\n if (maxData > 0) {\n rangeDistance = maxData + Math.abs(options.minNegative);\n scaleDirection = -1;\n }\n }\n if (Math.abs(rangeDistance) < MIN_DISTANCE_TO_ZERO) {\n rangeDistance = MIN_DISTANCE_TO_ZERO;\n }\n\n const stepCandidates = getStepCandidates(maxData, minTickCount, options?.minNegative || 0, options?.acceptStepIsTypeFloat, options?.stepCandidates, options?.acceptNegative);\n for (const step of stepCandidates) {\n let tickCount = Math.abs(Math.ceil(rangeDistance / step)) + (scaleDirection === -1 ? 2 : 1);\n let maxValue = maxData <= 0 ? 0 : step * tickCount * scaleDirection;\n let minValue = 0;\n\n if (tickCount >= minTickCount && tickCount <= maxTickCount) {\n if (maxData < maxValue) {\n if (options?.acceptNegative) {\n let tick = 1;\n while (!isNil(options.minNegative) && tick <= tickCount && minValue >= options.minNegative) {\n minValue = tick * step;\n tick++;\n }\n }\n const maxValuePositive = maxValue - Math.abs(minValue);\n tickCount = maxValuePositive - originalMaxData > Math.abs(step) && tickCount - 1 >= minTickCount ? tickCount - 1 : tickCount;\n\n maxValue = step * tickCount * scaleDirection - minValue * scaleDirection;\n return {\n stepSize: Math.abs(step),\n max: maxValue,\n min: minValue,\n tickAmount: tickCount,\n };\n }\n }\n }\n\n let step = Math.ceil(rangeDistance / minTickCount) || 1;\n let maxValue = step * minTickCount;\n if (rangeDistance === maxValue) {\n step = step + Math.ceil(step / 10);\n maxValue = step * minTickCount;\n }\n return {\n stepSize: Math.abs(step),\n max: maxValue,\n min: 0,\n tickAmount: minTickCount,\n };\n};\n\n// Cache cho các giá trị lũy thừa 10 để tối ưu hiệu suất\nconst POWER_CACHE = new Map<number, number>();\n\n/**\n * Tạo danh sách các step candidates cho việc tính toán scale\n * @param maxData - Giá trị dữ liệu tối đa\n * @param minStep - Số bước tối thiểu\n * @param minNegative - Giá trị âm tối thiểu\n * @param acceptStepIsTypeFloat - Có chấp nhận step thập phân không\n * @param stepCandidatesByOptions - Step candidates do người dùng cung cấp\n * @param includeNegativeSteps - Có bao gồm các step âm không\n * @returns Danh sách các step candidates\n */\nconst getStepCandidates = (maxData: number, minStep: number, minNegative: number, acceptStepIsTypeFloat = false, stepCandidatesByOptions?: number[], includeNegativeSteps = false): number[] => {\n // Nếu có step candidates tùy chỉnh, sử dụng chúng\n if (stepCandidatesByOptions && stepCandidatesByOptions.length > 0) {\n return stepCandidatesByOptions;\n }\n\n const stepCandidates = new Array<number>();\n const maxValueStep = Math.abs(Math.max(maxData, Math.abs(minNegative || 0))) / minStep;\n\n // Tạo step candidates dựa trên lũy thừa của 10\n for (let powNumber = 0; powNumber <= MAX_POW_NUMBER; powNumber++) {\n // Sử dụng cache để tối ưu hiệu suất\n if (!POWER_CACHE.has(powNumber)) {\n POWER_CACHE.set(powNumber, Math.pow(10, powNumber));\n }\n const powValue = POWER_CACHE.get(powNumber) as number;\n\n for (let templateNumber = 1; templateNumber < MAX_TEMPLATE_NUMBER; templateNumber++) {\n // Thêm step thập phân nếu được chấp nhận\n if (acceptStepIsTypeFloat) {\n const step = powValue * (((templateNumber - 1) * 2 + 1) / 2);\n stepCandidates.push(step);\n }\n\n const step = powValue * templateNumber;\n stepCandidates.push(step);\n\n // Dừng khi step đã đủ lớn\n if (step >= maxValueStep) {\n checkAndSetNegativeSteps(stepCandidates, includeNegativeSteps, minNegative);\n return stepCandidates;\n }\n }\n }\n\n checkAndSetNegativeSteps(stepCandidates, includeNegativeSteps, minNegative);\n return stepCandidates;\n};\n\n/**\n * Kiểm tra và thêm các step âm vào danh sách candidates nếu cần\n * @param stepCandidates - Danh sách step candidates hiện tại\n * @param acceptNegative - Có chấp nhận giá trị âm không\n * @param minNegative - Giá trị âm tối thiểu\n */\nconst checkAndSetNegativeSteps = (stepCandidates: number[], acceptNegative: boolean, minNegative: number): void => {\n if (acceptNegative && minNegative < 0) {\n // Tạo các step âm và thêm vào đầu danh sách\n const negativeSteps = [...stepCandidates].map((step) => -step);\n stepCandidates.unshift(...negativeSteps);\n }\n};\n\n/**\n * Kiểm tra tính hợp lệ của các tham số đầu vào\n * @param maxData - Giá trị dữ liệu tối đa\n * @param options - Các tùy chọn cấu hình\n * @throws {Error} Khi các tham số không hợp lệ\n */\nconst validateInputs = (maxData: number, options?: AxisScaleOptions): void => {\n // Kiểm tra maxData âm khi không chấp nhận giá trị âm\n if (maxData < 0 && !options?.acceptNegative) {\n throw new Error('maxData is less than 0 and acceptNegative is false');\n }\n\n if (options?.acceptNegative) {\n // Kiểm tra minNegative có được cung cấp không\n if (isNil(options.minNegative)) {\n throw new Error('minNegative is required when acceptNegative is true');\n }\n\n // Kiểm tra maxData phải >= minNegative\n if (maxData < options.minNegative) {\n throw new Error('maxData is less than minNegative');\n }\n\n // Kiểm tra minNegative phải là số âm\n if (options.minNegative >= 0) {\n throw new Error('minNegative must be negative');\n }\n }\n};\n","export const protectString = (input: string): string => {\n const xorKey = 77;\n const encoded = input\n .split('')\n .map((char) => String.fromCharCode(char.charCodeAt(0) ^ xorKey))\n .reverse()\n .join('');\n return btoa(encoded);\n};\n\nexport const revealString = (encoded: string): string => {\n const xorKey = 77;\n const base = atob(encoded);\n const decoded = base\n .split('')\n .reverse()\n .map((c) => String.fromCharCode(c.charCodeAt(0) ^ xorKey))\n .join('');\n return decoded;\n};\n\nexport const createUniqueRandomIntGenerator = (min: number, max: number) => {\n if (max - min + 1 < min + 10) {\n throw new Error(`Range too small: need at least min + 10 unique values`);\n }\n\n const history: number[] = [];\n\n return (): number => {\n let num: number;\n let loop = 0;\n\n do {\n num = Math.floor(Math.random() * (max - min + 1)) + min;\n loop++;\n\n if (loop > 1000) {\n break;\n }\n } while (history.includes(num));\n\n history.push(num);\n\n if (history.length > 10) {\n history.shift();\n }\n\n return num;\n };\n};\n","export const addArrayToSet = <T>(setStore: Set<T>, data: T[]): Set<T> => {\n for (const value of data) {\n setStore.add(value);\n }\n return setStore;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const convertSetToArray = <T = any, U = any>(data: Set<T>, functionMap?: (value: T) => U): Array<U> => {\n if (functionMap) {\n return Array.from(data, functionMap);\n }\n\n return [...data] as unknown as Array<U>;\n};\n","/**\n * Tính dung lượng (ước tính) của 1 object trong bộ nhớ (bytes, KB, MB)\n * @param obj - Bất kỳ kiểu dữ liệu nào (object, array, map, set, primitive,...)\n * @param formatted - Nếu true, trả về chuỗi có đơn vị (vd: \"2.35 KB\")\n */\nexport const getObjectSize = (obj: unknown): string => {\n try {\n // Chuyển object sang chuỗi JSON (chính xác cho mọi loại dữ liệu tuần tự hóa được)\n const json = JSON.stringify(obj);\n\n // Tính kích thước byte dựa trên UTF-8 encoding\n const bytes = new Blob([json]).size;\n\n if (bytes < 1024) return `${bytes} bytes`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n } catch {\n // Nếu JSON.stringify lỗi (do circular reference)\n return 'N/A';\n }\n};\n","export const normalizeUrl = (rawUrl: string): string => {\n const url = new URL(rawUrl);\n url.pathname = url.pathname.replace(/\\/{2,}/g, '/');\n return url.toString();\n};\n","const ignorePatterns = [\n // RxJS / async internals\n /^at\\s+Object\\.(next|error|complete|subscribe|unsubscribe)\\b/,\n /^at\\s+Subscriber\\./,\n /^at\\s+SafeSubscriber\\./,\n\n // TS helpers\n /^at\\s+__\\w+/,\n\n // Zone.js / Angular\n /ZoneAwarePromise/,\n /^at\\s+new\\s+ZoneAwarePromise/,\n /^at\\s+Zone/,\n /zone\\.js/,\n /core\\.mjs/,\n /platform-browser/,\n\n // Browser / DOM\n /^at\\s+HTML/,\n /^at\\s+Promise/,\n /<anonymous>/,\n\n // Bundler\n /webpack/,\n /vite/,\n /node_modules/,\n] as const;\n\nexport const traceStack = (): string[] => {\n const stack = new Error().stack;\n if (!stack) return [];\n\n return (\n stack\n .split('\\n')\n .slice(2) // bỏ Error + current function\n .map((line) => line.trim())\n .filter((line) => !ignorePatterns.some((pattern) => pattern.test(line)))\n .map((line) => {\n // Chrome / Edge\n // at functionName (file:line:col)\n let match = line.match(/at\\s+(.*?)\\s+\\(/);\n if (match?.[1]) return match[1];\n\n // Safari\n // functionName@file:line:col\n match = line.match(/^(.*?)@/);\n if (match?.[1]) return match[1];\n\n return 'anonymous';\n })\n // loại duplicate & anonymous rác\n .filter((fn, idx, arr) => fn !== 'anonymous' && arr.indexOf(fn) === idx)\n .reverse()\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["key","keyStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-utils.mjs","sources":["../../../../libs-ui/utils/src/dangerous-object.ts","../../../../libs-ui/utils/src/constants.ts","../../../../libs-ui/utils/src/crypto.ts","../../../../libs-ui/utils/src/crypto-3rd.ts","../../../../libs-ui/utils/src/function-check-embed-frame.ts","../../../../libs-ui/utils/src/communicate-micro.ts","../../../../libs-ui/utils/src/language.ts","../../../../libs-ui/utils/src/uuid.ts","../../../../libs-ui/utils/src/cache.ts","../../../../libs-ui/utils/src/date.ts","../../../../libs-ui/utils/src/http-params.ts","../../../../libs-ui/utils/src/two-way-signal-object.ts","../../../../libs-ui/utils/src/helpers.ts","../../../../libs-ui/utils/src/dom.ts","../../../../libs-ui/utils/src/url-search-params.ts","../../../../libs-ui/utils/src/color.ts","../../../../libs-ui/utils/src/key-code.ts","../../../../libs-ui/utils/src/key-cache.ts","../../../../libs-ui/utils/src/format-number.ts","../../../../libs-ui/utils/src/pattern.ts","../../../../libs-ui/utils/src/xss-filter.ts","../../../../libs-ui/utils/src/uri.ts","../../../../libs-ui/utils/src/base64.ts","../../../../libs-ui/utils/src/download.ts","../../../../libs-ui/utils/src/inject-token.ts","../../../../libs-ui/utils/src/file.ts","../../../../libs-ui/utils/src/format-text.ts","../../../../libs-ui/utils/src/get-smart-axis-scale.ts","../../../../libs-ui/utils/src/random.ts","../../../../libs-ui/utils/src/collection.ts","../../../../libs-ui/utils/src/data.ts","../../../../libs-ui/utils/src/url.ts","../../../../libs-ui/utils/src/trace.ts","../../../../libs-ui/utils/src/libs-ui-utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { ElementRef, TemplateRef } from '@angular/core';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Observable } from 'rxjs';\n\n/**\n * Danh sách các constructor name nguy hiểm\n */\nconst DANGEROUS_CONSTRUCTOR_NAMES = ['Window', 'Document', 'HTMLDocument', 'HTMLElement', 'Element', 'Node', 'Location', 'Navigator', 'Screen', 'History', 'Storage', 'Console', 'Performance'] as const;\n\n/**\n * Kiểm tra xem đối tượng có phải là browser global object không\n */\nexport const isBrowserGlobalObject = (obj: any): obj is Window | Document | Window | Document | typeof globalThis => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Window || obj instanceof Document || obj === window || obj === document || obj === globalThis;\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là DOM object không\n */\nexport const isDOMObject = (obj: any): obj is HTMLElement | Node | Element => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof HTMLElement || obj instanceof Node || obj instanceof Element;\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là browser API object không\n */\nexport const isBrowserAPIObject = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object' || typeof window === 'undefined') {\n return false;\n }\n return obj === window.location || obj === window.navigator || obj === window.screen || obj === window.history || obj === window.localStorage || obj === window.sessionStorage || obj === window.console || obj === window.performance;\n};\n\n/**\n * Kiểm tra constructor name có nằm trong danh sách nguy hiểm không\n */\nexport const hasDangerousConstructorName = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n const constructorName = obj.constructor?.name;\n return constructorName && DANGEROUS_CONSTRUCTOR_NAMES.includes(constructorName as any);\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là DOM object hoặc browser object nguy hiểm không\n * Những đối tượng này có thể gây ra circular reference và maximum call stack\n */\nexport const isDangerousObject = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n\n return isBrowserGlobalObject(obj) || isDOMObject(obj) || isBrowserAPIObject(obj) || hasDangerousConstructorName(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là Angular/Framework object không\n */\nexport const isFrameworkObject = <T = any>(obj: any): obj is TemplateRef<T> | ElementRef<T> => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof TemplateRef || obj instanceof ElementRef;\n};\n\n/**\n * Kiểm tra đối tượng có phải là File/Blob object không\n */\nexport const isFile = (obj: any): obj is File | Blob => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof File || obj instanceof Blob || Object.prototype.toString.call(obj) === '[object File]';\n};\n\n/**\n * Kiểm tra đối tượng có phải là Built-in object không\n */\nexport const isBuiltInObject = (obj: any): obj is Date | RegExp | HttpParams => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Date || isRegExp(obj) || obj instanceof HttpParams || ('hasOwnProperty' in obj && '__ngContext__' in obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là RegExp object không\n */\nexport const isRegExp = (obj: any): obj is RegExp => {\n return obj instanceof RegExp;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Async object không\n */\nexport const isAsyncObject = <T = any>(obj: any): obj is Promise<T> | Observable<T> => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Promise || obj instanceof Observable;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Special object cần bỏ qua không\n * Bao gồm: Framework objects, File objects, Built-in objects, Async objects\n */\nexport const isSpecialObject = (obj: any): boolean => {\n return isFrameworkObject(obj) || isFile(obj) || isBuiltInObject(obj) || isAsyncObject(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là dayjs object không\n */\nexport const isDayjsObject = (obj: any): obj is Dayjs => {\n return dayjs.isDayjs(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là object cần bỏ qua trong quá trình convert không\n */\nexport const isSkippableObject = (obj: any): boolean => {\n return isDangerousObject(obj) || isSpecialObject(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là Map object không\n */\nexport const isMap = <T = any>(obj: any): obj is Map<string, T> => {\n return obj instanceof Map;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Set object không\n */\nexport const isSet = <T = any>(obj: any): obj is Set<T> => {\n return obj instanceof Set;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Array object không\n */\nexport const isArray = <T = any>(obj: any): obj is Array<T> => {\n return Array.isArray(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là object cần trả về nguyên trạng không\n * Bao gồm: dangerous objects, special objects, dayjs objects\n */\nexport const isReturnAsIsObject = (obj: any): boolean => {\n return isSkippableObject(obj) || isDayjsObject(obj);\n};\n\n/**\n * Kiểm tra xem đối tượng có an toàn để clone/convert không\n */\nexport const isSafeToProcess = (obj: any): boolean => {\n return !isDangerousObject(obj);\n};\n\n/**\n * Kiểm tra xem giá trị có phải là kiểu dữ liệu nguyên thủy (Primitive) không.\n * Bao gồm: string, number, boolean, symbol, bigint, null, undefined.\n * @param value Giá trị cần kiểm tra\n * @returns true nếu là kiểu nguyên thủy\n */\nexport const isPrimitiveType = (value: any): boolean => {\n return value === null || value === undefined || ['string', 'number', 'boolean', 'symbol', 'bigint'].includes(typeof value);\n};\n","export const ERROR_MESSAGE_EMPTY_VALID = 'i18n_valid_empty_message';\nexport const ERROR_MESSAGE_PATTEN_VALID = 'i18n_valid_pattern_message';\nexport const ERROR_MESSAGE_MIN_VALID = 'i18n_message_error_input_min_value';\nexport const ERROR_MESSAGE_MAX_VALID = 'i18n_message_error_input_max_value';\nexport const ERROR_MESSAGE_MIN_LENGTH = 'i18n_message_error_input_min_length';\nexport const ERROR_MESSAGE_MAX_LENGTH = 'i18n_message_error_input_max_length';\nexport const CHARACTER_DATA_EMPTY = '__';\nexport const DEFAULT_START_PAGE_0 = 'defaultStartPage0';\nexport const COMMUNICATE_MICRO_PREFIX_TYPE = '3RD_INTEGRATE_MICRO_SITE_';\nexport const COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE = 'MICRO_SITES_ALL_MESSAGE';\n","import CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\n/**\n * @description Thiết lập key mã hóa\n * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.\n */\nexport const setKeyCrypto = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n};\n\n/**\n * Mã hóa dữ liệu dạng chuỗi bằng thuật toán AES-CBC.\n * Yêu cầu key mã hóa đã được thiết lập qua setKeyCrypto.\n * @param plainData Chuỗi văn bản thuần túy cần mã hóa\n * @returns Chuỗi kết quả đã được mã hóa (Base64 string)\n */\nexport const encrypt = (plainData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\n/**\n * Giải mã dữ liệu đã được mã hóa bằng AES-CBC.\n * Yêu cầu cùng một key mã hóa đã dùng để encrypt.\n * @param encryptedData Chuỗi dữ liệu đã mã hóa\n * @returns Chuỗi văn bản thuần túy sau khi giải mã (UTF-8)\n */\nexport const decrypt = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n\n/**\n * Tạo mã hash MD5 từ chuỗi văn bản.\n * @param plainData Chuỗi văn bản cần hash\n * @returns Chuỗi mã hash MD5 (32 ký tự hex)\n */\nexport const md5 = (plainData: string) => {\n return CryptoES.MD5(plainData).toString();\n};\n","import CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\n/**\n * @description Thiết lập key mã hóa\n * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.\n */\nexport const setKeyCrypto3rd = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n};\n\n/**\n * Mã hóa dữ liệu dạng chuỗi bằng thuật toán AES-CBC.\n * Yêu cầu key mã hóa đã được thiết lập qua setKeyCrypto3rd.\n * @param plainData Chuỗi văn bản thuần túy cần mã hóa\n * @returns Chuỗi kết quả đã được mã hóa (Base64 string)\n */\nexport const encrypt3rd = (plainData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\n/**\n * Giải mã dữ liệu đã được mã hóa bằng AES-CBC.\n * Yêu cầu cùng một key mã hóa đã dùng để encrypt.\n * @param encryptedData Chuỗi dữ liệu đã mã hóa\n * @returns Chuỗi văn bản thuần túy sau khi giải mã (UTF-8)\n */\nexport const decrypt3rd = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n","//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test\n\n/**\n * Hàm kiểm tra mặc định — phát hiện ứng dụng đang chạy trong iframe/embed frame\n * bằng cách so sánh `window.parent` với `window.top`.\n * Có thể bị ghi đè bởi `updateFunctionCheckEmbedFrame` cho môi trường tùy chỉnh.\n */\nlet functionCheck = () => {\n return window.parent !== window.top;\n};\n\n/**\n * Ghi đè hàm kiểm tra embed frame bằng một hàm logic tùy chỉnh.\n * Hữu ích trong môi trường Micro-frontend hoặc khi cần mock cho testing.\n *\n * @param functionCustom Hàm trả về `true` nếu app đang chạy trong iframe/embed frame\n * @example\n * // Micro-frontend: luôn coi là embed\n * updateFunctionCheckEmbedFrame(() => true);\n *\n * // Testing: luôn coi là không embed\n * updateFunctionCheckEmbedFrame(() => false);\n */\nexport const updateFunctionCheckEmbedFrame = (functionCustom: () => boolean) => {\n functionCheck = functionCustom;\n};\n\n/**\n * Kiểm tra ứng dụng hiện tại có đang được nhúng trong iframe/embed frame hay không.\n * Sử dụng hàm logic đang được đăng ký (mặc định hoặc custom).\n *\n * @returns `true` nếu app đang chạy trong iframe/embed, `false` nếu đang chạy standalone\n * @example\n * if (isEmbedFrame()) {\n * // Ẩn header, sidebar vì đã có container bên ngoài quản lý\n * }\n */\nexport const isEmbedFrame = (): boolean => {\n return functionCheck();\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject, filter, fromEvent } from 'rxjs';\nimport { UtilsCache } from './cache';\nimport { COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE } from './constants';\nimport { decrypt, encrypt } from './crypto';\nimport { decrypt3rd, encrypt3rd } from './crypto-3rd';\nimport { isEmbedFrame } from './function-check-embed-frame';\n/**\n * Cấu hình các key global cho truyền thông micro\n */\nexport class UtilsCommunicateMicroKeyGlobal {\n /** Key sự kiện cho modal */\n public static KEY_MESSAGE_MODAL = 'LIBS_UI_MODEL_EVENT';\n /** Bỏ qua cập nhật thời gian live event modal */\n public static IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL = false;\n}\n\n/**\n * Tiện ích hỗ trợ truyền thông giữa các cửa sổ, iframes (Cross-document communication)\n * Sử dụng Window.postMessage kèm theo mã hóa/giải mã dữ liệu tự động.\n */\nexport class UtilsCommunicateMicro {\n private static initdEvent?: boolean;\n private static subs: Map<string, Subject<MessageEvent>> = new Map();\n private static allMessageSub: Subject<MessageEvent> = new Subject();\n\n /**\n * Khởi tạo trình lắng nghe sự kiện 'message' trên window hiện tại.\n * Cần được gọi một lần duy nhất tại Root Component (AppComponent).\n * @param currentWindow Đối tượng window hiện tại\n * @param destroyRef Reference để tự động unsubscribe khi component bị hủy\n */\n public static initEvent(currentWindow: Window, destroyRef: DestroyRef) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (!this.subs.get(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE)) {\n this.subs.set(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, UtilsCommunicateMicro.allMessageSub);\n }\n\n fromEvent<MessageEvent>(currentWindow, 'message')\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe((e: MessageEvent) => {\n const event = { data: { ...e.data } } as MessageEvent;\n\n const data = event.data;\n const type = data.type;\n\n if (!type) {\n return this.allMessageSub.next(event);\n }\n const sub = UtilsCommunicateMicro.GetMessage(type);\n\n if (!type || !data.response) {\n return;\n }\n try {\n if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {\n data.response = JSON.parse(decrypt3rd(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n\n return;\n }\n data.response = JSON.parse(decrypt(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n } catch (error) {\n console.log(error);\n sub.next(event);\n this.allMessageSub.next(event);\n }\n });\n\n UtilsCommunicateMicro.GetMessage(UtilsCache.typeKeyClearLocalStorage)\n .pipe(\n filter((e) => e.data.response !== UtilsCache.idService),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe(() => {\n console.log('clear all cache by event');\n UtilsCache.ClearAll();\n });\n }\n\n /**\n * Gửi message tới cửa sổ cha (Parent) hoặc top window.\n * Thường dùng khi app chạy trong Iframe.\n * @param data Dữ liệu cần gửi ({type: string, response: any})\n */\n static PostMessageToParent(data: any) {\n data = this.convertData(data);\n try {\n if (isEmbedFrame()) {\n window?.parent?.postMessage(data, '*');\n\n return;\n }\n\n window?.top?.postMessage(data, '*');\n } catch (error) {\n console.log(error);\n }\n }\n\n /**\n * Gửi message tới tất cả các iframe con có trong trang.\n * @param data Dữ liệu cần gửi ({type: string, response: any})\n */\n static PostMessageToChildren(data: any) {\n data = this.convertData(data);\n const iframes = document.querySelectorAll('iframe');\n\n Array.from(iframes).forEach((iframe) => {\n iframe?.contentWindow?.postMessage(data, '*');\n });\n }\n\n /**\n * Gửi message tới cửa sổ đã mở cửa sổ hiện tại (Window Opener).\n * @param data Dữ liệu cần gửi ({type: string, response: any})\n */\n static PostMessageToOpener(data: any) {\n if (!window.opener) {\n return;\n }\n data = this.convertData(data);\n\n window.opener.postMessage(data, '*');\n }\n\n private static convertData(data: any) {\n if (!data || !data.type || !data.response) {\n return data;\n }\n data = { ...data };\n const type = data.type;\n\n if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {\n try {\n JSON.parse(decrypt3rd(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt3rd(JSON.stringify(data.response));\n\n return data;\n }\n }\n try {\n JSON.parse(decrypt(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt(JSON.stringify(data.response));\n\n return data;\n }\n }\n\n /**\n * Đăng ký lắng nghe các message theo type cụ thể. Trả về một RxJS Subject.\n * @param messageType Type của message hoặc danh sách các types cần lắng nghe\n * @returns Subject sẽ phát ra message event khi nhận được dữ liệu hợp lệ\n */\n static GetMessage(messageType: string | Array<string>): Subject<MessageEvent> {\n if (!this.initdEvent) {\n throw Error('chưa khơi tạo hàm lắng nghe sự kiện, gọi UtilsCommunicateMicro.initEvent(window) tại root component');\n }\n if (typeof messageType === 'string') {\n let sub = this.subs.get(messageType);\n\n if (!sub) {\n sub = new Subject();\n this.subs.set(messageType, sub);\n\n return sub;\n }\n\n return sub;\n }\n if (!Array.isArray(messageType) || !messageType.length) {\n throw new Error('message type empty');\n }\n if (messageType.length === 1) {\n return this.GetMessage(messageType[0]);\n }\n const types = messageType.sort().join(';');\n\n let sub = this.subs.get(types);\n\n if (sub) {\n return sub;\n }\n\n sub = new Subject();\n this.subs.set(types, sub);\n this.initSubject(sub, messageType);\n\n return sub;\n }\n\n private static initSubject(subRoot: Subject<MessageEvent>, messageType: Array<string>) {\n messageType.forEach((key) => {\n this.GetMessage(key).subscribe((e) => {\n subRoot.next(e);\n });\n });\n }\n}\n","import { TYPE_LANGUAGE_SUPPORT } from '@libs-ui/interfaces-types';\n\nexport class UtilsLanguageConstants {\n public static VI = 'vi'; // Tiếng Việt\n public static EN = 'en'; // Tiếng Anh\n public static FR = 'fr'; // Tiếng Pháp\n public static DE = 'de'; // Tiếng Đức\n public static ES = 'es'; // Tiếng Tây Ban Nha\n public static ZH = 'zh'; // Tiếng Trung (Giản thể)\n public static ZH_TW = 'zh-TW'; // Tiếng Trung (Phồn thể)\n public static JA = 'ja'; // Tiếng Nhật\n public static KO = 'ko'; // Tiếng Hàn\n public static RU = 'ru'; // Tiếng Nga\n public static IT = 'it'; // Tiếng Ý\n public static PT = 'pt'; // Tiếng Bồ Đào Nha\n public static TH = 'th'; // Tiếng Thái\n public static ID = 'id'; // Tiếng Indonesia\n public static MS = 'ms'; // Tiếng Malaysia\n public static AR = 'ar'; // Tiếng Ả Rập\n public static HI = 'hi'; // Tiếng Hindi\n public static BN = 'bn'; // Tiếng Bengal\n public static TR = 'tr'; // Tiếng Thổ Nhĩ Kỳ\n public static NL = 'nl'; // Tiếng Hà Lan\n public static KM = 'km'; // Tiếng Khmer (Campuchia)\n public static LO = 'lo'; // Tiếng Lào\n public static MY = 'my'; // Tiếng Miến Điện (Myanmar)\n public static TL = 'tl'; // Tiếng Tagalog (Philippines)\n public static CEB = 'ceb'; // Tiếng Cebuano (Philippines)\n public static JV = 'jv'; // Tiếng Java (Indonesia)\n public static SU = 'su'; // Tiếng Sundanese (Indonesia)\n\n public static defaultLang = (): string => {\n const browserLang = 'navigator' in window ? navigator.language || UtilsLanguageConstants.EN : UtilsLanguageConstants.EN;\n const lang = browserLang.split('-')[0] || UtilsLanguageConstants.EN;\n if (UtilsLanguageConstants.isSupported(lang)) {\n return lang;\n }\n return UtilsLanguageConstants.EN;\n };\n\n // Danh sách các ngôn ngữ được hỗ trợ\n private static supportedLanguages = new Set([\n UtilsLanguageConstants.VI,\n UtilsLanguageConstants.EN,\n UtilsLanguageConstants.FR,\n UtilsLanguageConstants.DE,\n UtilsLanguageConstants.ES,\n UtilsLanguageConstants.ZH,\n UtilsLanguageConstants.ZH_TW,\n UtilsLanguageConstants.JA,\n UtilsLanguageConstants.KO,\n UtilsLanguageConstants.RU,\n UtilsLanguageConstants.IT,\n UtilsLanguageConstants.PT,\n UtilsLanguageConstants.TH,\n UtilsLanguageConstants.ID,\n UtilsLanguageConstants.MS,\n UtilsLanguageConstants.AR,\n UtilsLanguageConstants.HI,\n UtilsLanguageConstants.BN,\n UtilsLanguageConstants.TR,\n UtilsLanguageConstants.NL,\n UtilsLanguageConstants.KM,\n UtilsLanguageConstants.LO,\n UtilsLanguageConstants.MY,\n UtilsLanguageConstants.TL,\n UtilsLanguageConstants.CEB,\n UtilsLanguageConstants.JV,\n UtilsLanguageConstants.SU,\n ]);\n\n public static setSupportedLanguages(languages: Array<TYPE_LANGUAGE_SUPPORT>) {\n if (languages.length === 0) {\n throw new Error('Languages is required');\n }\n this.supportedLanguages = new Set(languages);\n }\n\n /**\n * Kiểm tra xem ngôn ngữ đầu vào có được hỗ trợ không\n * @param lang Mã ngôn ngữ cần kiểm tra\n * @returns True nếu được hỗ trợ, False nếu không\n */\n public static isSupported(lang: string): boolean {\n return this.supportedLanguages.has(lang);\n }\n}\n","import { md5 } from './crypto';\n\n/**\n * Tạo một chuỗi định danh duy nhất (Unique ID) dựa trên thời gian (timestamp) và các ký tự ngẫu nhiên.\n * Chuỗi kết quả được xáo trộn và băm bằng MD5, trả về một chuỗi 32 ký tự alphanumeric.\n *\n * @returns {string} Chuỗi định danh duy nhất (MD5 hash).\n */\nexport const uuid = (): string => {\n const timestamp = performance.now() * 1000;\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?/~';\n let randomString = '';\n\n for (let i = 0; i < 5; i++) {\n randomString += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n const baseString = `${Math.floor(timestamp)}-${randomString}`;\n const charArray = baseString.split('');\n\n for (let i = charArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n\n [charArray[i], charArray[j]] = [charArray[j], charArray[i]];\n }\n\n const shuffledString = charArray.join('');\n\n return md5(shuffledString);\n};\n","/* eslint-disable no-async-promise-executor */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IEvent, TYPE_LANGUAGE_SUPPORT } from '@libs-ui/interfaces-types';\nimport { UtilsCommunicateMicro } from './communicate-micro';\nimport { decrypt, encrypt, md5 } from './crypto';\nimport { getDeviceInfo } from './dom';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { get, isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\nimport { uuid } from './uuid';\n\n/**\n * Tiện ích quản lý Cache, hỗ trợ cả LocalStorage (đồng bộ) và IndexedDB (bất đồng bộ)\n * Tự động mã hóa dữ liệu và xử lý thời gian hết hạn\n */\nexport class UtilsCache {\n public static readonly CACHE_EXPIRE_TIME_DEFAULT = 5 * 60;\n public static readonly CACHE_EXPIRE_NONE = -1;\n public static readonly idService = uuid();\n public static typeKeyClearLocalStorage = 'LIBS_UI_CLEAR_LOCAL_STORAGE_EVENT';\n\n private static languageKeyCache = 'SR3xQKxHgffiCevPQRralg';\n private static listKeyKeepWhenClearALll = Array<string>();\n private static initdEvent?: boolean;\n private static storage: { [key: string]: unknown };\n private static dbName = 'libs-ui-cache';\n private static itemIndexByKey = 'key';\n private static dbVersion = 1;\n private static db: IDBDatabase | null = null;\n\n /**\n * Khởi tạo cấu hình cho Cache\n * @param config Cấu hình khởi tạo (tên DB, key ngôn ngữ, event clear...)\n */\n public static init(config: { indexedDBName?: string; languageKeyCache?: string; typeKeyClearLocalStorage?: string; listKeyKeepWhenClearAll?: Array<string> }) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (config.indexedDBName) {\n this.dbName = config.indexedDBName;\n }\n if (config.typeKeyClearLocalStorage) {\n this.typeKeyClearLocalStorage = config.typeKeyClearLocalStorage;\n }\n if (config.listKeyKeepWhenClearAll) {\n this.listKeyKeepWhenClearALll = config.listKeyKeepWhenClearAll;\n }\n if (config.languageKeyCache) {\n this.languageKeyCache = config.languageKeyCache;\n }\n }\n\n /**\n * Lưu ngôn ngữ hiện tại vào cache\n * @param lang Mã ngôn ngữ (vi, en, ...)\n */\n public static setLang(lang: TYPE_LANGUAGE_SUPPORT) {\n if (!UtilsLanguageConstants.isSupported(lang)) {\n throw Error(`Language not support ${lang}`);\n }\n this.Set(this.languageKeyCache, lang, this.CACHE_EXPIRE_NONE);\n }\n\n /**\n * Lấy ngôn ngữ từ cache\n * @returns Mã ngôn ngữ\n */\n public static getLang(): TYPE_LANGUAGE_SUPPORT {\n return this.Get(this.languageKeyCache, UtilsLanguageConstants.defaultLang());\n }\n\n private static openDB() {\n return new Promise((resolve) => {\n const request = indexedDB.open(this.dbName, this.dbVersion);\n\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n if (!db.objectStoreNames.contains(this.dbName)) {\n const objectStore = db.createObjectStore(this.dbName, { keyPath: this.itemIndexByKey });\n\n objectStore.createIndex(this.itemIndexByKey, this.itemIndexByKey, { unique: true });\n }\n };\n\n request.onsuccess = () => {\n this.db = request.result;\n resolve(true);\n };\n\n request.onerror = (event) => {\n console.trace('Error opening IndexedDB:', event);\n resolve(false);\n };\n });\n }\n\n private static async getObjectStore() {\n if (!this.db) {\n await this.openDB();\n }\n const transaction = this.db?.transaction([this.dbName], 'readwrite');\n if (!transaction) {\n return null;\n }\n\n return transaction.objectStore(this.dbName);\n }\n\n private static get LocalStorage(): any {\n try {\n if (typeof window.localStorage !== 'undefined') {\n if (getDeviceInfo().satisfies({ safari: '>=16' })) {\n return this.getLocalStorageFakeOnSafari();\n }\n\n return localStorage;\n }\n\n return this.getLocalStorageFake();\n } catch (error) {\n console.trace(`LocalStorage `, error);\n return this.getLocalStorageFake();\n }\n }\n\n private static getLocalStorageFakeOnSafari() {\n if (typeof window.localStorage !== 'undefined' && !this.storage && Object.keys(localStorage).length) {\n this.storage = { ...localStorage };\n }\n\n return {\n setItem: (key: string, value: string) => {\n localStorage.setItem(key, value);\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n const value = localStorage.getItem(key);\n\n if (value) {\n return value;\n }\n\n if (!this.storage || isNil(this.storage[key])) {\n return null;\n }\n\n localStorage.setItem(key, this.storage[key] as string);\n\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n localStorage.removeItem(key);\n },\n clear: () => {\n this.storage = {};\n localStorage.clear();\n },\n };\n }\n\n private static getLocalStorageFake() {\n if (!this.storage) {\n this.storage = {};\n }\n\n return {\n setItem: (key: string, value: unknown) => {\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n },\n clear: () => {\n this.storage = {};\n },\n };\n }\n\n /**\n * Lấy giá trị từ IndexedDB theo key (bất đồng bộ)\n * @param key Khóa cache\n * @param default_value Giá trị mặc định nếu không tìm thấy\n * @param isKeyMD5 Nếu true, key đã là MD5. Nếu false (mặc định), sẽ tự động MD5 key.\n * @returns Promise chứa giá trị đã giải mã\n */\n public static async GetAsync<T = any>(key: string, default_value?: any, isKeyMD5 = false): Promise<T> {\n key = isKeyMD5 ? key : md5(key);\n\n return new Promise<T>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve(default_value);\n }\n const request = objectStore.get(key);\n\n request.onsuccess = () => {\n if (!request.result) {\n return resolve(default_value);\n }\n const data = JSON.parse(decrypt(request.result.value));\n\n if (data.expire === this.CACHE_EXPIRE_NONE) {\n return resolve(data.json);\n }\n const currentMillisecond = new Date().valueOf() / 1000;\n\n if (data.expire < currentMillisecond) {\n return resolve(default_value);\n }\n\n return resolve(data.json);\n };\n\n request.onerror = () => {\n console.trace(`Get key ${key} Error, return default value: ${default_value}`);\n return resolve(default_value);\n };\n });\n }\n\n /**\n * Lấy giá trị từ LocalStorage theo key (đồng bộ)\n * @param key Khóa cache\n * @param default_value Giá trị mặc định nếu không tìm thấy\n * @returns Giá trị đã giải mã hoặc giá trị mặc định\n */\n public static Get<T = any>(key: string, default_value?: any): T {\n // support cho những file không thể inject UtilsCache\n if (!key) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n const cachedData = this.LocalStorage.getItem(key);\n\n if (!cachedData) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n try {\n const data = JSON.parse(decrypt(cachedData));\n\n if (data.expire === this.CACHE_EXPIRE_NONE) {\n return data.value ?? default_value;\n }\n const currentMillisecond = new Date().valueOf() / 1000;\n\n if (data.expire < currentMillisecond) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n\n return data.value;\n } catch (error) {\n console.trace(`Get key ${key} Error, return default value: ${default_value}`, error);\n\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n }\n\n public static GetDefaultValueBySpecificKey(key: string, default_value: any) {\n return default_value;\n }\n\n /**\n * Lưu giá trị vào IndexedDB (bất đồng bộ)\n * @param key Khóa cache\n * @param value Giá trị cần lưu\n * @param expireTimeBySecond Thời gian hết hạn (giây). Mặc định 5 phút. Dùng CACHE_EXPIRE_NONE để vĩnh viễn.\n * @param isKeyMD5 Nếu true, key đã là MD5.\n * @returns Promise chứa thông tin kết quả\n */\n public static async SetAsync<T = any>(key: string, value: any, expireTimeBySecond = this.CACHE_EXPIRE_TIME_DEFAULT, isKeyMD5 = false): Promise<T> {\n // support inject UtilsCache\n return new Promise<T>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n key = isKeyMD5 ? key : md5(key);\n try {\n const currentMillisecond = expireTimeBySecond === this.CACHE_EXPIRE_NONE ? this.CACHE_EXPIRE_NONE : new Date().valueOf() / 1000 + expireTimeBySecond;\n const data: any = {\n value: encrypt(JSON.stringify({ json: value, expire: currentMillisecond })),\n };\n data[this.itemIndexByKey] = key;\n\n if (!objectStore) {\n console.trace(`Can not open object store`);\n return resolve({ key, messageError: 'Can not open object store' } as any);\n }\n const request = objectStore?.put(data);\n request.onsuccess = () => {\n console.log(`Set key ${key} Success`);\n resolve(request.result as any);\n };\n\n request.onerror = (error) => {\n console.trace(`Set key ${key} Error`);\n resolve({ key, messageError: get(error as IEvent, 'message') } as any);\n };\n } catch (error) {\n console.trace(`Set key ${key} Error`);\n resolve({ key, messageError: get(error, 'message') } as any);\n }\n });\n }\n\n /**\n * Lưu giá trị vào LocalStorage (đồng bộ)\n * @param key Khóa cache\n * @param value Giá trị cần lưu\n * @param expireTimeBySecond Thời gian hết hạn (giây). Mặc định 5 phút.\n * @returns true nếu thành công\n */\n static Set(key: string, value: any, expireTimeBySecond = this.CACHE_EXPIRE_TIME_DEFAULT): boolean {\n // support cho những file không inject UtilsCache\n const currentMillisecond = expireTimeBySecond === this.CACHE_EXPIRE_NONE ? this.CACHE_EXPIRE_NONE : new Date().valueOf() / 1000 + expireTimeBySecond;\n const data = {\n value: value,\n expire: currentMillisecond,\n };\n\n try {\n this.LocalStorage.setItem(key, encrypt(JSON.stringify(data)));\n return true;\n } catch (error) {\n console.trace(`Set key ${key} Error`, error);\n return false;\n }\n }\n\n /**\n * Xóa một key trong IndexedDB\n * @param key Khóa cần xóa\n * @param isMD5 Nếu true, key đã được MD5.\n */\n public static async ClearAsync(key: string, isMD5 = false) {\n return new Promise<void>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n const request = objectStore.delete(isMD5 ? key : md5(key));\n\n request.onsuccess = () => {\n resolve({ clearSuccess: true } as any);\n };\n request.onerror = (event: Event) => {\n console.trace('Error deleting Key:', get((event.target as IDBRequest).error, 'message'));\n resolve({ messageError: get((event.target as IDBRequest).error, 'message'), clearSuccess: false } as any);\n };\n });\n }\n\n /**\n * Xóa một key trong LocalStorage\n * @param key Khóa cần xóa\n */\n static Clear(key: string) {\n if (key.includes('kc-callback-')) {\n return;\n }\n this.LocalStorage.removeItem(key);\n }\n\n /**\n * Xóa toàn bộ dữ liệu trong IndexedDB\n */\n public static ClearAllAsync() {\n return new Promise<void>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n\n const request = objectStore.clear();\n request.onsuccess = () => {\n console.log('clear all successfully');\n resolve({ clearSuccess: true } as any);\n };\n\n request.onerror = (event: Event) => {\n console.trace('Error deleting key:', get((event.target as IDBRequest).error, 'message'));\n resolve({ messageError: get((event.target as IDBRequest).error, 'message'), clearSuccess: false } as any);\n };\n });\n }\n\n /**\n * Xóa toàn bộ dữ liệu trong LocalStorage (kiểm soát các key đặc biệt)\n */\n static ClearAll() {\n if (isEmbedFrame()) {\n const data = {\n type: this.typeKeyClearLocalStorage,\n response: {\n idEvent: this.idService,\n },\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n const keys = [...this.listKeyKeepWhenClearALll];\n Object.keys(this.LocalStorage).forEach((key) => {\n if (key.includes('kc-callback-')) {\n keys.push(key);\n }\n });\n\n const stores = this.GetDataByKeys(Array.from(keys));\n\n this.LocalStorage.clear();\n\n this.SetDataByKey(stores);\n }\n\n private static GetDataByKeys(keys: Array<string>) {\n const stores = new Map();\n\n keys.forEach((key: string) => {\n if (key.includes('kc-callback-')) {\n stores.set(key, this.LocalStorage.getItem(key));\n\n return;\n }\n stores.set(key, this.Get(key));\n });\n\n return stores;\n }\n\n private static SetDataByKey(stores: Map<string, any>) {\n stores.forEach((value: any, key: string) => {\n if (key.includes('kc-callback-')) {\n this.LocalStorage.setItem(key, value);\n\n return;\n }\n if (key === this.languageKeyCache) {\n return this.setLang(value);\n }\n this.Set(key, value, this.CACHE_EXPIRE_NONE);\n });\n }\n\n /**\n * Xóa tất cả các khóa bắt đầu bằng tiền tố nhất định trong IndexedDB\n * @param keyCacheStartWith Tiền tố khóa\n * @param isKeyMD5 Nếu true, tiền tố đã được MD5.\n */\n public static DeleteKeyStartWithAsync(keyCacheStartWith: string, isKeyMD5 = false) {\n return new Promise(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve({});\n }\n\n // Lấy tất cả các keys từ index\n const request = objectStore.getAll();\n\n keyCacheStartWith = isKeyMD5 ? keyCacheStartWith : md5(keyCacheStartWith);\n\n request.onsuccess = (e: any) => {\n const data = e.target.result as Array<any>;\n\n if (!Array.isArray(data)) {\n return resolve({});\n }\n\n data.forEach((obj) => {\n if (obj[this.itemIndexByKey].startsWith(keyCacheStartWith)) {\n this.ClearAsync(obj[this.itemIndexByKey], true);\n }\n });\n\n return resolve({});\n };\n\n request.onerror = () => {\n return resolve({});\n };\n });\n }\n\n /**\n * Xóa tất cả các khóa bắt đầu bằng tiền tố nhất định trong LocalStorage\n * @param keyCache Tiền tố khóa\n * @param isMD5 Nếu true, tiền tố sẽ được MD5 trước khi so sánh.\n */\n public static DeleteKeyStartWith(keyCache: string, isMD5 = false) {\n keyCache = isMD5 ? md5(keyCache) : keyCache;\n const keys = Object.keys(this.LocalStorage);\n\n if (!keys || !keys.length) {\n return;\n }\n\n keys.forEach((key) => {\n if (key.startsWith(keyCache)) {\n this.Clear(key);\n }\n });\n }\n\n /**\n * Xóa hoàn toàn cơ sở dữ liệu IndexedDB\n * @param dbName Tên DB, mặc định theo cấu hình.\n */\n public static DeleteDatabaseIndexDB(dbName?: string) {\n return new Promise((resolve) => {\n dbName = (dbName || this.dbName) as string;\n const request = indexedDB.deleteDatabase(dbName as string);\n\n request.onsuccess = () => {\n console.trace('Database deleted successfully');\n resolve({ deleteSuccess: true });\n };\n\n request.onerror = (event: Event) => {\n const error = (event.target as IDBRequest).error;\n console.trace('Error deleting database:', error);\n resolve({ messageError: get((error as Record<string, any>) || {}, 'message'), deleteSuccess: false } as any);\n };\n\n request.onblocked = () => {\n console.trace('Delete request is blocked');\n resolve({ messageError: 'Delete request is blocked', deleteSuccess: false } as any);\n };\n });\n }\n}\n","import { isSignal } from '@angular/core';\nimport { GetDayjsConfig, GetDayjsReturn, NonNullableDate, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/vi';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport timezone from 'dayjs/plugin/timezone';\nimport updateLocale from 'dayjs/plugin/updateLocale';\nimport utc from 'dayjs/plugin/utc';\nimport { UtilsCache } from './cache';\ndayjs.extend(localeData);\ndayjs.extend(updateLocale);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(customParseFormat);\nlet timeZoneSetup = 'Asia/Ho_Chi_Minh';\nlet patternCheckTimeUTC: RegExp | undefined = undefined;\n\n/**\n * Thiết lập múi giờ mặc định cho hệ thống (mặc định là Asia/Ho_Chi_Minh).\n * @param localeZone Tên múi giờ (ví dụ: 'America/New_York')\n */\nexport const setDefaultTimeZone = (localeZone = timeZoneSetup) => {\n timeZoneSetup = localeZone;\n dayjs.tz.setDefault(localeZone);\n};\n\n/**\n * Thiết lập pattern Regex để nhận diện và chuẩn hóa các chuỗi thời gian UTC đặc biệt.\n * @param pattern Regex pattern dùng để kiểm tra và replace chuỗi thời gian\n */\nexport const setPatternCheckTimeUTC = (pattern: RegExp) => {\n patternCheckTimeUTC = pattern;\n};\n\nexport type TYPE_FUNCTION_FORMAT_DATE = (time: dayjs.ConfigType, formatOutput: string, lang?: string) => string;\nlet functionFormatDate: TYPE_FUNCTION_FORMAT_DATE | undefined = undefined;\n\n/**\n * Cung cấp một hàm format tùy chỉnh ghi đè lên logic mặc định của formatDate.\n * @param functionCustom Hàm format tùy chỉnh\n */\nexport const updateFunctionFormatDate = (functionCustom: TYPE_FUNCTION_FORMAT_DATE) => {\n functionFormatDate = functionCustom;\n};\n\n/**\n * @description Lấy đối tượng dayjs theo config\n * @param config nếu không có config sẽ trả về đối tượng dayjs là thời gian hiện tại\n * @param config.date thời gian cần lấy\n * @param config.returnDayjsIfConfigDateNotExist true nếu muốn trả về đối tượng dayjs nếu config.date không có\n * @param config.utc true nếu muốn lấy thời gian UTC\n * @param config.formatOfDate định dạng thời gian đang được truyền vào\n */\nexport const getDayjs = <C extends GetDayjsConfig | undefined = undefined>(config?: C): GetDayjsReturn<C> => {\n // helper cast để tránh lặp lại kiểu điều kiện ở các return\n const out = (v: unknown) => v as GetDayjsReturn<C>;\n if (!config) {\n return out(dayjs().tz());\n }\n config.date = !config.date && config.returnDayjsIfConfigDateNotExist ? dayjs().tz() : config.date;\n if (typeof config.date === 'number') {\n config.date = dayjs.unix(config.date);\n }\n if (!config.date) {\n return out(undefined);\n }\n let { date, utc, formatOfDate } = config as TYPE_OBJECT;\n\n while (isSignal(date)) {\n date = date();\n }\n while (isSignal(utc)) {\n utc = utc();\n }\n while (isSignal(formatOfDate)) {\n formatOfDate = formatOfDate();\n }\n\n if (typeof date === 'string' && patternCheckTimeUTC && new RegExp(patternCheckTimeUTC, 'gi').test(date)) {\n date = dayjs(date.replace(new RegExp(patternCheckTimeUTC, 'gi'), '$1$2$3T$5$6$7$8Z')).utc();\n }\n\n if (utc) {\n if (formatOfDate) {\n return out(dayjs(date, formatOfDate).utc());\n }\n const dateInputIsUTC = (dayjs.isDayjs(date) && date.isUTC()) || (typeof date === 'string' && (date as string).includes('Z'));\n\n if (dateInputIsUTC) {\n return out(dayjs(date));\n }\n\n return out(dayjs(date).utc());\n }\n\n if (typeof date === 'string' && !(date as string).includes('Z') && !(date as string).includes('+')) {\n return out(formatOfDate ? dayjs.tz(date, formatOfDate, config.localeZone || timeZoneSetup) : dayjs.tz(date, config.localeZone || timeZoneSetup));\n }\n\n return out((formatOfDate ? dayjs(date, formatOfDate) : dayjs(date)).tz());\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác nhau không (khác ngày trong tuần)\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác nhau, false nếu giống nhau hoặc không thể so sánh\n */\nexport const isDifferenceDay = (date1: NonNullableDate, date2: NonNullableDate) => {\n if (isDifferenceMonth(date1, date2)) {\n return true;\n }\n const day1 = getDayjs({ date: date1 })?.day();\n const day2 = getDayjs({ date: date2 })?.day();\n\n return day1 !== day2;\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác tháng không\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác tháng, false nếu cùng tháng hoặc không thể so sánh\n */\nexport const isDifferenceMonth = (date1: NonNullableDate, date2: NonNullableDate) => {\n if (isDifferenceYear(date1, date2)) {\n return true;\n }\n const month1 = getDayjs({ date: date1 })?.month();\n const month2 = getDayjs({ date: date2 })?.month();\n\n return month1 !== month2;\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác năm không\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác năm, false nếu cùng năm hoặc không thể so sánh\n */\nexport const isDifferenceYear = (date1: NonNullableDate, date2: NonNullableDate) => {\n const year1 = getDayjs({ date: date1 })?.year();\n const year2 = getDayjs({ date: date2 })?.year();\n\n return year1 !== year2;\n};\n\n/**\n * @description Lấy ra chuỗi thời gian hiển thị theo định dạng và ngôn ngữ\n * @param date thời gian cần định dạng\n * @param format định dạng thời gian muốn lấy ra\n * @param lang lấy theo ngôn ngữ\n */\nexport const formatDate = (date: dayjs.ConfigType, formatOutput = 'YYYY/MM/DD HH:mm', lang?: string, formatInput?: string): string => {\n if (!date) {\n return '';\n }\n lang = lang || (UtilsCache.getLang() as string);\n if (functionFormatDate) {\n return functionFormatDate(date, formatOutput, lang);\n }\n\n date = getDayjs({ date, formatOfDate: formatInput }).locale(lang);\n if (lang === 'vi') {\n dayjs.updateLocale('vi', {\n monthsShort: 'Thg 1_Thg 2_Thg 3_Thg 4_Thg 5_Thg 6_Thg 7_Thg 8_Thg 9_Thg 10_Thg 11_Thg 12'.split('_'),\n });\n }\n\n return date.format(getFormatData(getTypeByFormat(formatOutput), lang)) || '';\n};\n\nconst getTypeByFormat = (format: string): 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' | 'hh:mm' | 'HH:mm' | 'hh:mm A' | 'HH:mm A' | 'dmy hmsS' => {\n if (format === 'dm' || format === 'dmy' || format === 'dmy hm' || format === 'my' || format === 'dmy hms' || format === 'hh:mm' || format === 'HH:mm' || format === 'hh:mm A' || format === 'HH:mm A' || format === 'dmy hmsS') {\n return format;\n }\n\n if (format === 'DD/MM/YYYY' || format === 'YYYY-MM-DD' || format === 'dd/MM/yyyy' || format === 'dd-MM-yyyy' || format === 'dd/mm/yyyy') {\n return 'dmy';\n }\n\n if (format === 'MM-DD' || format === 'dd/MM' || format === 'dd/mm') {\n return 'dm';\n }\n\n if (format === 'M/YYYY' || format === 'YYYY-MM' || format === 'MM/yyyy') {\n return 'my';\n }\n\n if (format === 'YYYY/MM/DD hh:mm:ss' || format === 'dmy hms' || format === 'dd/mm/yyyy hh:mm:ss') {\n return 'dmy hms';\n }\n\n if (format.toLowerCase() === 'dd/mm/yyyy hh:mm:ss:ss' || format.toLowerCase() === 'yyyy/mm/dd hh:mm:ss:ss' || format.toLowerCase() === 'yyyy-mm-dd hh:mm:ss:ss' || format.toLowerCase() === 'dd-mm-yyyy hh:mm:ss:ss') {\n return 'dmy hmsS';\n }\n\n if (format === 'hh:mm' || format === 'HH:mm') {\n return 'hh:mm';\n }\n\n if (format === 'hh:mm A' || format === 'HH:mm A') {\n return 'hh:mm A';\n }\n\n return 'dmy hm';\n};\n\nconst getFormatData = (type: 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' | 'hh:mm' | 'hh:mm A' | 'HH:mm' | 'HH:mm A' | 'dmy hmsS', lang: string) => {\n switch (type) {\n case 'dm':\n if (lang === 'vi') {\n return 'D MMM';\n }\n\n return 'MMM D';\n\n case 'dmy':\n if (lang === 'vi') {\n return 'D MMM, YYYY';\n }\n\n return 'MMM D, YYYY';\n\n case 'dmy hm':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm';\n }\n\n return 'MMM D, YYYY HH:mm';\n\n case 'my':\n if (lang === 'vi') {\n return 'MMM, YYYY';\n }\n\n return 'MMM YYYY ';\n\n case 'dmy hms':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss';\n }\n\n return 'MMM D, YYYY HH:mm:ss';\n\n case 'hh:mm':\n case 'HH:mm':\n return 'HH:mm';\n\n case 'hh:mm A':\n case 'HH:mm A':\n return 'HH:mm A';\n case 'dmy hmsS':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss:SSS';\n }\n\n return 'MMM D, YYYY HH:mm:ss:SSS';\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParameterCodec, HttpParams } from '@angular/common/http';\n\nexport const UtilsHttpParamsRequestInstance = <Type>(options?: HttpParamsOptions<Type>, instance?: HttpParams): UtilsHttpParamsRequest<Type> => {\n return new UtilsHttpParamsRequest<Type>(options, instance);\n};\n\nexport class UtilsHttpParamsRequest<Type = { pem: string }> extends HttpParams {\n protected params = new HttpParams();\n\n constructor(options?: HttpParamsOptions<Type>, instance?: HttpParams) {\n super(options as any);\n\n if (!instance) {\n this.params = new HttpParams(options);\n\n return;\n }\n\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n getInstance(): HttpParams {\n return this.params;\n }\n\n setInstance(instance: HttpParams) {\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n override set(param: string, value: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.set(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override has(param: string): boolean {\n return this.params.has(param);\n }\n\n override get(param: string): string | null {\n return this.params.get(param);\n }\n\n override getAll(param: string): string[] | null {\n return this.params.getAll(param);\n }\n\n override keys(): string[] {\n return this.params.keys();\n }\n\n override append(param: string, value: string | number | boolean): HttpParams {\n this.params = this.params.append(param, value);\n\n return this as HttpParams;\n }\n\n override appendAll(params: { [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean> }): HttpParams {\n this.params = this.params.appendAll(params);\n\n return this as HttpParams;\n }\n\n override delete(param: string, value?: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.delete(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override toString(): string {\n return this.params.toString();\n }\n}\n\nexport declare interface HttpParamsOptions<Type> {\n fromString?: string;\n fromObject?: TYPE_FROM_OBJECT<Type>;\n encoder?: HttpParameterCodec;\n}\nexport type GET_PATH_VARIABLE<TypePath, TypeOther = unknown> = {\n [Property in keyof TypePath as `pathVariable-${Lowercase<string & Property>}`]: TypePath[Property];\n} & TypeOther;\n\ntype TYPE_FROM_OBJECT<Type> = Type extends undefined | null\n ? { pem: string }\n : { pem?: string } & {\n [Property in keyof Type]?: Type[Property];\n };\n\n// Demo su dung GET_PATH_VARIABLE\n\n// interface Person {\n// name: string;\n// age: number;\n// location: string;\n// }\n\n// type c = GET_PATH_VARIABLE<Person, unknown>;\n\n// const a: c = {\n// \"pathVariable-age\": 1,\n// \"pathVariable-location\": '12',\n// \"pathVariable-name\": '124',\n// };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isSignal, signal, WritableSignal } from '@angular/core';\nimport { isArray, isAsyncObject, isMap, isReturnAsIsObject, isSet } from './dangerous-object';\nimport { cloneDeep } from './helpers';\n\n/**\n * Chuyển đổi một đối tượng hoặc giá trị thành signal\n * @param data Dữ liệu cần chuyển đổi thành signal\n * @param cloneDeepIfNotSignal Có thực hiện sao chép sâu dữ liệu trước khi chuyển đổi hay không nếu data không phải signal. Mặc định là true.\n * Đặt false nếu muốn giữ nguyên tham chiếu đến dữ liệu gốc.\n * Nếu muốn sao chép sâu đối tượng signal thì đặt cloneDeepIfNotSignal là true và acceptConvertObjectInnerWritableSignal là true.\n * @param isSignalPrimitiveType Có chuyển đổi các giá trị nguyên thủy (string, number, boolean) thành signal hay không. Mặc định là false.\n * Đặt true nếu muốn bọc các giá trị nguyên thủy trong signal.\n * @param acceptConvertObjectInnerWritableSignal Có tiếp tục tìm kiếm và chuyển đổi các đối tượng bên trong signal hay không. Mặc định là false.\n * Đặt true nếu muốn tìm và chuyển đổi các đối tượng bên trong signal hoặc chính nó thành signal mới.\n * @returns Dữ liệu đã được chuyển đổi theo kiểu T\n */\nexport const convertObjectToSignal = <T = any>(data: any, cloneDeepIfNotSignal = true, isSignalPrimitiveType = false, acceptConvertObjectInnerWritableSignal = false, seen = new WeakMap()): T => {\n if ((data === null || typeof data !== 'object') && !isSignal(data)) {\n return (isSignalPrimitiveType ? signal(data) : data) as T;\n }\n if (seen.has(data)) {\n return seen.get(data);\n }\n\n if (isSignal(data)) {\n if (!acceptConvertObjectInnerWritableSignal) {\n return data as T;\n }\n seen.set(data, convertObjectToSignal(data(), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen));\n return seen.get(data);\n }\n\n if (isArray(data)) {\n seen.set(data, signal(data.map((item) => convertObjectToSignal(item, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen))) as T);\n return seen.get(data);\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach((key) => {\n mapCopy.set(key, convertObjectToSignal(data.get(key), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal));\n });\n seen.set(data, signal(mapCopy) as T);\n return seen.get(data);\n }\n\n // Bỏ qua các đối tượng async\n if (isAsyncObject(data)) {\n return data as T;\n }\n\n data = signal(cloneDeepIfNotSignal ? { ...data } : data);\n seen.set(data, data);\n for (const key in data()) {\n const value = data()[key];\n // Bỏ qua các đối tượng nguy hiểm và đặc biệt\n if (isReturnAsIsObject(value)) {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(data(), key)) {\n data()[key] = convertObjectToSignal(value, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal);\n }\n }\n\n return data as T;\n};\n\n/**\n * Chuyển đổi một đối tượng signal (có thể lồng nhau) thành đối tượng plain object/array/map/set.\n * @param data Dữ liệu signal hoặc đối tượng chứa signal cần chuyển đổi.\n * @param isCloneDeep Có thực hiện sao chép sâu dữ liệu trong quá trình chuyển đổi hay không. Mặc định là true.\n * @param seen Dùng nội bộ để tránh lặp vô hạn (WeakMap).\n * @param options Tùy chọn chuyển đổi (ví dụ: convertWhenFirstItemArrayNotIsSignal).\n * @returns Đối tượng plain object đã được \"giải nén\" mọi signal bên trong.\n */\nexport const convertSignalToObject = <T = any>(data: any, isCloneDeep = true, seen = new WeakMap(), options?: { convertWhenFirstItemArrayNotIsSignal?: boolean }): T => {\n let ignoreCheckSeenHasDataAfterWhile = false;\n while (isSignal(data) && !seen.has(data)) {\n const dataConvert = (data as WritableSignal<unknown>)();\n if (typeof dataConvert === 'object') {\n if (dataConvert === null || isReturnAsIsObject(dataConvert)) {\n return dataConvert as T;\n }\n seen.set(dataConvert as object, dataConvert);\n data = dataConvert;\n ignoreCheckSeenHasDataAfterWhile = true;\n break;\n }\n seen.set(data, dataConvert);\n data = dataConvert;\n }\n\n if (data === null || typeof data === 'function' || typeof data !== 'object' || isReturnAsIsObject(data)) {\n return data;\n }\n\n if (!ignoreCheckSeenHasDataAfterWhile && seen.has(data)) {\n return seen.get(data);\n }\n\n if (isArray(data)) {\n if (!options?.convertWhenFirstItemArrayNotIsSignal && !isSignal(data[0])) {\n return data as T;\n }\n seen.set(data, data.map((item: any) => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep, seen, options)) as T);\n return seen.get(data);\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach((key) => {\n mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep, seen, options));\n });\n seen.set(data, mapCopy as T);\n return seen.get(data);\n }\n\n if (isSet(data)) {\n const setCopy = new Set();\n Array.from(data.values()).forEach((value) => {\n setCopy.add(convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep, seen, options));\n });\n seen.set(data, setCopy as T);\n return seen.get(data);\n }\n\n // Bỏ qua các đối tượng nguy hiểm và đặc biệt\n if (isReturnAsIsObject(data)) {\n return data as T;\n }\n\n const result: Record<string, any> = isCloneDeep ? {} : data;\n seen.set(data, result);\n for (const key in data) {\n const value = data[key];\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n // Bỏ qua các đối tượng nguy hiểm để tránh maximum call stack\n if (isReturnAsIsObject(value)) {\n result[key] = value;\n continue;\n }\n result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep, seen, options);\n }\n }\n\n return result as T;\n};\n\n/**\n * Unwrap một giá trị cho đến khi không còn là signal nữa.\n * @param data Giá trị (có thể là lồng nhiều cấp signal) cần unwrap.\n * @returns Giá trị cuối cùng bên trong signal.\n */\nexport const unwrapSignal = (data: any) => {\n while (isSignal(data)) {\n data = data();\n }\n return data;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { Signal, WritableSignal, isSignal, signal } from '@angular/core';\nimport { GetReturnType, GetValueAtPath, PathOf, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport dayjs from 'dayjs';\nimport { isArray, isDangerousObject, isDayjsObject, isMap, isRegExp, isReturnAsIsObject, isSet } from './dangerous-object';\nimport { getDayjs } from './date';\nimport { UtilsHttpParamsRequest } from './http-params';\nimport { unwrapSignal } from './two-way-signal-object';\n\n/**Các hàm tương tự thư viện lodash */\n/**\n * Kiểm tra xem một giá trị có phải là null hoặc undefined hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là null hoặc undefined, false nếu không\n * @example\n * isNil(null); // true\n * isNil(undefined); // true\n * isNil(0); // false\n * isNil('hello'); // false\n */\nexport const isNil = (value: unknown, options?: { ignoreUnWrapSignal?: boolean }): value is null | undefined => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n return value === null || value === undefined;\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là rỗng hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là null, rỗng hoặc undefined, false nếu không\n * @example\n * isEmpty(null); // true\n * isEmpty(''); // true\n * isEmpty(undefined); // true\n * isEmpty({}); // true\n * isEmpty([]); // true\n * isEmpty([1, 2, 3]); // false\n * isEmpty({ a: 1 }); // false\n */\nexport const isEmpty = (value: any, options?: { ignoreCheckTypePrimitive?: boolean; ignoreUnWrapSignal?: boolean; ignoreCheckString?: boolean }): value is null | undefined | '' | 0 => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n if (options?.ignoreCheckString && value === '') {\n return false;\n }\n if (options?.ignoreCheckTypePrimitive) {\n return typeof value === 'object' && isEmptyTypeObject(value);\n }\n\n return isEmptyTypeObject(value);\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là object rỗng hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là object rỗng, false nếu không\n * @example\n * isEmptyTypeObject({}); // true\n * isEmptyTypeObject({ a: 1 }); // false\n */\nconst isEmptyTypeObject = <T = null>(value: any): value is T => {\n try {\n if (isNil(value, { ignoreUnWrapSignal: true }) || value === '') {\n return true;\n }\n if (typeof value !== 'object') {\n return false;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n return Object.keys(value).length === 0;\n } catch (error) {\n console.error(error);\n return false;\n }\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không\n * @param value Giá trị cần kiểm tra\n * @param options Cấu hình tùy chọn\n * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0\n * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không\n * @example\n * isTruthy(null); // false\n * isTruthy(''); // false\n * isTruthy(undefined); // false\n * isTruthy(0); // false\n * isTruthy({}); // true\n * isTruthy(0, { ignoreZero: true }); // true\n */\n\nexport const isTruthy = <T>(value: T, options?: { ignoreZero?: boolean; ignoreCheckString?: boolean; ignoreUnWrapSignal?: boolean }): value is NonNullable<T> => {\n return !isFalsy(value, options);\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không\n * @param value Giá trị cần kiểm tra\n * @param options Cấu hình tùy chọn\n * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0\n * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không\n * @example\n * isFalsy(null); // true\n * isFalsy(''); // true\n * isFalsy(undefined); // true\n * isFalsy(0); // true\n * isFalsy({}); // false\n * isFalsy(0, { ignoreZero: true }); // false\n */\nexport const isFalsy = (value: unknown, options?: { ignoreZero?: boolean; ignoreCheckString?: boolean; ignoreUnWrapSignal?: boolean }): value is null | undefined | '' | 0 => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n\n if (options?.ignoreZero && value === 0) {\n return false;\n }\n\n if (options?.ignoreCheckString && value === '') {\n return false;\n }\n\n return !value;\n};\n\n/**\n * Loại bỏ các thuộc tính của đối tượng dựa trên một hàm điều kiện\n * @param objData Đối tượng cần xử lý\n * @param predicate Hàm điều kiện để kiểm tra giá trị của thuộc tính. Nếu hàm trả về true thì thuộc tính đó sẽ bị loại bỏ\n * @returns Đối tượng mới sau khi đã loại bỏ các thuộc tính thỏa mãn điều kiện\n * @example\n * const obj = { a: 1, b: null, c: 3, d: undefined };\n * omitBy(obj, isNil); // { a: 1, c: 3 }\n */\nexport const omitBy = <T>(objData: Record<string, any>, predicate: (val: any) => boolean): T => {\n if (!objData || typeof objData !== 'object' || Array.isArray(objData)) {\n return objData as T;\n }\n const newObj = {} as T;\n\n Object.keys(objData).forEach((key) => {\n const valueOfKey = get(objData, key);\n if (!predicate(valueOfKey)) {\n set(newObj, key as PathOf<T>, valueOfKey);\n }\n });\n return newObj;\n};\n\n/**\n * Lấy giá trị từ đối tượng theo đường dẫn chỉ định\n *\n * Hàm này giúp bạn truy cập vào các thuộc tính sâu bên trong một đối tượng một cách an toàn,\n * tránh lỗi khi thuộc tính không tồn tại.\n *\n * @param obj Đối tượng nguồn cần lấy giá trị\n * @param path Đường dẫn đến thuộc tính cần lấy. Có thể là:\n * - Chuỗi: 'user.profile.name' hoặc 'items[0].title'\n * - Mảng: ['user', 'profile', 'name'] hoặc ['items', '0', 'title']\n * - Chuỗi rỗng '': trả về chính đối tượng gốc\n * @param defaultValue Giá trị mặc định trả về khi không tìm thấy thuộc tính (mặc định: undefined)\n * @param keepLastValueIfSignal Có giữ nguyên signal cuối cùng hay không (mặc định: false - sẽ gọi signal())\n * @returns Giá trị tìm được hoặc giá trị mặc định\n *\n * @example\n * // Ví dụ cơ bản\n * const user = { name: 'John', age: 30 };\n * get(user, 'name'); // 'John'\n * get(user, 'email'); // undefined\n * get(user, 'email', 'no-email'); // 'no-email'\n *\n * @example\n * // Truyền path rỗng - trả về chính đối tượng gốc\n * const data = { name: 'Alice', age: 25 };\n * get(data, ''); // { name: 'Alice', age: 25 } (chính đối tượng data)\n * get(data, '', 'default'); // { name: 'Alice', age: 25 } (bỏ qua defaultValue)\n *\n * @example\n * // Truy cập thuộc tính sâu\n * const data = {\n * user: {\n * profile: {\n * name: 'Alice',\n * settings: { theme: 'dark' }\n * }\n * }\n * };\n * get(data, 'user.profile.name'); // 'Alice'\n * get(data, 'user.profile.settings.theme'); // 'dark'\n * get(data, 'user.profile.avatar', 'default.jpg'); // 'default.jpg'\n *\n * @example\n * // Truy cập mảng\n * const items = [\n * { name: 'Item 1', price: 100 },\n * { name: 'Item 2', price: 200 }\n * ];\n * get(items, '[0].name'); // 'Item 1'\n * get(items, '[1].name'); // 'Item 2'\n * get(items, '[2].name', 'Not found'); // 'Not found'\n *\n * @example\n * // Sử dụng với mảng path\n * const nested = { a: { b: { c: 'deep value' } } };\n * get(nested, ['a', 'b', 'c']); // 'deep value'\n * get(nested, ['a', 'b', 'd'], 'default'); // 'default'\n *\n * @example\n * // Trường hợp đặc biệt\n * get(null, 'any.path'); // undefined\n * get(undefined, 'any.path', 'fallback'); // 'fallback'\n */\nexport const get = <O, P extends PathOf<O> = PathOf<O>, KS extends boolean = false, D extends GetValueAtPath<O, P, KS> | undefined = undefined>(\n obj: Signal<O> | O,\n path: P,\n defaultValue?: D,\n keepLastValueIfSignal?: KS\n): GetReturnType<O, P, KS, D> => {\n // helper cast để tránh lặp lại kiểu điều kiện ở các return\n const out = (v: unknown) => v as GetReturnType<O, P, KS, D>;\n\n if (isNil(obj)) {\n return out(defaultValue);\n }\n obj = unwrapSignal(obj);\n if (path === '') {\n return out(obj);\n }\n if (obj instanceof HttpParams) {\n return out(obj.get(`${path}`) ?? defaultValue);\n }\n if (obj instanceof DOMRect) {\n return out(obj[path as keyof DOMRect]);\n }\n\n const paths = Array.isArray(path)\n ? path\n : (path as string)\n .replace(/\\[(\\d+)]/g, '.$1')\n .split('.')\n .filter((key) => key);\n\n for (const index in paths) {\n const key = paths[index];\n if (obj instanceof CSSStyleDeclaration) {\n obj = obj[key as keyof CSSStyleDeclaration] as O;\n continue;\n }\n\n if (obj instanceof HTMLElement) {\n obj = obj[key as keyof HTMLElement] as O;\n continue;\n }\n obj = unwrapSignal(obj);\n if (isNil(obj) || !Object.prototype.hasOwnProperty.call(obj, key)) {\n return out(defaultValue);\n }\n const val = isSignal((obj as any)[key]) && !keepLastValueIfSignal ? (obj as any)[key]() : (obj as any)[key];\n\n obj = val as O;\n }\n\n return out(obj ?? defaultValue);\n};\n\n/**\n * Thiết lập giá trị cho một thuộc tính trong đối tượng theo đường dẫn chỉ định\n * @param obj Đối tượng cần thiết lập giá trị\n * @param path Đường dẫn đến thuộc tính, có thể là chuỗi (vd: 'a.b.c') hoặc mảng (vd: ['a', 'b', 'c'])\n * @param value Giá trị cần thiết lập\n * @returns Đối tượng sau khi đã thiết lập giá trị\n * @throws Error nếu tham số đầu tiên không phải là đối tượng\n * @example\n * const obj = { a: { b: 1 } };\n * set(obj, 'a.b', 2); // { a: { b: 2 } }\n */\nexport const set = <O, P extends PathOf<O> = PathOf<O>, T extends GetValueAtPath<O, P, true> = GetValueAtPath<O, P, true>>(\n obj: Signal<O> | O,\n path: P,\n value: T,\n options?: { valueDefaultPathObjectUndefined?: any; valueDefaultPathArrayUndefined?: any }\n): O => {\n if (isNil(obj) || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {\n throw new Error('The first argument must be an object');\n }\n\n if (obj instanceof HttpParams) {\n return obj.set(`${path}`, value as string) as O;\n }\n\n const pathArray = Array.isArray(path)\n ? path\n : (path as string)\n .replace(/\\[(\\d+)]/g, '.[$1]')\n .split('.')\n .filter((key) => key);\n\n let currentObjectByKey: any = isSignal(obj) ? obj() : obj;\n let preObjectByKey = obj;\n\n pathArray.forEach((key, index) => {\n if (index < pathArray.length - 1) {\n if (!(key in currentObjectByKey) || (typeof currentObjectByKey[key] !== 'object' && !isSignal(currentObjectByKey[key]))) {\n const nextKey = pathArray[index + 1];\n key = key.replace(/\\[(\\d+)]/g, '$1');\n if (isNil(currentObjectByKey[key])) {\n currentObjectByKey[key] = /\\[(\\d+)]/g.test(nextKey) ? (options?.valueDefaultPathArrayUndefined ?? []) : (options?.valueDefaultPathObjectUndefined ?? {});\n }\n }\n currentObjectByKey = key ? currentObjectByKey[key] : currentObjectByKey;\n preObjectByKey = currentObjectByKey;\n currentObjectByKey = isSignal(currentObjectByKey) ? currentObjectByKey() : currentObjectByKey;\n return;\n }\n\n if (typeof currentObjectByKey !== 'object') {\n return;\n }\n\n // Gán giá trị ở cuối đường dẫn\n key = key.replace(/\\[(\\d+)]/g, '$1');\n const valueOfKey = currentObjectByKey[key];\n const valueOfKeyIsSignal = isSignal(valueOfKey);\n\n if (valueOfKeyIsSignal && (typeof valueOfKey() !== 'object' || valueOfKey() === null)) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n return;\n }\n if (isSignal(preObjectByKey)) {\n (preObjectByKey as WritableSignal<any>).update((data: any) => {\n const dataOfKey = data[key];\n if (isNil(dataOfKey) || !valueOfKeyIsSignal) {\n data[key] = value;\n }\n\n if (valueOfKeyIsSignal) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n }\n\n if (Array.isArray(data)) {\n return [...data];\n }\n return { ...data };\n });\n return;\n }\n if (valueOfKeyIsSignal) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n return;\n }\n currentObjectByKey[key] = value;\n });\n\n return obj as O;\n};\n\n/**\n * Tạo một bản sao sâu của một đối tượng hoặc giá trị bất kỳ\n * @param data Dữ liệu cần sao chép\n * @param options Tùy chọn cấu hình\n * @param options.ignoreSignal Nếu true, sẽ không sao chép các signal mà trả về signal gốc\n * @param seen WeakMap để theo dõi các tham chiếu đã được sao chép, tránh lặp vô hạn với các tham chiếu vòng\n * @returns Bản sao sâu của dữ liệu đầu vào\n * @example\n * const obj = {\n * a: 1,\n * b: { c: 2 },\n * d: [1, 2, 3]\n * };\n * const clone = cloneDeep(obj);\n * // clone là một bản sao hoàn toàn độc lập của obj\n */\nexport const cloneDeep = <T = any>(data: any, options = { ignoreSignal: false }, seen = new WeakMap()): T => {\n if (data === null || (typeof data !== 'object' && !isSignal(data)) || isDangerousObject(data)) {\n return data;\n }\n\n if (seen.has(data)) {\n return seen.get(data);\n }\n\n if (data instanceof HttpParams) {\n return new UtilsHttpParamsRequest(undefined, data) as T;\n }\n\n if (data instanceof Date) {\n return new Date(data.getTime()) as T;\n }\n\n if (isDayjsObject(data)) {\n return getDayjs({ date: data.valueOf() }) as T;\n }\n\n if (isRegExp(data)) {\n return new RegExp(data.source, data.flags) as T;\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n seen.set(data, mapCopy);\n data.forEach((val, key) => {\n mapCopy.set(cloneDeep(key, options, seen), cloneDeep(val, options, seen));\n });\n return mapCopy as T;\n }\n\n if (isSet(data)) {\n const setCopy = new Set();\n seen.set(data, setCopy);\n data.forEach((val) => {\n setCopy.add(cloneDeep(val, options, seen));\n });\n return setCopy as T;\n }\n\n if (isArray(data)) {\n seen.set(data, data.map((item) => cloneDeep(item, options, seen)) as T);\n return seen.get(data) as T;\n }\n\n if (isReturnAsIsObject(data)) {\n return data as T;\n }\n\n if (isSignal(data)) {\n if (options?.ignoreSignal) {\n return data as T;\n }\n seen.set(data, signal(cloneDeep(data(), options, seen)));\n return seen.get(data) as T;\n }\n\n const result: Record<string, any> = {};\n seen.set(data, result);\n for (const key in data) {\n const value = data[key];\n if (value instanceof HttpParams) {\n result[key] = new UtilsHttpParamsRequest(undefined, value) as T;\n continue;\n }\n\n if (value instanceof Date) {\n result[key] = new Date(value.getTime()) as T;\n continue;\n }\n\n if (dayjs.isDayjs(value)) {\n result[key] = getDayjs({ date: value.valueOf() }) as T;\n continue;\n }\n\n if (isRegExp(data)) {\n result[key] = new RegExp(value.source, value.flags) as T;\n continue;\n }\n if (isReturnAsIsObject(data)) {\n result[key] = value;\n continue;\n }\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n result[key] = cloneDeep(value, options, seen);\n }\n }\n\n return result as T;\n};\n\n/**\n * Chuyển đổi một mảng các đối tượng thành một đối tượng với khóa được chỉ định\n * @param data Mảng các đối tượng cần chuyển đổi\n * @param key Tên thuộc tính được sử dụng làm khóa trong đối tượng kết quả\n * @returns Đối tượng với các giá trị từ mảng được đánh key theo thuộc tính đã chỉ định\n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' }\n * ];\n * keyBy(data, 'id');\n * // Kết quả: {\n * // '1': { id: 1, name: 'John' },\n * // '2': { id: 2, name: 'Jane' }\n * // }\n */\nexport const keyBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = get(nextItem, key as PathOf<TYPE_OBJECT>);\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number' && typeof valueOfKey !== 'boolean') {\n return dir;\n }\n if (!Object.keys(dir).includes(`${valueOfKey}`)) {\n dir[`${valueOfKey}`] = nextItem;\n }\n return dir;\n }, {});\n};\n\n/**\n * Nhóm các đối tượng trong một mảng thành các nhóm dựa trên một thuộc tính cụ thể\n * @param data Mảng các đối tượng cần nhóm\n * @param key Tên thuộc tính được sử dụng làm khóa nhóm\n * @returns Đối tượng với các giá trị từ mảng được nhóm theo thuộc tính đã chỉ định\n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' },\n * { id: 1, name: 'John' }\n * ];\n * groupBy(data, 'id');\n * // Kết quả: {\n * // '1': [\n * // { id: 1, name: 'John' },\n * // { id: 1, name: 'John' }\n * // ],\n * // '2': [\n * // { id: 2, name: 'Jane' }\n * // }\n */\nexport const groupBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !Object.keys(get(data, '[0]')).length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = get(nextItem, key as PathOf<TYPE_OBJECT>);\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number' && typeof valueOfKey !== 'boolean') {\n return dir;\n }\n if (!Object.keys(dir).includes(`${valueOfKey}`)) {\n dir[`${valueOfKey}`] = [];\n }\n dir[`${valueOfKey}`].push(nextItem);\n return dir;\n }, {});\n};\n\n/**\n * Tạo một mảng các số từ giá trị bắt đầu đến giá trị kết thúc với bước nhảy tùy chọn\n * @param start Giá trị bắt đầu của dãy số. Nếu chỉ có một tham số, đây sẽ là giá trị kết thúc và giá trị bắt đầu sẽ là 0\n * @param end Giá trị kết thúc của dãy số (tùy chọn)\n * @param step Bước nhảy giữa các số trong dãy (tùy chọn). Mặc định là 1 nếu end > start, -1 nếu end < start\n * @returns Mảng các số từ start đến end với bước nhảy step\n * @example\n * range(4); // [0, 1, 2, 3]\n * range(1, 5); // [1, 2, 3, 4]\n * range(0, 20, 5); // [0, 5, 10, 15]\n * range(5, 2); // [5, 4, 3]\n */\nexport const range = (start: number, end?: number, step?: number): Array<number> => {\n if (end === undefined || end === null) {\n end = start;\n start = 0;\n }\n\n if (!step) {\n step = end < 0 ? -1 : 1;\n }\n\n if (end < start && step > 0) {\n step *= -1;\n }\n\n const valueStartByStep = step + start;\n const direction = start < end ? 'asc' : 'desc';\n if ((direction === 'asc' && (valueStartByStep < start || valueStartByStep > end)) || (direction === 'desc' && (valueStartByStep > start || valueStartByStep < end))) {\n return [start];\n }\n\n const arr = new Array<number>();\n\n for (let index = 0; index < Math.abs(end - start); index++) {\n let value = start + index * step;\n if (index === 0) {\n value = start;\n }\n\n if ((direction === 'asc' && (value < start || value > end)) || (direction === 'desc' && (value > start || value < end))) {\n return arr;\n }\n\n arr.push(value);\n }\n\n return arr;\n};\n\n/**\n * So sánh hai giá trị bất kỳ có bằng nhau hay không\n * @param value1 Giá trị thứ nhất cần so sánh\n * @param value2 Giá trị thứ hai cần so sánh\n * @param exactlyPosition Có so sánh chính xác vị trí các phần tử trong mảng hay không\n * @returns true nếu hai giá trị bằng nhau, false nếu không bằng nhau\n * @example\n * isEqual([1,2,3], [1,2,3]); // true\n * isEqual([1,2,3], [3,2,1]); // true khi exactlyPosition = false\n * isEqual([1,2,3], [3,2,1]); // false khi exactlyPosition = true\n * isEqual({a:1}, {a:1}); // true\n */\nexport const isEqual = (\n value1: any,\n value2: any,\n options?: {\n exactlyPosition?: boolean;\n ignoreExactlyDataType?: boolean;\n ignoreUnWrapSignal?: boolean;\n }\n): boolean => {\n // Handle signals\n if (!options?.ignoreUnWrapSignal) {\n value1 = unwrapSignal(value1);\n value2 = unwrapSignal(value2);\n }\n const { exactlyPosition = false, ignoreExactlyDataType = false } = options || {};\n\n if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {\n return true;\n }\n\n if (ignoreExactlyDataType) {\n return isEqual(isNil(value1) ? undefined : `${value1}`, isNil(value2) ? undefined : `${value2}`);\n }\n\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2)) || (!Array.isArray(value1) && Array.isArray(value2))) {\n return false;\n }\n\n if (Array.isArray(value1) || Array.isArray(value2)) {\n if (value1.length !== value2.length) {\n return false;\n }\n if (!exactlyPosition) {\n return !value1.some((item: any) => !value2.includes(item));\n }\n\n return !value1.some((item: any, index: number) => !isEqual(item, value2[index], options));\n }\n\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n return !Object.keys(value1).some((key) => !isEqual(value1[key], value2[key], options));\n};\n\n/**\n * Loại bỏ các phần tử trùng lặp trong mảng dựa trên một thuộc tính chỉ định\n * @param data Mảng dữ liệu cần xử lý\n * @param key Tên thuộc tính dùng để so sánh trùng lặp. Nếu không có key thì so sánh trực tiếp giá trị\n * @returns Mảng mới chứa các phần tử không trùng lặp\n * @example\n * const arr = [\n * { id: 1, name: 'A' },\n * { id: 2, name: 'B' },\n * { id: 1, name: 'C' }\n * ];\n * uniqBy(arr, 'id'); // [{ id: 1, name: 'A' }, { id: 2, name: 'B' }]\n *\n * const numbers = [1, 2, 2, 3, 3];\n * uniqBy(numbers); // [1, 2, 3]\n *\n * const numbersSignal = [signal(1), signal(2), signal(3), signal(2), signal(5), signal(4), signal(1), signal(6), signal(7), signal(6)];\n * uniqBy(numbersSignal); // [signal(1), signal(2), signal(3), signal(5), signal(4), signal(6), signal(7)]\n */\nexport const uniqBy = <T>(data: Array<T>, key?: string): Array<T> => {\n if (!key || !data?.length || typeof get(data, '[0]') !== 'object') {\n // Xử lý mảng chứa signal values\n if (data[0] && isSignal(data[0])) {\n const seen = new Set<string>();\n\n return data.filter((item) => {\n const value = `${get<any>(item, '')}`;\n if (seen.has(value)) {\n return false;\n }\n seen.add(value);\n return true;\n });\n }\n // Xử lý mảng primitive values\n return Array.from(new Set(data));\n }\n\n const dataUnique = keyBy(data as Array<Record<string, any>>, key);\n\n return Object.keys(dataUnique).map((key) => dataUnique[key]);\n};\n\nexport const generateInterface = (obj: any, interfaceName: string): string => {\n const generateType = (value: any): string => {\n if (value === null) {\n return 'null';\n }\n const type = typeof value;\n\n if (type === 'string') {\n return 'string';\n }\n if (type === 'number') {\n return 'number';\n }\n if (type === 'boolean') {\n return 'boolean';\n }\n if (type === 'undefined') {\n return 'any';\n }\n\n if (value instanceof Date) {\n return 'Date';\n }\n\n if (value instanceof RegExp) {\n return 'RegExp';\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'Array<any>';\n }\n return `Array<${generateType(value[0])}>`;\n }\n\n if (type === 'object') {\n let interfaceStr = '{\\n';\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const valueType = generateType(value[key]);\n interfaceStr += ` ${key}: ${valueType};\\n`;\n }\n }\n interfaceStr += '}';\n return interfaceStr;\n }\n\n return 'any';\n };\n\n const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;\n return interfaceStr;\n};\n","import { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\n\nimport Bowser from 'bowser';\nimport { finalize, fromEvent, mergeMap, startWith, takeUntil, tap } from 'rxjs';\nimport { set } from './helpers';\n\nlet parser: DOMParser | null = null;\nlet bowserParser: Bowser.Parser.Parser | null = null;\n\n/**\n * Lấy thông tin thiết bị và trình duyệt (Sử dụng thư viện Bowser).\n * @returns Đối tượng Parser chứa thông tin OS, Browser, Platform...\n */\nexport const getDeviceInfo = () => {\n if (!bowserParser) {\n bowserParser = Bowser.getParser(window.navigator.userAgent);\n }\n return bowserParser;\n};\n\n/**\n * Kiểm tra xem thiết bị hiện tại có hỗ trợ cảm ứng (Touch) không.\n * @returns true nếu là thiết bị cảm ứng\n */\nexport const isTouchDevice = (): boolean => ('onpointerdown' in navigator && navigator.maxTouchPoints > 0) || 'ontouchstart' in window || (window.matchMedia?.('(pointer: coarse)').matches ?? false);\n\n/**\n * Xác định tên sự kiện click phù hợp cho thiết bị (click cho desktop, pointerdown cho touch).\n */\nexport const getEventNameHandleClick = (() => {\n if (isTouchDevice()) {\n return 'pointerdown';\n }\n const deviceInfo = getDeviceInfo();\n\n return deviceInfo.isPlatform('desktop') ? 'click' : 'touchstart';\n})();\n\n/**\n * Chuyển đổi một chuỗi HTML thành đối tượng Document.\n * @param htmlStr Chuỗi HTML cần parse\n * @returns Đối tượng Document tương ứng\n */\nexport const getDocumentByString = (htmlStr: string): Document => {\n if (!parser) {\n parser = new DOMParser();\n }\n return parser.parseFromString(htmlStr, 'text/html');\n};\n\n/**\n * Sao chép các thuộc tính cơ bản của IBoundingClientRect.\n * @param rect Đối tượng IBoundingClientRect gốc\n * @returns Đối tượng IBoundingClientRect đã được copy\n */\nexport const cloneIBoundingClientRect = (rect: IBoundingClientRect): IBoundingClientRect => {\n return {\n top: rect['top'],\n left: rect['left'],\n width: rect['width'],\n height: rect['height'],\n bottom: rect['bottom'],\n };\n};\n\n/**\n * Gán nhiều thuộc tính CSS style cho một Element.\n * @param el Phần tử HTML cần gán style\n * @param styles Đối tượng chứa các style (ví dụ: { color: 'red', display: 'block' })\n */\nexport const setStylesElement = (el: HTMLElement, styles: Record<string, string>): void => {\n Object.keys(styles).forEach((key: string) => set(el, `style.${key}`, styles[key]));\n};\n\n/**\n * Lấy kích thước Viewport hiển thị của cửa sổ trình duyệt.\n * @param win Đối tượng Window (mặc định là window)\n * @returns Đối tượng chứa width và height\n */\nexport const getViewport = (win: Window = window): { width: number; height: number } => {\n const doc = win.document.documentElement,\n body = win.document.getElementsByTagName('body')[0],\n w = win.innerWidth || doc.clientWidth || body.clientWidth,\n h = win.innerHeight || doc.clientHeight || body.clientHeight;\n\n return { width: w, height: h };\n};\n\n/**\n * Thiết lập vị trí con trỏ (caret) cho thẻ Input hoặc Textarea.\n * @param element Thẻ input hoặc textarea\n * @param position Vị trí cần đặt con trỏ\n */\nexport const setCaretPosition = (element: HTMLTextAreaElement | HTMLInputElement, position: number): void => {\n if (!element || !element.setSelectionRange) {\n return;\n }\n element.focus();\n element.setSelectionRange(position, position);\n};\n\n/**\n * Kiểm tra xem một phần tử có đang hiển thị trong vùng nhìn thấy (viewport) của một container không.\n * @param container Element cha chứa vùng scroll\n * @param element Element cần kiểm tra\n * @param elementScroll (Tùy chọn) Element đại diện cho vùng scroll nếu khác container\n * @param maxTopLeft (Tùy chọn) Offset bổ sung để kiểm tra\n * @returns true nếu nằm trong vùng nhìn thấy\n */\nexport const checkViewInScreen = (container: HTMLElement, element: HTMLElement, elementScroll?: HTMLElement, maxTopLeft?: { top?: number; left?: number }): boolean => {\n if (!container || !element) {\n return false;\n }\n\n const rectContainer = cloneIBoundingClientRect(container.getBoundingClientRect());\n\n if (elementScroll) {\n const rectElementScroll = elementScroll.getBoundingClientRect();\n\n rectContainer['left'] = rectElementScroll.left;\n rectContainer['top'] = rectElementScroll.top;\n }\n\n const rectElement = element.getBoundingClientRect();\n const { left, top } = rectElement;\n const topContainer = rectContainer['top'];\n const leftContainer = rectContainer['left'];\n const widthContainer = rectContainer['width'];\n const heightContainer = rectContainer['height'];\n const scrollTopContainer = container.scrollTop;\n const scrollLeftContainer = container.scrollLeft;\n const limitTop = topContainer + scrollTopContainer + heightContainer;\n const limitLeft = leftContainer + scrollLeftContainer + widthContainer;\n\n const maxTopItem = top + (maxTopLeft?.top || 0);\n const maxLeftItem = left + (maxTopLeft?.left || 0);\n\n if (topContainer <= maxTopItem && maxTopItem <= limitTop && leftContainer <= maxLeftItem && maxLeftItem <= limitLeft) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Kiểm tra xem tọa độ chuột hiện tại có nằm trong vùng của một Element không.\n * @param mousePosition Đối tượng chứa clientX, clientY\n * @param element Element cần kiểm tra\n * @param rect (Tùy chọn) Bounding rect đã có sẵn để tối ưu hiệu năng\n * @returns true nếu chuột đang đè lên phần tử\n */\nexport const checkMouseOverInContainer = (mousePosition: { clientX: number; clientY: number }, element?: HTMLElement, rect?: DOMRect): boolean => {\n if (!element && !rect) {\n return false;\n }\n const rectElement = rect || element?.getBoundingClientRect() || ({} as DOMRect);\n const { left, top, width, height } = rectElement;\n const limitLeft = left + width;\n const limitTop = top + height;\n const { clientX, clientY } = mousePosition;\n if (left <= clientX && clientX <= limitLeft && top <= clientY && clientY <= limitTop) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Tạo sự kiện Kéo-Thả (Drag) nâng cao dựa trên RxJS cho một Element.\n * @param config Cấu hình sự kiện (element, các hàm callback, destroyRef)\n * @returns Observable phát ra sự kiện mousemove trong quá trình kéo\n */\nexport const getDragEventByElement = (config: {\n elementMouseDown: HTMLElement;\n functionMouseDown?: (event: MouseEvent) => void;\n isStartWithMouseDownEvent?: boolean;\n elementMouseMove?: HTMLElement;\n functionMouseMove?: (event: MouseEvent) => void;\n elementMouseUp?: HTMLElement;\n functionMouseUp?: (event: MouseEvent) => void;\n destroyRef: DestroyRef;\n}) => {\n let timer: ReturnType<typeof setTimeout>;\n const addClass = () => {\n timer = setTimeout(() => {\n document.body.classList.add('!select-none');\n document.body.classList.add('!cursor-grabbing');\n }, 250);\n };\n const removeClass = () => {\n document.body.classList.remove('!select-none');\n document.body.classList.remove('!cursor-grabbing');\n clearTimeout(timer);\n };\n fromEvent(config.elementMouseDown, 'mouseleave')\n .pipe(\n tap(() => document.body.classList.remove('cursor-pointer')),\n takeUntilDestroyed(config.destroyRef)\n )\n .subscribe();\n fromEvent(config.elementMouseDown, 'mouseenter')\n .pipe(\n tap(() => document.body.classList.add('cursor-pointer')),\n takeUntilDestroyed(config.destroyRef)\n )\n .subscribe();\n\n const mouseDown = fromEvent<MouseEvent>(config.elementMouseDown, 'mousedown').pipe(\n tap((e) => {\n e.stopPropagation();\n addClass();\n config.functionMouseDown?.(e);\n })\n );\n const mouseup = fromEvent<MouseEvent>(config.elementMouseUp || document, 'mouseup').pipe(\n tap((e) => {\n e.stopPropagation();\n removeClass();\n config.functionMouseUp?.(e);\n })\n );\n\n const mousemove = fromEvent<MouseEvent>(config.elementMouseMove || document, 'mousemove').pipe(\n tap((e) => {\n e.stopPropagation();\n config.functionMouseMove?.(e);\n }),\n takeUntil(mouseup)\n );\n\n return mouseDown.pipe(\n mergeMap((e: MouseEvent) => (config.isStartWithMouseDownEvent ? mousemove.pipe(startWith(e)) : mousemove)),\n takeUntilDestroyed(config.destroyRef),\n finalize(removeClass)\n );\n};\n","/**\n * Tiện ích xử lý tham số truy vấn trên URL (URL Search Parameters).\n * Cung cấp các phương thức để parse, thêm, xóa, lấy giá trị và so sánh các tham số.\n */\nexport class UtilsUrlSearchParams {\n private static instance: UtilsUrlSearchParams;\n private params: Array<{ key: string; value: string }>;\n\n /**\n * Khởi tạo UtilsUrlSearchParams từ một chuỗi query string.\n * @param paramString Chuỗi tham số (ví dụ: \"?id=1&name=test\" hoặc đơn giản là \"id=1&name=test\").\n */\n constructor(paramString: string) {\n this.params = new Array<{ key: string; value: string }>();\n this.params.length = 0;\n this.params.push(...this.buildParams(paramString));\n }\n\n /**\n * Lấy instance duy nhất (Singleton) của UtilsUrlSearchParams.\n * @returns {UtilsUrlSearchParams} Instance của lớp.\n */\n static getInstance() {\n if (!this.instance) {\n this.instance = new UtilsUrlSearchParams('');\n }\n\n return this.instance;\n }\n\n /**\n * Chuyển đổi một đối tượng key-value thành chuỗi query string.\n * @param params Đối tượng chứa các tham số (ví dụ: { id: \"1\", name: \"test\" }).\n * @returns {string} Chuỗi query string đã được sắp xếp theo key (ví dụ: \"id=1&name=test\").\n */\n public static toStringParamObject(params: { [key in string]: string }) {\n const paramsArr: Array<{ key: string; value: string }> = Object.keys(params).map((key) => {\n return {\n key,\n value: params[key],\n };\n });\n\n return UtilsUrlSearchParams.ToString(paramsArr);\n }\n\n /**\n * Chuyển đổi mảng các cặp key-value thành chuỗi query string.\n * Các tham số sẽ được sắp xếp theo thứ tự bảng chữ cái của key.\n * @param params Mảng các đối tượng { key, value }.\n * @returns {string} Chuỗi query string.\n */\n public static ToString(params: Array<{ key: string; value: string }>) {\n let paramsStr = '';\n\n params\n .sort((item1, item2) => item1.key.localeCompare(item2.key))\n .forEach((item) => {\n const { key, value } = item;\n\n paramsStr = `${paramsStr}${paramsStr ? '&' : ''}${key}=${value}`;\n });\n\n return paramsStr;\n }\n\n /**\n * Phân tích chuỗi query string thành mảng các cặp key-value.\n * Tự động decode các giá trị và xử lý các trường hợp URL lỗi (nhiều dấu ?).\n * @param paramString Chuỗi cần phân tích.\n * @returns {Array<{ key: string; value: string }>} Mảng kết quả.\n */\n private buildParams(paramString: string): Array<{ key: string; value: string }> {\n const paramsBuild = new Array<{ key: string; value: string }>();\n\n if (!paramString) {\n return paramsBuild;\n }\n\n const paramsError = paramString.split('?');\n\n if (paramsError.length > 2) {\n paramString = `${paramsError[0]}?${paramsError[1]}&${paramsError.slice(2).join('&')}`;\n }\n\n const params = paramString.replace(/\\S+[?]/g, '').split('&');\n\n if (params) {\n params.forEach((param) => {\n if (param.indexOf('=') < 0) {\n return;\n }\n let [key, value] = param.split('=');\n\n key = key.replace(/[?&]+/g, '');\n value = decodeURIComponent(value.replace(/\\+/g, ' '));\n if (!paramsBuild.some((param) => param.key === key)) {\n paramsBuild.push({ key, value });\n }\n });\n }\n\n return paramsBuild;\n }\n\n /**\n * Thêm hoặc cập nhật giá trị của một tham số.\n * @param key Tên tham số.\n * @param value Giá trị tham số.\n */\n public set(key: string, value: string) {\n const paramByKey = this.params.find((param) => param.key === key) as Record<string, string>;\n\n if (!paramByKey) {\n this.params.push({ key, value: decodeURIComponent(value.replace(/\\+/g, ' ')) });\n\n return;\n }\n\n paramByKey['value'] = value;\n }\n\n /**\n * Lấy giá trị của một tham số theo key.\n * @param key Tên tham số cần lấy.\n * @returns {string | undefined} Giá trị của tham số hoặc undefined nếu không tìm thấy.\n */\n public get(key: string) {\n return this.params.find((param) => param.key === key)?.value;\n }\n\n /**\n * Kiểm tra xem một tham số có tồn tại hay không.\n * @param key Tên tham số cần kiểm tra.\n * @returns {boolean} True nếu tồn tại.\n */\n public has(key: string) {\n return this.params.some((param) => param.key === key);\n }\n\n /**\n * Xóa một tham số khỏi danh sách.\n * @param key Tên tham số cần xóa.\n */\n public delete(key: string) {\n const index = this.params.findIndex((param) => param.key === key);\n\n if (index >= 0) {\n this.params.splice(index, 1);\n }\n }\n\n /**\n * @returns {number} Số lượng tham số hiện có.\n */\n public length() {\n return this.params.length;\n }\n\n /**\n * Chuyển đổi các tham số hiện tại (hoặc mảng truyền vào) thành chuỗi query string.\n * @param params (Tùy chọn) Mảng tham số cần convert. Nếu không truyền sẽ dùng params nội bộ.\n * @returns {string} Chuỗi query string.\n */\n public toString(params?: Array<{ key: string; value: string }>) {\n params = params || this.params;\n\n return UtilsUrlSearchParams.ToString(params);\n }\n\n /**\n * Chuyển đổi danh sách tham số hiện tại thành một đối tượng plain object.\n * @returns {Record<string, string>} Đối tượng key-value.\n */\n public getParamObject() {\n const params = {} as Record<string, string>;\n\n this.params.forEach((item) => {\n params[item.key] = item.value;\n });\n\n return params;\n }\n\n /**\n * So sánh hai chuỗi query string xem chúng có chứa cùng tập tham số và giá trị hay không.\n * Thứ tự các tham số trong chuỗi ban đầu không quan trọng.\n * @param param1 Chuỗi thứ nhất.\n * @param param2 Chuỗi thứ hai.\n * @returns {boolean} True nếu giống nhau.\n */\n public compareParams(param1: string, param2: string) {\n const params1 = this.toString(this.buildParams(param1));\n const params2 = this.toString(this.buildParams(param2));\n\n return params1 === params2;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface IColorContrastFromOrigin {\n step: number;\n label: string;\n light: string;\n dark: string;\n}\n\nconst step = 20;\nconst percent = 0.05;\n\n/**\n * Lấy cụ thể một shade hoặc tint của màu dựa trên bước (step)\n * @param color Mã màu HEX (3 hoặc 6 ký tự)\n * @param stepNumber Bước màu cần lấy (5, 10, 15... 100)\n * @returns Đối tượng chứa thông tin bước màu và mã HEX light/dark\n */\nexport const colorStepContrastFromOrigin = (color: string, stepNumber: number) => {\n return colorContrastFromOrigin(color).find((item) => item.step === stepNumber);\n};\n\n/**\n * Tạo ra danh sách các sắc độ (shades & tints) từ một màu gốc\n * @param color Mã màu HEX\n * @returns Mảng các đối tượng chứa step, label, light hex và dark hex\n */\nexport const colorContrastFromOrigin = (color: string): Array<IColorContrastFromOrigin> => {\n const parsedColorsArray = parseColorValues(color);\n const colors: Array<IColorContrastFromOrigin> = [];\n let calculatedShades: Array<string> = [];\n let calculatedTints: Array<string> = [];\n\n if (parsedColorsArray !== null) {\n for (let i = 0; i < parsedColorsArray.length; i++) {\n calculatedShades = calculateShades(parsedColorsArray[i]);\n calculatedTints = calculateTints(parsedColorsArray[i]);\n }\n\n for (let i = 0; i <= step; i++) {\n colors.push({ step: i * 5, label: `${i * 5}%`, dark: `#${calculatedShades[i]}`, light: `#${calculatedTints[i]}` });\n }\n }\n\n return colors;\n};\n\nconst parseColorValues = (colorValues: any) => {\n let colorValuesArray = colorValues.match(/\\b[0-9A-Fa-f]{3}\\b|[0-9A-Fa-f]{6}\\b/g);\n\n if (colorValuesArray) {\n colorValuesArray = colorValuesArray.map((item: any) => {\n if (item.length === 3) {\n let newItem = item.toString().split('');\n\n newItem = newItem.reduce((acc: any, it: any) => {\n return acc + it + it;\n }, '');\n\n return newItem;\n }\n\n return item;\n });\n }\n\n return colorValuesArray;\n};\n\nconst calculateShades = (colorValue: any) => {\n return calculate(colorValue, rgbShade).concat('000000');\n};\n\nconst calculateTints = (colorValue: any) => {\n return calculate(colorValue, rgbTint).concat('ffffff');\n};\n\nconst calculate = (colorValue: any, shadeOrTint: any) => {\n const color = hexToRGB(colorValue);\n const shadeValues: Array<string> = [];\n\n for (let i = 0; i < step; i++) {\n shadeValues[i] = rgbToHex(shadeOrTint(color, i));\n }\n\n return shadeValues;\n};\n\nconst rgbShade = (rgb: any, i: any) => {\n return { red: rgb.red * (1 - percent * i), green: rgb.green * (1 - percent * i), blue: rgb.blue * (1 - percent * i) };\n};\n\nconst rgbTint = (rgb: any, i: any) => {\n return { red: rgb.red + (255 - rgb.red) * i * percent, green: rgb.green + (255 - rgb.green) * i * percent, blue: rgb.blue + (255 - rgb.blue) * i * percent };\n};\n\n/**\n * Chuyển đổi đối tượng RGB sang mã HEX (không có dấu #)\n * @param rgb Đối tượng chứa red, green, blue\n * @returns Chuỗi HEX 6 ký tự\n */\nexport const rgbToHex = (rgb: any) => {\n return intToHex(rgb.red) + intToHex(rgb.green) + intToHex(rgb.blue);\n};\n\nconst hexToRGB = (colorValue: any) => {\n return { red: parseInt(colorValue.substr(0, 2), 16), green: parseInt(colorValue.substr(2, 2), 16), blue: parseInt(colorValue.substr(4, 2), 16) };\n};\n\nconst intToHex = (rgbint: any) => {\n return pad(Math.min(Math.max(Math.round(rgbint), 0), 255).toString(16), 2);\n};\n\nconst pad = (number: any, length: any) => {\n let str = '' + number;\n\n while (str.length < length) {\n str = '0' + str;\n }\n\n return str;\n};\n\n/**\n * Danh sách các mã màu định nghĩa sẵn để sử dụng trong getColorById\n */\nexport const listColorDefine: Array<string> = [\n '#E62222',\n '#B81B1B',\n '#EB4E4E',\n '#F97316',\n '#C75C12',\n '#FA8F45',\n '#FFB700',\n '#CC9200',\n '#FFC533',\n '#84CC16',\n '#6AA312',\n '#9dd645',\n '#00BC62',\n '#00A757',\n '#33DA8A',\n '#06B6D4',\n '#1B59C4',\n '#4E8CF7',\n '#0EA5E9',\n '#1B59C4',\n '#4E8CF7',\n '#226FF5',\n '#1B59C4',\n '#4E8CF7',\n '#6366F1',\n '#4F52C1',\n '#8285F4',\n '#5B04B3',\n '#49038F',\n '#7C36C2',\n '#D946EF',\n '#AE38BF',\n '#E16BF2',\n '#EC4899',\n '#BD3A7A',\n '#F06DAD',\n '#F43F5E',\n '#C3324B',\n '#F6657E',\n '#757380',\n '#5E5C66',\n '#918F99',\n '#202020',\n '#1A1A1A',\n '#4D4D4D',\n];\n\n/**\n * Lấy một màu định nghĩa sẵn dựa trên chuỗi đầu vào (như ID người dùng, tên...)\n * Màu trả về là duy nhất và cố định cho cùng một chuỗi đầu vào.\n * @param str Chuỗi để hash lấy màu\n * @returns Mã màu HEX từ listColorDefine\n */\nexport const getColorById = (str: string): string => {\n let hashString = 0;\n\n if (!str) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n\n hashString = (hashString << 5) - hashString + char;\n hashString = hashString & hashString;\n }\n\n return listColorDefine[Math.abs(hashString) % listColorDefine.length];\n};\n\n/**\n * Loại bỏ các thuộc tính màu sắc (color, background...) \"gần trắng\" khỏi chuỗi style CSS\n * Giúp tránh việc hiển thị chữ trắng trên nền trắng khi merge style lung tung.\n * @param style Chuỗi style CSS (ví dụ: \"color: #fff; font-size: 14px;\")\n * @returns Chuỗi style đã được làm sạch\n */\nexport const detectAndCleanNearWhiteColors = (style: string): string => {\n if (!style) return style;\n\n const styleMap: Record<string, string> = {};\n const rules = style\n .split(';')\n .map((s) => s.trim())\n .filter(Boolean);\n\n for (const rule of rules) {\n const [keyRaw, valueRaw] = rule.split(':').map((s) => s.trim());\n if (!keyRaw || !valueRaw) continue;\n const key = keyRaw.toLowerCase();\n styleMap[key] = valueRaw;\n }\n\n const colorKeys = ['color', 'background', 'background-color', 'border-color'];\n for (const key of colorKeys) {\n const value = styleMap[key];\n if (value && isNearWhite(value)) {\n delete styleMap[key];\n }\n }\n\n return Object.entries(styleMap)\n .map(([k, v]) => `${k}: ${v}`)\n .join('; ');\n};\n\n/**\n * Kiểm tra một màu có phải là \"gần trắng\" hay không\n * Dựa trên luminance > 0.95 và saturation < 0.1\n * @param color Mã màu (HEX, RGB, RGBA hoặc tên màu CSS)\n * @returns true nếu màu gần trắng\n */\nexport const isNearWhite = (color: string): boolean => {\n if (!color) return false;\n color = color.trim().toLowerCase();\n\n // Chuyển HEX, RGB hoặc tên màu sang r,g,b\n const parseColor = (input: string): [number, number, number] | null => {\n if (input.startsWith('#')) {\n let hex = input.slice(1);\n if (hex.length === 3)\n hex = hex\n .split('')\n .map((c) => c + c)\n .join('');\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return [r, g, b];\n }\n\n const rgbMatch = input.match(/rgba?\\s*\\(([^)]+)\\)/);\n if (rgbMatch) {\n const [r, g, b] = rgbMatch[1]\n .split(',')\n .slice(0, 3)\n .map((v) => parseFloat(v.trim()));\n return [r, g, b];\n }\n\n const whiteNames = ['white', 'snow', 'ivory', 'ghostwhite', 'floralwhite', 'seashell', 'whitesmoke'];\n if (whiteNames.includes(input)) return [255, 255, 255];\n return null;\n };\n\n const rgb = parseColor(color);\n if (!rgb) return false;\n\n const [r, g, b] = rgb;\n\n // Tính luminance (độ sáng)\n const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\n\n // Tính saturation (độ bão hòa)\n const max = Math.max(r, g, b) / 255;\n const min = Math.min(r, g, b) / 255;\n const saturation = max === 0 ? 0 : (max - min) / max;\n\n // Chỉ coi là \"gần trắng\" nếu:\n // 1. rất sáng (luminance > 0.95)\n // 2. và rất ít màu (saturation < 0.1)\n return luminance > 0.95 && saturation < 0.1;\n};\n","export abstract class UtilsKeyCodeConstant {\n static readonly MAC_ENTER = 3;\n static readonly BACKSPACE = 8;\n static readonly TAB = 9;\n static readonly NUM_CENTER = 12;\n static readonly ENTER = 13;\n static readonly SHIFT = 16;\n static readonly CONTROL = 17;\n static readonly ALT = 18;\n static readonly PAUSE = 19;\n static readonly CAPS_LOCK = 20;\n static readonly ESCAPE = 27;\n static readonly SPACE = 32;\n static readonly PAGE_UP = 33;\n static readonly PAGE_DOWN = 34;\n static readonly END = 35;\n static readonly HOME = 36;\n static readonly LEFT_ARROW = 37;\n static readonly UP_ARROW = 38;\n static readonly RIGHT_ARROW = 39;\n static readonly DOWN_ARROW = 40;\n static readonly PLUS_SIGN = 43;\n static readonly PRINT_SCREEN = 44;\n static readonly INSERT = 45;\n static readonly DELETE = 46;\n static readonly ZERO = 48;\n static readonly ONE = 49;\n static readonly TWO = 50;\n static readonly THREE = 51;\n static readonly FOUR = 52;\n static readonly FIVE = 53;\n static readonly SIX = 54;\n static readonly SEVEN = 55;\n static readonly EIGHT = 56;\n static readonly NINE = 57;\n static readonly FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\n static readonly FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\n static readonly QUESTION_MARK = 63;\n static readonly AT_SIGN = 64;\n static readonly A = 65;\n static readonly B = 66;\n static readonly C = 67;\n static readonly D = 68;\n static readonly E = 69;\n static readonly F = 70;\n static readonly G = 71;\n static readonly H = 72;\n static readonly I = 73;\n static readonly J = 74;\n static readonly K = 75;\n static readonly L = 76;\n static readonly M = 77;\n static readonly N = 78;\n static readonly O = 79;\n static readonly P = 80;\n static readonly Q = 81;\n static readonly R = 82;\n static readonly S = 83;\n static readonly T = 84;\n static readonly U = 85;\n static readonly V = 86;\n static readonly W = 87;\n static readonly X = 88;\n static readonly Y = 89;\n static readonly Z = 90;\n static readonly META = 91; // WIN_KEY_LEFT\n static readonly MAC_WK_CMD_LEFT = 91;\n static readonly MAC_WK_CMD_RIGHT = 93;\n static readonly CONTEXT_MENU = 93;\n static readonly NUMPAD_ZERO = 96;\n static readonly NUMPAD_ONE = 97;\n static readonly NUMPAD_TWO = 98;\n static readonly NUMPAD_THREE = 99;\n static readonly NUMPAD_FOUR = 100;\n static readonly NUMPAD_FIVE = 101;\n static readonly NUMPAD_SIX = 102;\n static readonly NUMPAD_SEVEN = 103;\n static readonly NUMPAD_EIGHT = 104;\n static readonly NUMPAD_NINE = 105;\n static readonly NUMPAD_MULTIPLY = 106;\n static readonly NUMPAD_PLUS = 107;\n static readonly NUMPAD_MINUS = 109;\n static readonly NUMPAD_PERIOD = 110;\n static readonly NUMPAD_DIVIDE = 111;\n static readonly F1 = 112;\n static readonly F2 = 113;\n static readonly F3 = 114;\n static readonly F4 = 115;\n static readonly F5 = 116;\n static readonly F6 = 117;\n static readonly F7 = 118;\n static readonly F8 = 119;\n static readonly F9 = 120;\n static readonly F10 = 121;\n static readonly F11 = 122;\n static readonly F12 = 123;\n static readonly NUM_LOCK = 144;\n static readonly SCROLL_LOCK = 145;\n static readonly FIRST_MEDIA = 166;\n static readonly FF_MINUS = 173;\n static readonly MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\n static readonly VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\n static readonly VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\n static readonly FF_MUTE = 181;\n static readonly FF_VOLUME_DOWN = 182;\n static readonly LAST_MEDIA = 183;\n static readonly FF_VOLUME_UP = 183;\n static readonly SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\n static readonly EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\n static readonly COMMA = 188;\n static readonly DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\n static readonly PERIOD = 190;\n static readonly SLASH = 191;\n static readonly APOSTROPHE = 192;\n static readonly TILDE = 192;\n static readonly OPEN_SQUARE_BRACKET = 219;\n static readonly BACKSLASH = 220;\n static readonly CLOSE_SQUARE_BRACKET = 221;\n static readonly SINGLE_QUOTE = 222;\n static readonly MAC_META = 224;\n static readonly BUFFERED = 229;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { md5 } from './crypto';\nimport { get } from './helpers';\n\nexport const getKeyCacheByArrayObject = (keyCache: string, argumentsValue?: Array<unknown>): string => {\n if (!keyCache || !argumentsValue) {\n return '';\n }\n let keyBuild = `${JSON.stringify(argumentsValue.slice(1))}-key-cache-plus`;\n\n argumentsValue.forEach((item: any) => {\n if (typeof item === 'object') {\n if (Array.isArray(item)) {\n keyBuild = `${keyBuild}${JSON.stringify(item)}`;\n return;\n }\n const keys = (item instanceof HttpParams ? item.keys() : Object.keys(item)).sort((str1: string, str2: string) => str1.localeCompare(str2)) as Array<string>;\n\n keys.forEach((key) => {\n if (key.toLocaleLowerCase() === 'pem') {\n return;\n }\n keyBuild = `${keyBuild}${JSON.stringify(get(item, key))}`;\n });\n return;\n }\n keyBuild = `${keyBuild}${item}`;\n });\n\n const keyCachePlus = md5(keyBuild);\n const keyCacheMD5 = md5(keyCache);\n\n return `${keyCacheMD5}-${md5(`${keyCacheMD5}-${keyCachePlus}`)}`;\n};\n","import { UtilsCache } from './cache';\nimport { isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\n\n/**\n * Chuẩn hóa chuỗi số theo locale hiện tại về dạng số thực (parseable).\n * - Với **EN**: Xóa dấu phẩy (`,`) — dấu phân tách hàng nghìn.\n * - Với **VI**: Xóa dấu chấm (`.`) và đổi dấu phẩy (`,`) thành dấu chấm (`.`).\n *\n * @param value Chuỗi hoặc số cần chuẩn hóa\n * @returns Chuỗi số đã được chuẩn hóa (không dấu phân cách locale)\n * @example\n * // EN: \"1,234,567\" → \"1234567\"\n * // VI: \"1.234.567,89\" → \"1234567.89\"\n */\nexport const formatNumber = (value: string | number): string => {\n const lang = UtilsCache.getLang();\n\n if (lang === UtilsLanguageConstants.EN) {\n return `${value}`.replace(/[,]/g, '');\n }\n\n return `${value}`.replace(/[.]/g, '').replace(/[,]/g, '.');\n};\n\n/**\n * Định dạng và hiển thị số theo ngôn ngữ (VI/EN) với các tùy chọn linh hoạt.\n * Xử lý số âm, phần thập phân, làm tròn và dấu phân cách hàng nghìn.\n *\n * @param value Giá trị số hoặc chuỗi số đầu vào\n * @param acceptNegativeValue Có chấp nhận số âm không (false → trả về 0 nếu value <= 0)\n * @param parseFixed Số chữ số thập phân muốn giữ lại (mặc định: 1)\n * @param ignoreFormatSeparator Bỏ qua bước chuẩn hóa dấu phân cách (khi value đã là số thuần)\n * @param ignoreParseFloat Bỏ qua bước làm tròn (giữ nguyên phần thập phân)\n * @param lang Ngôn ngữ hiển thị ('vi' hoặc 'en'), mặc định lấy từ cache\n * @returns Chuỗi số đã format theo locale (vd: \"1.234.567,89\" hoặc \"1,234,567.89\")\n * @example\n * // VI, 2 chữ số thập phân\n * viewDataNumberByLanguage(1234567.891, true, 2) → \"1.234.567,89\"\n * // EN, 2 chữ số thập phân\n * viewDataNumberByLanguage(1234567.891, true, 2, false, false, 'en') → \"1,234,567.89\"\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const viewDataNumberByLanguage = (value: string | number, acceptNegativeValue: boolean | undefined, parseFixed = 1, ignoreFormatSeparator = false, ignoreParseFloat = false, lang?: string): any => {\n lang = lang || UtilsCache.getLang();\n\n if (!`${value}`.trim()) {\n return '';\n }\n if (isNil(value) || (!acceptNegativeValue && +value <= 0)) {\n return 0;\n }\n if (typeof value === 'string' && !ignoreFormatSeparator) {\n value = formatNumber(value);\n }\n\n const isFloat = value.toString().includes('.');\n const [intStr, floatStr] = value.toString().split('.');\n\n if (!floatStr?.length) {\n parseFixed = 0;\n }\n const round = (value: number, parseFixed: number) => {\n const fixed = Math.pow(10, parseFixed);\n\n return Math.round(value * fixed) / fixed;\n };\n\n if (parseFixed > (floatStr?.length || 0)) {\n const maxParseFixed = acceptNegativeValue && +value < 0 ? 17 : 16;\n const fixed = maxParseFixed - (intStr?.length || 0);\n\n parseFixed = parseFixed < fixed ? parseFixed : fixed;\n }\n\n if (isFloat && !ignoreParseFloat) {\n value = parseFloat(round(+value, parseFixed).toFixed(parseFixed));\n }\n\n // Xử lý không format dữ liệu phần thập phân\n const valueString = value.toString();\n const index = valueString.indexOf('.');\n\n if (index !== -1 && (parseFixed > 3 || ignoreParseFloat)) {\n let decimalPart = valueString.substring(index + 1, valueString.length);\n let int = valueString.substring(0, index + 1);\n\n if (ignoreParseFloat) {\n decimalPart = decimalPart.substring(0, parseFixed);\n }\n if (lang === UtilsLanguageConstants.EN) {\n int = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n return `${int}${decimalPart}`;\n }\n int = int.replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${int}${decimalPart}`;\n }\n if (index === -1 || parseFixed <= 3) {\n if (lang === UtilsLanguageConstants.EN) {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n return value\n .toString()\n .replace('.', ',')\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n }\n};\n","/* eslint-disable no-useless-escape */\n\n/**\n * Returns regex for email validation\n * @returns {RegExp}\n */\nexport const patternEmail = () => {\n return /^[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]@[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]\\.[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]$/;\n};\n\n/**\n * Returns regex for protocol in URL (http, https, ftp)\n * @returns {RegExp}\n */\nexport const patternProtocolUrl = () => {\n return /(http|https|ftp):/;\n};\n\n/**\n * Returns regex for full URL validation\n * @returns {RegExp}\n */\nexport const patternUrl = () => {\n return /^(http|https|ftp):(\\/){2}[^\\s]+[.]{1}[^\\s]+$/;\n};\n\n/**\n * Returns regex for host part of URL\n * @returns {RegExp}\n */\nexport const patternHostUrl = () => {\n return /^((https|http|ftp):[/]{2}[^/\\s]+)/;\n};\n\n/**\n * Returns regex for domain validation\n * @returns {RegExp}\n */\nexport const patternDomain = () => {\n return /^([a-zA-Z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\\.[a-zA-Z]{2,})+$/;\n};\n\n/**\n * Returns regex for Vietnamese mobile phone validation\n * @returns {RegExp}\n */\nexport const patternMobilePhone = () => {\n return /^(\\+?84|0|84)([0-9]{9})$/;\n};\n\n/**\n * Returns regex for general phone number validation\n * @returns {RegExp}\n */\nexport const patternPhone = () => {\n return /^(\\+?84|[0-9]|84)([0-9]{2,9})$/;\n};\n\n/**\n * Returns regex for digits\n * @returns {RegExp}\n */\nexport const patternNumber = () => {\n return /\\d+/g;\n};\n\n/**\n * Returns regex for encoded URI characters\n * @returns {RegExp}\n */\nexport const patternEncodeUri = () => {\n return /%([0-9A-F]{2})/g;\n};\n\n/**\n * Returns regex for standard name (alphanumeric and spaces)\n * @returns {RegExp}\n */\nexport const patternName = () => {\n return /^\\w+[A-Za-z\\s\\d]+$/;\n};\n\n/**\n * Returns regex for UTF-8 name (including Vietnamese characters)\n * @returns {RegExp}\n */\nexport const patternNameUtf8 = () => {\n return /^[ àáảãạăắằẵặẳâầấậẫẩđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹÀÁẢÃẠĂẮẰẴẶẲÂẦẤẬẪẨĐÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸA-Za-z0-9]+$/;\n};\n\n/**\n * Returns regex for special characters in name\n * @returns {RegExp}\n */\nexport const patternNameSpecial = () => {\n return /[~!@#$%^&*()-+=<>,?\\/\\\\:;\"']/;\n};\n\n/**\n * Returns regex for profile name\n * @returns {RegExp}\n */\nexport const patternNameProfile = () => {\n return /([\\w\\W\\d\\s]+)+/;\n};\n\n/**\n * Returns regex for emojis\n * @returns {RegExp}\n */\nexport const patternEmoji = () => {\n return /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/g;\n};\n\n/**\n * Returns regex for matching field replacement markers (e.g. {{field}})\n * @returns {RegExp}\n */\nexport const patternRuleFieldReplace = () => {\n return /[{]{2}[a-zA-Z_-]+[}]{2}/g;\n};\n\n/**\n * Returns regex for extracting field name from replacement markers\n * @returns {RegExp}\n */\nexport const patternGetFieldByRuleFieldReplace = () => {\n return /[a-zA-Z_-]+/g;\n};\n\n/**\n * Returns regex for PEM format validation\n * @returns {RegExp}\n */\nexport const patternPem = () => {\n return /^(0|1):([0-9]{1,2}):(\\{\\{path-api\\}\\}):([a-zA-Z0-9\\/]+)$/g;\n};\n\n/**\n * Returns regex for tax ID validation\n * @returns {RegExp}\n */\nexport const patternTax = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n};\n\n/**\n * Returns regex for key validation (identical to tax regex)\n * @returns {RegExp}\n */\nexport const patternKey = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n};\n\n/**\n * Returns regex for account validation (must contain @)\n * @returns {RegExp}\n */\nexport const patternAccount = () => {\n return /^(?=.*@)[a-z0-9@._-]{2,63}$/;\n};\n","//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test\nexport type TYPE_FUNCTION_XSS = (data: string) => Promise<string>;\nlet functionXssFilter: TYPE_FUNCTION_XSS = async (value: string): Promise<string> => {\n return value;\n};\n\n/**\n * Cập nhật hàm lọc XSS.\n * Cho phép ghi đè hàm xử lý XSS mặc định (trả về nguyên gốc) bằng một implementation bảo mật do project cung cấp (ví dụ: dùng DOMPurify).\n *\n * @param functionCustom Hàm xử lý XSS tùy chỉnh cần cập nhật.\n */\nexport const updateFunctionXssFilter = (functionCustom: TYPE_FUNCTION_XSS) => {\n functionXssFilter = functionCustom;\n};\n\n/**\n * Lọc dữ liệu thông qua hàm lọc XSS đã được định cấu hình.\n * Theo mặc định, hàm này sẽ trả lại chuỗi ban đầu. Nếu bạn đã cung cấp một custom filter qua `updateFunctionXssFilter`, hàm đó sẽ được sử dụng.\n *\n * @param data Chuỗi dữ liệu đầu vào.\n * @returns {Promise<string>} Promise chứa kết quả đã được lọc XSS.\n */\nexport const xssFilter: TYPE_FUNCTION_XSS = async (data: string) => {\n return await functionXssFilter(data);\n};\n","import { TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { isNil, omitBy } from './helpers';\n\nexport const ENCODE_URI_PATTERN = /%([0-9A-F]{2})/g;\n\n/**\n * Giải mã chuỗi URI một cách an toàn.\n *\n * @param value Chuỗi cần giải mã.\n * @returns Chuỗi đã được giải mã.\n */\nexport const decodeURI = (value: string) => {\n return decodeURIComponent(\n value\n .split('')\n .map((c: string) => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n};\n\n/**\n * Mã hóa chuỗi URI.\n *\n * @param value Chuỗi cần mã hóa.\n * @returns Chuỗi đã được mã hóa.\n */\nexport const encodeURI = (value: string) => {\n return encodeURIComponent(value).replace(ENCODE_URI_PATTERN, (match, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n });\n};\n\n/**\n * Chuyển đổi đối tượng parameters thành chuỗi query string hoặc body string.\n * Tự động loại bỏ các giá trị rỗng, null, hoặc undefined.\n *\n * @param params Đối tượng chứa các tham số.\n * @param isBody Nếu true, trả về chuỗi không có dấu '?' ở đầu.\n * @returns Chuỗi tham số đã được mã hóa.\n */\nexport const endCodeUrl = (params: TYPE_OBJECT, isBody: boolean): string => {\n params = omitBy(params, (param) => param === '' || isNil(param));\n let res = '';\n\n for (const p in params) {\n res += `&${p}=${encodeURIComponent(params[p])}`;\n }\n\n return res === '' ? '' : `${isBody ? '' : '?'}${res.substring(1)}`;\n};\n","import { decodeURI, encodeURI } from './uri';\n\n/**\n * Mã hóa chuỗi thành Base64 (có hỗ trợ ký tự đặc biệt qua encodeURI)\n * @param value Chuỗi cần mã hóa\n * @returns Chuỗi đã mã hóa Base64\n */\nexport const base64Encode = (value: string) => {\n return btoa(encodeURI(value));\n};\n\n/**\n * Giải mã chuỗi Base64 (có hỗ trợ ký tự đặc biệt qua decodeURI)\n * @param value Chuỗi Base64 cần giải mã\n * @returns Chuỗi đã giải mã\n */\nexport const base64Decode = (value: string) => {\n return decodeURI(atob(value));\n};\n\n/**\n * Chuyển đổi dữ liệu Base64 thành Blob\n * @param dataBase64 Dữ liệu Base64 (có thể bao gồm marker ;base64,)\n * @returns Blob tương ứng\n */\nexport const convertBase64ToBlob = (dataBase64: string) => {\n const BASE64_MARKER = ';base64,';\n\n if (dataBase64.indexOf(BASE64_MARKER) === -1) {\n const parts = dataBase64.split(',');\n const contentType = parts[0].split(':')[1];\n const raw = parts[1];\n const blob = new Blob([raw], { type: contentType });\n\n return blob;\n }\n const parts = dataBase64.split(BASE64_MARKER);\n const contentType = parts[0].split(':')[1];\n const raw = window.atob(parts[1]);\n const rawLength = raw.length;\n const uInt8Array = new Uint8Array(rawLength);\n\n for (let i = 0; i < rawLength; ++i) {\n uInt8Array[i] = raw.charCodeAt(i);\n }\n\n const blob = new Blob([uInt8Array], { type: contentType });\n\n return blob;\n};\n\n/**\n * Chuyển đổi File thành Base64 string hoặc Object URL tùy loại file\n * @param file Đối tượng File cần chuyển đổi\n * @returns Nếu là ảnh, trả về Base64 string. Ngược lại trả về Object URL.\n */\nexport const convertFileToBase64_ObjectUrl = async (file: File): Promise<string | ArrayBuffer> => {\n if (!file.type.match(/image.*/)) {\n return URL.createObjectURL(file);\n }\n\n return await convertFileToBase64(file);\n};\n\n/**\n * Chuyển đổi File thành Base64 string\n * @param file Đối tượng File cần chuyển đổi\n * @returns Promise chứa chuỗi Base64\n */\nexport const convertFileToBase64 = (file: File): Promise<string | ArrayBuffer> => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n reader.onload = (event) => {\n resolve(event.target?.result ?? '');\n };\n });\n};\n","import { convertBase64ToBlob } from './base64';\n\n/**\n * Tải file từ URL bằng XMLHttpRequest.\n * Khác với `downloadFileByUrl`, hàm này sử dụng XHR để tải file, hữu ích hơn\n * trong các trường hợp cần header tùy chỉnh hoặc gọi API nội bộ.\n * @param fileUrl URL của file cần tải\n * @param filename Tên file sẽ được lưu về máy\n */\nexport const downloadFileByUrlUseXmlRequest = (fileUrl: string, filename: string) => {\n const xmlRequest = new XMLHttpRequest();\n\n xmlRequest.open('GET', fileUrl, true);\n xmlRequest.responseType = 'blob';\n xmlRequest.onerror = () => {\n const url = window.URL.createObjectURL(xmlRequest.response);\n\n downloadFileByUrl(url, filename);\n };\n xmlRequest.onload = () => {\n const url = window.URL.createObjectURL(xmlRequest.response);\n\n downloadFileByUrl(url, filename);\n };\n xmlRequest.send();\n};\n\n/**\n * Tải file từ URL bằng cách tạo thẻ `<a>` ảo và kích hoạt sự kiện click.\n * Hỗ trợ chế độ mở file trên tab mới (onlyOpen) hoặc tải xuống thực sự.\n * @param fileUrl URL trực tiếp của file hoặc Blob URL\n * @param filename Tên file sẽ được lưu khi tải về\n * @param onlyOpen Nếu `true`, chỉ mở file trong tab mới thay vì tải về\n */\nexport const downloadFileByUrl = async (fileUrl: string, filename: string, onlyOpen?: boolean) => {\n const downloadFileElement = document.createElement('a');\n\n if (!onlyOpen) {\n const response = await fetch(fileUrl);\n\n if (response.ok) {\n const blob = await response.blob();\n\n fileUrl = URL.createObjectURL(blob);\n }\n }\n downloadFileElement.href = fileUrl;\n downloadFileElement.download = filename;\n downloadFileElement.target = '_blank';\n downloadFileElement.click();\n downloadFileElement.remove();\n};\n\n/**\n * Tải ảnh từ một phần tử `<img>` dựa trên thuộc tính `src` (hỗ trợ Base64 Data URL).\n * Thường dùng để cho phép người dùng lưu ảnh barcode, QR code về máy.\n * @param imageElement Phần tử `<img>` cần lấy ảnh\n * @param typeFileDownload Loại MIME của file (mặc định: 'image/png')\n * @param nameFile Tên file sẽ được lưu (mặc định: 'barcode')\n */\nexport const downloadImageFromELement = (imageElement: HTMLImageElement, typeFileDownload?: string, nameFile?: string) => {\n const parentElement = imageElement?.src;\n const blobData = convertBase64ToBlob(parentElement);\n const blob = new Blob([blobData], { type: typeFileDownload || 'image/png' });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = url;\n link.download = nameFile || 'barcode';\n link.click();\n};\n","import { InjectionToken } from '@angular/core';\n\n//NOTE: Đây là các hàm token inject để các module khác có thể inject vào để sử dụng\nexport const LINK_IMAGE_ERROR_TOKEN_INJECT = new InjectionToken<string>('LINK_IMAGE_ERROR_TOKEN_INJECT');\nexport const PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT = new InjectionToken<string>('PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT');\nexport const PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT = new InjectionToken<string>('PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT');\n","import { IFile } from '@libs-ui/interfaces-types';\nimport { convertBase64ToBlob } from './base64';\nimport { get, set } from './helpers';\nimport { uuid } from './uuid';\n\n/** Kiểm tra file có phải là ảnh không (image/*). */\nexport const isTypeImage = (file: File | Blob) => (file.type.match(/image.*/) ? true : false);\n/** Kiểm tra file có phải là video không (video/*). */\nexport const isTypeVideo = (file: File | Blob) => (file.type.match(/video.*/) ? true : false);\n/** Kiểm tra file có phải là audio không (audio/*). */\nexport const isTypeAudio = (file: File | Blob) => (file.type.match(/audio.*/) ? true : false);\n/** Kiểm tra giá trị có phải là đối tượng File không. */\nexport const isTypeFile = (file: File) => (file instanceof File || Object.prototype.toString.call(file) === '[object File]' ? true : false);\n\n/** Danh sách extension/MIME type của file Excel. */\nexport const ExcelExtList = ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];\n\n/** Danh sách extension/MIME type của tài liệu (Word, Excel, PDF, JSON...). */\nexport const DocumentExtList = [\n 'doc',\n 'docx',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n 'pdf',\n 'json',\n 'xml',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/pdf',\n 'application/json',\n 'application/xml',\n];\n\n/**\n * Kiểm tra extension có thuộc danh sách tài liệu được chấp nhận không.\n * @param ext Extension hoặc MIME type cần kiểm tra\n * @param listExt Danh sách tùy chỉnh (mặc định là DocumentExtList)\n */\nexport const isIncludeDocumentExtList = (ext: string, listExt: Array<string> = DocumentExtList) => listExt.includes(ext) || listExt.includes(`application/${ext}`);\n\n/** Danh sách extension/MIME type của ảnh. */\nexport const ImageExtList = ['gif', 'jpg', 'jpeg', 'png', 'image/gif', 'image/jpeg', 'image/jpeg', 'image/png', 'webp'];\n\n/**\n * Kiểm tra extension có thuộc danh sách ảnh không.\n * @param ext Extension hoặc MIME type cần kiểm tra\n * @param listExt Danh sách tùy chỉnh (mặc định là ImageExtList)\n */\nexport const isIncludeImageExtList = (ext: string, listExt: Array<string> = ImageExtList) => listExt.includes(ext);\n\n/** Danh sách extension/MIME type của video. */\nexport const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv', 'video/mp4', 'video/quicktime', 'video/mpeg', 'video/x-msvideo', 'video/x-ms-wmv'];\n\n/**\n * Kiểm tra extension có thuộc danh sách video không.\n * @param ext Extension hoặc MIME type cần kiểm tra\n */\nexport const isIncludeVideoExtList = (ext: string, listExt: Array<string> = VideoExtList) => listExt.includes(ext);\n\n/** Danh sách extension/MIME type của audio. */\nexport const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma', 'audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/aac', 'audio/mp4', 'audio/flac', 'audio/x-ms-wma'];\n\n/**\n * Kiểm tra extension có thuộc danh sách audio không.\n * @param ext Extension hoặc MIME type cần kiểm tra\n */\nexport const isIncludeAudioExtList = (ext: string, listExt: Array<string> = AudioExtList) => listExt.includes(ext);\n\n/**\n * Lấy phần mở rộng (extension) của một file.\n * Hỗ trợ cả đối tượng File gốc của Browser và IFile (interface nội bộ).\n * @param file Đối tượng File hoặc IFile\n * @returns Extension dạng chữ thường (vd: \"jpg\", \"pdf\") hoặc undefined\n */\nexport const getFileExtension = (file: IFile | File) => {\n if (file instanceof File && file.type) {\n return (file.type.split('/').pop() || '').toLowerCase();\n }\n file = file as IFile;\n if (file.mimetype || file.file?.type) {\n return file.mimetype || file.file?.type;\n }\n\n let fileName = file.name as string;\n const url = get(file, 'url') || get(file, 'origin_url');\n if (!fileName && !url) {\n return;\n }\n if (!fileName && url) {\n fileName = url.split('/').pop() || '';\n set(file, 'name', fileName);\n }\n const dots = fileName.split('.');\n\n if (!dots) {\n return;\n }\n\n return (dots.pop() || '').toLowerCase();\n};\n\n/**\n * Định dạng kích thước file dạng chuỗi dễ đọc (KB hoặc MB).\n * @param size Kích thước file tính bằng byte\n * @param toFixed Số chữ số thập phân (mặc định: 2)\n * @returns Chuỗi định dạng (vd: \" 1.50 MB\", \" 512.00 KB\")\n */\nexport const getLabelBySizeFile = (size: number, toFixed = 2) => {\n if (size < 1024 * 1024) {\n return ` ${(size / 1024).toFixed(toFixed)} KB`;\n }\n\n return ` ${(size / (1024 * 1024)).toFixed(toFixed)} MB`;\n};\n\n/**\n * Chuyển đổi đối tượng Blob thành File.\n * Tự động xác định phần mở rộng từ MIME type của Blob.\n * @param blob Đối tượng Blob cần chuyển\n * @param fileName Tên file mong muốn (mặc định: UUID ngẫu nhiên)\n * @returns Đối tượng File tương ứng\n */\nexport const convertBlobToFile = (blob: Blob, fileName?: string): File => {\n const type = blob.type.split('/')[1];\n const name = fileName ? `${fileName.split('.')[0]}.${type}` : `${uuid()}.${type}`;\n\n return new File([blob], name, { type: blob.type, lastModified: Date.now() });\n};\n\n/**\n * Tải file từ URL và chuyển về đối tượng File.\n * Sử dụng XHR + FileReader để đọc nội dung, sau đó chuyển Base64 → Blob → File.\n * @param url URL của file cần tải\n * @param fileName Tên file mong muốn (mặc định: timestamp)\n * @returns Promise trả về File hoặc undefined nếu thất bại\n */\nexport const convertUrlToFile = (url: string, fileName?: string) => {\n return new Promise<File | undefined>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = () => {\n const file = convertBase64ToBlob(reader.result as string);\n resolve(convertBlobToFile(file, fileName || Date.now().toLocaleString()));\n };\n reader.onerror = () => resolve(undefined);\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = (err) => {\n reject(err);\n };\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.send();\n });\n};\n","import { ITextFormatOptions } from '@libs-ui/interfaces-types';\nimport { CHARACTER_DATA_EMPTY } from './constants';\nimport { patternEmoji } from './pattern';\n\n/**\n * Highlight một từ khóa tìm kiếm bên trong chuỗi văn bản bằng cách bọc vào thẻ `<span>`.\n * Hỗ trợ tìm kiếm không phân biệt dấu (Unicode-insensitive) và không phân biệt hoa/thường.\n *\n * @param value Chuỗi văn bản gốc cần highlight\n * @param search Từ khóa cần tìm và highlight\n * @param ignoreHighlight Nếu `true`, bỏ qua highlight và trả về chuỗi gốc\n * @param classHightLight Class CSS áp dụng cho span highlight (mặc định: 'bg-[#19344a] text-white')\n * @returns Chuỗi HTML đã được inject thẻ `<span>` quanh từ khóa\n */\nexport const highlightByKeyword = (value: string | undefined, search: string | undefined, ignoreHighlight?: boolean, classHightLight?: string) => {\n if (!value) {\n return CHARACTER_DATA_EMPTY;\n }\n try {\n if (!search || ignoreHighlight) {\n return value;\n }\n const keysReplace: Array<string> = getValueReplace(search, value);\n\n if (!keysReplace || !keysReplace.length) {\n return value;\n }\n if (!classHightLight) {\n classHightLight = 'bg-[#19344a] text-white';\n }\n keysReplace.forEach((key) => {\n const regExp = new RegExp(key, 'gi');\n\n value = value?.replace(regExp, `<span class=\"${classHightLight}\">$&</span>`);\n });\n } catch (error) {\n console.log(error);\n } finally {\n // eslint-disable-next-line no-unsafe-finally\n return value;\n }\n};\n\nconst getValueReplace = (search: string, value: string): string[] => {\n const searchConvert = deleteUnicode(search).toLowerCase();\n const valueConvert = deleteUnicode(value).toLowerCase();\n const keys: Set<string> = new Set();\n let i = 0;\n\n while ((i = valueConvert.indexOf(searchConvert, i)) >= 0) {\n const endIndex = i + search.length;\n\n keys.add(value.substring(i, endIndex));\n i += +valueConvert.length;\n }\n\n return Array.from(keys);\n};\n\n/**\n * Chuẩn hóa chuỗi văn bản theo chuẩn Unicode NFC và áp dụng các tùy chọn format.\n * Thường dùng để so sánh chuỗi nhất quán, không phụ thuộc vào cách gõ có dấu.\n *\n * @param text Chuỗi cần chuẩn hóa\n * @param options Các tùy chọn transform (trim, removeEmoji, removeUnicode...)\n * @returns Chuỗi đã chuẩn hóa\n */\nexport const formatTextCompare = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n\n text = text.normalize('NFC');\n\n return formatByOptions(text, options);\n};\n\n/**\n * Định dạng họ tên đầy đủ: viết hoa chữ cái đầu mỗi từ, xóa khoảng trắng thừa và emoji.\n * @param value Chuỗi họ tên cần format\n * @returns Chuỗi đã được chuẩn hóa\n * @example fullNameFormat(' nguyễn văn a ') → 'Nguyễn Văn A'\n */\nexport const fullNameFormat = (value: string) => {\n if (!value) {\n return value;\n }\n return capitalize(value, { lowercaseOtherCharacter: true, trim: true, removeMultipleSpace: true, removeEmoji: true });\n};\n\n/**\n * Viết hoa chữ cái đầu tiên của mỗi từ trong chuỗi.\n * @param text Chuỗi cần capitalize\n * @param options Tùy chọn xử lý trước (lowercase, trim, removeEmoji...)\n * @returns Chuỗi đã được capitalize theo từng từ\n * @example capitalize('hello world') → 'Hello World'\n */\nexport const capitalize = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n text = formatByOptions(text, options);\n return text\n .split(' ')\n .map((word) => firstLetterToUpperCase(word))\n .join(' ');\n};\n\n/**\n * Viết hoa chữ cái đầu tiên của chuỗi.\n * @param text Chuỗi cần xử lý\n * @param options Tùy chọn format bổ sung\n * @returns Chuỗi với chữ cái đầu tiên được viết hoa\n * @example firstLetterToUpperCase('hello') → 'Hello'\n */\nexport const firstLetterToUpperCase = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n return uppercaseByPosition(text, 0, options);\n};\n\n/**\n * Viết hoa một ký tự tại vị trí bất kỳ trong chuỗi.\n * @param text Chuỗi cần xử lý\n * @param position Vị trí ký tự cần viết hoa (0-indexed)\n * @param options Tùy chọn format bổ sung\n * @returns Chuỗi với ký tự tại vị trí được viết hoa\n */\nexport const uppercaseByPosition = (text: string, position: number, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n text = formatByOptions(text, options);\n return `${text.substring(0, position)}${text.charAt(position).toUpperCase()}${text.substring(position + 1)}`;\n};\n\nconst formatByOptions = (text: string, options?: ITextFormatOptions) => {\n if (!text || !options) {\n return text;\n }\n if (options?.uppercaseOtherCharacter) {\n text = text.toUpperCase();\n }\n\n if (options?.lowercaseOtherCharacter) {\n text = text.toLowerCase();\n }\n\n if (options?.removeMultipleSpace) {\n text = text.replace(/\\u200B|\\u00A0/g, '');\n text = text.replace(/\\s+/g, ' ');\n }\n\n if (options?.removeEmoji) {\n text = removeEmoji(text);\n }\n\n if (options?.removeUnicode) {\n text = deleteUnicode(text);\n }\n\n if (options?.trim) {\n text = text.trim();\n }\n\n return text;\n};\n\n/**\n * Escape các ký tự đặc biệt HTML thành HTML entities để tránh XSS.\n * @param str Chuỗi cần escape\n * @returns Chuỗi an toàn (& → &, < → <, > → >, \" → ", ' → ')\n * @example escapeHtml('<script>') → '<script>'\n */\nexport const escapeHtml = (str: string): string => {\n if (!str || typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''');\n};\n\n/**\n * Giải mã chuỗi HTML entities về dạng ký tự gốc.\n * Sử dụng thẻ textarea để giải mã an toàn, hỗ trợ multi-level encoding.\n * @param str Chuỗi HTML encoded cần giải mã\n * @returns Chuỗi gốc sau khi decode\n * @example decodeEscapeHtml('<b>') → '<b>'\n */\nexport const decodeEscapeHtml = (str: string): string => {\n const htmlTag = document.createElement('textarea');\n\n htmlTag.innerHTML = str;\n while (str) {\n if (str === htmlTag.value) {\n str = htmlTag.value;\n htmlTag.remove();\n break;\n }\n str = htmlTag.value;\n htmlTag.innerHTML = str;\n }\n\n return str;\n};\n\n/**\n * Xóa dấu tiếng Việt khỏi chuỗi, chuyển tất cả ký tự có dấu về dạng Latin cơ bản.\n * Hỗ trợ cả chữ thường lẫn hoa.\n * @param str Chuỗi tiếng Việt cần xóa dấu\n * @returns Chuỗi đã xóa dấu (vd: 'Nguyễn Văn An' → 'Nguyen Van An')\n */\nexport const deleteUnicode = (str: string) => {\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ|ễ/g, 'e');\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\n str = str.replace(/đ/g, 'd');\n str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');\n str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');\n str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I');\n str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O');\n str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');\n str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');\n str = str.replace(/Đ/g, 'D');\n\n str = str.replace(/\\u0300|\\u0301|\\u0303|\\u0309|\\u0323/g, ''); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng\n str = str.replace(/\\u02C6|\\u0306|\\u031B/g, ''); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư\n\n return str.normalize('NFC');\n};\n\n/**\n * Xóa tất cả emoji khỏi chuỗi văn bản.\n * Sử dụng pattern regex từ `patternEmoji()` để nhận diện toàn bộ emoji Unicode.\n * @param text Chuỗi cần xóa emoji\n * @returns Chuỗi đã được xóa emoji\n * @example removeEmoji('Hello 😀 World 🎉') → 'Hello World '\n */\nexport const removeEmoji = (text: string) => {\n if (!text || !text.trim()) {\n return text;\n }\n\n return text.replace(patternEmoji(), '');\n};\n","import { isNil } from './helpers';\nconst DEFAULT_MIN_TICK_COUNT = 5;\nconst DEFAULT_MAX_TICK_COUNT = 10;\nconst MIN_DISTANCE_TO_ZERO = 3;\nconst NEGATIVE_THRESHOLD = -5;\nconst FALLBACK_NEGATIVE_VALUE = -4;\nconst MAX_POW_NUMBER = 14;\nconst MAX_TEMPLATE_NUMBER = 10;\n\n// ✅ Thêm interfaces để tăng cường type safety\ninterface AxisScaleOptions {\n minTickCount?: number; // Số lượng tick tối thiểu\n maxTickCount?: number; // Số lượng tick tối đa\n stepCandidates?: number[]; // Danh sách các step candidates tùy chỉnh\n acceptNegative?: boolean; // Có chấp nhận giá trị âm không\n minNegative?: number; // Giá trị âm tối thiểu\n acceptStepIsTypeFloat?: boolean; // Có chấp nhận step là số thập phân không\n}\n\ninterface AxisScaleResult {\n stepSize: number; // Kích thước bước\n max: number; // Giá trị tối đa của trục\n min: number; // Giá trị tối thiểu của trục\n tickAmount: number; // Số lượng tick\n}\n\n/**\n * Tính toán smart axis scale cho biểu đồ\n *\n * @param maxData - Giá trị tối đa của dữ liệu\n * @param options - Các tùy chọn cấu hình axis scale\n * @returns Cấu hình axis scale bao gồm stepSize, max, min, tickAmount\n *\n * @throws {Error} INVALID_NEGATIVE_DATA - khi maxData < 0 mà acceptNegative = false\n * @throws {Error} MISSING_MIN_NEGATIVE - khi acceptNegative = true nhưng thiếu minNegative\n * @throws {Error} INVALID_RANGE - khi maxData < minNegative\n * @throws {Error} INVALID_MIN_NEGATIVE - khi minNegative >= 0\n *\n * @example\n * ```typescript\n * const result = getSmartAxisScale(100, { minTickCount: 5, maxTickCount: 10 });\n * // returns { stepSize: 20, max: 120, min: 0, tickAmount: 6 }\n * ```\n */\nexport const getSmartAxisScale = (originalMaxData: number, options?: AxisScaleOptions): AxisScaleResult => {\n let maxData = originalMaxData;\n\n validateInputs(maxData, options);\n const minTickCount = options?.minTickCount || DEFAULT_MIN_TICK_COUNT;\n const maxTickCount = options?.maxTickCount || DEFAULT_MAX_TICK_COUNT;\n\n let scaleDirection = 1;\n let rangeDistance = maxData;\n\n if (options?.acceptNegative && !isNil(options.minNegative)) {\n if (maxData === 0) {\n maxData = -1;\n }\n if (maxData <= 0) {\n rangeDistance = options.minNegative;\n }\n if (rangeDistance > NEGATIVE_THRESHOLD) {\n rangeDistance = FALLBACK_NEGATIVE_VALUE;\n }\n if (maxData > 0) {\n rangeDistance = maxData + Math.abs(options.minNegative);\n scaleDirection = -1;\n }\n }\n if (Math.abs(rangeDistance) < MIN_DISTANCE_TO_ZERO) {\n rangeDistance = MIN_DISTANCE_TO_ZERO;\n }\n\n const stepCandidates = getStepCandidates(maxData, minTickCount, options?.minNegative || 0, options?.acceptStepIsTypeFloat, options?.stepCandidates, options?.acceptNegative);\n for (const step of stepCandidates) {\n let tickCount = Math.abs(Math.ceil(rangeDistance / step)) + (scaleDirection === -1 ? 2 : 1);\n let maxValue = maxData <= 0 ? 0 : step * tickCount * scaleDirection;\n let minValue = 0;\n\n if (tickCount >= minTickCount && tickCount <= maxTickCount) {\n if (maxData < maxValue) {\n if (options?.acceptNegative) {\n let tick = 1;\n while (!isNil(options.minNegative) && tick <= tickCount && minValue >= options.minNegative) {\n minValue = tick * step;\n tick++;\n }\n }\n const maxValuePositive = maxValue - Math.abs(minValue);\n tickCount = maxValuePositive - originalMaxData > Math.abs(step) && tickCount - 1 >= minTickCount ? tickCount - 1 : tickCount;\n\n maxValue = step * tickCount * scaleDirection - minValue * scaleDirection;\n return {\n stepSize: Math.abs(step),\n max: maxValue,\n min: minValue,\n tickAmount: tickCount,\n };\n }\n }\n }\n\n let step = Math.ceil(rangeDistance / minTickCount) || 1;\n let maxValue = step * minTickCount;\n if (rangeDistance === maxValue) {\n step = step + Math.ceil(step / 10);\n maxValue = step * minTickCount;\n }\n return {\n stepSize: Math.abs(step),\n max: maxValue,\n min: 0,\n tickAmount: minTickCount,\n };\n};\n\n// Cache cho các giá trị lũy thừa 10 để tối ưu hiệu suất\nconst POWER_CACHE = new Map<number, number>();\n\n/**\n * Tạo danh sách các step candidates cho việc tính toán scale\n * @param maxData - Giá trị dữ liệu tối đa\n * @param minStep - Số bước tối thiểu\n * @param minNegative - Giá trị âm tối thiểu\n * @param acceptStepIsTypeFloat - Có chấp nhận step thập phân không\n * @param stepCandidatesByOptions - Step candidates do người dùng cung cấp\n * @param includeNegativeSteps - Có bao gồm các step âm không\n * @returns Danh sách các step candidates\n */\nconst getStepCandidates = (maxData: number, minStep: number, minNegative: number, acceptStepIsTypeFloat = false, stepCandidatesByOptions?: number[], includeNegativeSteps = false): number[] => {\n // Nếu có step candidates tùy chỉnh, sử dụng chúng\n if (stepCandidatesByOptions && stepCandidatesByOptions.length > 0) {\n return stepCandidatesByOptions;\n }\n\n const stepCandidates = new Array<number>();\n const maxValueStep = Math.abs(Math.max(maxData, Math.abs(minNegative || 0))) / minStep;\n\n // Tạo step candidates dựa trên lũy thừa của 10\n for (let powNumber = 0; powNumber <= MAX_POW_NUMBER; powNumber++) {\n // Sử dụng cache để tối ưu hiệu suất\n if (!POWER_CACHE.has(powNumber)) {\n POWER_CACHE.set(powNumber, Math.pow(10, powNumber));\n }\n const powValue = POWER_CACHE.get(powNumber) as number;\n\n for (let templateNumber = 1; templateNumber < MAX_TEMPLATE_NUMBER; templateNumber++) {\n // Thêm step thập phân nếu được chấp nhận\n if (acceptStepIsTypeFloat) {\n const step = powValue * (((templateNumber - 1) * 2 + 1) / 2);\n stepCandidates.push(step);\n }\n\n const step = powValue * templateNumber;\n stepCandidates.push(step);\n\n // Dừng khi step đã đủ lớn\n if (step >= maxValueStep) {\n checkAndSetNegativeSteps(stepCandidates, includeNegativeSteps, minNegative);\n return stepCandidates;\n }\n }\n }\n\n checkAndSetNegativeSteps(stepCandidates, includeNegativeSteps, minNegative);\n return stepCandidates;\n};\n\n/**\n * Kiểm tra và thêm các step âm vào danh sách candidates nếu cần\n * @param stepCandidates - Danh sách step candidates hiện tại\n * @param acceptNegative - Có chấp nhận giá trị âm không\n * @param minNegative - Giá trị âm tối thiểu\n */\nconst checkAndSetNegativeSteps = (stepCandidates: number[], acceptNegative: boolean, minNegative: number): void => {\n if (acceptNegative && minNegative < 0) {\n // Tạo các step âm và thêm vào đầu danh sách\n const negativeSteps = [...stepCandidates].map((step) => -step);\n stepCandidates.unshift(...negativeSteps);\n }\n};\n\n/**\n * Kiểm tra tính hợp lệ của các tham số đầu vào\n * @param maxData - Giá trị dữ liệu tối đa\n * @param options - Các tùy chọn cấu hình\n * @throws {Error} Khi các tham số không hợp lệ\n */\nconst validateInputs = (maxData: number, options?: AxisScaleOptions): void => {\n // Kiểm tra maxData âm khi không chấp nhận giá trị âm\n if (maxData < 0 && !options?.acceptNegative) {\n throw new Error('maxData is less than 0 and acceptNegative is false');\n }\n\n if (options?.acceptNegative) {\n // Kiểm tra minNegative có được cung cấp không\n if (isNil(options.minNegative)) {\n throw new Error('minNegative is required when acceptNegative is true');\n }\n\n // Kiểm tra maxData phải >= minNegative\n if (maxData < options.minNegative) {\n throw new Error('maxData is less than minNegative');\n }\n\n // Kiểm tra minNegative phải là số âm\n if (options.minNegative >= 0) {\n throw new Error('minNegative must be negative');\n }\n }\n};\n","export const protectString = (input: string): string => {\n const xorKey = 77;\n const encoded = input\n .split('')\n .map((char) => String.fromCharCode(char.charCodeAt(0) ^ xorKey))\n .reverse()\n .join('');\n return btoa(encoded);\n};\n\nexport const revealString = (encoded: string): string => {\n const xorKey = 77;\n const base = atob(encoded);\n const decoded = base\n .split('')\n .reverse()\n .map((c) => String.fromCharCode(c.charCodeAt(0) ^ xorKey))\n .join('');\n return decoded;\n};\n\nexport const createUniqueRandomIntGenerator = (min: number, max: number) => {\n if (max - min + 1 < min + 10) {\n throw new Error(`Range too small: need at least min + 10 unique values`);\n }\n\n const history: number[] = [];\n\n return (): number => {\n let num: number;\n let loop = 0;\n\n do {\n num = Math.floor(Math.random() * (max - min + 1)) + min;\n loop++;\n\n if (loop > 1000) {\n break;\n }\n } while (history.includes(num));\n\n history.push(num);\n\n if (history.length > 10) {\n history.shift();\n }\n\n return num;\n };\n};\n","/**\n * Thêm tất cả phần tử trong mảng vào một Set\n * @param setStore Đối tượng Set mục tiêu\n * @param data Mảng các phần tử cần thêm\n * @returns Set sau khi đã thêm dữ liệu\n */\nexport const addArrayToSet = <T>(setStore: Set<T>, data: T[]): Set<T> => {\n for (const value of data) {\n setStore.add(value);\n }\n return setStore;\n};\n\n/**\n * Chuyển đổi Set sang Array, có hỗ trợ mapping function\n * @param data Đối tượng Set cần chuyển đổi\n * @param functionMap Hàm mapping tùy chọn để biến đổi từng phần tử\n * @returns Mảng kết quả\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const convertSetToArray = <T = any, U = any>(data: Set<T>, functionMap?: (value: T) => U): Array<U> => {\n if (functionMap) {\n return Array.from(data, functionMap);\n }\n\n return [...data] as unknown as Array<U>;\n};\n","/**\n * Tính toán dung lượng (ước tính) của một đối tượng trong bộ nhớ.\n * Hàm sử dụng JSON.stringify và Blob để tính toán kích thước thực tế theo byte.\n *\n * @param obj Đối tượng cần tính dung lượng (Object, Array, Primitive...)\n * @returns Chuỗi mô tả dung lượng đã được format (ví dụ: \"100 bytes\", \"2.50 KB\", \"1.20 MB\"). Trả về \"N/A\" nếu không thể serialize.\n */\nexport const getObjectSize = (obj: unknown): string => {\n try {\n // Chuyển object sang chuỗi JSON (chính xác cho mọi loại dữ liệu tuần tự hóa được)\n const json = JSON.stringify(obj);\n\n // Tính kích thước byte dựa trên UTF-8 encoding\n const bytes = new Blob([json]).size;\n\n if (bytes < 1024) return `${bytes} bytes`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n } catch {\n // Nếu JSON.stringify lỗi (do circular reference)\n return 'N/A';\n }\n};\n","/**\n * Chuẩn hóa một URL bằng cách loại bỏ các dấu gạch chéo kép (//) trong pathname.\n *\n * @param rawUrl - URL cần chuẩn hóa.\n * @returns URL đã được chuẩn hóa dưới dạng chuỗi.\n *\n * @example\n * normalizeUrl('https://example.com//path//to//file') // => 'https://example.com/path/to/file'\n */\nexport const normalizeUrl = (rawUrl: string): string => {\n const url = new URL(rawUrl);\n url.pathname = url.pathname.replace(/\\/{2,}/g, '/');\n return url.toString();\n};\n","const ignorePatterns = [\n // RxJS / async internals\n /^at\\s+Object\\.(next|error|complete|subscribe|unsubscribe)\\b/,\n /^at\\s+Subscriber\\./,\n /^at\\s+SafeSubscriber\\./,\n\n // TS helpers\n /^at\\s+__\\w+/,\n\n // Zone.js / Angular\n /ZoneAwarePromise/,\n /^at\\s+new\\s+ZoneAwarePromise/,\n /^at\\s+Zone/,\n /zone\\.js/,\n /core\\.mjs/,\n /platform-browser/,\n\n // Browser / DOM\n /^at\\s+HTML/,\n /^at\\s+Promise/,\n /<anonymous>/,\n\n // Bundler\n /webpack/,\n /vite/,\n /node_modules/,\n] as const;\n\n/**\n * Trả về danh sách tên các hàm trong stack trace hiện tại.\n * Đã lọc bỏ các hàm nội bộ của Angular, RxJS, Zone.js và các thư viện hệ thống.\n * Hữu ích cho việc logging hoặc debugging để biết source gọi đến function hiện tại.\n *\n * @returns {string[]} Mảng chứa tên các hàm theo thứ tự từ gốc đến ngọn (ngược callback stack).\n */\nexport const traceStack = (): string[] => {\n const stack = new Error().stack;\n if (!stack) return [];\n\n return (\n stack\n .split('\\n')\n .slice(2) // bỏ Error + current function\n .map((line) => line.trim())\n .filter((line) => !ignorePatterns.some((pattern) => pattern.test(line)))\n .map((line) => {\n // Chrome / Edge\n // at functionName (file:line:col)\n let match = line.match(/at\\s+(.*?)\\s+\\(/);\n if (match?.[1]) return match[1];\n\n // Safari\n // functionName@file:line:col\n match = line.match(/^(.*?)@/);\n if (match?.[1]) return match[1];\n\n return 'anonymous';\n })\n // loại duplicate & anonymous rác\n .filter((fn, idx, arr) => fn !== 'anonymous' && arr.indexOf(fn) === idx)\n .reverse()\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["key","keyStore"],"mappings":"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"}
|