@libs-ui/utils 0.2.306-7 → 0.2.306-9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
1
  import DeviceDetector from 'device-detector-js';
2
2
  import Quill from 'quill';
3
- import { fromEvent, tap, takeUntil, mergeMap, startWith, finalize, lastValueFrom, timer, Subject, filter, Observable } from 'rxjs';
3
+ import { fromEvent, tap, takeUntil, mergeMap, startWith, finalize, lastValueFrom, timer, Observable, Subject, filter } from 'rxjs';
4
4
  import CryptoES from 'crypto-es';
5
5
  import { HttpParams } from '@angular/common/http';
6
- import { isSignal, signal, TemplateRef, ElementRef, InjectionToken } from '@angular/core';
6
+ import { TemplateRef, ElementRef, isSignal, signal, InjectionToken } from '@angular/core';
7
7
  import dayjs from 'dayjs';
8
8
  import 'dayjs/locale/en';
9
9
  import 'dayjs/locale/vi';
@@ -629,6 +629,145 @@ const uuid = () => {
629
629
  return md5(shuffledString);
630
630
  };
631
631
 
632
+ /* eslint-disable @typescript-eslint/no-explicit-any */
633
+ /**
634
+ * Danh sách các constructor name nguy hiểm
635
+ */
636
+ const DANGEROUS_CONSTRUCTOR_NAMES = ['Window', 'Document', 'HTMLDocument', 'HTMLElement', 'Element', 'Node', 'Location', 'Navigator', 'Screen', 'History', 'Storage', 'Console', 'Performance'];
637
+ /**
638
+ * Kiểm tra xem đối tượng có phải là browser global object không
639
+ */
640
+ const isBrowserGlobalObject = (obj) => {
641
+ if (obj === null || typeof obj !== 'object') {
642
+ return false;
643
+ }
644
+ return obj instanceof Window || obj instanceof Document || obj === window || obj === document || obj === globalThis;
645
+ };
646
+ /**
647
+ * Kiểm tra xem đối tượng có phải là DOM object không
648
+ */
649
+ const isDOMObject = (obj) => {
650
+ if (obj === null || typeof obj !== 'object') {
651
+ return false;
652
+ }
653
+ return obj instanceof HTMLElement || obj instanceof Node || obj instanceof Element;
654
+ };
655
+ /**
656
+ * Kiểm tra xem đối tượng có phải là browser API object không
657
+ */
658
+ const isBrowserAPIObject = (obj) => {
659
+ if (obj === null || typeof obj !== 'object' || typeof window === 'undefined') {
660
+ return false;
661
+ }
662
+ 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;
663
+ };
664
+ /**
665
+ * Kiểm tra constructor name có nằm trong danh sách nguy hiểm không
666
+ */
667
+ const hasDangerousConstructorName = (obj) => {
668
+ if (obj === null || typeof obj !== 'object') {
669
+ return false;
670
+ }
671
+ const constructorName = obj.constructor?.name;
672
+ return constructorName && DANGEROUS_CONSTRUCTOR_NAMES.includes(constructorName);
673
+ };
674
+ /**
675
+ * Kiểm tra xem đối tượng có phải là DOM object hoặc browser object nguy hiểm không
676
+ * Những đối tượng này có thể gây ra circular reference và maximum call stack
677
+ */
678
+ const isDangerousObject = (obj) => {
679
+ if (obj === null || typeof obj !== 'object') {
680
+ return false;
681
+ }
682
+ return isBrowserGlobalObject(obj) || isDOMObject(obj) || isBrowserAPIObject(obj) || hasDangerousConstructorName(obj);
683
+ };
684
+ /**
685
+ * Kiểm tra đối tượng có phải là Angular/Framework object không
686
+ */
687
+ const isFrameworkObject = (obj) => {
688
+ if (obj === null || typeof obj !== 'object') {
689
+ return false;
690
+ }
691
+ return obj instanceof TemplateRef || obj instanceof ElementRef;
692
+ };
693
+ /**
694
+ * Kiểm tra đối tượng có phải là File/Blob object không
695
+ */
696
+ const isFileObject = (obj) => {
697
+ if (obj === null || typeof obj !== 'object') {
698
+ return false;
699
+ }
700
+ return obj instanceof File || obj instanceof Blob || Object.prototype.toString.call(obj) === '[object File]';
701
+ };
702
+ /**
703
+ * Kiểm tra đối tượng có phải là Built-in object không
704
+ */
705
+ const isBuiltInObject = (obj) => {
706
+ if (obj === null || typeof obj !== 'object') {
707
+ return false;
708
+ }
709
+ return obj instanceof Date || obj instanceof RegExp || obj instanceof HttpParams;
710
+ };
711
+ /**
712
+ * Kiểm tra đối tượng có phải là Async object không
713
+ */
714
+ const isAsyncObject = (obj) => {
715
+ if (obj === null || typeof obj !== 'object') {
716
+ return false;
717
+ }
718
+ return obj instanceof Promise || obj instanceof Observable;
719
+ };
720
+ /**
721
+ * Kiểm tra đối tượng có phải là Special object cần bỏ qua không
722
+ * Bao gồm: Framework objects, File objects, Built-in objects, Async objects
723
+ */
724
+ const isSpecialObject = (obj) => {
725
+ return isFrameworkObject(obj) || isFileObject(obj) || isBuiltInObject(obj) || isAsyncObject(obj);
726
+ };
727
+ /**
728
+ * Kiểm tra đối tượng có phải là dayjs object không
729
+ */
730
+ const isDayjsObject = (obj) => {
731
+ return dayjs.isDayjs(obj);
732
+ };
733
+ /**
734
+ * Kiểm tra đối tượng có phải là object cần bỏ qua trong quá trình convert không
735
+ */
736
+ const isSkippableObject = (obj) => {
737
+ return isDangerousObject(obj) || isSpecialObject(obj);
738
+ };
739
+ /**
740
+ * Kiểm tra đối tượng có phải là Map object không
741
+ */
742
+ const isMapObject = (obj) => {
743
+ return obj instanceof Map;
744
+ };
745
+ /**
746
+ * Kiểm tra đối tượng có phải là Set object không
747
+ */
748
+ const isSetObject = (obj) => {
749
+ return obj instanceof Set;
750
+ };
751
+ /**
752
+ * Kiểm tra đối tượng có phải là Array object không
753
+ */
754
+ const isArrayObject = (obj) => {
755
+ return Array.isArray(obj);
756
+ };
757
+ /**
758
+ * Kiểm tra đối tượng có phải là object cần trả về nguyên trạng không
759
+ * Bao gồm: dangerous objects, special objects, dayjs objects
760
+ */
761
+ const isReturnAsIsObject = (obj) => {
762
+ return isSkippableObject(obj) || isDayjsObject(obj);
763
+ };
764
+ /**
765
+ * Kiểm tra xem đối tượng có an toàn để clone/convert không
766
+ */
767
+ const isSafeToProcess = (obj) => {
768
+ return !isDangerousObject(obj);
769
+ };
770
+
632
771
  let key = '12~@#loqwsxacva(3rdhaq12';
