@yaoxiu/marketing-dsl 1.2.0 → 1.4.0

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,3726 @@
1
+ 'use strict';
2
+
3
+ // src/style.ts
4
+ function toLength(value) {
5
+ return typeof value === "number" ? `${value}px` : String(value);
6
+ }
7
+ var px = toLength;
8
+ var STYLE_MAP = {
9
+ // 文字
10
+ color: ["color", String],
11
+ fontSize: ["fontSize", px],
12
+ fontWeight: ["fontWeight", String],
13
+ fontFamily: ["fontFamily", String],
14
+ lineHeight: ["lineHeight", (v) => typeof v === "number" && v > 4 ? px(v) : String(v)],
15
+ letterSpacing: ["letterSpacing", px],
16
+ textAlign: ["textAlign", String],
17
+ textDecoration: ["textDecoration", String],
18
+ whiteSpace: ["whiteSpace", String],
19
+ // 倒计时这类逐帧变化的数字必须等宽,否则数字会左右抖动
20
+ fontVariantNumeric: ["fontVariantNumeric", String],
21
+ // 背景
22
+ background: ["background", String],
23
+ backgroundImage: ["backgroundImage", (v) => `url(${JSON.stringify(String(v))})`],
24
+ backgroundSize: ["backgroundSize", String],
25
+ backgroundPosition: ["backgroundPosition", String],
26
+ backgroundRepeat: ["backgroundRepeat", String],
27
+ // 边框与圆角
28
+ border: ["border", String],
29
+ borderColor: ["borderColor", String],
30
+ borderWidth: ["borderWidth", px],
31
+ borderStyle: ["borderStyle", String],
32
+ radius: ["borderRadius", px],
33
+ // 盒模型
34
+ padding: ["padding", px],
35
+ margin: ["margin", px],
36
+ marginTop: ["marginTop", px],
37
+ marginBottom: ["marginBottom", px],
38
+ marginLeft: ["marginLeft", px],
39
+ marginRight: ["marginRight", px],
40
+ overflow: ["overflow", String],
41
+ opacity: ["opacity", String],
42
+ shadow: ["boxShadow", String],
43
+ cursor: ["cursor", String],
44
+ // flex 容器
45
+ direction: ["flexDirection", (v) => v === "column" ? "column" : "row"],
46
+ gap: ["gap", px],
47
+ wrap: ["flexWrap", (v) => v ? "wrap" : "nowrap"],
48
+ align: ["alignItems", String],
49
+ justify: ["justifyContent", String],
50
+ // flex 子项
51
+ flex: ["flex", String],
52
+ // 不写时子项会被拉满父级交叉轴,标签这类「按内容宽度」的元素要显式声明
53
+ alignSelf: ["alignSelf", String],
54
+ width: ["width", px],
55
+ height: ["height", px],
56
+ minWidth: ["minWidth", px],
57
+ minHeight: ["minHeight", px],
58
+ maxWidth: ["maxWidth", px],
59
+ maxHeight: ["maxHeight", px],
60
+ // 图片
61
+ objectFit: ["objectFit", String],
62
+ // 宽度给百分比、高度按比例算。整图 banner 的热区必须靠它才能用百分比定位:
63
+ // 容器没有真实高度时,子节点的百分比 rect 算出来全是 0。
64
+ aspectRatio: ["aspectRatio", String]
65
+ };
66
+ var ALLOWED_STYLE_KEYS = Object.keys(STYLE_MAP);
67
+
68
+ // src/validate.ts
69
+ var DSL_VERSION = 1;
70
+ var NODE_TYPES = [
71
+ "box",
72
+ "flex",
73
+ "repeat",
74
+ "image",
75
+ "text",
76
+ "button",
77
+ "tabs",
78
+ "countdown"
79
+ ];
80
+ var ACTION_TYPES = [
81
+ "navigate",
82
+ "close",
83
+ "closeAll",
84
+ "open",
85
+ "setState",
86
+ "track",
87
+ "call",
88
+ "sequence"
89
+ ];
90
+ var TRACK_EVENT_PATTERN = /^[a-z][a-z0-9_]{2,63}$/;
91
+ var CLOSE_POSITIONS = [
92
+ "top-right",
93
+ "top-left",
94
+ "top-center",
95
+ "bottom-right",
96
+ "bottom-left",
97
+ "bottom-center"
98
+ ];
99
+
100
+ // src/docs/reconcile.ts
101
+ function pickTokens(rows, columnIndex) {
102
+ const found = [];
103
+ rows.forEach((row) => {
104
+ const cell2 = row[columnIndex];
105
+ if (typeof cell2 !== "string") return;
106
+ const matched = cell2.match(/`([A-Za-z][A-Za-z0-9]*)`/g) || [];
107
+ matched.forEach((item) => found.push(item.slice(1, -1)));
108
+ });
109
+ return found;
110
+ }
111
+ function reconcileRows(options) {
112
+ const { rows, actual, column = 0, inline = false, label = "\u65B0\u589E" } = options;
113
+ const documented = inline ? pickTokens(rows, column) : rows.map((row) => String(row[column]));
114
+ const missing = actual.filter((item) => documented.indexOf(item) === -1);
115
+ const stale = documented.filter((item) => actual.indexOf(item) === -1);
116
+ const width = rows[0] ? rows[0].length : 3;
117
+ const extra = [];
118
+ if (missing.length) {
119
+ extra.push(
120
+ [
121
+ `\u26A0\uFE0F ${label}\uFF08\u6587\u6863\u672A\u8986\u76D6\uFF09`,
122
+ missing.map((item) => `\`${item}\``).join(" "),
123
+ "\u89E3\u91CA\u5668\u91CC\u5DF2\u7ECF\u652F\u6301\uFF0C\u4F46\u8FD9\u4EFD\u6587\u6863\u8FD8\u6CA1\u5199\u8BF4\u660E\uFF0C\u8BF7\u8865\u4E0A"
124
+ ].slice(0, width)
125
+ );
126
+ }
127
+ if (stale.length) {
128
+ extra.push(
129
+ [
130
+ "\u26A0\uFE0F \u5DF2\u5E9F\u5F03",
131
+ stale.map((item) => `\`${item}\``).join(" "),
132
+ "\u89E3\u91CA\u5668\u91CC\u5DF2\u7ECF\u6CA1\u6709\u4E86\uFF0C\u7167\u7740\u5199\u4F1A\u88AB\u6821\u9A8C\u62E6\u4E0B\uFF0C\u8BF7\u4ECE\u6587\u6863\u5220\u6389"
133
+ ].slice(0, width)
134
+ );
135
+ }
136
+ return extra;
137
+ }
138
+
139
+ // src/docs/sections/action.ts
140
+ var actionRows = [
141
+ ["navigate", "`url`\u3001`target`", "\u8DF3\u8F6C\u3002`target` \u9ED8\u8BA4 `_blank`"],
142
+ ["open", "`view`\u3001`mode`", "\u6253\u5F00\u53E6\u4E00\u4E2A\u89C6\u56FE\uFF0C\u89C1\u7B2C 12 \u8282"],
143
+ ["close", "`reason`", "\u5173\u6389\u5F53\u524D\u8FD9\u4E00\u5C42\uFF1B\u53EA\u5269\u4E00\u5C42\u65F6\u5C31\u662F\u6574\u4F53\u5173\u95ED"],
144
+ ["closeAll", "\u2014", "\u4E0D\u7BA1\u51E0\u5C42\uFF0C\u5168\u90E8\u5173\u6389"],
145
+ ["setState", "`key`\u3001`value`", "\u6539\u5C40\u90E8\u72B6\u6001\uFF0C\u7528\u6765\u505A\u9009\u4E2D\u5207\u6362"],
146
+ ["track", "`event`\u3001`params`", "\u57CB\u70B9\u4E0A\u62A5\u3002`event` \u6709\u547D\u540D\u89C4\u8303\uFF0C\u89C1\u4E0B"],
147
+ ["call", "`name`\u3001`params`", "\u8C03\u7528\u5BBF\u4E3B\u6CE8\u518C\u7684\u65B9\u6CD5\uFF08\u5982\u9886\u5238\uFF09\uFF0C`name` \u662F\u767D\u540D\u5355"],
148
+ ["sequence", "`actions`", "\u4F9D\u6B21\u6267\u884C\u591A\u4E2A\u52A8\u4F5C"]
149
+ ];
150
+ var sections = [
151
+ {
152
+ id: "action",
153
+ title: "11. \u52A8\u4F5C",
154
+ blocks: [
155
+ {
156
+ t: "p",
157
+ text: "\u4EFB\u4F55\u8282\u70B9\u52A0\u4E0A `action` \u5C31\u53EF\u4EE5\u70B9\u51FB\u3002\u6240\u6709\u52A8\u4F5C\u7531\u6E32\u67D3\u5668\u7EDF\u4E00\u6267\u884C\uFF0C\u57CB\u70B9\u53E3\u5F84\u5168\u5C40\u4E00\u81F4\u3002"
158
+ },
159
+ {
160
+ t: "table",
161
+ head: ["type", "\u5B57\u6BB5", "\u8BF4\u660E"],
162
+ rows: actionRows.concat(
163
+ reconcileRows({ rows: actionRows, actual: ACTION_TYPES, label: "\u65B0\u589E\u52A8\u4F5C" })
164
+ )
165
+ },
166
+ {
167
+ t: "code",
168
+ code: `// \u5178\u578B\uFF1A\u5148\u57CB\u70B9\u518D\u8DF3\u8F6C\uFF0C\u94FE\u63A5\u8DDF\u7740\u5F53\u524D\u9009\u4E2D\u9879\u8D70
169
+ "action": {
170
+ "type": "sequence",
171
+ "actions": [
172
+ { "type": "track", "event": "popup_order_click",
173
+ "params": { "plan": "{{ current.key }}" } },
174
+ { "type": "navigate", "url": "{{ current.url }}" }
175
+ ]
176
+ }
177
+
178
+ // \u9009\u4E2D\u5207\u6362
179
+ "action": { "type": "setState", "key": "period", "value": "{{ index }}" }`
180
+ },
181
+ {
182
+ t: "note",
183
+ tone: "danger",
184
+ text: "\u94FE\u63A5\u53EA\u5141\u8BB8 `http` / `https` / `mailto` / `tel` \u548C\u76F8\u5BF9\u8DEF\u5F84\u3002`javascript:` \u4F1A\u88AB\u62E6\u4E0B\u5E76\u4E0A\u62A5\u9519\u8BEF\u2014\u2014\u4E00\u4E2A\u300C\u8DF3\u8F6C\u94FE\u63A5\u300D\u5B57\u6BB5\u5982\u679C\u80FD\u5199 `javascript:`\uFF0C\u5C31\u7B49\u4E8E\u5F00\u4E86 JS \u6267\u884C\u6743\u9650\u3002"
185
+ },
186
+ { t: "h3", text: "track \u7684\u4E8B\u4EF6\u540D\u6709\u683C\u5F0F\u8981\u6C42\uFF08\u4E0D\u5408\u89C4\u76F4\u63A5\u5B58\u4E0D\u4E0A\uFF09" },
187
+ {
188
+ t: "p",
189
+ text: `\`track\` \u52A8\u4F5C\u7684 \`event\` \u5FC5\u987B\u5339\u914D \`${String(TRACK_EVENT_PATTERN.source)}\`\uFF1A**\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934**\uFF0C\u4E4B\u540E\u53EA\u80FD\u662F\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\uFF0C\u603B\u957F **3~64** \u4E2A\u5B57\u7B26\u3002`
190
+ },
191
+ {
192
+ t: "note",
193
+ tone: "danger",
194
+ text: "\u8FD9\u662F **error \u7EA7\u6821\u9A8C\uFF0C\u76F4\u63A5\u963B\u65AD\u4FDD\u5B58**\uFF0C\u4E0D\u662F\u8B66\u544A\u3002\u5199\u6210\u4E2D\u6587\u3001\u9A7C\u5CF0\u3001\u5E26\u4E2D\u5212\u7EBF\u7684\u4E8B\u4EF6\u540D\uFF0C\u5728\u7F16\u8F91\u5668\u91CC\u70B9\u4FDD\u5B58\u90A3\u4E00\u523B\u5C31\u4F1A\u88AB\u62E6\u4E0B\u2014\u2014\u4E0D\u662F\u7B49\u4E0A\u7EBF\u540E\u624D\u53D1\u73B0\u6CA1\u6709\u6570\u636E\u3002AI \u751F\u6210\u7684\u914D\u7F6E\u5C24\u5176\u5BB9\u6613\u8E29\u8FD9\u6761\uFF0C\u62FF\u5230 AI \u7684\u8F93\u51FA\u5148\u5728\u8C03\u8BD5\u53F0\u6821\u9A8C\u4E00\u904D\u3002"
195
+ },
196
+ {
197
+ t: "table",
198
+ head: ["\u2705 \u6B63\u786E", "\u274C \u9519\u8BEF", "\u4E3A\u4EC0\u4E48"],
199
+ rows: [
200
+ ["`banner_renew_click`", "`\u7EED\u8D39\u70B9\u51FB`", "\u4E0D\u80FD\u7528\u4E2D\u6587"],
201
+ ["`popup_show`", "`bannerRenewClick`", "\u4E0D\u80FD\u7528\u9A7C\u5CF0 / \u5927\u5199\u5B57\u6BCD"],
202
+ ["`countdown_end`", "`banner-renew-click`", "\u4E0D\u80FD\u7528\u4E2D\u5212\u7EBF\uFF0C\u5206\u8BCD\u4E00\u5F8B\u7528\u4E0B\u5212\u7EBF"],
203
+ ["`cta_click_v2`", "`cta`", "\u4E0D\u8DB3 3 \u4E2A\u5B57\u7B26\uFF0C\u805A\u5408\u7684\u65F6\u5019\u770B\u4E0D\u51FA\u662F\u4EC0\u4E48"],
204
+ ["`notice_close`", "`1_click`", "\u5FC5\u987B\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E0D\u80FD\u662F\u6570\u5B57\u6216\u4E0B\u5212\u7EBF"],
205
+ ["`vip_renew_click`", "`vip renew click`", "\u4E0D\u80FD\u6709\u7A7A\u683C"]
206
+ ]
207
+ },
208
+ { t: "h3", text: "\u5EFA\u8BAE\u7684\u547D\u540D\u6A21\u5F0F\uFF1A`\u5751\u4F4D_\u4E1A\u52A1_\u52A8\u4F5C`" },
209
+ {
210
+ t: "table",
211
+ head: ["\u6BB5", "\u5199\u4EC0\u4E48", "\u4F8B\u5B50"],
212
+ rows: [
213
+ ["\u5751\u4F4D", "\u8FD9\u4E2A\u4E1C\u897F\u662F\u4EC0\u4E48\u5F62\u6001\u3001\u51FA\u73B0\u5728\u54EA", "`popup` `banner` `notice`"],
214
+ ["\u4E1A\u52A1", "\u8FD9\u6B21\u6D3B\u52A8 / \u8FD9\u4E2A\u573A\u666F", "`renew` `vip` `autumn`"],
215
+ ["\u52A8\u4F5C", "\u7528\u6237\u505A\u4E86\u4EC0\u4E48", "`show` `click` `close` `end`"]
216
+ ]
217
+ },
218
+ {
219
+ t: "code",
220
+ code: `banner_renew_click // \u7EED\u8D39 Banner \u88AB\u70B9\u51FB
221
+ popup_vip_show // \u4F1A\u5458\u5F39\u7A97\u66DD\u5149
222
+ popup_vip_close // \u4F1A\u5458\u5F39\u7A97\u5173\u95ED
223
+ notice_autumn_close // \u79CB\u5B63\u6D3B\u52A8\u516C\u544A\u6761\u88AB\u5173\u6389
224
+ countdown_end // \u5012\u8BA1\u65F6\u5F52\u96F6`
225
+ },
226
+ {
227
+ t: "note",
228
+ tone: "info",
229
+ text: "**\u4E8B\u4EF6\u540D\u4E0D\u505A\u767D\u540D\u5355**\uFF0C\u8FD0\u8425\u53EF\u4EE5\u81EA\u7531\u5B9A\u4E49\uFF0C\u53EA\u7EDF\u4E00\u683C\u5F0F\u2014\u2014\u56E0\u4E3A\u540E\u7AEF\u662F\u6309\u524D\u7F00\u805A\u5408\u7684\uFF0C\u683C\u5F0F\u4E00\u4E71\u5C31\u6CA1\u6CD5\u5206\u7EC4\u7EDF\u8BA1\u3002\u540C\u4E00\u573A\u6D3B\u52A8\u7684\u6240\u6709\u4E8B\u4EF6\u7528\u540C\u4E00\u4E2A\u524D\u7F00\uFF0C\u770B\u677F\u4E0A\u5C31\u80FD\u4E00\u773C\u6536\u62E2\u3002\u8981\u533A\u5206\u5177\u4F53\u6863\u4F4D\u3001\u5177\u4F53\u6309\u94AE\uFF0C\u653E `params` \u91CC\uFF0C\u4E0D\u8981\u5F80\u4E8B\u4EF6\u540D\u4E0A\u5806\u3002"
230
+ },
231
+ {
232
+ t: "code",
233
+ code: `// \u2705 \u4E8B\u4EF6\u540D\u5199\u6B7B\uFF0C\u53D8\u91CF\u653E params
234
+ { "type": "track", "event": "popup_renew_click",
235
+ "params": { "plan": "{{ current.key }}", "price": "{{ current.price }}" } }
236
+
237
+ // \u274C \u522B\u628A\u53D8\u91CF\u62FC\u8FDB\u4E8B\u4EF6\u540D\uFF1A\u62FC\u51FA\u6765\u7684\u503C\u53EF\u80FD\u4E0D\u5408\u683C\u5F0F\uFF0C
238
+ // \u800C\u4E14\u6BCF\u4E2A\u6863\u4F4D\u4E00\u4E2A\u4E8B\u4EF6\u540D\uFF0C\u540E\u7AEF\u805A\u5408\u65F6\u4F1A\u6563\u6210\u4E00\u5806
239
+ { "type": "track", "event": "popup_renew_{{ current.key }}" }`
240
+ },
241
+ { t: "h3", text: "close \u5230\u5E95\u5173\u6389\u4E86\u4EC0\u4E48" },
242
+ {
243
+ t: "p",
244
+ text: "`close` \u4E0D\u662F\u6E32\u67D3\u5668\u81EA\u5DF1\u628A\u81EA\u5DF1\u85CF\u8D77\u6765\uFF0C\u800C\u662F**\u901A\u77E5\u5BBF\u4E3B\u9875\u9762\u300C\u7528\u6237\u60F3\u5173\u4E86\u300D**\uFF0C\u7531\u5BBF\u4E3B\u51B3\u5B9A\u5173\u4E0D\u5173\u3002\u8FD9\u662F\u523B\u610F\u7684\uFF1A\u4E00\u6BB5\u914D\u7F6E\u4E0D\u8BE5\u6709\u6743\u9650\u76F4\u63A5\u51B3\u5B9A\u5BBF\u4E3B\u9875\u9762\u7684\u663E\u793A\u3002"
245
+ },
246
+ {
247
+ t: "table",
248
+ head: ["\u573A\u666F", "\u5BBF\u4E3B\u4F1A\u4E0D\u4F1A\u6536\u5230\u901A\u77E5"],
249
+ rows: [
250
+ ["\u5355\u4E2A\u5F39\u7A97 / \u516C\u544A\u6761\uFF0C\u70B9 X \u6216\u70B9\u906E\u7F69", "\u4F1A\uFF0C\u5BBF\u4E3B\u5173\u6389\u5B83"],
251
+ ["\u591A\u89C6\u56FE\u53E0\u4E86\u4E24\u5C42\uFF0C\u5173\u6389\u4E0A\u9762\u90A3\u5C42", "**\u4E0D\u4F1A**\uFF0C\u53EA\u662F\u5185\u90E8\u56DE\u5230\u4E0B\u9762\u90A3\u5C42"],
252
+ ["\u591A\u89C6\u56FE\uFF0C\u5173\u6389\u6700\u540E\u4E00\u5C42", "\u4F1A"],
253
+ ["`closeAll`", "\u4F1A\uFF0C\u4E0D\u7BA1\u5F53\u65F6\u51E0\u5C42"],
254
+ ["\u5012\u8BA1\u65F6 `onEnd` \u914D\u4E86 `close`", "\u4F1A"]
255
+ ]
256
+ },
257
+ {
258
+ t: "note",
259
+ tone: "info",
260
+ text: '`close` \u7684 `reason` \u4F1A\u4E00\u8D77\u4F20\u7ED9\u5BBF\u4E3B\uFF0C\u5BBF\u4E3B\u636E\u6B64\u51B3\u5B9A\u540E\u7EED\u884C\u4E3A\u2014\u2014\u6BD4\u5982 `reason: "user-dismiss"` \u65F6\u8BB0\u4F4F\u300C\u4ECA\u5929\u4E0D\u518D\u663E\u793A\u300D\u3002\u4E0D\u5199 `reason` \u9ED8\u8BA4\u662F `action`\u3002'
261
+ },
262
+ {
263
+ t: "note",
264
+ tone: "warn",
265
+ text: "\u60F3\u8BA9\u5F39\u7A97\u300C\u5173\u4E86\u5C31\u522B\u518D\u51FA\u73B0\u300D\uFF0C\u5149\u9760 `close` \u4E0D\u591F\u2014\u2014\u5B83\u53EA\u7BA1\u8FD9\u4E00\u6B21\u3002\u8981\u914D\u4E00\u6761 `call` \u8BA9\u5BBF\u4E3B\u8BB0\u4E0B\u6765\uFF08\u89C1\u793A\u4F8B \u2461 \u548C \u2464 \u7684\u300C\u4E0D\u518D\u63D0\u9192\u300D\uFF09\u3002"
266
+ },
267
+ { t: "h3", text: "\u66DD\u5149\u548C\u5173\u95ED\u4E5F\u8981\u57CB\u70B9\uFF1Astage.onShow / stage.onClose" },
268
+ {
269
+ t: "p",
270
+ text: "\u53EA\u7ED9\u6309\u94AE\u57CB\u70B9\u4F1A\u6F0F\u6389\u6700\u57FA\u672C\u7684\u8F6C\u5316\u6570\u636E\u2014\u2014\u5F39\u4E86\u591A\u5C11\u6B21\u3001\u591A\u5C11\u4EBA\u76F4\u63A5\u5173\u6389\u3001\u662F\u70B9 X \u8D70\u7684\u8FD8\u662F\u70B9\u906E\u7F69\u8D70\u7684\u3002\u8FD9\u4E24\u4E2A\u94A9\u5B50\u5199\u5728 `stage` \u4E0A\uFF0C\u6BCF\u4E2A\u89C6\u56FE\u5404\u81EA\u4E00\u5957\u3002"
271
+ },
272
+ {
273
+ t: "code",
274
+ code: `"stage": {
275
+ "width": 420, "height": "auto", "layout": "flow",
276
+
277
+ // \u66DD\u5149\uFF1A\u6570\u636E\u5C31\u7EEA\u3001\u5F39\u7A97\u771F\u6B63\u6E32\u67D3\u51FA\u6765\u65F6\u89E6\u53D1\u4E00\u6B21
278
+ "onShow": { "type": "track", "event": "popup_show", "params": { "popup": "renew" } },
279
+
280
+ // \u5173\u95ED\uFF1A\u70B9 X\u3001\u70B9\u906E\u7F69\u3001\u8D70 close \u52A8\u4F5C\u3001\u88AB replace \u9876\u6389\uFF0C\u90FD\u4F1A\u89E6\u53D1
281
+ "onClose": { "type": "track", "event": "popup_close",
282
+ "params": { "popup": "renew", "reason": "{{ closeReason }}" } }
283
+ }`
284
+ },
285
+ {
286
+ t: "table",
287
+ head: ["closeReason", "\u4EC0\u4E48\u65F6\u5019"],
288
+ rows: [
289
+ ["`close-button`", "\u70B9\u4E86\u5173\u95ED\u6309\u94AE"],
290
+ ["`mask`", "\u70B9\u4E86\u906E\u7F69\uFF08\u9700\u8981 `maskClosable: true`\uFF09"],
291
+ ["`replace`", "\u88AB `open` \u7684 `replace` \u6A21\u5F0F\u9876\u6389"],
292
+ ["\u81EA\u5B9A\u4E49\u503C", '`close` \u52A8\u4F5C\u91CC\u81EA\u5DF1\u5199\u7684 `reason`\uFF0C\u5982 `"never-remind"`'],
293
+ ["`action`", "`close` \u52A8\u4F5C\u6CA1\u5199 `reason` \u65F6\u7684\u9ED8\u8BA4\u503C"]
294
+ ]
295
+ },
296
+ {
297
+ t: "note",
298
+ tone: "info",
299
+ text: "\u66DD\u5149\u57CB\u70B9\u7B49\u6570\u636E\u6E90\u8FD4\u56DE\u540E\u624D\u89E6\u53D1\u2014\u2014\u6570\u636E\u6CA1\u56DE\u6765\u65F6\u5F39\u7A97\u6839\u672C\u6CA1\u6E32\u67D3\uFF0C\u8FD9\u65F6\u5019\u4E0A\u62A5\u66DD\u5149\u4F1A\u628A\u8F6C\u5316\u7387\u7B97\u4F4E\u3002\u591A\u89C6\u56FE\u4E0B\u6BCF\u5C42\u5404\u57CB\u5404\u7684\uFF0C\u53EF\u4EE5\u5206\u522B\u7EDF\u8BA1\u300C\u516C\u544A\u6761\u66DD\u5149\u300D\u548C\u300C\u70B9\u5F00\u540E\u7684\u5F39\u7A97\u66DD\u5149\u300D\u3002"
300
+ },
301
+ { t: "h3", text: "\u516C\u544A\u6761 / Banner \u600E\u4E48\u5173" },
302
+ {
303
+ t: "p",
304
+ text: "\u516C\u544A\u6761\u4E0D\u9002\u5408\u7528 `stage.closeButton`\uFF08\u90A3\u662F\u538B\u5728\u89D2\u4E0A\u7684\u5706\u5F62\u6309\u94AE\uFF0C\u4E3A\u6574\u56FE\u5F39\u7A97\u8BBE\u8BA1\u7684\uFF09\u3002\u76F4\u63A5\u5728\u884C\u672B\u653E\u4E00\u4E2A\u5E26 `close` \u52A8\u4F5C\u7684 `text` \u8282\u70B9\u66F4\u81EA\u7136\uFF0C\u8DDF\u5176\u4ED6\u5185\u5BB9\u4E00\u8D77\u6392\u7248\u3002"
305
+ },
306
+ {
307
+ t: "code",
308
+ code: `{ "type": "text", "content": "\u2715",
309
+ "style": { "alignSelf": "center", "width": 22, "height": 22,
310
+ "textAlign": "center", "lineHeight": 22, "cursor": "pointer" },
311
+ "action": { "type": "sequence", "actions": [
312
+ { "type": "track", "event": "notice_close" },
313
+ { "type": "call", "name": "setNeverRemind" }, // \u8BB0\u4F4F\u522B\u518D\u51FA
314
+ { "type": "close", "reason": "user-dismiss" }
315
+ ] } }`
316
+ },
317
+ {
318
+ t: "note",
319
+ tone: "info",
320
+ text: "`close` \u53EA\u662F\u901A\u77E5\u5BBF\u4E3B\u300C\u7528\u6237\u5173\u6389\u4E86\u300D\uFF0C**\u5173\u6389\u4E4B\u540E\u8981\u4E0D\u8981\u518D\u51FA\u3001\u9694\u591A\u4E45\u518D\u51FA\u7531\u5BBF\u4E3B\u51B3\u5B9A**\u3002\u60F3\u8BA9\u5B83\u522B\u518D\u51FA\u73B0\uFF0C\u914D\u4E00\u6761 `call` \u8BA9\u5BBF\u4E3B\u8BB0\u4E0B\u6765\u3002"
321
+ },
322
+ {
323
+ t: "note",
324
+ tone: "info",
325
+ text: "\u6574\u6761\u516C\u544A\u6761\u53EF\u70B9\u3001\u884C\u672B\u53C8\u6709 \xD7 \u65F6\u4E0D\u7528\u62C5\u5FC3\u51B2\u7A81\uFF1A\u5185\u5C42\u8282\u70B9\u6709\u81EA\u5DF1\u7684 `action` \u5C31\u4E0D\u4F1A\u518D\u5192\u6CE1\u7ED9\u5916\u5C42\uFF0C\u70B9 \xD7 \u53EA\u4F1A\u5173\u95ED\uFF0C\u4E0D\u4F1A\u540C\u65F6\u89E6\u53D1\u5916\u5C42\u7684\u8DF3\u8F6C\u6216\u5F39\u7A97\u3002"
326
+ }
327
+ ]
328
+ }
329
+ ];
330
+ var action_default = sections;
331
+
332
+ // src/docs/sections/countdown.ts
333
+ var sections2 = [
334
+ {
335
+ id: "countdown",
336
+ title: "10. \u5012\u8BA1\u65F6",
337
+ blocks: [
338
+ {
339
+ t: "p",
340
+ text: "\u5012\u8BA1\u65F6\u8282\u70B9\u53EA\u8D1F\u8D23\u7B97\u65F6\u95F4\uFF0C\u4E0D\u8D1F\u8D23\u957F\u4EC0\u4E48\u6837\u3002\u5B83\u628A\u65F6\u95F4\u7247\u6BB5\u6CE8\u5165 `children` \u7684\u4E0A\u4E0B\u6587\uFF0C\u6392\u7248\u4F60\u81EA\u5DF1\u5199\u3002"
341
+ },
342
+ {
343
+ t: "code",
344
+ code: `{
345
+ "type": "countdown",
346
+ "to": "{{ user.trialEndAt }}",
347
+ "precision": "cs", // "s" \u6BCF\u79D2\uFF08\u9ED8\u8BA4\uFF09| "cs" \u5398\u79D2\uFF0C\u9010\u5E27\u5237\u65B0
348
+ "as": "cd", // \u6CE8\u5165\u7684\u53D8\u91CF\u540D\uFF0C\u9ED8\u8BA4 cd
349
+ "style": { "align": "center", "gap": 6 },
350
+ "onEnd": { "type": "track", "event": "countdown_end" },
351
+ "children": [
352
+ { "type": "text", "content": "{{ cd.h }}", "style": { "width": 42, "fontVariantNumeric": "tabular-nums" } },
353
+ { "type": "text", "content": ":" },
354
+ { "type": "text", "content": "{{ cd.m }}", "style": { "width": 42, "fontVariantNumeric": "tabular-nums" } },
355
+ { "type": "text", "content": ":" },
356
+ { "type": "text", "content": "{{ cd.s }}", "style": { "width": 42, "fontVariantNumeric": "tabular-nums" } }
357
+ ]
358
+ }`
359
+ },
360
+ {
361
+ t: "table",
362
+ head: ["\u7247\u6BB5", "\u542B\u4E49"],
363
+ rows: [
364
+ ["`cd.d`", "\u5929\u6570"],
365
+ ["`cd.h`", "\u5C0F\u65F6 0~23\uFF0C\u5DF2\u8865\u96F6"],
366
+ ["`cd.hAll`", "\u603B\u5C0F\u65F6\u6570\uFF0C\u7528\u4E8E `143:58:07` \u8FD9\u79CD\u4E0D\u6309\u5929\u6298\u7B97\u7684\u5199\u6CD5"],
367
+ ["`cd.m`", "\u5206\uFF0C\u5DF2\u8865\u96F6"],
368
+ ["`cd.s`", "\u79D2\uFF0C\u5DF2\u8865\u96F6"],
369
+ ["`cd.cs`", '\u5398\u79D2\uFF0C\u5DF2\u8865\u96F6\u3002\u53EA\u5728 `precision: "cs"` \u4E0B\u6709\u610F\u4E49'],
370
+ ["`cd.ended`", "\u662F\u5426\u5DF2\u7ED3\u675F"]
371
+ ]
372
+ },
373
+ { t: "h3", text: "onEnd\uFF1A\u5012\u8BA1\u65F6\u5F52\u96F6\u65F6\u505A\u70B9\u4EC0\u4E48" },
374
+ {
375
+ t: "p",
376
+ text: "\u5012\u8BA1\u65F6\u8D70\u5230 0 \u4F1A\u89E6\u53D1\u4E00\u6B21 `onEnd`\uFF0C\u53EF\u4EE5\u662F\u4EFB\u610F\u52A8\u4F5C\u2014\u2014\u4E0A\u62A5\u57CB\u70B9\u3001\u81EA\u52A8\u5173\u6389\u5F39\u7A97\u3001\u6216\u8005\u6362\u5230\u300C\u6D3B\u52A8\u5DF2\u7ED3\u675F\u300D\u90A3\u4E00\u5C4F\u3002"
377
+ },
378
+ {
379
+ t: "code",
380
+ code: `// \u4E0A\u62A5\u57CB\u70B9
381
+ "onEnd": { "type": "track", "event": "countdown_end" }
382
+
383
+ // \u5230\u70B9\u81EA\u52A8\u5173\u5F39\u7A97
384
+ "onEnd": { "type": "close", "reason": "countdown-end" }
385
+
386
+ // \u5230\u70B9\u6362\u4E00\u5C4F\uFF08\u591A\u89C6\u56FE\uFF09
387
+ "onEnd": { "type": "open", "view": "expired", "mode": "replace" }`
388
+ },
389
+ {
390
+ t: "note",
391
+ tone: "info",
392
+ text: "**\u53EA\u5728\u300C\u7528\u6237\u773C\u770B\u7740\u5B83\u5F52\u96F6\u300D\u65F6\u89E6\u53D1**\u3002\u6253\u5F00\u5F39\u7A97\u65F6\u6D3B\u52A8\u5C31\u5DF2\u7ECF\u8FC7\u671F\u7684\uFF0C\u4E0D\u4F1A\u89E6\u53D1 `onEnd`\u2014\u2014\u5426\u5219\u6BCF\u6B21\u6709\u4EBA\u6253\u5F00\u4E00\u4E2A\u8FC7\u671F\u5F39\u7A97\u90FD\u4E0A\u62A5\u4E00\u6B21\uFF0C\u8FD9\u4E2A\u57CB\u70B9\u5C31\u6CA1\u6CD5\u7528\u4E86\u3002\u8FD9\u79CD\u60C5\u51B5\u663E\u793A\u4E0A\u4ECD\u7136\u8D70 `endText`\u3002"
393
+ },
394
+ {
395
+ t: "p",
396
+ text: "\u60F3\u8BA9\u300C\u5DF2\u7ED3\u675F\u300D\u548C\u300C\u8FDB\u884C\u4E2D\u300D\u663E\u793A\u6210\u5B8C\u5168\u4E0D\u540C\u7684\u6392\u7248\uFF0C\u7528 `cd.ended` \u914D `visibleWhen`\uFF0C\u4E0D\u9700\u8981\u9760 `onEnd`\u3002"
397
+ },
398
+ {
399
+ t: "code",
400
+ code: `"children": [
401
+ { "type": "text", "content": "\u8FD8\u5269 {{ cd.h }}:{{ cd.m }}:{{ cd.s }}",
402
+ "visibleWhen": "!cd.ended" },
403
+ { "type": "text", "content": "\u6D3B\u52A8\u5DF2\u7ED3\u675F", "visibleWhen": "cd.ended",
404
+ "style": { "color": "#999" } }
405
+ ]`
406
+ },
407
+ { t: "h3", text: "to\uFF1A\u7ED3\u675F\u65F6\u95F4\u600E\u4E48\u5199" },
408
+ { t: "p", text: "**\u4E0D\u9700\u8981\u65F6\u95F4\u6233**\uFF0C\u76F4\u63A5\u5199\u65E5\u671F\u5C31\u884C\u3002\u4E0B\u9762\u8FD9\u4E9B\u5199\u6CD5\u90FD\u80FD\u8BC6\u522B\uFF1A" },
409
+ {
410
+ t: "table",
411
+ head: ["\u5199\u6CD5", "\u4F8B\u5B50"],
412
+ rows: [
413
+ ["\u65E5\u671F + \u65F6\u95F4", '`"2026-09-01 18:00:00"` `"2026-09-01 18:00"`'],
414
+ ["\u53EA\u5199\u65E5\u671F\uFF08\u5F53\u5929\u96F6\u70B9\uFF09", '`"2026-09-01"` `"2026/09/01"` `"2026.09.01"`'],
415
+ ["\u4E2D\u6587", '`"2026\u5E749\u67081\u65E5"` `"2026\u5E749\u67081\u65E5 18\u70B9"` `"2026\u5E749\u67081\u65E5 18\u70B930\u5206"`'],
416
+ ["\u63A5\u53E3\u8FD4\u56DE\u7684\u683C\u5F0F", '`"2026-09-01T18:00:00Z"` `"2026-09-01T18:00:00+08:00"`'],
417
+ ["\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09", "`1786949074954`"],
418
+ ["\u4ECE\u6570\u636E\u91CC\u53D6", '`"{{ user.trialEndAt }}"`']
419
+ ]
420
+ },
421
+ {
422
+ t: "note",
423
+ tone: "warn",
424
+ text: '\u5199\u6210 `"\u4E0B\u5468\u4E09"`\u300C\u6D3B\u52A8\u7ED3\u675F\u65F6\u300D\u8FD9\u7C7B\u8BC6\u522B\u4E0D\u4E86\u7684\u5185\u5BB9\uFF0C**\u4FDD\u5B58\u524D\u5C31\u4F1A\u62A5\u9519**\u3002\u8FD9\u662F\u523B\u610F\u7684\uFF1A\u8BC6\u522B\u4E0D\u4E86\u4F1A\u88AB\u5F53\u6210\u300C\u5DF2\u7ECF\u7ED3\u675F\u300D\uFF0C\u9875\u9762\u4E0A\u53EA\u6709\u4E00\u884C\u300C\u5DF2\u7ED3\u675F\u300D\uFF0C\u4E0D\u5F53\u573A\u62E6\u4E0B\u7684\u8BDD\u4F60\u6839\u672C\u770B\u4E0D\u51FA\u662F\u65F6\u95F4\u5199\u9519\u4E86\u3002'
425
+ },
426
+ {
427
+ t: "p",
428
+ text: "\u4E0D\u5199 `children` \u65F6\u9000\u5316\u6210\u4E00\u884C\u6587\u672C\uFF0C\u7528 `format` \u63A7\u5236\uFF0C\u5360\u4F4D\u7B26\u662F `{d}` `{h}` `{hAll}` `{m}` `{s}` `{cs}`\uFF0C\u7ED3\u675F\u540E\u663E\u793A `endText`\u3002"
429
+ },
430
+ {
431
+ t: "note",
432
+ tone: "info",
433
+ text: "\u5269\u4F59\u65F6\u95F4\u6309\u300C\u7ED3\u675F\u65F6\u95F4 \u2212 \u5F53\u524D\u65F6\u95F4\u300D\u5B9E\u65F6\u7B97\uFF0C\u4E0D\u662F\u9010\u5E27\u9012\u51CF\u3002\u6240\u4EE5\u6D4F\u89C8\u5668\u628A\u540E\u53F0\u6807\u7B7E\u9875\u6682\u505C\u540E\u518D\u5207\u56DE\u6765\uFF0C\u663E\u793A\u4F1A\u81EA\u52A8\u6821\u51C6\uFF0C\u4E0D\u4F1A\u8D70\u6162\u3002"
434
+ }
435
+ ]
436
+ }
437
+ ];
438
+ var countdown_default = sections2;
439
+
440
+ // src/docs/sections/data-state.ts
441
+ var sections3 = [
442
+ {
443
+ id: "data",
444
+ title: "8. \u6570\u636E\u4E0E\u72B6\u6001",
445
+ blocks: [
446
+ { t: "h3", text: "data\uFF1A\u5199\u6B7B\u7684\u6570\u636E" },
447
+ {
448
+ t: "code",
449
+ code: `"data": {
450
+ "plans": [
451
+ { "key": "basic", "name": "\u57FA\u7840\u7248", "price": "\xA5299", "url": "https://..." },
452
+ { "key": "pro", "name": "\u4E13\u4E1A\u7248", "price": "\xA5899", "url": "https://..." }
453
+ ]
454
+ }`
455
+ },
456
+ { t: "h3", text: "data\uFF1A\u4ECE\u540E\u7AEF\u53D6" },
457
+ {
458
+ t: "code",
459
+ code: `"data": {
460
+ "plans": { "$source": "listPlans", "params": { "scene": "renew" } }
461
+ }`
462
+ },
463
+ {
464
+ t: "note",
465
+ tone: "danger",
466
+ text: "`$source` \u53EA\u80FD\u586B\u540E\u7AEF\u6CE8\u518C\u8FC7\u7684\u6570\u636E\u6E90\u540D\u79F0\uFF0C\u5728\u7F16\u8F91\u5668\u91CC\u4ECE\u4E0B\u62C9\u6846\u9009\u3002\u8FD9\u91CC**\u4E0D\u63A5\u53D7\u63A5\u53E3\u5730\u5740**\u2014\u2014\u80FD\u586B\u4EFB\u610F URL \u5C31\u7B49\u4E8E\u5F00\u4E86\u8D8A\u6743\u62C9\u6570\u548C SSRF \u7684\u53E3\u5B50\u3002\u9700\u8981\u65B0\u6570\u636E\u6E90\u627E\u540E\u7AEF\u767B\u8BB0\uFF0C\u4E0D\u8981\u60F3\u529E\u6CD5\u7ED5\u3002"
467
+ },
468
+ {
469
+ t: "p",
470
+ text: "\u6570\u636E\u6CA1\u56DE\u6765\u3001\u6216\u8005\u62C9\u5931\u8D25\uFF0C\u5F39\u7A97\u90FD**\u4E0D\u4F1A\u6E32\u67D3**\uFF08\u4E0D\u5F39\u7A7A\u58F3\uFF09\u3002\u6240\u4EE5\u4E0D\u7528\u5728 DSL \u91CC\u5904\u7406\u52A0\u8F7D\u6001\u3002"
471
+ },
472
+ { t: "h3", text: "state\uFF1A\u5C40\u90E8\u72B6\u6001" },
473
+ {
474
+ t: "p",
475
+ text: "\u7528\u6765\u8BB0\u300C\u5F53\u524D\u9009\u4E2D\u7B2C\u51E0\u4E2A\u300D\u8FD9\u7C7B\u4FE1\u606F\u3002\u521D\u59CB\u503C\u5199\u5728 `state` \u91CC\uFF0C\u7528\u6237\u4EA4\u4E92\u65F6\u7531 `setState` \u52A8\u4F5C\u6539\u3002"
476
+ },
477
+ { t: "code", code: `"state": { "period": 1 }` },
478
+ { t: "h3", text: "derived\uFF1A\u63A8\u5BFC\u522B\u540D" },
479
+ {
480
+ t: "p",
481
+ text: "\u628A\u300C\u5F53\u524D\u9009\u4E2D\u7684\u90A3\u4E00\u6761\u300D\u8D77\u4E2A\u540D\u5B57\uFF0C\u5176\u4ED6\u8282\u70B9\u76F4\u63A5\u8BFB\u5B83\u3002\u6709\u4E86\u5B83\uFF0C\u5207\u6362\u65F6\u4EF7\u683C\u3001\u56FE\u7247\u3001\u8DF3\u8F6C\u94FE\u63A5\u3001\u57CB\u70B9\u53C2\u6570\u5168\u90E8\u81EA\u52A8\u8054\u52A8\uFF0C\u7248\u5F0F\u53EA\u6392\u4E00\u904D\u3002"
482
+ },
483
+ {
484
+ t: "code",
485
+ code: `"data": { "plans": [ ... ] },
486
+ "state": { "period": 1 },
487
+ "derived": { "current": { "list": "plans", "indexBy": "period" } }
488
+
489
+ // \u4E4B\u540E\u4EFB\u610F\u8282\u70B9\u91CC\u90FD\u80FD\u7528\uFF1A
490
+ // {{ current.name }} {{ current.price }} {{ current.url }}`
491
+ },
492
+ {
493
+ t: "table",
494
+ head: ["\u5B57\u6BB5", "\u8BF4\u660E"],
495
+ rows: [
496
+ ["list", "`data` \u91CC\u7684\u6570\u7EC4\u5B57\u6BB5\u540D"],
497
+ ["indexBy", "`state` \u91CC\u7684\u4E0B\u6807\u5B57\u6BB5\u540D"]
498
+ ]
499
+ }
500
+ ]
501
+ },
502
+ {
503
+ id: "expression",
504
+ title: "9. \u8868\u8FBE\u5F0F\u4E0E\u63D2\u503C",
505
+ blocks: [
506
+ { t: "h3", text: "\u80FD\u8BFB\u5230\u4EC0\u4E48" },
507
+ {
508
+ t: "table",
509
+ head: ["\u53D8\u91CF", "\u6765\u6E90"],
510
+ rows: [
511
+ ["`plans` \u7B49", "`data` \u7684\u5B57\u6BB5\u76F4\u63A5\u63D0\u5230\u9876\u5C42"],
512
+ ["`state.xxx`", "\u5F53\u524D\u5C40\u90E8\u72B6\u6001"],
513
+ ["`user.xxx`", "\u5BBF\u4E3B\u9875\u9762\u6CE8\u5165\u7684\u7528\u6237\u4FE1\u606F\uFF08\u7248\u672C\u3001\u5230\u671F\u5929\u6570\u3001\u5E97\u94FA\u540D\u2026\uFF09\uFF0C\u4E0D\u7528\u53D1\u8BF7\u6C42"],
514
+ ["`current` \u7B49", "`derived` \u63A8\u5BFC\u51FA\u6765\u7684\u522B\u540D"],
515
+ ["`item` / `index`", "\u4EC5\u5728 `repeat` \u7684 `template` \u5185\u53EF\u7528"],
516
+ ["`cd.xxx`", "\u4EC5\u5728 `countdown` \u7684 `children` \u5185\u53EF\u7528"]
517
+ ]
518
+ },
519
+ { t: "h3", text: "\u5728\u54EA\u4E9B\u5730\u65B9\u80FD\u5199 {{ }}" },
520
+ {
521
+ t: "p",
522
+ text: "`content`\u3001`src`\u3001`text`\u3001`to`\u3001**`style` \u7684\u6BCF\u4E2A\u503C**\uFF0C\u4EE5\u53CA\u52A8\u4F5C\u7684 `url` / `event` / `params`\u3002\u6574\u4E32\u6B63\u597D\u662F\u4E00\u4E2A `{{ }}` \u65F6\u8FD4\u56DE\u539F\u59CB\u7C7B\u578B\uFF08\u6570\u5B57\u4ECD\u662F\u6570\u5B57\uFF09\uFF0C\u5426\u5219\u6309\u5B57\u7B26\u4E32\u62FC\u63A5\u3002"
523
+ },
524
+ {
525
+ t: "note",
526
+ tone: "warn",
527
+ text: "`track` \u52A8\u4F5C\u7684 `event` \u867D\u7136\u652F\u6301\u63D2\u503C\uFF0C\u4F46**\u7B97\u51FA\u6765\u7684\u7ED3\u679C\u4ECD\u8981\u7B26\u5408\u4E8B\u4EF6\u540D\u683C\u5F0F**\uFF08\u5C0F\u5199\u5B57\u6BCD / \u6570\u5B57 / \u4E0B\u5212\u7EBF\uFF0C\u89C1\u7B2C 11 \u8282\uFF09\u3002\u7528 `{{ }}` \u62FC\u4E8B\u4EF6\u540D\u65F6\uFF0C\u63D2\u8FDB\u53BB\u7684\u503C\u4E0D\u80FD\u662F\u4E2D\u6587\u6216\u5927\u5199\u2014\u2014\u90A3\u79CD\u683C\u5F0F\u9519\u8BEF\u8981\u5230\u8FD0\u884C\u65F6\u624D\u66B4\u9732\uFF0C\u4FDD\u5B58\u65F6\u6821\u9A8C\u4E0D\u5230\u3002**\u63A8\u8350\u505A\u6CD5\u662F\u4E8B\u4EF6\u540D\u5199\u6B7B\uFF0C\u628A\u53D8\u91CF\u653E\u8FDB `params`**\uFF0C\u8FD9\u6837\u540E\u7AEF\u4E5F\u597D\u805A\u5408\u3002"
528
+ },
529
+ { t: "h3", text: "\u652F\u6301\u7684\u8FD0\u7B97" },
530
+ {
531
+ t: "list",
532
+ items: [
533
+ "\u53D6\u503C\uFF1A`a.b.c`\u3001`a[0]`",
534
+ "\u5B57\u9762\u91CF\uFF1A\u6570\u5B57\u3001\u5B57\u7B26\u4E32\u3001`true` / `false` / `null`",
535
+ "\u4E00\u5143\uFF1A`!` `-`",
536
+ "\u7B97\u672F\uFF1A`+` `-` `*` `/` `%`",
537
+ "\u6BD4\u8F83\uFF1A`==` `!=` `===` `!==` `<` `>` `<=` `>=`",
538
+ "\u903B\u8F91\uFF1A`&&` `||`",
539
+ "\u4E09\u5143\uFF1A`a ? b : c`"
540
+ ]
541
+ },
542
+ {
543
+ t: "note",
544
+ tone: "danger",
545
+ text: "**\u4E0D\u652F\u6301\u51FD\u6570\u8C03\u7528\u548C\u8D4B\u503C**\uFF0C`constructor` / `__proto__` / `prototype` \u4E5F\u8BFB\u4E0D\u5230\u3002\u8FD9\u662F\u5B89\u5168\u8FB9\u754C\uFF0C\u4E0D\u4F1A\u56E0\u4E3A\u300C\u5C31\u5DEE\u4E00\u70B9\u70B9\u300D\u800C\u653E\u5F00\u3002\u8868\u8FBE\u5F0F\u5199\u9519\u4E0D\u4F1A\u8BA9\u5F39\u7A97\u5D29\u6E83\uFF0C\u53EA\u4F1A\u6C42\u503C\u4E3A\u7A7A\u3002"
546
+ },
547
+ { t: "h3", text: "visibleWhen\uFF1A\u6309\u6761\u4EF6\u663E\u793A" },
548
+ {
549
+ t: "code",
550
+ code: `// \u53EA\u6709\u8C6A\u534E\u7248\u624D\u663E\u793A\u8D60\u54C1\u884C
551
+ { "type": "text", "content": "\u{1F381} {{ current.gift }}",
552
+ "visibleWhen": "current.gift != ''" }
553
+
554
+ // \u53EA\u5BF9\u65B0\u7528\u6237\u663E\u793A
555
+ { "type": "text", "content": "\u65B0\u4EBA\u4E13\u4EAB", "visibleWhen": "user.isNew" }`
556
+ },
557
+ { t: "h3", text: "\u5207 tab \u65F6\u6574\u4F53\u6362\u80A4 / \u6362\u5E03\u5C40" },
558
+ {
559
+ t: "p",
560
+ text: "`style` \u91CC\u7684\u6BCF\u4E2A\u503C\u3001\u4EE5\u53CA `stage` \u7684 `width` / `height` / `style`\uFF0C\u90FD\u80FD\u5199 `{{ }}`\u3002\u628A\u914D\u8272\u3001\u80CC\u666F\u653E\u8FDB data \u7684\u6BCF\u4E00\u9879\u91CC\uFF0C\u5207 tab \u65F6\u6574\u4E2A\u5F39\u7A97\u7684\u80CC\u666F\u3001\u6309\u94AE\u8272\u4F1A\u4E00\u8D77\u53D8\u3002\u6392\u7248\u7ED3\u6784\u5B8C\u5168\u4E0D\u540C\u65F6\uFF0C\u5199\u4E24\u5957\u8282\u70B9\u5404\u914D\u4E00\u4E2A `visibleWhen`\uFF0C\u540C\u4E00\u65F6\u523B\u53EA\u663E\u793A\u4E00\u5957\u3002"
561
+ },
562
+ {
563
+ t: "code",
564
+ code: `"data": { "plans": [
565
+ { "label": "\u5305\u5E74", "theme": "#7B3FF2", "bg": "linear-gradient(160deg,#2b1055,#7597de)", "mode": "grid" },
566
+ { "label": "\u5305\u6708", "theme": "#FF6B35", "bg": "linear-gradient(160deg,#3a1c0c,#ff9a3c)", "mode": "list" }
567
+ ] },
568
+ "state": { "tab": 0 },
569
+ "derived": { "cur": { "list": "plans", "indexBy": "tab" } },
570
+
571
+ // \u5F39\u7A97\u81EA\u5DF1\u7684\u80CC\u666F\u8DDF\u7740\u5207
572
+ "stage": { "layout": "flow", "style": { "background": "{{ cur.bg }}", "radius": 16 } },
573
+
574
+ "nodes": [
575
+ { "type": "tabs", "bind": "plans", "stateKey": "tab" },
576
+ // \u4E24\u5957\u6392\u7248\uFF0C\u53EA\u663E\u793A\u5176\u4E2D\u4E00\u5957
577
+ { "type": "flex", "visibleWhen": "cur.mode == 'grid'", "style": { "direction": "row" }, "children": [] },
578
+ { "type": "flex", "visibleWhen": "cur.mode == 'list'", "style": { "direction": "column" }, "children": [] },
579
+ { "type": "button", "text": "\u5F00\u901A", "style": { "background": "{{ cur.theme }}" } }
580
+ ]`
581
+ }
582
+ ]
583
+ }
584
+ ];
585
+ var data_state_default = sections3;
586
+
587
+ // src/docs/sections/guide-basics.ts
588
+ var sections4 = [
589
+ {
590
+ id: "ai",
591
+ title: "0. \u4E0D\u4F1A\u5199 JSON\uFF1F\u7528 AI \u751F\u6210",
592
+ blocks: [
593
+ {
594
+ t: "p",
595
+ text: "\u8FD9\u4EFD\u6587\u6863\u662F\u7ED9\u300C\u8981\u7406\u89E3\u89C4\u5219\u7684\u4EBA\u300D\u770B\u7684\u3002\u5982\u679C\u4F60\u53EA\u662F\u60F3\u5FEB\u70B9\u505A\u51FA\u4E00\u4E2A\u5F39\u7A97\uFF0C\u4E0D\u7528\u4ECE\u5934\u8BFB\u2014\u2014\u5DE6\u8FB9\u6709\u300C\u590D\u5236 AI \u63D0\u793A\u8BCD\u300D\u6309\u94AE\uFF0C\u8D70\u4E0B\u9762\u56DB\u6B65\u5C31\u884C\u3002"
596
+ },
597
+ {
598
+ t: "list",
599
+ items: [
600
+ "\u70B9\u5DE6\u4FA7 **\u590D\u5236 AI \u63D0\u793A\u8BCD**",
601
+ "\u6253\u5F00\u4EFB\u610F AI\uFF08\u8C46\u5305 / DeepSeek / \u901A\u4E49 / ChatGPT / Claude \u90FD\u884C\uFF09\uFF0C\u7C98\u8D34\u8FDB\u53BB",
602
+ "\u5728\u63D0\u793A\u8BCD\u6700\u540E\u7684\u300C\u7528\u6237\u9700\u6C42\u300D\u90A3\u91CC\uFF0C\u7528\u4E2D\u6587\u5199\u6E05\u695A\u4F60\u8981\u4EC0\u4E48",
603
+ "AI \u4F1A\u56DE\u4E00\u6BB5 JSON\uFF0C\u590D\u5236\u5230\u300C\u8C03\u8BD5\u53F0\u300D\u5DE6\u8FB9\u7684\u7F16\u8F91\u6846\uFF0C\u70B9\u300C\u6E32\u67D3\u300D\u770B\u6548\u679C"
604
+ ]
605
+ },
606
+ { t: "h3", text: "\u9700\u6C42\u600E\u4E48\u63CF\u8FF0" },
607
+ { t: "p", text: "\u8D8A\u5177\u4F53\u8D8A\u7701\u4E8B\u3002\u5EFA\u8BAE\u81F3\u5C11\u8BF4\u6E05\u695A\u8FD9\u4E94\u4EF6\u4E8B\uFF1A" },
608
+ {
609
+ t: "code",
610
+ code: `\u573A\u666F\uFF1A\u8BD5\u7528\u8FD8\u5269 3 \u5929\uFF0C\u63D0\u9192\u7528\u6237\u7EED\u8D39
611
+ \u5F62\u6001\uFF1A\u5F39\u7A97\uFF0C\u5BBD 520\uFF0C\u9AD8\u5EA6\u81EA\u9002\u5E94
612
+ \u5185\u5BB9\uFF1A
613
+ - \u9876\u90E8\u6DF1\u7EA2\u6E10\u53D8\uFF0C\u5DE6\u4E0A\u89D2\u6807\u7B7E\u300C\u23F0 \u8BD5\u7528\u5269 3 \u5929\u300D
614
+ - \u4E0B\u9762 2\xD72 \u56DB\u4E2A\u6570\u636E\u683C\u5B50\uFF1A\u5DF2\u4E0A\u67B6 68 \u4E2A\u5546\u54C1\u3001AI \u4F18\u5316 15 \u6B21\u3001\u767D\u5E95\u56FE 42 \u5F20\u3001\u7ECF\u8425\u4EFB\u52A1 6 \u9879
615
+ - \u767D\u8272\u533A\u57DF\u6807\u9898\u300C3 \u5929\u540E\u8BD5\u7528\u5230\u671F\uFF0C\u4EE5\u4E0B\u80FD\u529B\u4F1A\u505C\u6B62\uFF1A\u300D
616
+ - \u4E09\u6761\u6D41\u5931\u6E05\u5355\uFF08\u6D45\u7EA2\u5E95\u3001\u7EA2\u70B9\u5F00\u5934\uFF09
617
+ - \u56DB\u4E2A\u4EF7\u683C\u6863\u4F4D\u53EF\u4EE5\u70B9\u9009\uFF1A\u6708\u4ED8 \xA515 / \u5B63\u4ED8 \xA532\uFF08\u9ED8\u8BA4\u9009\u4E2D\u3001\u6807"\u63A8\u8350"\uFF09/ \u534A\u5E74 \xA564 / \u5E74\u4ED8 \xA5128
618
+ - \u5E95\u90E8\u7EA2\u8272\u6E10\u53D8\u5927\u6309\u94AE\uFF0C\u6587\u6848\u8DDF\u7740\u9009\u4E2D\u7684\u6863\u4F4D\u53D8
619
+ \u6309\u94AE\u8DF3\u8F6C\uFF1Ahttps://xxx.com/order?p={\u6863\u4F4D}
620
+ \u57CB\u70B9\uFF1A\u70B9\u6863\u4F4D\u4E0A\u62A5 popup_period_select\uFF0C\u70B9\u6309\u94AE\u4E0A\u62A5 popup_renew_click`
621
+ },
622
+ {
623
+ t: "note",
624
+ tone: "warn",
625
+ text: "AI \u751F\u6210\u7684\u914D\u7F6E**\u4E00\u5B9A\u8981\u5728\u8C03\u8BD5\u53F0\u91CC\u6E32\u67D3\u786E\u8BA4**\u518D\u7528\u3002\u6821\u9A8C\u4E0D\u901A\u8FC7\u65F6\u628A\u7EA2\u8272\u9519\u8BEF\u4FE1\u606F\u6574\u6BB5\u8D34\u56DE\u7ED9 AI\uFF0C\u5B83\u4E00\u822C\u4E00\u6B21\u5C31\u80FD\u6539\u5BF9\u3002"
626
+ },
627
+ {
628
+ t: "note",
629
+ tone: "info",
630
+ text: "\u56FE\u7247\u548C\u8DF3\u8F6C\u94FE\u63A5 AI \u7F16\u4E0D\u51FA\u6765\uFF0C\u5B83\u4F1A\u7528\u5360\u4F4D\u5730\u5740\u3002\u8BB0\u5F97\u81EA\u5DF1\u6362\u6210\u771F\u5B9E\u7684\uFF0C\u7136\u540E\u5728\u300C\u771F\u5B9E\u6001\u300D\u6A21\u5F0F\u4E0B\u70B9\u4E00\u904D\u6309\u94AE\uFF0C\u786E\u8BA4\u8DF3\u8F6C\u6B63\u786E\u3002"
631
+ }
632
+ ]
633
+ },
634
+ {
635
+ id: "concept",
636
+ title: "1. \u5148\u7406\u89E3\u4E00\u4EF6\u4E8B",
637
+ blocks: [
638
+ {
639
+ t: "p",
640
+ text: "\u8FD9\u5957 DSL \u7528\u4E00\u6BB5 JSON \u63CF\u8FF0\u5F39\u7A97 / Banner / \u516C\u544A\u957F\u4EC0\u4E48\u6837\u3001\u70B9\u4E86\u4F1A\u600E\u6837\u3002\u5B83\u53D6\u4EE3\u7684\u662F\u300C\u8BA9\u8FD0\u8425\u5199\u4E00\u6BB5 JS \u585E\u8FDB\u9875\u9762\u300D\u7684\u505A\u6CD5\u3002"
641
+ },
642
+ {
643
+ t: "note",
644
+ tone: "danger",
645
+ text: "\u6838\u5FC3\u7EA6\u675F\uFF1A\u914D\u7F6E\u662F\u6570\u636E\uFF0C\u6C38\u8FDC\u4E0D\u80FD\u53D8\u6210\u53EF\u6267\u884C\u4EE3\u7801\u3002\u6240\u4EE5\u8FD9\u91CC\u6CA1\u6709\u51FD\u6570\u8C03\u7528\u3001\u6CA1\u6709\u8D4B\u503C\u3001\u6CA1\u6709 eval\u3002\u4F60\u5728 JSON \u91CC\u5199\u4E0D\u51FA\u300C\u903B\u8F91\u300D\uFF0C\u53EA\u80FD\u5199\u300C\u63CF\u8FF0\u300D\u3002\u9047\u5230\u8868\u8FBE\u4E0D\u4E86\u7684\u9700\u6C42\uFF0C\u5148\u627E\u5BF9\u5E94\u7684\u8282\u70B9\u6216\u5B57\u6BB5\uFF0C\u4E0D\u8981\u60F3\u529E\u6CD5\u7ED5\u8FC7\u53BB\u2014\u2014\u7ED5\u8FC7\u53BB\u7684\u53E3\u5B50\u5C31\u662F\u4E0B\u4E00\u4E2A\u7EBF\u4E0A\u5B89\u5168\u4E8B\u6545\u3002"
646
+ },
647
+ {
648
+ t: "p",
649
+ text: "\u6362\u4E2A\u89D2\u5EA6\u60F3\uFF1A\u6392\u7248\u662F\u6570\u636E\uFF0C\u4E0D\u662F\u903B\u8F91\u3002\u300C\u8FD9\u4E2A\u5F39\u7A97\u957F\u4EC0\u4E48\u6837\u300D\u518D\u590D\u6742\uFF0C\u672C\u8D28\u90FD\u662F\u300C\u54EA\u4E9B\u5143\u7D20\u3001\u653E\u5728\u54EA\u3001\u591A\u5927\u3001\u4EC0\u4E48\u6837\u5F0F\u3001\u70B9\u4E86\u5E72\u561B\u300D\uFF0C\u8FD9\u662F\u4E00\u68F5\u80FD\u88AB JSON \u63CF\u8FF0\u7684\u6811\u3002\u771F\u6B63\u9700\u8981\u4EE3\u7801\u7684\u53EA\u6709\u300C\u65F6\u95F4\u300D\u8FD9\u4E00\u7C7B\u8FD0\u884C\u65F6\u6570\u636E\uFF0C\u90A3\u90E8\u5206\u7531 countdown \u8282\u70B9\u63D0\u4F9B\u3002"
650
+ },
651
+ { t: "h3", text: "\u5199\u4E4B\u524D\u5148\u60F3\u6E05\u695A\u4E09\u4EF6\u4E8B" },
652
+ {
653
+ t: "list",
654
+ items: [
655
+ "\u8FD9\u4E2A\u4E1C\u897F\u662F\u5F39\u7A97\uFF08\u5C45\u4E2D\u6D6E\u5C42\uFF09\u3001Banner \u8FD8\u662F\u516C\u544A\u6761\uFF1F \u2192 \u51B3\u5B9A `type` \u548C `stage.layout`",
656
+ "\u91CC\u9762\u7684\u5185\u5BB9\u662F\u5199\u6B7B\u7684\uFF0C\u8FD8\u662F\u8981\u4ECE\u540E\u7AEF\u53D6\uFF1F \u2192 \u51B3\u5B9A `data` \u7528\u5B57\u9762\u91CF\u8FD8\u662F `$source`",
657
+ "\u7528\u6237\u70B9\u4E86\u4E4B\u540E\u6709\u6CA1\u6709\u300C\u5207\u6362\u300D\u8FD9\u79CD\u5C40\u90E8\u4EA4\u4E92\uFF1F \u2192 \u51B3\u5B9A\u8981\u4E0D\u8981 `state` \u548C `derived`"
658
+ ]
659
+ }
660
+ ]
661
+ },
662
+ {
663
+ id: "structure",
664
+ title: "2. \u9876\u5C42\u7ED3\u6784",
665
+ blocks: [
666
+ {
667
+ t: "code",
668
+ code: `{
669
+ "version": 1, // \u5FC5\u586B\uFF0C\u56FA\u5B9A\u5199 1
670
+ "type": "popup", // popup \u5F39\u7A97 | banner | notice \u516C\u544A\u6761
671
+ "meta": { "name": "\u7EED\u8D39\u5F39\u7A97" }, // \u7ED9\u4EBA\u770B\u7684\u5907\u6CE8\uFF0C\u4E0D\u5F71\u54CD\u6E32\u67D3
672
+
673
+ "stage": { ... }, // \u821E\u53F0\uFF1A\u6574\u4F53\u5C3A\u5BF8\u3001\u906E\u7F69\u3001\u5173\u95ED\u6309\u94AE
674
+ "data": { ... }, // \u6570\u636E\uFF1A\u5199\u6B7B\u7684\uFF0C\u6216\u4ECE\u540E\u7AEF\u6570\u636E\u6E90\u53D6
675
+ "state": { ... }, // \u5C40\u90E8\u72B6\u6001\uFF1A\u6BD4\u5982\u5F53\u524D\u9009\u4E2D\u7B2C\u51E0\u4E2A\u89C4\u683C
676
+ "derived": { ... }, // \u7531 data + state \u63A8\u5BFC\u7684\u522B\u540D
677
+ "nodes": [ ... ] // \u8282\u70B9\u6811\uFF1A\u771F\u6B63\u7684\u6392\u7248\u5185\u5BB9
678
+ }`
679
+ },
680
+ {
681
+ t: "table",
682
+ head: ["\u5B57\u6BB5", "\u5FC5\u586B", "\u8BF4\u660E"],
683
+ rows: [
684
+ [
685
+ "version",
686
+ "\u662F",
687
+ "\u56FA\u5B9A 1\u3002\u4EE5\u540E DSL \u7ED3\u6784\u5927\u6539\u4F1A\u5347\u7248\u672C\uFF0C\u6E32\u67D3\u5668\u6309\u7248\u672C\u8D70\u4E0D\u540C\u5206\u652F\uFF0C\u8001\u914D\u7F6E\u7EE7\u7EED\u80FD\u6E32\u67D3"
688
+ ],
689
+ ["type", "\u662F", "popup / banner / notice\u3002popup \u4F1A\u5E26\u906E\u7F69\u5E76\u5C45\u4E2D\uFF0C\u5176\u4F59\u662F\u666E\u901A\u5757"],
690
+ ["meta", "\u5426", "\u53EA\u653E\u5907\u6CE8\u4FE1\u606F\uFF0C\u6E32\u67D3\u5668\u4E0D\u8BFB"],
691
+ ["stage", "\u662F", "\u821E\u53F0\u914D\u7F6E\uFF0C\u89C1\u7B2C 3 \u8282"],
692
+ ["data", "\u5426", "\u6570\u636E\uFF0C\u89C1\u7B2C 8 \u8282"],
693
+ ["state", "\u5426", "\u5C40\u90E8\u72B6\u6001\uFF0C\u89C1\u7B2C 8 \u8282"],
694
+ ["derived", "\u5426", "\u63A8\u5BFC\u522B\u540D\uFF0C\u89C1\u7B2C 8 \u8282"],
695
+ ["nodes", "\u662F", "\u975E\u7A7A\u6570\u7EC4\uFF0C\u89C1\u7B2C 6 \u8282"]
696
+ ]
697
+ }
698
+ ]
699
+ }
700
+ ];
701
+ var guide_basics_default = sections4;
702
+
703
+ // src/docs/sections/guide-layout.ts
704
+ var sections5 = [
705
+ {
706
+ id: "layout",
707
+ title: "4. \u5E03\u5C40\u6A21\u578B\uFF08\u6700\u91CD\u8981\uFF09",
708
+ blocks: [
709
+ {
710
+ t: "p",
711
+ text: "\u53EA\u6709\u4E24\u79CD\u6392\u5E03\u65B9\u5F0F\u3002\u5199\u4E4B\u524D\u5FC5\u987B\u5148\u660E\u786E\u81EA\u5DF1\u5728\u54EA\u4E00\u79CD\u5BB9\u5668\u91CC\uFF0C\u8FD9\u662F\u9519\u5F97\u6700\u591A\u7684\u5730\u65B9\u3002"
712
+ },
713
+ {
714
+ t: "table",
715
+ head: ["\u6392\u5E03\u65B9\u5F0F", "\u51FA\u73B0\u5728\u54EA", "\u5B50\u8282\u70B9\u600E\u4E48\u5B9A\u4F4D"],
716
+ rows: [
717
+ [
718
+ "\u7EDD\u5BF9\u5B9A\u4F4D",
719
+ "`box` \u7684 children\uFF1B`stage.layout` \u4E3A `absolute` \u65F6 stage \u7684\u76F4\u63A5\u5B50\u8282\u70B9",
720
+ "**\u5FC5\u987B**\u5199 `rect: [x, y, w, h]`\uFF0C\u6309\u5750\u6807\u6446"
721
+ ],
722
+ [
723
+ "\u6D41\u5F0F",
724
+ "`flex` / `repeat` / `countdown` \u7684 children\uFF1B`stage.layout` \u4E3A `flow` \u65F6 stage \u7684\u76F4\u63A5\u5B50\u8282\u70B9",
725
+ "`rect` \u88AB\u5FFD\u7565\uFF0C\u7528 `style` \u7684 `width` / `height` / `flex` / `padding` / `gap` \u63A7\u5236"
726
+ ]
727
+ ]
728
+ },
729
+ { t: "h3", text: "\u600E\u4E48\u9009" },
730
+ {
731
+ t: "table",
732
+ head: ["\u573A\u666F", "\u914D\u7F6E"],
733
+ rows: [
734
+ [
735
+ "\u5F39\u7A97\uFF1A\u56FA\u5B9A\u753B\u5E03\uFF0C\u5143\u7D20\u6309\u5750\u6807\u6446",
736
+ '`layout: "absolute"`\uFF08\u9ED8\u8BA4\uFF09\uFF0C`height` \u7ED9\u5177\u4F53\u6570\u503C'
737
+ ],
738
+ [
739
+ "\u5F39\u7A97\uFF1A\u4E0A\u4E0B\u51E0\u4E2A\u533A\u5757\u4F9D\u6B21\u6392\uFF08\u591A\u6570\u771F\u5B9E\u5F39\u7A97\uFF09",
740
+ '`layout: "flow"`\uFF0C`height: "auto"`\uFF0C\u6BCF\u4E2A\u533A\u5757\u662F\u4E00\u4E2A `flex` \u8282\u70B9'
741
+ ],
742
+ [
743
+ "\u516C\u544A\u6761 / Banner\uFF1A\u5BBD\u5EA6\u94FA\u6EE1\u7236\u7EA7\uFF0C\u9AD8\u5EA6\u7531\u5185\u5BB9\u6491\u5F00",
744
+ '`layout: "flow"`\uFF0C`width: "100%"`\uFF0C`height: "auto"`'
745
+ ]
746
+ ]
747
+ },
748
+ {
749
+ t: "note",
750
+ tone: "warn",
751
+ text: '`height: "auto"` \u5FC5\u987B\u914D `layout: "flow"`\u3002\u7EDD\u5BF9\u5B9A\u4F4D\u7684\u5B50\u8282\u70B9\u6491\u4E0D\u8D77\u7236\u7EA7\u9AD8\u5EA6\uFF0C\u4F1A\u584C\u6210 0\u3002\u6821\u9A8C\u5C42\u4F1A\u76F4\u63A5\u62E6\u4E0B\u8FD9\u4E2A\u7EC4\u5408\u5E76\u63D0\u793A\u3002'
752
+ },
753
+ { t: "h3", text: "\u4E24\u79CD\u65B9\u5F0F\u53EF\u4EE5\u5D4C\u5957" },
754
+ {
755
+ t: "p",
756
+ text: "\u5E38\u89C1\u5199\u6CD5\uFF1A\u6574\u4F53\u7528 `flow` \u4E00\u5C42\u5C42\u5F80\u4E0B\u6392\uFF0C\u67D0\u4E2A\u9700\u8981\u300C\u89D2\u6807\u538B\u5728\u8FB9\u6846\u5916\u300D\u4E4B\u7C7B\u7CBE\u7EC6\u5B9A\u4F4D\u7684\u5C0F\u5361\u7247\u5355\u72EC\u7528 `box` \u5207\u56DE\u7EDD\u5BF9\u5B9A\u4F4D\u3002"
757
+ },
758
+ {
759
+ t: "code",
760
+ code: `{
761
+ "stage": { "width": 520, "height": "auto", "layout": "flow" },
762
+ "nodes": [
763
+ { "type": "flex", "style": { "direction": "column", "padding": 20 },
764
+ "children": [
765
+ { "type": "text", "content": "\u6807\u9898" },
766
+ { "type": "box", "style": { "width": 120, "height": 100 },
767
+ "children": [
768
+ { "type": "text", "rect": [0, -9, "100%", 20], "content": "\u89D2\u6807" }
769
+ ]
770
+ }
771
+ ]
772
+ }
773
+ ]
774
+ }`
775
+ }
776
+ ]
777
+ },
778
+ {
779
+ id: "length",
780
+ title: "5. \u957F\u5EA6\u5355\u4F4D",
781
+ blocks: [
782
+ {
783
+ t: "p",
784
+ text: "`stage.width/height`\u3001`rect` \u7684\u56DB\u4E2A\u503C\u3001\u4EE5\u53CA `style` \u91CC\u7684\u5C3A\u5BF8\u7C7B\u5C5E\u6027\uFF0C\u63A5\u53D7\u4E0B\u9762\u51E0\u79CD\u5199\u6CD5\uFF1A"
785
+ },
786
+ {
787
+ t: "table",
788
+ head: ["\u5199\u6CD5", "\u4F8B\u5B50", "\u542B\u4E49"],
789
+ rows: [
790
+ ["\u6570\u5B57", "`460`", "\u6309 px \u5904\u7406"],
791
+ ["\u76F8\u5BF9\u5355\u4F4D\u5B57\u7B26\u4E32", '`"100%"` `"2rem"` `"50vw"`', "\u539F\u6837\u4EA4\u7ED9 CSS"],
792
+ ["auto", '`"auto"`', "\u7531\u5185\u5BB9\u6491\u5F00"],
793
+ ["calc", '`"calc(100% - 48px)"`', "\u539F\u6837\u4EA4\u7ED9 CSS"],
794
+ ["CSS \u7B80\u5199", '`"10px 14px"`', "\u7528\u4E8E `padding` / `margin` \u8FD9\u7C7B"],
795
+ ["\u63D2\u503C", '`"{{ quota.pct }}%"`', "\u8FD0\u884C\u65F6\u6C42\u503C\uFF0C\u6821\u9A8C\u65F6\u8DF3\u8FC7"]
796
+ ]
797
+ },
798
+ {
799
+ t: "p",
800
+ text: "\u53D7\u5355\u4F4D\u6821\u9A8C\u7684\u5C5E\u6027\uFF1A`width` `height` `minWidth` `minHeight` `maxWidth` `maxHeight` `radius` `padding` `margin` `marginTop/Bottom/Left/Right` `gap` `fontSize` `letterSpacing` `borderWidth`\u3002"
801
+ },
802
+ {
803
+ t: "note",
804
+ tone: "warn",
805
+ text: '\u5199\u9519\u5355\u4F4D\uFF08`"100pct"` / `"8px;"` / `"50%%"`\uFF09\u5728\u4FDD\u5B58\u524D\u5C31\u4F1A\u88AB\u62E6\u4E0B\u5E76\u6307\u51FA\u5177\u4F53\u4F4D\u7F6E\u3002'
806
+ },
807
+ {
808
+ t: "code",
809
+ code: `// \u5F39\u7A97\u7A84\u5C4F\u8DDF\u7740\u7236\u7EA7\u6536\uFF0C\u6700\u5BBD\u4E0D\u8D85\u8FC7 420
810
+ "stage": { "width": "calc(100% - 48px)", "style": { "maxWidth": 420 } }
811
+
812
+ // \u80CC\u666F\u56FE\u94FA\u6EE1\u821E\u53F0\uFF0C\u821E\u53F0\u5BBD\u5EA6\u53D8\u4E86\u4E0D\u7528\u6539\u914D\u7F6E
813
+ { "type": "image", "rect": [0, 0, "100%", "100%"], "src": "..." }
814
+
815
+ // \u516C\u544A\u6761\uFF1A\u6587\u5B57\u5403\u6389\u5269\u4F59\u5BBD\u5EA6\uFF0C\u6309\u94AE\u56FA\u5B9A\u5BBD
816
+ { "type": "text", "style": { "flex": "1" } }
817
+ { "type": "button", "style": { "width": 64 } }`
818
+ },
819
+ {
820
+ t: "note",
821
+ tone: "info",
822
+ text: '\u767E\u5206\u6BD4\u9AD8\u5EA6\u4F9D\u8D56\u7236\u7EA7\u6709\u786E\u5B9A\u9AD8\u5EA6\u3002`stage.height` \u662F `"auto"` \u65F6\uFF0C\u5B50\u8282\u70B9\u5199 `height: "100%"` \u4E0D\u751F\u6548\u2014\u2014\u8FD9\u662F CSS \u672C\u8EAB\u7684\u89C4\u5219\u3002'
823
+ },
824
+ { t: "h3", text: "aspectRatio\uFF1A\u5BBD\u5EA6\u81EA\u9002\u5E94\u7684\u6574\u56FE Banner \u5FC5\u987B\u7528\u5B83" },
825
+ {
826
+ t: "p",
827
+ text: "Banner \u901A\u5E38\u662F\u300C\u5BBD\u5EA6\u94FA\u6EE1\u3001\u9AD8\u5EA6\u6309\u56FE\u7247\u6BD4\u4F8B\u7B97\u300D\u3002\u4F46\u70ED\u533A\u5BB9\u5668 `box` \u7684\u5B50\u8282\u70B9\u662F\u7EDD\u5BF9\u5B9A\u4F4D\u7684\uFF0C\u6491\u4E0D\u8D77 `box` \u7684\u9AD8\u5EA6\uFF1B`box` \u9AD8\u5EA6\u662F 0\uFF0C\u70ED\u533A\u7684\u767E\u5206\u6BD4 `rect` \u5C31\u5168\u7B97\u6210 0\uFF0C\u6574\u7247\u70ED\u533A\u5931\u6548\u3002\u7ED9\u5BB9\u5668\u5199 `aspectRatio` \u58F0\u660E\u5BBD\u9AD8\u6BD4\uFF0C\u9AD8\u5EA6\u5C31\u7531\u6D4F\u89C8\u5668\u6309\u5F53\u524D\u5BBD\u5EA6\u7B97\u51FA\u6765\u3002"
828
+ },
829
+ {
830
+ t: "code",
831
+ code: `// \u8BBE\u8BA1\u7A3F 1200 \xD7 300\uFF0C\u70ED\u533A\u5750\u6807\u6309\u6BD4\u4F8B\u6362\u7B97\u6210\u767E\u5206\u6BD4
832
+ { "type": "box",
833
+ "style": { "width": "100%", "aspectRatio": "1200 / 300" },
834
+ "children": [
835
+ { "type": "image", "rect": [0, 0, "100%", "100%"], "src": "..." },
836
+ { "type": "box", "rect": ["70%", "58%", "22%", "24%"], "action": {...} }
837
+ ] }`
838
+ },
839
+ {
840
+ t: "note",
841
+ tone: "warn",
842
+ text: "\u5199\u6B7B `height` \u4E5F\u80FD\u8DD1\uFF0C\u4F46\u53EA\u5728\u67D0\u4E00\u4E2A\u5BBD\u5EA6\u4E0B\u70ED\u533A\u5BF9\u5F97\u4E0A\uFF0C\u6362\u4E2A\u5C4F\u5E55\u5BBD\u5EA6\u5C31\u6574\u4F53\u9519\u4F4D\u3002\u53EA\u8981\u5BB9\u5668\u5BBD\u5EA6\u662F\u767E\u5206\u6BD4\uFF0C\u5C31\u8BE5\u7528 `aspectRatio` \u800C\u4E0D\u662F\u56FA\u5B9A\u9AD8\u5EA6\u3002"
843
+ }
844
+ ]
845
+ }
846
+ ];
847
+ var guide_layout_default = sections5;
848
+
849
+ // src/docs/sections/guide-stage.ts
850
+ var sections6 = [
851
+ {
852
+ id: "stage",
853
+ title: "3. stage \u821E\u53F0",
854
+ blocks: [
855
+ {
856
+ t: "code",
857
+ code: `"stage": {
858
+ "width": 520,
859
+ "height": "auto",
860
+ "layout": "flow", // absolute\uFF08\u9ED8\u8BA4\uFF09| flow
861
+ "mask": true, // \u662F\u5426\u6709\u534A\u900F\u660E\u906E\u7F69\uFF0C\u4EC5 popup \u6709\u6548
862
+ "maskClosable": false, // \u70B9\u906E\u7F69\u80FD\u5426\u5173\u95ED
863
+ "closeButton": {
864
+ "show": true,
865
+ "position": "top-right", // top-right | top-left | bottom-center
866
+ "offset": [14, 14]
867
+ },
868
+ "style": { "radius": 18, "maxWidth": 420 }
869
+ }`
870
+ },
871
+ {
872
+ t: "table",
873
+ head: ["\u5B57\u6BB5", "\u9ED8\u8BA4", "\u8BF4\u660E"],
874
+ rows: [
875
+ ["width", "320", "\u6570\u5B57\u6309 px\uFF1B\u4E5F\u53EF\u5199 `100%` / `calc(100% - 48px)`"],
876
+ ["height", "400", '\u6570\u5B57\u6309 px\uFF1B\u5199 `auto` \u65F6\u5FC5\u987B\u540C\u65F6\u8BBE `layout: "flow"`'],
877
+ ["layout", "absolute", "\u5B50\u8282\u70B9\u6392\u5E03\u65B9\u5F0F\uFF0C\u89C1\u7B2C 4 \u8282\u3002\u9009\u9519\u662F\u6700\u5E38\u89C1\u7684\u9519\u8BEF"],
878
+ ["mask", "true", "\u4EC5 popup \u751F\u6548"],
879
+ ["maskClosable", "false", "\u70B9\u906E\u7F69\u5173\u95ED"],
880
+ ["closeButton", "\u65E0", "\u4E0D\u5199\u5C31\u6CA1\u6709\u5173\u95ED\u6309\u94AE"],
881
+ ["style", "\u65E0", "\u821E\u53F0\u81EA\u8EAB\u6837\u5F0F\uFF0C\u5E38\u7528 `radius` / `maxWidth` / `background`"]
882
+ ]
883
+ },
884
+ {
885
+ t: "note",
886
+ tone: "info",
887
+ text: "\u5F39\u7A97\u6BD4\u5C4F\u5E55\u9AD8\u65F6\u4F1A\u81EA\u52A8\u51FA\u73B0\u6EDA\u52A8\uFF0C\u4E0D\u4F1A\u88AB\u88C1\u6389\u3002\u6240\u4EE5\u505A\u957F\u5F39\u7A97\u4E0D\u7528\u62C5\u5FC3\u5C0F\u5C4F\u770B\u4E0D\u5168\uFF0C\u4F46\u4ECD\u5EFA\u8BAE\u63A7\u5236\u5728 700px \u4EE5\u5185\u3002"
888
+ },
889
+ { t: "h3", text: "closeButton \u5173\u95ED\u6309\u94AE" },
890
+ {
891
+ t: "code",
892
+ code: `"closeButton": {
893
+ "show": true,
894
+ "position": "top-right", // top-right | top-left | top-center
895
+ // bottom-right | bottom-left | bottom-center
896
+ "offset": [12, 12], // [x, y]\uFF0C\u76F8\u5BF9\u951A\u70B9\u90A3\u6761\u8FB9\u7684\u8DDD\u79BB
897
+ "size": 26,
898
+ // icon / image \u90FD\u4E0D\u5199\u65F6\uFF0C\u753B\u7684\u662F\u5185\u7F6E\u7684\u77E2\u91CF \xD7 \u56FE\u6807\uFF08\u63A8\u8350\uFF0C\u4E0D\u7528\u914D\uFF09
899
+ "icon": "\u2715", // \u53EF\u9009\uFF1A\u6539\u6210\u6587\u672C\u5B57\u7B26 / emoji
900
+ "image": "https://...", // \u53EF\u9009\uFF1A\u6539\u6210\u56FE\u7247\uFF0C\u5199\u4E86\u5C31\u76D6\u8FC7 icon
901
+ "style": { "background": "rgba(0,0,0,0.35)", "color": "#fff", "fontSize": 18 }
902
+ }`
903
+ },
904
+ {
905
+ t: "table",
906
+ head: ["\u5B57\u6BB5", "\u9ED8\u8BA4", "\u8BF4\u660E"],
907
+ rows: [
908
+ ["show", "true", "\u4E0D\u5199\u6574\u4E2A `closeButton` \u5C31\u6CA1\u6709\u5173\u95ED\u6309\u94AE"],
909
+ ["position", "top-right", "\u951A\u5728\u54EA\u4E2A\u89D2\u3002`*-center` \u4F1A\u6C34\u5E73\u5C45\u4E2D"],
910
+ ["offset", "[8, 8]", "\u76F8\u5BF9\u951A\u70B9\u8FB9\u7684\u8DDD\u79BB\u3002**\u5199\u8D1F\u503C\u5C31\u8DD1\u5230\u5F39\u7A97\u5916\u9762**"],
911
+ ["size", "26", "\u6309\u94AE\u5BBD\u9AD8"],
912
+ [
913
+ "icon",
914
+ "\u65E0\uFF08\u7528\u5185\u7F6E\u77E2\u91CF\u56FE\u6807\uFF09",
915
+ "**\u53EF\u9009\u8986\u76D6\u9879**\u3002\u5199\u4E86\u5C31\u7528\u8FD9\u4E2A\u6587\u672C\u5B57\u7B26 / emoji \u4EE3\u66FF\u5185\u7F6E\u56FE\u6807"
916
+ ],
917
+ ["image", "\u65E0", "\u56FE\u7247\u56FE\u6807\uFF0C\u4F1A\u94FA\u6EE1\u6309\u94AE\uFF08`object-fit: contain`\uFF09"],
918
+ ["style", "\u65E0", "\u8D70 style \u767D\u540D\u5355\uFF0C\u53EF\u6539\u80CC\u666F\u3001\u989C\u8272\u3001\u5706\u89D2\u3001\u8FB9\u6846\u3001\u9634\u5F71\u7B49"]
919
+ ]
920
+ },
921
+ { t: "h3", text: "\u56FE\u6807\u753B\u4EC0\u4E48\uFF1A\u4E09\u9009\u4E00\uFF0C\u4F18\u5148\u7EA7\u56FA\u5B9A" },
922
+ {
923
+ t: "table",
924
+ head: ["\u4F18\u5148\u7EA7", "\u5199\u6CD5", "\u753B\u51FA\u6765\u662F\u4EC0\u4E48"],
925
+ rows: [
926
+ ["1\uFF08\u6700\u9AD8\uFF09", "\u5199\u4E86 `image`", "\u8FD9\u5F20\u56FE\uFF0C\u94FA\u6EE1\u6309\u94AE"],
927
+ [
928
+ "2",
929
+ "\u6CA1\u5199 `image`\u3001\u5199\u4E86 `icon`",
930
+ "\u8FD9\u4E2A\u6587\u672C\u5B57\u7B26 / emoji\uFF0C\u8DDF\u7740 `style` \u7684 `color` `fontSize` \u8D70"
931
+ ],
932
+ [
933
+ "3\uFF08\u9ED8\u8BA4\uFF09",
934
+ "\u4E24\u4E2A\u90FD\u4E0D\u5199",
935
+ "**\u5185\u7F6E\u7684\u77E2\u91CF \xD7 \u56FE\u6807**\uFF1A\u4E00\u6BB5\u5185\u8054 SVG \u753B\u7684\u4E24\u6761\u4EA4\u53C9\u7EBF\uFF0C\u989C\u8272\u8DDF\u968F `style.color`"
936
+ ]
937
+ ]
938
+ },
939
+ {
940
+ t: "note",
941
+ tone: "info",
942
+ text: "\u9ED8\u8BA4\u56FE\u6807\u4EE5\u524D\u662F `\xD7` \u8FD9\u4E2A\u5B57\u7B26\uFF0C\u73B0\u5728\u6539\u6210\u4E86\u77E2\u91CF\u56FE\u3002\u539F\u56E0\u662F `\xD7`\uFF08U+00D7\uFF09\u7684\u5B57\u5F62\u58A8\u8FF9\u6574\u4F53\u504F\u4E0B\uFF0818px \u5B57\u53F7\u4E0B\u5B9E\u6D4B\u504F 1.85px\uFF09\uFF0C\u653E\u8FDB\u5706\u6309\u94AE\u91CC\u8089\u773C\u53EF\u89C1\u5730\u4E0D\u5C45\u4E2D\uFF0C\u800C\u8FD9\u662F\u5B57\u5F62\u672C\u8EAB\u7684\u95EE\u9898\uFF0C\u9760\u5BF9\u9F50\u5C5E\u6027\u8C03\u4E0D\u597D\u3002\u753B\u6210\u7EBF\u4E4B\u540E\u50CF\u7D20\u7EA7\u7CBE\u786E\uFF0C\u7C97\u7EC6\u968F\u6309\u94AE\u5927\u5C0F\u81EA\u52A8\u7F29\u653E\uFF0C\u4E5F\u4E0D\u53D7\u5B57\u4F53\u548C\u5E73\u53F0\u5DEE\u5F02\u5F71\u54CD\u3002"
943
+ },
944
+ {
945
+ t: "note",
946
+ tone: "warn",
947
+ text: '**\u6CA1\u6709\u7279\u6B8A\u8981\u6C42\u5C31\u522B\u5199 `icon`\u3002** \u9ED8\u8BA4\u56FE\u6807\u5DF2\u7ECF\u662F\u5BF9\u9F50\u597D\u7684\uFF0C\u5199\u6210 `"icon": "\xD7"` \u53CD\u800C\u4F1A\u9000\u56DE\u90A3\u4E2A\u504F\u4E0B\u7684\u5B57\u5F62\u3002\u786E\u5B9E\u60F3\u6362\u4E2A\u5F62\u72B6\uFF08\u6BD4\u5982\u6362\u6210 `\u2715`\u3001`\u2716`\u3001emoji\uFF09\u65F6\u624D\u5199\u5B83\u3002'
948
+ },
949
+ { t: "h3", text: "\u628A\u5173\u95ED\u6309\u94AE\u653E\u5230\u5F39\u7A97\u5916\u9762" },
950
+ {
951
+ t: "p",
952
+ text: "\u5706\u89D2\u88C1\u5207\u53EA\u4F5C\u7528\u4E8E\u5F39\u7A97\u5185\u5BB9\uFF0C\u5173\u95ED\u6309\u94AE\u5728\u88C1\u5207\u5C42\u4E4B\u5916\uFF0C\u6240\u4EE5 `offset` \u5199\u8D1F\u503C\u65F6\u4E0D\u4F1A\u88AB\u88C1\u6389\u3002\u4E24\u79CD\u5E38\u89C1\u505A\u6CD5\uFF1A"
953
+ },
954
+ {
955
+ t: "code",
956
+ code: `// \u53F3\u4E0A\u89D2\u5916\u4FA7
957
+ "closeButton": { "position": "top-right", "offset": [-13, -13], "size": 26 }
958
+
959
+ // \u5F39\u7A97\u6B63\u4E0B\u65B9\uFF08\u89C6\u89C9\u66F4\u8F7B\uFF0C\u5E38\u89C1\u4E8E\u56FE\u7247\u578B\u5F39\u7A97\uFF09
960
+ "closeButton": {
961
+ "position": "bottom-center",
962
+ "offset": [0, -46],
963
+ "size": 34,
964
+ "style": { "background": "rgba(0,0,0,0.4)", "borderWidth": 1,
965
+ "borderStyle": "solid", "borderColor": "rgba(255,255,255,0.5)",
966
+ "color": "#fff" }
967
+ }`
968
+ },
969
+ {
970
+ t: "note",
971
+ tone: "warn",
972
+ text: "\u653E\u5230\u5916\u9762\u65F6\u8BB0\u5F97\u7559\u51FA\u7A7A\u95F4\uFF1A\u5F39\u7A97\u56DB\u5468\u6709 20px \u5185\u8FB9\u8DDD\uFF0C\u8D85\u8FC7\u8FD9\u4E2A\u8DDD\u79BB\u5728\u5C0F\u5C4F\u4E0A\u53EF\u80FD\u8D34\u8FB9\u3002\u5728\u8C03\u8BD5\u53F0\u91CC\u628A\u9884\u89C8\u7F29\u653E\u5207\u5230 100% \u786E\u8BA4\u4E00\u4E0B\u3002"
973
+ }
974
+ ]
975
+ }
976
+ ];
977
+ var guide_stage_default = sections6;
978
+
979
+ // src/docs/sections/nodes.ts
980
+ var containerRows = [
981
+ ["box", "\u5BB9\u5668\uFF0Cchildren \u7528 rect \u7EDD\u5BF9\u5B9A\u4F4D", "`children`"],
982
+ [
983
+ "flex",
984
+ "\u5BB9\u5668\uFF0Cchildren \u6309\u6D41\u5F0F\u6392\u5217\u3002\u6700\u5E38\u7528",
985
+ "`children`\uFF1B\u6837\u5F0F\u7528 `direction` `gap` `wrap` `align` `justify`"
986
+ ],
987
+ [
988
+ "repeat",
989
+ "\u7ED1\u5B9A\u6570\u7EC4\u7684 flex \u5BB9\u5668\uFF0C\u6570\u636E\u51E0\u6761\u5C31\u6E32\u67D3\u51E0\u4EFD",
990
+ "`bind` `template` `itemName` `indexName`"
991
+ ]
992
+ ];
993
+ var contentRows = [
994
+ ["text", "\u6587\u672C\u3002\u4E5F\u7528\u6765\u505A\u7EAF\u8272\u5757\u3001\u5706\u70B9\u3001\u6807\u7B7E", "`content`"],
995
+ ["image", "\u56FE\u7247", "`src`"],
996
+ ["button", "\u6309\u94AE\uFF08\u5185\u5BB9\u5C45\u4E2D\u7684\u6587\u672C\u5757\uFF09", "`text`"],
997
+ [
998
+ "tabs",
999
+ "\u9009\u9879\u5361\uFF0C\u70B9\u51FB\u65F6\u5199\u5165 `state[stateKey]`",
1000
+ "`bind` `stateKey` `labelField` `itemStyle` `activeItemStyle`"
1001
+ ],
1002
+ ["countdown", "\u5012\u8BA1\u65F6\uFF0C\u89C1\u7B2C 10 \u8282", "`to` `precision` `as` `children` `format`"]
1003
+ ];
1004
+ var styleRows = [
1005
+ [
1006
+ "\u6587\u5B57",
1007
+ "`color` `fontSize` `fontWeight` `fontFamily` `lineHeight` `letterSpacing` `textAlign` `textDecoration` `whiteSpace` `fontVariantNumeric`"
1008
+ ],
1009
+ [
1010
+ "\u80CC\u666F",
1011
+ "`background` `backgroundImage` `backgroundSize` `backgroundPosition` `backgroundRepeat`"
1012
+ ],
1013
+ ["\u8FB9\u6846", "`border` `borderColor` `borderWidth` `borderStyle` `radius`"],
1014
+ [
1015
+ "\u76D2\u6A21\u578B",
1016
+ "`padding` `margin` `marginTop` `marginBottom` `marginLeft` `marginRight` `overflow` `opacity` `shadow` `cursor`"
1017
+ ],
1018
+ ["flex \u5BB9\u5668", "`direction` `gap` `wrap` `align` `justify`"],
1019
+ [
1020
+ "flex \u5B50\u9879 / \u5C3A\u5BF8",
1021
+ "`flex` `alignSelf` `width` `height` `minWidth` `minHeight` `maxWidth` `maxHeight`"
1022
+ ],
1023
+ ["\u56FE\u7247 / \u6BD4\u4F8B", "`objectFit` `aspectRatio`"]
1024
+ ];
1025
+ var sections7 = [
1026
+ {
1027
+ id: "nodes",
1028
+ title: "6. \u8282\u70B9\u7C7B\u578B",
1029
+ blocks: [
1030
+ { t: "p", text: "\u6240\u6709\u8282\u70B9\u90FD\u6709\u8FD9\u51E0\u4E2A\u516C\u5171\u5B57\u6BB5\uFF1A" },
1031
+ {
1032
+ t: "table",
1033
+ head: ["\u5B57\u6BB5", "\u8BF4\u660E"],
1034
+ rows: [
1035
+ ["id", "\u53EF\u9009\uFF0C\u7ED9\u81EA\u5DF1\u770B\u7684\u6807\u8BC6"],
1036
+ ["type", "\u5FC5\u586B\uFF0C\u89C1\u4E0B\u8868"],
1037
+ ["rect", "`[x, y, w, h]`\uFF0C\u4EC5\u5728\u7EDD\u5BF9\u5B9A\u4F4D\u5BB9\u5668\u4E2D\u751F\u6548"],
1038
+ ["style", "\u6837\u5F0F\uFF0C\u89C1\u7B2C 7 \u8282"],
1039
+ ["visibleWhen", "\u8868\u8FBE\u5F0F\uFF0C\u4E3A\u5047\u65F6\u6574\u4E2A\u8282\u70B9\u4E0D\u6E32\u67D3"],
1040
+ ["action", "\u70B9\u51FB\u52A8\u4F5C\uFF0C\u89C1\u7B2C 11 \u8282\u3002\u4EFB\u4F55\u8282\u70B9\u90FD\u80FD\u70B9"]
1041
+ ]
1042
+ },
1043
+ { t: "h3", text: "\u5BB9\u5668\u7C7B" },
1044
+ { t: "table", head: ["type", "\u8BF4\u660E", "\u5173\u952E\u5B57\u6BB5"], rows: containerRows },
1045
+ { t: "h3", text: "\u5185\u5BB9\u7C7B" },
1046
+ {
1047
+ t: "table",
1048
+ head: ["type", "\u8BF4\u660E", "\u5173\u952E\u5B57\u6BB5"],
1049
+ // 容器类和内容类合起来才是完整的 NODE_TYPES,所以在这张表末尾对账
1050
+ rows: contentRows.concat(
1051
+ reconcileRows({
1052
+ rows: containerRows.concat(contentRows),
1053
+ actual: NODE_TYPES,
1054
+ label: "\u65B0\u589E\u8282\u70B9\u7C7B\u578B"
1055
+ })
1056
+ )
1057
+ },
1058
+ {
1059
+ t: "note",
1060
+ tone: "info",
1061
+ text: "\u6E32\u67D3\u5668\u9047\u5230\u4E0D\u8BA4\u8BC6\u7684 type \u4F1A\u8DF3\u8FC7\u800C\u4E0D\u662F\u5D29\u6E83\u2014\u2014\u56E0\u4E3A\u540E\u53F0\u914D\u7F6E\u548C\u4EA7\u54C1\u7AEF\u53D1\u7248\u662F\u5F02\u6B65\u7684\uFF0C\u7528\u6237\u6D4F\u89C8\u5668\u91CC\u53EF\u80FD\u8FD8\u662F\u65E7\u7248\u6E32\u67D3\u5668\u3002\u6240\u4EE5\u65B0\u8282\u70B9\u4E0A\u7EBF\u524D\u8981\u786E\u8BA4\u4EA7\u54C1\u7AEF\u7248\u672C\u5DF2\u94FA\u5F00\u3002"
1062
+ },
1063
+ { t: "h3", text: "repeat\uFF1A\u6570\u91CF\u4E0D\u5B9A\u7684\u5217\u8868" },
1064
+ {
1065
+ t: "code",
1066
+ code: `{
1067
+ "type": "repeat",
1068
+ "bind": "plans", // data \u91CC\u7684\u6570\u7EC4\u5B57\u6BB5\u540D
1069
+ "itemName": "item", // \u6A21\u677F\u91CC\u7528 {{ item.xxx }}\uFF0C\u9ED8\u8BA4\u5C31\u662F item
1070
+ "indexName": "index", // \u6A21\u677F\u91CC\u7528 {{ index }}
1071
+ "style": { "gap": 8, "wrap": true },
1072
+ "template": { // \u5355\u4E2A\u6761\u76EE\u957F\u4EC0\u4E48\u6837
1073
+ "type": "flex",
1074
+ "style": { "width": "calc(50% - 4px)" },
1075
+ "children": [
1076
+ { "type": "text", "content": "{{ item.name }}" }
1077
+ ]
1078
+ }
1079
+ }`
1080
+ },
1081
+ {
1082
+ t: "note",
1083
+ tone: "warn",
1084
+ text: "\u540E\u7AEF\u8FD4\u56DE\u7684\u5217\u8868\u5FC5\u987B\u7528 repeat\u3002\u914D\u7F6E\u7684\u65F6\u5019\u4F60\u4E0D\u77E5\u9053\u4F1A\u6709\u51E0\u6761\uFF0C\u5199\u6B7B\u51E0\u4E2A\u8282\u70B9\u4E0A\u7EBF\u5C31\u4F1A\u51FA\u9519\u3002"
1085
+ },
1086
+ { t: "h3", text: "\u6CA1\u6709\u5217\u8868 / \u5BCC\u6587\u672C\u8282\u70B9" },
1087
+ {
1088
+ t: "p",
1089
+ text: '\u4E00\u884C\u91CC\u6DF7\u6392\u591A\u79CD\u5B57\u53F7\uFF08\u6BD4\u5982\u300C\u5DF2\u8865\u9F50 **42** \u5F20\u300D\u4E09\u79CD\u5B57\u53F7\uFF09\uFF0C\u7528 `flex` + `align: "baseline"` \u653E\u51E0\u4E2A `text` \u8282\u70B9\uFF0C\u4E0D\u9700\u8981\u5BCC\u6587\u672C\u3002\u52A0\u7C97\u540C\u7406\u2014\u2014\u62C6\u6210\u4E24\u4E2A `text`\uFF0C\u4E00\u4E2A `fontWeight: "700"`\u3002'
1090
+ }
1091
+ ]
1092
+ },
1093
+ {
1094
+ id: "style",
1095
+ title: "7. style \u767D\u540D\u5355",
1096
+ blocks: [
1097
+ {
1098
+ t: "p",
1099
+ text: "\u53EA\u6709\u767B\u8BB0\u5728\u518C\u7684\u5C5E\u6027\u624D\u4F1A\u751F\u6548\uFF0C\u5199\u522B\u7684\u4F1A\u88AB\u4E22\u5F03\u5E76\u5728\u6821\u9A8C\u65F6\u7ED9\u51FA\u8B66\u544A\u3002\u8FD9\u6837\u80FD\u6321\u4F4F\u901A\u8FC7\u6837\u5F0F\u505A\u7684\u574F\u4E8B\uFF08\u5168\u5C4F\u8986\u76D6\u9493\u9C7C\u3001\u5C42\u7EA7\u8D8A\u6743\u7B49\uFF09\u3002"
1100
+ },
1101
+ {
1102
+ t: "table",
1103
+ head: ["\u5206\u7C7B", "\u5C5E\u6027"],
1104
+ rows: styleRows.concat(
1105
+ reconcileRows({
1106
+ rows: styleRows,
1107
+ actual: ALLOWED_STYLE_KEYS,
1108
+ column: 1,
1109
+ inline: true,
1110
+ label: "\u65B0\u589E\u6837\u5F0F\u5C5E\u6027"
1111
+ })
1112
+ )
1113
+ },
1114
+ { t: "h3", text: "\u51E0\u4E2A\u5BB9\u6613\u8E29\u7684\u70B9" },
1115
+ {
1116
+ t: "list",
1117
+ items: [
1118
+ "`radius` \u4E0D\u662F `borderRadius`\uFF1B`shadow` \u4E0D\u662F `boxShadow`\uFF1B`direction` \u4E0D\u662F `flexDirection`",
1119
+ 'flex \u5217\u5BB9\u5668\u7684\u5B50\u9879\u9ED8\u8BA4\u88AB\u62C9\u6EE1\u6574\u884C\uFF0C\u6807\u7B7E\u7C7B\u5143\u7D20\u8981\u5199 `alignSelf: "flex-start"`',
1120
+ "\u5927\u5B57\u53F7\u6587\u672C\u8981\u663E\u5F0F\u5199 `lineHeight`\uFF0C\u5426\u5219\u9ED8\u8BA4\u884C\u9AD8\u4F1A\u628A\u5BB9\u5668\u6491\u9AD8",
1121
+ '\u9010\u5E27\u53D8\u5316\u7684\u6570\u5B57\uFF08\u5012\u8BA1\u65F6\u5398\u79D2\uFF09\u8981\u5199 `fontVariantNumeric: "tabular-nums"`\uFF0C\u5426\u5219\u6570\u5B57\u4F1A\u6296',
1122
+ "`style` \u7684\u503C\u4E5F\u652F\u6301 `{{ }}` \u63D2\u503C\uFF0C\u9009\u4E2D\u6001\u5C31\u662F\u9760\u8FD9\u4E2A\u505A\u7684"
1123
+ ]
1124
+ },
1125
+ {
1126
+ t: "code",
1127
+ code: `// \u9009\u4E2D\u6001\uFF1A\u8FB9\u6846\u989C\u8272\u8DDF\u7740 state \u53D8
1128
+ "style": {
1129
+ "borderStyle": "solid",
1130
+ "borderWidth": "{{ item.key == current.key ? '2px' : '1px' }}",
1131
+ "borderColor": "{{ item.key == current.key ? '#f0a000' : '#e5e8ed' }}",
1132
+ "background": "{{ item.key == current.key ? '#fffaf0' : '#ffffff' }}"
1133
+ }`
1134
+ }
1135
+ ]
1136
+ }
1137
+ ];
1138
+ var nodes_default = sections7;
1139
+
1140
+ // src/docs/sections/views.ts
1141
+ var sections8 = [
1142
+ {
1143
+ id: "views",
1144
+ title: "12. \u591A\u89C6\u56FE\uFF08\u4E00\u4EFD\u914D\u7F6E\u91CC\u653E\u51E0\u4E2A\u5F39\u7A97\uFF09",
1145
+ blocks: [
1146
+ {
1147
+ t: "p",
1148
+ text: "\u9ED8\u8BA4\u4E00\u4EFD\u914D\u7F6E\u5C31\u662F\u4E00\u4E2A\u5F39\u7A97\u3002\u8981\u505A\u300C\u516C\u544A\u6761\u70B9\u5F00\u5F39\u7A97\u300D\u300C\u4E0D\u518D\u63D0\u9192\u518D\u5F39\u4E2A\u786E\u8BA4\u300D\u300C\u4E3B\u5F39\u7A97\u548C\u8BE6\u60C5\u5C4F\u6765\u56DE\u5207\u300D\u8FD9\u7C7B\uFF0C\u5C31\u7528\u591A\u89C6\u56FE\uFF1A\u628A\u9876\u5C42\u7684 `type` / `stage` / `nodes` \u632A\u8FDB `views`\uFF0C\u518D\u6307\u5B9A `entry`\u3002"
1149
+ },
1150
+ {
1151
+ t: "code",
1152
+ code: `{
1153
+ "version": 1,
1154
+ "entry": "bar", // \u9996\u4E2A\u5C55\u793A\u7684\u89C6\u56FE
1155
+ "data": { ... }, // \u2193 \u8FD9\u4E09\u4E2A\u662F\u5168\u5C40\u5171\u4EAB\u7684
1156
+ "state": { "plan": 0 },
1157
+ "derived": { ... },
1158
+ "views": {
1159
+ "bar": { "type": "notice", "stage": {...}, "nodes": [...] },
1160
+ "renew": { "type": "popup", "stage": {...}, "nodes": [...] },
1161
+ "confirm": { "type": "popup", "stage": {...}, "nodes": [...] }
1162
+ }
1163
+ }`
1164
+ },
1165
+ {
1166
+ t: "note",
1167
+ tone: "info",
1168
+ text: "**`state` \u662F\u5168\u5C40\u5171\u4EAB\u7684**\uFF0C\u8FD9\u662F\u591A\u89C6\u56FE\u6700\u597D\u7528\u7684\u5730\u65B9\uFF1A\u7528\u6237\u5728\u4E3B\u5C4F\u9009\u4E86\u300C\u5B63\u4ED8\u300D\uFF0C\u5F39\u51FA\u6765\u7684\u4E8C\u6B21\u786E\u8BA4\u6846\u76F4\u63A5\u5199 `{{ current.price }}` \u5C31\u80FD\u8BFB\u5230\uFF0C\u4E0D\u7528\u4F20\u53C2\u3002"
1169
+ },
1170
+ { t: "h3", text: "\u600E\u4E48\u5207" },
1171
+ {
1172
+ t: "table",
1173
+ head: ["\u5199\u6CD5", "\u6548\u679C", "\u5178\u578B\u573A\u666F"],
1174
+ rows: [
1175
+ [
1176
+ '`{ "type": "open", "view": "renew" }`',
1177
+ '\u53E0\u4E00\u5C42\uFF0C\u4E0B\u9762\u90A3\u5C42\u8FD8\u5728\uFF08\u9ED8\u8BA4 `mode: "stack"`\uFF09',
1178
+ "\u516C\u544A\u6761\u70B9\u5F00\u5F39\u7A97\u3001\u4E8C\u6B21\u786E\u8BA4"
1179
+ ],
1180
+ [
1181
+ '`{ "type": "open", "view": "unlock", "mode": "replace" }`',
1182
+ "\u6362\u6389\u5F53\u524D\u5C42\uFF0C\u5C42\u6570\u4E0D\u53D8",
1183
+ "\u4E3B\u5F39\u7A97 \u2194 \u80FD\u529B\u6E05\u5355\u6765\u56DE\u5207"
1184
+ ],
1185
+ ['`{ "type": "close" }`', "\u5173\u6389\u5F53\u524D\u5C42\uFF0C\u56DE\u5230\u4E0A\u4E00\u5C42", "\u786E\u8BA4\u6846\u7684\u300C\u53D6\u6D88\u300D"],
1186
+ ['`{ "type": "closeAll" }`', "\u51E0\u5C42\u90FD\u5173\u6389", "\u786E\u8BA4\u6846\u7684\u300C\u786E\u5B9A\u300D"]
1187
+ ]
1188
+ },
1189
+ { t: "h3", text: "\u53E0\u52A0\u65F6\u7684\u8868\u73B0" },
1190
+ {
1191
+ t: "list",
1192
+ items: [
1193
+ "**\u53EA\u6709\u6700\u4E0A\u9762\u90A3\u5C42\u753B\u906E\u7F69**\uFF0C\u5426\u5219\u4E24\u5C42\u906E\u7F69\u53E0\u52A0\u4F1A\u660E\u663E\u53D8\u9ED1",
1194
+ "\u4E0B\u9762\u7684\u5C42\u8FD8\u770B\u5F97\u89C1\uFF0C\u4F46\u70B9\u4E0D\u52A8\uFF08\u907F\u514D\u8BEF\u89E6\u540E\u9762\u7684\u6309\u94AE\uFF09",
1195
+ "`notice` / `banner` \u7C7B\u578B\u7684\u89C6\u56FE\u5728\u6587\u6863\u6D41\u91CC\uFF0C\u5F39\u7A97\u53E0\u4E0A\u53BB\u65F6\u5B83\u81EA\u7136\u88AB\u538B\u4F4F\uFF0C\u548C\u771F\u5B9E\u9875\u9762\u4E00\u81F4"
1196
+ ]
1197
+ },
1198
+ {
1199
+ t: "note",
1200
+ tone: "warn",
1201
+ text: "\u7528\u4E86 `views` \u4E4B\u540E\uFF0C`stage` \u548C `nodes` **\u4E0D\u80FD\u518D\u7559\u5728\u9876\u5C42**\uFF0C\u6821\u9A8C\u4F1A\u76F4\u63A5\u62A5\u9519\u3002`open` \u7684 `view` \u540D\u5199\u9519\u4E5F\u4F1A\u5728\u4FDD\u5B58\u524D\u88AB\u62E6\u4E0B\u3002"
1202
+ },
1203
+ { t: "p", text: "\u8C03\u8BD5\u53F0\u7684\u793A\u4F8B \u2464 \u2465 \u5C31\u662F\u8FD9\u4E24\u79CD\u7528\u6CD5\uFF0C\u76F4\u63A5\u7167\u7740\u6539\u6700\u5FEB\u3002" }
1204
+ ]
1205
+ },
1206
+ {
1207
+ id: "validate",
1208
+ title: "13. \u6821\u9A8C",
1209
+ blocks: [
1210
+ { t: "p", text: "\u540C\u4E00\u5957\u6821\u9A8C\u89C4\u5219\u5728\u4E09\u4E2A\u5730\u65B9\u8DD1\uFF0C\u4EFB\u4F55\u4E00\u5904\u4E0D\u8FC7\u90FD\u4E0D\u4F1A\u4E0A\u7EBF\uFF1A" },
1211
+ {
1212
+ t: "list",
1213
+ items: [
1214
+ "\u7F16\u8F91\u5668\uFF1A\u8FB9\u5199\u8FB9\u63D0\u793A \u2014\u2014\u300C\u5DF2\u751F\u6548\u300D",
1215
+ "\u540E\u7AEF\u4FDD\u5B58\u65F6\uFF1A\u4E0D\u4FE1\u4EFB\u524D\u7AEF\uFF0C\u4E5F\u9632\u624B\u5199 JSON \u7ED5\u8FC7\u63A5\u53E3 \u2014\u2014\u300C**\u5F85\u63A5\u5165**\u300D",
1216
+ "\u6E32\u67D3\u5668\u8FD0\u884C\u65F6\uFF1A\u9047\u5230\u4E0D\u8BA4\u8BC6\u7684\u4E1C\u897F\u8DF3\u8FC7\u800C\u4E0D\u662F\u5D29\u6E83 \u2014\u2014\u300C\u5DF2\u751F\u6548\u300D"
1217
+ ]
1218
+ },
1219
+ {
1220
+ t: "note",
1221
+ tone: "warn",
1222
+ text: '\u540E\u7AEF\u90A3\u5C42\u8FD8\u6CA1\u63A5\u3002\u5728\u63A5\u4E0A\u4E4B\u524D\uFF0C**\u7ED5\u8FC7\u540E\u53F0\u9875\u9762\u76F4\u63A5\u8C03\u4FDD\u5B58\u63A5\u53E3\u7684 JSON \u662F\u6CA1\u6709\u6821\u9A8C\u7684**\u3002\u540E\u7AEF\u63A5\u5165\u65B9\u5F0F\uFF1A`import { validate } from "@yaoxiu/marketing-dsl"`\uFF0C\u8FD9\u4E2A\u5305\u662F\u7EAF TS \u65E0\u6846\u67B6\u4F9D\u8D56\uFF0CNode \u91CC\u53EF\u4EE5\u76F4\u63A5\u8DD1\u3002'
1223
+ },
1224
+ { t: "h3", text: "\u5E38\u89C1\u62A5\u9519" },
1225
+ {
1226
+ t: "table",
1227
+ head: ["\u62A5\u9519", "\u539F\u56E0"],
1228
+ rows: [
1229
+ [
1230
+ "\u5904\u4E8E\u7EDD\u5BF9\u5B9A\u4F4D\u5BB9\u5668\u4E2D\uFF0C\u5FC5\u987B\u63D0\u4F9B rect",
1231
+ "\u7236\u7EA7\u662F `box`\uFF0C\u6216 `stage.layout` \u662F `absolute`\u3002\u8865 `rect`\uFF0C\u6216\u628A\u7236\u7EA7\u6539\u6210 `flex`"
1232
+ ],
1233
+ [
1234
+ "height: 'auto' \u9700\u8981\u540C\u65F6\u8BBE\u7F6E stage.layout: 'flow'",
1235
+ "\u7EDD\u5BF9\u5B9A\u4F4D\u6491\u4E0D\u8D77\u9AD8\u5EA6\uFF0C\u89C1\u7B2C 4 \u8282"
1236
+ ],
1237
+ ['"xxx" \u4E0D\u662F\u5408\u6CD5\u957F\u5EA6', "\u5355\u4F4D\u5199\u9519\uFF0C\u89C1\u7B2C 5 \u8282"],
1238
+ [
1239
+ "\u6837\u5F0F\u5C5E\u6027\u4E0D\u5728\u767D\u540D\u5355\u5185\uFF08\u8B66\u544A\uFF09",
1240
+ "\u5C5E\u6027\u540D\u5199\u9519\uFF0C\u6216\u7528\u4E86\u672A\u5F00\u653E\u7684 CSS \u5C5E\u6027\uFF0C\u89C1\u7B2C 7 \u8282"
1241
+ ],
1242
+ ['data \u4E2D\u4E0D\u5B58\u5728 "xxx"', "`derived.list` \u6216 `repeat.bind` \u6307\u5411\u4E86\u4E0D\u5B58\u5728\u7684\u5B57\u6BB5"],
1243
+ ["\u8868\u8FBE\u5F0F\u6709\u8BEF", "`visibleWhen` \u91CC\u5199\u4E86\u4E0D\u652F\u6301\u7684\u8BED\u6CD5\uFF0C\u6BD4\u5982\u51FD\u6570\u8C03\u7528"],
1244
+ [
1245
+ "\u57CB\u70B9\u4E8B\u4EF6\u540D\u683C\u5F0F\u4E0D\u5408\u6CD5",
1246
+ "`track` \u7684 `event` \u7528\u4E86\u4E2D\u6587 / \u9A7C\u5CF0 / \u4E2D\u5212\u7EBF\uFF0C\u6216\u957F\u5EA6\u4E0D\u591F\uFF0C\u89C1\u7B2C 11 \u8282"
1247
+ ]
1248
+ ]
1249
+ }
1250
+ ]
1251
+ },
1252
+ {
1253
+ id: "limits",
1254
+ title: "14. \u7EA2\u7EBF",
1255
+ blocks: [
1256
+ { t: "p", text: "\u4E0B\u9762\u8FD9\u4E9B\u662F\u6709\u610F\u4E0D\u505A\u7684\uFF0C\u4E0D\u662F\u8FD8\u6CA1\u505A\u3002\u63D0\u9700\u6C42\u524D\u5148\u770B\u8FD9\u91CC\uFF1A" },
1257
+ {
1258
+ t: "table",
1259
+ head: ["\u505A\u4E0D\u5230\u7684\u4E8B", "\u4E3A\u4EC0\u4E48", "\u8BE5\u600E\u4E48\u529E"],
1260
+ rows: [
1261
+ [
1262
+ "\u5199\u4EFB\u610F JS / \u8868\u8FBE\u5F0F\u91CC\u8C03\u51FD\u6570",
1263
+ "\u914D\u7F6E\u4E00\u65E6\u80FD\u6267\u884C\uFF0C\u8FD0\u8425\u540E\u53F0\u5C31\u6210\u4E86\u7EBF\u4E0A\u9875\u9762\u7684\u6CE8\u5165\u5165\u53E3",
1264
+ "\u627E\u5BF9\u5E94\u7684\u8282\u70B9\u6216\u52A8\u4F5C\uFF1B\u786E\u5B9E\u6CA1\u6709\u5C31\u63D0\u9700\u6C42\u52A0\u8282\u70B9"
1265
+ ],
1266
+ ["\u586B\u4EFB\u610F\u63A5\u53E3\u5730\u5740", "\u8D8A\u6743\u62C9\u6570\u548C SSRF", "\u8BA9\u540E\u7AEF\u6CE8\u518C\u6570\u636E\u6E90\uFF0C\u7F16\u8F91\u5668\u91CC\u9009"],
1267
+ ["\u5199 `javascript:` \u94FE\u63A5", "\u540C\u7B2C\u4E00\u6761", "\u7528 `call` \u52A8\u4F5C\u8C03\u5BBF\u4E3B\u6CE8\u518C\u7684\u65B9\u6CD5"],
1268
+ [
1269
+ "\u7528\u767D\u540D\u5355\u5916\u7684 CSS\uFF08\u5982 `position` / `zIndex`\uFF09",
1270
+ "\u5168\u5C4F\u8986\u76D6\u9493\u9C7C\u3001\u5C42\u7EA7\u8D8A\u6743",
1271
+ "\u7528 `box` + `rect` \u505A\u5B9A\u4F4D"
1272
+ ],
1273
+ [
1274
+ "\u5BCC\u6587\u672C / \u81EA\u5B9A\u4E49 CSS \u7247\u6BB5",
1275
+ "\u4E00\u5F00\u53E3\u5B50\uFF0CDSL \u5C31\u6C89\u6DC0\u4E0D\u4E0B\u6765\u4E86",
1276
+ "\u591A\u5B57\u53F7\u6DF7\u6392\u7528\u591A\u4E2A `text` \u8282\u70B9\uFF0C\u89C1\u7B2C 6 \u8282"
1277
+ ],
1278
+ [
1279
+ "\u81EA\u5DF1\u5B9A\u4E49\u57CB\u70B9\u4E8B\u4EF6\u540D\u7684\u683C\u5F0F",
1280
+ "\u540E\u7AEF\u6309\u524D\u7F00\u805A\u5408\uFF0C\u683C\u5F0F\u4E00\u4E71\u5C31\u6CA1\u6CD5\u5206\u7EC4",
1281
+ "\u6309\u7B2C 11 \u8282\u7684\u683C\u5F0F\u548C `\u5751\u4F4D_\u4E1A\u52A1_\u52A8\u4F5C` \u6A21\u5F0F\u8D77\u540D"
1282
+ ]
1283
+ ]
1284
+ },
1285
+ {
1286
+ t: "note",
1287
+ tone: "info",
1288
+ text: "\u8FD9\u5957 DSL \u5DF2\u7ECF\u5B8C\u6574\u590D\u523B\u8FC7\u8FD0\u8425\u90A3\u4EFD\u300C\u7EED\u8D39\u5F39\u7A97 \xB7 \u94FA\u8D27\u9875\u5B9E\u666F demo\u300D\u91CC\u7684\u771F\u5B9E\u5F39\u7A97\uFF0C\u5305\u62EC\u5206\u683C\u5398\u79D2\u5012\u8BA1\u65F6\u3002\u78B0\u5230\u8868\u8FBE\u4E0D\u4E86\u7684\u6392\u7248\uFF0C\u5927\u6982\u7387\u662F\u8282\u70B9\u7528\u6CD5\u95EE\u9898\uFF0C\u5148\u5728\u8C03\u8BD5\u53F0\u91CC\u8BD5\u3002"
1289
+ }
1290
+ ]
1291
+ }
1292
+ ];
1293
+ var views_default = sections8;
1294
+
1295
+ // src/docs/sections/index.ts
1296
+ var sections9 = [].concat(
1297
+ guide_basics_default,
1298
+ // 0~2
1299
+ guide_stage_default,
1300
+ // 3
1301
+ guide_layout_default,
1302
+ // 4~5
1303
+ nodes_default,
1304
+ // 6~7
1305
+ data_state_default,
1306
+ // 8~9
1307
+ countdown_default,
1308
+ // 10
1309
+ action_default,
1310
+ // 11
1311
+ views_default
1312
+ // 12~14
1313
+ );
1314
+ var sections_default = sections9;
1315
+
1316
+ // src/docs/meta.ts
1317
+ var changelog = [
1318
+ {
1319
+ date: "2026-08-18",
1320
+ items: [
1321
+ "\u5F00\u53D1\u6587\u6863\u642C\u8FDB @yaoxiu/marketing-dsl \u5305\uFF0C\u8D70\u5B50\u8DEF\u5F84 @yaoxiu/marketing-dsl/docs \u5F15\u5165\uFF0C\u8DDF\u89E3\u91CA\u5668\u540C\u4ED3\u540C\u7248\u672C\u53D1\u5E03",
1322
+ "\u66F4\u6B63\u5173\u95ED\u6309\u94AE\u9ED8\u8BA4\u56FE\u6807\uFF1A\u9ED8\u8BA4\u662F\u5185\u8054 SVG \u753B\u7684\u4E24\u6761\u7EBF\uFF0C\u4E0D\u662F `\xD7` \u5B57\u7B26\uFF1Bicon \u53D8\u6210\u53EF\u9009\u8986\u76D6\u9879\uFF08\u7B2C 3 \u8282\uFF09",
1323
+ "\u8865\u5145\u57CB\u70B9\u4E8B\u4EF6\u540D\u7684\u547D\u540D\u89C4\u8303\uFF1A\u683C\u5F0F\u4E0D\u5408\u89C4\u4F1A\u5728\u4FDD\u5B58\u524D\u76F4\u63A5\u62A5\u9519\uFF0C\u4E0D\u662F\u8B66\u544A\uFF08\u7B2C 11 \u8282\uFF09",
1324
+ "AI \u63D0\u793A\u8BCD\u4E00\u5E76\u642C\u8FDB\u5305\u91CC\uFF0C\u540C\u6B65\u8865\u4E0A\u57CB\u70B9\u4E8B\u4EF6\u540D\u89C4\u8303\uFF08\u6B63\u6587 + \u81EA\u68C0\u6E05\u5355\uFF09\u2014\u2014AI \u751F\u6210\u4E2D\u6587 / \u9A7C\u5CF0\u4E8B\u4EF6\u540D\u4F1A\u88AB\u6821\u9A8C\u62E6\u4E0B",
1325
+ 'AI \u63D0\u793A\u8BCD\u66F4\u6B63\u5173\u95ED\u6309\u94AE\u5199\u6CD5\uFF1A\u9ED8\u8BA4\u7528\u5185\u7F6E\u77E2\u91CF\u56FE\u6807\uFF0C\u4E0D\u518D\u793A\u8303 `"icon": "\xD7"`',
1326
+ "\u6587\u6863\u4E0D\u518D\u5355\u72EC\u7EF4\u62A4 docVersion\uFF0C\u7248\u672C\u53F7\u8DDF\u5305\u8D70\uFF0C\u53D8\u66F4\u8BB0\u5F55\u6309\u65E5\u671F"
1327
+ ]
1328
+ },
1329
+ {
1330
+ date: "2026-08-17",
1331
+ items: [
1332
+ "\u8BF4\u660E close \u7684\u771F\u5B9E\u8BED\u4E49\uFF1A\u901A\u77E5\u5BBF\u4E3B\u300C\u7528\u6237\u60F3\u5173\u4E86\u300D\uFF0C\u7531\u5BBF\u4E3B\u51B3\u5B9A\u5173\u4E0D\u5173\uFF08\u7B2C 11 \u8282\uFF09",
1333
+ "\u5217\u51FA\u54EA\u4E9B\u573A\u666F\u5BBF\u4E3B\u4F1A\u6536\u5230\u901A\u77E5\u3001\u54EA\u4E9B\u53EA\u662F\u5185\u90E8\u5F39\u6808",
1334
+ "\u63D0\u9192\u300C\u5173\u4E86\u522B\u518D\u51FA\u73B0\u300D\u8981\u914D call\uFF0C\u5149\u9760 close \u53EA\u7BA1\u8FD9\u4E00\u6B21",
1335
+ "\u8865\u5145 onEnd \u8BF4\u660E\uFF1A\u5012\u8BA1\u65F6\u5F52\u96F6\u53EF\u4EE5\u4E0A\u62A5\u57CB\u70B9\u3001\u81EA\u52A8\u5173\u5F39\u7A97\u6216\u6362\u5C4F\uFF08\u7B2C 10 \u8282\uFF09",
1336
+ "onEnd \u6539\u4E3A\u53EA\u5728\u300C\u7528\u6237\u773C\u770B\u7740\u5B83\u5F52\u96F6\u300D\u65F6\u89E6\u53D1\uFF0C\u6253\u5F00\u65F6\u5C31\u5DF2\u8FC7\u671F\u7684\u4E0D\u518D\u89E6\u53D1\uFF0C\u907F\u514D\u6C61\u67D3\u57CB\u70B9",
1337
+ "\u5012\u8BA1\u65F6\u7684 to \u660E\u786E\u652F\u6301\u666E\u901A\u65E5\u671F\u5199\u6CD5\uFF0C\u4E0D\u7528\u5199\u65F6\u95F4\u6233\uFF1A\u300C2026-09-01 18:00\u300D\u300C2026\u5E749\u67081\u65E5 18\u70B9\u300D\u90FD\u884C",
1338
+ "\u4FEE\u590D ISO \u683C\u5F0F\uFF08\u540E\u7AEF\u63A5\u53E3\u7684\u9ED8\u8BA4\u683C\u5F0F\uFF0C\u5982 2026-09-01T18:00:00+08:00\uFF09\u88AB\u89E3\u6790\u6210\u300C\u5DF2\u7ED3\u675F\u300D\u7684\u95EE\u9898",
1339
+ "to \u5199\u6210\u8BC6\u522B\u4E0D\u4E86\u7684\u5185\u5BB9\u4F1A\u5728\u4FDD\u5B58\u524D\u62A5\u9519\uFF0C\u4E0D\u518D\u9759\u9ED8\u663E\u793A\u300C\u5DF2\u7ED3\u675F\u300D",
1340
+ "\u89E3\u91CA\u5668\u62BD\u6210\u72EC\u7ACB\u5305\uFF1A@yaoxiu/marketing-dsl\uFF08\u6838\u5FC3\uFF0C\u7EAF TS \u65E0\u6846\u67B6\u4F9D\u8D56\uFF09+ @yaoxiu/marketing-dsl-vue2\uFF08Vue2 \u6E32\u67D3\u58F3\uFF09",
1341
+ "\u6587\u6863\u91CC\u7684\u8282\u70B9\u7C7B\u578B / \u52A8\u4F5C / \u6837\u5F0F\u767D\u540D\u5355\u4F1A\u8DDF\u89E3\u91CA\u5668\u81EA\u52A8\u5BF9\u8D26\uFF0C\u89E3\u91CA\u5668\u65B0\u589E\u4E86\u800C\u6587\u6863\u6CA1\u5199\u4F1A\u5F53\u573A\u6807\u51FA\u6765",
1342
+ "style \u767D\u540D\u5355\u65B0\u589E aspectRatio\u2014\u2014\u5BBD\u5EA6\u81EA\u9002\u5E94\u7684\u6574\u56FE Banner \u9760\u5B83\u624D\u80FD\u7528\u767E\u5206\u6BD4\u653E\u70ED\u533A\uFF08\u7B2C 5 \u8282\uFF09",
1343
+ "\u65B0\u589E\u793A\u4F8B \u2467 \u6574\u56FE Banner\uFF08\u5BBD\u5EA6\u81EA\u9002\u5E94 + \u70ED\u533A\uFF09",
1344
+ "\u8865\u5145\u516C\u544A\u6761 / Banner \u7684\u5173\u95ED\u5199\u6CD5\uFF1A\u884C\u672B\u653E\u4E00\u4E2A\u5E26 close \u52A8\u4F5C\u7684 text \u8282\u70B9\uFF08\u7B2C 11 \u8282\uFF09",
1345
+ "\u4FEE\u590D\u5185\u5C42\u8282\u70B9\u70B9\u51FB\u4F1A\u5192\u6CE1\u89E6\u53D1\u5916\u5C42\u52A8\u4F5C\u7684\u95EE\u9898\u2014\u2014\u6574\u6761\u516C\u544A\u6761\u53EF\u70B9\u65F6\uFF0C\u70B9 \xD7 \u4F1A\u8FDE\u5E26\u6253\u5F00\u5F39\u7A97",
1346
+ "\u65B0\u589E stage.onShow / stage.onClose \u751F\u547D\u5468\u671F\u52A8\u4F5C\uFF0C\u66DD\u5149\u548C\u5173\u95ED\u4E5F\u80FD\u57CB\u70B9\uFF08\u7B2C 11 \u8282\uFF09",
1347
+ "onClose \u901A\u8FC7 {{ closeReason }} \u533A\u5206\u662F\u70B9 X\u3001\u70B9\u906E\u7F69\u3001close \u52A8\u4F5C\u8FD8\u662F\u88AB replace \u9876\u6389"
1348
+ ]
1349
+ },
1350
+ {
1351
+ date: "2026-08-14",
1352
+ items: [
1353
+ "stage \u7684 width / height / style \u4E5F\u652F\u6301 {{ }}\uFF0C\u5207 tab \u65F6\u5F39\u7A97\u672C\u8EAB\u7684\u80CC\u666F\u3001\u5706\u89D2\u80FD\u8DDF\u7740\u53D8\uFF08\u7B2C 11 \u8282\uFF09",
1354
+ "\u8865\u5145\u300C\u5207 tab \u6362\u80A4 / \u6362\u5E03\u5C40\u300D\u5199\u6CD5\uFF1A\u914D\u8272\u653E\u8FDB data\uFF0C\u6392\u7248\u5DEE\u5F02\u7528\u4E24\u5957\u8282\u70B9 + visibleWhen",
1355
+ "\u65B0\u589E\u793A\u4F8B \u2466 \u5207 tab \u6362\u80A4\u6362\u5E03\u5C40\uFF1B\u793A\u4F8B \u2460 \u6269\u6210 5 \u4E2A\u70ED\u533A\uFF0C\u6F14\u793A\u591A\u70ED\u533A\u5404\u81EA\u7ED1\u4E0D\u540C\u52A8\u4F5C"
1356
+ ]
1357
+ },
1358
+ {
1359
+ date: "2026-08-13",
1360
+ items: [
1361
+ "\u65B0\u589E\u591A\u89C6\u56FE\uFF1A\u4E00\u4EFD\u914D\u7F6E\u53EF\u653E\u591A\u4E2A\u89C6\u56FE\uFF08views + entry\uFF09\uFF0C\u652F\u6301\u516C\u544A\u6761\u70B9\u5F00\u5F39\u7A97\u3001\u4E8C\u6B21\u786E\u8BA4\u3001\u5C4F\u95F4\u5207\u6362\uFF08\u7B2C 12 \u8282\uFF09",
1362
+ "\u65B0\u589E\u52A8\u4F5C open\uFF08stack / replace\uFF09\u548C closeAll\uFF1Bclose \u6539\u4E3A\u300C\u5173\u6389\u5F53\u524D\u5C42\u300D",
1363
+ "\u53EA\u6709\u6808\u9876\u90A3\u5C42\u753B\u906E\u7F69\uFF0C\u4E0B\u5C42\u53EF\u89C1\u4F46\u4E0D\u53EF\u70B9\u51FB",
1364
+ "\u5355\u89C6\u56FE\u914D\u7F6E\u5B8C\u5168\u5411\u540E\u517C\u5BB9\uFF0C\u4E0D\u5199 views \u5C31\u548C\u4EE5\u524D\u4E00\u6837",
1365
+ "\u65B0\u589E\u300C\u7528 AI \u751F\u6210\u914D\u7F6E\u300D\u4E00\u8282\uFF0C\u5E76\u652F\u6301\u5BFC\u51FA / \u590D\u5236\u4E13\u95E8\u7ED9 AI \u7684\u63D0\u793A\u8BCD"
1366
+ ]
1367
+ },
1368
+ {
1369
+ date: "2026-08-12",
1370
+ items: [
1371
+ "\u9996\u7248\uFF1A\u8282\u70B9\u3001\u6837\u5F0F\u3001\u8868\u8FBE\u5F0F\u3001\u6570\u636E\u6E90\u3001\u52A8\u4F5C\u3001\u6821\u9A8C\u89C4\u5219",
1372
+ "closeButton \u652F\u6301 icon / image / size / style \u81EA\u5B9A\u4E49\uFF0Coffset \u5199\u8D1F\u503C\u53EF\u653E\u5230\u5F39\u7A97\u5916\u9762\uFF08\u7B2C 3 \u8282\uFF09",
1373
+ "countdown \u6539\u4E3A\u4F5C\u7528\u57DF\u5BB9\u5668\uFF0C\u5206\u683C\u6570\u5B57\u548C\u5398\u79D2\u52A8\u753B\u7531 children \u81EA\u884C\u6392\u7248\uFF08\u7B2C 10 \u8282\uFF09"
1374
+ ]
1375
+ }
1376
+ ];
1377
+ var meta = {
1378
+ updatedAt: changelog[0].date,
1379
+ dslVersion: DSL_VERSION,
1380
+ changelog
1381
+ };
1382
+ var meta_default = meta;
1383
+
1384
+ // src/docs/examples/renew-expire.ts
1385
+ var ORANGE = "linear-gradient(90deg,#ff7a00,#faad14)";
1386
+ var achieveCell = {
1387
+ type: "flex",
1388
+ style: {
1389
+ direction: "column",
1390
+ width: "calc(50% - 5px)",
1391
+ background: "rgba(255,255,255,0.16)",
1392
+ borderWidth: 1,
1393
+ borderStyle: "solid",
1394
+ borderColor: "rgba(255,255,255,0.2)",
1395
+ radius: 10,
1396
+ padding: "10px 13px",
1397
+ gap: 3
1398
+ },
1399
+ children: [
1400
+ {
1401
+ // 三种字号同排:靠 flex + baseline 对齐,不需要富文本
1402
+ // lineHeight 必须显式给,否则 20px 数字的默认行高会把格子撑高
1403
+ type: "flex",
1404
+ style: { align: "baseline", gap: 3, height: 22 },
1405
+ children: [
1406
+ {
1407
+ type: "text",
1408
+ content: "{{ item.v }}",
1409
+ style: {
1410
+ fontSize: 11.5,
1411
+ fontWeight: "600",
1412
+ lineHeight: 1.1,
1413
+ color: "rgba(255,255,255,0.92)"
1414
+ }
1415
+ },
1416
+ {
1417
+ type: "text",
1418
+ content: "{{ item.n }}",
1419
+ style: { fontSize: 20, fontWeight: "800", lineHeight: 1.1, color: "#ffffff" }
1420
+ },
1421
+ {
1422
+ type: "text",
1423
+ content: "{{ item.u }}",
1424
+ style: { fontSize: 12, lineHeight: 1.1, color: "rgba(255,255,255,0.92)" }
1425
+ }
1426
+ ]
1427
+ },
1428
+ {
1429
+ type: "text",
1430
+ content: "{{ item.l }}",
1431
+ style: { fontSize: 11.5, lineHeight: 1.35, color: "rgba(255,255,255,0.72)" }
1432
+ }
1433
+ ]
1434
+ };
1435
+ var loseRow = {
1436
+ type: "flex",
1437
+ style: { align: "center", gap: 8, padding: "8px 0" },
1438
+ children: [
1439
+ {
1440
+ type: "text",
1441
+ content: "",
1442
+ style: { width: 6, height: 6, radius: "50%", background: "#f53f3f" }
1443
+ },
1444
+ {
1445
+ type: "flex",
1446
+ style: { align: "baseline", flex: "1" },
1447
+ children: [
1448
+ {
1449
+ type: "text",
1450
+ content: "{{ item.b }}",
1451
+ style: { fontSize: 12.5, fontWeight: "700", color: "#3f4656" }
1452
+ },
1453
+ {
1454
+ type: "text",
1455
+ content: " \u2014 {{ item.t }}",
1456
+ style: { fontSize: 12.5, color: "#4a4038" }
1457
+ }
1458
+ ]
1459
+ }
1460
+ ]
1461
+ };
1462
+ var tierCard = {
1463
+ type: "box",
1464
+ style: {
1465
+ flex: "1",
1466
+ height: 121,
1467
+ radius: 12,
1468
+ background: "{{ item.key == current.key ? '#fffaf0' : '#ffffff' }}",
1469
+ borderStyle: "solid",
1470
+ borderWidth: "{{ item.key == current.key ? '2px' : '1px' }}",
1471
+ borderColor: "{{ item.key == current.key ? '#f0a000' : '#e5e8ed' }}",
1472
+ cursor: "pointer"
1473
+ },
1474
+ action: {
1475
+ type: "sequence",
1476
+ actions: [
1477
+ { type: "setState", key: "period", value: "{{ index }}" },
1478
+ {
1479
+ type: "track",
1480
+ event: "popup_period_select",
1481
+ params: { period: "{{ item.key }}" }
1482
+ }
1483
+ ]
1484
+ },
1485
+ children: [
1486
+ {
1487
+ type: "text",
1488
+ // 负 top 让角标压到卡片上边框外面;选中态 2px 边框,所以是 -9 不是 -7
1489
+ rect: ["calc(50% - 19px)", -9, 38, 22],
1490
+ content: "\u63A8\u8350",
1491
+ visibleWhen: "item.hot",
1492
+ style: {
1493
+ background: ORANGE,
1494
+ color: "#ffffff",
1495
+ fontSize: 11,
1496
+ fontWeight: "800",
1497
+ radius: 6,
1498
+ textAlign: "center",
1499
+ lineHeight: 22
1500
+ }
1501
+ },
1502
+ {
1503
+ type: "text",
1504
+ rect: [0, 12, "100%", 19],
1505
+ content: "{{ item.p }}",
1506
+ style: { fontSize: 13, color: "#8a909c", textAlign: "center" }
1507
+ },
1508
+ {
1509
+ type: "flex",
1510
+ rect: [0, 34, "100%", 26],
1511
+ style: { justify: "center", align: "baseline" },
1512
+ children: [
1513
+ {
1514
+ type: "text",
1515
+ content: "\xA5",
1516
+ style: { fontSize: 13, fontWeight: "800", color: "#1f2533" }
1517
+ },
1518
+ {
1519
+ type: "text",
1520
+ content: "{{ item.price }}",
1521
+ style: { fontSize: 21, fontWeight: "800", color: "#1f2533" }
1522
+ }
1523
+ ]
1524
+ },
1525
+ {
1526
+ type: "text",
1527
+ rect: [4, 63, "calc(100% - 8px)", 32],
1528
+ content: "{{ item.per }}",
1529
+ style: { fontSize: 11, color: "#8a909c", textAlign: "center", lineHeight: 1.35 }
1530
+ },
1531
+ {
1532
+ type: "text",
1533
+ rect: [0, 98, "100%", 15],
1534
+ content: "{{ item.flag }}",
1535
+ visibleWhen: "item.flag != ''",
1536
+ style: { fontSize: 11, color: "#8a909c", textAlign: "center" }
1537
+ }
1538
+ ]
1539
+ };
1540
+ var renewExpire = {
1541
+ version: 1,
1542
+ type: "popup",
1543
+ meta: { name: "\u8BD5\u7528\u5269 3 \u5929 \xB7 \u5230\u671F\u4E13\u4EAB\uFF08\u590D\u523B\u8FD0\u8425 demo\uFF09" },
1544
+ stage: {
1545
+ width: 520,
1546
+ height: "auto",
1547
+ layout: "flow",
1548
+ mask: true,
1549
+ maskClosable: false,
1550
+ closeButton: { show: true, position: "top-right", offset: [14, 14] },
1551
+ style: { radius: 18 }
1552
+ },
1553
+ data: {
1554
+ achieve: [
1555
+ { v: "\u5DF2\u8865\u9F50", n: "42", u: " \u5F20", l: "\u767D\u5E95\u56FE \xB7 \u5408\u89C4\u53EF\u62A5\u6D3B\u52A8" },
1556
+ { v: "\u5DF2\u8865\u9F50", n: "34", u: " \u6761", l: "\u5BFC\u8D2D\u77ED\u6807\u9898 \xB7 \u63D0\u70B9\u51FB" },
1557
+ { v: "\u8FD0\u884C", n: "6", u: " \u9879", l: "\u7ECF\u8425\u4EFB\u52A1\uFF08\u5546\u54C1\u4F18\u5316/\u6D41\u91CF\u589E\u957F\uFF09" },
1558
+ { v: "\u5DF2\u4E0A\u67B6", n: "68", u: " \u4E2A", l: "\u7D2F\u8BA1\u4E0A\u67B6\u5546\u54C1" }
1559
+ ],
1560
+ lose: [
1561
+ { b: "\u6279\u91CF\u642C\u5BB6\u4E0A\u8D27", t: "\u5230\u671F\u540E\u65E0\u6CD5\u7EE7\u7EED\u4E0A\u8D27" },
1562
+ { b: "6 \u9879\u81EA\u52A8\u7ECF\u8425\u4EFB\u52A1", t: "\u767D\u5E95\u56FE / \u77ED\u6807\u9898\u8865\u9F50\u3001\u4F4E\u6548\u54C1\u8BCA\u65AD\u4F18\u5316" },
1563
+ { b: "\u65B0\u4EBA\u9996\u8D2D\u4EF7", t: "\u5230\u671F\u6062\u590D\u539F\u4EF7 \xA520/\u6708" }
1564
+ ],
1565
+ // 价格档位从后端数据源取:$source 是后端注册过的名字,不是接口地址。
1566
+ // 后端返回几档就渲染几档,配置时不用知道数量(见下面的 repeat)。
1567
+ tiers: { $source: "listRenewTiers", params: { scene: "trial_expire" } }
1568
+ },
1569
+ state: { period: 1 },
1570
+ derived: { current: { list: "tiers", indexBy: "period" } },
1571
+ nodes: [
1572
+ // ===== 深色渐变头部 =====
1573
+ {
1574
+ type: "flex",
1575
+ style: {
1576
+ direction: "column",
1577
+ background: "linear-gradient(135deg,#2b0f0f,#3a1414)",
1578
+ padding: "20px 22px 16px",
1579
+ gap: 13
1580
+ },
1581
+ children: [
1582
+ {
1583
+ type: "text",
1584
+ content: "\u23F0 \u8BD5\u7528\u5269 {{ user.trialLeftDays }} \u5929",
1585
+ style: {
1586
+ // 不写 alignSelf 会被 flex 列拉满整行,标签必须按内容宽度
1587
+ alignSelf: "flex-start",
1588
+ background: "rgba(255,255,255,0.18)",
1589
+ color: "#ffffff",
1590
+ fontSize: 12,
1591
+ fontWeight: "700",
1592
+ radius: 6,
1593
+ padding: "5px 10px"
1594
+ }
1595
+ },
1596
+ {
1597
+ type: "repeat",
1598
+ bind: "achieve",
1599
+ style: { gap: 9, wrap: true },
1600
+ template: achieveCell
1601
+ }
1602
+ ]
1603
+ },
1604
+ // ===== 白色 body =====
1605
+ {
1606
+ type: "flex",
1607
+ style: { direction: "column", background: "#ffffff", padding: "22px 26px 24px" },
1608
+ children: [
1609
+ {
1610
+ type: "text",
1611
+ content: "{{ user.trialLeftDays }} \u5929\u540E\u8BD5\u7528\u5230\u671F\uFF0C\u4EE5\u4E0B\u80FD\u529B\u4F1A\u505C\u6B62\uFF1A",
1612
+ style: { fontSize: 15, fontWeight: "800", color: "#1f2533", marginBottom: 11 }
1613
+ },
1614
+ {
1615
+ type: "repeat",
1616
+ bind: "lose",
1617
+ template: loseRow,
1618
+ style: {
1619
+ direction: "column",
1620
+ background: "#ffe9e6",
1621
+ borderWidth: 1,
1622
+ borderStyle: "solid",
1623
+ borderColor: "#ffd0ca",
1624
+ radius: 12,
1625
+ padding: "7px 13px"
1626
+ }
1627
+ },
1628
+ {
1629
+ type: "flex",
1630
+ style: { align: "center", gap: 8, marginTop: 17, marginBottom: 9 },
1631
+ children: [
1632
+ {
1633
+ type: "text",
1634
+ content: "\u4E13\u5C5E\u4F18\u60E0 \xB7 \u5012\u8BA1\u65F6",
1635
+ style: { fontSize: 13.5, fontWeight: "700", color: "#747b89" }
1636
+ },
1637
+ {
1638
+ type: "text",
1639
+ content: "\u65B0\u4EBA\u9996\u8D2D\u4EF7",
1640
+ style: {
1641
+ alignSelf: "center",
1642
+ background: ORANGE,
1643
+ color: "#ffffff",
1644
+ fontSize: 11,
1645
+ fontWeight: "800",
1646
+ radius: 5,
1647
+ padding: "2px 8px"
1648
+ }
1649
+ }
1650
+ ]
1651
+ },
1652
+ { type: "repeat", bind: "tiers", style: { gap: 8 }, template: tierCard },
1653
+ {
1654
+ type: "flex",
1655
+ style: {
1656
+ justify: "center",
1657
+ align: "center",
1658
+ gap: 5,
1659
+ height: 52,
1660
+ radius: 11,
1661
+ background: "linear-gradient(90deg,#f53f3f,#ff7a45)",
1662
+ marginTop: 15,
1663
+ cursor: "pointer"
1664
+ },
1665
+ action: {
1666
+ type: "sequence",
1667
+ actions: [
1668
+ {
1669
+ type: "track",
1670
+ event: "popup_renew_click",
1671
+ params: { period: "{{ current.key }}" }
1672
+ },
1673
+ { type: "navigate", url: "{{ current.url }}" }
1674
+ ]
1675
+ },
1676
+ children: [
1677
+ {
1678
+ type: "text",
1679
+ content: "\u4FDD\u4F4F\u5546\u54C1 \xB7",
1680
+ style: { fontSize: 14, fontWeight: "800", color: "#ffffff" }
1681
+ },
1682
+ {
1683
+ type: "text",
1684
+ content: "{{ current.p }} \xA5{{ current.price }}",
1685
+ style: { fontSize: 15, fontWeight: "800", color: "#ffffff" }
1686
+ }
1687
+ ]
1688
+ },
1689
+ {
1690
+ type: "text",
1691
+ content: "\u5347\u7EA7\u6216\u67E5\u770B\u66F4\u591A\u4EA7\u54C1\u5957\u9910",
1692
+ style: {
1693
+ fontSize: 12.5,
1694
+ color: "#8a909c",
1695
+ textAlign: "center",
1696
+ marginTop: 11,
1697
+ cursor: "pointer"
1698
+ },
1699
+ action: { type: "track", event: "popup_more_plans" }
1700
+ }
1701
+ ]
1702
+ }
1703
+ ]
1704
+ };
1705
+ var renew_expire_default = renewExpire;
1706
+
1707
+ // src/docs/examples/last-day.ts
1708
+ var ORANGE2 = "linear-gradient(90deg,#ff7a00,#faad14)";
1709
+ var cdBlock = (content, extra) => ({
1710
+ type: "text",
1711
+ content,
1712
+ style: Object.assign(
1713
+ {
1714
+ width: 42,
1715
+ height: 29,
1716
+ background: "rgba(255,255,255,0.14)",
1717
+ borderWidth: 1,
1718
+ borderStyle: "solid",
1719
+ borderColor: "rgba(255,255,255,0.16)",
1720
+ radius: 7,
1721
+ color: "#ffffff",
1722
+ fontSize: 18,
1723
+ fontWeight: "800",
1724
+ lineHeight: 29,
1725
+ textAlign: "center",
1726
+ // 厘秒每帧都在变,不等宽会左右抖
1727
+ fontVariantNumeric: "tabular-nums"
1728
+ },
1729
+ extra
1730
+ )
1731
+ });
1732
+ var cdSeparator = (content) => ({
1733
+ type: "text",
1734
+ content,
1735
+ style: { fontSize: 13, fontWeight: "800", color: "rgba(255,255,255,0.7)" }
1736
+ });
1737
+ var achieveCell2 = {
1738
+ type: "flex",
1739
+ style: {
1740
+ direction: "column",
1741
+ width: "calc(50% - 5px)",
1742
+ background: "rgba(255,255,255,0.16)",
1743
+ borderWidth: 1,
1744
+ borderStyle: "solid",
1745
+ borderColor: "rgba(255,255,255,0.2)",
1746
+ radius: 10,
1747
+ padding: "10px 13px",
1748
+ gap: 3
1749
+ },
1750
+ children: [
1751
+ {
1752
+ type: "flex",
1753
+ style: { align: "baseline", gap: 3, height: 22 },
1754
+ children: [
1755
+ {
1756
+ type: "text",
1757
+ content: "{{ item.v }}",
1758
+ style: {
1759
+ fontSize: 11.5,
1760
+ fontWeight: "600",
1761
+ lineHeight: 1.1,
1762
+ color: "rgba(255,255,255,0.92)"
1763
+ }
1764
+ },
1765
+ {
1766
+ type: "text",
1767
+ content: "{{ item.n }}",
1768
+ style: { fontSize: 20, fontWeight: "800", lineHeight: 1.1, color: "#ffffff" }
1769
+ },
1770
+ {
1771
+ type: "text",
1772
+ content: "{{ item.u }}",
1773
+ style: { fontSize: 12, lineHeight: 1.1, color: "rgba(255,255,255,0.92)" }
1774
+ }
1775
+ ]
1776
+ },
1777
+ {
1778
+ type: "text",
1779
+ content: "{{ item.l }}",
1780
+ style: { fontSize: 11.5, lineHeight: 1.35, color: "rgba(255,255,255,0.72)" }
1781
+ }
1782
+ ]
1783
+ };
1784
+ var loseRow2 = {
1785
+ type: "flex",
1786
+ style: { align: "flex-start", gap: 10, padding: "7px 0" },
1787
+ children: [
1788
+ {
1789
+ type: "text",
1790
+ content: "",
1791
+ style: { width: 6, height: 6, radius: "50%", background: "#f53f3f", marginTop: 7 }
1792
+ },
1793
+ {
1794
+ type: "flex",
1795
+ style: { align: "baseline", gap: 4, wrap: true, flex: "1" },
1796
+ children: [
1797
+ {
1798
+ type: "text",
1799
+ content: "{{ item.b }}",
1800
+ style: {
1801
+ fontSize: 12.5,
1802
+ fontWeight: "700",
1803
+ lineHeight: 1.55,
1804
+ color: "#1f2533"
1805
+ }
1806
+ },
1807
+ {
1808
+ type: "text",
1809
+ content: "{{ item.tag }}",
1810
+ visibleWhen: "item.tag != ''",
1811
+ style: {
1812
+ background: "{{ item.sev == 'lose' ? '#ffd5cf' : 'rgba(255,255,255,0.78)' }}",
1813
+ color: "{{ item.sev == 'lose' ? '#cf1322' : '#8a7f78' }}",
1814
+ fontSize: 10,
1815
+ fontWeight: "800",
1816
+ radius: 4,
1817
+ padding: "1px 6px",
1818
+ whiteSpace: "nowrap"
1819
+ }
1820
+ },
1821
+ {
1822
+ type: "text",
1823
+ content: "\u2014 {{ item.t }}",
1824
+ style: { fontSize: 12.5, lineHeight: 1.55, color: "#4a4038" }
1825
+ }
1826
+ ]
1827
+ }
1828
+ ]
1829
+ };
1830
+ var tierCard2 = {
1831
+ type: "box",
1832
+ style: {
1833
+ flex: "1",
1834
+ height: 121,
1835
+ radius: 12,
1836
+ background: "{{ item.key == current.key ? '#fffaf0' : '#ffffff' }}",
1837
+ borderStyle: "solid",
1838
+ borderWidth: "{{ item.key == current.key ? '2px' : '1px' }}",
1839
+ borderColor: "{{ item.key == current.key ? '#f0a000' : '#e5e8ed' }}",
1840
+ cursor: "pointer"
1841
+ },
1842
+ action: {
1843
+ type: "sequence",
1844
+ actions: [
1845
+ { type: "setState", key: "period", value: "{{ index }}" },
1846
+ {
1847
+ type: "track",
1848
+ event: "popup_period_select",
1849
+ params: { period: "{{ item.key }}" }
1850
+ }
1851
+ ]
1852
+ },
1853
+ children: [
1854
+ {
1855
+ type: "text",
1856
+ rect: ["calc(50% - 19px)", -9, 38, 22],
1857
+ content: "\u63A8\u8350",
1858
+ visibleWhen: "item.hot",
1859
+ style: {
1860
+ background: ORANGE2,
1861
+ color: "#ffffff",
1862
+ fontSize: 11,
1863
+ fontWeight: "800",
1864
+ radius: 6,
1865
+ textAlign: "center",
1866
+ lineHeight: 22
1867
+ }
1868
+ },
1869
+ {
1870
+ type: "text",
1871
+ rect: [0, 12, "100%", 19],
1872
+ content: "{{ item.p }}",
1873
+ style: { fontSize: 13, color: "#8a909c", textAlign: "center" }
1874
+ },
1875
+ {
1876
+ type: "flex",
1877
+ rect: [0, 34, "100%", 26],
1878
+ style: { justify: "center", align: "baseline" },
1879
+ children: [
1880
+ {
1881
+ type: "text",
1882
+ content: "\xA5",
1883
+ style: { fontSize: 13, fontWeight: "800", color: "#1f2533" }
1884
+ },
1885
+ {
1886
+ type: "text",
1887
+ content: "{{ item.price }}",
1888
+ style: { fontSize: 21, fontWeight: "800", color: "#1f2533" }
1889
+ }
1890
+ ]
1891
+ },
1892
+ {
1893
+ type: "text",
1894
+ rect: [4, 63, "calc(100% - 8px)", 32],
1895
+ content: "{{ item.per }}",
1896
+ style: { fontSize: 11, color: "#8a909c", textAlign: "center", lineHeight: 1.35 }
1897
+ },
1898
+ {
1899
+ type: "text",
1900
+ rect: [0, 98, "100%", 15],
1901
+ content: "{{ item.flag }}",
1902
+ visibleWhen: "item.flag != ''",
1903
+ style: { fontSize: 11, color: "#8a909c", textAlign: "center" }
1904
+ }
1905
+ ]
1906
+ };
1907
+ var lastDay = {
1908
+ version: 1,
1909
+ type: "popup",
1910
+ meta: { name: "\u5269 1 \u5929 \xB7 \u6700\u540E\u4E00\u9053\uFF08\u542B\u5398\u79D2\u5012\u8BA1\u65F6\uFF09" },
1911
+ stage: {
1912
+ width: 520,
1913
+ height: "auto",
1914
+ layout: "flow",
1915
+ mask: true,
1916
+ maskClosable: false,
1917
+ closeButton: { show: true, position: "top-right", offset: [14, 14] },
1918
+ style: { radius: 18 }
1919
+ },
1920
+ data: {
1921
+ achieve: [
1922
+ { v: "\u5DF2\u4E0A\u67B6", n: "118", u: " \u4E2A", l: "\u7D2F\u8BA1\u4E0A\u67B6\u5546\u54C1" },
1923
+ { v: "\u8FD0\u884C", n: "6", u: " \u9879", l: "\u7ECF\u8425\u4EFB\u52A1\uFF08\u5546\u54C1\u4F18\u5316/\u6D41\u91CF\u589E\u957F\uFF09" },
1924
+ { v: "\u5DF2\u8865\u9F50", n: "42", u: " \u5F20", l: "\u767D\u5E95\u56FE \xB7 \u5408\u89C4\u53EF\u62A5\u6D3B\u52A8" },
1925
+ { v: "\u5B8C\u6210", n: "31", u: " \u6B21", l: "\u6807\u9898\u4E3B\u56FE\u81EA\u52A8\u91CD\u505A" }
1926
+ ],
1927
+ lose: [
1928
+ {
1929
+ b: "118 \u4E2A\u5546\u54C1\u7684\u5168\u90E8\u4F18\u5316\u8BB0\u5F55",
1930
+ tag: "\u5C06\u51BB\u7ED3",
1931
+ sev: "lose",
1932
+ t: "\u5230\u671F\u51BB\u7ED3\uFF0C\u903E\u671F\u5F7B\u5E95\u6E05\u7A7A"
1933
+ },
1934
+ {
1935
+ b: "\u5E97\u94FA\u6388\u6743\u4E0E\u591A\u5E97\u5173\u8054",
1936
+ tag: "",
1937
+ sev: "lose",
1938
+ t: "\u7ED1\u5B9A\u5173\u7CFB\u6E05\u96F6\uFF0C\u6BCF\u4E2A\u5E97\u90FD\u8981\u91CD\u65B0\u6388\u6743\u4E00\u904D"
1939
+ },
1940
+ {
1941
+ b: "\u5546\u54C1\u8BCA\u65AD\u4E0E\u4F18\u5316\u8BB0\u5F55",
1942
+ tag: "\u5C06\u51BB\u7ED3",
1943
+ sev: "lose",
1944
+ t: "\u5546\u54C1\u5386\u53F2\u4F18\u5316\u8BB0\u5F55\u65E0\u6CD5\u67E5\u8BE2\uFF0C\u9700\u91CD\u65B0\u4F18\u5316"
1945
+ },
1946
+ {
1947
+ b: "7 \u9879\u81EA\u52A8\u7ECF\u8425\u4EFB\u52A1",
1948
+ tag: "\u5C06\u6682\u505C",
1949
+ sev: "pause",
1950
+ t: "\u8865\u7D20\u6750\u4E0E\u6CBB\u4F4E\u6548\u54C1\u5168\u90E8\u505C\u6446"
1951
+ }
1952
+ ],
1953
+ tiers: [
1954
+ {
1955
+ key: "month",
1956
+ p: "\u6708\u4ED8",
1957
+ price: "15",
1958
+ per: "\u63A5\u56DE\u4EF7 \xB7 \u6B21\u6708\xA520",
1959
+ flag: "",
1960
+ hot: false,
1961
+ url: "https://maibaole.example.com/order?p=month"
1962
+ },
1963
+ {
1964
+ key: "quarter",
1965
+ p: "\u5B63\u4ED8",
1966
+ price: "32",
1967
+ per: "\xA510.7/\u6708 \xB7 \u6700\u5212\u7B97",
1968
+ flag: "",
1969
+ hot: true,
1970
+ url: "https://maibaole.example.com/order?p=quarter"
1971
+ },
1972
+ {
1973
+ key: "half",
1974
+ p: "\u534A\u5E74",
1975
+ price: "64",
1976
+ per: "\xA510.7/\u6708",
1977
+ flag: "\u70ED\u95E8",
1978
+ hot: false,
1979
+ url: "https://maibaole.example.com/order?p=half"
1980
+ },
1981
+ {
1982
+ key: "year",
1983
+ p: "\u5E74\u4ED8",
1984
+ price: "128",
1985
+ per: "\xA510.7/\u6708",
1986
+ flag: "\u7701\u6700\u591A",
1987
+ hot: false,
1988
+ url: "https://maibaole.example.com/order?p=year"
1989
+ }
1990
+ ]
1991
+ },
1992
+ state: { period: 1 },
1993
+ derived: { current: { list: "tiers", indexBy: "period" } },
1994
+ nodes: [
1995
+ {
1996
+ type: "flex",
1997
+ style: {
1998
+ direction: "column",
1999
+ background: "linear-gradient(135deg,#2b0f0f,#3a1414)",
2000
+ padding: "20px 22px 16px"
2001
+ },
2002
+ children: [
2003
+ {
2004
+ type: "text",
2005
+ content: "\u{1F525} \u8FD8\u5269\u6700\u540E {{ user.lastDayLeft }} \u5929",
2006
+ style: {
2007
+ alignSelf: "flex-start",
2008
+ background: "rgba(255,255,255,0.18)",
2009
+ color: "#ffffff",
2010
+ fontSize: 12,
2011
+ fontWeight: "700",
2012
+ radius: 6,
2013
+ padding: "3px 10px"
2014
+ }
2015
+ },
2016
+ {
2017
+ type: "repeat",
2018
+ bind: "achieve",
2019
+ style: { gap: 9, wrap: true, marginTop: 14 },
2020
+ template: achieveCell2
2021
+ },
2022
+ // ===== 分格倒计时 + 厘秒逐帧动画 =====
2023
+ {
2024
+ type: "countdown",
2025
+ to: "{{ user.trialEndAt }}",
2026
+ precision: "cs",
2027
+ as: "cd",
2028
+ style: { align: "center", gap: 6, marginTop: 10 },
2029
+ onEnd: { type: "track", event: "popup_countdown_end" },
2030
+ children: [
2031
+ cdBlock("{{ cd.h }}"),
2032
+ cdSeparator(":"),
2033
+ cdBlock("{{ cd.m }}"),
2034
+ cdSeparator(":"),
2035
+ cdBlock("{{ cd.s }}"),
2036
+ cdSeparator("."),
2037
+ cdBlock("{{ cd.cs }}", {
2038
+ width: 34,
2039
+ height: 24,
2040
+ fontSize: 13,
2041
+ lineHeight: 24,
2042
+ color: "#ffcabc"
2043
+ }),
2044
+ {
2045
+ type: "text",
2046
+ content: "\u540E\u505C\u6B62\u670D\u52A1",
2047
+ style: {
2048
+ fontSize: 11.5,
2049
+ fontWeight: "600",
2050
+ color: "rgba(255,255,255,0.85)",
2051
+ marginLeft: 4
2052
+ }
2053
+ }
2054
+ ]
2055
+ }
2056
+ ]
2057
+ },
2058
+ {
2059
+ type: "flex",
2060
+ style: { direction: "column", background: "#ffffff", padding: "22px 26px 24px" },
2061
+ children: [
2062
+ {
2063
+ type: "text",
2064
+ content: "\u5230\u671F\u540E\uFF0C\u4EE5\u4E0B\u6570\u636E\u5C06\u6E05\u7A7A\uFF1A",
2065
+ style: { fontSize: 15, fontWeight: "800", color: "#1f2533" }
2066
+ },
2067
+ {
2068
+ type: "repeat",
2069
+ bind: "lose",
2070
+ template: loseRow2,
2071
+ style: {
2072
+ direction: "column",
2073
+ marginTop: 14,
2074
+ background: "#ffe9e6",
2075
+ borderWidth: 1,
2076
+ borderStyle: "solid",
2077
+ borderColor: "#ffd0ca",
2078
+ radius: 12,
2079
+ padding: "7px 13px"
2080
+ }
2081
+ },
2082
+ {
2083
+ // perk 权益条
2084
+ type: "flex",
2085
+ style: {
2086
+ align: "flex-start",
2087
+ gap: 7,
2088
+ marginTop: 16,
2089
+ background: "#fff9ed",
2090
+ borderWidth: 1,
2091
+ borderStyle: "solid",
2092
+ borderColor: "#ffd08a",
2093
+ radius: 12,
2094
+ padding: "14px 13px"
2095
+ },
2096
+ children: [
2097
+ {
2098
+ type: "text",
2099
+ content: "\u2713",
2100
+ style: { fontSize: 12.5, fontWeight: "900", color: "#ff7a00" }
2101
+ },
2102
+ {
2103
+ type: "flex",
2104
+ style: { align: "baseline", flex: "1" },
2105
+ children: [
2106
+ {
2107
+ type: "text",
2108
+ content: "\u4ECA\u665A\u8FC7\u540E\uFF0C\u81EA\u52A8\u53D8\u56DE\u539F\u4EF7\uFF0C",
2109
+ style: { fontSize: 12.5, fontWeight: "600", color: "#a35200" }
2110
+ },
2111
+ {
2112
+ type: "text",
2113
+ content: "\u65B0\u4EBA\u9996\u8D2D\u4EF7",
2114
+ style: { fontSize: 12.5, fontWeight: "800", color: "#a35200" }
2115
+ },
2116
+ {
2117
+ type: "text",
2118
+ content: "\u4EC5\u8BD5\u7528\u671F\u5185\u6709\u6548",
2119
+ style: { fontSize: 12.5, fontWeight: "600", color: "#a35200" }
2120
+ }
2121
+ ]
2122
+ }
2123
+ ]
2124
+ },
2125
+ {
2126
+ type: "flex",
2127
+ style: { align: "center", gap: 8, marginTop: 17, marginBottom: 9 },
2128
+ children: [
2129
+ {
2130
+ type: "text",
2131
+ content: "\u4E13\u5C5E\u4F18\u60E0 \xB7 \u5012\u8BA1\u65F6",
2132
+ style: { fontSize: 13.5, fontWeight: "700", color: "#747b89" }
2133
+ },
2134
+ {
2135
+ type: "text",
2136
+ content: "\u65B0\u4EBA\u9996\u8D2D\u4EF7",
2137
+ style: {
2138
+ alignSelf: "center",
2139
+ background: ORANGE2,
2140
+ color: "#ffffff",
2141
+ fontSize: 11,
2142
+ fontWeight: "800",
2143
+ radius: 5,
2144
+ padding: "2px 8px"
2145
+ }
2146
+ }
2147
+ ]
2148
+ },
2149
+ { type: "repeat", bind: "tiers", style: { gap: 8 }, template: tierCard2 },
2150
+ {
2151
+ type: "flex",
2152
+ style: {
2153
+ justify: "center",
2154
+ align: "center",
2155
+ gap: 5,
2156
+ height: 52,
2157
+ radius: 11,
2158
+ background: "linear-gradient(90deg,#f53f3f,#ff7a45)",
2159
+ marginTop: 20,
2160
+ cursor: "pointer"
2161
+ },
2162
+ action: {
2163
+ type: "sequence",
2164
+ actions: [
2165
+ {
2166
+ type: "track",
2167
+ event: "popup_renew_click",
2168
+ params: { period: "{{ current.key }}", stage: "last_day" }
2169
+ },
2170
+ { type: "navigate", url: "{{ current.url }}" }
2171
+ ]
2172
+ },
2173
+ children: [
2174
+ {
2175
+ type: "text",
2176
+ content: "\u539F\u6837\u7559\u4F4F\u6210\u679C \xB7",
2177
+ style: { fontSize: 14, fontWeight: "800", color: "#ffffff" }
2178
+ },
2179
+ {
2180
+ type: "text",
2181
+ content: "{{ current.p }} \xA5{{ current.price }}",
2182
+ style: { fontSize: 16.5, fontWeight: "800", color: "#ffffff" }
2183
+ }
2184
+ ]
2185
+ },
2186
+ {
2187
+ type: "text",
2188
+ content: "\u5347\u7EA7\u6216\u67E5\u770B\u66F4\u591A\u4EA7\u54C1\u5957\u9910",
2189
+ style: {
2190
+ fontSize: 12,
2191
+ color: "#8a909c",
2192
+ textAlign: "center",
2193
+ marginTop: 10,
2194
+ cursor: "pointer"
2195
+ },
2196
+ action: { type: "track", event: "popup_more_plans" }
2197
+ }
2198
+ ]
2199
+ }
2200
+ ]
2201
+ };
2202
+ var last_day_default = lastDay;
2203
+
2204
+ // src/docs/examples/multi-view.ts
2205
+ var ORANGE3 = "linear-gradient(90deg,#ff7a00,#faad14)";
2206
+ var textBtn = (text, action, extra) => ({
2207
+ type: "text",
2208
+ content: text,
2209
+ style: Object.assign({ fontSize: 12.5, color: "#8a909c", cursor: "pointer" }, extra),
2210
+ action
2211
+ });
2212
+ var noticeToPopup = {
2213
+ version: 1,
2214
+ meta: { name: "\u516C\u544A\u6761\u70B9\u51FB\u5F39\u51FA\u5F39\u7A97\uFF08\u591A\u89C6\u56FE \xB7 \u53E0\u52A0\uFF09" },
2215
+ entry: "bar",
2216
+ data: {
2217
+ plans: [
2218
+ {
2219
+ key: "pro",
2220
+ name: "\u4E13\u4E1A\u7248",
2221
+ price: "\xA5899/\u5E74",
2222
+ url: "https://maibaole.example.com/order?p=pro"
2223
+ },
2224
+ {
2225
+ key: "lux",
2226
+ name: "\u8C6A\u534E\u7248",
2227
+ price: "\xA51999/\u5E74",
2228
+ url: "https://maibaole.example.com/order?p=lux"
2229
+ }
2230
+ ]
2231
+ },
2232
+ state: { plan: 0 },
2233
+ derived: { current: { list: "plans", indexBy: "plan" } },
2234
+ views: {
2235
+ // 常驻在页面里的公告条,点它才弹弹窗
2236
+ bar: {
2237
+ type: "notice",
2238
+ stage: {
2239
+ width: "100%",
2240
+ height: "auto",
2241
+ layout: "flow",
2242
+ style: { radius: 6, background: "#fff8e6", maxWidth: 1200 },
2243
+ // 多视图下每层各埋各的,能分别统计「公告条曝光」和「弹窗曝光」
2244
+ onShow: { type: "track", event: "notice_show", params: { view: "bar" } },
2245
+ onClose: {
2246
+ type: "track",
2247
+ event: "notice_dismiss",
2248
+ params: { view: "bar", reason: "{{ closeReason }}" }
2249
+ }
2250
+ },
2251
+ nodes: [
2252
+ {
2253
+ type: "flex",
2254
+ // 整条都能点开弹窗
2255
+ style: { align: "center", gap: 10, padding: "10px 14px", cursor: "pointer" },
2256
+ action: {
2257
+ type: "sequence",
2258
+ actions: [
2259
+ { type: "track", event: "notice_click", params: { from: "bar" } },
2260
+ { type: "open", view: "renew" }
2261
+ ]
2262
+ },
2263
+ children: [
2264
+ { type: "text", content: "\u{1F4E2}", style: { fontSize: 16 } },
2265
+ {
2266
+ type: "text",
2267
+ content: "{{ user.shopName }}\uFF0C\u4F60\u7684{{ user.version }}\u8FD8\u6709 {{ user.expireDays }} \u5929\u5230\u671F",
2268
+ style: { flex: "1", fontSize: 14, color: "#8a6212", lineHeight: 1.5 }
2269
+ },
2270
+ {
2271
+ type: "button",
2272
+ text: "\u67E5\u770B\u7EED\u8D39\u65B9\u6848",
2273
+ style: {
2274
+ width: 104,
2275
+ height: 28,
2276
+ radius: 14,
2277
+ background: "#f5a623",
2278
+ color: "#fff",
2279
+ fontSize: 12
2280
+ },
2281
+ // 叠一层弹窗,公告条留在下面
2282
+ action: {
2283
+ type: "sequence",
2284
+ actions: [
2285
+ { type: "track", event: "notice_click", params: { from: "button" } },
2286
+ { type: "open", view: "renew" }
2287
+ ]
2288
+ }
2289
+ },
2290
+ {
2291
+ // × 有自己的动作,点它不会再冒泡去触发外层的「打开弹窗」
2292
+ type: "text",
2293
+ content: "\u2715",
2294
+ style: {
2295
+ alignSelf: "center",
2296
+ width: 22,
2297
+ height: 22,
2298
+ textAlign: "center",
2299
+ lineHeight: 22,
2300
+ color: "#b08a3e",
2301
+ fontSize: 13,
2302
+ cursor: "pointer"
2303
+ },
2304
+ action: {
2305
+ type: "sequence",
2306
+ actions: [
2307
+ { type: "call", name: "setNeverRemind" },
2308
+ { type: "close", reason: "user-dismiss" }
2309
+ ]
2310
+ }
2311
+ }
2312
+ ]
2313
+ }
2314
+ ]
2315
+ },
2316
+ renew: {
2317
+ type: "popup",
2318
+ stage: {
2319
+ width: 400,
2320
+ height: "auto",
2321
+ layout: "flow",
2322
+ mask: true,
2323
+ maskClosable: true,
2324
+ closeButton: { show: true, position: "top-right", offset: [12, 12] },
2325
+ style: { radius: 14 },
2326
+ onShow: { type: "track", event: "popup_show", params: { view: "renew" } },
2327
+ onClose: {
2328
+ type: "track",
2329
+ event: "popup_close",
2330
+ params: { view: "renew", reason: "{{ closeReason }}" }
2331
+ }
2332
+ },
2333
+ nodes: [
2334
+ {
2335
+ type: "flex",
2336
+ style: { direction: "column", padding: "26px 24px 22px", gap: 12 },
2337
+ children: [
2338
+ {
2339
+ type: "text",
2340
+ content: "\u7EED\u8D39\u65B9\u6848",
2341
+ style: {
2342
+ fontSize: 18,
2343
+ fontWeight: "800",
2344
+ color: "#1f2533",
2345
+ textAlign: "center"
2346
+ }
2347
+ },
2348
+ {
2349
+ type: "tabs",
2350
+ bind: "plans",
2351
+ labelField: "name",
2352
+ stateKey: "plan",
2353
+ style: { gap: 8 },
2354
+ itemStyle: {
2355
+ flex: "1",
2356
+ height: 36,
2357
+ radius: 18,
2358
+ background: "#f2f4f7",
2359
+ color: "#68727f",
2360
+ fontSize: 13
2361
+ },
2362
+ activeItemStyle: {
2363
+ background: "#ff4433",
2364
+ color: "#ffffff",
2365
+ fontWeight: "700"
2366
+ }
2367
+ },
2368
+ {
2369
+ type: "text",
2370
+ content: "{{ current.price }}",
2371
+ style: {
2372
+ fontSize: 30,
2373
+ fontWeight: "800",
2374
+ color: "#ff4433",
2375
+ textAlign: "center"
2376
+ }
2377
+ },
2378
+ {
2379
+ type: "flex",
2380
+ style: {
2381
+ justify: "center",
2382
+ align: "center",
2383
+ height: 46,
2384
+ radius: 23,
2385
+ background: "#ff4433",
2386
+ cursor: "pointer"
2387
+ },
2388
+ action: {
2389
+ type: "sequence",
2390
+ actions: [
2391
+ {
2392
+ type: "track",
2393
+ event: "notice_order_click",
2394
+ params: { plan: "{{ current.key }}" }
2395
+ },
2396
+ { type: "navigate", url: "{{ current.url }}" }
2397
+ ]
2398
+ },
2399
+ children: [
2400
+ {
2401
+ type: "text",
2402
+ content: "\u7ACB\u5373\u7EED\u8D39 {{ current.name }}",
2403
+ style: { fontSize: 15, fontWeight: "700", color: "#ffffff" }
2404
+ }
2405
+ ]
2406
+ },
2407
+ // 只关掉这一层,公告条还在
2408
+ textBtn("\u4EE5\u540E\u518D\u8BF4", { type: "close" }, { textAlign: "center" })
2409
+ ]
2410
+ }
2411
+ ]
2412
+ }
2413
+ }
2414
+ };
2415
+ var confirmAndSwitch = {
2416
+ version: 1,
2417
+ meta: { name: "\u4E0D\u518D\u63D0\u9192\u4E8C\u6B21\u786E\u8BA4 + \u80FD\u529B\u6E05\u5355\u6362\u5C4F\uFF08\u591A\u89C6\u56FE\uFF09" },
2418
+ entry: "main",
2419
+ data: {
2420
+ features: [
2421
+ { b: "\u591A\u94FE\u63A5\u6279\u91CF\u642C\u5BB6", t: "\u4E00\u6B21\u642C\u6574\u6279\uFF0C\u4E0D\u7528\u9010\u4E2A\u6765" },
2422
+ { b: "\u66F4\u591A\u642C\u5BB6\u989D\u5EA6", t: "\u653E\u5F00\u624B\u642C\uFF0C\u989D\u5EA6\u4E0D\u5361\u8116\u5B50" },
2423
+ { b: "AI \u7206\u6B3E\u88C2\u53D8", t: "\u4E00\u6B3E\u53D8\u591A\u6B3E\uFF0C\u6D4B\u7206\u54C1 \xB7 \u4E13\u4E1A\u7248\u8D77" }
2424
+ ]
2425
+ },
2426
+ state: {},
2427
+ views: {
2428
+ main: {
2429
+ type: "popup",
2430
+ stage: {
2431
+ width: 400,
2432
+ height: "auto",
2433
+ layout: "flow",
2434
+ mask: true,
2435
+ maskClosable: false,
2436
+ closeButton: { show: true, position: "top-right", offset: [12, 12] },
2437
+ style: { radius: 14 }
2438
+ },
2439
+ nodes: [
2440
+ {
2441
+ type: "flex",
2442
+ style: { direction: "column", padding: "26px 24px 20px", gap: 14 },
2443
+ children: [
2444
+ {
2445
+ type: "text",
2446
+ content: "\u8BD5\u7528\u8FD8\u5269 {{ user.trialLeftDays }} \u5929",
2447
+ style: {
2448
+ fontSize: 19,
2449
+ fontWeight: "800",
2450
+ color: "#1f2533",
2451
+ textAlign: "center"
2452
+ }
2453
+ },
2454
+ {
2455
+ type: "text",
2456
+ content: "\u5230\u671F\u540E\u6279\u91CF\u642C\u5BB6\u3001\u81EA\u52A8\u7ECF\u8425\u4EFB\u52A1\u90FD\u4F1A\u505C\u6B62",
2457
+ style: {
2458
+ fontSize: 13,
2459
+ color: "#68727f",
2460
+ textAlign: "center",
2461
+ lineHeight: 1.6
2462
+ }
2463
+ },
2464
+ {
2465
+ type: "flex",
2466
+ style: {
2467
+ justify: "center",
2468
+ align: "center",
2469
+ height: 46,
2470
+ radius: 23,
2471
+ background: "#ff4433",
2472
+ cursor: "pointer"
2473
+ },
2474
+ action: {
2475
+ type: "sequence",
2476
+ actions: [
2477
+ { type: "track", event: "popup_order_click" },
2478
+ { type: "navigate", url: "https://maibaole.example.com/order" }
2479
+ ]
2480
+ },
2481
+ children: [
2482
+ {
2483
+ type: "text",
2484
+ content: "\u7ACB\u5373\u5F00\u901A",
2485
+ style: { fontSize: 15, fontWeight: "700", color: "#ffffff" }
2486
+ }
2487
+ ]
2488
+ },
2489
+ {
2490
+ type: "flex",
2491
+ style: { justify: "space-between", align: "center", marginTop: 2 },
2492
+ children: [
2493
+ // 换屏:把当前层换成能力清单,栈深度不变
2494
+ textBtn(
2495
+ "\u770B\u770B\u80FD\u89E3\u9501\u4EC0\u4E48 \u2192",
2496
+ { type: "open", view: "unlock", mode: "replace" },
2497
+ { color: "#409eff" }
2498
+ ),
2499
+ // 叠加:主弹窗留在后面,上面弹二次确认
2500
+ textBtn("\u4E0D\u518D\u63D0\u9192", {
2501
+ type: "sequence",
2502
+ actions: [
2503
+ { type: "track", event: "popup_never_remind_click" },
2504
+ { type: "open", view: "confirm" }
2505
+ ]
2506
+ })
2507
+ ]
2508
+ }
2509
+ ]
2510
+ }
2511
+ ]
2512
+ },
2513
+ unlock: {
2514
+ type: "popup",
2515
+ stage: {
2516
+ width: 400,
2517
+ height: "auto",
2518
+ layout: "flow",
2519
+ mask: true,
2520
+ maskClosable: false,
2521
+ style: { radius: 14 },
2522
+ // replace 换屏时,被顶掉的那层也会收到 onClose,closeReason 是 'replace'
2523
+ onShow: { type: "track", event: "popup_show", params: { view: "unlock" } },
2524
+ onClose: {
2525
+ type: "track",
2526
+ event: "popup_close",
2527
+ params: { view: "unlock", reason: "{{ closeReason }}" }
2528
+ }
2529
+ },
2530
+ nodes: [
2531
+ {
2532
+ type: "flex",
2533
+ style: { direction: "column", padding: "26px 24px 20px", gap: 12 },
2534
+ children: [
2535
+ {
2536
+ type: "text",
2537
+ content: "\u{1F513} \u4ED8\u8D39\u7248\u80FD\u89E3\u9501",
2538
+ style: {
2539
+ fontSize: 18,
2540
+ fontWeight: "800",
2541
+ color: "#1f2533",
2542
+ textAlign: "center"
2543
+ }
2544
+ },
2545
+ {
2546
+ type: "repeat",
2547
+ bind: "features",
2548
+ style: {
2549
+ direction: "column",
2550
+ background: "#f1faf6",
2551
+ radius: 12,
2552
+ padding: "4px 13px"
2553
+ },
2554
+ template: {
2555
+ type: "flex",
2556
+ style: { align: "flex-start", gap: 10, padding: "9px 0" },
2557
+ children: [
2558
+ {
2559
+ type: "text",
2560
+ content: "\u2713",
2561
+ style: {
2562
+ width: 19,
2563
+ height: 19,
2564
+ radius: "50%",
2565
+ background: "#00a870",
2566
+ color: "#ffffff",
2567
+ fontSize: 12,
2568
+ fontWeight: "900",
2569
+ lineHeight: 19,
2570
+ textAlign: "center"
2571
+ }
2572
+ },
2573
+ {
2574
+ type: "flex",
2575
+ style: { align: "baseline", flex: "1" },
2576
+ children: [
2577
+ {
2578
+ type: "text",
2579
+ content: "{{ item.b }}",
2580
+ style: { fontSize: 12.5, fontWeight: "700", color: "#1f2533" }
2581
+ },
2582
+ {
2583
+ type: "text",
2584
+ content: " \xB7 {{ item.t }}",
2585
+ style: { fontSize: 12.5, color: "#3f4656" }
2586
+ }
2587
+ ]
2588
+ }
2589
+ ]
2590
+ }
2591
+ },
2592
+ // 换回主屏
2593
+ textBtn(
2594
+ "\u2190 \u8FD4\u56DE",
2595
+ { type: "open", view: "main", mode: "replace" },
2596
+ { textAlign: "center", marginTop: 4 }
2597
+ )
2598
+ ]
2599
+ }
2600
+ ]
2601
+ },
2602
+ confirm: {
2603
+ type: "popup",
2604
+ stage: {
2605
+ width: 320,
2606
+ height: "auto",
2607
+ layout: "flow",
2608
+ // 二次确认自己不画遮罩也行,但保留一层浅遮罩能把下面压暗,层次更清楚
2609
+ mask: true,
2610
+ maskClosable: false,
2611
+ style: { radius: 12 }
2612
+ },
2613
+ nodes: [
2614
+ {
2615
+ type: "flex",
2616
+ style: { direction: "column", padding: "24px 22px 18px", gap: 10 },
2617
+ children: [
2618
+ {
2619
+ type: "text",
2620
+ content: "\u786E\u5B9A\u4E0D\u518D\u63D0\u9192\uFF1F",
2621
+ style: {
2622
+ fontSize: 16,
2623
+ fontWeight: "800",
2624
+ color: "#1f2533",
2625
+ textAlign: "center"
2626
+ }
2627
+ },
2628
+ {
2629
+ type: "text",
2630
+ content: "\u5173\u6389\u4E4B\u540E\uFF0C\u5230\u671F\u524D\u4E0D\u4F1A\u518D\u6536\u5230\u7EED\u8D39\u63D0\u9192",
2631
+ style: {
2632
+ fontSize: 12.5,
2633
+ color: "#8a909c",
2634
+ textAlign: "center",
2635
+ lineHeight: 1.6
2636
+ }
2637
+ },
2638
+ {
2639
+ type: "flex",
2640
+ style: { gap: 10, marginTop: 6 },
2641
+ children: [
2642
+ {
2643
+ type: "flex",
2644
+ style: {
2645
+ flex: "1",
2646
+ justify: "center",
2647
+ align: "center",
2648
+ height: 40,
2649
+ radius: 20,
2650
+ borderWidth: 1,
2651
+ borderStyle: "solid",
2652
+ borderColor: "#dcdfe6",
2653
+ cursor: "pointer"
2654
+ },
2655
+ // 只关掉确认框,回到主弹窗
2656
+ action: { type: "close" },
2657
+ children: [
2658
+ {
2659
+ type: "text",
2660
+ content: "\u518D\u60F3\u60F3",
2661
+ style: { fontSize: 14, color: "#606266" }
2662
+ }
2663
+ ]
2664
+ },
2665
+ {
2666
+ type: "flex",
2667
+ style: {
2668
+ flex: "1",
2669
+ justify: "center",
2670
+ align: "center",
2671
+ height: 40,
2672
+ radius: 20,
2673
+ background: ORANGE3,
2674
+ cursor: "pointer"
2675
+ },
2676
+ // 确认后整个关掉,两层一起消失
2677
+ action: {
2678
+ type: "sequence",
2679
+ actions: [
2680
+ { type: "track", event: "popup_never_remind_confirm" },
2681
+ { type: "call", name: "setNeverRemind" },
2682
+ { type: "closeAll" }
2683
+ ]
2684
+ },
2685
+ children: [
2686
+ {
2687
+ type: "text",
2688
+ content: "\u786E\u5B9A",
2689
+ style: { fontSize: 14, fontWeight: "700", color: "#ffffff" }
2690
+ }
2691
+ ]
2692
+ }
2693
+ ]
2694
+ }
2695
+ ]
2696
+ }
2697
+ ]
2698
+ }
2699
+ }
2700
+ };
2701
+
2702
+ // src/docs/examples/tab-theme.ts
2703
+ var plans = [
2704
+ {
2705
+ key: "year",
2706
+ label: "\u5305\u5E74",
2707
+ theme: "#7B3FF2",
2708
+ stageBg: "linear-gradient(160deg, #2b1055 0%, #7597de 100%)",
2709
+ cardBg: "rgba(255,255,255,0.94)",
2710
+ price: "\xA5899",
2711
+ unit: "/\u5E74",
2712
+ tip: "\u6298\u5408\u6BCF\u5929 2.4 \u5143\uFF0C\u6BD4\u5305\u6708\u7701 289 \u5143",
2713
+ // 包年主推「权益格子」,两列铺开
2714
+ mode: "grid",
2715
+ cells: [
2716
+ { title: "\u65E0\u9650\u91C7\u96C6", desc: "\u4E0D\u9650\u6761\u6570" },
2717
+ { title: "\u667A\u80FD\u6539\u56FE", desc: "\u6BCF\u6708 5000 \u5F20" },
2718
+ { title: "\u4E00\u952E\u94FA\u8D27", desc: "\u5168\u5E73\u53F0" },
2719
+ { title: "\u4E13\u5C5E\u5BA2\u670D", desc: "7\xD712 \u5C0F\u65F6" }
2720
+ ]
2721
+ },
2722
+ {
2723
+ key: "month",
2724
+ label: "\u5305\u6708",
2725
+ theme: "#FF6B35",
2726
+ stageBg: "linear-gradient(160deg, #3a1c0c 0%, #ff9a3c 100%)",
2727
+ cardBg: "rgba(255,255,255,0.94)",
2728
+ price: "\xA599",
2729
+ unit: "/\u6708",
2730
+ tip: "\u968F\u65F6\u53EF\u505C\uFF0C\u9002\u5408\u5148\u8BD5\u4E00\u4E2A\u6708",
2731
+ // 包月条目少,改成竖排清单更清楚
2732
+ mode: "list",
2733
+ rows: [
2734
+ { title: "\u91C7\u96C6 3000 \u6761/\u6708", tag: "\u591F\u7528" },
2735
+ { title: "\u6539\u56FE 500 \u5F20/\u6708", tag: "" },
2736
+ { title: "\u4E00\u952E\u94FA\u8D27", tag: "" }
2737
+ ]
2738
+ }
2739
+ ];
2740
+ var tabTheme = {
2741
+ version: 1,
2742
+ type: "popup",
2743
+ meta: { name: "\u5207 tab \u6362\u80A4\u6362\u5E03\u5C40" },
2744
+ data: { plans },
2745
+ state: { tab: 0 },
2746
+ // cur 始终指向当前选中的那一档,下面所有 {{ cur.xxx }} 都随 tab 自动变
2747
+ derived: { cur: { list: "plans", indexBy: "tab" } },
2748
+ stage: {
2749
+ width: 420,
2750
+ height: "auto",
2751
+ layout: "flow",
2752
+ mask: true,
2753
+ maskClosable: true,
2754
+ closeButton: {
2755
+ show: true,
2756
+ position: "top-right",
2757
+ offset: [-12, 12],
2758
+ size: 28,
2759
+ icon: "\u2715",
2760
+ style: { color: "rgba(255,255,255,0.85)", fontSize: 16 }
2761
+ },
2762
+ // 弹窗本体的背景跟着 tab 换
2763
+ style: { radius: 16, background: "{{ cur.stageBg }}", padding: 22 },
2764
+ // 曝光时记下默认停在哪一档,关闭时记下用户最后看的是哪一档、怎么走的
2765
+ onShow: {
2766
+ type: "track",
2767
+ event: "popup_show",
2768
+ params: { popup: "tab_theme", plan: "{{ cur.key }}" }
2769
+ },
2770
+ onClose: {
2771
+ type: "track",
2772
+ event: "popup_close",
2773
+ params: { popup: "tab_theme", plan: "{{ cur.key }}", reason: "{{ closeReason }}" }
2774
+ }
2775
+ },
2776
+ nodes: [
2777
+ {
2778
+ type: "tabs",
2779
+ bind: "plans",
2780
+ labelField: "label",
2781
+ stateKey: "tab",
2782
+ style: { direction: "row", gap: 8 },
2783
+ itemStyle: {
2784
+ padding: "8px 20px",
2785
+ radius: 999,
2786
+ background: "rgba(255,255,255,0.16)",
2787
+ color: "rgba(255,255,255,0.85)",
2788
+ fontSize: 14,
2789
+ cursor: "pointer"
2790
+ },
2791
+ // 选中态的文字色也取当前主题色
2792
+ activeItemStyle: {
2793
+ background: "#ffffff",
2794
+ color: "{{ cur.theme }}",
2795
+ fontWeight: "bold"
2796
+ }
2797
+ },
2798
+ // 价格行:不同字号靠多个 text 节点 + baseline 对齐拼出来,不需要富文本
2799
+ {
2800
+ type: "flex",
2801
+ style: { direction: "row", align: "baseline", gap: 4, marginTop: 18 },
2802
+ children: [
2803
+ {
2804
+ type: "text",
2805
+ content: "{{ cur.price }}",
2806
+ style: { color: "#ffffff", fontSize: 34, fontWeight: "bold" }
2807
+ },
2808
+ {
2809
+ type: "text",
2810
+ content: "{{ cur.unit }}",
2811
+ style: { color: "rgba(255,255,255,0.8)", fontSize: 14 }
2812
+ }
2813
+ ]
2814
+ },
2815
+ {
2816
+ type: "text",
2817
+ content: "{{ cur.tip }}",
2818
+ style: { marginTop: 6, color: "rgba(255,255,255,0.75)", fontSize: 13 }
2819
+ },
2820
+ // ——— 排版分支 A:两列格子(包年) ———
2821
+ {
2822
+ type: "repeat",
2823
+ visibleWhen: "cur.mode == 'grid'",
2824
+ bind: "cur.cells",
2825
+ style: { direction: "row", wrap: true, gap: 10, marginTop: 16 },
2826
+ template: {
2827
+ type: "flex",
2828
+ style: {
2829
+ direction: "column",
2830
+ gap: 4,
2831
+ width: "calc(50% - 5px)",
2832
+ background: "{{ cur.cardBg }}",
2833
+ radius: 10,
2834
+ padding: 12
2835
+ },
2836
+ children: [
2837
+ {
2838
+ type: "text",
2839
+ content: "{{ item.title }}",
2840
+ style: { color: "{{ cur.theme }}", fontSize: 14, fontWeight: "bold" }
2841
+ },
2842
+ {
2843
+ type: "text",
2844
+ content: "{{ item.desc }}",
2845
+ style: { color: "#8a8f99", fontSize: 12 }
2846
+ }
2847
+ ]
2848
+ }
2849
+ },
2850
+ // ——— 排版分支 B:竖排清单(包月) ———
2851
+ {
2852
+ type: "repeat",
2853
+ visibleWhen: "cur.mode == 'list'",
2854
+ bind: "cur.rows",
2855
+ style: { direction: "column", gap: 8, marginTop: 16 },
2856
+ template: {
2857
+ type: "flex",
2858
+ style: {
2859
+ direction: "row",
2860
+ align: "center",
2861
+ gap: 8,
2862
+ background: "{{ cur.cardBg }}",
2863
+ radius: 8,
2864
+ padding: "10px 12px"
2865
+ },
2866
+ children: [
2867
+ {
2868
+ type: "text",
2869
+ content: "{{ item.title }}",
2870
+ style: { flex: "1", color: "#2c3038", fontSize: 14 }
2871
+ },
2872
+ {
2873
+ type: "text",
2874
+ content: "{{ item.tag }}",
2875
+ visibleWhen: "item.tag != ''",
2876
+ style: {
2877
+ alignSelf: "center",
2878
+ padding: "2px 8px",
2879
+ radius: 999,
2880
+ background: "{{ cur.theme }}",
2881
+ color: "#ffffff",
2882
+ fontSize: 11
2883
+ }
2884
+ }
2885
+ ]
2886
+ }
2887
+ },
2888
+ {
2889
+ type: "button",
2890
+ text: "\u7ACB\u5373\u5F00\u901A {{ cur.label }}",
2891
+ style: {
2892
+ marginTop: 18,
2893
+ width: "100%",
2894
+ height: 46,
2895
+ radius: 10,
2896
+ background: "{{ cur.theme }}",
2897
+ color: "#ffffff",
2898
+ fontSize: 16,
2899
+ fontWeight: "bold",
2900
+ cursor: "pointer"
2901
+ },
2902
+ action: {
2903
+ type: "sequence",
2904
+ actions: [
2905
+ { type: "track", event: "popup_click", params: { area: "cta" } },
2906
+ {
2907
+ type: "navigate",
2908
+ url: "https://maibaole.example.com/renew",
2909
+ target: "_blank"
2910
+ }
2911
+ ]
2912
+ }
2913
+ }
2914
+ ]
2915
+ };
2916
+ var tab_theme_default = tabTheme;
2917
+
2918
+ // src/docs/examples/image-banner.ts
2919
+ var RATIO = "1200 / 300";
2920
+ var imageBanner = {
2921
+ version: 1,
2922
+ type: "banner",
2923
+ meta: { name: "\u6574\u56FE Banner\uFF08\u5BBD\u5EA6\u81EA\u9002\u5E94 + \u70ED\u533A\uFF09" },
2924
+ stage: {
2925
+ width: "100%",
2926
+ height: "auto",
2927
+ layout: "flow",
2928
+ style: { radius: 8, maxWidth: 1200, overflow: "hidden" },
2929
+ onShow: { type: "track", event: "banner_show", params: { banner: "autumn" } },
2930
+ onClose: {
2931
+ type: "track",
2932
+ event: "banner_dismiss",
2933
+ params: { banner: "autumn", reason: "{{ closeReason }}" }
2934
+ }
2935
+ },
2936
+ nodes: [
2937
+ {
2938
+ // 热区的定位容器:宽度铺满,高度由 aspectRatio 算
2939
+ type: "box",
2940
+ style: { width: "100%", aspectRatio: RATIO },
2941
+ children: [
2942
+ {
2943
+ type: "image",
2944
+ rect: [0, 0, "100%", "100%"],
2945
+ src: "https://picsum.photos/id/1039/1200/300",
2946
+ style: { objectFit: "cover" }
2947
+ },
2948
+ {
2949
+ // 左半边:主标题区,点了看活动详情
2950
+ type: "box",
2951
+ rect: ["4%", "20%", "40%", "46%"],
2952
+ style: { radius: 8, background: "rgba(255,68,51,0.16)", cursor: "pointer" },
2953
+ action: {
2954
+ type: "sequence",
2955
+ actions: [
2956
+ { type: "track", event: "banner_click", params: { area: "title" } },
2957
+ {
2958
+ type: "navigate",
2959
+ url: "https://maibaole.example.com/autumn",
2960
+ target: "_blank"
2961
+ }
2962
+ ]
2963
+ }
2964
+ },
2965
+ {
2966
+ // 右侧按钮:直接去下单
2967
+ type: "box",
2968
+ rect: ["70%", "58%", "22%", "24%"],
2969
+ style: { radius: 999, background: "rgba(255,68,51,0.16)", cursor: "pointer" },
2970
+ action: {
2971
+ type: "sequence",
2972
+ actions: [
2973
+ { type: "track", event: "banner_click", params: { area: "cta" } },
2974
+ {
2975
+ type: "navigate",
2976
+ url: "https://maibaole.example.com/order",
2977
+ target: "_blank"
2978
+ }
2979
+ ]
2980
+ }
2981
+ },
2982
+ {
2983
+ // 关闭放在图上角落,同样用百分比,缩放时不会跑位
2984
+ type: "text",
2985
+ content: "\u2715",
2986
+ rect: ["95%", "6%", 22, 22],
2987
+ style: {
2988
+ textAlign: "center",
2989
+ lineHeight: 22,
2990
+ radius: 11,
2991
+ background: "rgba(0,0,0,0.35)",
2992
+ color: "#fff",
2993
+ fontSize: 13,
2994
+ cursor: "pointer"
2995
+ },
2996
+ action: {
2997
+ type: "sequence",
2998
+ actions: [
2999
+ { type: "call", name: "setNeverRemind" },
3000
+ { type: "close", reason: "user-dismiss" }
3001
+ ]
3002
+ }
3003
+ }
3004
+ ]
3005
+ }
3006
+ ]
3007
+ };
3008
+ var image_banner_default = imageBanner;
3009
+
3010
+ // src/docs/examples/index.ts
3011
+ var HOTSPOT_BG = "rgba(255,68,51,0.16)";
3012
+ var imageHotspot = {
3013
+ version: 1,
3014
+ type: "popup",
3015
+ meta: { name: "\u6574\u56FE\u70ED\u533A\u5F39\u7A97" },
3016
+ stage: {
3017
+ // 窄屏时跟着父级收,最宽不超过 420
3018
+ width: "calc(100% - 48px)",
3019
+ height: 520,
3020
+ mask: true,
3021
+ maskClosable: true,
3022
+ // 关闭按钮放到弹窗正下方外侧:offset 的 y 写负值即可,不会被圆角裁掉
3023
+ closeButton: {
3024
+ show: true,
3025
+ position: "bottom-center",
3026
+ offset: [0, -46],
3027
+ size: 34,
3028
+ // 不写 icon / image,用内置的矢量 × 图标(跟着 style.color 走)
3029
+ style: {
3030
+ background: "rgba(0,0,0,0.4)",
3031
+ color: "#ffffff",
3032
+ fontSize: 18,
3033
+ borderWidth: 1,
3034
+ borderStyle: "solid",
3035
+ borderColor: "rgba(255,255,255,0.55)"
3036
+ }
3037
+ },
3038
+ style: { radius: 12, maxWidth: 420 },
3039
+ // 曝光埋点:数据就绪、弹窗真正展示时触发一次
3040
+ onShow: { type: "track", event: "popup_show", params: { popup: "image_hotspot" } },
3041
+ // 关闭埋点:点 X、点遮罩、点「不再提醒」都会触发,用 closeReason 区分
3042
+ onClose: {
3043
+ type: "track",
3044
+ event: "popup_close",
3045
+ params: { popup: "image_hotspot", reason: "{{ closeReason }}" }
3046
+ }
3047
+ },
3048
+ nodes: [
3049
+ {
3050
+ // 背景图用百分比铺满舞台,舞台宽度变了也不用改配置
3051
+ id: "bg",
3052
+ type: "image",
3053
+ rect: [0, 0, "100%", "100%"],
3054
+ src: "https://picsum.photos/id/1015/420/520"
3055
+ },
3056
+ // 热区想放几个放几个,位置各自由 rect 决定,互不影响。
3057
+ // 热区 = 一个透明的 box + action,调试时把 background 的透明度调高就能看见框。
3058
+ {
3059
+ id: "hotspot-rule",
3060
+ type: "box",
3061
+ // 右上角「活动规则」
3062
+ rect: ["62%", 24, "30%", 30],
3063
+ style: { radius: 15, background: HOTSPOT_BG, cursor: "pointer" },
3064
+ action: {
3065
+ type: "sequence",
3066
+ actions: [
3067
+ { type: "track", event: "popup_click", params: { area: "rule" } },
3068
+ {
3069
+ type: "navigate",
3070
+ url: "https://maibaole.example.com/rule",
3071
+ target: "_blank"
3072
+ }
3073
+ ]
3074
+ }
3075
+ },
3076
+ {
3077
+ id: "hotspot-plan-a",
3078
+ type: "box",
3079
+ // 中部左半:套餐 A
3080
+ rect: ["8%", 300, "40%", 96],
3081
+ style: { radius: 10, background: HOTSPOT_BG, cursor: "pointer" },
3082
+ action: {
3083
+ type: "sequence",
3084
+ actions: [
3085
+ { type: "track", event: "popup_click", params: { area: "plan_a" } },
3086
+ {
3087
+ type: "navigate",
3088
+ url: "https://maibaole.example.com/renew?plan=a",
3089
+ target: "_blank"
3090
+ }
3091
+ ]
3092
+ }
3093
+ },
3094
+ {
3095
+ id: "hotspot-plan-b",
3096
+ type: "box",
3097
+ // 中部右半:套餐 B,和 A 并排但各自独立
3098
+ rect: ["52%", 300, "40%", 96],
3099
+ style: { radius: 10, background: HOTSPOT_BG, cursor: "pointer" },
3100
+ action: {
3101
+ type: "sequence",
3102
+ actions: [
3103
+ { type: "track", event: "popup_click", params: { area: "plan_b" } },
3104
+ {
3105
+ type: "navigate",
3106
+ url: "https://maibaole.example.com/renew?plan=b",
3107
+ target: "_blank"
3108
+ }
3109
+ ]
3110
+ }
3111
+ },
3112
+ {
3113
+ id: "hotspot-cta",
3114
+ type: "box",
3115
+ // 底部主按钮
3116
+ rect: ["12%", 420, "76%", 48],
3117
+ style: { radius: 24, background: HOTSPOT_BG, cursor: "pointer" },
3118
+ action: {
3119
+ type: "sequence",
3120
+ actions: [
3121
+ { type: "track", event: "popup_click", params: { area: "cta" } },
3122
+ {
3123
+ type: "navigate",
3124
+ url: "https://maibaole.example.com/renew",
3125
+ target: "_blank"
3126
+ }
3127
+ ]
3128
+ }
3129
+ },
3130
+ {
3131
+ id: "hotspot-never",
3132
+ type: "box",
3133
+ // 最底部「不再提醒」,动作是关弹窗而不是跳转
3134
+ rect: ["30%", 478, "40%", 26],
3135
+ style: { radius: 13, background: HOTSPOT_BG, cursor: "pointer" },
3136
+ action: {
3137
+ type: "sequence",
3138
+ actions: [
3139
+ { type: "call", name: "setNeverRemind" },
3140
+ { type: "close", reason: "never-remind" }
3141
+ ]
3142
+ }
3143
+ }
3144
+ ]
3145
+ };
3146
+ var noticeBar = {
3147
+ version: 1,
3148
+ type: "notice",
3149
+ meta: { name: "\u6587\u5B57\u516C\u544A\u6761\uFF08\u94FA\u6EE1\u7236\u5BBD\uFF09" },
3150
+ stage: {
3151
+ width: "100%",
3152
+ height: "auto",
3153
+ layout: "flow",
3154
+ style: { radius: 6, background: "#fff8e6", maxWidth: 1200 },
3155
+ onShow: { type: "track", event: "notice_show", params: { notice: "guide" } },
3156
+ onClose: {
3157
+ type: "track",
3158
+ event: "notice_dismiss",
3159
+ params: { notice: "guide", reason: "{{ closeReason }}" }
3160
+ }
3161
+ },
3162
+ nodes: [
3163
+ {
3164
+ type: "flex",
3165
+ style: { align: "center", gap: 10, padding: "10px 14px" },
3166
+ children: [
3167
+ {
3168
+ // 公告条里的图片就是一个普通 image 节点,不用 rect,靠 style 定尺寸。
3169
+ // 换成 emoji、图标、活动小图都行。
3170
+ type: "image",
3171
+ src: "https://picsum.photos/id/1062/64/64",
3172
+ style: {
3173
+ alignSelf: "center",
3174
+ width: 22,
3175
+ height: 22,
3176
+ radius: 4,
3177
+ objectFit: "cover"
3178
+ }
3179
+ },
3180
+ {
3181
+ // flex: 1 吃掉剩余宽度,文字多了自动换行、公告条跟着变高
3182
+ type: "text",
3183
+ content: "{{ user.shopName }}\uFF0C\u5546\u54C1\u6279\u91CF\u7BA1\u7406\u529F\u80FD\u5DF2\u5347\u7EA7\uFF0C\u70B9\u51FB\u67E5\u770B\u4F7F\u7528\u6307\u5357",
3184
+ style: { flex: "1", fontSize: 14, color: "#8a6212", lineHeight: 1.5 }
3185
+ },
3186
+ {
3187
+ type: "button",
3188
+ text: "\u67E5\u770B",
3189
+ style: {
3190
+ width: 64,
3191
+ height: 26,
3192
+ radius: 13,
3193
+ background: "#f5a623",
3194
+ color: "#fff",
3195
+ fontSize: 12
3196
+ },
3197
+ action: { type: "navigate", url: "https://maibaole.example.com/guide" }
3198
+ },
3199
+ {
3200
+ // 公告条的关闭:排在行内当一个普通节点,比用 stage.closeButton 更自然。
3201
+ // close 只是通知宿主「用户关掉了」,关掉之后要不要再出、隔多久再出,
3202
+ // 由宿主决定(一般配合 call 记一条「今日不再显示」)。
3203
+ type: "text",
3204
+ content: "\u2715",
3205
+ style: {
3206
+ alignSelf: "center",
3207
+ width: 22,
3208
+ height: 22,
3209
+ textAlign: "center",
3210
+ lineHeight: 22,
3211
+ radius: 11,
3212
+ color: "#b08a3e",
3213
+ fontSize: 13,
3214
+ cursor: "pointer"
3215
+ },
3216
+ action: {
3217
+ type: "sequence",
3218
+ actions: [
3219
+ { type: "track", event: "notice_close", params: { notice: "guide" } },
3220
+ { type: "call", name: "setNeverRemind" },
3221
+ { type: "close", reason: "user-dismiss" }
3222
+ ]
3223
+ }
3224
+ }
3225
+ ]
3226
+ }
3227
+ ]
3228
+ };
3229
+ var examples = [
3230
+ { label: "\u2460 \u6574\u56FE\u70ED\u533A\u5F39\u7A97", value: "imageHotspot", dsl: imageHotspot },
3231
+ { label: "\u2461 \u6587\u5B57\u516C\u544A\u6761", value: "noticeBar", dsl: noticeBar },
3232
+ {
3233
+ label: "\u2462 \u590D\u523B\u8FD0\u8425 demo \xB7 \u5230\u671F\u4E13\u4EAB\uFF08\u540E\u7AEF\u6570\u636E\u6E90\uFF09",
3234
+ value: "renewExpire",
3235
+ dsl: renew_expire_default
3236
+ },
3237
+ { label: "\u2463 \u590D\u523B\u8FD0\u8425 demo \xB7 \u5269 1 \u5929\uFF08\u5398\u79D2\u5012\u8BA1\u65F6\uFF09", value: "lastDay", dsl: last_day_default },
3238
+ { label: "\u2464 \u591A\u89C6\u56FE \xB7 \u516C\u544A\u6761\u70B9\u51FB\u5F39\u51FA\u5F39\u7A97", value: "noticeToPopup", dsl: noticeToPopup },
3239
+ {
3240
+ label: "\u2465 \u591A\u89C6\u56FE \xB7 \u4E8C\u6B21\u786E\u8BA4 + \u80FD\u529B\u6E05\u5355\u6362\u5C4F",
3241
+ value: "confirmAndSwitch",
3242
+ dsl: confirmAndSwitch
3243
+ },
3244
+ { label: "\u2466 \u5207 tab \u6362\u80A4\u6362\u5E03\u5C40", value: "tabTheme", dsl: tab_theme_default },
3245
+ { label: "\u2467 \u6574\u56FE Banner\uFF08\u5BBD\u5EA6\u81EA\u9002\u5E94 + \u70ED\u533A\uFF09", value: "imageBanner", dsl: image_banner_default }
3246
+ ];
3247
+ var examples_default = examples;
3248
+
3249
+ // src/docs/to-markdown.ts
3250
+ var cell = (text) => String(text).replace(/\|/g, "\\|").replace(/\n/g, " ");
3251
+ var NOTE_LABEL = {
3252
+ danger: "\u6CE8\u610F",
3253
+ warn: "\u63D0\u9192",
3254
+ info: "\u8BF4\u660E"
3255
+ };
3256
+ function blockToMarkdown(block) {
3257
+ switch (block.t) {
3258
+ case "h3":
3259
+ return `### ${block.text}`;
3260
+ case "p":
3261
+ return block.text;
3262
+ case "list":
3263
+ return block.items.map((item) => `- ${item}`).join("\n");
3264
+ case "code":
3265
+ return "```jsonc\n" + block.code + "\n```";
3266
+ case "note":
3267
+ return `> **${NOTE_LABEL[block.tone || "info"]}**\uFF1A${block.text}`;
3268
+ case "table": {
3269
+ const head = `| ${block.head.map(cell).join(" | ")} |`;
3270
+ const split = `| ${block.head.map(() => "---").join(" | ")} |`;
3271
+ const rows = block.rows.map((row) => `| ${row.map(cell).join(" | ")} |`);
3272
+ return [head, split].concat(rows).join("\n");
3273
+ }
3274
+ default:
3275
+ return "";
3276
+ }
3277
+ }
3278
+ function toMarkdown(sections10, meta2) {
3279
+ const lines = [
3280
+ "# \u8425\u9500\u5185\u5BB9 DSL \xB7 \u5F00\u53D1\u6587\u6863",
3281
+ "",
3282
+ `- \u66F4\u65B0\u65E5\u671F\uFF1A**${meta2.updatedAt}**`,
3283
+ `- \u5BF9\u5E94 DSL \`version\`\uFF1A**${meta2.dslVersion}**`,
3284
+ "",
3285
+ "> \u672C\u6587\u4EF6\u7531\u300C\u8425\u9500DSL\u8C03\u8BD5\u53F0 \u2192 \u5F00\u53D1\u6587\u6863\u300D\u5BFC\u51FA\u3002DSL \u6709\u6539\u52A8\u65F6\u8BF7\u91CD\u65B0\u5BFC\u51FA\uFF0C\u4E0D\u8981\u624B\u5DE5\u4FEE\u6539\u672C\u6587\u4EF6\u3002",
3286
+ ""
3287
+ ];
3288
+ sections10.forEach((section) => {
3289
+ lines.push(`## ${section.title}`, "");
3290
+ section.blocks.forEach((block) => {
3291
+ const text = blockToMarkdown(block);
3292
+ if (text) lines.push(text, "");
3293
+ });
3294
+ });
3295
+ lines.push("## \u9644\u5F55\uFF1A\u6587\u6863\u53D8\u66F4\u8BB0\u5F55", "");
3296
+ meta2.changelog.forEach((entry) => {
3297
+ lines.push(`### ${entry.date}`, "");
3298
+ entry.items.forEach((item) => lines.push(`- ${item}`));
3299
+ lines.push("");
3300
+ });
3301
+ return lines.join("\n");
3302
+ }
3303
+
3304
+ // src/docs/ai-prompt/basics.ts
3305
+ function roleSection() {
3306
+ return `# \u89D2\u8272
3307
+
3308
+ \u4F60\u662F\u300C\u9EA6\u7206\u4E86\u300D\u8425\u9500\u5F39\u7A97\u914D\u7F6E\u52A9\u624B\u3002\u7528\u6237\u7528\u4E2D\u6587\u63CF\u8FF0\u60F3\u8981\u7684\u5F39\u7A97 / Banner / \u516C\u544A\u6761\uFF0C
3309
+ \u4F60\u8F93\u51FA\u4E00\u6BB5\u7B26\u5408\u4E0B\u9762\u89C4\u8303\u7684 JSON \u914D\u7F6E\u3002
3310
+
3311
+ \u63D0\u793A\u8BCD\u66F4\u65B0\u65E5\u671F\uFF1A${meta_default.updatedAt} \xB7 DSL version\uFF1A${DSL_VERSION}
3312
+
3313
+ # \u8F93\u51FA\u8981\u6C42\uFF08\u5FC5\u987B\u9075\u5B88\uFF09
3314
+
3315
+ 1. \u53EA\u8F93\u51FA**\u4E00\u4E2A** JSON \u4EE3\u7801\u5757\uFF0C\u524D\u540E\u4E0D\u8981\u4EFB\u4F55\u89E3\u91CA\u3001\u5BD2\u6684\u3001\u603B\u7ED3\u3002
3316
+ 2. \u7528\u6237\u9700\u6C42\u4E0D\u6E05\u695A\u65F6\uFF0C\u5148\u63D0\u95EE\uFF0C\u4E0D\u8981\u778E\u731C\u5C3A\u5BF8\u548C\u6587\u6848\u3002
3317
+ 3. \`version\` \u56FA\u5B9A\u4E3A ${DSL_VERSION}\u3002
3318
+ 4. **\u7EDD\u5BF9\u7981\u6B62**\u8F93\u51FA\u4EFB\u4F55 JavaScript \u4EE3\u7801\u3001\u51FD\u6570\u8C03\u7528\u3001\`javascript:\` \u94FE\u63A5\u3001\`<script>\`\u3001\u4E8B\u4EF6\u5904\u7406\u5668\u3002
3319
+ \u8FD9\u5957\u914D\u7F6E\u662F\u7EAF\u6570\u636E\uFF0C\u5199\u8FDB\u53BB\u4E5F\u4E0D\u4F1A\u6267\u884C\uFF0C\u53EA\u4F1A\u88AB\u62E6\u4E0B\u3002
3320
+ 5. \`style\` \u53EA\u80FD\u7528\u767D\u540D\u5355\u91CC\u7684\u5C5E\u6027\uFF0C\u5199\u522B\u7684\u4F1A\u88AB\u4E22\u5F03\u3002
3321
+ 6. \u57CB\u70B9\u4E8B\u4EF6\u540D\u5FC5\u987B\u7B26\u5408\u547D\u540D\u89C4\u8303\uFF08\u89C1\u300C\u52A8\u4F5C\u300D\u4E00\u8282\uFF09\uFF0C\u5199\u9519\u4F1A\u5728\u4FDD\u5B58\u65F6\u76F4\u63A5\u62A5\u9519\u3002
3322
+ 7. \u56FE\u7247\u548C\u8DF3\u8F6C\u94FE\u63A5\u5982\u679C\u7528\u6237\u6CA1\u7ED9\uFF0C\u7528 \`https://\` \u5F00\u5934\u7684\u5360\u4F4D\u5730\u5740\uFF0C\u5E76\u5728\u4EE3\u7801\u5757\u4E4B\u540E\u5355\u72EC\u63D0\u9192\u7528\u6237\u66FF\u6362\u3002`;
3323
+ }
3324
+ function structureSection() {
3325
+ return `# \u9876\u5C42\u7ED3\u6784
3326
+
3327
+ \`\`\`jsonc
3328
+ {
3329
+ "version": ${DSL_VERSION},
3330
+ "type": "popup", // popup \u5F39\u7A97 | banner | notice \u516C\u544A\u6761
3331
+ "meta": { "name": "\u5907\u6CE8" },
3332
+ "stage": { ... }, // \u821E\u53F0\uFF1A\u5C3A\u5BF8\u3001\u906E\u7F69\u3001\u5173\u95ED\u6309\u94AE
3333
+ "data": { ... }, // \u6570\u636E\uFF08\u53EF\u9009\uFF09
3334
+ "state": { ... }, // \u5C40\u90E8\u72B6\u6001\uFF0C\u5982\u5F53\u524D\u9009\u4E2D\u7B2C\u51E0\u4E2A\uFF08\u53EF\u9009\uFF09
3335
+ "derived": { ... }, // \u7531 data + state \u63A8\u5BFC\u7684\u522B\u540D\uFF08\u53EF\u9009\uFF09
3336
+ "nodes": [ ... ] // \u8282\u70B9\u6811
3337
+ }
3338
+ \`\`\`
3339
+
3340
+ # stage
3341
+
3342
+ \`\`\`jsonc
3343
+ "stage": {
3344
+ "width": 520, // \u6570\u5B57=px\uFF0C\u4E5F\u53EF "100%" / "calc(100% - 48px)"
3345
+ "height": "auto", // \u6570\u5B57=px\uFF0C\u6216 "auto"
3346
+ "layout": "flow", // "absolute" \u6216 "flow"\uFF0C\u89C1\u4E0B\u9762\u300C\u5E03\u5C40\u300D
3347
+ "mask": true,
3348
+ "maskClosable": false,
3349
+ "closeButton": {
3350
+ "position": "top-right", // ${CLOSE_POSITIONS.join(" | ")}
3351
+ "offset": [12, 12], // [x, y]\uFF1B\u5199\u8D1F\u503C = \u6309\u94AE\u8DD1\u5230\u5F39\u7A97\u5916\u9762
3352
+ "size": 26,
3353
+ // icon / image \u90FD\u4E0D\u5199\u65F6\uFF0C\u753B\u7684\u662F\u5185\u7F6E\u7684\u77E2\u91CF \xD7 \u56FE\u6807 \u2014\u2014 \u9ED8\u8BA4\u5C31\u662F\u5BF9\u7684\uFF0C\u4E0D\u7528\u914D
3354
+ "style": { "background": "rgba(0,0,0,0.35)", "color": "#fff" }
3355
+ },
3356
+ "style": { "radius": 18, "maxWidth": 420 }
3357
+ }
3358
+ \`\`\`
3359
+
3360
+ **\u5173\u95ED\u6309\u94AE\u7684\u56FE\u6807\u4E0D\u8981\u778E\u914D\u3002** \u9ED8\u8BA4\u662F\u5185\u7F6E\u77E2\u91CF\u56FE\u6807\uFF08\u4E24\u6761\u4EA4\u53C9\u7EBF\uFF0C\u5C45\u4E2D\u5BF9\u9F50\u5DF2\u7ECF\u8C03\u597D\uFF09\uFF0C
3361
+ \u7528\u6237\u6CA1\u63D0\u300C\u6362\u56FE\u6807\u300D\u5C31**\u4E0D\u8981\u5199 \`icon\`**\u2014\u2014\u5199\u6210 \`"icon": "\xD7"\` \u4F1A\u9000\u56DE\u6587\u672C\u5B57\u7B26\u6E32\u67D3\uFF0C
3362
+ \u90A3\u4E2A\u5B57\u5F62\u672C\u8EAB\u504F\u4E0A\u504F\u5C0F\uFF0C\u770B\u7740\u5C31\u662F\u6CA1\u5BF9\u9F50\u3002\u786E\u5B9E\u8981\u6362\u65F6\uFF1A
3363
+ \`"icon": "\u2715"\` \u6362\u6210\u522B\u7684\u6587\u672C\u5B57\u7B26 / emoji\uFF0C\`"image": "https://..."\` \u6362\u6210\u56FE\u7247\u3002
3364
+ \u4E09\u8005\u4F18\u5148\u7EA7\uFF1A\`image\` > \`icon\` > \u5185\u7F6E\u77E2\u91CF\u56FE\u6807\u3002`;
3365
+ }
3366
+ function layoutSection() {
3367
+ return `# \u5E03\u5C40\uFF08\u6700\u5BB9\u6613\u9519\uFF0C\u52A1\u5FC5\u770B\u61C2\uFF09
3368
+
3369
+ \u53EA\u6709\u4E24\u79CD\u6392\u5E03\u65B9\u5F0F\uFF1A
3370
+
3371
+ | \u65B9\u5F0F | \u51FA\u73B0\u5728\u54EA | \u5B50\u8282\u70B9\u600E\u4E48\u5B9A\u4F4D |
3372
+ | --- | --- | --- |
3373
+ | \u7EDD\u5BF9\u5B9A\u4F4D | \`box\` \u7684 children\uFF1B\`stage.layout: "absolute"\` \u65F6 stage \u7684\u76F4\u63A5\u5B50\u8282\u70B9 | **\u5FC5\u987B**\u5199 \`rect: [x, y, w, h]\` |
3374
+ | \u6D41\u5F0F | \`flex\` / \`repeat\` / \`countdown\` \u7684 children\uFF1B\`stage.layout: "flow"\` \u65F6 stage \u7684\u76F4\u63A5\u5B50\u8282\u70B9 | \`rect\` \u65E0\u6548\uFF0C\u7528 \`style\` \u7684 width/height/flex/padding/gap |
3375
+
3376
+ \u9009\u62E9\u89C4\u5219\uFF1A
3377
+
3378
+ - \u4E0A\u4E0B\u51E0\u4E2A\u533A\u5757\u4F9D\u6B21\u6392\uFF08**\u7EDD\u5927\u591A\u6570\u771F\u5B9E\u5F39\u7A97**\uFF09\u2192 \`layout: "flow"\` + \`height: "auto"\`\uFF0C\u6BCF\u4E2A\u533A\u5757\u662F\u4E00\u4E2A \`flex\` \u8282\u70B9
3379
+ - \u6574\u5F20\u8BBE\u8BA1\u56FE + \u51E0\u4E2A\u70ED\u533A \u2192 \`layout: "absolute"\` + \`height\` \u7ED9\u5177\u4F53\u6570\u503C
3380
+ - \u516C\u544A\u6761 / Banner \u2192 \`layout: "flow"\` + \`width: "100%"\` + \`height: "auto"\`
3381
+
3382
+ **\`height: "auto"\` \u5FC5\u987B\u914D \`layout: "flow"\`**\uFF0C\u5426\u5219\u9AD8\u5EA6\u4F1A\u584C\u6210 0\u3002
3383
+
3384
+ ## \u6574\u56FE Banner + \u70ED\u533A\uFF1A\u5BB9\u5668\u5FC5\u987B\u5199 aspectRatio
3385
+
3386
+ Banner \u5BBD\u5EA6\u662F\u767E\u5206\u6BD4\u3001\u9AD8\u5EA6\u5F97\u6309\u56FE\u7247\u6BD4\u4F8B\u7B97\u3002\u70ED\u533A\u5BB9\u5668 \`box\` \u7684\u5B50\u8282\u70B9\u662F\u7EDD\u5BF9\u5B9A\u4F4D\u7684\uFF0C\u6491\u4E0D\u8D77 \`box\` \u7684\u9AD8\u5EA6\u2014\u2014\`box\` \u9AD8\u5EA6\u662F 0\uFF0C\u70ED\u533A\u7684\u767E\u5206\u6BD4 \`rect\` \u5168\u7B97\u6210 0\uFF0C\u6574\u7247\u70ED\u533A\u5931\u6548\u3002**\u4E0D\u8981\u5199\u6B7B height**\uFF0C\u90A3\u6837\u53EA\u5728\u67D0\u4E00\u4E2A\u5C4F\u5E55\u5BBD\u5EA6\u4E0B\u5BF9\u5F97\u4E0A\uFF1A
3387
+
3388
+ \`\`\`jsonc
3389
+ // \u8BBE\u8BA1\u7A3F 1200 \xD7 300
3390
+ { "type": "box",
3391
+ "style": { "width": "100%", "aspectRatio": "1200 / 300" },
3392
+ "children": [
3393
+ { "type": "image", "rect": [0, 0, "100%", "100%"], "src": "..." },
3394
+ { "type": "box", "rect": ["70%", "58%", "22%", "24%"], "action": {...} }
3395
+ ] }
3396
+ \`\`\`
3397
+
3398
+ \u56FE\u7247\u4E0D\u662F\u5F39\u7A97\u4E13\u5C5E\uFF1A\u516C\u544A\u6761\u91CC\u653E\u5C0F\u56FE\u6807\uFF08\`image\` \u8282\u70B9 + \`style\` \u5B9A\u5BBD\u9AD8\uFF0C\u4E0D\u7528 \`rect\`\uFF09\u3001Banner \u6574\u56FE\u6253\u5E95\uFF0C\u5199\u6CD5\u90FD\u4E00\u6837\u3002`;
3399
+ }
3400
+
3401
+ // src/docs/ai-prompt/checklist.ts
3402
+ function checklistSection() {
3403
+ return `# \u8F93\u51FA\u524D\u81EA\u68C0
3404
+
3405
+ - [ ] \`version\` \u662F ${DSL_VERSION}
3406
+ - [ ] \`stage.height\` \u662F \`"auto"\` \u7684\u8BDD\uFF0C\`stage.layout\` \u5FC5\u987B\u662F \`"flow"\`
3407
+ - [ ] \u7EDD\u5BF9\u5B9A\u4F4D\u5BB9\u5668\uFF08\`box\`\u3001\u6216 \`layout: "absolute"\` \u7684 stage\uFF09\u91CC\u6BCF\u4E2A\u5B50\u8282\u70B9\u90FD\u6709 \`rect\`
3408
+ - [ ] \u6D41\u5F0F\u5BB9\u5668\u91CC\u7684\u5B50\u8282\u70B9\u6CA1\u6709\u591A\u4F59\u7684 \`rect\`
3409
+ - [ ] \u6240\u6709 \`style\` \u7684\u5C5E\u6027\u540D\u90FD\u5728\u767D\u540D\u5355\u91CC
3410
+ - [ ] \u6CA1\u6709\u4EFB\u4F55 JS \u4EE3\u7801\u3001\`javascript:\` \u94FE\u63A5\u3001\u51FD\u6570\u8C03\u7528
3411
+ - [ ] \`derived.list\` \u6307\u5411\u7684\u5B57\u6BB5\u5728 \`data\` \u91CC\u771F\u5B9E\u5B58\u5728\uFF0C\`derived.indexBy\` \u5728 \`state\` \u91CC\u5B58\u5728
3412
+ - [ ] \u7528\u4E86 \`views\` \u7684\u8BDD\uFF1A\`entry\` \u5B58\u5728\u4E8E \`views\`\uFF0C\u9876\u5C42\u6CA1\u6709\u6B8B\u7559 \`stage\`/\`nodes\`\uFF0C\u6240\u6709 \`open\` \u7684 \`view\` \u90FD\u80FD\u5BF9\u4E0A
3413
+ - [ ] \`repeat.bind\` \u6307\u5411\u7684\u662F\u6570\u7EC4
3414
+ - [ ] \u6BCF\u4E2A\u53EF\u70B9\u51FB\u5143\u7D20\u90FD\u6709 \`action\`\uFF0C\u4E14\u5E26 \`track\` \u57CB\u70B9
3415
+ - [ ] **\u9010\u4E2A\u6838\u5BF9\u6BCF\u4E00\u4E2A \`track\` \u7684 \`event\`**\uFF1A\u5339\u914D \`${String(TRACK_EVENT_PATTERN.source)}\`\uFF0C
3416
+ \u5373\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934 + \u53EA\u542B\u5C0F\u5199\u5B57\u6BCD/\u6570\u5B57/\u4E0B\u5212\u7EBF + \u957F\u5EA6 3~64\uFF0C\u63A8\u8350 \`\u5751\u4F4D_\u4E1A\u52A1_\u52A8\u4F5C\`\uFF08\u5982 \`banner_renew_click\`\uFF09\u3002
3417
+ \u6709\u4E00\u4E2A\u4E0D\u5408\u89C4\uFF0C\u6574\u4EFD\u914D\u7F6E\u5C31\u5B58\u4E0D\u4E0A
3418
+ - [ ] \u6BCF\u4E2A\u89C6\u56FE\u7684 \`stage\` \u90FD\u6709 \`onShow\` \u66DD\u5149\u57CB\u70B9\u548C \`onClose\` \u5173\u95ED\u57CB\u70B9\uFF0C\`onClose\` \u7684 params \u91CC\u5E26\u4E0A \`"reason": "{{ closeReason }}"\`
3419
+ - [ ] \u5173\u95ED\u6309\u94AE\u6CA1\u6709\u591A\u4F59\u7684 \`icon\`\uFF08\u9ED8\u8BA4\u7684\u5185\u7F6E\u77E2\u91CF\u56FE\u6807\u5C31\u662F\u5BF9\u7684\uFF09
3420
+ - [ ] \u8F93\u51FA\u7684\u662F\u5408\u6CD5 JSON\uFF08\u6CA1\u6709\u591A\u4F59\u9017\u53F7\u3001\u6CA1\u6709\u6CE8\u91CA\uFF09`;
3421
+ }
3422
+ function requirementSection() {
3423
+ return `# \u7528\u6237\u9700\u6C42
3424
+
3425
+ \u628A\u4F60\u7684\u9700\u6C42\u5199\u5728\u4E0B\u9762\uFF0C\u8D8A\u5177\u4F53\u8D8A\u597D\u3002\u5EFA\u8BAE\u8BF4\u6E05\u695A\uFF1A
3426
+
3427
+ - \u4EC0\u4E48\u573A\u666F\uFF08\u7EED\u8D39\u63D0\u9192 / \u6D3B\u52A8\u63A8\u5E7F / \u529F\u80FD\u516C\u544A\u2026\uFF09
3428
+ - \u5F39\u7A97\u8FD8\u662F\u516C\u544A\u6761\uFF0C\u5927\u6982\u591A\u5927
3429
+ - \u8981\u5C55\u793A\u54EA\u4E9B\u5185\u5BB9\uFF08\u6807\u9898\u3001\u56FE\u3001\u4EF7\u683C\u6863\u4F4D\u3001\u5012\u8BA1\u65F6\u2026\uFF09
3430
+ - \u70B9\u4E86\u6309\u94AE\u53BB\u54EA\u4E2A\u94FE\u63A5
3431
+ - \u6709\u6CA1\u6709\u9700\u8981\u5207\u6362\u7684\u9009\u9879\uFF08\u6BD4\u5982\u9009\u4E0D\u540C\u5957\u9910\uFF09
3432
+
3433
+ ---
3434
+
3435
+ \uFF08\u5728\u8FD9\u91CC\u5199\u4F60\u7684\u9700\u6C42\uFF09`;
3436
+ }
3437
+
3438
+ // src/docs/ai-prompt/actions.ts
3439
+ function actionSection() {
3440
+ return `# \u52A8\u4F5C
3441
+
3442
+ \u53EF\u7528 type\uFF1A${ACTION_TYPES.join(" / ")}
3443
+
3444
+ \`\`\`jsonc
3445
+ "action": {
3446
+ "type": "sequence",
3447
+ "actions": [
3448
+ { "type": "track", "event": "popup_renew_click", "params": { "plan": "{{ current.key }}" } },
3449
+ { "type": "navigate", "url": "{{ current.url }}", "target": "_blank" }
3450
+ ]
3451
+ }
3452
+ \`\`\`
3453
+
3454
+ - \`setState\`\uFF1A\`{ "type": "setState", "key": "period", "value": "{{ index }}" }\` \u505A\u9009\u4E2D\u5207\u6362
3455
+ - \`close\`\uFF1A\u5173\u6389\u5F53\u524D\u8FD9\u4E00\u5C42\uFF08\u53EA\u6709\u4E00\u5C42\u65F6\u5C31\u662F\u6574\u4F53\u5173\u95ED\uFF09\u3002\u6CE8\u610F\u5B83\u53EA\u662F**\u901A\u77E5\u5BBF\u4E3B\u9875\u9762**\u300C\u7528\u6237\u60F3\u5173\u4E86\u300D\uFF0C\u7531\u5BBF\u4E3B\u51B3\u5B9A\u5173\u4E0D\u5173\uFF1B\u591A\u89C6\u56FE\u65F6\u5173\u5185\u5C42\u4E0D\u4F1A\u901A\u77E5\u5BBF\u4E3B\uFF0C\u53EA\u662F\u56DE\u5230\u4E0B\u9762\u90A3\u5C42
3456
+ - \`closeAll\`\uFF1A\u51E0\u5C42\u90FD\u5173\u6389\uFF0C\u4E00\u5B9A\u4F1A\u901A\u77E5\u5BBF\u4E3B
3457
+ - \u60F3\u300C\u5173\u4E86\u5C31\u522B\u518D\u51FA\u73B0\u300D\uFF0C\u5149 \`close\` \u4E0D\u591F\uFF0C\u8981\u518D\u914D\u4E00\u6761 \`{ "type": "call", "name": "setNeverRemind" }\` \u8BA9\u5BBF\u4E3B\u8BB0\u4E0B\u6765
3458
+ - \`open\`\uFF1A\u6253\u5F00\u53E6\u4E00\u4E2A\u89C6\u56FE\uFF0C\u89C1\u4E0B\u4E00\u8282
3459
+ - \u4EFB\u4F55\u8282\u70B9\u52A0 \`action\` \u90FD\u80FD\u70B9\u51FB
3460
+ - **\u6BCF\u4E2A\u53EF\u70B9\u51FB\u5143\u7D20\u90FD\u5E94\u8BE5\u914D \`track\`**\uFF0C\u5426\u5219\u6CA1\u6709\u6570\u636E\u53EF\u770B
3461
+
3462
+ ## track \u7684\u4E8B\u4EF6\u540D\u6709\u786C\u6027\u683C\u5F0F\uFF08\u5199\u9519\u6574\u4EFD\u914D\u7F6E\u5B58\u4E0D\u4E0A\uFF09
3463
+
3464
+ \`event\` \u5FC5\u987B\u5339\u914D \`${String(TRACK_EVENT_PATTERN.source)}\`\uFF1A**\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934**\uFF0C
3465
+ \u4E4B\u540E\u53EA\u80FD\u662F**\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF**\uFF0C\u603B\u957F **3~64** \u4E2A\u5B57\u7B26\u3002
3466
+
3467
+ \u8FD9\u662F **error \u7EA7\u6821\u9A8C\uFF0C\u4F1A\u76F4\u63A5\u963B\u65AD\u4FDD\u5B58**\uFF0C\u4E0D\u662F\u8B66\u544A\u3002\u4E2D\u6587\u3001\u9A7C\u5CF0\u3001\u4E2D\u5212\u7EBF\u3001\u7A7A\u683C\u5168\u90FD\u8FC7\u4E0D\u4E86\u3002
3468
+ \u8FD9\u6761\u662F AI \u751F\u6210\u7684\u914D\u7F6E\u6700\u5E38\u8E29\u7684\u5751\u2014\u2014\u6392\u7248\u5168\u5BF9\uFF0C\u5C31\u56E0\u4E3A\u4E8B\u4EF6\u540D\u5199\u6210 \`\u7EED\u8D39\u70B9\u51FB\` \u800C\u767D\u5E72\u4E00\u904D\u3002
3469
+
3470
+ | \u2705 \u6B63\u786E | \u274C \u9519\u8BEF | \u4E3A\u4EC0\u4E48 |
3471
+ | --- | --- | --- |
3472
+ | \`banner_renew_click\` | \`\u7EED\u8D39\u70B9\u51FB\` | \u4E0D\u80FD\u7528\u4E2D\u6587 |
3473
+ | \`popup_show\` | \`bannerRenewClick\` | \u4E0D\u80FD\u7528\u9A7C\u5CF0 / \u5927\u5199\u5B57\u6BCD |
3474
+ | \`countdown_end\` | \`banner-renew-click\` | \u4E0D\u80FD\u7528\u4E2D\u5212\u7EBF\uFF0C\u5206\u8BCD\u4E00\u5F8B\u7528\u4E0B\u5212\u7EBF |
3475
+ | \`cta_click_v2\` | \`cta\` | \u4E0D\u8DB3 3 \u4E2A\u5B57\u7B26 |
3476
+ | \`notice_close\` | \`1_click\` | \u5FC5\u987B\u5C0F\u5199\u5B57\u6BCD\u5F00\u5934 |
3477
+ | \`vip_renew_click\` | \`vip renew click\` | \u4E0D\u80FD\u6709\u7A7A\u683C |
3478
+
3479
+ **\u5EFA\u8BAE\u6309\u300C\u5751\u4F4D_\u4E1A\u52A1_\u52A8\u4F5C\u300D\u4E09\u6BB5\u547D\u540D**\uFF08\u540E\u7AEF\u6309\u524D\u7F00\u805A\u5408\uFF0C\u540C\u4E00\u573A\u6D3B\u52A8\u5171\u7528\u4E00\u4E2A\u524D\u7F00\u624D\u80FD\u5206\u7EC4\u7EDF\u8BA1\uFF09\uFF1A
3480
+
3481
+ \`\`\`
3482
+ banner_renew_click // \u7EED\u8D39 Banner \u88AB\u70B9\u51FB
3483
+ popup_vip_show // \u4F1A\u5458\u5F39\u7A97\u66DD\u5149
3484
+ popup_vip_close // \u4F1A\u5458\u5F39\u7A97\u5173\u95ED
3485
+ notice_autumn_close // \u79CB\u5B63\u6D3B\u52A8\u516C\u544A\u6761\u88AB\u5173\u6389
3486
+ countdown_end // \u5012\u8BA1\u65F6\u5F52\u96F6
3487
+ \`\`\`
3488
+
3489
+ \u8981\u533A\u5206\u5177\u4F53\u6863\u4F4D\u3001\u5177\u4F53\u6309\u94AE\uFF0C\u653E \`params\` \u91CC\uFF0C\u4E0D\u8981\u5F80\u4E8B\u4EF6\u540D\u4E0A\u5806\u3002
3490
+
3491
+ ## \u66DD\u5149\u57CB\u70B9\u548C\u5173\u95ED\u57CB\u70B9
3492
+
3493
+ \u53EA\u7ED9\u6309\u94AE\u57CB\u70B9\u662F\u4E0D\u591F\u7684\u3002**\u6BCF\u4E2A\u89C6\u56FE\u7684 \`stage\` \u90FD\u8981\u5199 \`onShow\` \u548C \`onClose\`**\uFF0C\u5426\u5219\u7B97\u4E0D\u51FA\u5F39\u7A97\u7684\u8F6C\u5316\u7387\uFF1A
3494
+
3495
+ \`\`\`jsonc
3496
+ "stage": {
3497
+ "width": 420, "height": "auto", "layout": "flow",
3498
+ "onShow": { "type": "track", "event": "popup_renew_show",
3499
+ "params": { "popup": "renew" } },
3500
+ "onClose": { "type": "track", "event": "popup_renew_close",
3501
+ "params": { "popup": "renew", "reason": "{{ closeReason }}" } }
3502
+ }
3503
+ \`\`\`
3504
+
3505
+ - \`onShow\` \u5728\u6570\u636E\u5C31\u7EEA\u3001\u5F39\u7A97\u771F\u6B63\u6E32\u67D3\u51FA\u6765\u65F6\u89E6\u53D1\u4E00\u6B21
3506
+ - \`onClose\` \u5728\u70B9 X\u3001\u70B9\u906E\u7F69\u3001\u8D70 \`close\` \u52A8\u4F5C\u3001\u88AB \`replace\` \u9876\u6389\u65F6\u90FD\u4F1A\u89E6\u53D1
3507
+ - \`{{ closeReason }}\` \u53D6\u503C\uFF1A\`close-button\` / \`mask\` / \`replace\` / \`close\` \u52A8\u4F5C\u81EA\u5E26\u7684 \`reason\`\uFF08\u5982 \`"never-remind"\`\uFF09/ \u9ED8\u8BA4 \`action\`
3508
+ - \u591A\u89C6\u56FE\u65F6\u6BCF\u5C42\u5404\u5199\u5404\u7684\uFF0C\u624D\u80FD\u5206\u5F00\u7EDF\u8BA1
3509
+
3510
+ ## \u516C\u544A\u6761 / Banner \u7684\u5173\u95ED
3511
+
3512
+ \u516C\u544A\u6761**\u4E0D\u8981\u7528 \`stage.closeButton\`**\uFF08\u90A3\u662F\u538B\u5728\u89D2\u4E0A\u7684\u5706\u5F62\u6309\u94AE\uFF0C\u4E3A\u6574\u56FE\u5F39\u7A97\u8BBE\u8BA1\u7684\uFF09\u3002\u5728\u884C\u672B\u653E\u4E00\u4E2A\u5E26 \`close\` \u52A8\u4F5C\u7684 \`text\` \u8282\u70B9\uFF1A
3513
+
3514
+ \`\`\`jsonc
3515
+ { "type": "text", "content": "\u2715",
3516
+ "style": { "alignSelf": "center", "width": 22, "height": 22,
3517
+ "textAlign": "center", "lineHeight": 22, "cursor": "pointer" },
3518
+ "action": { "type": "sequence", "actions": [
3519
+ { "type": "track", "event": "notice_guide_close" },
3520
+ { "type": "call", "name": "setNeverRemind" },
3521
+ { "type": "close", "reason": "user-dismiss" }
3522
+ ] } }
3523
+ \`\`\`
3524
+
3525
+ \`close\` \u53EA\u901A\u77E5\u5BBF\u4E3B\u300C\u7528\u6237\u5173\u6389\u4E86\u300D\uFF0C\u8981\u8BA9\u5B83\u522B\u518D\u51FA\u73B0\u5F97\u914D\u4E00\u6761 \`call\`\u3002
3526
+ \u6574\u6761\u53EF\u70B9 + \u884C\u672B \xD7 \u4E0D\u4F1A\u51B2\u7A81\uFF1A\u5185\u5C42\u6709\u81EA\u5DF1\u7684 \`action\` \u5C31\u4E0D\u518D\u5192\u6CE1\u7ED9\u5916\u5C42\u3002`;
3527
+ }
3528
+ function viewsSection() {
3529
+ return `# \u591A\u89C6\u56FE\uFF08\u4E00\u4EFD\u914D\u7F6E\u91CC\u653E\u51E0\u4E2A\u5F39\u7A97\uFF09
3530
+
3531
+ \u9ED8\u8BA4\u4E00\u4EFD\u914D\u7F6E\u5C31\u662F\u4E00\u4E2A\u5F39\u7A97\u3002\u7528\u6237\u8981\u300C\u516C\u544A\u6761\u70B9\u5F00\u5F39\u7A97\u300D\u300C\u4E0D\u518D\u63D0\u9192\u518D\u5F39\u4E2A\u786E\u8BA4\u300D
3532
+ \u300C\u4E3B\u5F39\u7A97\u548C\u8BE6\u60C5\u5C4F\u6765\u56DE\u5207\u300D\u65F6\uFF0C\u628A \`type\`/\`stage\`/\`nodes\` \u632A\u8FDB \`views\`\uFF0C\u52A0 \`entry\`\uFF1A
3533
+
3534
+ \`\`\`jsonc
3535
+ {
3536
+ "version": ${DSL_VERSION},
3537
+ "entry": "bar",
3538
+ "data": {...}, "state": {...}, "derived": {...}, // \u5168\u5C40\u5171\u4EAB\uFF0C\u8DE8\u89C6\u56FE
3539
+ "views": {
3540
+ "bar": { "type": "notice", "stage": {...}, "nodes": [...] },
3541
+ "renew": { "type": "popup", "stage": {...}, "nodes": [...] },
3542
+ "confirm": { "type": "popup", "stage": {...}, "nodes": [...] }
3543
+ }
3544
+ }
3545
+ \`\`\`
3546
+
3547
+ \u5207\u6362\u5199\u6CD5\uFF1A
3548
+
3549
+ | \u5199\u6CD5 | \u6548\u679C |
3550
+ | --- | --- |
3551
+ | \`{ "type": "open", "view": "renew" }\` | \u53E0\u4E00\u5C42\uFF0C\u4E0B\u9762\u90A3\u5C42\u8FD8\u5728\uFF08\u9ED8\u8BA4 stack\uFF09 |
3552
+ | \`{ "type": "open", "view": "unlock", "mode": "replace" }\` | \u6362\u6389\u5F53\u524D\u5C42\uFF0C\u5C42\u6570\u4E0D\u53D8 |
3553
+ | \`{ "type": "close" }\` | \u5173\u6389\u5F53\u524D\u5C42\uFF0C\u56DE\u5230\u4E0A\u4E00\u5C42 |
3554
+ | \`{ "type": "closeAll" }\` | \u51E0\u5C42\u90FD\u5173\u6389 |
3555
+
3556
+ \u89C4\u5219\uFF1A
3557
+
3558
+ - \u7528\u4E86 \`views\` \u4E4B\u540E\uFF0C\`stage\` / \`nodes\` **\u4E0D\u80FD\u518D\u7559\u5728\u9876\u5C42**
3559
+ - \`entry\` \u5FC5\u586B\uFF0C\u4E14\u5FC5\u987B\u662F \`views\` \u91CC\u5B58\u5728\u7684 key
3560
+ - \`open\` \u7684 \`view\` \u5FC5\u987B\u662F \`views\` \u91CC\u5B58\u5728\u7684 key
3561
+ - \u53EA\u6709\u6700\u4E0A\u9762\u90A3\u5C42\u4F1A\u753B\u906E\u7F69\uFF0C\u4E0B\u9762\u7684\u5C42\u8FD8\u770B\u5F97\u89C1\u4F46\u70B9\u4E0D\u52A8
3562
+ - \`state\` \u5168\u5C40\u5171\u4EAB\uFF1A\u4E3B\u5C4F\u9009\u4E2D\u7684\u4E1C\u897F\uFF0C\u5F39\u51FA\u6765\u7684\u786E\u8BA4\u6846\u76F4\u63A5\u8BFB\u5F97\u5230`;
3563
+ }
3564
+ function countdownSection() {
3565
+ return `# \u5012\u8BA1\u65F6
3566
+
3567
+ \`to\` \u662F\u7ED3\u675F\u65F6\u95F4\u3002**\u7528\u6237\u8BF4\u300C9\u67081\u53F7\u622A\u6B62\u300D\u5C31\u76F4\u63A5\u5199 \`"2026-09-01"\`\uFF0C\u4E0D\u8981\u81EA\u4F5C\u4E3B\u5F20\u6362\u7B97\u6210\u65F6\u95F4\u6233** \u2014\u2014 \u8FD0\u8425\u770B\u4E0D\u61C2\u65F6\u95F4\u6233\uFF0C\u4E5F\u6CA1\u6CD5\u6838\u5BF9\u3002
3568
+
3569
+ \u80FD\u8BC6\u522B\u7684\u5199\u6CD5\uFF1A\`"2026-09-01 18:00:00"\`\u3001\`"2026-09-01"\`\u3001\`"2026\u5E749\u67081\u65E5 18\u70B9"\`\u3001ISO\uFF08\`"2026-09-01T18:00:00+08:00"\`\uFF09\u3001\u6BEB\u79D2\u65F6\u95F4\u6233\u3001\`"{{ user.trialEndAt }}"\`\u3002
3570
+
3571
+ \u5199\u6210 \`"\u4E0B\u5468\u4E09"\` \u8FD9\u79CD\u8BC6\u522B\u4E0D\u4E86\u7684\u4F1A\u5728\u4FDD\u5B58\u524D\u62A5\u9519\u3002
3572
+
3573
+ \u5F52\u96F6\u65F6\u53EF\u4EE5\u505A\u70B9\u4EC0\u4E48\uFF0C\u7528 \`onEnd\`\uFF08\u4EFB\u610F\u52A8\u4F5C\uFF09\uFF1A\`{ "type": "track", "event": "countdown_end" }\` \u4E0A\u62A5\u3001\`{ "type": "close" }\` \u81EA\u52A8\u5173\u5F39\u7A97\u3001\`{ "type": "open", "view": "expired", "mode": "replace" }\` \u6362\u5C4F\u3002**\u53EA\u5728\u7528\u6237\u773C\u770B\u7740\u5B83\u5F52\u96F6\u65F6\u89E6\u53D1**\uFF0C\u6253\u5F00\u65F6\u5C31\u5DF2\u7ECF\u8FC7\u671F\u7684\u4E0D\u89E6\u53D1\u3002
3574
+
3575
+ \u60F3\u8BA9\u300C\u5DF2\u7ED3\u675F\u300D\u663E\u793A\u6210\u53E6\u4E00\u5957\u6392\u7248\uFF0C\u7528 \`cd.ended\` \u914D \`visibleWhen\`\uFF0C\u4E0D\u8981\u7528 \`onEnd\`\u3002
3576
+
3577
+ \`\`\`jsonc
3578
+ {
3579
+ "type": "countdown",
3580
+ "to": "2026-09-01 18:00:00", // \u4E5F\u53EF\u4EE5\u5199 "{{ user.trialEndAt }}" \u4ECE\u6570\u636E\u53D6
3581
+ "precision": "s", // "s" \u6BCF\u79D2 | "cs" \u5398\u79D2\u9010\u5E27\uFF08\u7D27\u8FEB\u611F\u66F4\u5F3A\uFF09
3582
+ "as": "cd",
3583
+ "style": { "align": "center", "gap": 6 },
3584
+ "children": [
3585
+ { "type": "text", "content": "{{ cd.h }}", "style": { "width": 42, "textAlign": "center", "fontVariantNumeric": "tabular-nums" } },
3586
+ { "type": "text", "content": ":" },
3587
+ { "type": "text", "content": "{{ cd.m }}", "style": { "width": 42, "textAlign": "center", "fontVariantNumeric": "tabular-nums" } },
3588
+ { "type": "text", "content": ":" },
3589
+ { "type": "text", "content": "{{ cd.s }}", "style": { "width": 42, "textAlign": "center", "fontVariantNumeric": "tabular-nums" } }
3590
+ ]
3591
+ }
3592
+ \`\`\`
3593
+
3594
+ \u53EF\u7528\u7247\u6BB5\uFF1A\`cd.d\`(\u5929) \`cd.h\`(\u65F60-23) \`cd.hAll\`(\u603B\u5C0F\u65F6) \`cd.m\` \`cd.s\` \`cd.cs\`(\u5398\u79D2) \`cd.ended\`\u3002
3595
+ \u9010\u5E27\u53D8\u5316\u7684\u6570\u5B57\u4E00\u5B9A\u8981\u52A0 \`"fontVariantNumeric": "tabular-nums"\`\uFF0C\u5426\u5219\u6570\u5B57\u4F1A\u5DE6\u53F3\u6296\u3002`;
3596
+ }
3597
+
3598
+ // src/docs/ai-prompt/nodes.ts
3599
+ function nodesSection() {
3600
+ return `# \u8282\u70B9\u7C7B\u578B
3601
+
3602
+ \u53EF\u7528 type\uFF1A${NODE_TYPES.join(" / ")}
3603
+
3604
+ \u516C\u5171\u5B57\u6BB5\uFF1A\`id\` \`type\` \`rect\` \`style\` \`visibleWhen\` \`action\`
3605
+
3606
+ | type | \u7528\u9014 | \u5FC5\u586B\u5B57\u6BB5 |
3607
+ | --- | --- | --- |
3608
+ | flex | \u5BB9\u5668\uFF0Cchildren \u6D41\u5F0F\u6392\u5217\uFF08\u6700\u5E38\u7528\uFF09 | children |
3609
+ | box | \u5BB9\u5668\uFF0Cchildren \u7EDD\u5BF9\u5B9A\u4F4D\uFF08\u7528\u4E8E\u89D2\u6807\u538B\u8FB9\u6846\u7B49\u7CBE\u7EC6\u6392\u7248\uFF09 | children |
3610
+ | repeat | \u7ED1\u5B9A\u6570\u7EC4\u5FAA\u73AF\uFF0C\u6570\u636E\u51E0\u6761\u6E32\u67D3\u51E0\u6761 | bind, template |
3611
+ | text | \u6587\u672C\uFF1B\u4E5F\u7528\u6765\u505A\u8272\u5757\u3001\u5706\u70B9\u3001\u6807\u7B7E | content |
3612
+ | image | \u56FE\u7247 | src |
3613
+ | button | \u6309\u94AE | text |
3614
+ | tabs | \u9009\u9879\u5361\uFF0C\u70B9\u51FB\u5199\u5165 state[stateKey] | bind, stateKey |
3615
+ | countdown | \u5012\u8BA1\u65F6\u5BB9\u5668\uFF0C\u89C1\u4E0B | to |
3616
+
3617
+ **\u6CA1\u6709\u5BCC\u6587\u672C\u8282\u70B9\u3002** \u4E00\u884C\u91CC\u6DF7\u6392\u591A\u79CD\u5B57\u53F7\uFF08\u5982\u300C\u5DF2\u8865\u9F50 **42** \u5F20\u300D\uFF09\uFF0C
3618
+ \u7528 \`flex\` + \`"align": "baseline"\` \u653E\u51E0\u4E2A \`text\` \u8282\u70B9\uFF0C\u5404\u81EA\u8BBE\u4E0D\u540C \`fontSize\`\u3002
3619
+ \u52A0\u7C97\u540C\u7406\uFF0C\u62C6\u6210\u4E24\u4E2A \`text\`\uFF0C\u4E00\u4E2A\u8BBE \`"fontWeight": "700"\`\u3002`;
3620
+ }
3621
+ function styleSection() {
3622
+ return `# style \u767D\u540D\u5355
3623
+
3624
+ \u53EA\u80FD\u7528\u8FD9\u4E9B\uFF08\u7528\u522B\u7684\u4F1A\u88AB\u4E22\u5F03\uFF09\uFF1A
3625
+
3626
+ ${ALLOWED_STYLE_KEYS.map((key) => "`" + key + "`").join(" ")}
3627
+
3628
+ \u6CE8\u610F\u547D\u540D\u548C CSS \u4E0D\u5B8C\u5168\u4E00\u6837\uFF1A\`radius\` \u4E0D\u662F borderRadius\uFF0C\`shadow\` \u4E0D\u662F boxShadow\uFF0C
3629
+ \`direction\` \u4E0D\u662F flexDirection\u3002
3630
+
3631
+ \u5E38\u89C1\u5751\uFF1A
3632
+
3633
+ - flex \u5217\u5BB9\u5668\u7684\u5B50\u9879\u9ED8\u8BA4\u88AB\u62C9\u6EE1\u6574\u884C\uFF0C\u6807\u7B7E\u7C7B\u5143\u7D20\u8981\u5199 \`"alignSelf": "flex-start"\`
3634
+ - \u5927\u5B57\u53F7\u6587\u672C\u8981\u663E\u5F0F\u5199 \`lineHeight\`\uFF0C\u5426\u5219\u9ED8\u8BA4\u884C\u9AD8\u4F1A\u628A\u5BB9\u5668\u6491\u9AD8
3635
+ - \u957F\u5EA6\u503C\uFF1A\u6570\u5B57=px\uFF0C\u5B57\u7B26\u4E32\u53EF\u7528 \`"100%"\` \`"auto"\` \`"2rem"\` \`"calc(100% - 48px)"\` \`"10px 14px"\``;
3636
+ }
3637
+ function dataSection() {
3638
+ return `# \u6570\u636E\u3001\u72B6\u6001\u3001\u8054\u52A8
3639
+
3640
+ \`\`\`jsonc
3641
+ "data": { "tiers": [ { "key": "month", "p": "\u6708\u4ED8", "price": "15", "url": "https://..." } ] },
3642
+ "state": { "period": 1 },
3643
+ "derived": { "current": { "list": "tiers", "indexBy": "period" } }
3644
+ \`\`\`
3645
+
3646
+ \u4E4B\u540E\u4EFB\u610F\u8282\u70B9\u91CC\u7528 \`{{ current.price }}\` \`{{ current.url }}\`\uFF0C
3647
+ \u5207\u6362\u65F6\u4EF7\u683C\u3001\u94FE\u63A5\u3001\u57CB\u70B9\u53C2\u6570\u5168\u90E8\u81EA\u52A8\u8054\u52A8\uFF0C\u7248\u5F0F\u53EA\u9700\u8981\u6392\u4E00\u904D\u3002
3648
+
3649
+ \u6570\u636E\u8981\u4ECE\u540E\u7AEF\u53D6\u65F6\u5199 \`"tiers": { "$source": "\u6570\u636E\u6E90\u540D", "params": {} }\`\uFF0C
3650
+ \u6570\u636E\u6E90\u540D\u5FC5\u987B\u662F\u540E\u7AEF\u5DF2\u6CE8\u518C\u7684\uFF0C**\u4E0D\u80FD\u5199\u63A5\u53E3\u5730\u5740**\u3002\u7528\u6237\u6CA1\u8BF4\u5C31\u7528\u5199\u6B7B\u7684\u6570\u636E\u3002
3651
+
3652
+ # \u8868\u8FBE\u5F0F
3653
+
3654
+ \u80FD\u8BFB\u5230\uFF1A\`data\` \u7684\u5B57\u6BB5\uFF08\u76F4\u63A5\u5728\u9876\u5C42\uFF09\u3001\`state.xxx\`\u3001\`user.xxx\`\uFF08\u5F53\u524D\u7528\u6237\u4FE1\u606F\uFF09\u3001
3655
+ \`derived\` \u7684\u522B\u540D\u3001\`item\`/\`index\`\uFF08repeat \u5185\uFF09\u3001\`cd.xxx\`\uFF08countdown \u5185\uFF09\u3002
3656
+
3657
+ \`{{ }}\` \u53EF\u7528\u4E8E \`content\` \`src\` \`text\` \`to\`\u3001**\`style\` \u7684\u6BCF\u4E2A\u503C**\u3001\u4EE5\u53CA\u52A8\u4F5C\u7684 \`url\`/\`event\`/\`params\`\u3002
3658
+
3659
+ \u652F\u6301\uFF1A\u53D6\u503C\u3001\u5B57\u9762\u91CF\u3001\`!\` \`-\`\u3001\`+ - * / %\`\u3001\u6BD4\u8F83\u3001\`&& ||\`\u3001\u4E09\u5143 \`a ? b : c\`\u3002
3660
+ **\u4E0D\u652F\u6301\u51FD\u6570\u8C03\u7528**\u3002
3661
+
3662
+ \u9009\u4E2D\u6001\u5C31\u9760\u4E09\u5143\u5B9E\u73B0\uFF1A
3663
+
3664
+ \`\`\`jsonc
3665
+ "style": {
3666
+ "borderWidth": "{{ item.key == current.key ? '2px' : '1px' }}",
3667
+ "borderColor": "{{ item.key == current.key ? '#f0a000' : '#e5e8ed' }}"
3668
+ }
3669
+ \`\`\`
3670
+
3671
+ \u6761\u4EF6\u663E\u793A\u7528 \`"visibleWhen": "current.gift != ''"\`\u3002
3672
+
3673
+ \u5207 tab \u8981\u6574\u4F53\u6362\u80A4\u65F6\uFF0C\u628A\u914D\u8272\u5199\u8FDB data \u7684\u6BCF\u4E00\u9879\uFF0C\`stage.style\` \u540C\u6837\u652F\u6301 \`{{ }}\`\uFF1A
3674
+
3675
+ \`\`\`jsonc
3676
+ "stage": { "layout": "flow", "style": { "background": "{{ current.bg }}", "radius": 16 } }
3677
+ \`\`\`
3678
+
3679
+ \u5207 tab \u8981\u6362\u6210\u5B8C\u5168\u4E0D\u540C\u7684\u6392\u7248\u65F6\uFF0C\u5199\u4E24\u5957\u8282\u70B9\u5404\u914D\u4E00\u4E2A \`visibleWhen\`\uFF08\u5982 \`current.mode == 'grid'\` / \`current.mode == 'list'\`\uFF09\uFF0C\u540C\u4E00\u65F6\u523B\u53EA\u663E\u793A\u4E00\u5957\u3002\u4E0D\u8981\u8BD5\u56FE\u7528\u4E00\u5957\u8282\u70B9\u786C\u51D1\u3002`;
3680
+ }
3681
+
3682
+ // src/docs/ai-prompt/index.ts
3683
+ function findExample(value) {
3684
+ const found = examples_default.filter((item) => item.value === value)[0];
3685
+ return found ? found.dsl : null;
3686
+ }
3687
+ function buildAiPrompt() {
3688
+ const simple = findExample("imageHotspot");
3689
+ const full = findExample("renewExpire");
3690
+ const exampleSection = `# \u5B8C\u6574\u793A\u4F8B 1 \xB7 \u6574\u56FE + \u70ED\u533A\uFF08\u6700\u7B80\u5355\uFF0C\u89C6\u89C9\u5168\u5728\u56FE\u91CC\uFF09
3691
+
3692
+ \u70ED\u533A\u5C31\u662F\u300C\u5E26 \`rect\` \u548C \`action\` \u7684\u900F\u660E \`box\`\u300D\uFF0C\u6570\u91CF\u4E0D\u9650\u3001\u4F4D\u7F6E\u5404\u81EA\u72EC\u7ACB\uFF0C\u53EF\u4EE5\u540C\u65F6\u6709\u8DF3\u8F6C\u3001\u5173\u95ED\u3001\u57CB\u70B9\u7B49\u4E0D\u540C\u52A8\u4F5C\u3002\u56FE\u4E0A\u6709\u51E0\u4E2A\u53EF\u70B9\u533A\u57DF\u5C31\u653E\u51E0\u4E2A\u3002
3693
+
3694
+ \`\`\`json
3695
+ ${JSON.stringify(simple, null, 2)}
3696
+ \`\`\`
3697
+
3698
+ # \u5B8C\u6574\u793A\u4F8B 2 \xB7 \u591A\u6863\u4F4D\u8BA2\u8D2D\u5F39\u7A97\uFF08\u542B\u540E\u7AEF\u6570\u636E\u3001\u9009\u4E2D\u8054\u52A8\u3001\u6761\u4EF6\u663E\u793A\uFF09
3699
+
3700
+ \u8FD9\u4E2A\u4F8B\u5B50\u57FA\u672C\u6DB5\u76D6\u4E86\u6240\u6709\u5E38\u89C1\u9700\u6C42\uFF0C\u6539\u5B83\u6BD4\u4ECE\u96F6\u5199\u66F4\u5FEB\u3002
3701
+
3702
+ \`\`\`json
3703
+ ${JSON.stringify(full, null, 2)}
3704
+ \`\`\``;
3705
+ return [
3706
+ roleSection(),
3707
+ structureSection(),
3708
+ layoutSection(),
3709
+ nodesSection(),
3710
+ styleSection(),
3711
+ dataSection(),
3712
+ actionSection(),
3713
+ viewsSection(),
3714
+ countdownSection(),
3715
+ exampleSection,
3716
+ checklistSection(),
3717
+ requirementSection()
3718
+ ].join("\n\n");
3719
+ }
3720
+
3721
+ exports.buildAiPrompt = buildAiPrompt;
3722
+ exports.examples = examples_default;
3723
+ exports.meta = meta_default;
3724
+ exports.reconcileRows = reconcileRows;
3725
+ exports.sections = sections_default;
3726
+ exports.toMarkdown = toMarkdown;