{"version":3,"file":"sdcorejs-angular-utilities-extensions.mjs","sources":["../../../projects/sdcorejs-angular/utilities/extensions/src/string.extension.ts","../../../projects/sdcorejs-angular/utilities/extensions/src/utility.extension.ts","../../../projects/sdcorejs-angular/utilities/extensions/src/color.extension.ts","../../../projects/sdcorejs-angular/utilities/extensions/src/object.extension.ts","../../../projects/sdcorejs-angular/utilities/extensions/sdcorejs-angular-utilities-extensions.ts"],"sourcesContent":["import { StringUtilities as _Utils, ValidationUtilities } from '@sdcorejs/utils/fns';\n\nexport { ValidationUtilities };\n\n// Deprecated wrappers — moved to ValidationUtilities\nconst isValidEmail = (value: any) => ValidationUtilities.isEmail(value);\nconst isValidPhone = (value: any) => ValidationUtilities.isPhone(value);\nconst isValidCode = (value: any) => ValidationUtilities.isCode(value);\n\nexport const StringUtilities = {\n  ..._Utils,\n  // Deprecated aliases for renamed regex constants (renamed in @sdcorejs/utils v1.0.2)\n  /** @deprecated Use REGEX_VN_PHONE instead */\n  REGEX_PHONE_VN: _Utils.REGEX_VN_PHONE,\n  /** @deprecated Use REGEX_VN_ID instead */\n  REGEX_IDVN: _Utils.REGEX_VN_ID,\n  /** @deprecated Use REGEX_VN_ID_OR_PASSPORT instead */\n  REGEX_IDVN_OR_PASSPORT: _Utils.REGEX_VN_ID_OR_PASSPORT,\n  // Deprecated validators — moved to ValidationUtilities\n  /** @deprecated Use {@link ValidationUtilities.isEmail} instead */\n  isValidEmail,\n  /** @deprecated Use {@link ValidationUtilities.isPhone} instead */\n  isValidPhone,\n  /** @deprecated Use {@link ValidationUtilities.isCode} instead */\n  isValidCode,\n};\n","export { Utilities, BrowserUtilities } from '@sdcorejs/utils/fns';\n\n// Hardcoded i18n cho upload utility — pure function nên không inject() được I18nService.\n// Đọc lang trực tiếp từ localStorage (cùng key với I18nService: 'sd-core.language').\n// Khi I18nService chuyển sang reload-on-change model, lang ở đây luôn đồng bộ với UI.\nconst SD_UPLOAD_MESSAGES = {\n  vi: {\n    'invalid-format': '[{name}] File tải lên không đúng định dạng. Vui lòng chọn lại',\n    'invalid-size': '[{name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác',\n  },\n  en: {\n    'invalid-format': '[{name}] Invalid file format. Please select again',\n    'invalid-size': '[{name}] Invalid file size. Please choose a different file',\n  },\n  ja: {\n    'invalid-format': '[{name}] ファイル形式が正しくありません。もう一度選択してください',\n    'invalid-size': '[{name}] ファイルサイズが正しくありません。別のファイルを選択してください',\n  },\n  ko: {\n    'invalid-format': '[{name}] 파일 형식이 올바르지 않습니다. 다시 선택해 주세요',\n    'invalid-size': '[{name}] 파일 크기가 올바르지 않습니다. 다른 파일을 선택해 주세요',\n  },\n  zh: {\n    'invalid-format': '[{name}] 文件格式不正确，请重新选择',\n    'invalid-size': '[{name}] 文件大小不符合要求，请选择其他文件',\n  },\n} as const;\n\ntype SdUploadMsgKey = keyof typeof SD_UPLOAD_MESSAGES.vi;\ntype SdUploadLang = keyof typeof SD_UPLOAD_MESSAGES;\n\nconst getSdUploadLang = (): SdUploadLang => {\n  try {\n    const stored = localStorage.getItem('sd-core.language');\n    if (stored && stored in SD_UPLOAD_MESSAGES) return stored as SdUploadLang;\n  } catch {\n    /* ignore */\n  }\n  return 'vi';\n};\n\nconst upload = (option?: { extensions?: string[]; maxSizeInMb?: number; validator?: (fileName: string) => string; multiple?: boolean }) => {\n  const uploadId = 'U1e09c1c0-b647-437e-995e-d7a1a1b60550';\n  const promise = new Promise<File | File[] | null>((resolve, reject) => {\n    const body = document.getElementsByTagName('body')?.[0];\n    if (!body) {\n      resolve(null);\n      return;\n    }\n    const existedElement = document.getElementById(uploadId);\n    if (existedElement) {\n      existedElement.remove();\n    }\n    const element = document.createElement('input');\n    element.setAttribute('id', uploadId);\n    element.setAttribute('type', 'file');\n    if (option?.multiple) {\n      element.setAttribute('multiple', '');\n    }\n    element.style.display = 'none';\n    body.appendChild(element);\n\n    element.addEventListener('change', (evt: any) => {\n      try {\n        const target = evt.target as DataTransfer;\n\n        // Hardcode i18n cho upload utility — pure function nên không inject() được I18nService.\n        // Đọc lang trực tiếp từ localStorage (cùng key với I18nService: 'sd-core.language').\n        // Throw plain Error(translatedText) để consumer không cần xử lý đặc biệt.\n        const throwUploadError = (msgKey: SdUploadMsgKey, name: string): never => {\n          const lang = getSdUploadLang();\n          const template = SD_UPLOAD_MESSAGES[lang][msgKey] ?? SD_UPLOAD_MESSAGES.vi[msgKey];\n          throw new Error(template.replace('{name}', name));\n        };\n\n        if (option?.multiple) {\n          const files: File[] = [];\n          for (const file of target.files) {\n            if (file) {\n              const lastDot = file.name.lastIndexOf('.');\n              if (lastDot === -1) {\n                throwUploadError('invalid-format', file.name);\n              }\n              const extension = file.name.substring(lastDot + 1);\n              if (option) {\n                if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\n                  throwUploadError('invalid-format', file.name);\n                }\n                if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\n                  throwUploadError('invalid-size', file.name);\n                }\n                if (option.validator && option.validator(file.name)) {\n                  // Custom validator returns its own message — pass through as-is (caller defines format).\n                  const message = option.validator(file.name);\n                  throw new Error(message);\n                }\n              }\n              files.push(file);\n            }\n            resolve(files);\n          }\n        } else {\n          const file = target.files.item(0);\n          if (file) {\n            const lastDot = file.name.lastIndexOf('.');\n            if (lastDot === -1) {\n              throwUploadError('invalid-format', file.name);\n            }\n            const extension = file.name.substring(lastDot + 1);\n            if (option) {\n              if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\n                throwUploadError('invalid-format', file.name);\n              }\n              if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\n                throwUploadError('invalid-size', file.name);\n              }\n              if (option.validator && option.validator(file.name)) {\n                const message = option.validator(file.name);\n                throw new Error(message);\n              }\n            }\n            resolve(file);\n          }\n        }\n      } catch (error) {\n        reject(error);\n      }\n    });\n    element.click();\n  });\n  return promise;\n};\n\nconst generateFileName = (fileName?: string | null) => {\n  if (!fileName) {\n    return `file_${randomId()}`;\n  }\n  return fileName;\n};\n\nconst download = (fileOrPath: File | string | undefined | null, fileName?: string | null) => {\n  if (!fileOrPath) {\n    console.warn('No file or path provided for download');\n    return;\n  }\n  fileName = generateFileName(fileName);\n  if (fileOrPath instanceof File) {\n    // Hoặc sử dụng cách thông thường:\n    const url = URL.createObjectURL(fileOrPath);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = fileOrPath.name || fileName;\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url); // Giải phóng tài nguyên\n    return;\n  }\n  const a = document.createElement('a');\n  a.href = fileOrPath;\n  if (fileOrPath.startsWith('http')) {\n    a.target = '_blank'; // mở tab mới\n  } else {\n    a.download = fileName;\n  }\n  a.style.visibility = 'hidden';\n  document.body.appendChild(a);\n  a.click();\n  a.remove();\n  return;\n};\n\nconst downloadBlob = (blob: Blob, fileName?: string) => {\n  try {\n    const url = window.URL.createObjectURL(blob);\n    const link = document.createElement('a');\n    if (link.download !== undefined) {\n      // feature detection\n      link.download = generateFileName(fileName);\n      link.href = url;\n      link.style.visibility = 'hidden';\n      document.body.appendChild(link);\n      link.click();\n      window.URL.revokeObjectURL(url);\n      link.remove();\n    }\n  } catch (e) {\n    console.error('BlobToSaveAs error', e);\n  }\n};\n\nconst changeAliasLowerCase = (alias: string) => {\n  let str = alias?.toString() ?? '';\n  str = str.toString().toLowerCase();\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  // eslint-disable-next-line no-useless-escape\n  str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, ' ');\n  str = str.replace(/ + /g, ' ');\n  str = str.trim();\n  return str;\n};\n\nconst copyToClipboard = (text: string) => {\n  navigator.clipboard.writeText(text);\n};\n\nconst allWithPaging = async <T = unknown>(\n  func: (pageSize: number, pageNumber: number) => Promise<{ items: T[]; total: number }>,\n  defaultPageSize?: number\n): Promise<T[]> => {\n  const pageSize = defaultPageSize || 1000;\n  let pageNumber = 0;\n  let count = 0;\n  let items: T[] = [];\n  while (true) {\n    const res = await func(pageSize, pageNumber);\n    if (Array(res?.items) && res?.total > 0) {\n      items = [...items, ...res.items];\n      count += res.items.length;\n      pageNumber++;\n      if (count >= res.total || !res.items?.length) {\n        return items;\n      }\n    } else {\n      return [];\n    }\n  }\n};\n\nconst isIncognito = async (): Promise<boolean> => {\n  // Chrome-based\n  if ('storage' in navigator && 'estimate' in navigator.storage) {\n    try {\n      const { quota } = await navigator.storage.estimate();\n      if (quota && quota < 120 * 1024 * 1024) return true;\n    } catch (err) {\n      console.error(err);\n    }\n  }\n\n  // Safari fallback\n  try {\n    localStorage.setItem('__incognito_test', '1');\n    localStorage.removeItem('__incognito_test');\n    return false;\n  } catch {\n    return true;\n  }\n};\n\nconst isMobile = (): boolean => {\n  return /Mobi|Android/i.test(navigator.userAgent);\n};\n\nconst randomId = (prefix?: string | null): string => {\n  const id = `${new Date().getTime().toString(36)}${Math.random().toString(36).substring(2, 7)}`;\n  if (prefix) {\n    return `${prefix}_${id}`;\n  }\n  return id;\n};\n\nconst hash = (obj: any): string => {\n  const json = stableStringify(obj);\n  let hash = 0;\n\n  for (let i = 0; i < json.length; i++) {\n    hash = (hash << 5) - hash + json.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return `h${Math.abs(hash)}`;\n};\n\n/**\n * Convert object to stable JSON string (keys sorted)\n */\nconst stableStringify = (obj: any): string => {\n  if (obj === null || typeof obj !== 'object') {\n    return JSON.stringify(obj);\n  }\n\n  if (obj instanceof File) {\n    // Chỉ serialize các thuộc tính quan trọng của File\n    return JSON.stringify({\n      __type: 'File',\n      name: obj.name,\n      size: obj.size,\n      type: obj.type,\n      lastModified: obj.lastModified,\n    });\n  }\n\n  if (Array.isArray(obj)) {\n    return `[${obj.map(stableStringify).join(',')}]`;\n  }\n\n  const keys = Object.keys(obj).sort();\n  const keyValuePairs = keys.map(key => `\"${key}\":${stableStringify(obj[key])}`);\n\n  return `{${keyValuePairs.join(',')}}`;\n};\n\n// Hàm `parseQueryParams` dùng để phân tích chuỗi query string (phần sau dấu `?` trên URL)\n//   và chuyển đổi nó thành một đối tượng JavaScript với các cặp key-value.\nconst parseQueryParams = (queryString?: string): Record<string, string> => {\n  const params = new URLSearchParams(queryString || '');\n  const result: Record<string, string> = {};\n  params.forEach((value, key) => {\n    result[key] = value;\n  });\n  return result;\n};\n\n/**\n * Lấy địa chỉ IP public của client bằng cách gọi API bên thứ ba.\n */\nconst getClientPublicIp = async (): Promise<string | null> => {\n  try {\n    // Gọi đến API của ipify để lấy IP dưới dạng JSON\n    const response = await fetch('https://api.ipify.org?format=json');\n    if (!response.ok) {\n      throw new Error(`HTTP error! status: ${response.status}`);\n    }\n    const data = await response.json();\n    // Trả về địa chỉ IP\n    return data.ip;\n  } catch (error) {\n    console.error('Failed to fetch client IP:', error);\n    return null; // Trả về null nếu có lỗi\n  }\n};\n\n// Helper function với fallback\nconst generateUuid = (): string => {\n  if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n    return crypto.randomUUID();\n  }\n  // Fallback cho browser cũ\n  return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n};\n\n/**\n * Truy xuất giá trị của object dựa trên đường dẫn nested (VD: 'user.address.city')\n */\nconst getNestedValue = (obj: any, path: string) => {\n  if (!obj || !path) return undefined;\n  // Tách chuỗi theo dấu chấm và duyệt qua từng cấp của object\n  return path.split('.').reduce((acc, part) => acc?.[part], obj);\n};\n\n/**\n * @deprecated Use {@link Utilities} and {@link BrowserUtilities} from `@sdcorejs/utils/fns` instead.\n * - upload/download/clipboard/isMobile → BrowserUtilities\n * - allWithPaging (→ fetchAllByPaging) / randomId / hash / parseQueryParams / generateUuid / getNestedValue → Utilities\n */\nconst SdUtilities = {\n  upload,\n  download,\n  downloadBlob,\n  changeAliasLowerCase,\n  copyToClipboard,\n  allWithPaging,\n  isIncognito,\n  isMobile,\n  randomId,\n  hash,\n  parseQueryParams,\n  getClientPublicIp,\n  generateUuid,\n  getNestedValue,\n};\nexport { SdUtilities };\n","export { ColorUtilities } from '@sdcorejs/utils/fns';\n\nimport { ColorUtilities } from '@sdcorejs/utils/fns';\n/** @deprecated Use {@link ColorUtilities.hslToHex} from `@sdcorejs/utils/fns` instead */\nexport const hslToHex = ColorUtilities.hslToHex;\n/** @deprecated Use {@link ColorUtilities.rgbToHex} from `@sdcorejs/utils/fns` instead */\nexport const rgbToHex = ColorUtilities.rgbToHex;\n","type PlainObject = Record<PropertyKey, unknown>;\n\nconst isPlainObject = (value: unknown): value is PlainObject => {\n  if (value === null || typeof value !== 'object') return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n};\n\nconst clone = <T>(value: T): T => {\n  if (Array.isArray(value)) {\n    return value.map(item => clone(item)) as T;\n  }\n  if (isPlainObject(value)) {\n    return Object.keys(value).reduce((result, key) => {\n      result[key] = clone(value[key]);\n      return result;\n    }, {} as PlainObject) as T;\n  }\n  return value;\n};\n\nconst merge = <T extends PlainObject, U extends PlainObject>(target: T, source: U): T & U => {\n  const result = clone(target) as PlainObject;\n  Object.keys(source).forEach(key => {\n    const sourceValue = source[key];\n    if (sourceValue === undefined) return;\n\n    const targetValue = result[key];\n    if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {\n      result[key] = merge(targetValue, sourceValue);\n    } else {\n      result[key] = clone(sourceValue);\n    }\n  });\n  return result as T & U;\n};\n\nconst deepMerge = <T extends PlainObject>(...sources: T[]): T =>\n  sources.reduce((result, source) => merge(result, source), {} as PlainObject) as T;\n\nexport const ObjectUtilities = {\n  isPlainObject,\n  clone,\n  merge,\n  deepMerge,\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_Utils"],"mappings":"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"}