633
772
  /**
634
773
  * @description Thiết lập key mã hóa
@@ -1568,11 +1707,11 @@ const convertObjectToSignal = (data, cloneDeepIfNotSignal = true, isSignalPrimit
1568
1707
  seen.set(data, convertObjectToSignal(data(), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen));
1569
1708
  return seen.get(data);
1570
1709
  }
1571
- if (Array.isArray(data)) {
1710
+ if (isArrayObject(data)) {
1572
1711
  seen.set(data, signal(data.map((item) => convertObjectToSignal(item, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen))));
1573
1712
  return seen.get(data);
1574
1713
  }
1575
- if (data instanceof Map) {
1714
+ if (isMapObject(data)) {
1576
1715
  const mapCopy = new Map();
1577
1716
  Array.from(data.keys()).forEach((key) => {
1578
1717
  mapCopy.set(key, convertObjectToSignal(data.get(key), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal));
@@ -1580,26 +1719,16 @@ const convertObjectToSignal = (data, cloneDeepIfNotSignal = true, isSignalPrimit
1580
1719
  seen.set(data, signal(mapCopy));
1581
1720
  return seen.get(data);
1582
1721
  }
1583
- if (data instanceof Promise || data instanceof Observable) {
1722
+ // Bỏ qua các đối tượng async
1723
+ if (isAsyncObject(data)) {
1584
1724
  return data;
1585
1725
  }
1586
1726
  data = signal(cloneDeepIfNotSignal ? { ...data } : data);
1587
1727
  seen.set(data, data);
1588
1728
  for (const key in data()) {
1589
1729
  const value = data()[key];
1590
- if (value instanceof TemplateRef ||
1591
- value instanceof File ||
1592
- value instanceof Blob ||
1593
- Object.prototype.toString.call(value) === '[object File]' ||
1594
- value instanceof ElementRef ||
1595
- value instanceof Element ||
1596
- value instanceof Date ||
1597
- value instanceof RegExp ||
1598
- value instanceof Set ||
1599
- value instanceof Map ||
1600
- value instanceof Promise ||
1601
- value instanceof Observable ||
1602
- value instanceof HttpParams) {
1730
+ // Bỏ qua các đối tượng nguy hiểm và đặc biệt
1731
+ if (isReturnAsIsObject(value)) {
1603
1732
  continue;
1604
1733
  }
1605
1734
  if (Object.prototype.hasOwnProperty.call(data(), key)) {
@@ -1613,7 +1742,7 @@ const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakMap()) =
1613
1742
  while (isSignal(data) && !seen.has(data)) {
1614
1743
  const dataConvert = data();
1615
1744
  if (typeof dataConvert === 'object') {
1616
- if (dataConvert === null) {
1745
+ if (dataConvert === null || isReturnAsIsObject(dataConvert)) {
1617
1746
  return dataConvert;
1618
1747
  }
1619
1748
  seen.set(dataConvert, dataConvert);
@@ -1624,20 +1753,20 @@ const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakMap()) =
1624
1753
  seen.set(data, dataConvert);
1625
1754
  data = dataConvert;
1626
1755
  }
1627
- if (data === null || typeof data === 'function' || typeof data !== 'object') {
1756
+ if (data === null || typeof data === 'function' || typeof data !== 'object' || isReturnAsIsObject(data)) {
1628
1757
  return data;
1629
1758
  }
1630
1759
  if (!ignoreCheckSeenHasDataAfterWhile && seen.has(data)) {
1631
1760
  return seen.get(data);
1632
1761
  }
1633
- if (Array.isArray(data)) {
1762
+ if (isArrayObject(data)) {
1634
1763
  if (!isSignal(data[0])) {
1635
1764
  return data;
1636
1765
  }
1637
1766
  seen.set(data, data.map((item) => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep, seen)));
1638
1767
  return seen.get(data);
1639
1768
  }
1640
- if (data instanceof Map) {
1769
+ if (isMapObject(data)) {
1641
1770
  const mapCopy = new Map();
1642
1771
  Array.from(data.keys()).forEach((key) => {
1643
1772
  mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep));
@@ -1645,10 +1774,16 @@ const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakMap()) =
1645
1774
  seen.set(data, mapCopy);
1646
1775
  return seen.get(data);
1647
1776
  }
1648
- if (data instanceof File || data instanceof Blob || Object.prototype.toString.call(data) === '[object File]') {
1649
- return data;
1777
+ if (isSetObject(data)) {
1778
+ const setCopy = new Set();
1779
+ Array.from(data.values()).forEach((value) => {
1780
+ setCopy.add(convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep));
1781
+ });
1782
+ seen.set(data, setCopy);
1783
+ return seen.get(data);
1650
1784
  }
1651
- if (data instanceof TemplateRef || data instanceof ElementRef || data instanceof Element || data instanceof Promise || data instanceof Observable || data instanceof HttpParams) {
1785
+ // Bỏ qua các đối tượng nguy hiểm đặc biệt
1786
+ if (isReturnAsIsObject(data)) {
1652
1787
  return data;
1653
1788
  }
1654
1789
  const result = isCloneDeep ? {} : data;
@@ -1656,6 +1791,11 @@ const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakMap()) =
1656
1791
  for (const key in data) {
1657
1792
  const value = data[key];
1658
1793
  if (Object.prototype.hasOwnProperty.call(data, key)) {
1794
+ // Bỏ qua các đối tượng nguy hiểm để tránh maximum call stack
1795
+ if (isReturnAsIsObject(value)) {
1796
+ result[key] = value;
1797
+ continue;
1798
+ }
1659
1799
  result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep);
1660
1800
  }
1661
1801
  }
@@ -1694,16 +1834,17 @@ const isNil = (value, options) => {
1694
1834
  * isEmpty({ a: 1 }); // false
1695
1835
  */
