ms-vite-plugin 1.4.49 → 1.4.51

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 (42) hide show
  1. package/dist/build.js +1 -1
  2. package/dist/cli.js +1 -1
  3. package/dist/mcp/doc-tools.js +1 -1
  4. package/dist/mcp/docs-service.js +1 -1
  5. package/dist/mcp/types.d.ts +1 -1
  6. package/dist/mcp/types.js +1 -1
  7. package/dist/project.js +1 -1
  8. package/docs/AGENTS.md +3 -2
  9. package/docs/SKILL.md +2 -1
  10. package/docs/apilua/action.md +1013 -0
  11. package/docs/apilua/appleocr.md +281 -0
  12. package/docs/apilua/cloud.md +183 -0
  13. package/docs/apilua/config.md +181 -0
  14. package/docs/apilua/cryptoUtils.md +253 -0
  15. package/docs/apilua/device.md +485 -0
  16. package/docs/apilua/dotocr.md +230 -0
  17. package/docs/apilua/file.md +554 -0
  18. package/docs/apilua/global.md +654 -0
  19. package/docs/apilua/hid.md +1126 -0
  20. package/docs/apilua/hotUpdate.md +167 -0
  21. package/docs/apilua/http.md +427 -0
  22. package/docs/apilua/image.md +1177 -0
  23. package/docs/apilua/ime.md +283 -0
  24. package/docs/apilua/logger.md +294 -0
  25. package/docs/apilua/media.md +283 -0
  26. package/docs/apilua/mysql.md +445 -0
  27. package/docs/apilua/netCard.md +224 -0
  28. package/docs/apilua/node.md +264 -0
  29. package/docs/apilua/opencv.md +870 -0
  30. package/docs/apilua/paddleocr.md +324 -0
  31. package/docs/apilua/pip.md +359 -0
  32. package/docs/apilua/system.md +686 -0
  33. package/docs/apilua/tomatoocr.md +461 -0
  34. package/docs/apilua/tts.md +330 -0
  35. package/docs/apilua/ui.md +1033 -0
  36. package/docs/apilua/utils.md +222 -0
  37. package/docs/apilua/yolo.md +324 -0
  38. package/docs/apilua/yolocls.md +276 -0
  39. package/docs/mcp-agent-description.md +5 -4
  40. package/docs/quick/vscode/createProject.md +84 -0
  41. package/docs/quick/vscode/packProject.md +17 -0
  42. package/package.json +2 -1
