@libs-ui/utils 0.2.29 → 0.2.30-6.2

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.
Files changed (59) hide show
  1. package/base64.d.ts +5 -0
  2. package/cache.d.ts +16 -15
  3. package/color.d.ts +1 -1
  4. package/communicate-micro.d.ts +4 -5
  5. package/constants.d.ts +3 -0
  6. package/crypto-3rd.d.ts +4 -0
  7. package/crypto.d.ts +4 -0
  8. package/date.d.ts +49 -0
  9. package/dom.d.ts +36 -1
  10. package/download.d.ts +3 -0
  11. package/esm2022/base64.mjs +43 -0
  12. package/esm2022/cache.mjs +121 -132
  13. package/esm2022/color.mjs +2 -2
  14. package/esm2022/communicate-micro.mjs +26 -24
  15. package/esm2022/constants.mjs +4 -1
  16. package/esm2022/crypto-3rd.mjs +5 -1
  17. package/esm2022/crypto.mjs +5 -1
  18. package/esm2022/date.mjs +189 -0
  19. package/esm2022/dom.mjs +200 -22
  20. package/esm2022/download.mjs +37 -0
  21. package/esm2022/file.mjs +79 -0
  22. package/esm2022/format-text.mjs +150 -0
  23. package/esm2022/get-smart-axis-scale.mjs +174 -0
  24. package/esm2022/helpers.mjs +402 -91
  25. package/esm2022/http-params.mjs +15 -3
  26. package/esm2022/index.mjs +12 -5
  27. package/esm2022/inject-token.mjs +5 -0
  28. package/esm2022/key-cache.mjs +20 -8
  29. package/esm2022/language.mjs +67 -4
  30. package/esm2022/pattern.mjs +21 -21
  31. package/esm2022/random.mjs +42 -0
  32. package/esm2022/two-way-signal-object.mjs +113 -0
  33. package/esm2022/uri.mjs +22 -0
  34. package/esm2022/uuid.mjs +3 -2
  35. package/esm2022/xss-filter.mjs +10 -0
  36. package/fesm2022/libs-ui-utils.mjs +2454 -1096
  37. package/fesm2022/libs-ui-utils.mjs.map +1 -1
  38. package/file.d.ts +18 -0
  39. package/format-text.d.ts +11 -0
  40. package/get-smart-axis-scale.d.ts +34 -0
  41. package/helpers.d.ts +218 -10
  42. package/http-params.d.ts +2 -2
  43. package/index.d.ts +11 -4
  44. package/inject-token.d.ts +4 -0
  45. package/language.d.ts +32 -0
  46. package/package.json +7 -4
  47. package/pattern.d.ts +20 -20
  48. package/random.d.ts +3 -0
  49. package/two-way-signal-object.d.ts +14 -0
  50. package/uri.d.ts +5 -0
  51. package/xss-filter.d.ts +3 -0
  52. package/delete-unicode.d.ts +0 -1
  53. package/escape-html.d.ts +0 -1
  54. package/esm2022/delete-unicode.mjs +0 -20
  55. package/esm2022/escape-html.mjs +0 -12
  56. package/esm2022/get-color-by-id.mjs +0 -17
  57. package/esm2022/remove-emoji.mjs +0 -10
  58. package/get-color-by-id.d.ts +0 -1
  59. package/remove-emoji.d.ts +0 -2
