twcpt 0.0.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.
- package/LICENSE +22 -0
- package/README.md +189 -0
- package/dist/charts-CKv8I1ye.js +879 -0
- package/dist/charts-DIdINgA4.cjs +1 -0
- package/dist/charts.cjs.js +1 -0
- package/dist/charts.css +1 -0
- package/dist/charts.d.ts +7 -0
- package/dist/charts.es.js +9 -0
- package/dist/components/j-ch-bar/index.d.ts +50 -0
- package/dist/components/j-ch-bar/types.d.ts +42 -0
- package/dist/components/j-ch-bar-line/index.d.ts +49 -0
- package/dist/components/j-ch-bar-line/types.d.ts +42 -0
- package/dist/components/j-ch-bubble/index.d.ts +54 -0
- package/dist/components/j-ch-bubble/types.d.ts +51 -0
- package/dist/components/j-ch-line/index.d.ts +57 -0
- package/dist/components/j-ch-line/types.d.ts +42 -0
- package/dist/components/j-ch-pie-doughnut/index.d.ts +60 -0
- package/dist/components/j-ch-pie-doughnut/types.d.ts +55 -0
- package/dist/components/j-ch-radar/index.d.ts +49 -0
- package/dist/components/j-ch-radar/types.d.ts +42 -0
- package/dist/components/j-tw-btn/index.d.ts +606 -0
- package/dist/components/j-tw-btn/types.d.ts +104 -0
- package/dist/composables/useI18n.d.ts +12 -0
- package/dist/global.d.ts +75 -0
- package/dist/i18n/en-US/index.d.ts +90 -0
- package/dist/i18n/index.d.ts +10 -0
- package/dist/i18n/zh-CN/index.d.ts +90 -0
- package/dist/index-BrYPwI7i.cjs +1 -0
- package/dist/index-C5mRo5Yi.cjs +1 -0
- package/dist/index-DsQ7r9Ci.js +76 -0
- package/dist/index-s5XCGtM9.js +76 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/resolver.cjs +1 -0
- package/dist/resolver.d.ts +2 -0
- package/dist/resolver.mjs +36 -0
- package/dist/twcpt-styles.css +1 -0
- package/dist/twcpt-styles.d.ts +1 -0
- package/dist/twcpt-styles.js +1 -0
- package/dist/twcpt.cjs.js +1 -0
- package/dist/twcpt.es.js +2003 -0
- package/dist/types.d.ts +27 -0
- package/dist/utils/chart.d.ts +28 -0
- package/dist/utils/custom-svg.d.ts +3 -0
- package/dist/utils/helper/array.d.ts +289 -0
- package/dist/utils/helper/dom.d.ts +281 -0
- package/dist/utils/helper/index.d.ts +11 -0
- package/dist/utils/helper/number.d.ts +250 -0
- package/dist/utils/helper/object.d.ts +240 -0
- package/dist/utils/helper/perf.d.ts +231 -0
- package/dist/utils/helper/regex.d.ts +265 -0
- package/dist/utils/helper/string.d.ts +248 -0
- package/dist/utils/helper/url.d.ts +259 -0
- package/dist/utils/icon-map.d.ts +19 -0
- package/dist/utils/init.d.ts +35 -0
- package/dist/utils/resolver.d.ts +34 -0
- package/dist/utils/storage.d.ts +3 -0
- package/dist/utils/storageSync.d.ts +20 -0
- package/dist/utils/tool.d.ts +103 -0
- package/dist/utils/website-config.d.ts +15 -0
- package/package.json +90 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type * as toolUtils from './utils/tool';
|
|
2
|
+
import type * as arrayUtils from './utils/helper/array';
|
|
3
|
+
import type * as domUtils from './utils/helper/dom';
|
|
4
|
+
import type * as numberUtils from './utils/helper/number';
|
|
5
|
+
import type * as objectUtils from './utils/helper/object';
|
|
6
|
+
import type * as perfUtils from './utils/helper/perf';
|
|
7
|
+
import type * as regexUtils from './utils/helper/regex';
|
|
8
|
+
import type * as stringUtils from './utils/helper/string';
|
|
9
|
+
import type * as urlUtils from './utils/helper/url';
|
|
10
|
+
export interface JQToolType extends Record<string, any> {
|
|
11
|
+
array: typeof arrayUtils;
|
|
12
|
+
dom: typeof domUtils;
|
|
13
|
+
number: typeof numberUtils;
|
|
14
|
+
object: typeof objectUtils;
|
|
15
|
+
perf: typeof perfUtils;
|
|
16
|
+
regex: typeof regexUtils;
|
|
17
|
+
string: typeof stringUtils;
|
|
18
|
+
url: typeof urlUtils;
|
|
19
|
+
defaultFill: typeof toolUtils.defaultFill;
|
|
20
|
+
formatSize: typeof toolUtils.formatSize;
|
|
21
|
+
getUpperSize: typeof toolUtils.getUpperSize;
|
|
22
|
+
defaultFormat: typeof toolUtils.defaultFormat;
|
|
23
|
+
formatDate: typeof toolUtils.formatDate;
|
|
24
|
+
defaultDateFormat: typeof toolUtils.defaultDateFormat;
|
|
25
|
+
defaultDataFormat: typeof toolUtils.defaultDataFormat;
|
|
26
|
+
defaultAutoDataFormat: typeof toolUtils.defaultAutoDataFormat;
|
|
27
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 图表相关工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 深度合并图表配置
|
|
6
|
+
* 用于将用户自定义配置与默认配置进行深度合并
|
|
7
|
+
*
|
|
8
|
+
* @param target 默认配置(基础配置)
|
|
9
|
+
* @param source 用户配置(覆盖配置)
|
|
10
|
+
* @returns 合并后的配置
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const defaultOptions = {
|
|
14
|
+
* plugins: { legend: { display: true, position: 'bottom' } },
|
|
15
|
+
* scales: { y: { beginAtZero: true } }
|
|
16
|
+
* };
|
|
17
|
+
* const userOptions = {
|
|
18
|
+
* plugins: { legend: { position: 'top' } },
|
|
19
|
+
* scales: { y: { max: 100 } }
|
|
20
|
+
* };
|
|
21
|
+
* const merged = mergeChartOptions(defaultOptions, userOptions);
|
|
22
|
+
* // 结果:
|
|
23
|
+
* // {
|
|
24
|
+
* // plugins: { legend: { display: true, position: 'top' } },
|
|
25
|
+
* // scales: { y: { beginAtZero: true, max: 100 } }
|
|
26
|
+
* // }
|
|
27
|
+
*/
|
|
28
|
+
export declare function mergeChartOptions<T extends Record<string, any>>(target: T, source: Partial<T> | undefined | null): T;
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数组处理工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 数组去重(基础类型)
|
|
6
|
+
* @param arr 数组
|
|
7
|
+
* @returns 去重后的数组
|
|
8
|
+
* @example
|
|
9
|
+
* uniqueArray([1, 2, 2, 3, 3, 4]) // [1, 2, 3, 4]
|
|
10
|
+
* uniqueArray(['a', 'b', 'a', 'c']) // ['a', 'b', 'c']
|
|
11
|
+
*/
|
|
12
|
+
export declare function uniqueArray<T>(arr: T[]): T[];
|
|
13
|
+
/**
|
|
14
|
+
* 对象数组去重(根据指定字段)
|
|
15
|
+
* @param arr 对象数组
|
|
16
|
+
* @param key 用于判断重复的字段名
|
|
17
|
+
* @returns 去重后的数组
|
|
18
|
+
* @example
|
|
19
|
+
* uniqueArrayByKey([{id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 1, name: 'c'}], 'id')
|
|
20
|
+
* // [{id: 1, name: 'a'}, {id: 2, name: 'b'}]
|
|
21
|
+
*/
|
|
22
|
+
export declare function uniqueArrayByKey<T extends Record<string, any>>(arr: T[], key: keyof T): T[];
|
|
23
|
+
/**
|
|
24
|
+
* 对象数组去重(根据多个字段)
|
|
25
|
+
* @param arr 对象数组
|
|
26
|
+
* @param keys 用于判断重复的字段名数组
|
|
27
|
+
* @returns 去重后的数组
|
|
28
|
+
* @example
|
|
29
|
+
* uniqueArrayByKeys([{a: 1, b: 2}, {a: 1, b: 3}, {a: 1, b: 2}], ['a', 'b'])
|
|
30
|
+
* // [{a: 1, b: 2}, {a: 1, b: 3}]
|
|
31
|
+
*/
|
|
32
|
+
export declare function uniqueArrayByKeys<T extends Record<string, any>>(arr: T[], keys: Array<keyof T>): T[];
|
|
33
|
+
/**
|
|
34
|
+
* 扁平数组转树形结构
|
|
35
|
+
* @param arr 扁平数组
|
|
36
|
+
* @param options 配置选项
|
|
37
|
+
* @returns 树形结构数组
|
|
38
|
+
* @example
|
|
39
|
+
* const list = [
|
|
40
|
+
* { id: 1, parentId: null, name: 'A' },
|
|
41
|
+
* { id: 2, parentId: 1, name: 'A-1' },
|
|
42
|
+
* { id: 3, parentId: 1, name: 'A-2' },
|
|
43
|
+
* { id: 4, parentId: null, name: 'B' },
|
|
44
|
+
* ];
|
|
45
|
+
* arrayToTree(list)
|
|
46
|
+
* // [
|
|
47
|
+
* // { id: 1, parentId: null, name: 'A', children: [
|
|
48
|
+
* // { id: 2, parentId: 1, name: 'A-1', children: [] },
|
|
49
|
+
* // { id: 3, parentId: 1, name: 'A-2', children: [] }
|
|
50
|
+
* // ]},
|
|
51
|
+
* // { id: 4, parentId: null, name: 'B', children: [] }
|
|
52
|
+
* // ]
|
|
53
|
+
*/
|
|
54
|
+
export declare function arrayToTree<T extends Record<string, any>>(arr: T[], options?: {
|
|
55
|
+
idKey?: string;
|
|
56
|
+
parentKey?: string;
|
|
57
|
+
childrenKey?: string;
|
|
58
|
+
rootParentValue?: any;
|
|
59
|
+
}): T[];
|
|
60
|
+
/**
|
|
61
|
+
* 树形结构转扁平数组
|
|
62
|
+
* @param tree 树形结构数组
|
|
63
|
+
* @param childrenKey 子节点字段名,默认 'children'
|
|
64
|
+
* @returns 扁平数组
|
|
65
|
+
* @example
|
|
66
|
+
* const tree = [
|
|
67
|
+
* { id: 1, name: 'A', children: [
|
|
68
|
+
* { id: 2, name: 'A-1', children: [] },
|
|
69
|
+
* { id: 3, name: 'A-2', children: [] }
|
|
70
|
+
* ]},
|
|
71
|
+
* ];
|
|
72
|
+
* treeToArray(tree)
|
|
73
|
+
* // [{ id: 1, name: 'A' }, { id: 2, name: 'A-1' }, { id: 3, name: 'A-2' }]
|
|
74
|
+
*/
|
|
75
|
+
export declare function treeToArray<T extends Record<string, any>>(tree: T[], childrenKey?: string): T[];
|
|
76
|
+
/**
|
|
77
|
+
* 在树中查找节点
|
|
78
|
+
* @param tree 树形结构数组
|
|
79
|
+
* @param predicate 判断函数
|
|
80
|
+
* @param childrenKey 子节点字段名,默认 'children'
|
|
81
|
+
* @returns 找到的节点或 null
|
|
82
|
+
* @example
|
|
83
|
+
* const tree = [{ id: 1, children: [{ id: 2 }] }];
|
|
84
|
+
* findNodeInTree(tree, node => node.id === 2) // { id: 2 }
|
|
85
|
+
*/
|
|
86
|
+
export declare function findNodeInTree<T extends Record<string, any>>(tree: T[], predicate: (node: T) => boolean, childrenKey?: string): T | null;
|
|
87
|
+
/**
|
|
88
|
+
* 遍历树的所有节点
|
|
89
|
+
* @param tree 树形结构数组
|
|
90
|
+
* @param callback 回调函数
|
|
91
|
+
* @param childrenKey 子节点字段名,默认 'children'
|
|
92
|
+
* @example
|
|
93
|
+
* forEachTree(tree, (node) => console.log(node.name))
|
|
94
|
+
*/
|
|
95
|
+
export declare function forEachTree<T extends Record<string, any>>(tree: T[], callback: (node: T, parent: T | null, level: number) => void, childrenKey?: string): void;
|
|
96
|
+
/**
|
|
97
|
+
* 数组分组
|
|
98
|
+
* @param arr 数组
|
|
99
|
+
* @param key 分组依据的字段名
|
|
100
|
+
* @returns 分组后的对象
|
|
101
|
+
* @example
|
|
102
|
+
* const arr = [
|
|
103
|
+
* { type: 'fruit', name: 'apple' },
|
|
104
|
+
* { type: 'fruit', name: 'banana' },
|
|
105
|
+
* { type: 'vegetable', name: 'carrot' }
|
|
106
|
+
* ];
|
|
107
|
+
* groupBy(arr, 'type')
|
|
108
|
+
* // {
|
|
109
|
+
* // fruit: [{ type: 'fruit', name: 'apple' }, { type: 'fruit', name: 'banana' }],
|
|
110
|
+
* // vegetable: [{ type: 'vegetable', name: 'carrot' }]
|
|
111
|
+
* // }
|
|
112
|
+
*/
|
|
113
|
+
export declare function groupBy<T extends Record<string, any>>(arr: T[], key: keyof T): Record<string, T[]>;
|
|
114
|
+
/**
|
|
115
|
+
* 数组分组(根据函数)
|
|
116
|
+
* @param arr 数组
|
|
117
|
+
* @param fn 分组函数
|
|
118
|
+
* @returns 分组后的对象
|
|
119
|
+
* @example
|
|
120
|
+
* groupByFn([1, 2, 3, 4, 5], num => num % 2 === 0 ? 'even' : 'odd')
|
|
121
|
+
* // { odd: [1, 3, 5], even: [2, 4] }
|
|
122
|
+
*/
|
|
123
|
+
export declare function groupByFn<T>(arr: T[], fn: (item: T) => string): Record<string, T[]>;
|
|
124
|
+
/**
|
|
125
|
+
* 数组排序(根据单个字段)
|
|
126
|
+
* @param arr 数组
|
|
127
|
+
* @param key 排序字段
|
|
128
|
+
* @param order 排序方式,'asc' 升序,'desc' 降序
|
|
129
|
+
* @returns 排序后的数组
|
|
130
|
+
* @example
|
|
131
|
+
* sortBy([{ age: 30 }, { age: 20 }, { age: 25 }], 'age', 'asc')
|
|
132
|
+
* // [{ age: 20 }, { age: 25 }, { age: 30 }]
|
|
133
|
+
*/
|
|
134
|
+
export declare function sortBy<T extends Record<string, any>>(arr: T[], key: keyof T, order?: 'asc' | 'desc'): T[];
|
|
135
|
+
/**
|
|
136
|
+
* 数组排序(根据多个字段)
|
|
137
|
+
* @param arr 数组
|
|
138
|
+
* @param keys 排序字段配置数组
|
|
139
|
+
* @returns 排序后的数组
|
|
140
|
+
* @example
|
|
141
|
+
* sortByMultiple(
|
|
142
|
+
* [{ age: 30, name: 'Bob' }, { age: 20, name: 'Alice' }, { age: 30, name: 'Alice' }],
|
|
143
|
+
* [{ key: 'age', order: 'asc' }, { key: 'name', order: 'asc' }]
|
|
144
|
+
* )
|
|
145
|
+
* // [{ age: 20, name: 'Alice' }, { age: 30, name: 'Alice' }, { age: 30, name: 'Bob' }]
|
|
146
|
+
*/
|
|
147
|
+
export declare function sortByMultiple<T extends Record<string, any>>(arr: T[], keys: Array<{
|
|
148
|
+
key: keyof T;
|
|
149
|
+
order?: 'asc' | 'desc';
|
|
150
|
+
}>): T[];
|
|
151
|
+
/**
|
|
152
|
+
* 数组求和
|
|
153
|
+
* @param arr 数组
|
|
154
|
+
* @param key 可选,对象数组时指定求和的字段
|
|
155
|
+
* @returns 求和结果
|
|
156
|
+
* @example
|
|
157
|
+
* sum([1, 2, 3, 4, 5]) // 15
|
|
158
|
+
* sum([{ price: 10 }, { price: 20 }], 'price') // 30
|
|
159
|
+
*/
|
|
160
|
+
export declare function sum<T>(arr: T[], key?: keyof T): number;
|
|
161
|
+
/**
|
|
162
|
+
* 数组求平均值
|
|
163
|
+
* @param arr 数组
|
|
164
|
+
* @param key 可选,对象数组时指定字段
|
|
165
|
+
* @returns 平均值
|
|
166
|
+
* @example
|
|
167
|
+
* average([1, 2, 3, 4, 5]) // 3
|
|
168
|
+
* average([{ age: 20 }, { age: 30 }], 'age') // 25
|
|
169
|
+
*/
|
|
170
|
+
export declare function average<T>(arr: T[], key?: keyof T): number;
|
|
171
|
+
/**
|
|
172
|
+
* 数组求最大值
|
|
173
|
+
* @param arr 数组
|
|
174
|
+
* @param key 可选,对象数组时指定字段
|
|
175
|
+
* @returns 最大值
|
|
176
|
+
* @example
|
|
177
|
+
* max([1, 2, 3, 4, 5]) // 5
|
|
178
|
+
* max([{ age: 20 }, { age: 30 }], 'age') // 30
|
|
179
|
+
*/
|
|
180
|
+
export declare function max<T>(arr: T[], key?: keyof T): number;
|
|
181
|
+
/**
|
|
182
|
+
* 数组求最小值
|
|
183
|
+
* @param arr 数组
|
|
184
|
+
* @param key 可选,对象数组时指定字段
|
|
185
|
+
* @returns 最小值
|
|
186
|
+
* @example
|
|
187
|
+
* min([1, 2, 3, 4, 5]) // 1
|
|
188
|
+
* min([{ age: 20 }, { age: 30 }], 'age') // 20
|
|
189
|
+
*/
|
|
190
|
+
export declare function min<T>(arr: T[], key?: keyof T): number;
|
|
191
|
+
/**
|
|
192
|
+
* 数组分块
|
|
193
|
+
* @param arr 数组
|
|
194
|
+
* @param size 每块大小
|
|
195
|
+
* @returns 分块后的二维数组
|
|
196
|
+
* @example
|
|
197
|
+
* chunkArray([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
|
|
198
|
+
*/
|
|
199
|
+
export declare function chunkArray<T>(arr: T[], size: number): T[][];
|
|
200
|
+
/**
|
|
201
|
+
* 数组交集
|
|
202
|
+
* @param arr1 数组1
|
|
203
|
+
* @param arr2 数组2
|
|
204
|
+
* @returns 交集数组
|
|
205
|
+
* @example
|
|
206
|
+
* intersection([1, 2, 3], [2, 3, 4]) // [2, 3]
|
|
207
|
+
*/
|
|
208
|
+
export declare function intersection<T>(arr1: T[], arr2: T[]): T[];
|
|
209
|
+
/**
|
|
210
|
+
* 数组并集
|
|
211
|
+
* @param arr1 数组1
|
|
212
|
+
* @param arr2 数组2
|
|
213
|
+
* @returns 并集数组
|
|
214
|
+
* @example
|
|
215
|
+
* union([1, 2, 3], [2, 3, 4]) // [1, 2, 3, 4]
|
|
216
|
+
*/
|
|
217
|
+
export declare function union<T>(arr1: T[], arr2: T[]): T[];
|
|
218
|
+
/**
|
|
219
|
+
* 数组差集
|
|
220
|
+
* @param arr1 数组1
|
|
221
|
+
* @param arr2 数组2
|
|
222
|
+
* @returns 差集数组(arr1 中有但 arr2 中没有的元素)
|
|
223
|
+
* @example
|
|
224
|
+
* difference([1, 2, 3], [2, 3, 4]) // [1]
|
|
225
|
+
*/
|
|
226
|
+
export declare function difference<T>(arr1: T[], arr2: T[]): T[];
|
|
227
|
+
/**
|
|
228
|
+
* 数组打乱
|
|
229
|
+
* @param arr 数组
|
|
230
|
+
* @returns 打乱后的新数组
|
|
231
|
+
* @example
|
|
232
|
+
* shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4]
|
|
233
|
+
*/
|
|
234
|
+
export declare function shuffle<T>(arr: T[]): T[];
|
|
235
|
+
/**
|
|
236
|
+
* 数组随机抽取
|
|
237
|
+
* @param arr 数组
|
|
238
|
+
* @param count 抽取数量
|
|
239
|
+
* @returns 抽取的元素数组
|
|
240
|
+
* @example
|
|
241
|
+
* sample([1, 2, 3, 4, 5], 3) // [2, 4, 1]
|
|
242
|
+
*/
|
|
243
|
+
export declare function sample<T>(arr: T[], count?: number): T[];
|
|
244
|
+
/**
|
|
245
|
+
* 扁平化数组
|
|
246
|
+
* @param arr 多维数组
|
|
247
|
+
* @param depth 扁平化深度,默认 Infinity(完全扁平化)
|
|
248
|
+
* @returns 扁平化后的数组
|
|
249
|
+
* @example
|
|
250
|
+
* flatten([1, [2, [3, [4]]]]) // [1, 2, 3, 4]
|
|
251
|
+
* flatten([1, [2, [3, [4]]]], 2) // [1, 2, 3, [4]]
|
|
252
|
+
*/
|
|
253
|
+
export declare function flatten<T>(arr: any[], depth?: number): T[];
|
|
254
|
+
/**
|
|
255
|
+
* 数组分页
|
|
256
|
+
* @param arr 数组
|
|
257
|
+
* @param page 页码(从 1 开始)
|
|
258
|
+
* @param pageSize 每页大小
|
|
259
|
+
* @returns 分页后的数据对象
|
|
260
|
+
* @example
|
|
261
|
+
* paginate([1, 2, 3, 4, 5], 1, 2)
|
|
262
|
+
* // { data: [1, 2], page: 1, pageSize: 2, total: 5, totalPages: 3 }
|
|
263
|
+
*/
|
|
264
|
+
export declare function paginate<T>(arr: T[], page: number, pageSize: number): {
|
|
265
|
+
data: T[];
|
|
266
|
+
page: number;
|
|
267
|
+
pageSize: number;
|
|
268
|
+
total: number;
|
|
269
|
+
totalPages: number;
|
|
270
|
+
};
|
|
271
|
+
/**
|
|
272
|
+
* 移动数组元素
|
|
273
|
+
* @param arr 数组
|
|
274
|
+
* @param fromIndex 源索引
|
|
275
|
+
* @param toIndex 目标索引
|
|
276
|
+
* @returns 移动后的新数组
|
|
277
|
+
* @example
|
|
278
|
+
* move(['a', 'b', 'c', 'd'], 0, 2) // ['b', 'c', 'a', 'd']
|
|
279
|
+
*/
|
|
280
|
+
export declare function move<T>(arr: T[], fromIndex: number, toIndex: number): T[];
|
|
281
|
+
/**
|
|
282
|
+
* 数组计数(统计每个元素出现的次数)
|
|
283
|
+
* @param arr 数组
|
|
284
|
+
* @returns 计数对象
|
|
285
|
+
* @example
|
|
286
|
+
* countBy(['a', 'b', 'a', 'c', 'a', 'b'])
|
|
287
|
+
* // { a: 3, b: 2, c: 1 }
|
|
288
|
+
*/
|
|
289
|
+
export declare function countBy<T extends string | number>(arr: T[]): Record<T, number>;
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM 操作工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 复制文本到剪贴板
|
|
6
|
+
* @param text 要复制的文本
|
|
7
|
+
* @returns Promise<boolean> 是否成功
|
|
8
|
+
* @example
|
|
9
|
+
* copyToClipboard('Hello World').then(success => {
|
|
10
|
+
* console.log(success ? '复制成功' : '复制失败');
|
|
11
|
+
* });
|
|
12
|
+
*/
|
|
13
|
+
export declare function copyToClipboard(text: string): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* 读取剪贴板内容
|
|
16
|
+
* @returns Promise<string> 剪贴板文本
|
|
17
|
+
* @example
|
|
18
|
+
* const text = await readFromClipboard();
|
|
19
|
+
*/
|
|
20
|
+
export declare function readFromClipboard(): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* 下载文件
|
|
23
|
+
* @param data 文件数据(Blob、File 或 URL)
|
|
24
|
+
* @param filename 文件名
|
|
25
|
+
* @example
|
|
26
|
+
* downloadFile(blob, 'data.xlsx');
|
|
27
|
+
* downloadFile('http://example.com/file.pdf', 'document.pdf');
|
|
28
|
+
*/
|
|
29
|
+
export declare function downloadFile(data: Blob | File | string, filename: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* 下载 JSON 数据为文件
|
|
32
|
+
* @param data JSON 对象
|
|
33
|
+
* @param filename 文件名
|
|
34
|
+
* @example
|
|
35
|
+
* downloadJSON({ name: 'Tom', age: 20 }, 'user.json');
|
|
36
|
+
*/
|
|
37
|
+
export declare function downloadJSON(data: any, filename: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* 下载文本文件
|
|
40
|
+
* @param text 文本内容
|
|
41
|
+
* @param filename 文件名
|
|
42
|
+
* @example
|
|
43
|
+
* downloadText('Hello World', 'hello.txt');
|
|
44
|
+
*/
|
|
45
|
+
export declare function downloadText(text: string, filename: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* 平滑滚动到指定位置
|
|
48
|
+
* @param options 滚动配置
|
|
49
|
+
* @example
|
|
50
|
+
* scrollTo({ top: 0, behavior: 'smooth' }); // 回到顶部
|
|
51
|
+
* scrollTo({ top: 1000, left: 0 }); // 滚动到指定位置
|
|
52
|
+
*/
|
|
53
|
+
export declare function scrollTo(options: {
|
|
54
|
+
top?: number;
|
|
55
|
+
left?: number;
|
|
56
|
+
behavior?: 'auto' | 'smooth';
|
|
57
|
+
}): void;
|
|
58
|
+
/**
|
|
59
|
+
* 滚动到指定元素
|
|
60
|
+
* @param element 元素或选择器
|
|
61
|
+
* @param options 滚动配置
|
|
62
|
+
* @example
|
|
63
|
+
* scrollToElement('#target');
|
|
64
|
+
* scrollToElement(document.getElementById('target'), { behavior: 'smooth', block: 'center' });
|
|
65
|
+
*/
|
|
66
|
+
export declare function scrollToElement(element: HTMLElement | string, options?: ScrollIntoViewOptions): void;
|
|
67
|
+
/**
|
|
68
|
+
* 回到顶部
|
|
69
|
+
* @param smooth 是否平滑滚动
|
|
70
|
+
* @example
|
|
71
|
+
* scrollToTop(); // 平滑滚动
|
|
72
|
+
* scrollToTop(false); // 立即跳转
|
|
73
|
+
*/
|
|
74
|
+
export declare function scrollToTop(smooth?: boolean): void;
|
|
75
|
+
/**
|
|
76
|
+
* 滚动到底部
|
|
77
|
+
* @param smooth 是否平滑滚动
|
|
78
|
+
*/
|
|
79
|
+
export declare function scrollToBottom(smooth?: boolean): void;
|
|
80
|
+
/**
|
|
81
|
+
* 获取滚动位置
|
|
82
|
+
* @returns 滚动位置 { x, y }
|
|
83
|
+
* @example
|
|
84
|
+
* const { x, y } = getScrollPosition();
|
|
85
|
+
*/
|
|
86
|
+
export declare function getScrollPosition(): {
|
|
87
|
+
x: number;
|
|
88
|
+
y: number;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* 获取元素距离文档顶部的距离
|
|
92
|
+
* @param element 元素
|
|
93
|
+
* @returns 距离(像素)
|
|
94
|
+
* @example
|
|
95
|
+
* const offsetTop = getOffsetTop(document.getElementById('target'));
|
|
96
|
+
*/
|
|
97
|
+
export declare function getOffsetTop(element: HTMLElement): number;
|
|
98
|
+
/**
|
|
99
|
+
* 判断元素是否在可视区域
|
|
100
|
+
* @param element 元素
|
|
101
|
+
* @param offset 偏移量,默认 0
|
|
102
|
+
* @returns 是否在可视区域
|
|
103
|
+
* @example
|
|
104
|
+
* if (isInViewport(element)) {
|
|
105
|
+
* // 元素在可视区域内
|
|
106
|
+
* }
|
|
107
|
+
*/
|
|
108
|
+
export declare function isInViewport(element: HTMLElement, offset?: number): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* 判断元素是否部分可见
|
|
111
|
+
* @param element 元素
|
|
112
|
+
* @returns 是否部分可见
|
|
113
|
+
*/
|
|
114
|
+
export declare function isPartiallyVisible(element: HTMLElement): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* 切换全屏
|
|
117
|
+
* @param element 要全屏的元素,默认为 document.documentElement
|
|
118
|
+
* @example
|
|
119
|
+
* toggleFullscreen(); // 切换页面全屏
|
|
120
|
+
* toggleFullscreen(document.getElementById('video')); // 切换视频全屏
|
|
121
|
+
*/
|
|
122
|
+
export declare function toggleFullscreen(element?: HTMLElement): void;
|
|
123
|
+
/**
|
|
124
|
+
* 进入全屏
|
|
125
|
+
* @param element 要全屏的元素
|
|
126
|
+
*/
|
|
127
|
+
export declare function enterFullscreen(element?: HTMLElement): void;
|
|
128
|
+
/**
|
|
129
|
+
* 退出全屏
|
|
130
|
+
*/
|
|
131
|
+
export declare function exitFullscreen(): void;
|
|
132
|
+
/**
|
|
133
|
+
* 判断是否全屏
|
|
134
|
+
* @returns 是否全屏
|
|
135
|
+
*/
|
|
136
|
+
export declare function isFullscreen(): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* 添加类名
|
|
139
|
+
* @param element 元素
|
|
140
|
+
* @param className 类名
|
|
141
|
+
* @example
|
|
142
|
+
* addClass(element, 'active');
|
|
143
|
+
*/
|
|
144
|
+
export declare function addClass(element: HTMLElement, className: string): void;
|
|
145
|
+
/**
|
|
146
|
+
* 移除类名
|
|
147
|
+
* @param element 元素
|
|
148
|
+
* @param className 类名
|
|
149
|
+
*/
|
|
150
|
+
export declare function removeClass(element: HTMLElement, className: string): void;
|
|
151
|
+
/**
|
|
152
|
+
* 切换类名
|
|
153
|
+
* @param element 元素
|
|
154
|
+
* @param className 类名
|
|
155
|
+
*/
|
|
156
|
+
export declare function toggleClass(element: HTMLElement, className: string): void;
|
|
157
|
+
/**
|
|
158
|
+
* 判断是否有指定类名
|
|
159
|
+
* @param element 元素
|
|
160
|
+
* @param className 类名
|
|
161
|
+
* @returns 是否有该类名
|
|
162
|
+
*/
|
|
163
|
+
export declare function hasClass(element: HTMLElement, className: string): boolean;
|
|
164
|
+
/**
|
|
165
|
+
* 获取元素的所有类名
|
|
166
|
+
* @param element 元素
|
|
167
|
+
* @returns 类名数组
|
|
168
|
+
*/
|
|
169
|
+
export declare function getClasses(element: HTMLElement): string[];
|
|
170
|
+
/**
|
|
171
|
+
* 获取元素的尺寸和位置
|
|
172
|
+
* @param element 元素
|
|
173
|
+
* @returns 尺寸和位置信息
|
|
174
|
+
* @example
|
|
175
|
+
* const { width, height, top, left } = getElementRect(element);
|
|
176
|
+
*/
|
|
177
|
+
export declare function getElementRect(element: HTMLElement): DOMRect | null;
|
|
178
|
+
/**
|
|
179
|
+
* 获取元素的宽度(包含内边距和边框)
|
|
180
|
+
* @param element 元素
|
|
181
|
+
* @returns 宽度
|
|
182
|
+
*/
|
|
183
|
+
export declare function getElementWidth(element: HTMLElement): number;
|
|
184
|
+
/**
|
|
185
|
+
* 获取元素的高度(包含内边距和边框)
|
|
186
|
+
* @param element 元素
|
|
187
|
+
* @returns 高度
|
|
188
|
+
*/
|
|
189
|
+
export declare function getElementHeight(element: HTMLElement): number;
|
|
190
|
+
/**
|
|
191
|
+
* 查询单个元素
|
|
192
|
+
* @param selector 选择器
|
|
193
|
+
* @param parent 父元素,默认为 document
|
|
194
|
+
* @returns 元素或 null
|
|
195
|
+
* @example
|
|
196
|
+
* const element = querySelector('#id');
|
|
197
|
+
*/
|
|
198
|
+
export declare function querySelector<T extends HTMLElement = HTMLElement>(selector: string, parent?: Document | HTMLElement): T | null;
|
|
199
|
+
/**
|
|
200
|
+
* 查询多个元素
|
|
201
|
+
* @param selector 选择器
|
|
202
|
+
* @param parent 父元素,默认为 document
|
|
203
|
+
* @returns 元素数组
|
|
204
|
+
* @example
|
|
205
|
+
* const elements = querySelectorAll('.class');
|
|
206
|
+
*/
|
|
207
|
+
export declare function querySelectorAll<T extends HTMLElement = HTMLElement>(selector: string, parent?: Document | HTMLElement): T[];
|
|
208
|
+
/**
|
|
209
|
+
* 获取元素属性
|
|
210
|
+
* @param element 元素
|
|
211
|
+
* @param name 属性名
|
|
212
|
+
* @returns 属性值
|
|
213
|
+
*/
|
|
214
|
+
export declare function getAttribute(element: HTMLElement, name: string): string | null;
|
|
215
|
+
/**
|
|
216
|
+
* 设置元素属性
|
|
217
|
+
* @param element 元素
|
|
218
|
+
* @param name 属性名
|
|
219
|
+
* @param value 属性值
|
|
220
|
+
*/
|
|
221
|
+
export declare function setAttribute(element: HTMLElement, name: string, value: string): void;
|
|
222
|
+
/**
|
|
223
|
+
* 移除元素属性
|
|
224
|
+
* @param element 元素
|
|
225
|
+
* @param name 属性名
|
|
226
|
+
*/
|
|
227
|
+
export declare function removeAttribute(element: HTMLElement, name: string): void;
|
|
228
|
+
/**
|
|
229
|
+
* 判断是否有指定属性
|
|
230
|
+
* @param element 元素
|
|
231
|
+
* @param name 属性名
|
|
232
|
+
* @returns 是否有该属性
|
|
233
|
+
*/
|
|
234
|
+
export declare function hasAttribute(element: HTMLElement, name: string): boolean;
|
|
235
|
+
/**
|
|
236
|
+
* 获取元素的计算样式
|
|
237
|
+
* @param element 元素
|
|
238
|
+
* @param property 样式属性名
|
|
239
|
+
* @returns 样式值
|
|
240
|
+
* @example
|
|
241
|
+
* const color = getStyle(element, 'color');
|
|
242
|
+
*/
|
|
243
|
+
export declare function getStyle(element: HTMLElement, property: string): string;
|
|
244
|
+
/**
|
|
245
|
+
* 设置元素样式
|
|
246
|
+
* @param element 元素
|
|
247
|
+
* @param styles 样式对象
|
|
248
|
+
* @example
|
|
249
|
+
* setStyle(element, { color: 'red', fontSize: '16px' });
|
|
250
|
+
*/
|
|
251
|
+
export declare function setStyle(element: HTMLElement, styles: Partial<CSSStyleDeclaration>): void;
|
|
252
|
+
/**
|
|
253
|
+
* 获取窗口尺寸
|
|
254
|
+
* @returns 窗口宽高
|
|
255
|
+
* @example
|
|
256
|
+
* const { width, height } = getWindowSize();
|
|
257
|
+
*/
|
|
258
|
+
export declare function getWindowSize(): {
|
|
259
|
+
width: number;
|
|
260
|
+
height: number;
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* 获取页面总高度
|
|
264
|
+
* @returns 页面高度
|
|
265
|
+
*/
|
|
266
|
+
export declare function getPageHeight(): number;
|
|
267
|
+
/**
|
|
268
|
+
* 获取页面总宽度
|
|
269
|
+
* @returns 页面宽度
|
|
270
|
+
*/
|
|
271
|
+
export declare function getPageWidth(): number;
|
|
272
|
+
/**
|
|
273
|
+
* 判断是否滚动到底部
|
|
274
|
+
* @param offset 距离底部的偏移量,默认 0
|
|
275
|
+
* @returns 是否到底部
|
|
276
|
+
* @example
|
|
277
|
+
* if (isScrolledToBottom(100)) {
|
|
278
|
+
* // 距离底部100px时触发
|
|
279
|
+
* }
|
|
280
|
+
*/
|
|
281
|
+
export declare function isScrolledToBottom(offset?: number): boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper 工具函数统一导出
|
|
3
|
+
*/
|
|
4
|
+
export * as array from './array';
|
|
5
|
+
export * as dom from './dom';
|
|
6
|
+
export * as number from './number';
|
|
7
|
+
export * as object from './object';
|
|
8
|
+
export * as perf from './perf';
|
|
9
|
+
export * as regex from './regex';
|
|
10
|
+
export * as string from './string';
|
|
11
|
+
export * as url from './url';
|