foliko 1.1.38 → 1.1.39

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 (165) hide show
  1. package/.agent/agents/network-requester.md +44 -0
  2. package/.agent/agents/poster-designer.md +52 -0
  3. package/.agent/agents/ui-designer.md +1 -1
  4. package/.agent/data/default.json +23 -407
  5. package/.agent/data/email/processed-emails.json +1 -0
  6. package/.agent/data/plugins-state.json +103 -200
  7. package/.agent/data/web/web-config.json +5 -0
  8. package/.agent/data/weixin/images/file_1776188148383jpg +0 -0
  9. package/.agent/data/weixin/images/file_1776188458326.jpg +0 -0
  10. package/.agent/data/weixin/images/file_1776188689423.jpg +0 -0
  11. package/.agent/data/weixin/images/file_1776188813604.jpg +0 -0
  12. package/.agent/data/weixin/images/file_1776189097450.jpg +0 -0
  13. package/.agent/data/weixin/videos/file_1776188318431.mp4 +0 -0
  14. package/.agent/mcp_config.json +4 -17
  15. package/.agent/memory/user/mof6gk94-kneeuh.md +9 -0
  16. package/.agent/package.json +8 -0
  17. package/.agent/plugins/marknative/README.md +134 -0
  18. package/.agent/plugins/marknative/fonts/SegoeUI Emoji.ttf +0 -0
  19. package/.agent/plugins/marknative/fonts.zip +0 -0
  20. package/.agent/plugins/marknative/index.js +256 -0
  21. package/.agent/plugins/marknative/package.json +12 -0
  22. package/.agent/plugins/test-plugin.py +99 -0
  23. package/.agent/plugins.json +11 -5
  24. package/.agent/python-scripts/test_sample.py +24 -0
  25. package/.agent/sessions/cli_default.json +2890 -18
  26. package/.agent/sessions/default.json +82 -0
  27. package/.agent/sessions/qq_c2c_D960F12877541624D7B2C836110B3D0F.json +25 -0
  28. package/.agent/sessions/test-clean.json +26 -0
  29. package/.agent/sessions/test-compress.json +1462 -0
  30. package/.agent/sessions/test-session.json +13 -0
  31. package/.agent/sessions/weixin_test.json +22 -0
  32. package/.agent/sessions/weixin_test_user_123.json +11 -0
  33. package/.agent/skills/agent-browser/SKILL.md +311 -0
  34. package/.agent/skills/agent-browser/TEST_PLAN.md +200 -0
  35. package/.agent/skills/sysinfo/SKILL.md +38 -0
  36. package/.agent/skills/sysinfo/system-info.sh +130 -0
  37. package/.agent/skills/workflow/SKILL.md +324 -0
  38. package/.agent/test-agent.js +35 -0
  39. package/.agent/weixin.json +6 -0
  40. package/.agent/workflows/email-digest.json +50 -0
  41. package/.agent/workflows/file-backup.json +21 -0
  42. package/.agent/workflows/get-ip-notify.json +32 -0
  43. package/.agent/workflows/news-aggregator.json +93 -0
  44. package/.agent/workflows/news-dashboard-v2.json +94 -0
  45. package/.agent/workflows/notification-batch.json +32 -0
  46. package/.claude/settings.local.json +2 -1
  47. package/.env.example +56 -56
  48. package/README.md +441 -441
  49. package/cli/src/utils/debounce.js +6 -3
  50. package/docs/qq-bot.md +976 -0
  51. package/package.json +2 -1
  52. package/plugins/qq-plugin.js +939 -0
  53. package/skills/find-skills/AGENTS.md +162 -162
  54. package/skills/find-skills/SKILL.md +133 -133
  55. package/temp_img.md +1 -0
  56. package/website_v2/styles/animations.css +7 -7
  57. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
  58. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
  59. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
  60. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
  61. package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
  62. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
  63. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
  64. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  65. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  66. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  67. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  68. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  69. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  70. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  71. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
  72. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  73. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  74. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  75. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  76. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
  77. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
  78. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  79. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  80. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
  81. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  82. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  83. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
  84. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
  85. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
  86. package/.agent/ARCHITECTURE.md +0 -288
  87. package/.agent/data/ambient/goals.json +0 -1
  88. package/.agent/data/puppeteer-sessions/undefined.json +0 -6
  89. package/.agent/data/weixin-media/2026-04-08/img_1775618677512.jpg +0 -0
  90. package/.agent/data/weixin-media/2026-04-08/img_1775619073340.jpg +0 -0
  91. package/.agent/data/weixin-media/2026-04-08/img_1775619097536.jpg +0 -0
  92. package/.agent/data/weixin-media/2026-04-08/img_1775619209388.jpg +0 -0
  93. package/.agent/memory/feedback/mnygjgox-ualjip.md +0 -11
  94. package/.agent/memory/feedback/mnzugpej-esdwsr.md +0 -9
  95. package/.agent/memory/feedback/mo2quxke-saxs56.md +0 -9
  96. package/.agent/memory/feedback/mo9l6nw9-sm1ye2.md +0 -13
  97. package/.agent/memory/feedback/mo9uxkb3-bbxz3x.md +0 -9
  98. package/.agent/memory/feedback/mo9wpqy0-ftsez9.md +0 -13
  99. package/.agent/memory/feedback/mo9x2ps4-p7huqq.md +0 -11
  100. package/.agent/memory/feedback/mo9x2uay-z7ndjn.md +0 -9
  101. package/.agent/memory/feedback/mo9x2y7d-9wecyx.md +0 -9
  102. package/.agent/memory/feedback/mo9x39q3-nn7myt.md +0 -9
  103. package/.agent/memory/feedback/mo9xfir9-4g8a8j.md +0 -9
  104. package/.agent/memory/feedback/mo9xfui8-ujqrc6.md +0 -9
  105. package/.agent/memory/feedback/mocnx1wx-qtxxlh.md +0 -9
  106. package/.agent/memory/project/mnqx54u5-loqtoe.md +0 -9
  107. package/.agent/memory/project/mnqx84cv-mx6dmd.md +0 -9
  108. package/.agent/memory/project/mnsacuyr-hgtk5n.md +0 -20
  109. package/.agent/memory/project/mnu5hy2x-bjsg7u.md +0 -9
  110. package/.agent/memory/project/mny28ot4-8qe9au.md +0 -9
  111. package/.agent/memory/project/mnztftxj-af82rh.md +0 -9
  112. package/.agent/memory/project/mo0y04d0-bmaefl.md +0 -9
  113. package/.agent/memory/project/mo2iztxb-3c7v81.md +0 -9
  114. package/.agent/memory/project/mo2ssa5x-tpi1p3.md +0 -9
  115. package/.agent/memory/reference/mnre3cww-penbo1.md +0 -9
  116. package/.agent/memory/reference/mns9wn48-luerua.md +0 -14
  117. package/.agent/memory/reference/mns9yz5c-thc2s0.md +0 -16
  118. package/.agent/memory/reference/mnsfy4um-910f1o.md +0 -23
  119. package/.agent/memory/reference/mnsg37dp-lmfj18.md +0 -32
  120. package/.agent/memory/reference/mnsll60q-0j911u.md +0 -36
  121. package/.agent/memory/reference/mnsmlb5y-nej31u.md +0 -16
  122. package/.agent/memory/reference/mnssle72-yrot96.md +0 -9
  123. package/.agent/memory/reference/mnygj8nb-bjthmc.md +0 -20
  124. package/.agent/memory/reference/mnzfvs4m-ufyg9a.md +0 -12
  125. package/.agent/memory/user/mnsfuon6-l416q1.md +0 -21
  126. package/.agent/memory/user/mnsg9kut-95m7rf.md +0 -20
  127. package/.agent/memory/user/mnu2eo1v-yy6fhe.md +0 -9
  128. package/.agent/memory/user/mnu2etuo-8u8jk8.md +0 -9
  129. package/.agent/memory/user/mnx0rk6g-gsznjj.md +0 -9
  130. package/.agent/memory/user/mnyf1riz-4yo5yz.md +0 -9
  131. package/.agent/memory/user/mnzuh4cw-zvee8w.md +0 -13
  132. package/.agent/memory/user/mnzvewyj-jl67cq.md +0 -9
  133. package/.agent/memory/user/mnzwh9xo-43ys3f.md +0 -9
  134. package/.agent/memory/user/mo0ycvpn-eebsxc.md +0 -9
  135. package/.agent/memory/user/mo2k8c8n-132r2u.md +0 -9
  136. package/.agent/memory/user/mo6y2dei-5cf537.md +0 -13
  137. package/.agent/memory/user/mo9xsdo6-8vylww.md +0 -13
  138. package/.agent/plugins/puppeteer-plugin/README.md +0 -147
  139. package/.agent/plugins/puppeteer-plugin/index.js +0 -1422
  140. package/.agent/plugins/puppeteer-plugin/package.json +0 -9
  141. package/.agent/rules/GEMINI.md +0 -273
  142. package/.agent/rules/allow-rule.md +0 -77
  143. package/.agent/rules/log-rule.md +0 -83
  144. package/.agent/rules/security-rule.md +0 -93
  145. package/.agent/scripts/auto_preview.py +0 -148
  146. package/.agent/scripts/checklist.py +0 -217
  147. package/.agent/scripts/session_manager.py +0 -120
  148. package/.agent/scripts/verify_all.py +0 -327
  149. package/.agent/skills/doc.md +0 -177
  150. package/.agent/skills/fk-poster/SKILL.md +0 -1129
  151. package/.agent/skills/fkbuilder/SKILL.md +0 -730
  152. package/.agent/skills/mmx-cli/SKILL.md +0 -431
  153. package/.agent/workflows/brainstorm.md +0 -113
  154. package/.agent/workflows/create.md +0 -59
  155. package/.agent/workflows/debug.md +0 -103
  156. package/.agent/workflows/deploy.md +0 -176
  157. package/.agent/workflows/enhance.md +0 -63
  158. package/.agent/workflows/orchestrate.md +0 -237
  159. package/.agent/workflows/plan.md +0 -89
  160. package/.agent/workflows/preview.md +0 -81
  161. package/.agent/workflows/simple-test.md +0 -42
  162. package/.agent/workflows/status.md +0 -86
  163. package/.agent/workflows/structured-orchestrate.md +0 -180
  164. package/.agent/workflows/test.md +0 -144
  165. package/.agent/workflows/ui-ux-pro-max.md +0 -296
