@base-web-kits/base-tools-web 0.9.8 → 0.9.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.
@@ -0,0 +1,73 @@
1
+ /**
2
+ * 复制文本到剪贴板(兼容移动端和PC)
3
+ * @returns Promise<void> 复制成功时 resolve,失败时 reject。
4
+ * @example
5
+ * await copyText('hello');
6
+ * toast('复制成功');
7
+ */
8
+ export declare function copyText(text: string): Promise<void>;
9
+ /**
10
+ * 复制富文本 HTML 到剪贴板(移动端与 PC)
11
+ * 使用场景:图文混排文章、带样式段落,保留格式粘贴。
12
+ * @param html HTML字符串
13
+ * @example
14
+ * await copyHtml('<p><b>加粗</b> 与 <i>斜体</i></p>');
15
+ */
16
+ export declare function copyHtml(html: string): Promise<void>;
17
+ /**
18
+ * 复制 DOM 节点到剪贴板(移动端与 PC)
19
+ * 使用场景:页面已有区域的可视化复制;元素使用 `outerHTML`,非元素使用其文本内容。
20
+ * @param node DOM 节点(元素或文本节点)
21
+ * @example
22
+ * const el = document.querySelector('#article')!;
23
+ * await copyNode(el);
24
+ */
25
+ export declare function copyNode(node: Node): Promise<void>;
26
+ /**
27
+ * 复制单张图片到剪贴板(移动端与 PC,需浏览器支持 `ClipboardItem`)
28
+ * 使用场景:把本地 `canvas` 或 `Blob` 生成的图片直接粘贴到聊天/文档。
29
+ * @param image 图片源(Blob/Canvas/ImageBitmap)
30
+ * @example
31
+ * const canvas = document.querySelector('canvas')!;
32
+ * await copyImage(canvas);
33
+ */
34
+ export declare function copyImage(image: Blob | HTMLCanvasElement | ImageBitmap): Promise<void>;
35
+ /**
36
+ * 复制 URL 到剪贴板(移动端与 PC)
37
+ * 写入 `text/uri-list` 与 `text/plain`,在支持 URI 列表的应用中可识别为链接。
38
+ * @param url 完整的 URL 字符串
39
+ * @example
40
+ * await copyUrl('https://example.com/page');
41
+ */
42
+ export declare function copyUrl(url: string): Promise<void>;
43
+ /**
44
+ * 复制任意 Blob 到剪贴板(移动端与 PC,需 `ClipboardItem`)
45
+ * 使用场景:原生格式粘贴(如 `image/svg+xml`、`application/pdf` 等)。
46
+ * @param blob 任意 Blob 数据
47
+ * @example
48
+ * const svg = new Blob(['<svg></svg>'], { type: 'image/svg+xml' });
49
+ * await copyBlob(svg);
50
+ */
51
+ export declare function copyBlob(blob: Blob): Promise<void>;
52
+ /**
53
+ * 复制 RTF 富文本到剪贴板(移动端与 PC)
54
+ * 同时写入 `text/plain`,增强与 Office/富文本编辑器的兼容性。
55
+ * @param rtf RTF 字符串(如:`{\\rtf1\\ansi ...}`)
56
+ * @example
57
+ * await copyRtf('{\\rtf1\\ansi Hello \\b World}');
58
+ */
59
+ export declare function copyRtf(rtf: string): Promise<void>;
60
+ /**
61
+ * 复制表格到剪贴板(移动端与 PC)
62
+ * 同时写入多种 MIME:`text/html`(表格)、`text/tab-separated-values`(TSV)、`text/csv`、`text/plain`(TSV)。
63
+ * 使用场景:优化粘贴到 Excel/Google Sheets/Docs 的体验
64
+ * @param rows 二维数组,每行一个数组(字符串/数字)
65
+ * @example
66
+ * await copyTable([
67
+ * ['姓名', '分数'],
68
+ * ['张三', 95],
69
+ * ['李四', 88],
70
+ * ]);
71
+ */
72
+ export declare function copyTable(rows: Array<Array<string | number>>): Promise<void>;
73
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/clipboard/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD1D;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1D;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxD;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,IAAI,GAAG,iBAAiB,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAS5F;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxD;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxD;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAsClF"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 设置 Cookie(路径默认为 `/`)
3
+ * @param name Cookie 名称
4
+ * @param value Cookie 值(内部已使用 `encodeURIComponent` 编码)
5
+ * @param days 过期天数(从当前时间起算)
6
+ * @example
7
+ * setCookie('token', 'abc', 7);
8
+ */
9
+ export declare function setCookie(name: string, value: string, days: number): void;
10
+ /**
11
+ * 获取 Cookie
12
+ * @param name Cookie 名称
13
+ * @returns 若存在返回解码后的值,否则 `null`
14
+ * @example
15
+ * const token = getCookie('token');
16
+ */
17
+ export declare function getCookie(name: string): string | null;
18
+ /**
19
+ * 移除 Cookie(通过设置过期时间为过去)
20
+ * 路径固定为 `/`,确保与默认写入路径一致。
21
+ * @param name Cookie 名称
22
+ * @example
23
+ * removeCookie('token');
24
+ */
25
+ export declare function removeCookie(name: string): void;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/cookie/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAKlE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQrD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,QAExC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * 获取用户代理字符串(UA)
3
+ * @returns navigator.userAgent.toLowerCase();
4
+ */
5
+ export declare function getUA(): string;
6
+ /**
7
+ * 是否为移动端设备(含平板)
8
+ */
9
+ export declare function isMobile(): boolean;
10
+ /**
11
+ * 是否为平板设备
12
+ */
13
+ export declare function isTablet(): boolean;
14
+ /**
15
+ * 是否为 PC 设备
16
+ */
17
+ export declare function isPC(): boolean;
18
+ /**
19
+ * 是否为 iOS 系统
20
+ */
21
+ export declare function isIOS(): boolean;
22
+ /**
23
+ * 是否为 Android 系统
24
+ */
25
+ export declare function isAndroid(): boolean;
26
+ /**
27
+ * 是否微信内置浏览器
28
+ */
29
+ export declare function isWeChat(): boolean;
30
+ /**
31
+ * 是否为 Chrome 浏览器
32
+ * 已排除 Edge、Opera 等基于 Chromium 的浏览器
33
+ */
34
+ export declare function isChrome(): boolean;
35
+ /**
36
+ * 检测是否支持触摸事件
37
+ */
38
+ export declare function isTouchSupported(): boolean;
39
+ /**
40
+ * 获取设备像素比
41
+ */
42
+ export declare function getDevicePixelRatio(): number;
43
+ /**
44
+ * 获取浏览器名字
45
+ */
46
+ export declare function getBrowserName(): string | null;
47
+ /**
48
+ * 获取浏览器版本号
49
+ */
50
+ export declare function getBrowserVersion(): string | null;
51
+ /**
52
+ * 获取操作系统信息
53
+ */
54
+ export declare function getOS(): string;
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/device/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,KAAK,IAAI,MAAM,CAG9B;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAGlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAGlC;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAE9B;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAG/B;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAGnC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAGlC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAGlC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAW9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAoBjD;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,MAAM,CAU9B"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * 获取窗口宽度(不含滚动条)
3
+ * @returns 窗口宽度
4
+ */
5
+ export declare function getWindowWidth(): number;
6
+ /**
7
+ * 获取窗口高度(不含滚动条)
8
+ * @returns 窗口高度
9
+ */
10
+ export declare function getWindowHeight(): number;
11
+ /**
12
+ * 获取文档垂直滚动位置
13
+ * @example
14
+ * const top = getWindowScrollTop();
15
+ */
16
+ export declare function getWindowScrollTop(): number;
17
+ /**
18
+ * 获取文档水平滚动位置
19
+ * @example
20
+ * const left = getWindowScrollLeft();
21
+ */
22
+ export declare function getWindowScrollLeft(): number;
23
+ /**
24
+ * 平滑滚动到指定位置
25
+ * @param top 目标纵向滚动位置
26
+ * @param behavior 滚动行为,默认 'smooth'
27
+ * @example
28
+ * windowScrollTo(0);
29
+ */
30
+ export declare function windowScrollTo(top: number, behavior?: ScrollBehavior): void;
31
+ /**
32
+ * 元素是否在视口内(可设置阈值)
33
+ * @param el 目标元素
34
+ * @param offset 额外判定偏移(像素,正数放宽,负数收紧)
35
+ * @returns 是否在视口内
36
+ */
37
+ export declare function isInViewport(el: Element, offset?: number): boolean;
38
+ /**
39
+ * 锁定页面滚动(移动端/PC)
40
+ * 使用 `body{ position: fixed }` 技术消除滚动条抖动,记录并恢复滚动位置。
41
+ * @example
42
+ * lockBodyScroll();
43
+ */
44
+ export declare function lockBodyScroll(): void;
45
+ /**
46
+ * 解除页面滚动锁定,恢复原始滚动位置
47
+ * @example
48
+ * unlockBodyScroll();
49
+ */
50
+ export declare function unlockBodyScroll(): void;
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/dom/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,WAE7B;AAED;;;GAGG;AACH,wBAAgB,eAAe,WAE9B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,WAIjC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,WAIlC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAyB,QAM9E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,SAAI,WAUnD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,SAW7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,SAY/B"}
package/dist/index.d.ts CHANGED
@@ -1,319 +1,10 @@
1
- import { AxiosResponse } from 'axios';
2
-
3
1
  /**
4
- * 复制文本到剪贴板(兼容移动端和PC)
5
- * @returns Promise<void> 复制成功时 resolve,失败时 reject。
6
- * @example
7
- * await copyText('hello');
8
- * toast('复制成功');
2
+ * 内部统一导出, 外部快捷引入: import {xx} from 'base-tools/web'
9
3
  */