package/file.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import { IFile } from "@libs-ui/interfaces-types";
2
+ export declare const isTypeImage: (file: File | Blob) => boolean;
3
+ export declare const isTypeVideo: (file: File | Blob) => boolean;
4
+ export declare const isTypeAudio: (file: File | Blob) => boolean;
5
+ export declare const isTypeFile: (file: File) => boolean;
6
+ export declare const ExcelExtList: string[];
7
+ export declare const DocumentExtList: string[];
8
+ export declare const isIncludeDocumentExtList: (ext: string, listExt?: Array<string>) => boolean;
9
+ export declare const ImageExtList: string[];
10
+ export declare const isIncludeImageExtList: (ext: string, listExt?: Array<string>) => boolean;
11
+ export declare const VideoExtList: string[];
12
+ export declare const isIncludeVideoExtList: (ext: string, listExt?: Array<string>) => boolean;
13
+ export declare const AudioExtList: string[];
14
+ export declare const isIncludeAudioExtList: (ext: string, listExt?: Array<string>) => boolean;
15
+ export declare const getFileExtension: (file: IFile | File) => string | undefined;
16
+ export declare const getLabelBySizeFile: (size: number, toFixed?: number) => string;
17
+ export declare const convertBlobToFile: (blob: Blob, fileName?: string) => File;
18
+ export declare const convertUrlToFile: (url: string, fileName?: string) => Promise<File | undefined>;
@@ -0,0 +1,11 @@
1
+ import { ITextFormatOptions } from "@libs-ui/interfaces-types";
2
+ export declare const highlightByKeyword: (value: string | undefined, search: string | undefined, ignoreHighlight?: boolean, classHightLight?: string) => string;
3
+ export declare const formatTextCompare: (text: string, options?: ITextFormatOptions) => string;
4
+ export declare const fullNameFormat: (value: string) => string;
5
+ export declare const capitalize: (text: string, options?: ITextFormatOptions) => string;
6
+ export declare const firstLetterToUpperCase: (text: string, options?: ITextFormatOptions) => string;
7
+ export declare const uppercaseByPosition: (text: string, position: number, options?: ITextFormatOptions) => string;
8
+ export declare const escapeHtml: (str: string) => string;
9
+ export declare const decodeEscapeHtml: (str: string) => string;
10
+ export declare const deleteUnicode: (str: string) => string;
11
+ export declare const removeEmoji: (text: string) => string;
@@ -0,0 +1,34 @@
1
+ interface AxisScaleOptions {
2
+ minTickCount?: number;
3
+ maxTickCount?: number;
4
+ stepCandidates?: number[];
5
+ acceptNegative?: boolean;
6
+ minNegative?: number;
7
+ acceptStepIsTypeFloat?: boolean;
8
+ }
9
+ interface AxisScaleResult {
10
+ stepSize: number;
11
+ max: number;
12
+ min: number;
13
+ tickAmount: number;
14
+ }
15
+ /**
16
+ * Tính toán smart axis scale cho biểu đồ
17
+ *
18
+ * @param maxData - Giá trị tối đa của dữ liệu
19
+ * @param options - Các tùy chọn cấu hình axis scale
20
+ * @returns Cấu hình axis scale bao gồm stepSize, max, min, tickAmount
21
+ *
22
+ * @throws {Error} INVALID_NEGATIVE_DATA - khi maxData < 0 mà acceptNegative = false
23
+ * @throws {Error} MISSING_MIN_NEGATIVE - khi acceptNegative = true nhưng thiếu minNegative
24
+ * @throws {Error} INVALID_RANGE - khi maxData < minNegative
25
+ * @throws {Error} INVALID_MIN_NEGATIVE - khi minNegative >= 0
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const result = getSmartAxisScale(100, { minTickCount: 5, maxTickCount: 10 });
30
+ * // returns { stepSize: 20, max: 120, min: 0, tickAmount: 6 }
31
+ * ```
32
+ */
33
+ export declare const getSmartAxisScale: (originalMaxData: number, options?: AxisScaleOptions) => AxisScaleResult;
34
+ export {};
package/helpers.d.ts CHANGED
@@ -1,14 +1,222 @@
1
- export declare const isNil: (value: unknown) => boolean;
1
+ import { Signal } from '@angular/core';
2
+ import { GetValueByPath, PathsToStringProps, TYPE_OBJECT } from '@libs-ui/interfaces-types';
3
+ /**Các hàm tương tự thư viện lodash */
4
+ /**
5
+ * Kiểm tra xem một giá trị có phải là null hoặc undefined hay không
6
+ * @param value Giá trị cần kiểm tra
7
+ * @returns true nếu giá trị là null hoặc undefined, false nếu không
8
+ * @example
9
+ * isNil(null); // true
10
+ * isNil(undefined); // true
11
+ * isNil(0); // false
12
+ * isNil('hello'); // false
13
+ */
14
+ export declare const isNil: (value: unknown) => value is null | undefined;
15
+ /**
16
+ * Kiểm tra xem một giá trị có phải là rỗng hay không
17
+ * @param value Giá trị cần kiểm tra
18
+ * @returns true nếu giá trị là null, rỗng hoặc undefined, false nếu không
19
+ * @example
20
+ * isEmpty(null); // true
21
+ * isEmpty(''); // true
22
+ * isEmpty(undefined); // true
23
+ * isEmpty({}); // true
24
+ * isEmpty([]); // true
25
+ * isEmpty([1, 2, 3]); // false
26
+ * isEmpty({ a: 1 }); // false
27
+ */
2
28
  export declare const isEmpty: (value: unknown) => boolean;