@@ -1,1129 +0,0 @@
1
- ---
2
- name: fkposter
3
- description: FKPoster 海报构建技能。适用于多种视觉内容创建场景:名片、宣传海报、邀请函、证书、优惠券、菜单、订单小票、社交媒体图片(微博、微信、小红书)、广告横幅、产品图片、天气卡片、音乐播放列表封面、书籍封面、电影海报、旅游明信片、餐厅菜单、活动海报、个人头像卡片、统计图表等视觉设计。
4
- allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5
- license: MIT
6
- ---
7
-
8
- # FKPoster V2 使用指南
9
-
10
- ## 简介
11
-
12
- FKPoster 是一个基于 Paper.js 的海报制作插件,支持图层管理、组件复用、元素布局等功能。
13
-
14
- ## 安装
15
-
16
- ```bash
17
- npm i @chnak/poster
18
- ```
19
-
20
- ## 快速开始
21
-
22
- ```javascript
23
- const { PosterBuilder, TextElement, Button, Badge } = require('@chnak/poster')
24
-
25
- async function main() {
26
- // 1. 创建海报构建器
27
- const poster = new PosterBuilder({
28
- width: 1080,
29
- height: 1920,
30
- backgroundColor: '#ffffff'
31
- })
32
-
33
- // 2. 初始化并创建图层
34
- poster.initialize()
35
- const layer = poster.createLayer({ name: 'main', zIndex: 0 })
36
-
37
- // 3. 添加元素
38
- layer.addElement(new TextElement({
39
- x: 100,
40
- y: 200,
41
- text: 'Hello World',
42
- fontSize: 48,
43
- color: '#000000'
44
- }))
45
-
46
- // 4. 导出
47
- await poster.exportPNG('my-poster', './output')
48
- poster.destroy()
49
- }
50
-
51
- main().catch(console.error)
52
- ```
53
-
54
- ---
55
-
56
- ## 核心概念
57
-
58
- ### 层级结构
59
-
60
- ```
61
- PosterBuilder (海报构建器)
62
- └── Layer (图层)
63
- └── Element/Component (元素/组件)
64
- ```
65
-
66
- - **PosterBuilder**: 主入口类,负责创建画布、管理图层、导出图片
67
- - **Layer**: 图层类,管理一组元素,支持 zIndex 排序
68
- - **Component**: 组件类,可复用的元素组合
69
- - **BaseElement**: 基础元素类,所有元素的基类
70
-
71
- ### 元素类型
72
-
73
- 1. **基础元素 (BaseElement)**
74
- - RectElement - 矩形
75
- - CircleElement - 圆形
76
- - TextElement - 文本
77
- - ImageElement - 图片
78
- - DividerElement - 分隔线
79
-
80
- 2. **高级组件 (Component)**
81
- - Button - 按钮
82
- - Badge - 徽章/标签(支持自动适配宽高、垂直居中)
83
- - Card - 卡片
84
- - Avatar - 头像
85
- - Progress - 进度条
86
- - Rating - 星级评分
87
- - Quote - 引用块(支持自动换行)
88
- - ImageFrame - 图片框(支持网络/本地图片、cover/contain 裁剪)
89
- - 等等...
90
-
91
- ---
92
-
93
- ## PosterBuilder
94
-
95
- 海报构建器主类
96
-
97
- ### 构造函数参数
98
-
99
- ```javascript
100
- new PosterBuilder({
101
- width: 1080, // 海报宽度 (默认: 1080)
102
- height: 1920, // 海报高度 (默认: 1920)
103
- backgroundColor: '#ffffff' // 背景色 (默认: #ffffff)
104
- })
105
- ```
106
-
107
- ### 方法
108
-
109
- | 方法 | 说明 | 返回值 |
110
- |------|------|--------|
111
- | `initialize()` | 初始化画布 | - |
112
- | `createLayer(config)` | 创建图层 | `Layer` |
113
- | `getLayer(id)` | 获取图层 | `Layer` |
114
- | `exportPNG(filename, outputDir)` | 导出 PNG | `string` (文件路径) |
115
- | `exportSVG(filename, outputDir)` | 导出 SVG | `string` (文件路径) |
116
- | `toBuffer(format)` | 获取图片 Buffer | `Buffer` |
117
- | `toBase64(format)` | 获取 Base64 字符串 | `string` |
118
- | `destroy()` | 销毁实例 | - |
119
-
120
- ---
121
-
122
- ## Layer
123
-
124
- 图层类,管理一组元素。
125
-
126
- ### 方法
127
-
128
- | 方法 | 说明 | 返回值 |
129
- |------|------|--------|
130
- | `addElement(element)` | 添加元素 | `this` (链式调用) |
131
- | `removeElement(element)` | 移除元素 | - |
132
- | `getElement(id)` | 获取元素 | `Element` |
133
- | `destroy()` | 销毁图层 | - |
134
-
135
- ---
136
-
137
- ## 基础元素
138
-
139
- ### TextElement
140
-
141
- 文本元素
142
-
143
- ```javascript
144
- new TextElement({
145
- x: 100, // x 坐标
146
- y: 200, // y 坐标
147
- text: 'Hello World', // 文本内容
148
- fontSize: 32, // 字体大小 (默认: 32)
149
- fontFamily: 'Arial', // 字体系列 (默认: Microsoft YaHei)
150
- fontWeight: 'bold', // 字体粗细 (默认: normal)
151
- color: '#000000', // 文字颜色 (默认: #000000)
152
- textAlign: 'left', // 对齐方式: left/center/right (默认: left)
153
- maxWidth: 500, // 最大宽度 (可选)
154
- lineHeight: 1.5, // 行高 (可选)
155
- letterSpacing: 0, // 字间距 (可选)
156
- opacity: 1, // 透明度
157
- rotation: 0, // 旋转角度
158
- visible: true, // 是否可见
159
- zIndex: 0 // 层级
160
- })
161
- ```
162
-
163
- ### RectElement
164
-
165
- 矩形元素
166
-
167
- ```javascript
168
- new RectElement({
169
- x: 100, // x 坐标
170
- y: 200, // y 坐标
171
- width: 300, // 宽度
172
- height: 200, // 高度
173
- fillColor: '#3b82f6', // 填充颜色
174
- borderColor: '#1d4ed8', // 边框颜色 (可选)
175
- borderWidth: 2, // 边框宽度 (可选)
176
- borderRadius: 8, // 圆角 (默认: 0)
177
- opacity: 1, // 透明度
178
- rotation: 0, // 旋转角度
179
- visible: true, // 是否可见
180
- zIndex: 0 // 层级
181
- })
182
- ```
183
-
184
- ### CircleElement
185
-
186
- 圆形元素
187
-
188
- ```javascript
189
- new CircleElement({
190
- x: 100, // 圆心 x 坐标
191
- y: 200, // 圆心 y 坐标
192
- radius: 50, // 半径
193
- fillColor: '#ef4444', // 填充颜色
194
- strokeColor: '#dc2626', // 边框颜色 (可选)
195
- strokeWidth: 2, // 边框宽度 (可选)
196
- opacity: 1, // 透明度
197
- visible: true, // 是否可见
198
- zIndex: 0 // 层级
199
- })
200
- ```
201
-
202
- ### ImageElement
203
-
204
- 图片元素
205
-
206
- ```javascript
207
- new ImageElement({
208
- x: 100, // x 坐标
209
- y: 200, // y 坐标
210
- width: 300, // 宽度
211
- height: 200, // 高度
212
- src: 'https://example.com/image.png', // 图片地址 (支持 URL 和 file:// 本地路径)
213
- opacity: 1, // 透明度
214
- rotation: 0, // 旋转角度
215
- visible: true, // 是否可见
216
- zIndex: 0 // 层级
217
- })
218
- ```
219
-
220
- ### Divider
221
-
222
- 分隔线组件
223
-
224
- ```javascript
225
- new Divider({
226
- x: 100, // x 坐标
227
- y: 200, // y 坐标
228
- width: 300, // 宽度
229
- color: '#e5e7eb', // 颜色 (默认: #e5e7eb)
230
- thickness: 1, // 粗细 (默认: 1)
231
- opacity: 1, // 透明度
232
- visible: true, // 是否可见
233
- zIndex: 0 // 层级
234
- })
235
- ```
236
-
237
- ---
238
-
239
- ## 高级组件
240
-
241
- ### Button
242
-
243
- 按钮组件,支持文字、图标、渐变、阴影。
244
-
245
- ```javascript
246
- new Button({
247
- x: 100, // x 坐标
248
- y: 200, // y 坐标
249
- width: 200, // 宽度 (默认: auto)
250
- height: 60, // 高度 (默认: 60)
251
- text: '点击按钮', // 按钮文字
252
- fontSize: 24, // 字体大小 (默认: 24)
253
- fontFamily: 'Arial', // 字体系列
254
- color: '#ffffff', // 文字颜色 (默认: #ffffff)
255
- backgroundColor: '#3b82f6', // 背景颜色 (默认: #3b82f6)
256
- borderColor: '#1d4ed8', // 边框颜色 (可选)
257
- borderWidth: 0, // 边框宽度 (默认: 0)
258
- radius: 8, // 圆角 (默认: 8)
259
- padding: 30, // 内边距 (默认: 30)
260
- shadow: { // 阴影 (可选)
261
- color: 'rgba(0,0,0,0.3)',
262
- blur: 10,
263
- offset: [0, 4]
264
- },
265
- gradient: { // 渐变 (可选)
266
- colors: ['#3b82f6', '#8b5cf6'],
267
- direction: 'horizontal' // horizontal/vertical
268
- },
269
- icon: '👍', // 图标 (emoji 或 URL)
270
- iconPosition: 'left', // 图标位置: left/right (默认: left)
271
- opacity: 1, // 透明度
272
- visible: true, // 是否可见
273
- zIndex: 0 // 层级
274
- })
275
- ```
276
-
277
- ### Badge
278
-
279
- 徽章/标签组件,**支持根据文字内容自动适配宽高、垂直居中**。
280
-
281
- ```javascript
282
- new Badge({
283
- x: 100, // x 坐标
284
- y: 200, // y 坐标
285
- text: 'NEW', // 徽章文字
286
- fontSize: 18, // 字体大小 (默认: 18)
287
- fontFamily: 'Arial', // 字体系列
288
- color: '#ffffff', // 文字颜色 (默认: #ffffff)
289
- backgroundColor: '#3b82f6', // 背景颜色 (默认: #007bff)
290
- borderColor: '#1d4ed8', // 边框颜色 (可选)
291
- padding: 15, // 内边距 (默认: 15)
292
- radius: 4, // 圆角 (默认: 4)
293
- opacity: 1, // 透明度
294
- visible: true, // 是否可见
295
- zIndex: 0 // 层级
296
- })
297
- ```
298
-
299
- **特性:**
300
- - 宽度自动适配文字内容(padding * 2 + 文字宽度)
301
- - 文字垂直居中于背景
302
- - 使用 Paper.js bounds 精确测量文字尺寸
303
-
304
- ### ImageFrame
305
-
306
- 图片框组件,**支持网络图片、本地图片、cover/contain 裁剪**。
307
-
308
- ```javascript
309
- new ImageFrame({
310
- x: 100, // x 坐标
311
- y: 200, // y 坐标
312
- width: 300, // 宽度
313
- height: 300, // 高度
314
- src: 'https://example.com/image.png', // 图片地址 (支持 URL 和 file:// 本地路径)
315
- borderColor: '#ffffff', // 边框颜色 (默认: #ffffff)
316
- borderWidth: 3, // 边框宽度 (默认: 3)
317
- outerColor: '#1a1a2e', // 外边框颜色 (默认: #1a1a2e)
318
- outerWidth: 6, // 外边框宽度 (默认: 6)
319
- radius: 8, // 圆角 (默认: 0)
320
- fit: 'cover', // 适配模式: cover/contain (默认: cover)
321
- overlayColor: '#000000', // 叠加色 (可选)
322
- overlayOpacity: 0, // 叠加透明度 (默认: 0)
323
- opacity: 1, // 透明度
324
- visible: true, // 是否可见
325
- zIndex: 0 // 层级
326
- })
327
- ```
328
-
329
- **特性:**
330
- - 支持网络图片 URL
331
- - 支持本地图片 `file://` 协议
332
- - cover 模式:填充整个区域,可能裁剪部分内容
333
- - contain 模式:完整显示图片,可能留白
334
- - 圆角裁剪正确应用
335
- - 支持叠加色覆盖
336
-
337
- ### Quote
338
-
339
- 引用块组件,**支持自动换行**。
340
-
341
- ```javascript
342
- new Quote({
343
- x: 100, // x 坐标
344
- y: 200, // y 坐标
345
- width: 400, // 宽度 (默认: 400)
346
- text: '引用内容文字', // 引用文字
347
- author: '鲁迅', // 作者 (可选)
348
- backgroundColor: '#2d2d3a', // 背景颜色 (默认: #2d2d3a)
349
- borderColor: '#00d9ff', // 左边框颜色 (默认: #00d9ff)
350
- borderWidth: 4, // 左边框宽度 (默认: 4)
351
- padding: 20, // 内边距 (默认: 20)
352
- radius: 8, // 圆角 (默认: 8)
353
- textColor: '#ffffff', // 文字颜色 (默认: #ffffff)
354
- authorColor: '#aaaaaa', // 作者颜色 (默认: #aaaaaa)
355
- fontSize: 18, // 字体大小 (默认: 18)
356
- fontFamily: 'Arial', // 字体系列
357
- opacity: 1, // 透明度
358
- visible: true, // 是否可见
359
- zIndex: 0 // 层级
360
- })
361
- ```
362
-
363
- **特性:**
364
- - 自动换行,文本不超出边框
365
- - 引号位置低于文字 baseline
366
- - 作者位置在文字下方,距离更远
367
-
368
- ### Card
369
-
370
- 卡片组件,支持标题和副标题自动换行。
371
-
372
- ```javascript
373
- new Card({
374
- x: 100, // x 坐标
375
- y: 200, // y 坐标
376
- width: 400, // 宽度
377
- height: 200, // 高度
378
- backgroundColor: '#ffffff', // 背景颜色 (默认: #ffffff)
379
- borderColor: '#e5e7eb', // 边框颜色 (可选)
380
- borderWidth: 1, // 边框宽度 (可选)
381
- radius: 8, // 圆角 (默认: 0)
382
- padding: 20, // 内边距 (默认: 20)
383
- title: '卡片标题', // 标题文字
384
- titleSize: 24, // 标题字体大小 (默认: 24)
385
- titleColor: '#000000', // 标题颜色 (默认: #000000)
386
- subtitle: '副标题内容', // 副标题文字 (可选)
387
- subtitleSize: 16, // 副标题字体大小 (默认: 16)
388
- subtitleColor: '#666666', // 副标题颜色 (默认: #666666)
389
- fontFamily: 'Arial', // 字体系列
390
- opacity: 1, // 透明度
391
- visible: true, // 是否可见
392
- zIndex: 0 // 层级
393
- })
394
- ```
395
-
396
- ### Avatar
397
-
398
- 头像组件
399
-
400
- ```javascript
401
- new Avatar({
402
- x: 100, // x 坐标 (圆心)
403
- y: 200, // y 坐标 (圆心)
404
- size: 80, // 头像尺寸 (默认: 80)
405
- src: 'https://example.com/avatar.png', // 图片地址 (可选)
406
- initials: 'JD', // 首字母 (当无 src 时显示)
407
- backgroundColor: '#6366f1', // 背景颜色 (默认: #6366f1)
408
- borderColor: '#4f46e5', // 边框颜色 (可选)
409
- borderWidth: 2, // 边框宽度 (默认: 0)
410
- color: '#ffffff', // 文字颜色 (默认: #ffffff)
411
- fontFamily: 'Arial', // 字体系列
412
- opacity: 1, // 透明度
413
- visible: true, // 是否可见
414
- zIndex: 0 // 层级
415
- })
416
- ```
417
-
418
- ### Progress
419
-
420
- 进度条组件
421
-
422
- ```javascript
423
- new Progress({
424
- x: 100, // x 坐标
425
- y: 200, // y 坐标
426
- width: 300, // 宽度 (默认: 300)
427
- height: 20, // 高度 (默认: 20)
428
- value: 75, // 进度值 0-100 (默认: 50)
429
- trackColor: '#e5e7eb', // 轨道颜色 (默认: #e0e0e0)
430
- fillColor: '#6366f1', // 填充颜色 (默认: #6366f1)
431
- radius: 10, // 圆角 (默认: 10)
432
- showLabel: false, // 是否显示标签 (默认: false)
433
- label: '75%', // 自定义标签文字 (可选)
434
- fontFamily: 'Arial', // 字体系列
435
- opacity: 1, // 透明度
436
- visible: true, // 是否可见
437
- zIndex: 0 // 层级
438
- })
439
- ```
440
-
441
- ### Rating
442
-
443
- 星级评分组件
444
-
445
- ```javascript
446
- new Rating({
447
- x: 100, // x 坐标
448
- y: 200, // y 坐标
449
- value: 4.5, // 评分值 (默认: 4)
450
- max: 5, // 最大星数 (默认: 5)
451
- size: 24, // 星星大小 (默认: 24)
452
- filledColor: '#fbbf24', // 填充颜色 (默认: #fbbf24)
453
- emptyColor: '#e5e7eb', // 空星颜色 (默认: #e5e7eb)
454
- gap: 4, // 星星间距 (默认: 4)
455
- opacity: 1, // 透明度
456
- visible: true, // 是否可见
457
- zIndex: 0 // 层级
458
- })
459
- ```
460
-
461
- ### Icon
462
-
463
- 图标组件,支持 emoji 和图片。
464
-
465
- ```javascript
466
- new Icon({
467
- x: 100, // x 坐标
468
- y: 200, // y 坐标
469
- size: 64, // 图标尺寸 (默认: 64)
470
- icon: '👍', // 图标内容 (emoji 或 URL)
471
- color: '#ffffff', // 图标颜色 (可选,用于 emoji)
472
- backgroundColor: '#3b82f6', // 背景颜色 (可选)
473
- borderColor: '#1d4ed8', // 边框颜色 (可选)
474
- borderWidth: 0, // 边框宽度 (默认: 0)
475
- radius: 8, // 圆角 (默认: 0)
476
- opacity: 1, // 透明度
477
- visible: true, // 是否可见
478
- zIndex: 0 // 层级
479
- })
480
- ```
481
-
482
- ### CTA
483
-
484
- 行动号召按钮,比 Button 更强调视觉效果。
485
-
486
- ```javascript
487
- new CTA({
488
- x: 100, // x 坐标
489
- y: 200, // y 坐标
490
- width: 300, // 宽度
491
- height: 80, // 高度
492
- title: '立即开始', // 主标题
493
- subtitle: '免费试用 30 天', // 副标题 (可选)
494
- backgroundColor: '#3b82f6', // 背景颜色
495
- textColor: '#ffffff', // 文字颜色
496
- fontFamily: 'Arial', // 字体系列
497
- opacity: 1, // 透明度
498
- visible: true, // 是否可见
499
- zIndex: 0 // 层级
500
- })
501
- ```
502
-
503
- ### Chip
504
-
505
- 小标签组件,类似 Badge 但更轻量。
506
-
507
- ```javascript
508
- new Chip({
509
- x: 100, // x 坐标
510
- y: 200, // y 坐标
511
- text: '标签文字', // 标签文字
512
- fontSize: 14, // 字体大小 (默认: 14)
513
- color: '#3b82f6', // 文字颜色
514
- backgroundColor: '#dbeafe', // 背景颜色
515
- radius: 12, // 圆角 (默认: 12)
516
- opacity: 1, // 透明度
517
- visible: true, // 是否可见
518
- zIndex: 0 // 层级
519
- })
520
- ```
521
-
522
- ### Timeline
523
-
524
- 时间线组件
525
-
526
- ```javascript
527
- new Timeline({
528
- x: 100, // x 坐标
529
- y: 200, // y 坐标
530
- width: 400, // 宽度
531
- items: [ // 时间线项
532
- { time: '2024-01-01', title: '事件1', description: '描述1' },
533
- { time: '2024-02-01', title: '事件2', description: '描述2' },
534
- { time: '2024-03-01', title: '事件3', description: '描述3' }
535
- ],
536
- lineColor: '#3b82f6', // 线条颜色 (默认: #3b82f6)
537
- dotColor: '#3b82f6', // 点颜色 (默认: #3b82f6)
538
- fontFamily: 'Arial', // 字体系列
539
- opacity: 1, // 透明度
540
- visible: true, // 是否可见
541
- zIndex: 0 // 层级
542
- })
543
- ```
544
-
545
- ### ListItem
546
-
547
- 列表项组件
548
-
549
- ```javascript
550
- new ListItem({
551
- x: 100, // x 坐标
552
- y: 200, // y 坐标
553
- width: 400, // 宽度
554
- title: '列表项标题', // 标题
555
- description: '列表项描述', // 描述 (可选)
556
- thumb: 'https://example.com/thumb.png', // 缩略图 (可选)
557
- arrow: true, // 是否显示箭头 (默认: false)
558
- fontFamily: 'Arial', // 字体系列
559
- opacity: 1, // 透明度
560
- visible: true, // 是否可见
561
- zIndex: 0 // 层级
562
- })
563
- ```
564
-
565
- ### Notification
566
-
567
- 通知/气泡组件
568
-
569
- ```javascript
570
- new Notification({
571
- x: 100, // x 坐标
572
- y: 200, // y 坐标
573
- text: '通知内容', // 通知文字
574
- type: 'info', // 类型: info/success/warning/error (默认: info)
575
- fontSize: 16, // 字体大小 (默认: 16)
576
- fontFamily: 'Arial', // 字体系列
577
- opacity: 1, // 透明度
578
- visible: true, // 是否可见
579
- zIndex: 0 // 层级
580
- })
581
- ```
582
-
583
- ### Arrow
584
-
585
- 箭头组件
586
-
587
- ```javascript
588
- new Arrow({
589
- x: 100, // 起点 x 坐标
590
- y: 200, // 起点 y 坐标
591
- toX: 300, // 终点 x 坐标
592
- toY: 300, // 终点 y 坐标
593
- color: '#3b82f6', // 箭头颜色
594
- strokeWidth: 2, // 线宽 (默认: 2)
595
- headSize: 10, // 箭头大小 (默认: 10)
596
- opacity: 1, // 透明度
597
- visible: true, // 是否可见
598
- zIndex: 0 // 层级
599
- })
600
- ```
601
-
602
- ### Bubble
603
-
604
- 气泡/聊天气泡组件
605
-
606
- ```javascript
607
- new Bubble({
608
- x: 100, // x 坐标
609
- y: 200, // y 坐标
610
- width: 300, // 宽度
611
- text: '气泡内容', // 气泡文字
612
- direction: 'left', // 气泡方向: left/right (默认: left)
613
- backgroundColor: '#3b82f6', // 背景颜色
614
- textColor: '#ffffff', // 文字颜色
615
- fontSize: 16, // 字体大小 (默认: 16)
616
- fontFamily: 'Arial', // 字体系列
617
- padding: 15, // 内边距 (默认: 15)
618
- radius: 16, // 圆角 (默认: 16)
619
- opacity: 1, // 透明度
620
- visible: true, // 是否可见
621
- zIndex: 0 // 层级
622
- })
623
- ```
624
-
625
- ### Ribbon
626
-
627
- 缎带/彩带组件
628
-
629
- ```javascript
630
- new Ribbon({
631
- x: 100, // x 坐标
632
- y: 200, // y 坐标
633
- width: 200, // 宽度
634
- text: '热卖', // 缎带文字
635
- color: '#ef4444', // 缎带颜色
636
- fontSize: 18, // 字体大小 (默认: 18)
637
- fontFamily: 'Arial', // 字体系列
638
- opacity: 1, // 透明度
639
- visible: true, // 是否可见
640
- zIndex: 0 // 层级
641
- })
642
- ```
643
-
644
- ### Seal
645
-
646
- 印章组件
647
-
648
- ```javascript
649
- new Seal({
650
- x: 100, // x 坐标
651
- y: 200, // y 坐标
652
- size: 100, // 印章尺寸 (默认: 100)
653
- text: '官方认证', // 印章文字
654
- color: '#ef4444', // 印章颜色
655
- fontSize: 14, // 字体大小 (默认: 14)
656
- fontFamily: 'Arial', // 字体系列
657
- opacity: 1, // 透明度
658
- visible: true, // 是否可见
659
- zIndex: 0 // 层级
660
- })
661
- ```
662
-
663
- ### Watermark
664
-
665
- 水印组件
666
-
667
- ```javascript
668
- new Watermark({
669
- x: 100, // x 坐标
670
- y: 200, // y 坐标
671
- text: '水印文字', // 水印文字
672
- fontSize: 24, // 字体大小 (默认: 24)
673
- color: 'rgba(0,0,0,0.1)', // 水印颜色 (默认: rgba(0,0,0,0.1))
674
- fontFamily: 'Arial', // 字体系列
675
- rotation: -30, // 旋转角度 (默认: -30)
676
- opacity: 0.5, // 透明度 (默认: 0.5)
677
- visible: true, // 是否可见
678
- zIndex: 0 // 层级
679
- })
680
- ```
681
-
682
- ### TagCloud
683
-
684
- 标签云组件
685
-
686
- ```javascript
687
- new TagCloud({
688
- x: 100, // x 坐标
689
- y: 200, // y 坐标
690
- width: 400, // 宽度
691
- tags: [ // 标签列表
692
- { text: 'JavaScript', weight: 5 },
693
- { text: 'React', weight: 4 },
694
- { text: 'Node.js', weight: 3 }
695
- ],
696
- minSize: 14, // 最小字体 (默认: 14)
697
- maxSize: 32, // 最大字体 (默认: 32)
698
- colors: ['#3b82f6', '#22c55e', '#f59e0b'], // 颜色数组
699
- fontFamily: 'Arial', // 字体系列
700
- opacity: 1, // 透明度
701
- visible: true, // 是否可见
702
- zIndex: 0 // 层级
703
- })
704
- ```
705
-
706
- ### Stepper
707
-
708
- 步骤指示器组件
709
-
710
- ```javascript
711
- new Stepper({
712
- x: 100, // x 坐标
713
- y: 200, // y 坐标
714
- width: 400, // 宽度
715
- steps: [ // 步骤列表
716
- { label: '步骤 1', status: 'completed' },
717
- { label: '步骤 2', status: 'active' },
718
- { label: '步骤 3', status: 'pending' }
719
- ],
720
- activeColor: '#3b82f6', // 激活颜色 (默认: #3b82f6)
721
- completedColor: '#22c55e', // 完成颜色 (默认: #22c55e)
722
- pendingColor: '#e5e7eb', // 待处理颜色 (默认: #e5e7eb)
723
- fontFamily: 'Arial', // 字体系列
724
- opacity: 1, // 透明度
725
- visible: true, // 是否可见
726
- zIndex: 0 // 层级
727
- })
728
- ```
729
-
730
- ### Table
731
-
732
- 表格组件
733
-
734
- ```javascript
735
- new Table({
736
- x: 100, // x 坐标
737
- y: 200, // y 坐标
738
- width: 500, // 宽度
739
- headers: ['姓名', '年龄', '城市'], // 表头
740
- rows: [ // 数据行
741
- ['张三', '28', '北京'],
742
- ['李四', '32', '上海'],
743
- ['王五', '25', '广州']
744
- ],
745
- headerBgColor: '#f3f4f6', // 表头背景色 (默认: #f3f4f6)
746
- headerColor: '#374151', // 表头文字色 (默认: #374151)
747
- rowBgColor: '#ffffff', // 行背景色 (默认: #ffffff)
748
- rowColor: '#6b7280', // 行文字色 (默认: #6b7280)
749
- borderColor: '#e5e7eb', // 边框颜色 (默认: #e5e7eb)
750
- fontSize: 14, // 字体大小 (默认: 14)
751
- fontFamily: 'Arial', // 字体系列
752
- padding: 12, // 单元格内边距 (默认: 12)
753
- opacity: 1, // 透明度
754
- visible: true, // 是否可见
755
- zIndex: 0 // 层级
756
- })
757
- ```
758
-
759
- ### HighlightText
760
-
761
- 高亮文本组件
762
-
763
- ```javascript
764
- new HighlightText({
765
- x: 100, // x 坐标
766
- y: 200, // y 坐标
767
- text: '这是要高亮的文本', // 完整文本
768
- highlight: '高亮', // 要高亮的部分
769
- fontSize: 24, // 字体大小 (默认: 24)
770
- color: '#000000', // 文字颜色 (默认: #000000)
771
- highlightColor: '#fbbf24', // 高亮背景色 (默认: #fbbf24)
772
- fontFamily: 'Arial', // 字体系列
773
- opacity: 1, // 透明度
774
- visible: true, // 是否可见
775
- zIndex: 0 // 层级
776
- })
777
- ```
778
-
779
- ### Grid
780
-
781
- 网格布局组件
782
-
783
- ```javascript
784
- new Grid({
785
- x: 100, // x 坐标
786
- y: 200, // y 坐标
787
- width: 400, // 宽度
788
- columns: 3, // 列数 (默认: 3)
789
- rows: 3, // 行数 (默认: 3)
790
- gap: 10, // 元素间距 (默认: 10)
791
- backgroundColor: '#f3f4f6', // 背景颜色 (可选)
792
- padding: 10, // 内边距 (默认: 10)
793
- radius: 8, // 圆角 (默认: 8)
794
- opacity: 1, // 透明度
795
- visible: true, // 是否可见
796
- zIndex: 0 // 层级
797
- })
798
- ```
799
-
800
- ### Columns
801
-
802
- 多列布局组件
803
-
804
- ```javascript
805
- new Columns({
806
- x: 100, // x 坐标
807
- y: 200, // y 坐标
808
- width: 600, // 宽度
809
- count: 3, // 列数 (默认: 2)
810
- gap: 20, // 列间距 (默认: 20)
811
- items: [ // 列内容
812
- { elements: [...] },
813
- { elements: [...] },
814
- { elements: [...] }
815
- ],
816
- opacity: 1, // 透明度
817
- visible: true, // 是否可见
818
- zIndex: 0 // 层级
819
- })
820
- ```
821
-
822
- ### Barcode
823
-
824
- 条形码组件
825
-
826
- ```javascript
827
- new Barcode({
828
- x: 100, // x 坐标
829
- y: 200, // y 坐标
830
- width: 300, // 宽度 (默认: 300)
831
- height: 80, // 高度 (默认: 80)
832
- value: '123456789012', // 条形码数值
833
- format: 'CODE128', // 格式 (默认: CODE128)
834
- color: '#000000', // 条形码颜色 (默认: #000000)
835
- showValue: true, // 是否显示数值 (默认: true)
836
- fontSize: 14, // 数值字体大小 (默认: 14)
837
- fontFamily: 'Arial', // 字体系列
838
- opacity: 1, // 透明度
839
- visible: true, // 是否可见
840
- zIndex: 0 // 层级
841
- })
842
- ```
843
-
844
- ### QRCode
845
-
846
- 二维码组件
847
-
848
- ```javascript
849
- new QRCode({
850
- x: 100, // x 坐标
851
- y: 200, // y 坐标
852
- size: 200, // 二维码尺寸 (默认: 200)
853
- value: 'https://example.com', // 二维码内容 (也支持 content 属性)
854
- color: '#000000', // 二维码颜色 (默认: #000000)
855
- backgroundColor: '#ffffff', // 背景色 (默认: #ffffff)
856
- errorLevel: 'M', // 纠错级别: L/M/Q/H (默认: M)
857
- opacity: 1, // 透明度
858
- visible: true, // 是否可见
859
- zIndex: 0 // 层级
860
- })
861
- ```
862
-
863
- ### Frame
864
-
865
- 装饰边框组件
866
-
867
- ```javascript
868
- new Frame({
869
- x: 100, // x 坐标
870
- y: 200, // y 坐标
871
- width: 400, // 宽度
872
- height: 300, // 高度
873
- style: 'classic', // 边框样式: classic/modern/simple (默认: classic)
874
- color: '#d4af37', // 边框颜色 (默认: #d4af37)
875
- borderWidth: 8, // 边框宽度 (默认: 8)
876
- padding: 20, // 内边距 (默认: 20)
877
- opacity: 1, // 透明度
878
- visible: true, // 是否可见
879
- zIndex: 0 // 层级
880
- })
881
- ```
882
-
883
- ### Chart
884
-
885
- 图表组件
886
-
887
- ```javascript
888
- new Chart({
889
- x: 100, // x 坐标
890
- y: 200, // y 坐标
891
- width: 400, // 宽度 (默认: 400)
892
- height: 300, // 高度 (默认: 300)
893
- type: 'bar', // 图表类型: bar/line/pie (默认: bar)
894
- data: { // 图表数据
895
- labels: ['一月', '二月', '三月', '四月'],
896
- datasets: [{
897
- label: '销售额',
898
- data: [120, 190, 80, 160],
899
- backgroundColor: '#3b82f6'
900
- }]
901
- },
902
- fontFamily: 'Arial', // 字体系列
903
- opacity: 1, // 透明度
904
- visible: true, // 是否可见
905
- zIndex: 0 // 层级
906
- })
907
- ```
908
-
909
- ### Feature
910
-
911
- 特性展示组件
912
-
913
- ```javascript
914
- new Feature({
915
- x: 100, // x 坐标
916
- y: 200, // y 坐标
917
- icon: '🚀', // 特性图标 (emoji)
918
- title: '高性能', // 特性标题
919
- description: '秒级响应,处理速度快', // 特性描述
920
- iconSize: 48, // 图标尺寸 (默认: 48)
921
- fontSize: 18, // 标题字体大小 (默认: 18)
922
- descriptionSize: 14, // 描述字体大小 (默认: 14)
923
- iconColor: '#3b82f6', // 图标颜色 (可选)
924
- titleColor: '#000000', // 标题颜色 (默认: #000000)
925
- descriptionColor: '#666666', // 描述颜色 (默认: #666666)
926
- fontFamily: 'Arial', // 字体系列
927
- opacity: 1, // 透明度
928
- visible: true, // 是否可见
929
- zIndex: 0 // 层级
930
- })
931
- ```
932
-
933
- ### FeatureGrid
934
-
935
- 特性网格组件
936
-
937
- ```javascript
938
- new FeatureGrid({
939
- x: 100, // x 坐标
940
- y: 200, // y 坐标
941
- width: 600, // 宽度
942
- columns: 2, // 列数 (默认: 2)
943
- features: [ // 特性列表
944
- { icon: '🚀', title: '高性能', description: '秒级响应' },
945
- { icon: '🔒', title: '安全可靠', description: '端到端加密' },
946
- { icon: '☁️', title: '云原生', description: '弹性扩展' },
947
- { icon: '📊', title: '数据分析', description: '实时监控' }
948
- ],
949
- gap: 20, // 间距 (默认: 20)
950
- iconSize: 32, // 图标尺寸 (默认: 32)
951
- fontFamily: 'Arial', // 字体系列
952
- opacity: 1, // 透明度
953
- visible: true, // 是否可见
954
- zIndex: 0 // 层级
955
- })
956
- ```
957
-
958
- ### StatCard
959
-
960
- 统计卡片组件
961
-
962
- ```javascript
963
- new StatCard({
964
- x: 100, // x 坐标
965
- y: 200, // y 坐标
966
- width: 200, // 宽度 (默认: 200)
967
- value: '12,847', // 数值
968
- label: '总用户', // 标签
969
- change: '+23%', // 变化值 (可选)
970
- changeColor: '#22c55e', // 变化颜色 (默认: #22c55e)
971
- icon: '👥', // 图标 (可选)
972
- fontSize: 28, // 数值字体大小 (默认: 28)
973
- labelSize: 14, // 标签字体大小 (默认: 14)
974
- valueColor: '#000000', // 数值颜色 (默认: #000000)
975
- labelColor: '#666666', // 标签颜色 (默认: #666666)
976
- fontFamily: 'Arial', // 字体系列
977
- opacity: 1, // 透明度
978
- visible: true, // 是否可见
979
- zIndex: 0 // 层级
980
- })
981
- ```
982
-
983
- ### ProgressCircle
984
-
985
- 圆形进度组件
986
-
987
- ```javascript
988
- new ProgressCircle({
989
- x: 100, // x 坐标 (圆心)
990
- y: 200, // y 坐标 (圆心)
991
- size: 120, // 圆形尺寸 (默认: 120)
992
- value: 75, // 进度值 0-100 (默认: 50)
993
- strokeWidth: 10, // 线条粗细 (默认: 10)
994
- trackColor: '#e5e7eb', // 轨道颜色 (默认: #e5e7eb)
995
- fillColor: '#3b82f6', // 进度颜色 (默认: #3b82f6)
996
- showValue: true, // 是否显示数值 (默认: true)
997
- fontSize: 24, // 数值字体大小 (默认: 24)
998
- fontFamily: 'Arial', // 字体系列
999
- opacity: 1, // 透明度
1000
- visible: true, // 是否可见
1001
- zIndex: 0 // 层级
1002
- })
1003
- ```
1004
-
1005
- ### Star
1006
-
1007
- 单个星星组件
1008
-
1009
- ```javascript
1010
- new Star({
1011
- x: 100, // x 坐标
1012
- y: 200, // y 坐标
1013
- size: 32, // 星星尺寸 (默认: 32)
1014
- filled: true, // 是否填充 (默认: true)
1015
- color: '#fbbf24', // 星星颜色 (默认: #fbbf24)
1016
- opacity: 1, // 透明度
1017
- visible: true, // 是否可见
1018
- zIndex: 0 // 层级
1019
- })
1020
- ```
1021
-
1022
- ---
1023
-
1024
- ## 完整示例
1025
-
1026
- ```javascript
1027
- const { PosterBuilder, TextElement, Button, Badge, Card, ImageFrame, Quote } = require('@chnak/poster')
1028
-
1029
- async function main() {
1030
- // 创建海报
1031
- const poster = new PosterBuilder({
1032
- width: 1080,
1033
- height: 1920,
1034
- backgroundColor: '#f8fafc'
1035
- })
1036
-
1037
- // 创建主图层
1038
- poster.initialize()
1039
- const mainLayer = poster.createLayer({ name: 'main', zIndex: 0 })
1040
-
1041
- // 添加头部
1042
- mainLayer.addElement(new TextElement({
1043
- x: 40, y: 40,
1044
- text: '我的海报标题',
1045
- fontSize: 48,
1046
- fontWeight: 'bold',
1047
- color: '#1e293b'
1048
- }))
1049
-
1050
- // 添加徽章 (自动适配宽高)
1051
- mainLayer.addElement(new Badge({
1052
- x: 40, y: 120,
1053
- text: 'NEW',
1054
- fontSize: 14,
1055
- backgroundColor: '#3b82f6',
1056
- color: '#ffffff',
1057
- radius: 4
1058
- }))
1059
-
1060
- // 添加图片框
1061
- mainLayer.addElement(new ImageFrame({
1062
- x: 40, y: 180,
1063
- width: 320, height: 200,
1064
- src: 'https://picsum.photos/400/300',
1065
- borderColor: '#3b82f6',
1066
- borderWidth: 3,
1067
- radius: 8,
1068
- fit: 'cover'
1069
- }))
1070
-
1071
- // 添加引用块
1072
- mainLayer.addElement(new Quote({
1073
- x: 40, y: 420,
1074
- width: 320,
1075
- text: '这是一段很长的引用文字,会自动换行显示',
1076
- author: '鲁迅',
1077
- backgroundColor: '#2d2d3a',
1078
- borderColor: '#00d9ff',
1079
- padding: 20
1080
- }))
1081
-
1082
- // 添加卡片
1083
- mainLayer.addElement(new Card({
1084
- x: 40, y: 600,
1085
- width: 320,
1086
- height: 200,
1087
- title: '产品特点',
1088
- subtitle: '高性能、安全可靠、云原生',
1089
- backgroundColor: '#ffffff',
1090
- radius: 12,
1091
- padding: 20
1092
- }))
1093
-
1094
- // 添加按钮
1095
- mainLayer.addElement(new Button({
1096
- x: 40, y: 840,
1097
- width: 320,
1098
- height: 56,
1099
- text: '立即购买',
1100
- fontSize: 20,
1101
- backgroundColor: '#3b82f6',
1102
- color: '#ffffff',
1103
- radius: 8
1104
- }))
1105
-
1106
- // 导出
1107
- const outputPath = await poster.exportPNG('my-poster', './output')
1108
- console.log('海报已生成:', outputPath)
1109
-
1110
- poster.destroy()
1111
- }
1112
-
1113
- main().catch(console.error)
1114
- ```
1115
-
1116
- ---
1117
-
1118
- ## 注意事项
1119
-
1120
- 1. **坐标系统**: 所有元素的 x, y 都是相对于父容器的左上角
1121
- 2. **百分比支持**: 位置和尺寸支持百分比字符串,如 `'50%'`
1122
- 3. **透明度**: opacity 值为 0-1 之间,0 表示完全透明,1 表示完全不透明
1123
- 4. **图层顺序**: 通过 zIndex 控制元素的渲染顺序,数值越大越在上层
1124
- 5. **销毁清理**: 使用完 poster 后调用 `destroy()` 方法释放资源
1125
- 6. **字体回退**: 中文文本会自动使用字体回退链确保渲染效果
1126
- 7. **图片加载**: ImageElement 和 ImageFrame 支持网络 URL 和本地 file:// 路径
1127
- 8. **Badge 自动适配**: Badge 根据文字内容自动调整宽高,文字垂直居中
1128
- 9. **Quote 自动换行**: Quote 组件自动将长文本换行,不超出边框
1129
- 10. **ImageFrame 裁剪**: 使用 Group.clipped 实现圆角裁剪