10
- declare function copyText(text: string): Promise<void>;
11
- /**
12
- * 复制富文本 HTML 到剪贴板(移动端与 PC)
13
- * 使用场景:图文混排文章、带样式段落,保留格式粘贴。
14
- * @param html HTML字符串
15
- * @example
16
- * await copyHtml('<p><b>加粗</b> 与 <i>斜体</i></p>');
17
- */
18
- declare function copyHtml(html: string): Promise<void>;
19
- /**
20
- * 复制 DOM 节点到剪贴板(移动端与 PC)
21
- * 使用场景:页面已有区域的可视化复制;元素使用 `outerHTML`,非元素使用其文本内容。
22
- * @param node DOM 节点(元素或文本节点)
23
- * @example
24
- * const el = document.querySelector('#article')!;
25
- * await copyNode(el);
26
- */
27
- declare function copyNode(node: Node): Promise<void>;
28
- /**
29
- * 复制单张图片到剪贴板(移动端与 PC,需浏览器支持 `ClipboardItem`)
30
- * 使用场景:把本地 `canvas` 或 `Blob` 生成的图片直接粘贴到聊天/文档。
31
- * @param image 图片源(Blob/Canvas/ImageBitmap)
32
- * @example
33
- * const canvas = document.querySelector('canvas')!;
34
- * await copyImage(canvas);
35
- */
36
- declare function copyImage(image: Blob | HTMLCanvasElement | ImageBitmap): Promise<void>;
37
- /**
38
- * 复制 URL 到剪贴板(移动端与 PC)
39
- * 写入 `text/uri-list` 与 `text/plain`,在支持 URI 列表的应用中可识别为链接。
40
- * @param url 完整的 URL 字符串
41
- * @example
42
- * await copyUrl('https://example.com/page');
43
- */
44
- declare function copyUrl(url: string): Promise<void>;
45
- /**
46
- * 复制任意 Blob 到剪贴板(移动端与 PC,需 `ClipboardItem`)
47
- * 使用场景:原生格式粘贴(如 `image/svg+xml`、`application/pdf` 等)。
48
- * @param blob 任意 Blob 数据
49
- * @example
50
- * const svg = new Blob(['<svg></svg>'], { type: 'image/svg+xml' });
51
- * await copyBlob(svg);
52
- */
53
- declare function copyBlob(blob: Blob): Promise<void>;
54
- /**
55
- * 复制 RTF 富文本到剪贴板(移动端与 PC)
56
- * 同时写入 `text/plain`,增强与 Office/富文本编辑器的兼容性。
57
- * @param rtf RTF 字符串(如:`{\\rtf1\\ansi ...}`)
58
- * @example
59
- * await copyRtf('{\\rtf1\\ansi Hello \\b World}');
60
- */
61
- declare function copyRtf(rtf: string): Promise<void>;
62
- /**
63
- * 复制表格到剪贴板(移动端与 PC)
64
- * 同时写入多种 MIME:`text/html`(表格)、`text/tab-separated-values`(TSV)、`text/csv`、`text/plain`(TSV)。
65
- * 使用场景:优化粘贴到 Excel/Google Sheets/Docs 的体验
66
- * @param rows 二维数组,每行一个数组(字符串/数字)
67
- * @example
68
- * await copyTable([
69
- * ['姓名', '分数'],
70
- * ['张三', 95],
71
- * ['李四', 88],
72
- * ]);
73
- */
74
- declare function copyTable(rows: Array<Array<string | number>>): Promise<void>;
75
-
76
- /**
77
- * 设置 Cookie(路径默认为 `/`)
78
- * @param name Cookie 名称
79
- * @param value Cookie 值(内部已使用 `encodeURIComponent` 编码)
80
- * @param days 过期天数(从当前时间起算)
81
- * @example
82
- * setCookie('token', 'abc', 7);
83
- */
84
- declare function setCookie(name: string, value: string, days: number): void;
85
- /**
86
- * 获取 Cookie
87
- * @param name Cookie 名称
88
- * @returns 若存在返回解码后的值,否则 `null`
89
- * @example
90
- * const token = getCookie('token');
91
- */
92
- declare function getCookie(name: string): string | null;
93
- /**
94
- * 移除 Cookie(通过设置过期时间为过去)
95
- * 路径固定为 `/`,确保与默认写入路径一致。
96
- * @param name Cookie 名称
97
- * @example
98
- * removeCookie('token');
99
- */
100
- declare function removeCookie(name: string): void;
101
-
102
- /**
103
- * 下载文件
104
- * @param url 完整的下载地址 | base64字符串 | Blob对象
105
- * @param fileName 自定义文件名(需含后缀)
106
- * @example
107
- * download('https://xx/xx.pdf');
108
- * download('https://xx/xx.pdf', 'xx.pdf');
109
- * download(blob, '图片.jpg');
110
- */
111
- declare function download(url: string | Blob, fileName?: string): Promise<void>;
112
- /**
113
- * 解析Axios返回的Blob数据
114
- * @param res Axios响应对象 (responseType='blob')
115
- * @returns 包含blob数据和文件名的对象 { blob, fileName }
116
- * @example
117
- * const res = await axios.get(url, { responseType: 'blob' });
118
- * const { blob, fileName } = await parseAxiosBlob(res);
119
- * download(blob, fileName);
120
- */
121
- declare function parseAxiosBlob(res: AxiosResponse<Blob>): Promise<{
122
- blob: Blob;
123
- fileName: string;
124
- }>;
125
- /**
126
- * 获取文件名
127
- * @param disposition content-disposition头值
128
- * @returns content-disposition中的filename
129
- * @example
130
- * const fileName = getDispositionFileName(headers['content-disposition']);
131
- */
132
- declare function getDispositionFileName(disposition?: string): string;
133
- /**
134
- * 动态加载 JS(重复执行不会重复加载,内部已排重)
135
- * @param src js 文件路径
136
- * @param attrs 可选的脚本属性,如 async、defer、crossOrigin
137
- * @example
138
- * await loadJs('https://xx/xx.js');
139
- * await loadJs('/a.js', { defer: true });
140
- */
141
- declare function loadJs(src: string, attrs?: Pick<HTMLScriptElement, 'async' | 'defer' | 'crossOrigin'>): Promise<void>;
142
- /**
143
- * 判断某个 JS 地址是否已在页面中加载过
144
- * @param src 相对、绝对路径的 JS 地址
145
- * @returns 是否已加载过
146
- * @example
147
- * hasJs('https://xx/xx.js'); // boolean
148
- * hasJs('/xx.js'); // boolean
149
- * hasJs('xx.js'); // boolean
150
- */
151
- declare function hasJs(src: string): boolean;
152
- /**
153
- * 动态加载 CSS(重复执行不会重复加载,内部已排重)
154
- * @param href css 文件地址
155
- * @param attrs 可选属性,如 crossOrigin、media
156
- * @example
157
- * await loadCss('https://xx/xx.css');
158
- * await loadCss('/a.css', { media: 'print' });
159
- */
160
- declare function loadCss(href: string, attrs?: Pick<HTMLLinkElement, 'crossOrigin' | 'media'>): Promise<void>;
161
- /**
162
- * 判断某个 CSS 地址是否已在页面中加载过
163
- * @param href 相对、绝对路径的 CSS 地址
164
- * @returns 是否已加载过
165
- * @example
166
- * hasCss('https://xx/xx.css'); // boolean
167
- */
168
- declare function hasCss(href: string): boolean;
169
- /**
170
- * 预加载图片
171
- * @param src 图片地址
172
- * @returns Promise<HTMLImageElement>
173
- * @example
174
- * await preloadImage('/a.png');
175
- */
176
- declare function preloadImage(src: string): Promise<HTMLImageElement>;
177
-
178
- /**
179
- * 写入 localStorage(自动 JSON 序列化)
180
- * 当 `value` 为 `null` 或 `undefined` 时,会移除该键。
181
- * 支持保存:对象、数组、字符串、数字、布尔值。
182
- * @param key 键名
183
- * @param value 任意可序列化的值
184
- * @param days 过期天数(从当前时间起算)
185
- * @example
186
- * setLocalStorage('user', { id: 1, name: 'Alice' }); // 对象
187
- * setLocalStorage('age', 18); // 数字
188
- * setLocalStorage('vip', true); // 布尔值
189
- * setLocalStorage('token', 'abc123', 7); // 7 天后过期
190
- */
191
- declare function setLocalStorage(key: string, value: unknown, days?: number): void;
192
- /**
193
- * 读取 localStorage(自动 JSON 反序列化)
194
- * 若值为合法 JSON,则返回反序列化后的数据;
195
- * 若值非 JSON(如外部写入的纯字符串),则原样返回字符串。
196
- * 不存在时返回 `null`。
197
- * @param key 键名
198
- * @returns 解析后的值或 `null`
199
- * @example
200
- * const user = getLocalStorage<{ id: number; name: string }>('user');
201
- * const age = getLocalStorage<number>('age');
202
- * const vip = getLocalStorage<boolean>('vip');
203
- */
204
- declare function getLocalStorage<T = unknown>(key: string): T | null;
205
- /**
206
- * 移除 localStorage 指定键
207
- * @param key 键名
208
- * @example
209
- * removeLocalStorage('token');
210
- */
211
- declare function removeLocalStorage(key: string): void;
212
-
213
- /**
214
- * 获取窗口宽度(不含滚动条)
215
- * @returns 窗口宽度
216
- */
217
- declare function getWindowWidth(): number;
218
- /**
219
- * 获取窗口高度(不含滚动条)
220
- * @returns 窗口高度
221
- */
222
- declare function getWindowHeight(): number;
223
- /**
224
- * 获取文档垂直滚动位置
225
- * @example
226
- * const top = getWindowScrollTop();
227
- */
228
- declare function getWindowScrollTop(): number;
229
- /**
230
- * 获取文档水平滚动位置
231
- * @example
232
- * const left = getWindowScrollLeft();
233
- */
234
- declare function getWindowScrollLeft(): number;
235
- /**
236
- * 平滑滚动到指定位置
237
- * @param top 目标纵向滚动位置
238
- * @param behavior 滚动行为,默认 'smooth'
239
- * @example
240
- * windowScrollTo(0);
241
- */
242
- declare function windowScrollTo(top: number, behavior?: ScrollBehavior): void;
243
- /**
244
- * 元素是否在视口内(可设置阈值)
245
- * @param el 目标元素
246
- * @param offset 额外判定偏移(像素,正数放宽,负数收紧)
247
- * @returns 是否在视口内
248
- */
249
- declare function isInViewport(el: Element, offset?: number): boolean;
250
- /**
251
- * 锁定页面滚动(移动端/PC)
252
- * 使用 `body{ position: fixed }` 技术消除滚动条抖动,记录并恢复滚动位置。
253
- * @example
254
- * lockBodyScroll();
255
- */
256
- declare function lockBodyScroll(): void;
257
- /**
258
- * 解除页面滚动锁定,恢复原始滚动位置
259
- * @example
260
- * unlockBodyScroll();
261
- */
262
- declare function unlockBodyScroll(): void;
263
-
264
- /**
265
- * 获取用户代理字符串(UA)
266
- * @returns navigator.userAgent.toLowerCase();
267
- */
268
- declare function getUA(): string;
269
- /**
270
- * 是否为移动端设备(含平板)
271
- */
272
- declare function isMobile(): boolean;
273
- /**
274
- * 是否为平板设备
275
- */
276
- declare function isTablet(): boolean;
277
- /**
278
- * 是否为 PC 设备
279
- */
280
- declare function isPC(): boolean;
281
- /**
282
- * 是否为 iOS 系统
283
- */
284
- declare function isIOS(): boolean;
285
- /**
286
- * 是否为 Android 系统
287
- */
288
- declare function isAndroid(): boolean;
289
- /**
290
- * 是否微信内置浏览器
291
- */
292
- declare function isWeChat(): boolean;
293
- /**
294
- * 是否为 Chrome 浏览器
295
- * 已排除 Edge、Opera 等基于 Chromium 的浏览器
296
- */
297
- declare function isChrome(): boolean;
298
- /**
299
- * 检测是否支持触摸事件
300
- */
301
- declare function isTouchSupported(): boolean;
302
- /**
303
- * 获取设备像素比
304
- */
305
- declare function getDevicePixelRatio(): number;
306
- /**
307
- * 获取浏览器名字
308
- */
309
- declare function getBrowserName(): string | null;
310
- /**
311
- * 获取浏览器版本号
312
- */
313
- declare function getBrowserVersion(): string | null;
314
- /**
315
- * 获取操作系统信息
316
- */
317
- declare function getOS(): string;
318
-
319
- export { copyBlob, copyHtml, copyImage, copyNode, copyRtf, copyTable, copyText, copyUrl, download, getBrowserName, getBrowserVersion, getCookie, getDevicePixelRatio, getDispositionFileName, getLocalStorage, getOS, getUA, getWindowHeight, getWindowScrollLeft, getWindowScrollTop, getWindowWidth, hasCss, hasJs, isAndroid, isChrome, isIOS, isInViewport, isMobile, isPC, isTablet, isTouchSupported, isWeChat, loadCss, loadJs, lockBodyScroll, parseAxiosBlob, preloadImage, removeCookie, removeLocalStorage, setCookie, setLocalStorage, unlockBodyScroll, windowScrollTo };
4
+ export * from './clipboard';
5
+ export * from './cookie';
6
+ export * from './load';
7
+ export * from './storage';
8
+ export * from './dom';
9
+ export * from './device';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/web/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,77 @@
1
+ import type { AxiosResponse } from 'axios';
2
+ /**
3
+ * 下载文件
4
+ * @param url 完整的下载地址 | base64字符串 | Blob对象
5
+ * @param fileName 自定义文件名(需含后缀)
6
+ * @example
7
+ * download('https://xx/xx.pdf');
8
+ * download('https://xx/xx.pdf', 'xx.pdf');
9
+ * download(blob, '图片.jpg');
10
+ */
11
+ export declare function download(url: string | Blob, fileName?: string): Promise<void>;
12
+ /**
13
+ * 解析Axios返回的Blob数据
14
+ * @param res Axios响应对象 (responseType='blob')
15
+ * @returns 包含blob数据和文件名的对象 { blob, fileName }
16
+ * @example
17
+ * const res = await axios.get(url, { responseType: 'blob' });
18
+ * const { blob, fileName } = await parseAxiosBlob(res);
19
+ * download(blob, fileName);
20
+ */
21
+ export declare function parseAxiosBlob(res: AxiosResponse<Blob>): Promise<{
22
+ blob: Blob;
23
+ fileName: string;
24
+ }>;
25
+ /**
26
+ * 获取文件名
27
+ * @param disposition content-disposition头值
28
+ * @returns content-disposition中的filename
29
+ * @example
30
+ * const fileName = getDispositionFileName(headers['content-disposition']);
31
+ */
32
+ export declare function getDispositionFileName(disposition?: string): string;
33
+ /**
34
+ * 动态加载 JS(重复执行不会重复加载,内部已排重)
35
+ * @param src js 文件路径
36
+ * @param attrs 可选的脚本属性,如 async、defer、crossOrigin
37
+ * @example
38
+ * await loadJs('https://xx/xx.js');
39
+ * await loadJs('/a.js', { defer: true });
40
+ */
41
+ export declare function loadJs(src: string, attrs?: Pick<HTMLScriptElement, 'async' | 'defer' | 'crossOrigin'>): Promise<void>;
42
+ /**
43
+ * 判断某个 JS 地址是否已在页面中加载过
44
+ * @param src 相对、绝对路径的 JS 地址
45
+ * @returns 是否已加载过
46
+ * @example
47
+ * hasJs('https://xx/xx.js'); // boolean
48
+ * hasJs('/xx.js'); // boolean
49
+ * hasJs('xx.js'); // boolean
50
+ */
51
+ export declare function hasJs(src: string): boolean;
52
+ /**
53
+ * 动态加载 CSS(重复执行不会重复加载,内部已排重)
54
+ * @param href css 文件地址
55
+ * @param attrs 可选属性,如 crossOrigin、media
56
+ * @example
57
+ * await loadCss('https://xx/xx.css');
58
+ * await loadCss('/a.css', { media: 'print' });
59
+ */
60
+ export declare function loadCss(href: string, attrs?: Pick<HTMLLinkElement, 'crossOrigin' | 'media'>): Promise<void>;
61
+ /**
62
+ * 判断某个 CSS 地址是否已在页面中加载过
63
+ * @param href 相对、绝对路径的 CSS 地址
64
+ * @returns 是否已加载过
65
+ * @example
66
+ * hasCss('https://xx/xx.css'); // boolean
67
+ */
68
+ export declare function hasCss(href: string): boolean;
69
+ /**
70
+ * 预加载图片
71
+ * @param src 图片地址
72
+ * @returns Promise<HTMLImageElement>
73
+ * @example
74
+ * await preloadImage('/a.png');
75
+ */
76
+ export declare function preloadImage(src: string): Promise<HTMLImageElement>;
77
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/load/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,SAAK,iBAyC/D;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC;;;GAc5D;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,UAkB1D;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,OAAO,GAAG,aAAa,CAAC,iBAuBnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,WAOhC;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,GAAG,OAAO,CAAC,iBAuBvD;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,WAOlC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,6BAOvC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 写入 localStorage(自动 JSON 序列化)
3
+ * 当 `value` 为 `null` 或 `undefined` 时,会移除该键。
4
+ * 支持保存:对象、数组、字符串、数字、布尔值。
5
+ * @param key 键名
6
+ * @param value 任意可序列化的值
7
+ * @param days 过期天数(从当前时间起算)
8
+ * @example
9
+ * setLocalStorage('user', { id: 1, name: 'Alice' }); // 对象
10
+ * setLocalStorage('age', 18); // 数字
11
+ * setLocalStorage('vip', true); // 布尔值
12
+ * setLocalStorage('token', 'abc123', 7); // 7 天后过期
13
+ */
14
+ export declare function setLocalStorage(key: string, value: unknown, days?: number): void;
15
+ /**
16
+ * 读取 localStorage(自动 JSON 反序列化)
17
+ * 若值为合法 JSON,则返回反序列化后的数据;
18
+ * 若值非 JSON(如外部写入的纯字符串),则原样返回字符串。
19
+ * 不存在时返回 `null`。
20
+ * @param key 键名
21
+ * @returns 解析后的值或 `null`
22
+ * @example
23
+ * const user = getLocalStorage<{ id: number; name: string }>('user');
24
+ * const age = getLocalStorage<number>('age');
25
+ * const vip = getLocalStorage<boolean>('vip');
26
+ */
27
+ export declare function getLocalStorage<T = unknown>(key: string): T | null;
28
+ /**
29
+ * 移除 localStorage 指定键
30
+ * @param key 键名
31
+ * @example
32
+ * removeLocalStorage('token');
33
+ */
34
+ export declare function removeLocalStorage(key: string): void;
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/storage/index.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,QAiBzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAiBlE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,QAE7C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base-web-kits/base-tools-web",
3
- "version": "0.9.8",
3
+ "version": "0.9.9",
4
4
  "sideEffects": false,