3
- export declare const get: (obj: Record<string, any> | any, path: string | string[], defaultValue?: any) => any;
4
- export declare const set: (obj: Record<string, any>, path: string | string[], value: any) => any;
5
- export declare const cloneDeep: (value: any) => any;
6
- export declare const convertObjectToSignal: (data: any) => any;
7
- export declare const isSignal: (data: any) => any;
8
- export declare const convertSignalToObject: (data: any) => any;
9
- export declare const keyBy: (data: Array<Record<any, any>>, key: string) => Record<any, any>;
10
- export declare const groupBy: (data: Array<Record<any, any>>, key: string) => Record<any, any>;
29
+ /**
30
+ * 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
31
+ * @param objData Đối tượng cần xử lý
32
+ * @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ỏ
33
+ * @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
34
+ * @example
35
+ * const obj = { a: 1, b: null, c: 3, d: undefined };
36
+ * omitBy(obj, isNil); // { a: 1, c: 3 }
37
+ */
38
+ export declare const omitBy: <T>(objData: Record<string, any>, predicate: (val: any) => boolean) => T;
39
+ /**
40
+ * Lấy giá trị từ đối tượng theo đường dẫn chỉ định
41
+ *
42
+ * 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,
43
+ * tránh lỗi khi thuộc tính không tồn tại.
44
+ *
45
+ * @param obj Đối tượng nguồn cần lấy giá trị
46
+ * @param path Đường dẫn đến thuộc tính cần lấy. Có thể là:
47
+ * - Chuỗi: 'user.profile.name' hoặc 'items[0].title'
48
+ * - Mảng: ['user', 'profile', 'name'] hoặc ['items', '0', 'title']
49
+ * - Chuỗi rỗng '': trả về chính đối tượng gốc
50
+ * @param defaultValue Giá trị mặc định trả về khi không tìm thấy thuộc tính (mặc định: undefined)
51
+ * @param keepLastValueIfSignal Có giữ nguyên signal cuối cùng hay không (mặc định: false - sẽ gọi signal())
52
+ * @returns Giá trị tìm được hoặc giá trị mặc định
53
+ *
54
+ * @example
55
+ * // Ví dụ cơ bản
56
+ * const user = { name: 'John', age: 30 };
57
+ * get(user, 'name'); // 'John'
58
+ * get(user, 'email'); // undefined
59
+ * get(user, 'email', 'no-email'); // 'no-email'
60
+ *
61
+ * @example
62
+ * // Truyền path rỗng - trả về chính đối tượng gốc
63
+ * const data = { name: 'Alice', age: 25 };
64
+ * get(data, ''); // { name: 'Alice', age: 25 } (chính đối tượng data)
65
+ * get(data, '', 'default'); // { name: 'Alice', age: 25 } (bỏ qua defaultValue)
66
+ *
67
+ * @example
68
+ * // Truy cập thuộc tính sâu
69
+ * const data = {
70
+ * user: {
71
+ * profile: {
72
+ * name: 'Alice',
73
+ * settings: { theme: 'dark' }
74
+ * }
75
+ * }
76
+ * };
77
+ * get(data, 'user.profile.name'); // 'Alice'
78
+ * get(data, 'user.profile.settings.theme'); // 'dark'
79
+ * get(data, 'user.profile.avatar', 'default.jpg'); // 'default.jpg'
80
+ *
81
+ * @example
82
+ * // Truy cập mảng
83
+ * const items = [
84
+ * { name: 'Item 1', price: 100 },
85
+ * { name: 'Item 2', price: 200 }
86
+ * ];
87
+ * get(items, '[0].name'); // 'Item 1'
88
+ * get(items, '[1].name'); // 'Item 2'
89
+ * get(items, '[2].name', 'Not found'); // 'Not found'
90
+ *
91
+ * @example
92
+ * // Sử dụng với mảng path
93
+ * const nested = { a: { b: { c: 'deep value' } } };
94
+ * get(nested, ['a', 'b', 'c']); // 'deep value'
95
+ * get(nested, ['a', 'b', 'd'], 'default'); // 'default'
96
+ *
97
+ * @example
98
+ * // Trường hợp đặc biệt
99
+ * get(null, 'any.path'); // undefined
100
+ * get(undefined, 'any.path', 'fallback'); // 'fallback'
101
+ */
102
+ export declare const get: <O, P extends PathsToStringProps<O> = PathsToStringProps<O>, E extends boolean = boolean, T extends GetValueByPath<O, P, E> = GetValueByPath<O, P, E>>(obj: Signal<O> | O, path: P, defaultValue?: T, keepLastValueIfSignal?: E) => T;
103
+ /**
104
+ * Thiết lập giá trị cho một thuộc tính trong đối tượng theo đường dẫn chỉ định
105
+ * @param obj Đối tượng cần thiết lập giá trị
106
+ * @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'])
107
+ * @param value Giá trị cần thiết lập
108
+ * @returns Đối tượng sau khi đã thiết lập giá trị
109
+ * @throws Error nếu tham số đầu tiên không phải là đối tượng
110
+ * @example
111
+ * const obj = { a: { b: 1 } };
112
+ * set(obj, 'a.b', 2); // { a: { b: 2 } }
113
+ */
114
+ export declare const set: <O, P extends PathsToStringProps<O> = PathsToStringProps<O>, T extends GetValueByPath<O, P, true> = GetValueByPath<O, P, true>>(obj: Signal<O> | O, path: P, value: T) => O;
115
+ /**
116
+ * Tạo một bản sao sâu của một đối tượng hoặc giá trị bất kỳ
117
+ * @param data Dữ liệu cần sao chép
118
+ * @param options Tùy chọn cấu hình
119
+ * @param options.ignoreSignal Nếu true, sẽ không sao chép các signal mà trả về signal gốc
120
+ * @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
121
+ * @returns Bản sao sâu của dữ liệu đầu vào
122
+ * @example
123
+ * const obj = {
124
+ * a: 1,
125
+ * b: { c: 2 },
126
+ * d: [1, 2, 3]
127
+ * };
128
+ * const clone = cloneDeep(obj);
129
+ * // clone là một bản sao hoàn toàn độc lập của obj
130
+ */
131
+ export declare const cloneDeep: <T = any>(data: any, options?: {
132
+ ignoreSignal: boolean;
133
+ }, seen?: WeakMap<object, any>) => T;
134
+ /**
135
+ * 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
136
+ * @param data Mảng các đối tượng cần chuyển đổi
137
+ * @param key Tên thuộc tính được sử dụng làm khóa trong đối tượng kết quả
138
+ * @returns Đối tượng với các giá trị từ mảng được đánh key theo thuộc tính đã chỉ định
139
+ * @example
140
+ * const data = [
141
+ * { id: 1, name: 'John' },
142
+ * { id: 2, name: 'Jane' }
143
+ * ];
144
+ * keyBy(data, 'id');
145
+ * // Kết quả: {
146
+ * // '1': { id: 1, name: 'John' },
147
+ * // '2': { id: 2, name: 'Jane' }
148
+ * // }
149
+ */
150
+ export declare const keyBy: (data: Array<TYPE_OBJECT>, key: string) => TYPE_OBJECT;
151
+ /**
152
+ * 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ể
153
+ * @param data Mảng các đối tượng cần nhóm
154
+ * @param key Tên thuộc tính được sử dụng làm khóa nhóm
155
+ * @returns Đối tượng với các giá trị từ mảng được nhóm theo thuộc tính đã chỉ định
156
+ * @example
157
+ * const data = [
158
+ * { id: 1, name: 'John' },
159
+ * { id: 2, name: 'Jane' },
160
+ * { id: 1, name: 'John' }
161
+ * ];
162
+ * groupBy(data, 'id');
163
+ * // Kết quả: {
164
+ * // '1': [
165
+ * // { id: 1, name: 'John' },
166
+ * // { id: 1, name: 'John' }
167
+ * // ],
168
+ * // '2': [
169
+ * // { id: 2, name: 'Jane' }
170
+ * // }
171
+ */
172
+ export declare const groupBy: (data: Array<TYPE_OBJECT>, key: string) => TYPE_OBJECT;
173
+ /**
174
+ * 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
175
+ * @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
176
+ * @param end Giá trị kết thúc của dãy số (tùy chọn)
177
+ * @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
178
+ * @returns Mảng các số từ start đến end với bước nhảy step
179
+ * @example
180
+ * range(4); // [0, 1, 2, 3]
181
+ * range(1, 5); // [1, 2, 3, 4]
182
+ * range(0, 20, 5); // [0, 5, 10, 15]
183
+ * range(5, 2); // [5, 4, 3]
184
+ */
11
185
  export declare const range: (start: number, end?: number, step?: number) => Array<number>;