@@ -0,0 +1,324 @@
1
+ # PaddleOCR 模块 (PaddleOCR)
2
+
3
+ PaddleOCR 模块基于百度飞桨 PaddleOCR 技术,提供强大的光学字符识别(OCR)功能,支持中英文文本识别,可用于屏幕截图、图片文件等多种输入源的文字识别。
4
+
5
+ ## 功能概览
6
+
7
+ - **自动加载**: 识别方法会自动加载所需模型,无需先手动加载
8
+ - **PP-OCRv5**: 可通过 `loadV5` 手动加载 PP-OCRv5 模型
9
+ - **多源识别**: 支持屏幕截图、图片文件、URL 等多种输入源
10
+ - **区域识别**: 支持指定区域的精确文字识别
11
+ - **结构化结果**: 提供详细的文本位置、置信度和方向信息
12
+ - **资源释放**: 可在需要时释放 OCR 资源
13
+
14
+ ## 数据类型
15
+
16
+ ### OCRResult 接口
17
+
18
+ 识别结果的数据结构,包含完整的文本信息和位置数据:
19
+
20
+ ```lua
21
+ ---@class OCRResult
22
+ ---@field text string 识别的文本内容
23
+ ---@field confidence number 识别置信度 (0-1)
24
+ ---@field x number 文本区域左上角 x 坐标
25
+ ---@field y number 文本区域左上角 y 坐标
26
+ ---@field ex number 文本区域右下角 x 坐标
27
+ ---@field ey number 文本区域右下角 y 坐标
28
+ ---@field width number 文本区域宽度
29
+ ---@field height number 文本区域高度
30
+ ---@field centerX number 文本区域中心点 x 坐标
31
+ ---@field centerY number 文本区域中心点 y 坐标
32
+ ---@field angle number 文本区域角度
33
+ ---@field orientation number 文本区域方向 0 横向 1 竖向
34
+ ```
35
+
36
+ **数据结构说明:**
37
+
38
+ | 字段 | 类型 | 描述 |
39
+ | ------------------ | ------ | ----------------------------------------------------- |
40
+ | `text` | string | 识别出的文本内容 |
41
+ | `confidence` | number | 识别置信度,范围 0-1,值越高表示识别越准确 |
42
+ | `x, y, ex, ey` | number | 文本区域的坐标,分别为左上角和右下角的 x、y 坐标 |
43
+ | `width, height` | number | 文本区域的宽度和高度 |
44
+ | `centerX, centerY` | number | 文本区域的中心点坐标 |
45
+ | `angle` | number | 文本区域的角度,范围 -90 到 90 度,正值表示逆时针旋转 |
46
+ | `orientation` | number | 文本区域的方向,0 表示横向,1 表示竖向 |
47
+
48
+ ## API 参考
49
+
50
+ ### 模型管理
51
+
52
+ #### loadV5 - 手动加载 PP-OCRv5 模型。
53
+
54
+ 识别方法默认自动加载模型。只有需要切换到 PP-OCRv5 或指定 GPU 参数时才调用 `loadV5`。PaddleOCR 同一时间只保留一个 active 模型,`loadV5` 加载成功后会替换已加载模型。
55
+
56
+ ```lua
57
+ ---@param maxSideLen number?
58
+ ---@param useGpu boolean?
59
+ ---@return boolean
60
+ function loadV5(maxSideLen, useGpu) end
61
+ ```
62
+
63
+ **参数:**
64
+
65
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
66
+ | ------------ | ------- | -------- | ------ | ---------------------------- |
67
+ | `maxSideLen` | number | 否 | 640 | 检测阶段输入最大边长 |
68
+ | `useGpu` | boolean | 否 | false | 是否启用 GPU 加速 |
69
+
70
+ **返回值:**
71
+
72
+ | 类型 | 描述 |
73
+ | ------- | ----------------------------------------------------------- |
74
+ | boolean | 加载成功或模型已加载返回 `true`,失败返回 `false` |
75
+
76
+ **示例:**
77
+
78
+ ```lua
79
+ local paddleocr = require("paddleocr")
80
+
81
+ -- 手动加载 PP-OCRv5 模型
82
+ local loaded = paddleocr.loadV5(640, false)
83
+ print("PP-OCRv5 加载结果: " .. tostring(loaded))
84
+ ```
85
+
86
+ #### loadModel - 按模型 ID 手动加载内置 PaddleOCR 模型。
87
+
88
+ 识别和查找方法默认自动加载 `ppocr-v6-small`。只有需要切换模型或指定 GPU 参数时才调用 `loadModel`。同一时间只保留一个 active 模型;检测长边请使用 `setMaxSideLen`。
89
+
90
+ ```lua
91
+ ---@param modelId string
92
+ ---@param useGpu boolean?
93
+ ---@return boolean
94
+ function loadModel(modelId, useGpu) end
95
+ ```
96
+
97
+ **参数:**
98
+
99
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
100
+ | --------- | ------- | -------- | ------ | ------------------------------------------------- |
101
+ | `modelId` | string | 是 | | `"ppocr-v6-tiny"` / `"ppocr-v6-small"` / `"ppocr-v5"` |
102
+ | `useGpu` | boolean | 否 | false | 是否启用 GPU 加速 |
103
+
104
+ **返回值:**
105
+
106
+ | 类型 | 描述 |
107
+ | ------- | --------------------------------------------------------------------- |
108
+ | boolean | 加载成功或目标模型已加载返回 `true`,模型 ID 不支持或加载失败返回 `false` |
109
+
110
+ **示例:**
111
+
112
+ ```lua
113
+ local paddleocr = require("paddleocr")
114
+ paddleocr.loadModel("ppocr-v6-tiny", false)
115
+ local loaded = paddleocr.loadModel("ppocr-v6-small", false)
116
+ print("PP-OCRv6 small 加载结果: " .. tostring(loaded))
117
+ ```
118
+
119
+ #### setMaxSideLen - 单独设置检测阶段输入最大边长。
120
+
121
+ 只调整后续检测输入缩放,不会重新加载已加载模型。传 `0` 或负数时使用 `768`。
122
+
123
+ ```lua
124
+ ---@param maxSideLen number?
125
+ ---@return boolean
126
+ function setMaxSideLen(maxSideLen) end
127
+ ```
128
+
129
+ **参数:**
130
+
131
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
132
+ | ------------ | ------ | -------- | ------ | ----------------------------------------- |
133
+ | `maxSideLen` | number | 否 | 768 | 输入图像的最大边长;传 0 或负数时使用 768 |
134
+
135
+ **返回值:**
136
+
137
+ | 类型 | 描述 |
138
+ | ------- | ------------------- |
139
+ | boolean | 设置成功返回 `true` |
140
+
141
+ **示例:**
142
+
143
+ ```lua
144
+ local paddleocr = require("paddleocr")
145
+ paddleocr.setMaxSideLen(960)
146
+ ```
147
+
148
+ ### 文字识别
149
+
150
+ #### recognize - 执行 OCR 识别。
151
+
152
+ 传入裁剪区域时,返回坐标相对于裁剪区域。全屏识别时 `x/y/ex/ey` 传 `0`。
153
+
154
+ ```lua
155
+ ---@param input string
156
+ ---@param x number?
157
+ ---@param y number?
158
+ ---@param ex number?
159
+ ---@param ey number?
160
+ ---@param confidenceThreshold number?
161
+ ---@return OCRResult[]
162
+ function recognize(input, x, y, ex, ey, confidenceThreshold) end
163
+ ```
164
+
165
+ **参数:**
166
+
167
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
168
+ | --------------------- | ------ | -------- | ------ | ----------------------------------------------------------- |
169
+ | `input` | string | 是 | | 输入源,支持 imageId、URL 字符串、文件路径或 `"screen"` |
170
+ | `x` | number | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
171
+ | `y` | number | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
172
+ | `ex` | number | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0 |
173
+ | `ey` | number | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0 |
174
+ | `confidenceThreshold` | number | 否 | 0.6 | 置信度阈值,低于该值的识别结果会被过滤 |
175
+
176
+ **返回值:**
177
+
178
+ | 类型 | 描述 |
179
+ | ------------- | ---------------------------------- |
180
+ | `OCRResult[]` | 识别结果数组,坐标相对于裁剪区域 |
181
+
182
+ **示例:**
183
+
184
+ ```lua
185
+ local paddleocr = require("paddleocr")
186
+ local action = require("action")
187
+
188
+ local results = paddleocr.recognize("screen", 100, 100, 500, 300)
189
+ if #results > 0 then
190
+ action.click(results[1].centerX, results[1].centerY)
191
+ end
192
+ ```
193
+
194
+ #### recognizeAbs - 执行 OCR 识别,并将结果坐标映射为原图/全屏绝对坐标。
195
+
196
+ 传入裁剪区域时,返回坐标会映射回原图或全屏坐标,可直接用于点击。
197
+
198
+ ```lua
199
+ ---@param input string
200
+ ---@param x number?
201
+ ---@param y number?
202
+ ---@param ex number?
203
+ ---@param ey number?
204
+ ---@param confidenceThreshold number?
205
+ ---@return OCRResult[]
206
+ function recognizeAbs(input, x, y, ex, ey, confidenceThreshold) end
207
+ ```
208
+
209
+ **参数:**
210
+
211
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
212
+ | --------------------- | ------ | -------- | ------ | ------------------------------------------------------ |
213
+ | `input` | string | 是 | | 输入源,支持 imageId、URL 字符串、文件路径或 `"screen"` |
214
+ | `x` | number | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
215
+ | `y` | number | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
216
+ | `ex` | number | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0 |
217
+ | `ey` | number | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0 |
218
+ | `confidenceThreshold` | number | 否 | 0.6 | 置信度阈值,低于该值的识别结果会被过滤 |
219
+
220
+ **返回值:**
221
+
222
+ | 类型 | 描述 |
223
+ | ------------- | -------------------------------------- |
224
+ | `OCRResult[]` | 识别结果数组,坐标为原图或全屏绝对坐标 |
225
+
226
+ **示例:**
227
+
228
+ ```lua
229
+ local paddleocr = require("paddleocr")
230
+ local action = require("action")
231
+ local absResults = paddleocr.recognizeAbs("screen", 100, 100, 500, 300)
232
+ if #absResults > 0 then
233
+ action.click(absResults[1].centerX, absResults[1].centerY)
234
+ end
235
+ ```
236
+
237
+ #### findText - 查找目标文本。
238
+
239
+ 传入裁剪区域时,返回坐标相对于裁剪区域。`targets` 可以是字符串数组或逗号分隔字符串。
240
+
241
+ ```lua
242
+ ---@param input string
243
+ ---@param targets string[]|string
244
+ ---@param x number?
245
+ ---@param y number?
246
+ ---@param ex number?
247
+ ---@param ey number?
248
+ ---@param confidenceThreshold number?
249
+ ---@param exactMatch boolean?
250
+ ---@return OCRResult[]
251
+ function findText(input, targets, x, y, ex, ey, confidenceThreshold, exactMatch) end
252
+ ```
253
+
254
+ **参数:**
255
+
256
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
257
+ | --------------------- | ----------------- | -------- | ------ | ------------------------------------------------------------------------ |
258
+ | `input` | string | 是 | | 输入源,支持 imageId、URL 字符串、文件路径或 `"screen"` |
259
+ | `targets` | string[] \| string | 是 | | 目标文本数组或逗号分隔字符串 |
260
+ | `x` | number | 否 | 0 | 裁剪区域左上角 x 坐标;全屏识别传 0 |
261
+ | `y` | number | 否 | 0 | 裁剪区域左上角 y 坐标;全屏识别传 0 |
262
+ | `ex` | number | 否 | 0 | 裁剪区域右下角 x 坐标;全屏识别传 0 |
263
+ | `ey` | number | 否 | 0 | 裁剪区域右下角 y 坐标;全屏识别传 0 |
264
+ | `confidenceThreshold` | number | 否 | 0.6 | 置信度阈值,低于该值的识别结果会被过滤 |
265
+ | `exactMatch` | boolean | 否 | false | 是否完整匹配;`false` 表示包含匹配,`true` 要求整条 OCR 文本等于目标文本 |
266
+
267
+ **返回值:**
268
+
269
+ | 类型 | 描述 |
270
+ | ------------- | ------------------------------------ |
271
+ | `OCRResult[]` | 匹配到的结果数组,坐标相对于裁剪区域 |
272
+
273
+ **示例:**
274
+
275
+ ```lua
276
+ local paddleocr = require("paddleocr")
277
+ local hits = paddleocr.findText("screen", { "确定" }, 100, 100, 500, 400, 0.6, false)
278
+ ```
279
+
280
+ #### findTextAbs - 查找目标文本,并将结果坐标映射为原图/全屏绝对坐标。
281
+
282
+ ```lua
283
+ ---@param input string
284
+ ---@param targets string[]|string
285
+ ---@param x number?
286
+ ---@param y number?
287
+ ---@param ex number?
288
+ ---@param ey number?
289
+ ---@param confidenceThreshold number?
290
+ ---@param exactMatch boolean?
291
+ ---@return OCRResult[]
292
+ function findTextAbs(input, targets, x, y, ex, ey, confidenceThreshold, exactMatch) end
293
+ ```
294
+
295
+ **参数:** 与 `findText` 相同;返回坐标为原图或全屏绝对坐标。
296
+
297
+ **示例:**
298
+
299
+ ```lua
300
+ local paddleocr = require("paddleocr")
301
+ local action = require("action")
302
+ local absHits = paddleocr.findTextAbs("screen", { "确定" }, 100, 100, 500, 400, 0.6, false)
303
+ if #absHits > 0 then
304
+ action.click(absHits[1].centerX, absHits[1].centerY)
305
+ end
306
+ ```
307
+
308
+ ### 资源管理
309
+
310
+ #### free - 释放 OCR 模型占用的内存资源。
311
+
312
+ ```lua
313
+ function free() end
314
+ ```
315
+
316
+ **示例:**
317
+
318
+ ```lua
319
+ local paddleocr = require("paddleocr")
320
+
321
+ -- 使用完毕后释放资源
322
+ paddleocr.free()
323
+ print("OCR 模型资源已释放")
324
+ ```
@@ -0,0 +1,359 @@
1
+ # 悬浮窗模块 (PIP)
2
+
3
+ 悬浮窗模块提供 iOS 画中画(Picture in Picture)悬浮窗能力,可用于显示脚本日志、保活提示或脚本自定义文本。
4
+
5
+ ## 功能特性
6
+
7
+ - **显示模式**:支持日志、保活和自定义三种显示模式;首次安装默认保活
8
+ - **关闭控制**:支持主动关闭悬浮窗
9
+ - **状态查询**:判断悬浮窗是否正在显示
10
+ - **尺寸设置**:日志模式和自定义模式支持设置内容宽高比(实际显示尺寸由系统决定),并按模式分别持久化
11
+ - **日志显示**:日志模式支持设置日志文字大小
12
+ - **自定义文本**:自定义模式支持文本、换行、文字颜色、背景色和文字大小
13
+
14
+ ## API 方法
15
+
16
+ ### isPipActive - 判断悬浮窗是否打开
17
+
18
+ ```lua
19
+ ---@return boolean
20
+ function isPipActive() end
21
+ ```
22
+
23
+ 判断悬浮窗是否当前打开。
24
+
25
+ **返回值:**
26
+
27
+ | 类型 | 描述 |
28
+ | --------- | --------------------------------------------- |
29
+ | `boolean` | `true` 代表开启了悬浮窗,`false` 代表没有开启 |
30
+
31
+ **示例:**
32
+
33
+ ```lua
34
+ local pip = require("pip")
35
+ local isActive = pip.isPipActive()
36
+ if isActive then
37
+ print("悬浮窗当前已打开")
38
+ end
39
+ ```
40
+
41
+ ### switchToLogMode - 切换到日志模式
42
+
43
+ ```lua
44
+ ---@return boolean
45
+ function switchToLogMode() end
46
+ ```
47
+
48
+ 切换到日志模式并尝试显示悬浮窗日志窗口。首次显示悬浮窗时 App 必须在前台。日志模式会恢复最近一次保存的日志窗口尺寸。
49
+
50
+ **返回值:**
51
+
52
+ | 类型 | 描述 |
53
+ | --------- | ---------------------- |
54
+ | `boolean` | `true` 代表已提交请求 |
55
+
56
+ **示例:**
57
+
58
+ ```lua
59
+ local pip = require("pip")
60
+ takeMeToFront()
61
+ local success = pip.switchToLogMode()
62
+ pip.setLogFontSize(10)
63
+ ```
64
+
65
+ ### switchToKeepAliveMode - 切换到保活模式
66
+
67
+ ```lua
68
+ ---@return boolean
69
+ function switchToKeepAliveMode() end
70
+ ```
71
+
72
+ 切换到保活模式并尝试显示极小高度悬浮窗。首次显示悬浮窗时 App 必须在前台。保活模式不接受脚本尺寸设置。
73
+
74
+ **返回值:**
75
+
76
+ | 类型 | 描述 |
77
+ | --------- | ---------------------- |
78
+ | `boolean` | `true` 代表已提交请求 |
79
+
80
+ **示例:**
81
+
82
+ ```lua
83
+ local pip = require("pip")
84
+ takeMeToFront()
85
+ local success = pip.switchToKeepAliveMode()
86
+ ```
87
+
88
+ ### switchToCustomMode - 切换到自定义模式
89
+
90
+ ```lua
91
+ ---@return boolean
92
+ function switchToCustomMode() end
93
+ ```
94
+
95
+ 切换到自定义模式并显示脚本设置的自定义文本。首次显示悬浮窗时 App 必须在前台。自定义模式会恢复最近一次保存的自定义窗口尺寸。
96
+
97
+ **返回值:**
98
+
99
+ | 类型 | 描述 |
100
+ | --------- | ---------------------- |
101
+ | `boolean` | `true` 代表已提交请求 |
102
+
103
+ **示例:**
104
+
105
+ ```lua
106
+ local pip = require("pip")
107
+ takeMeToFront()
108
+ pip.switchToCustomMode()
109
+ pip.setCustomText("运行中\n进度 1/3")
110
+ pip.setCustomTextColor("#34c759")
111
+ pip.setCustomTextSize(18)
112
+ ```
113
+
114
+ ### closeWindow - 关闭悬浮窗
115
+
116
+ ```lua
117
+ ---@return boolean
118
+ function closeWindow() end
119
+ ```
120
+
121
+ 关闭悬浮窗。
122
+
123
+ **返回值:**
124
+
125
+ | 类型 | 描述 |
126
+ | --------- | ---------------------- |
127
+ | `boolean` | `true` 代表已提交请求 |
128
+
129
+ **示例:**
130
+
131
+ ```lua
132
+ local pip = require("pip")
133
+ local success = pip.closeWindow()
134
+ ```
135
+
136
+ ### setContentSize - 设置内容尺寸
137
+
138
+ ```lua
139
+ ---@param width number
140
+ ---@param height number
141
+ ---@return boolean
142
+ function setContentSize(width, height) end
143
+ ```
144
+
145
+ 设置日志模式或自定义模式的悬浮窗内容尺寸。传入的宽高表示宽高比,不是最终像素尺寸;悬浮窗实际显示的宽高由系统决定。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
146
+
147
+ **参数:**
148
+
149
+ | 参数 | 类型 | 必填 | 描述 |
150
+ | -------- | ---------------- | ---- | ---------------------------------------------- |
151
+ | `width` | `number` | 是 | 宽度方向比例值(与 `height` 共同决定宽高比,不是像素) |
152
+ | `height` | `number` | 是 | 高度方向比例值(与 `width` 共同决定宽高比,不是像素) |
153
+
154
+ **返回值:**
155
+
156
+ | 类型 | 描述 |
157
+ | --------- | -------------------------------------------------------------------- |
158
+ | `boolean` | `true` 代表尺寸已提交;`false` 代表当前模式不允许设置或宽高无效 |
159
+
160
+ **示例:**
161
+
162
+ ```lua
163
+ local pip = require("pip")
164
+ pip.switchToLogMode()
165
+ pip.setContentSize(280, 120)
166
+
167
+ pip.switchToCustomMode()
168
+ pip.setContentSize(120, 180)
169
+ ```
170
+
171
+ ### setLogFontSize - 设置日志文字大小
172
+
173
+ ```lua
174
+ ---@param fontSize number
175
+ ---@return boolean
176
+ function setLogFontSize(fontSize) end
177
+ ```
178
+
179
+ 设置日志模式显示文本的文字大小。该方法只更新日志字号,不会自动切换到日志模式。
180
+
181
+ **参数:**
182
+
183
+ | 参数 | 类型 | 必填 | 描述 |
184
+ | ---------- | -------- | ---- | ------------------------ |
185
+ | `fontSize` | `number` | 是 | 日志字号,必须是有效数字 |
186
+
187
+ **返回值:**
188
+
189
+ | 类型 | 描述 |
190
+ | --------- | ---------------------------------------------------------- |
191
+ | `boolean` | `true` 代表日志文字大小已提交;`false` 代表字号无效 |
192
+
193
+ **示例:**
194
+
195
+ ```lua
196
+ local pip = require("pip")
197
+ pip.setLogFontSize(10)
198
+ pip.switchToLogMode()
199
+ ```
200
+
201
+ ### setCustomText - 设置自定义文本
202
+
203
+ ```lua
204
+ ---@param text string
205
+ ---@return boolean
206
+ function setCustomText(text) end
207
+ ```
208
+
209
+ 设置自定义模式显示的纯文本内容。该方法只更新自定义文本数据,不会自动切换到自定义模式。
210
+
211
+ **参数:**
212
+
213
+ | 参数 | 类型 | 必填 | 描述 |
214
+ | ------ | -------- | ---- | ------------------------------------------- |
215
+ | `text` | `string` | 是 | 要显示的文本,支持真实换行和字符串中的 `\n` |
216
+
217
+ **返回值:**
218
+
219
+ | 类型 | 描述 |
220
+ | --------- | ---------------------- |
221
+ | `boolean` | `true` 代表文本已提交 |
222
+
223
+ **示例:**
224
+
225
+ ```lua
226
+ local pip = require("pip")
227
+ pip.setCustomText("运行中\n进度 1/3")
228
+ pip.switchToCustomMode()
229
+ ```
230
+
231
+ ### setCustomTextColor - 设置自定义文字颜色
232
+
233
+ ```lua
234
+ ---@param color string
235
+ ---@return boolean
236
+ function setCustomTextColor(color) end
237
+ ```
238
+
239
+ 设置自定义模式显示文本的文字颜色。该方法只更新文字颜色数据,不会自动切换到自定义模式。
240
+
241
+ **参数:**
242
+
243
+ | 参数 | 类型 | 必填 | 描述 |
244
+ | ------- | -------- | ---- | ----------------------------------------------------------- |
245
+ | `color` | `string` | 是 | 文字颜色,支持 `RRGGBB`、`RRGGBBAA`,可带 `#` 前缀;末尾 AA 为透明度;无效值使用白色 |
246
+
247
+ **返回值:**
248
+
249
+ | 类型 | 描述 |
250
+ | --------- | -------------------------- |
251
+ | `boolean` | `true` 代表文字颜色已提交 |
252
+
253
+ **示例:**
254
+
255
+ ```lua
256
+ local pip = require("pip")
257
+ pip.setCustomTextColor("#34c759")
258
+ pip.switchToCustomMode()
259
+ ```
260
+
261
+ ### setCustomTextSize - 设置自定义文字大小
262
+
263
+ ```lua
264
+ ---@param fontSize number
265
+ ---@return boolean
266
+ function setCustomTextSize(fontSize) end
267
+ ```
268
+
269
+ 设置自定义模式显示文本的文字大小。该方法只更新文字大小数据,不会自动切换到自定义模式。
270
+
271
+ **参数:**
272
+
273
+ | 参数 | 类型 | 必填 | 描述 |
274
+ | ---------- | -------- | ---- | -------------------------- |
275
+ | `fontSize` | `number` | 是 | 文字字号,必须是有效数字 |
276
+
277
+ **返回值:**
278
+
279
+ | 类型 | 描述 |
280
+ | --------- | ------------------------------------------------------ |
281
+ | `boolean` | `true` 代表文字大小已提交;`false` 代表字号无效 |
282
+
283
+ **示例:**
284
+
285
+ ```lua
286
+ local pip = require("pip")
287
+ pip.setCustomTextSize(18)
288
+ pip.switchToCustomMode()
289
+ ```
290
+
291
+ ### setCustomBackgroundColor - 设置自定义背景色
292
+
293
+ ```lua
294
+ ---@param color string
295
+ ---@return boolean
296
+ function setCustomBackgroundColor(color) end
297
+ ```
298
+
299
+ 设置自定义模式显示区域的背景色。该方法只更新背景色数据,不会自动切换到自定义模式。
300
+
301
+ **参数:**
302
+
303
+ | 参数 | 类型 | 必填 | 描述 |
304
+ | ------- | -------- | ---- | ----------------------------------------------------------- |
305
+ | `color` | `string` | 是 | 背景颜色,支持 `RRGGBB`、`RRGGBBAA`,可带 `#` 前缀;末尾 AA 为透明度;无效值使用黑色 |
306
+
307
+ **返回值:**
308
+
309
+ | 类型 | 描述 |
310
+ | --------- | ------------------------ |
311
+ | `boolean` | `true` 代表背景色已提交 |
312
+
313
+ **示例:**
314
+
315
+ ```lua
316
+ local pip = require("pip")
317
+ pip.setCustomBackgroundColor("#111111")
318
+ pip.switchToCustomMode()
319
+ ```
320
+
321
+ ## 完整使用示例
322
+
323
+ ```lua
324
+ local pip = require("pip")
325
+ takeMeToFront()
326
+
327
+ pip.switchToLogMode()
328
+ pip.setContentSize(280, 120)
329
+ pip.setLogFontSize(10)
330
+
331
+ pip.setCustomText("任务运行中\n1/3")
332
+ pip.setCustomTextColor("#34c759")
333
+ pip.setCustomTextSize(18)
334
+ pip.setCustomBackgroundColor("#111111")
335
+ pip.switchToCustomMode()
336
+ pip.setContentSize(120, 180)
337
+ ```
338
+
339
+ ## 注意事项
340
+
341
+ 1. **前台限制**:首次切换到日志、保活或自定义显示模式并启动悬浮窗时,App 必须在前台;悬浮窗已启动后可以继续切换显示模式或关闭悬浮窗
342
+ 2. **设备兼容性**:仅支持 iOS 15+ 且具备画中画功能的设备
343
+ 3. **系统限制**:悬浮窗位置和实际显示尺寸由 iOS 管理
344
+ 4. **尺寸持久化**:日志模式和自定义模式分别保存尺寸,互不共用;保活模式不接受脚本尺寸
345
+ 5. **日志字号**:日志字号只影响日志模式,保活模式和自定义模式不受影响
346
+ 6. **竖向文本**:自定义窗口高度大于宽度时,文本会按逐字符换行方式竖向显示
347
+
348
+ ## 故障排除
349
+
350
+ ### 悬浮窗无法显示
351
+
352
+ - 确认设备支持悬浮窗功能
353
+ - 检查悬浮窗权限是否已开启
354
+ - 确认应用当前在前台
355
+
356
+ ### setContentSize 返回 false
357
+
358
+ - 确认当前模式是日志模式或自定义模式
359
+ - 确认宽度和高度都传入了有效数字