5
5
  "description": "Independent Web utilities package built from src/web.",
6
6
  "keywords": [
package/dist/index.d.cts DELETED
@@ -1,319 +0,0 @@
1
- import { AxiosResponse } from 'axios';
2
-
3
- /**
4
- * 复制文本到剪贴板(兼容移动端和PC)
5
- * @returns Promise<void> 复制成功时 resolve,失败时 reject。
6
- * @example
7
- * await copyText('hello');
8
- * toast('复制成功');
9
- */
10
- declare function copyText(text: string): Promise<void>;
11
- /**
12
- * 复制富文本 HTML 到剪贴板(移动端与 PC)
13
- * 使用场景:图文混排文章、带样式段落,保留格式粘贴。
14
- * @param html HTML字符串
15
- * @example
16
- * await copyHtml('<p><b>加粗</b> 与 <i>斜体</i></p>');
17
- */
18
- declare function copyHtml(html: string): Promise<void>;
19
- /**
20
- * 复制 DOM 节点到剪贴板(移动端与 PC)
21
- * 使用场景:页面已有区域的可视化复制;元素使用 `outerHTML`,非元素使用其文本内容。
22
- * @param node DOM 节点(元素或文本节点)
23
- * @example
24
- * const el = document.querySelector('#article')!;
25
- * await copyNode(el);
26
- */
27
- declare function copyNode(node: Node): Promise<void>;
28
- /**
29
- * 复制单张图片到剪贴板(移动端与 PC,需浏览器支持 `ClipboardItem`)
30
- * 使用场景:把本地 `canvas` 或 `Blob` 生成的图片直接粘贴到聊天/文档。
31
- * @param image 图片源(Blob/Canvas/ImageBitmap)
32
- * @example
33
- * const canvas = document.querySelector('canvas')!;
34
- * await copyImage(canvas);
35
- */
36
- declare function copyImage(image: Blob | HTMLCanvasElement | ImageBitmap): Promise<void>;
37
- /**
38
- * 复制 URL 到剪贴板(移动端与 PC)
39
- * 写入 `text/uri-list` 与 `text/plain`,在支持 URI 列表的应用中可识别为链接。
40
- * @param url 完整的 URL 字符串
41
- * @example
42
- * await copyUrl('https://example.com/page');
43
- */
44
- declare function copyUrl(url: string): Promise<void>;
45
- /**
46
- * 复制任意 Blob 到剪贴板(移动端与 PC,需 `ClipboardItem`)
47
- * 使用场景:原生格式粘贴(如 `image/svg+xml`、`application/pdf` 等)。
48
- * @param blob 任意 Blob 数据
49
- * @example
50
- * const svg = new Blob(['<svg></svg>'], { type: 'image/svg+xml' });
51
- * await copyBlob(svg);
52
- */
53
- declare function copyBlob(blob: Blob): Promise<void>;
54
- /**
55
- * 复制 RTF 富文本到剪贴板(移动端与 PC)
56
- * 同时写入 `text/plain`,增强与 Office/富文本编辑器的兼容性。
57
- * @param rtf RTF 字符串(如:`{\\rtf1\\ansi ...}`)
58
- * @example
59
- * await copyRtf('{\\rtf1\\ansi Hello \\b World}');
60
- */
61
- declare function copyRtf(rtf: string): Promise<void>;
62
- /**
63
- * 复制表格到剪贴板(移动端与 PC)
64
- * 同时写入多种 MIME:`text/html`(表格)、`text/tab-separated-values`(TSV)、`text/csv`、`text/plain`(TSV)。
65
- * 使用场景:优化粘贴到 Excel/Google Sheets/Docs 的体验
66
- * @param rows 二维数组,每行一个数组(字符串/数字)
67
- * @example
68
- * await copyTable([
69
- * ['姓名', '分数'],
70
- * ['张三', 95],
71
- * ['李四', 88],
72
- * ]);
73
- */
74
- declare function copyTable(rows: Array<Array<string | number>>): Promise<void>;
75
-
76
- /**
77
- * 设置 Cookie(路径默认为 `/`)
78
- * @param name Cookie 名称
79
- * @param value Cookie 值(内部已使用 `encodeURIComponent` 编码)
80
- * @param days 过期天数(从当前时间起算)
81
- * @example
82
- * setCookie('token', 'abc', 7);
83
- */
84
- declare function setCookie(name: string, value: string, days: number): void;
85
- /**
86
- * 获取 Cookie
87
- * @param name Cookie 名称
88
- * @returns 若存在返回解码后的值,否则 `null`
89
- * @example
90
- * const token = getCookie('token');
91
- */
92
- declare function getCookie(name: string): string | null;
93
- /**
94
- * 移除 Cookie(通过设置过期时间为过去)
95
- * 路径固定为 `/`,确保与默认写入路径一致。
96
- * @param name Cookie 名称
97
- * @example
98
- * removeCookie('token');
99
- */
100
- declare function removeCookie(name: string): void;
101
-
102
- /**
103
- * 下载文件
104
- * @param url 完整的下载地址 | base64字符串 | Blob对象
105
- * @param fileName 自定义文件名(需含后缀)
106
- * @example
107
- * download('https://xx/xx.pdf');
108
- * download('https://xx/xx.pdf', 'xx.pdf');
109
- * download(blob, '图片.jpg');
110
- */
111
- declare function download(url: string | Blob, fileName?: string): Promise<void>;
112
- /**
113
- * 解析Axios返回的Blob数据
114
- * @param res Axios响应对象 (responseType='blob')
115
- * @returns 包含blob数据和文件名的对象 { blob, fileName }
116
- * @example
117
- * const res = await axios.get(url, { responseType: 'blob' });
118
- * const { blob, fileName } = await parseAxiosBlob(res);
119
- * download(blob, fileName);
120
- */
121
- declare function parseAxiosBlob(res: AxiosResponse<Blob>): Promise<{
122
- blob: Blob;
123
- fileName: string;
124
- }>;
125
- /**
126
- * 获取文件名
127
- * @param disposition content-disposition头值
128
- * @returns content-disposition中的filename
129
- * @example
130
- * const fileName = getDispositionFileName(headers['content-disposition']);
131
- */
132
- declare function getDispositionFileName(disposition?: string): string;
133
- /**
134
- * 动态加载 JS(重复执行不会重复加载,内部已排重)
135
- * @param src js 文件路径
136
- * @param attrs 可选的脚本属性,如 async、defer、crossOrigin
137
- * @example
138
- * await loadJs('https://xx/xx.js');
139
- * await loadJs('/a.js', { defer: true });
140
- */
141
- declare function loadJs(src: string, attrs?: Pick<HTMLScriptElement, 'async' | 'defer' | 'crossOrigin'>): Promise<void>;
142
- /**
143
- * 判断某个 JS 地址是否已在页面中加载过
144
- * @param src 相对、绝对路径的 JS 地址
145
- * @returns 是否已加载过
146
- * @example
147
- * hasJs('https://xx/xx.js'); // boolean
148
- * hasJs('/xx.js'); // boolean
149
- * hasJs('xx.js'); // boolean
150
- */
151
- declare function hasJs(src: string): boolean;
152
- /**
153
- * 动态加载 CSS(重复执行不会重复加载,内部已排重)
154
- * @param href css 文件地址
155
- * @param attrs 可选属性,如 crossOrigin、media
156
- * @example
157
- * await loadCss('https://xx/xx.css');
158
- * await loadCss('/a.css', { media: 'print' });
159
- */
160
- declare function loadCss(href: string, attrs?: Pick<HTMLLinkElement, 'crossOrigin' | 'media'>): Promise<void>;
161
- /**
162
- * 判断某个 CSS 地址是否已在页面中加载过
163
- * @param href 相对、绝对路径的 CSS 地址
164
- * @returns 是否已加载过
165
- * @example
166
- * hasCss('https://xx/xx.css'); // boolean
167
- */
168
- declare function hasCss(href: string): boolean;
169
- /**
170
- * 预加载图片
171
- * @param src 图片地址
172
- * @returns Promise<HTMLImageElement>
173
- * @example
174
- * await preloadImage('/a.png');
175
- */
176
- declare function preloadImage(src: string): Promise<HTMLImageElement>;
177
-
178
- /**
179
- * 写入 localStorage(自动 JSON 序列化)
180
- * 当 `value` 为 `null` 或 `undefined` 时,会移除该键。
181
- * 支持保存:对象、数组、字符串、数字、布尔值。
182
- * @param key 键名
183
- * @param value 任意可序列化的值
184
- * @param days 过期天数(从当前时间起算)
185
- * @example
186
- * setLocalStorage('user', { id: 1, name: 'Alice' }); // 对象
187
- * setLocalStorage('age', 18); // 数字
188
- * setLocalStorage('vip', true); // 布尔值
189
- * setLocalStorage('token', 'abc123', 7); // 7 天后过期
190
- */
191
- declare function setLocalStorage(key: string, value: unknown, days?: number): void;
192
- /**
193
- * 读取 localStorage(自动 JSON 反序列化)
194
- * 若值为合法 JSON,则返回反序列化后的数据;
195
- * 若值非 JSON(如外部写入的纯字符串),则原样返回字符串。
196
- * 不存在时返回 `null`。
197
- * @param key 键名
198
- * @returns 解析后的值或 `null`
199
- * @example
200
- * const user = getLocalStorage<{ id: number; name: string }>('user');
201
- * const age = getLocalStorage<number>('age');
202
- * const vip = getLocalStorage<boolean>('vip');
203
- */
204
- declare function getLocalStorage<T = unknown>(key: string): T | null;
205
- /**
206
- * 移除 localStorage 指定键
207
- * @param key 键名
208
- * @example
209
- * removeLocalStorage('token');
210
- */
211
- declare function removeLocalStorage(key: string): void;
212
-
213
- /**
214
- * 获取窗口宽度(不含滚动条)
215
- * @returns 窗口宽度
216
- */
217
- declare function getWindowWidth(): number;
218
- /**
219
- * 获取窗口高度(不含滚动条)
220
- * @returns 窗口高度
221
- */
222
- declare function getWindowHeight(): number;
223
- /**
224
- * 获取文档垂直滚动位置
225
- * @example
226
- * const top = getWindowScrollTop();
227
- */
228
- declare function getWindowScrollTop(): number;
229
- /**
230
- * 获取文档水平滚动位置
231
- * @example
232
- * const left = getWindowScrollLeft();
233
- */
234
- declare function getWindowScrollLeft(): number;
235
- /**
236
- * 平滑滚动到指定位置
237
- * @param top 目标纵向滚动位置
238
- * @param behavior 滚动行为,默认 'smooth'
239
- * @example
240
- * windowScrollTo(0);
241
- */
242
- declare function windowScrollTo(top: number, behavior?: ScrollBehavior): void;
243
- /**
244
- * 元素是否在视口内(可设置阈值)
245
- * @param el 目标元素
246
- * @param offset 额外判定偏移(像素,正数放宽,负数收紧)
247
- * @returns 是否在视口内
248
- */
249
- declare function isInViewport(el: Element, offset?: number): boolean;
250
- /**
251
- * 锁定页面滚动(移动端/PC)
252
- * 使用 `body{ position: fixed }` 技术消除滚动条抖动,记录并恢复滚动位置。
253
- * @example
254
- * lockBodyScroll();
255
- */
256
- declare function lockBodyScroll(): void;
257
- /**
258
- * 解除页面滚动锁定,恢复原始滚动位置
259
- * @example
260
- * unlockBodyScroll();
261
- */
262
- declare function unlockBodyScroll(): void;
263
-
264
- /**
265
- * 获取用户代理字符串(UA)
266
- * @returns navigator.userAgent.toLowerCase();
267
- */
268
- declare function getUA(): string;
269
- /**
270
- * 是否为移动端设备(含平板)
271
- */
272
- declare function isMobile(): boolean;
273
- /**
274
- * 是否为平板设备
275
- */
276
- declare function isTablet(): boolean;
277
- /**
278
- * 是否为 PC 设备
279
- */
280
- declare function isPC(): boolean;
281
- /**
282
- * 是否为 iOS 系统
283
- */
284
- declare function isIOS(): boolean;
285
- /**
286
- * 是否为 Android 系统
287
- */
288
- declare function isAndroid(): boolean;
289
- /**
290
- * 是否微信内置浏览器
291
- */
292
- declare function isWeChat(): boolean;
293
- /**
294
- * 是否为 Chrome 浏览器
295
- * 已排除 Edge、Opera 等基于 Chromium 的浏览器
296
- */
297
- declare function isChrome(): boolean;
298
- /**
299
- * 检测是否支持触摸事件
300
- */
301
- declare function isTouchSupported(): boolean;
302
- /**
303
- * 获取设备像素比
304
- */
305
- declare function getDevicePixelRatio(): number;
306
- /**
307
- * 获取浏览器名字
308
- */
309
- declare function getBrowserName(): string | null;
310
- /**
311
- * 获取浏览器版本号
312
- */
313
- declare function getBrowserVersion(): string | null;
314
- /**
315
- * 获取操作系统信息
316
- */
317
- declare function getOS(): string;
318
-
319
- export { copyBlob, copyHtml, copyImage, copyNode, copyRtf, copyTable, copyText, copyUrl, download, getBrowserName, getBrowserVersion, getCookie, getDevicePixelRatio, getDispositionFileName, getLocalStorage, getOS, getUA, getWindowHeight, getWindowScrollLeft, getWindowScrollTop, getWindowWidth, hasCss, hasJs, isAndroid, isChrome, isIOS, isInViewport, isMobile, isPC, isTablet, isTouchSupported, isWeChat, loadCss, loadJs, lockBodyScroll, parseAxiosBlob, preloadImage, removeCookie, removeLocalStorage, setCookie, setLocalStorage, unlockBodyScroll, windowScrollTo };