12
- export declare const isEqual: (value1: any, value2: any) => boolean;
186
+ /**
187
+ * So sánh hai giá trị bất kỳ có bằng nhau hay không
188
+ * @param value1 Giá trị thứ nhất cần so sánh
189
+ * @param value2 Giá trị thứ hai cần so sánh
190
+ * @param exactlyPosition Có so sánh chính xác vị trí các phần tử trong mảng hay không
191
+ * @returns true nếu hai giá trị bằng nhau, false nếu không bằng nhau
192
+ * @example
193
+ * isEqual([1,2,3], [1,2,3]); // true
194
+ * isEqual([1,2,3], [3,2,1]); // true khi exactlyPosition = false
195
+ * isEqual([1,2,3], [3,2,1]); // false khi exactlyPosition = true
196
+ * isEqual({a:1}, {a:1}); // true
197
+ */
198
+ export declare const isEqual: (value1: any, value2: any, options?: {
199
+ exactlyPosition?: boolean;
200
+ ignoreExactlyDataType?: boolean;
201
+ }) => boolean;
202
+ /**
203
+ * 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
204
+ * @param data Mảng dữ liệu cần xử lý
205
+ * @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ị
206
+ * @returns Mảng mới chứa các phần tử không trùng lặp
207
+ * @example
208
+ * const arr = [
209
+ * { id: 1, name: 'A' },
210
+ * { id: 2, name: 'B' },
211
+ * { id: 1, name: 'C' }
212
+ * ];
213
+ * uniqBy(arr, 'id'); // [{ id: 1, name: 'A' }, { id: 2, name: 'B' }]
214
+ *
215
+ * const numbers = [1, 2, 2, 3, 3];
216
+ * uniqBy(numbers); // [1, 2, 3]
217
+ *
218
+ * const numbersSignal = [signal(1), signal(2), signal(3), signal(2), signal(5), signal(4), signal(1), signal(6), signal(7), signal(6)];
219
+ * uniqBy(numbersSignal); // [signal(1), signal(2), signal(3), signal(5), signal(4), signal(6), signal(7)]
220
+ */
13
221
  export declare const uniqBy: <T>(data: Array<T>, key?: string) => Array<T>;