1696
1836
  const isEmpty = (value, options) => {
1697
- if (options?.ignoreUnWrapSignal) {
1837
+ if (!options?.ignoreUnWrapSignal) {
1698
1838
  value = convertSignalToObject(value);
1699
1839
  }
1700
1840
  if (options?.ignoreCheckFalsy) {
1701
1841
  return isEmptyTypeObject(value);
1702
1842
  }
1843
+ const valueIsFalsy = isFalsy(value, { ignoreUnWrapSignal: options?.ignoreUnWrapSignal, ignoreZero: true, ignoreCheckString: options?.ignoreCheckString });
1703
1844
  if (options?.ignoreCheckTypeObj) {
1704
- return isFalsy(value, { ignoreZero: true });
1845
+ return valueIsFalsy;
1705
1846
  }
1706
- return isFalsy(value, { ignoreZero: true }) || isEmptyTypeObject(value);
1847
+ return valueIsFalsy || isEmptyTypeObject(value);
1707
1848
  };
1708
1849
  /**
1709
1850
  * Kiểm tra xem một giá trị có phải là object rỗng hay không
@@ -1751,7 +1892,7 @@ const isFalsy = (value, options) => {
1751
1892
  if (!options?.ignoreUnWrapSignal) {
1752
1893
  value = convertSignalToObject(value);
1753
1894
  }
1754
- if (isNil(value)) {
1895
+ if (isNil(value, { ignoreUnWrapSignal: options?.ignoreUnWrapSignal })) {
1755
1896
  return true;
1756
1897
  }
1757
1898
  if (options?.ignoreZero) {
@@ -1887,7 +2028,7 @@ const get = (obj, path, defaultValue, keepLastValueIfSignal) => {
1887
2028
  const val = isSignal(obj[key]) && !keepLastValueIfSignal ? obj[key]() : obj[key];
1888
2029
  obj = val;
1889
2030
  }
1890
- return out(obj);
2031
+ return out(obj ?? defaultValue);
1891
2032
  };
1892
2033
  /**
1893
2034
  * Thiết lập giá trị cho một thuộc tính trong đối tượng theo đường dẫn chỉ định
@@ -1900,7 +2041,7 @@ const get = (obj, path, defaultValue, keepLastValueIfSignal) => {
1900
2041
  * const obj = { a: { b: 1 } };
1901
2042
  * set(obj, 'a.b', 2); // { a: { b: 2 } }
1902
2043
  */
1903
- const set = (obj, path, value) => {
2044
+ const set = (obj, path, value, options) => {
1904
2045
  if (!obj || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {
1905
2046
  throw new Error('The first argument must be an object');
1906
2047
  }
@@ -1920,7 +2061,9 @@ const set = (obj, path, value) => {
1920
2061
  if (!(key in currentObjectByKey) || (typeof currentObjectByKey[key] !== 'object' && !isSignal(currentObjectByKey[key]))) {
1921
2062
  const nextKey = pathArray[index + 1];
1922
2063
  key = key.replace(/\[(\d+)]/g, '$1');
1923
- currentObjectByKey[key] = /\[(\d+)]/g.test(nextKey) ? [] : {};
2064
+ if (isNil(currentObjectByKey[key])) {
2065
+ currentObjectByKey[key] = /\[(\d+)]/g.test(nextKey) ? (options?.valueDefaultPathArrayUndefined ?? []) : (options?.valueDefaultPathObjectUndefined ?? {});
2066
+ }
1924
2067
  }
1925
2068
  currentObjectByKey = key ? currentObjectByKey[key] : currentObjectByKey;
1926
2069
  preObjectByKey = currentObjectByKey;
@@ -1979,7 +2122,7 @@ const set = (obj, path, value) => {
1979
2122
  * // clone là một bản sao hoàn toàn độc lập của obj
1980
2123
  */
1981
2124
  const cloneDeep = (data, options = { ignoreSignal: false }, seen = new WeakMap()) => {
1982
- if (data === null || (typeof data !== 'object' && !isSignal(data))) {
2125
+ if (data === null || (typeof data !== 'object' && !isSignal(data)) || isDangerousObject(data)) {
1983
2126
  return data;
1984
2127
  }
1985
2128
  if (seen.has(data)) {
@@ -2017,10 +2160,7 @@ const cloneDeep = (data, options = { ignoreSignal: false }, seen = new WeakMap()
2017
2160
  seen.set(data, data.map((item) => cloneDeep(item, options, seen)));
2018
2161
  return seen.get(data);
2019
2162
  }
2020
- if (data instanceof File || data instanceof Blob || Object.prototype.toString.call(data) === '[object File]') {
2021
- return data;
2022
- }
2023
- if (data instanceof TemplateRef || data instanceof ElementRef || data instanceof Element || data instanceof Promise || data instanceof Observable) {
2163
+ if (isReturnAsIsObject(data)) {
2024
2164
  return data;
2025
2165
  }
2026
2166
  if (isSignal(data)) {
@@ -2038,11 +2178,19 @@ const cloneDeep = (data, options = { ignoreSignal: false }, seen = new WeakMap()
2038
2178
  result[key] = new UtilsHttpParamsRequest(undefined, value);
2039
2179
  continue;
2040
2180
  }
2181
+ if (value instanceof Date) {
2182
+ result[key] = new Date(value.getTime());
2183
+ continue;
2184
+ }
2041
2185
  if (dayjs.isDayjs(value)) {
2042
2186
  result[key] = getDayjs({ date: value.valueOf() });
2043
2187
  continue;
2044
2188
  }
2045
- if (value instanceof TemplateRef || value instanceof ElementRef || value instanceof Element || value instanceof Promise || value instanceof Observable) {
2189
+ if (value instanceof RegExp) {
2190
+ result[key] = new RegExp(value.source, value.flags);
2191
+ continue;
2192
+ }
2193
+ if (isReturnAsIsObject(data)) {
2046
2194
  result[key] = value;
2047
2195
  continue;
2048
2196
  }
@@ -3056,5 +3204,5 @@ const createUniqueRandomIntGenerator = (min, max) => {
3056
3204
  * Generated bundle index. Do not edit.
3057
3205
  */
3058
3206
 
3059
- export { AudioExtList, CHARACTER_DATA_EMPTY, COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE, DEFAULT_START_PAGE_0, DocumentExtList, ENCODE_URI_PATTERN, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, ExcelExtList, ImageExtList, LINK_IMAGE_ERROR_TOKEN_INJECT, PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT, PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT, UtilsCache, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, UtilsKeyCodeConstant, UtilsLanguageConstants, UtilsUrlSearchParams, VideoExtList, base64Decode, base64Encode, capitalize, checkMouseOverInContainer, checkViewInScreen, cloneDeep, cloneIBoundingClientRect, colorContrastFromOrigin, colorStepContrastFromOrigin, convertBase64ToBlob, convertBlobToFile, convertFileToBase64, convertFileToBase64_ObjectUrl, convertHtmlToDivBlocks, convertObjectToSignal, convertSignalToObject, convertUrlToFile, createUniqueRandomIntGenerator, decodeEscapeHtml, decodeURI, decrypt, decrypt3rd, deleteUnicode, downloadFileByUrl, downloadFileByUrlUseXmlRequest, downloadImageFromELement, encodeURI, encrypt, encrypt3rd, endCodeUrl, escapeHtml, firstLetterToUpperCase, formatDate, formatNumber, formatTextCompare, fullNameFormat, generateInterface, get, getColorById, getDayjs, getDeltaFromHTML, getDeviceInfo, getDocumentByString, getDragEventByElement, getEventNameHandleClick, getFileExtension, getHTMLFromQuill, getKeyCacheByArrayObject, getLabelBySizeFile, getPlatFromBrowser, getSmartAxisScale, getViewport, groupBy, highlightByKeyword, insertContentWithRange, isDifferenceDay, isDifferenceMonth, isDifferenceYear, isEmbedFrame, isEmpty, isEqual, isFalsy, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isNil, isTruthy, isTypeAudio, isTypeFile, isTypeImage, isTypeVideo, keyBy, listColorDefine, md5, omitBy, patternAccount, patternDomain, patternEmail, patternEmoji, patternEncodeUri, patternGetFieldByRuleFieldReplace, patternHostUrl, patternKey, patternMobilePhone, patternName, patternNameProfile, patternNameSpecial, patternNameUtf8, patternNumber, patternPem, patternPhone, patternPhoneNormal, patternRuleFieldReplace, patternTax, patternUrl, processPasteData, protectString, range, removeEmoji, revealString, rgbToHex, set, setCaretPosition, setDefaultTimeZone, setKeyCrypto, setKeyCrypto3rd, setStylesElement, uniqBy, updateFunctionCheckEmbedFrame, updateFunctionFormatDate, updateFunctionXssFilter, uppercaseByPosition, uuid, viewDataNumberByLanguage, xssFilter };
3207
+ export { AudioExtList, CHARACTER_DATA_EMPTY, COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE, DEFAULT_START_PAGE_0, DocumentExtList, ENCODE_URI_PATTERN, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, ExcelExtList, ImageExtList, LINK_IMAGE_ERROR_TOKEN_INJECT, PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT, PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT, UtilsCache, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, UtilsKeyCodeConstant, UtilsLanguageConstants, UtilsUrlSearchParams, VideoExtList, base64Decode, base64Encode, capitalize, checkMouseOverInContainer, checkViewInScreen, cloneDeep, cloneIBoundingClientRect, colorContrastFromOrigin, colorStepContrastFromOrigin, convertBase64ToBlob, convertBlobToFile, convertFileToBase64, convertFileToBase64_ObjectUrl, convertHtmlToDivBlocks, convertObjectToSignal, convertSignalToObject, convertUrlToFile, createUniqueRandomIntGenerator, decodeEscapeHtml, decodeURI, decrypt, decrypt3rd, deleteUnicode, downloadFileByUrl, downloadFileByUrlUseXmlRequest, downloadImageFromELement, encodeURI, encrypt, encrypt3rd, endCodeUrl, escapeHtml, firstLetterToUpperCase, formatDate, formatNumber, formatTextCompare, fullNameFormat, generateInterface, get, getColorById, getDayjs, getDeltaFromHTML, getDeviceInfo, getDocumentByString, getDragEventByElement, getEventNameHandleClick, getFileExtension, getHTMLFromQuill, getKeyCacheByArrayObject, getLabelBySizeFile, getPlatFromBrowser, getSmartAxisScale, getViewport, groupBy, hasDangerousConstructorName, highlightByKeyword, insertContentWithRange, isArrayObject, isAsyncObject, isBrowserAPIObject, isBrowserGlobalObject, isBuiltInObject, isDOMObject, isDangerousObject, isDayjsObject, isDifferenceDay, isDifferenceMonth, isDifferenceYear, isEmbedFrame, isEmpty, isEqual, isFalsy, isFileObject, isFrameworkObject, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isMapObject, isNil, isReturnAsIsObject, isSafeToProcess, isSetObject, isSkippableObject, isSpecialObject, isTruthy, isTypeAudio, isTypeFile, isTypeImage, isTypeVideo, keyBy, listColorDefine, md5, omitBy, patternAccount, patternDomain, patternEmail, patternEmoji, patternEncodeUri, patternGetFieldByRuleFieldReplace, patternHostUrl, patternKey, patternMobilePhone, patternName, patternNameProfile, patternNameSpecial, patternNameUtf8, patternNumber, patternPem, patternPhone, patternPhoneNormal, patternRuleFieldReplace, patternTax, patternUrl, processPasteData, protectString, range, removeEmoji, revealString, rgbToHex, set, setCaretPosition, setDefaultTimeZone, setKeyCrypto, setKeyCrypto3rd, setStylesElement, uniqBy, updateFunctionCheckEmbedFrame, updateFunctionFormatDate, updateFunctionXssFilter, uppercaseByPosition, uuid, viewDataNumberByLanguage, xssFilter };
3060
3208
  //# sourceMappingURL=libs-ui-utils.mjs.map