14
222
  export declare const generateInterface: (obj: any, interfaceName: string) => string;
package/http-params.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { HttpParameterCodec, HttpParams } from "@angular/common/http";
2
- export declare const HttpParamsRequestInstance: <Type>(options?: HttpParamsOptions<Type>, instance?: HttpParams) => UtilsHttpParamsRequest<Type>;
2
+ export declare const UtilsHttpParamsRequestInstance: <Type>(options?: HttpParamsOptions<Type>, instance?: HttpParams) => UtilsHttpParamsRequest<Type>;
3
3
  export declare class UtilsHttpParamsRequest<Type = {
4
4
  pem: string;
5
5
  }> extends HttpParams {
6
- private params;
6
+ protected params: HttpParams;
7
7
  constructor(options?: HttpParamsOptions<Type>, instance?: HttpParams);
8
8
  getInstance(): HttpParams;
9
9
  setInstance(instance: HttpParams): void;
package/index.d.ts CHANGED
@@ -11,11 +11,18 @@ export * from './language';
11
11
  export * from './key-cache';
12
12
  export * from './cache';
13
13
  export * from './format-number';
14
- export * from './remove-emoji';
15
- export * from './escape-html';
16
14
  export * from './communicate-micro';
17
15
  export * from './function-check-embed-frame';
18
- export * from './delete-unicode';
19
- export * from './get-color-by-id';
20
16
  export * from './constants';
21
17
  export * from './pattern';
18
+ export * from './xss-filter';
19
+ export * from './two-way-signal-object';
20
+ export * from './date';
21
+ export * from './download';
22
+ export * from './base64';
23
+ export * from './inject-token';
24
+ export * from './file';
25
+ export * from './uri';
26
+ export * from './format-text';
27
+ export * from './get-smart-axis-scale';
28
+ export * from './random';
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ export declare const LINK_IMAGE_ERROR_TOKEN_INJECT: InjectionToken<string>;
3
+ export declare const PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT: InjectionToken<string>;
4
+ export declare const PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT: InjectionToken<string>;
package/language.d.ts CHANGED
@@ -1,5 +1,37 @@
1
1
  export declare class UtilsLanguageConstants {
2
2
  static VI: string;
3
3
  static EN: string;
4
+ static FR: string;
5
+ static DE: string;
6
+ static ES: string;
7
+ static ZH: string;
8
+ static ZH_TW: string;
9
+ static JA: string;
10
+ static KO: string;
11
+ static RU: string;
12
+ static IT: string;
13
+ static PT: string;
14
+ static TH: string;
15
+ static ID: string;
16
+ static MS: string;
17
+ static AR: string;
18
+ static HI: string;
19
+ static BN: string;
20
+ static TR: string;
21
+ static NL: string;
22
+ static KM: string;
23
+ static LO: string;
24
+ static MY: string;
25
+ static TL: string;
26
+ static CEB: string;
27
+ static JV: string;
28
+ static SU: string;
4
29
  static defaultLang: string;
30
+ static supportedLanguages: Set<string>;
31
+ /**
32
+ * Kiểm tra xem ngôn ngữ đầu vào có được hỗ trợ không
33
+ * @param lang Mã ngôn ngữ cần kiểm tra
34
+ * @returns True nếu được hỗ trợ, False nếu không
35
+ */
36
+ static isSupported(lang: string): boolean;
5
37
  }
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@libs-ui/utils",
3
- "version": "0.2.29",
3
+ "version": "0.2.306.2",
4
4
  "peerDependencies": {
5
- "@angular/common": "^18.2.0",
6
- "@angular/core": "^18.2.0",
7
- "crypto-es": "^2.1.0"
5
+ "@angular/common": ">=18.0.0",
6
+ "@angular/core": ">=18.0.0",
7
+ "crypto-es": "^2.1.0",
8
+ "dayjs": "1.11.5",
9
+ "@libs-ui/interfaces-types": "0.2.306.2",
10
+ "rxjs": "~7.8.0"
8
11
  },
9
12
  "sideEffects": false,
10
13
  "module": "fesm2022/libs-ui-utils.mjs",
package/pattern.d.ts CHANGED
@@ -1,20 +1,20 @@
1
- export declare const PATTERN_EMAIL: () => RegExp;
2
- export declare const PATTERN_URL: () => RegExp;
3
- export declare const PATTERN_HOST_URL: () => RegExp;
4
- export declare const PATTERN_DOMAIN: () => RegExp;
5
- export declare const PATTERN_MOBILE_PHONE: () => RegExp;
6
- export declare const PATTERN_PHONE: () => RegExp;
7
- export declare const PATTERN_PHONE_NORMAL: () => RegExp;
8
- export declare const PATTERN_NUMBER: () => RegExp;
9
- export declare const PATTERN_ENCODE_URI: () => RegExp;
10
- export declare const PATTERN_NAME: () => RegExp;
11
- export declare const PATTERN_NAME_UTF8: () => RegExp;
12
- export declare const PATTERN_NAME_SPECIAL: () => RegExp;
13
- export declare const PATTERN_NAME_PROFILE: () => RegExp;
14
- export declare const PATTERN_EMOJI: () => RegExp;
15
- export declare const PATTERN_RULE_FIELD_REPLACE: () => RegExp;
16
- export declare const PATTERN_GET_FIELD_BY_RULE_FIELD_REPLACE: () => RegExp;
17
- export declare const PATTERN_PEM: () => RegExp;
18
- export declare const PATTERN_TAX: () => RegExp;
19
- export declare const PATTERN_KEY: () => RegExp;
20
- export declare const PATTERN_ACCOUNT: () => RegExp;
1
+ export declare const patternEmail: () => RegExp;
2
+ export declare const patternUrl: () => RegExp;
3
+ export declare const patternHostUrl: () => RegExp;
4
+ export declare const patternDomain: () => RegExp;
5
+ export declare const patternMobilePhone: () => RegExp;
6
+ export declare const patternPhone: () => RegExp;
7
+ export declare const patternPhoneNormal: () => RegExp;
8
+ export declare const patternNumber: () => RegExp;
9
+ export declare const patternEncodeUri: () => RegExp;
10
+ export declare const patternName: () => RegExp;
11
+ export declare const patternNameUtf8: () => RegExp;
12
+ export declare const patternNameSpecial: () => RegExp;
13
+ export declare const patternNameProfile: () => RegExp;
14
+ export declare const patternEmoji: () => RegExp;
15
+ export declare const patternRuleFieldReplace: () => RegExp;
16
+ export declare const patternGetFieldByRuleFieldReplace: () => RegExp;
17
+ export declare const patternPem: () => RegExp;
18
+ export declare const patternTax: () => RegExp;
19
+ export declare const patternKey: () => RegExp;
20
+ export declare const patternAccount: () => RegExp;
package/random.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare const protectString: (input: string) => string;
2
+ export declare const revealString: (encoded: string) => string;
3
+ export declare const createUniqueRandomIntGenerator: (min: number, max: number) => () => number;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Chuyển đổi một đối tượng hoặc giá trị thành signal
3
+ * @param data Dữ liệu cần chuyển đổi thành signal
4
+ * @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.
5
+ * Đặt false nếu muốn giữ nguyên tham chiếu đến dữ liệu gốc.
6
+ * Nếu muốn sao chép sâu đối tượng signal thì đặt cloneDeepIfNotSignal là true và acceptConvertObjectInnerWritableSignal là true.
7
+ * @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.
8
+ * Đặt true nếu muốn bọc các giá trị nguyên thủy trong signal.
9
+ * @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.
10
+ * Đặ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.
11
+ * @returns Dữ liệu đã được chuyển đổi theo kiểu T
12
+ */
13
+ export declare const convertObjectToSignal: <T = any>(data: any, cloneDeepIfNotSignal?: boolean, isSignalPrimitiveType?: boolean, acceptConvertObjectInnerWritableSignal?: boolean, seen?: WeakMap<object, any>) => T;
14
+ export declare const convertSignalToObject: <T = any>(data: any, isCloneDeep?: boolean, seen?: WeakMap<object, any>) => T;
package/uri.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { TYPE_OBJECT } from "@libs-ui/interfaces-types";
2
+ export declare const ENCODE_URI_PATTERN: RegExp;
3
+ export declare const decodeURI: (value: string) => string;
4
+ export declare const encodeURI: (value: string) => string;
5
+ export declare const endCodeUrl: (params: TYPE_OBJECT, isBody: boolean) => string;
@@ -0,0 +1,3 @@
1
+ export type TYPE_FUNCTION_XSS = (data: string) => Promise<string>;
2
+ export declare const updateFunctionXssFilter: (functionCustom: TYPE_FUNCTION_XSS) => void;
3
+ export declare const xssFilter: TYPE_FUNCTION_XSS;
@@ -1 +0,0 @@
1
- export declare const deleteUnicode: (str: string) => string;
package/escape-html.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare const escapeHtml: (data: string) => string;
@@ -1,20 +0,0 @@
1
- export const deleteUnicode = (str) => {
2
- str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');
3
- str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ|ễ/g, 'e');
4
- str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');
5
- str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');
6
- str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');
7
- str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');
8
- str = str.replace(/đ/g, 'd');
9
- str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');
10
- str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');
11
- str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I');
12
- str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O');
13
- str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');
14
- str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');
15
- str = str.replace(/Đ/g, 'D');
16
- str = str.replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, ""); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng
17
- str = str.replace(/\u02C6|\u0306|\u031B/g, ""); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư
18
- return str.normalize();
19
- };
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXVuaWNvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9kZWxldGUtdW5pY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUMzQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUU3QixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztJQUN0RyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtJQUV2RSxPQUFPLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZGVsZXRlVW5pY29kZSA9IChzdHI6IHN0cmluZykgPT4ge1xuICBzdHIgPSBzdHIucmVwbGFjZSgvw6B8w6F84bqhfOG6o3zDo3zDonzhuqd84bqlfOG6rXzhuql84bqrfMSDfOG6sXzhuq984bq3fOG6s3zhurUvZywgJ2EnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OofMOpfOG6uXzhurt84bq9fMOqfOG7gXzhur984buHfOG7g3zDqsyDfOG7hS9nLCAnZScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvw6x8w6184buLfOG7iXzEqS9nLCAnaScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvw7J8w7N84buNfOG7j3zDtXzDtHzhu5N84buRfOG7mXzhu5V84buXfMahfOG7nXzhu5t84bujfOG7n3zhu6EvZywgJ28nKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8O5fMO6fOG7pXzhu6d8xal8xrB84burfOG7qXzhu7F84butfOG7ry9nLCAndScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgv4buzfMO9fOG7tXzhu7d84bu5L2csICd5Jyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/EkS9nLCAnZCcpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvw4B8w4F84bqgfOG6onzDg3zDgnzhuqZ84bqkfOG6rHzhuqh84bqqfMSCfOG6sHzhuq584bq2fOG6snzhurQvZywgJ0EnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OIfMOJfOG6uHzhurp84bq8fMOKfOG7gHzhur584buGfOG7gnzhu4QvZywgJ0UnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OMfMONfOG7inzhu4h8xKgvZywgJ0knKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL8OSfMOTfOG7jHzhu458w5V8w5R84buSfOG7kHzhu5h84buUfOG7lnzGoHzhu5x84buafOG7onzhu5584bugL2csICdPJyk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC/DmXzDmnzhu6R84bumfMWofMavfOG7qnzhu6h84buwfOG7rHzhu64vZywgJ1UnKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL+G7snzDnXzhu7R84bu2fOG7uC9nLCAnWScpO1xuICBzdHIgPSBzdHIucmVwbGFjZSgvxJAvZywgJ0QnKTtcblxuICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDMwMHxcXHUwMzAxfFxcdTAzMDN8XFx1MDMwOXxcXHUwMzIzL2csIFwiXCIpOyAvLyDMgCDMgSDMgyDMiSDMoyAgaHV54buBbiwgc+G6r2MsIG5nw6MsIGjhu49pLCBu4bq3bmdcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAyQzZ8XFx1MDMwNnxcXHUwMzFCL2csIFwiXCIpOyAvLyDLhiDMhiDMmyAgw4IsIMOKLCDEgiwgxqAsIMavXG5cbiAgcmV0dXJuIHN0ci5ub3JtYWxpemUoKTtcbn07Il19
@@ -1,12 +0,0 @@
1
- export const escapeHtml = (data) => {
2
- if (!data || typeof data !== 'string') {
3
- return data;
4
- }
5
- return data
6
- .replace(/&/g, "&amp;")
7
- .replace(/</g, "&lt;")
8
- .replace(/>/g, "&gt;")
9
- .replace(/"/g, "&quot;")
10
- .replace(/'/g, "&#039;");
11
- };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLWh0bWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9lc2NhcGUtaHRtbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRTtJQUNqRCxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1NBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1NBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1NBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1NBQ3ZCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVzY2FwZUh0bWwgPSAoZGF0YTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcmV0dXJuIGRhdGFcbiAgICAucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpXG4gICAgLnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpXG4gICAgLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpXG4gICAgLnJlcGxhY2UoLycvZywgXCImIzAzOTtcIik7XG59O1xuIl19
@@ -1,17 +0,0 @@
1
- const listColorDefine = ['#E62222', '#B81B1B', '#EB4E4E', '#F97316', '#C75C12', '#FA8F45', '#FFB700', '#CC9200', '#FFC533', '#84CC16', '#6AA312', '#9dd645', '#00BC62', '#00A757', '#33DA8A', '#06B6D4', '#1B59C4', '#4E8CF7', '#0EA5E9',
2
- '#1B59C4', '#4E8CF7', '#226FF5', '#1B59C4', '#4E8CF7', '#6366F1', '#4F52C1', '#8285F4', '#5B04B3', '#49038F', '#7C36C2', '#D946EF', '#AE38BF', '#E16BF2', '#EC4899', '#BD3A7A', '#F06DAD', '#F43F5E', '#C3324B', '#F6657E', '#757380', '#5E5C66', '#918F99',
3
- '#202020', '#1A1A1A', '#4D4D4D'
4
- ];
5
- export const getColorById = (str) => {
6
- let hashString = 0;
7
- if (!str) {
8
- return '';
9
- }
10
- for (let i = 0; i < str.length; i++) {
11
- const char = str.charCodeAt(i);
12
- hashString = ((hashString << 5) - hashString) + char;
13
- hashString = hashString & hashString;
14
- }
15
- return listColorDefine[Math.abs(hashString) % listColorDefine.length];
16
- };
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbG9yLWJ5LWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvZ2V0LWNvbG9yLWJ5LWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sZUFBZSxHQUFrQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVM7SUFDclAsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVM7SUFDM1AsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTO0NBQ2hDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRTtJQUNsRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFFbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9CLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNyRCxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbGlzdENvbG9yRGVmaW5lOiBBcnJheTxzdHJpbmc+ID0gWycjRTYyMjIyJywgJyNCODFCMUInLCAnI0VCNEU0RScsICcjRjk3MzE2JywgJyNDNzVDMTInLCAnI0ZBOEY0NScsICcjRkZCNzAwJywgJyNDQzkyMDAnLCAnI0ZGQzUzMycsICcjODRDQzE2JywgJyM2QUEzMTInLCAnIzlkZDY0NScsICcjMDBCQzYyJywgJyMwMEE3NTcnLCAnIzMzREE4QScsICcjMDZCNkQ0JywgJyMxQjU5QzQnLCAnIzRFOENGNycsICcjMEVBNUU5JyxcbiAgJyMxQjU5QzQnLCAnIzRFOENGNycsICcjMjI2RkY1JywgJyMxQjU5QzQnLCAnIzRFOENGNycsICcjNjM2NkYxJywgJyM0RjUyQzEnLCAnIzgyODVGNCcsICcjNUIwNEIzJywgJyM0OTAzOEYnLCAnIzdDMzZDMicsICcjRDk0NkVGJywgJyNBRTM4QkYnLCAnI0UxNkJGMicsICcjRUM0ODk5JywgJyNCRDNBN0EnLCAnI0YwNkRBRCcsICcjRjQzRjVFJywgJyNDMzMyNEInLCAnI0Y2NjU3RScsICcjNzU3MzgwJywgJyM1RTVDNjYnLCAnIzkxOEY5OScsXG4gICcjMjAyMDIwJywgJyMxQTFBMUEnLCAnIzRENEQ0RCdcbl07XG5cbmV4cG9ydCBjb25zdCBnZXRDb2xvckJ5SWQgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBsZXQgaGFzaFN0cmluZyA9IDA7XG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICBoYXNoU3RyaW5nID0gKChoYXNoU3RyaW5nIDw8IDUpIC0gaGFzaFN0cmluZykgKyBjaGFyO1xuICAgIGhhc2hTdHJpbmcgPSBoYXNoU3RyaW5nICYgaGFzaFN0cmluZztcbiAgfVxuXG4gIHJldHVybiBsaXN0Q29sb3JEZWZpbmVbTWF0aC5hYnMoaGFzaFN0cmluZykgJSBsaXN0Q29sb3JEZWZpbmUubGVuZ3RoXTtcbn07XG5cbiJdfQ==
@@ -1,10 +0,0 @@
1
- export const emojiPattern = () => {
2
- return /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/g;
3
- };
4
- export const removeEmoji = (text) => {
5
- if (!text || !text.trim()) {
6
- return text;
7
- }
8
- return text.replace(emojiPattern(), '');
9
- };
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlLWVtb2ppLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvcmVtb3ZlLWVtb2ppLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxHQUFFLEVBQUU7SUFDOUIsT0FBTyxvR0FBb0csQ0FBQztBQUM5RyxDQUFDLENBQUE7QUFDRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUN4QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbW9qaVBhdHRlcm4gPSAoKT0+IHtcbiAgcmV0dXJuIC8oXFx1MDBhOXxcXHUwMGFlfFtcXHUyMDAwLVxcdTMzMDBdfFxcdWQ4M2NbXFx1ZDAwMC1cXHVkZmZmXXxcXHVkODNkW1xcdWQwMDAtXFx1ZGZmZl18XFx1ZDgzZVtcXHVkMDAwLVxcdWRmZmZdKS9nO1xufVxuZXhwb3J0IGNvbnN0IHJlbW92ZUVtb2ppID0gKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghdGV4dCB8fCAhdGV4dC50cmltKCkpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShlbW9qaVBhdHRlcm4oKSwgJycpO1xufTsiXX0=
@@ -1 +0,0 @@
1
- export declare const getColorById: (str: string) => string;
package/remove-emoji.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const emojiPattern: () => RegExp;
2
- export declare const removeEmoji: (text: string) => string;