@yaoxiu/marketing-dsl 2.3.0 → 2.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.
@@ -1,4 +1,4 @@
1
- import { TRACK_EVENT_PATTERN, DEFAULT_USER_FIELDS, USER_FIELD_LABELS, DSL_VERSION, ACTION_TYPES, NODE_TYPES, ALLOWED_STYLE_KEYS, CLOSE_POSITIONS } from '../chunk-DTHKC5AL.js';
1
+ import { TRACK_EVENT_PATTERN, ALLOWED_EASINGS, DEFAULT_USER_FIELDS, USER_FIELD_LABELS, DSL_VERSION, ACTION_TYPES, NODE_TYPES, ALLOWED_STYLE_KEYS, CLOSE_POSITIONS } from '../chunk-DT3ZINDI.js';
2
2
 
3
3
  // src/docs/reconcile.ts
4
4
  function pickTokens(rows, columnIndex) {
@@ -320,8 +320,228 @@ countdown_end // \u5012\u8BA1\u65F6\u5F52\u96F6`
320
320
  ];
321
321
  var action_default = sections;
322
322
 
323
- // src/docs/sections/countdown.ts
323
+ // src/docs/sections/animation.ts
324
324
  var sections2 = [
325
+ {
326
+ id: "animation",
327
+ title: "15. \u52A8\u753B\u4E0E hover",
328
+ blocks: [
329
+ {
330
+ t: "p",
331
+ text: "\u52A8\u753B\u5206\u4E24\u6B65\u5199\uFF1A\u5148\u5728**\u9876\u5C42** `keyframes` \u91CC\u5B9A\u4E49\u4E00\u7EC4\u5173\u952E\u5E27\uFF0C\u518D\u5728\u8981\u52A8\u7684\u5730\u65B9\u7528 `animate` \u5F15\u7528\u5B83\u3002\u5173\u952E\u5E27\u5E93\u5168\u914D\u7F6E\u5171\u7528\uFF0C\u591A\u89C6\u56FE\u4E4B\u95F4\u4E5F\u5171\u7528\uFF0C\u540C\u4E00\u7EC4\u5173\u952E\u5E27\u53EF\u4EE5\u88AB\u5F15\u7528\u4EFB\u610F\u591A\u6B21\u3002"
332
+ },
333
+ {
334
+ t: "code",
335
+ code: `{
336
+ "version": 1,
337
+ "keyframes": {
338
+ "zoomIn": {
339
+ "from": { "opacity": "0", "transform": "scale(0.7)" },
340
+ "to": { "opacity": "1", "transform": "scale(1)" }
341
+ },
342
+ "floatY": {
343
+ "0%": { "transform": "translateY(0)" },
344
+ "50%": { "transform": "translateY(-8px)" },
345
+ "100%": { "transform": "translateY(0)" }
346
+ }
347
+ },
348
+ "stage": {
349
+ "animate": { "name": "zoomIn", "duration": 500, "easing": "cubic-bezier(0.34, 1.56, 0.64, 1)" },
350
+ "maskAnimate": { "name": "fadeIn", "duration": 400 }
351
+ },
352
+ "nodes": [
353
+ { "type": "text", "content": "\u{1F9E7}",
354
+ "animate": { "name": "floatY", "duration": 3000, "easing": "ease-in-out", "iteration": "infinite" } }
355
+ ]
356
+ }`
357
+ },
358
+ { t: "h3", text: "keyframes\uFF1A\u5173\u952E\u5E27\u5E93" },
359
+ {
360
+ t: "list",
361
+ items: [
362
+ "\u540D\u5B57\u53EA\u80FD\u7528\u5B57\u6BCD\u5F00\u5934\u7684\u5B57\u6BCD / \u6570\u5B57 / \u4E0B\u5212\u7EBF / \u4E2D\u5212\u7EBF\uFF0C\u6700\u957F 32 \u4E2A\u5B57\u7B26\uFF08\u5B83\u8981\u62FC\u8FDB CSS\uFF0C\u5FC5\u987B\u53EF\u63A7\uFF09",
363
+ "\u504F\u79FB\u91CF\u53EA\u8BA4 `from` / `to` / `50%` \u4E09\u79CD\u5199\u6CD5\uFF0C\u5199 `0.5` \u6216 `half` \u4F1A\u88AB\u62E6\u4E0B",
364
+ "\u6BCF\u4E00\u5E27\u7684\u503C\u662F**\u6837\u5F0F\u5BF9\u8C61**\uFF0C\u952E\u8D70\u7684\u662F\u7B2C 7 \u8282\u90A3\u4EFD style \u767D\u540D\u5355 \u2014\u2014 \u767D\u540D\u5355\u5916\u7684\u5C5E\u6027\u4F1A\u88AB\u4E22\u5F03\u5E76\u7ED9\u51FA\u8B66\u544A",
365
+ "\u52A8\u753B\u91CC\u5E38\u7528\u7684\u5C31 `transform` `opacity` `shadow` `background` `color` \u51E0\u4E2A\uFF1B\u6539\u5BBD\u9AD8\u4F1A\u9010\u5E27\u89E6\u53D1\u91CD\u6392\uFF0C\u80FD\u7528 `transform` \u5C31\u522B\u7528\u5BBD\u9AD8"
366
+ ]
367
+ },
368
+ {
369
+ t: "note",
370
+ tone: "info",
371
+ text: "\u5B9A\u4E49\u4E86\u5374\u6CA1\u6709\u4EFB\u4F55 `animate` \u5F15\u7528\u7684\u5173\u952E\u5E27\uFF0C\u4FDD\u5B58\u65F6\u4F1A\u7ED9\u51FA\u8B66\u544A\u3002\u591A\u534A\u662F\u6539\u914D\u7F6E\u65F6\u628A `animate` \u5220\u4E86\u5FD8\u4E86\u5220\u5173\u952E\u5E27\uFF0C\u6216\u8005\u540D\u5B57\u6253\u9519\u4E86\u4E00\u4E2A\u5B57\u6BCD \u2014\u2014 \u540E\u8005\u7684\u8868\u73B0\u662F\u300C\u4EC0\u4E48\u90FD\u6CA1\u53D1\u751F\u300D\uFF0C\u4E0D\u63D0\u793A\u7684\u8BDD\u5F88\u96BE\u60F3\u5230\u662F\u540D\u5B57\u7684\u95EE\u9898\u3002"
372
+ },
373
+ { t: "h3", text: "animate\uFF1A\u600E\u4E48\u64AD" },
374
+ {
375
+ t: "table",
376
+ head: ["\u5B57\u6BB5", "\u5FC5\u586B", "\u9ED8\u8BA4", "\u8BF4\u660E"],
377
+ rows: [
378
+ ["`name`", "\u662F", "\u2014", "\u5173\u952E\u5E27\u540D\uFF0C\u5FC5\u987B\u5728 `keyframes` \u91CC\u5B9A\u4E49\u8FC7\uFF0C\u5426\u5219\u4FDD\u5B58\u65F6\u62A5\u9519"],
379
+ ["`duration`", "\u662F", "\u2014", "\u65F6\u957F\uFF0C\u6BEB\u79D2\u3002\u5FC5\u987B\u5927\u4E8E 0"],
380
+ ["`delay`", "\u5426", "`0`", "\u5EF6\u8FDF\uFF0C\u6BEB\u79D2\u3002\u4EA4\u9519\u5165\u573A\u5C31\u9760\u5B83\u4E00\u683C\u4E00\u683C\u9519\u5F00"],
381
+ ["`easing`", "\u5426", "`ease`", `\u7F13\u52A8\uFF0C\u767D\u540D\u5355\u89C1\u4E0B`],
382
+ ["`iteration`", "\u5426", "`1`", "\u64AD\u653E\u6B21\u6570\uFF0C\u6B63\u6574\u6570\uFF1B`'infinite'` \u65E0\u9650\u5FAA\u73AF"],
383
+ [
384
+ "`direction`",
385
+ "\u5426",
386
+ "`normal`",
387
+ "`normal` / `reverse` / `alternate` / `alternate-reverse`"
388
+ ],
389
+ [
390
+ "`fill`",
391
+ "\u5426",
392
+ "`both`",
393
+ "`none` / `forwards` / `backwards` / `both`\u3002\u9ED8\u8BA4\u4FDD\u7559\u7EC8\u6001\uFF0C\u5165\u573A\u52A8\u753B\u4E0D\u8981\u6539\u5B83"
394
+ ]
395
+ ]
396
+ },
397
+ {
398
+ t: "p",
399
+ text: `\u53EF\u7528\u7684 \`easing\`\uFF1A${ALLOWED_EASINGS.map((item) => "`" + item + "`").join(" ")}\uFF0C
400
+ \u4EE5\u53CA \`cubic-bezier(0.34, 1.56, 0.64, 1)\` \u8FD9\u79CD\u56DB\u53C2\u6570\u5199\u6CD5\uFF08\u8D85\u8C03\u66F2\u7EBF\u624D\u6709\u300C\u5F39\u4E00\u4E0B\u300D\u7684\u624B\u611F\uFF09\u3002
401
+ \u522B\u7684\u5199\u6CD5\u4E00\u5F8B\u5728\u4FDD\u5B58\u65F6\u62A5\u9519\uFF0C\u4E0D\u505A\u300C\u770B\u7740\u50CF\u5C31\u653E\u884C\u300D\u7684\u6A21\u7CCA\u5224\u65AD\u3002`
402
+ },
403
+ {
404
+ t: "note",
405
+ tone: "warn",
406
+ text: "`fill` \u9ED8\u8BA4\u662F `both`\uFF0C\u522B\u6539\u6210 `none`\uFF1A\u5165\u573A\u52A8\u753B\u4E0D\u4FDD\u7559\u7EC8\u6001\u7684\u8BDD\uFF0C\u64AD\u5B8C\u90A3\u4E00\u5E27\u4F1A\u76F4\u63A5\u5F39\u56DE\u521D\u59CB\u503C\uFF08\u900F\u660E\u3001\u7F29\u5C0F\uFF09\uFF0C\u770B\u7740\u50CF\u95EA\u4E86\u4E00\u4E0B\u3002"
407
+ },
408
+ { t: "h3", text: "\u80FD\u6302\u5728\u54EA" },
409
+ {
410
+ t: "table",
411
+ head: ["\u4F4D\u7F6E", "\u5178\u578B\u7528\u9014"],
412
+ rows: [
413
+ ["`stage.animate`", "\u5F39\u7A97\u4E3B\u4F53\u5165\u573A\uFF08\u653E\u5927\u56DE\u5F39\u3001\u4E0A\u6ED1\uFF09"],
414
+ [
415
+ "`stage.maskAnimate`",
416
+ "\u906E\u7F69\u6DE1\u5165\u3002\u548C\u821E\u53F0\u5206\u5F00\u914D\uFF0C\u624D\u80FD\u5404\u8D70\u5404\u7684\u65F6\u957F\uFF1B\u906E\u7F69\u914D\u8272\u53E6\u89C1\u7B2C 3 \u8282\u7684 `maskStyle`\uFF0C\u4E24\u8005\u4E92\u4E0D\u5E72\u6270"
417
+ ],
418
+ ["\u4EFB\u610F\u8282\u70B9\u7684 `animate`", "\u7EA2\u5305\u547C\u5438\u3001\u6309\u94AE\u8109\u51B2\u3001\u626B\u5149\u3001\u5149\u70B9\u4E0A\u6D6E\u3001\u5217\u8868\u4EA4\u9519\u5165\u573A"],
419
+ [
420
+ "`stage.closeButton.animate`",
421
+ "\u5EF6\u8FDF\u6DE1\u5165\u7684 \u2715\uFF08\u5148\u8BA9\u7528\u6237\u770B\u5185\u5BB9\uFF0C\u518D\u9732\u51FA\u5173\u95ED\u5165\u53E3\uFF09"
422
+ ]
423
+ ]
424
+ },
425
+ { t: "h3", text: "\u4EA4\u9519\u5165\u573A\uFF1A\u540C\u4E00\u7EC4\u5173\u952E\u5E27 + \u4E0D\u540C delay" },
426
+ {
427
+ t: "p",
428
+ text: "\u4E00\u6392\u5361\u7247\u4F9D\u6B21\u6D6E\u4E0A\u6765\uFF0C\u4E0D\u9700\u8981\u51E0\u7EC4\u5173\u952E\u5E27\uFF0C\u4E00\u7EC4 `cellIn` \u914D\u4E0D\u540C `delay` \u5C31\u591F\u4E86\u3002\u6CE8\u610F `delay` \u5FC5\u987B\u662F**\u5E38\u91CF\u6570\u5B57**\uFF0C\u4E0D\u652F\u6301 `{{ }}` \u63D2\u503C \u2014\u2014 \u5B83\u8981\u62FC\u8FDB CSS \u7B80\u5199\uFF0C\u63D2\u503C\u8FDB\u53BB\u5C31\u6CA1\u6CD5\u505A\u5B89\u5168\u8FC7\u6EE4\u4E86\u3002\u6240\u4EE5\u6570\u91CF\u56FA\u5B9A\u7684\u4EA4\u9519\u5217\u8868\u8981\u4E00\u683C\u4E00\u683C\u5199\uFF0C\u4E0D\u80FD\u7528 `repeat` \u5FAA\u73AF\u51FA\u6765\u3002"
429
+ },
430
+ {
431
+ t: "code",
432
+ code: `"keyframes": {
433
+ "cellIn": {
434
+ "0%": { "opacity": "0", "transform": "translateY(10px)" },
435
+ "100%": { "opacity": "1", "transform": "translateY(0)" }
436
+ }
437
+ }
438
+
439
+ // \u4E94\u4E2A\u683C\u5B50\uFF0C\u6BCF\u683C\u665A 80ms
440
+ { "animate": { "name": "cellIn", "duration": 460, "delay": 340, "easing": "ease-out" } }
441
+ { "animate": { "name": "cellIn", "duration": 460, "delay": 420, "easing": "ease-out" } }
442
+ { "animate": { "name": "cellIn", "duration": 460, "delay": 500, "easing": "ease-out" } }`
443
+ },
444
+ { t: "h3", text: "\u65E0\u9650\u5FAA\u73AF\uFF1A\u547C\u5438\u3001\u626B\u5149\u3001\u5149\u70B9" },
445
+ {
446
+ t: "list",
447
+ items: [
448
+ '\u5FAA\u73AF\u52A8\u753B\u4E00\u5F8B `"iteration": "infinite"`\uFF0C\u914D `ease-in-out` \u6700\u81EA\u7136\uFF1B\u626B\u5149\u8FD9\u7C7B\u5300\u901F\u7684\u7528 `linear`',
449
+ "\u5FAA\u73AF\u5E45\u5EA6\u8981\u5C0F\u3002\u6309\u94AE\u8109\u51B2\u653E\u5927 2% \u5C31\u591F\uFF0C\u653E\u5927 10% \u4F1A\u628A\u5468\u56F4\u7684\u6392\u7248\u9876\u52A8\u3001\u4E5F\u6643\u773C",
450
+ '\u88C5\u9970\u6027\u56FE\u5C42\uFF08\u5149\u6655\u3001\u626B\u5149\u6761\u3001\u5149\u70B9\uFF09\u5FC5\u987B\u5199 `"pointerEvents": "none"`\uFF0C\u5426\u5219\u4F1A\u6321\u4F4F\u4E0B\u9762\u7684\u6309\u94AE',
451
+ "\u626B\u5149\u7528 `transform` \u4F4D\u79FB\uFF0C\u4E0D\u8981\u52A8 `left`\uFF1A\u52A8 `left` \u6BCF\u5E27\u90FD\u8981\u91CD\u6392\uFF0C`transform` \u53EA\u8D70\u5408\u6210\u5C42",
452
+ "\u6309\u94AE\u547C\u5438\u4F18\u5148\u52A8 `shadow` \u800C\u4E0D\u662F\u5C3A\u5BF8\uFF1A\u5C3A\u5BF8\u4E00\u53D8\uFF0C\u6574\u5757\u5185\u5BB9\u90FD\u4F1A\u8DDF\u7740\u52A8"
453
+ ]
454
+ },
455
+ {
456
+ t: "note",
457
+ tone: "info",
458
+ text: "\u4E00\u4E2A\u8282\u70B9\u53EA\u80FD\u6302\u4E00\u7EC4 `animate`\u3002\u65E2\u8981\u5165\u573A\u53C8\u8981\u5FAA\u73AF\u65F6\uFF0C\u628A\u5B83\u4EEC\u62C6\u5230\u7236\u5B50\u4E24\u5C42\u4E0A\uFF1A\u5916\u5C42\u8D1F\u8D23\u5165\u573A\uFF0C\u5185\u5C42\u8D1F\u8D23\u5FAA\u73AF\u3002"
459
+ },
460
+ { t: "h3", text: "hoverStyle\uFF1A\u9F20\u6807\u60AC\u505C" },
461
+ {
462
+ t: "p",
463
+ text: "`hoverStyle` \u548C `style` \u7528\u7684\u662F**\u540C\u4E00\u5957**\u5C5E\u6027\u767D\u540D\u5355\uFF0C\u5199\u6CD5\u4E5F\u4E00\u6837\uFF0C\u533A\u522B\u53EA\u5728\u4E8E\u5B83\u53EA\u5728\u9F20\u6807\u60AC\u505C\u65F6\u751F\u6548\u3002\u8282\u70B9\u548C `stage.closeButton` \u4E0A\u90FD\u80FD\u5199\u3002"
464
+ },
465
+ {
466
+ t: "code",
467
+ code: `{
468
+ "type": "text", "content": "\u2715",
469
+ "style": { "background": "rgba(0,0,0,0.08)", "transition": "background 0.2s" },
470
+ "hoverStyle": { "background": "rgba(0,0,0,0.2)" }
471
+ }`
472
+ },
473
+ {
474
+ t: "list",
475
+ items: [
476
+ "\u60F3\u8981\u5E73\u6ED1\u8FC7\u6E21\u5C31\u5728 `style` \u91CC\u5199 `transition`\uFF0C`hoverStyle` \u53EA\u8D1F\u8D23\u7EC8\u6001",
477
+ "\u89E6\u5C4F\u6CA1\u6709 hover\uFF0C\u6240\u4EE5 `hoverStyle` \u53EA\u80FD\u505A\u9526\u4E0A\u6DFB\u82B1\u7684\u6548\u679C\uFF0C**\u4E0D\u80FD\u627F\u8F7D\u4FE1\u606F**\uFF08\u522B\u628A\u4EF7\u683C\u85CF\u5728 hover \u91CC\uFF09",
478
+ "`hoverStyle` \u4F1A\u751F\u6210\u4E00\u6761 CSS \u89C4\u5219\u800C\u4E0D\u662F\u884C\u5185\u6837\u5F0F \u2014\u2014 \u884C\u5185\u6837\u5F0F\u6CA1\u6709 `:hover` \u8FD9\u56DE\u4E8B",
479
+ "`hoverStyle` \u91CC\u7684 `{{ }}` \u53EA\u5728\u9996\u5C4F\u6C42\u503C\u4E00\u6B21\uFF0C\u4E4B\u540E\u4E0D\u968F state \u53D8\u5316\u3002\u8981\u8DDF\u7740\u72B6\u6001\u53D8\u7684\u6837\u5F0F\u5199\u5728 `style` \u91CC \u2014\u2014 hover \u89C4\u5219\u82E5\u968F\u72B6\u6001\u53D8\uFF0C\u6574\u5F20\u6837\u5F0F\u8868\u5C31\u5F97\u53CD\u590D\u91CD\u5199\uFF0C\u9875\u9762\u4E0A\u6B63\u5728\u8DD1\u7684\u52A8\u753B\u4F1A\u5168\u90E8\u91CD\u5934\u64AD\u4E00\u904D"
480
+ ]
481
+ },
482
+ { t: "h3", text: "\u60AC\u505C\u65F6\u6682\u505C\u5FAA\u73AF\u52A8\u753B" },
483
+ {
484
+ t: "p",
485
+ text: '\u6309\u94AE\u4E00\u76F4\u5728\u547C\u5438\uFF0C\u9F20\u6807\u79FB\u4E0A\u53BB\u65F6\u505C\u4F4F\u3001\u770B\u6E05\u695A\u518D\u70B9\uFF0C\u662F\u5E38\u89C1\u505A\u6CD5\u3002\u5199 `animationPlayState: "paused"` \u5373\u53EF \u2014\u2014 \u5B83\u4E0D\u91CD\u64AD\u3001\u4E0D\u8DF3\u5E27\uFF0C\u5C31\u505C\u5728\u5F53\u524D\u90A3\u4E00\u5E27\uFF0C\u79FB\u5F00\u7EE7\u7EED\u3002\u53EA\u5728 `hoverStyle` \u91CC\u5199\u624D\u6709\u610F\u4E49\uFF08\u5199\u8FDB `style` \u7B49\u4E8E\u4E00\u4E0A\u6765\u5C31\u662F\u6682\u505C\u7684\uFF09\u3002'
486
+ },
487
+ {
488
+ t: "code",
489
+ code: `{
490
+ "type": "button", "text": "\u7ACB\u5373\u9886\u53D6",
491
+ "style": { "transition": "transform 0.18s" },
492
+ "animate": { "name": "breath", "duration": 2400, "easing": "ease-in-out", "iteration": "infinite" },
493
+ "hoverStyle": { "transform": "translateY(-2px)", "animationPlayState": "paused" }
494
+ }`
495
+ },
496
+ { t: "h3", text: "\u7CFB\u7EDF\u5F00\u4E86\u300C\u51CF\u5C11\u52A8\u6001\u6548\u679C\u300D\u4F1A\u81EA\u52A8\u9759\u6B62" },
497
+ {
498
+ t: "p",
499
+ text: "\u89E3\u91CA\u5668\u5728\u751F\u6210\u7684 CSS \u672B\u5C3E\u6052\u5B9A\u8FFD\u52A0\u4E00\u6761 `@media (prefers-reduced-motion: reduce)`\uFF0C\u628A\u8FD9\u4EFD\u7269\u6599\u91CC\u7684 `animation` \u4E0E `transition` \u5168\u90E8\u5173\u6389\u3002\u8FD9\u662F\u65E0\u969C\u788D\u8981\u6C42\uFF0C\u4E5F\u786E\u5B9E\u6709\u4EBA\u4E00\u770B\u52A8\u753B\u5C31\u6655\u3002**\u4E0D\u9700\u8981\u5728\u914D\u7F6E\u91CC\u505A\u4EFB\u4F55\u4E8B**\uFF0C\u4E5F\u6CA1\u6709\u5F00\u5173\u53EF\u4EE5\u7ED5\u8FC7\u5B83 \u2014\u2014 \u6240\u4EE5\u52A8\u753B\u53EA\u80FD\u662F\u9526\u4E0A\u6DFB\u82B1\uFF1A\u9759\u6B62\u72B6\u6001\u4E0B\u8FD9\u4EFD\u7269\u6599\u4E5F\u5FC5\u987B\u5B8C\u6574\u53EF\u8BFB\u3001\u53EF\u70B9\u3002"
500
+ },
501
+ { t: "h3", text: "\u4E3A\u4EC0\u4E48\u4E0D\u80FD\u76F4\u63A5\u5199 CSS" },
502
+ {
503
+ t: "p",
504
+ text: "\u5E38\u6709\u4EBA\u95EE\uFF1A\u65E2\u7136\u90FD\u80FD\u5199 `transform` \u4E86\uFF0C\u4E3A\u4EC0\u4E48\u4E0D\u5E72\u8106\u653E\u5F00 `position`\u3001\u653E\u5F00\u4E00\u4E2A `css` \u5B57\u6BB5\u968F\u4FBF\u5199\uFF1F\u56E0\u4E3A\u8FD9\u4EFD\u914D\u7F6E\u662F**\u4ECE\u540E\u53F0\u4E0B\u53D1\u3001\u8DD1\u5728\u7528\u6237\u9875\u9762\u4E0A\u7684**\uFF0C\u5B83\u548C\u9875\u9762\u5171\u4EAB\u540C\u4E00\u4E2A DOM\u3002"
505
+ },
506
+ {
507
+ t: "list",
508
+ items: [
509
+ "`position: fixed` + \u94FA\u6EE1\u89C6\u53E3 = \u4E00\u4EFD\u7269\u6599\u53EF\u4EE5\u76D6\u4F4F\u6574\u4E2A\u9875\u9762\uFF0C\u5305\u62EC\u6536\u94F6\u53F0\u548C\u5BFC\u822A \u2014\u2014 \u8FD9\u662F\u9493\u9C7C\u7684\u6807\u51C6\u505A\u6CD5\u3002\u5F39\u7A97\u8981\u94FA\u6EE1\u89C6\u53E3\u7531\u89E3\u91CA\u5668\u81EA\u5DF1\u5B8C\u6210\uFF0C\u4E0D\u7ECF\u8FC7\u914D\u7F6E",
510
+ "`z-index` \u53EA\u5141\u8BB8 0~10\uFF1A\u5C42\u5185\u6392\u5E03\u5341\u5C42\u7EF0\u7EF0\u6709\u4F59\uFF0C\u771F\u8981\u538B\u8FC7\u9875\u9762\u5176\u5B83\u5185\u5BB9\u7684\u662F\u5F39\u7A97\u5C42\uFF0C\u90A3\u7531\u89E3\u91CA\u5668\u7ED9",
511
+ "\u81EA\u7531 CSS \u610F\u5473\u7740\u53EF\u4EE5\u5199\u4EFB\u610F\u9009\u62E9\u5668\u53BB\u6539**\u5BBF\u4E3B\u9875\u9762**\u7684\u6837\u5F0F\uFF0C\u8D8A\u6743\u8303\u56F4\u6CA1\u6709\u8FB9\u754C",
512
+ "\u767D\u540D\u5355\u8FD8\u6709\u4E00\u4E2A\u597D\u5904\uFF1A\u5C5E\u6027\u6709\u9650\uFF0C\u7F16\u8F91\u5668\u624D\u80FD\u505A\u51FA\u53EF\u89C6\u5316\u9762\u677F\uFF1B\u81EA\u7531 CSS \u53EA\u80FD\u7ED9\u4E00\u4E2A\u6587\u672C\u6846"
513
+ ]
514
+ },
515
+ { t: "h3", text: "\u5B89\u5168\u8FC7\u6EE4\uFF1A\u4EC0\u4E48\u4F1A\u88AB\u6084\u6084\u4E22\u6389" },
516
+ {
517
+ t: "p",
518
+ text: "`keyframes` \u4E0E `hoverStyle` \u662F\u552F\u4E8C\u4F1A\u88AB**\u62FC\u6210 CSS \u6587\u672C**\u7684\u5730\u65B9\uFF08\u884C\u5185\u6837\u5F0F\u90A3\u6761\u8DEF\u5F84\u7531\u6846\u67B6\u8F6C\u4E49\uFF0C\u503C\u518D\u602A\u4E5F\u53EA\u662F\u4E0D\u751F\u6548\uFF09\u3002\u6240\u4EE5\u8FD9\u4E24\u5904\u7684\u6BCF\u4E2A\u503C\u90FD\u8981\u8FC7\u4E00\u904D\u8FC7\u6EE4\uFF0C\u4E0D\u5408\u683C\u7684**\u6574\u6761\u58F0\u660E\u4E22\u5F03**\uFF1A"
519
+ },
520
+ {
521
+ t: "list",
522
+ items: [
523
+ "\u503C\u91CC\u51FA\u73B0 `{` `}` `<` `>` `;` `@`\u3001\u6CE8\u91CA\u7B26 `/*` `*/` \u6216\u53CD\u659C\u6760 `\\` \u2014\u2014 \u8FD9\u4E9B\u5B57\u7B26\u80FD\u63D0\u524D\u95ED\u5408\u89C4\u5219\u3001\u63A5\u7740\u5199\u4EFB\u610F\u9009\u62E9\u5668",
524
+ "\u767D\u540D\u5355\u5916\u7684\u6837\u5F0F\u5C5E\u6027\uFF08\u540C `style`\uFF09",
525
+ "\u5173\u952E\u5E27\u540D / \u7F13\u52A8\u503C\u683C\u5F0F\u4E0D\u5408\u89C4\uFF08\u8FD9\u4E24\u9879\u5728\u4FDD\u5B58\u65F6\u5C31\u4F1A\u62A5\u9519\uFF0C\u4E0D\u4F1A\u8D70\u5230\u8FD0\u884C\u65F6\uFF09"
526
+ ]
527
+ },
528
+ {
529
+ t: "note",
530
+ tone: "warn",
531
+ text: "\u88AB\u4E22\u5F03\u7684\u662F**\u90A3\u4E00\u6761\u58F0\u660E**\uFF0C\u4E0D\u662F\u628A\u8FDD\u89C4\u5B57\u7B26\u5220\u6389\u540E\u7167\u5199 \u2014\u2014 \u534A\u622A\u503C\u540C\u6837\u53EF\u80FD\u62FC\u51FA\u610F\u6599\u5916\u7684\u6548\u679C\u3002\u6B63\u5E38\u5199\u989C\u8272\u3001`transform`\u3001\u9634\u5F71\u90FD\u78B0\u4E0D\u5230\u8FD9\u4E9B\u5B57\u7B26\uFF0C\u771F\u78B0\u5230\u4E86\u57FA\u672C\u5C31\u662F\u590D\u5236\u7C98\u8D34\u5E26\u8FDB\u4E86\u591A\u4F59\u5185\u5BB9\u3002"
532
+ },
533
+ { t: "h3", text: "\u5B8C\u6574\u4F8B\u5B50" },
534
+ {
535
+ t: "p",
536
+ text: "\u793A\u4F8B \u246A\u246B \u662F\u642C\u5BB6\u6210\u529F\u9875\u4E24\u4E2A\u7EBF\u4E0A\u5F39\u7A97\u7684\u4E00\u6BD4\u4E00\u590D\u523B\uFF1A\u246A \u6F14\u793A\u5165\u573A + \u547C\u5438 + \u76F8\u5BF9\u65F6\u957F\u5012\u8BA1\u65F6\uFF0C\u246B \u662F\u52A8\u753B\u6700\u5BC6\u7684\u4E00\u4EFD\uFF08\u5341\u4E00\u7EC4\u5173\u952E\u5E27\uFF1A\u5149\u6655\u547C\u5438\u3001\u5149\u70B9\u4E0A\u6D6E\u3001\u626B\u5149\u3001\u4EA4\u9519\u5165\u573A\u3001\u89D2\u6807\u8F7B\u6D6E\u3001CTA \u547C\u5438\uFF09\uFF0C\u4E24\u4EFD\u90FD\u5E26\u4E8C\u6B21\u633D\u7559\u5F39\u7A97\u3002\u8981\u505A\u52A8\u753B\u5F39\u7A97\uFF0C\u6539\u8FD9\u4E24\u4EFD\u6BD4\u4ECE\u96F6\u5199\u5FEB\u5F97\u591A\u3002"
537
+ }
538
+ ]
539
+ }
540
+ ];
541
+ var animation_default = sections2;
542
+
543
+ // src/docs/sections/countdown.ts
544
+ var sections3 = [
325
545
  {
326
546
  id: "countdown",
327
547
  title: "10. \u5012\u8BA1\u65F6",
@@ -395,6 +615,22 @@ var sections2 = [
395
615
  "style": { "color": "#999" } }
396
616
  ]`
397
617
  },
618
+ { t: "h3", text: "duration\uFF1A\u6BCF\u6B21\u6253\u5F00\u91CD\u65B0\u5012\u8BA1\u65F6" },
619
+ {
620
+ t: "p",
621
+ text: '`to` \u662F**\u7EDD\u5BF9**\u7ED3\u675F\u65F6\u95F4\uFF08\u6D3B\u52A8\u51E0\u53F7\u51E0\u70B9\u622A\u6B62\uFF09\uFF0C`duration` \u662F**\u76F8\u5BF9**\u65F6\u957F\uFF08\u6BEB\u79D2\uFF09\uFF0C\u4ECE\u8FD9\u4E00\u5C4F\u771F\u6B63\u5C55\u793A\u7684\u90A3\u4E00\u523B\u8D77\u7B97\u3002\u300C\u6253\u5F00\u5F39\u7A97\u540E 5 \u5206\u949F\u5185\u4E0B\u5355\u300D\u8FD9\u79CD\u8425\u9500\u8BDD\u672F\u7528\u540E\u8005\uFF0C\u5199 `"duration": 300000` \u5373\u53EF\uFF0C\u4E0D\u7528\u53BB\u7B97\u7ED3\u675F\u65F6\u95F4\u3002\u4E24\u4E2A\u81F3\u5C11\u8981\u6709\u4E00\u4E2A\uFF0C\u540C\u65F6\u5199\u4EE5 `to` \u4E3A\u51C6\uFF08\u5E76\u7ED9\u51FA\u8B66\u544A\uFF09\u3002'
622
+ },
623
+ {
624
+ t: "code",
625
+ code: `{ "type": "countdown", "duration": 300000, "precision": "cs",
626
+ "onEnd": { "type": "closeAll", "reason": "countdown-end" },
627
+ "children": [ /* \u540C\u4E0A */ ] }`
628
+ },
629
+ {
630
+ t: "note",
631
+ tone: "info",
632
+ text: "\u8D77\u7B97\u65F6\u523B\u9489\u5728\u8FD0\u884C\u65F6\u91CC\uFF1A\u5207 tab\u3001\u6539 state \u5BFC\u81F4\u6574\u68F5\u6E32\u67D3\u6811\u91CD\u7B97\uFF0C\u5269\u4F59\u65F6\u95F4**\u4E0D\u4F1A**\u88AB\u5237\u56DE\u53BB\u3002\u4F46\u5173\u6389\u518D\u6253\u5F00\u5C31\u662F\u65B0\u7684\u4E00\u8F6E \u2014\u2014 \u8FD9\u6B63\u662F\u300C\u6BCF\u6B21\u6253\u5F00\u91CD\u65B0\u5012 5 \u5206\u949F\u300D\u60F3\u8981\u7684\u6548\u679C\u3002"
633
+ },
398
634
  { t: "h3", text: "to\uFF1A\u7ED3\u675F\u65F6\u95F4\u600E\u4E48\u5199" },
399
635
  { 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" },
400
636
  {
@@ -426,14 +662,14 @@ var sections2 = [
426
662
  ]
427
663
  }
428
664
  ];
429
- var countdown_default = sections2;
665
+ var countdown_default = sections3;
430
666
 
431
667
  // src/docs/sections/data-state.ts
432
668
  var userFieldRows = DEFAULT_USER_FIELDS.map((field) => [
433
669
  `\`user.${field}\``,
434
670
  USER_FIELD_LABELS[field] || ""
435
671
  ]);
436
- var sections3 = [
672
+ var sections4 = [
437
673
  {
438
674
  id: "data",
439
675
  title: "8. \u6570\u636E\u4E0E\u72B6\u6001",
@@ -601,10 +837,10 @@ var sections3 = [
601
837
  ]
602
838
  }
603
839
  ];
604
- var data_state_default = sections3;
840
+ var data_state_default = sections4;
605
841
 
606
842
  // src/docs/sections/guide-basics.ts
607
- var sections4 = [
843
+ var sections5 = [
608
844
  {
609
845
  id: "ai",
610
846
  title: "0. \u4E0D\u4F1A\u5199 JSON\uFF1F\u7528 AI \u751F\u6210",
@@ -717,10 +953,10 @@ var sections4 = [
717
953
  ]
718
954
  }
719
955
  ];
720
- var guide_basics_default = sections4;
956
+ var guide_basics_default = sections5;
721
957
 
722
958
  // src/docs/sections/guide-layout.ts
723
- var sections5 = [
959
+ var sections6 = [
724
960
  {
725
961
  id: "layout",
726
962
  title: "4. \u5E03\u5C40\u6A21\u578B\uFF08\u6700\u91CD\u8981\uFF09",
@@ -863,10 +1099,10 @@ var sections5 = [
863
1099
  ]
864
1100
  }
865
1101
  ];
866
- var guide_layout_default = sections5;
1102
+ var guide_layout_default = sections6;
867
1103
 
868
1104
  // src/docs/sections/guide-stage.ts
869
- var sections6 = [
1105
+ var sections7 = [
870
1106
  {
871
1107
  id: "stage",
872
1108
  title: "3. stage \u821E\u53F0",
@@ -879,6 +1115,8 @@ var sections6 = [
879
1115
  "layout": "flow", // absolute\uFF08\u9ED8\u8BA4\uFF09| flow
880
1116
  "mask": true, // \u662F\u5426\u6709\u534A\u900F\u660E\u906E\u7F69\uFF0C\u4EC5 popup \u6709\u6548
881
1117
  "maskClosable": false, // \u70B9\u906E\u7F69\u80FD\u5426\u5173\u95ED
1118
+ "maskStyle": { "background": "rgba(0,0,0,0.65)" }, // \u906E\u7F69\u914D\u8272\uFF08\u53EF\u9009\uFF09
1119
+ "maskAction": { "type": "open", "view": "confirm" }, // \u70B9\u906E\u7F69\u505A\u4EC0\u4E48\uFF08\u53EF\u9009\uFF09
882
1120
  "closeButton": {
883
1121
  "show": true,
884
1122
  "position": "top-right", // top-right | top-left | bottom-center
@@ -895,7 +1133,17 @@ var sections6 = [
895
1133
  ["height", "400", '\u6570\u5B57\u6309 px\uFF1B\u5199 `auto` \u65F6\u5FC5\u987B\u540C\u65F6\u8BBE `layout: "flow"`'],
896
1134
  ["layout", "absolute", "\u5B50\u8282\u70B9\u6392\u5E03\u65B9\u5F0F\uFF0C\u89C1\u7B2C 4 \u8282\u3002\u9009\u9519\u662F\u6700\u5E38\u89C1\u7684\u9519\u8BEF"],
897
1135
  ["mask", "true", "\u4EC5 popup \u751F\u6548"],
898
- ["maskClosable", "false", "\u70B9\u906E\u7F69\u5173\u95ED"],
1136
+ ["maskClosable", "false", "\u70B9\u906E\u7F69\u80FD\u4E0D\u80FD\u70B9\uFF08\u80FD\u4E0D\u80FD\u5173\uFF09"],
1137
+ [
1138
+ "maskStyle",
1139
+ "`rgba(0,0,0,0.55)`",
1140
+ "\u906E\u7F69\u81EA\u8EAB\u6837\u5F0F\uFF0C\u8D70 style \u767D\u540D\u5355\u3002\u5E38\u7528 `background` \u8C03\u6DF1\u6D45\u3001`backdropFilter` \u52A0\u6BDB\u73BB\u7483"
1141
+ ],
1142
+ [
1143
+ "maskAction",
1144
+ "\u65E0\uFF08\u5173\u6389\u8FD9\u4E00\u5C42\uFF09",
1145
+ "\u70B9\u906E\u7F69\u6267\u884C\u7684\u52A8\u4F5C\u3002\u914D\u4E86\u5C31**\u4E0D\u5173\u5C42**\uFF0C\u53EA\u6267\u884C\u52A8\u4F5C"
1146
+ ],
899
1147
  ["closeButton", "\u65E0", "\u4E0D\u5199\u5C31\u6CA1\u6709\u5173\u95ED\u6309\u94AE"],
900
1148
  ["style", "\u65E0", "\u821E\u53F0\u81EA\u8EAB\u6837\u5F0F\uFF0C\u5E38\u7528 `radius` / `maxWidth` / `background`"]
901
1149
  ]
@@ -905,6 +1153,32 @@ var sections6 = [
905
1153
  tone: "info",
906
1154
  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"
907
1155
  },
1156
+ { t: "h3", text: "\u906E\u7F69\uFF1A\u6539\u914D\u8272\u3001\u6539\u70B9\u51FB\u884C\u4E3A" },
1157
+ {
1158
+ t: "p",
1159
+ text: "\u906E\u7F69\u9ED8\u8BA4\u662F `rgba(0, 0, 0, 0.55)` \u7684\u7EAF\u8272\u3002`maskStyle` \u8986\u76D6\u5B83\uFF0C\u8D70\u7684\u662F\u7B2C 7 \u8282\u90A3\u4EFD style \u767D\u540D\u5355\uFF0C\u5199\u522B\u7684\u5C5E\u6027\u4F1A\u88AB\u5FFD\u7565\uFF08\u4FDD\u5B58\u65F6\u7ED9\u8B66\u544A\uFF09\u3002\u94FA\u6EE1\u3001\u5C42\u7EA7\u8FD9\u4E9B\u5730\u57FA\u7531\u89E3\u91CA\u5668\u7ED9\uFF0C\u914D\u7F6E\u76D6\u4E0D\u6389\u3002"
1160
+ },
1161
+ {
1162
+ t: "code",
1163
+ code: `"stage": {
1164
+ "mask": true,
1165
+ "maskClosable": true,
1166
+ // \u66F4\u91CD\u7684\u906E\u7F69 + \u6BDB\u73BB\u7483\uFF08\u80CC\u540E\u9875\u9762\u7CCA\u6389\uFF0C\u5F39\u7A97\u66F4\u805A\u7126\uFF09
1167
+ "maskStyle": { "background": "rgba(0,0,0,0.65)", "backdropFilter": "blur(4px)" },
1168
+ // \u70B9\u906E\u7F69\u4E0D\u76F4\u63A5\u5173\uFF0C\u5148\u5F39\u4E8C\u6B21\u633D\u7559
1169
+ "maskAction": { "type": "open", "view": "confirm", "mode": "stack" }
1170
+ }`
1171
+ },
1172
+ {
1173
+ t: "note",
1174
+ tone: "warn",
1175
+ text: "`maskClosable` \u548C `maskAction` \u5404\u7BA1\u4E00\u4EF6\u4E8B\uFF1A\u524D\u8005\u51B3\u5B9A**\u906E\u7F69\u54CD\u4E0D\u54CD\u5E94\u70B9\u51FB**\uFF0C\u540E\u8005\u51B3\u5B9A**\u70B9\u4E86\u4E4B\u540E\u505A\u4EC0\u4E48**\u3002\u6240\u4EE5 `maskClosable: false` \u65F6\u906E\u7F69\u4ECD\u7136\u70B9\u4E0D\u52A8\uFF0C\u5149\u914D `maskAction` \u6CA1\u6709\u7528\uFF08\u4FDD\u5B58\u65F6\u4F1A\u63D0\u9192\uFF09\u3002\u60F3\u300C\u70B9\u906E\u7F69\u5F39\u633D\u7559\u300D\u5C31\u4E24\u4E2A\u4E00\u8D77\u5199\u3002"
1176
+ },
1177
+ {
1178
+ t: "note",
1179
+ tone: "info",
1180
+ text: "`maskStyle` \u548C `maskAnimate`\uFF08\u7B2C 15 \u8282\uFF09\u4E92\u4E0D\u5E72\u6270\uFF1A\u52A8\u753B\u7684 `animation` \u6C38\u8FDC\u6392\u5728\u6700\u540E\uFF0C\u6539\u914D\u8272\u4E0D\u4F1A\u628A\u6DE1\u5165\u5F04\u4E22\u3002"
1181
+ },
908
1182
  { t: "h3", text: "closeButton \u5173\u95ED\u6309\u94AE" },
909
1183
  {
910
1184
  t: "code",
@@ -917,7 +1191,9 @@ var sections6 = [
917
1191
  // 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
918
1192
  "icon": "\u2715", // \u53EF\u9009\uFF1A\u6539\u6210\u6587\u672C\u5B57\u7B26 / emoji
919
1193
  "image": "https://...", // \u53EF\u9009\uFF1A\u6539\u6210\u56FE\u7247\uFF0C\u5199\u4E86\u5C31\u76D6\u8FC7 icon
920
- "style": { "background": "rgba(0,0,0,0.35)", "color": "#fff", "fontSize": 18 }
1194
+ "style": { "background": "rgba(0,0,0,0.35)", "color": "#fff", "fontSize": 18 },
1195
+ // \u53EF\u9009\uFF1A\u70B9\u5B83\u505A\u4EC0\u4E48\u3002\u4E0D\u5199 = \u5173\u6389\u8FD9\u4E00\u5C42\uFF1B\u5199\u4E86 = \u53EA\u6267\u884C\u8FD9\u4E2A\u52A8\u4F5C\uFF0C\u4E0D\u5173\u5C42
1196
+ "action": { "type": "open", "view": "confirm", "mode": "stack" }
921
1197
  }`
922
1198
  },
923
1199
  {
@@ -934,9 +1210,19 @@ var sections6 = [
934
1210
  "**\u53EF\u9009\u8986\u76D6\u9879**\u3002\u5199\u4E86\u5C31\u7528\u8FD9\u4E2A\u6587\u672C\u5B57\u7B26 / emoji \u4EE3\u66FF\u5185\u7F6E\u56FE\u6807"
935
1211
  ],
936
1212
  ["image", "\u65E0", "\u56FE\u7247\u56FE\u6807\uFF0C\u4F1A\u94FA\u6EE1\u6309\u94AE\uFF08`object-fit: contain`\uFF09"],
937
- ["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"]
1213
+ ["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"],
1214
+ [
1215
+ "action",
1216
+ "\u65E0\uFF08\u5173\u6389\u8FD9\u4E00\u5C42\uFF09",
1217
+ "\u70B9\u5B83\u6267\u884C\u7684\u52A8\u4F5C\u3002\u914D\u4E86\u5C31**\u4E0D\u5173\u5C42**\uFF0C\u300C\u70B9 \u2715 \u5148\u5F39\u4E8C\u6B21\u633D\u7559\u300D\u9760\u5B83"
1218
+ ]
938
1219
  ]
939
1220
  },
1221
+ {
1222
+ t: "note",
1223
+ tone: "warn",
1224
+ text: '\u914D\u4E86 `action` \u4E4B\u540E\u8FD9\u4E2A \u2715 **\u4E0D\u4F1A\u518D\u81EA\u52A8\u5173\u95ED\u5F39\u7A97**\u2014\u2014\u60F3\u5728\u52A8\u4F5C\u91CC\u987A\u5E26\u5173\u6389\uFF0C\u81EA\u5DF1\u5199\u8FDB\u53BB\uFF08`{ "type": "sequence", "actions": [ {"type":"track", \u2026}, {"type":"close", "reason":"user-dismiss"} ] }`\uFF09\u3002\u5FD8\u4E86\u5199\u7684\u8868\u73B0\u662F\u300C\u70B9 \u2715 \u6CA1\u53CD\u5E94\u300D\u3002'
1225
+ },
940
1226
  { t: "h3", text: "\u56FE\u6807\u753B\u4EC0\u4E48\uFF1A\u4E09\u9009\u4E00\uFF0C\u4F18\u5148\u7EA7\u56FA\u5B9A" },
941
1227
  {
942
1228
  t: "table",
@@ -1027,7 +1313,7 @@ var sections6 = [
1027
1313
  ]
1028
1314
  }
1029
1315
  ];
1030
- var guide_stage_default = sections6;
1316
+ var guide_stage_default = sections7;
1031
1317
 
1032
1318
  // src/docs/sections/nodes.ts
1033
1319
  var containerRows = [
@@ -1057,7 +1343,7 @@ var contentRows = [
1057
1343
  var styleRows = [
1058
1344
  [
1059
1345
  "\u6587\u5B57",
1060
- "`color` `fontSize` `fontWeight` `fontFamily` `lineHeight` `letterSpacing` `textAlign` `textDecoration` `whiteSpace` `fontVariantNumeric`"
1346
+ "`color` `fontSize` `fontWeight` `fontFamily` `fontStyle` `lineHeight` `letterSpacing` `textAlign` `textDecoration` `whiteSpace` `fontVariantNumeric` `textShadow`"
1061
1347
  ],
1062
1348
  [
1063
1349
  "\u80CC\u666F",
@@ -1071,11 +1357,15 @@ var styleRows = [
1071
1357
  ["flex \u5BB9\u5668", "`direction` `gap` `wrap` `align` `justify`"],
1072
1358
  [
1073
1359
  "flex \u5B50\u9879 / \u5C3A\u5BF8",
1074
- "`flex` `alignSelf` `width` `height` `minWidth` `minHeight` `maxWidth` `maxHeight`"
1360
+ "`flex` `alignSelf` `flexShrink` `width` `height` `minWidth` `minHeight` `maxWidth` `maxHeight`"
1361
+ ],
1362
+ [
1363
+ "\u52A8\u6548 / \u5C42\u7EA7\uFF08\u89C1\u7B2C 15 \u8282\uFF09",
1364
+ "`transform` `transformOrigin` `transition` `animationPlayState` `backdropFilter` `zIndex` `pointerEvents`"
1075
1365
  ],
1076
1366
  ["\u56FE\u7247 / \u6BD4\u4F8B", "`objectFit` `aspectRatio`"]
1077
1367
  ];
1078
- var sections7 = [
1368
+ var sections8 = [
1079
1369
  {
1080
1370
  id: "nodes",
1081
1371
  title: "6. \u8282\u70B9\u7C7B\u578B",
@@ -1172,7 +1462,10 @@ var sections7 = [
1172
1462
  '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"`',
1173
1463
  "\u5927\u5B57\u53F7\u6587\u672C\u8981\u663E\u5F0F\u5199 `lineHeight`\uFF0C\u5426\u5219\u9ED8\u8BA4\u884C\u9AD8\u4F1A\u628A\u5BB9\u5668\u6491\u9AD8",
1174
1464
  '\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',
1175
- "`style` \u7684\u503C\u4E5F\u652F\u6301 `{{ }}` \u63D2\u503C\uFF0C\u9009\u4E2D\u6001\u5C31\u662F\u9760\u8FD9\u4E2A\u505A\u7684"
1465
+ "`style` \u7684\u503C\u4E5F\u652F\u6301 `{{ }}` \u63D2\u503C\uFF0C\u9009\u4E2D\u6001\u5C31\u662F\u9760\u8FD9\u4E2A\u505A\u7684",
1466
+ "`zIndex` \u53EA\u5141\u8BB8 0~10\uFF0C\u8D85\u51FA\u4F1A\u88AB\u5939\u5230\u533A\u95F4\u5185\uFF1B\u6CA1\u6709 `position`\uFF1A\u7EDD\u5BF9\u5B9A\u4F4D\u7EDF\u4E00\u7528 `rect`",
1467
+ "\u914D\u4E86 `zIndex` \u7684\u8282\u70B9\u4F1A\u81EA\u52A8\u5E26\u4E0A\u5B9A\u4F4D\u65B9\u5F0F \u2014\u2014 `z-index` \u5BF9\u9759\u6001\u5143\u7D20\u662F\u6B7B\u58F0\u660E\uFF0C\u4E0D\u8FD9\u4E48\u505A\uFF0C\u9760\u8D1F `marginTop` \u5F80\u4E0A\u76D6\u7684\u5757\uFF08\u5982\u538B\u4F4F\u7EA2\u5934\u4E0B\u6CBF\u7684\u767D\u8272\u4E3B\u4F53\uFF09\u6C38\u8FDC\u76D6\u4E0D\u4F4F\u524D\u4E00\u4E2A\u5144\u5F1F\u8282\u70B9",
1468
+ '\u5149\u6655\u3001\u626B\u5149\u8FD9\u7C7B\u538B\u5728\u6309\u94AE\u4E0A\u7684\u88C5\u9970\u5C42\u8981\u5199 `pointerEvents: "none"`\uFF0C\u5426\u5219\u4F1A\u6321\u4F4F\u70B9\u51FB'
1176
1469
  ]
1177
1470
  },
1178
1471
  {
@@ -1188,10 +1481,10 @@ var sections7 = [
1188
1481
  ]
1189
1482
  }
1190
1483
  ];
1191
- var nodes_default = sections7;
1484
+ var nodes_default = sections8;
1192
1485
 
1193
1486
  // src/docs/sections/views.ts
1194
- var sections8 = [
1487
+ var sections9 = [
1195
1488
  {
1196
1489
  id: "views",
1197
1490
  title: "12. \u591A\u89C6\u56FE\uFF08\u4E00\u4EFD\u914D\u7F6E\u91CC\u653E\u51E0\u4E2A\u5F39\u7A97\uFF09",
@@ -1343,10 +1636,10 @@ var sections8 = [
1343
1636
  ]
1344
1637
  }
1345
1638
  ];
1346
- var views_default = sections8;
1639
+ var views_default = sections9;
1347
1640
 
1348
1641
  // src/docs/sections/index.ts
1349
- var sections9 = [].concat(
1642
+ var sections10 = [].concat(
1350
1643
  guide_basics_default,
1351
1644
  // 0~2
1352
1645
  guide_stage_default,
@@ -1361,13 +1654,42 @@ var sections9 = [].concat(
1361
1654
  // 10
1362
1655
  action_default,
1363
1656
  // 11
1364
- views_default
1657
+ views_default,
1365
1658
  // 12~14
1659
+ animation_default
1660
+ // 15
1366
1661
  );
1367
- var sections_default = sections9;
1662
+ var sections_default = sections10;
1368
1663
 
1369
1664
  // src/docs/meta.ts
1370
1665
  var changelog = [
1666
+ {
1667
+ date: "2026-09-01",
1668
+ items: [
1669
+ "`zIndex` \u73B0\u5728\u4F1A\u81EA\u52A8\u5E26\u4E0A\u5B9A\u4F4D\u65B9\u5F0F\uFF1A`z-index` \u5BF9\u9759\u6001\u5143\u7D20\u662F\u6B7B\u58F0\u660E\uFF0C\u5199\u4E86\u4E0D\u751F\u6548\u3002\u6D41\u5F0F\u6392\u7248\u91CC\u9760\u8D1F `marginTop` \u5F80\u4E0A\u76D6\u7684\u5757\uFF08\u5982\u538B\u4F4F\u7EA2\u5934\u4E0B\u6CBF\u7684\u767D\u8272\u4E3B\u4F53\uFF09\u5FC5\u987B\u6709\u5C42\u7EA7\u624D\u76D6\u5F97\u4F4F\uFF0C\u914D\u4E86 `zIndex` \u5373\u53EF\uFF0C\u4E0D\u7528\uFF08\u4E5F\u6CA1\u6CD5\uFF09\u53E6\u914D `position`",
1670
+ "\u3010\u4FEE\u590D\u3011\u5F39\u51FA\u7B2C\u4E8C\u5C42\u5F39\u7A97\uFF08\u5982\u4E8C\u6B21\u633D\u7559\uFF09\u518D\u5173\u6389\u65F6\uFF0C\u4E0B\u5C42\u5F39\u7A97\u7684\u906E\u7F69\u5165\u573A\u52A8\u753B\u4F1A\u91CD\u64AD\u4E00\u904D\uFF0C\u80CC\u666F\u300C\u95EA\u300D\u4E00\u4E0B\u91CD\u65B0\u6DE1\u5165\u3002\u73B0\u5DF2\u4FEE\u6B63\uFF0C\u914D\u7F6E\u5199\u6CD5\u4E0D\u7528\u6539",
1671
+ "\u3010\u4FEE\u590D\u3011\u5207\u89C6\u56FE / \u5207 tab / `visibleWhen` \u7FFB\u8F6C\u65F6\uFF0C\u9875\u9762\u4E0A\u6B63\u5728\u8DD1\u7684\u5FAA\u73AF\u52A8\u753B\u4F1A\u5168\u90E8\u91CD\u5934\u64AD\u4E00\u904D\u3002\u73B0\u5DF2\u4FEE\u6B63",
1672
+ "`hoverStyle` \u91CC\u7684 `{{ }}` \u53EA\u5728\u9996\u5C4F\u6C42\u503C\u4E00\u6B21\uFF0C\u4E4B\u540E\u4E0D\u968F state \u53D8\u5316\u2014\u2014\u8981\u8DDF\u7740\u72B6\u6001\u53D8\u7684\u6837\u5F0F\u5199\u5728 `style` \u91CC\uFF08\u90A3\u6761\u8DEF\u5F84\u6BCF\u5E27\u90FD\u4F1A\u91CD\u7B97\uFF09"
1673
+ ]
1674
+ },
1675
+ {
1676
+ date: "2026-08-31",
1677
+ items: [
1678
+ "\u65B0\u589E\u52A8\u753B\u80FD\u529B\uFF08\u7B2C 15 \u8282\uFF09\uFF1A\u9876\u5C42 keyframes \u5B9A\u4E49\u5173\u952E\u5E27\uFF0C\u8282\u70B9 / stage / \u906E\u7F69 / \u5173\u95ED\u6309\u94AE\u4E0A\u7528 animate \u5F15\u7528\uFF0C\u652F\u6301\u5EF6\u8FDF\u3001\u65E0\u9650\u5FAA\u73AF\u3001\u65B9\u5411\u4E0E\u586B\u5145\u6A21\u5F0F",
1679
+ "\u65B0\u589E hoverStyle\uFF1A\u4E0E style \u540C\u4E00\u5957\u5C5E\u6027\u767D\u540D\u5355\uFF0C\u53EA\u5728\u9F20\u6807\u60AC\u505C\u65F6\u751F\u6548\uFF08\u89E6\u5C4F\u6CA1\u6709 hover\uFF0C\u522B\u628A\u4FE1\u606F\u653E\u8FDB\u53BB\uFF09",
1680
+ "style \u767D\u540D\u5355\u65B0\u589E transform / transformOrigin / transition / backdropFilter / textShadow / zIndex\uFF080~10\uFF09 / pointerEvents / flexShrink / fontStyle\uFF08\u7B2C 7 \u8282\uFF09",
1681
+ "\u4ECD\u7136\u4E0D\u653E\u5F00 position \u4E0E\u81EA\u7531 CSS\uFF1A\u7EDD\u5BF9\u5B9A\u4F4D\u7528 rect\uFF0C\u5F39\u7A97\u94FA\u6EE1\u89C6\u53E3\u7531\u89E3\u91CA\u5668\u5B8C\u6210\u2014\u2014\u653E\u5F00\u7B49\u4E8E\u628A\u300C\u5168\u5C4F\u8986\u76D6\u9493\u9C7C\u300D\u4EA4\u56DE\u7ED9\u914D\u7F6E\uFF08\u7B2C 15 \u8282\u6709\u5B8C\u6574\u7406\u7531\uFF09",
1682
+ "\u7CFB\u7EDF\u5F00\u4E86\u300C\u51CF\u5C11\u52A8\u6001\u6548\u679C\u300D\u65F6\u81EA\u52A8\u5173\u6389\u8FD9\u4EFD\u7269\u6599\u7684\u5168\u90E8\u52A8\u753B\u4E0E\u8FC7\u6E21\uFF0C\u914D\u7F6E\u91CC\u4E0D\u7528\u7BA1\uFF0C\u4E5F\u6CA1\u6709\u5F00\u5173\u80FD\u7ED5\u8FC7",
1683
+ "countdown \u65B0\u589E duration\uFF08\u76F8\u5BF9\u65F6\u957F\uFF0C\u6BEB\u79D2\uFF0C\u4ECE\u8FD9\u4E00\u5C4F\u5C55\u793A\u90A3\u4E00\u523B\u8D77\u7B97\uFF09\uFF1A\u300C\u6BCF\u6B21\u6253\u5F00\u91CD\u65B0\u5012 5 \u5206\u949F\u300D\u4E0D\u7528\u518D\u53BB\u7B97\u7ED3\u675F\u65F6\u95F4\uFF1Bto \u4E0E duration \u81F3\u5C11\u8981\u6709\u4E00\u4E2A\uFF08\u7B2C 10 \u8282\uFF09",
1684
+ "\u65B0\u589E\u793A\u4F8B \u246A 4 \u6298\u4E13\u5C5E\u793C\u5305\u3001\u246B 1 \u5206\u94B1\u534A\u5E74\u5361\uFF1A\u642C\u5BB6\u6210\u529F\u9875\u4E24\u4E2A\u7EBF\u4E0A\u5F39\u7A97\u7684\u4E00\u6BD4\u4E00\u590D\u523B\uFF0C\u542B\u5165\u573A / \u547C\u5438 / \u626B\u5149 / \u4EA4\u9519\u5165\u573A / \u4E8C\u6B21\u633D\u7559\u5F39\u7A97\uFF0C\u8981\u505A\u52A8\u753B\u5F39\u7A97\u6539\u8FD9\u4E24\u4EFD\u6700\u5FEB",
1685
+ "AI \u63D0\u793A\u8BCD\u8865\u4E0A\u52A8\u753B\u4E0E hover \u7684\u786C\u89C4\u5219\uFF0C\u81EA\u68C0\u6E05\u5355\u52A0\u4E86\u5173\u952E\u5E27\u5F15\u7528\u4E0E\u88C5\u9970\u5C42\u70B9\u51FB\u7A7F\u900F\u4E24\u6761",
1686
+ "\u65B0\u589E stage.maskStyle\uFF08\u7B2C 3 \u8282\uFF09\uFF1A\u906E\u7F69\u914D\u8272\u7EC8\u4E8E\u80FD\u6539\u4E86\uFF0C\u8D70 style \u767D\u540D\u5355\uFF0C\u5E38\u7528 background \u8C03\u6DF1\u6D45 + backdropFilter \u52A0\u6BDB\u73BB\u7483\uFF1B\u4E0D\u5199\u4ECD\u662F\u5185\u7F6E\u7684 rgba(0,0,0,0.55)",
1687
+ "\u65B0\u589E stage.maskAction\uFF08\u7B2C 3 \u8282\uFF09\uFF1A\u70B9\u906E\u7F69\u6267\u884C\u6307\u5B9A\u52A8\u4F5C\u800C\u4E0D\u662F\u76F4\u63A5\u5173\uFF0C\u300C\u70B9\u906E\u7F69\u5148\u5F39\u4E8C\u6B21\u633D\u7559\u300D\u4E0D\u7528\u518D\u81EA\u5DF1\u94FA\u4E00\u5C42\u900F\u660E\u8282\u70B9\u3002\u5B83\u4E0E maskClosable \u5404\u7BA1\u4E00\u4EF6\u4E8B\u2014\u2014\u906E\u7F69\u4E0D\u53EF\u70B9\u65F6\u914D\u4E86\u4E5F\u4E0D\u89E6\u53D1\uFF0C\u4FDD\u5B58\u65F6\u4F1A\u63D0\u9192",
1688
+ "\u65B0\u589E stage.closeButton.action\uFF08\u7B2C 3 \u8282\uFF09\uFF1A\u5185\u7F6E \u2715 \u4E5F\u80FD\u63A5\u52A8\u4F5C\u4E86\uFF0C\u4EE5\u524D\u60F3\u300C\u70B9 \u2715 \u5F39\u633D\u7559\u300D\u53EA\u80FD\u653E\u5F03\u5185\u7F6E\u6309\u94AE\u3001\u81EA\u5DF1\u6446\u4E00\u4E2A\u6587\u672C \u2715\uFF08\u5B57\u5F62\u504F\u4E0B\u3001\u8FD8\u5F97\u624B\u5199\u5B9A\u4F4D\uFF09\u3002\u914D\u4E86 action \u5C31\u4E0D\u518D\u81EA\u52A8\u5173\u5C42\uFF0C\u8981\u5173\u81EA\u5DF1\u628A close \u5199\u8FDB\u52A8\u4F5C\u91CC",
1689
+ 'style \u767D\u540D\u5355\u65B0\u589E animationPlayState\uFF08\u7B2C 15 \u8282\uFF09\uFF1A\u5728 hoverStyle \u91CC\u5199 "paused" \u5373\u53EF\u8BA9\u5FAA\u73AF\u52A8\u753B\u5728\u60AC\u505C\u65F6\u505C\u4F4F\uFF0C\u79FB\u5F00\u7EE7\u7EED',
1690
+ "\u793A\u4F8B \u246A\u246B \u6539\u7528\u5185\u7F6E\u5173\u95ED\u6309\u94AE + action\uFF0C\u5E76\u6309\u539F\u9875\u9762\u914D\u4E0A rgba(0,0,0,0.65) + 4px \u6BDB\u73BB\u7483\u7684\u906E\u7F69\u3001\u70B9\u906E\u7F69\u5F39\u633D\u7559\uFF1B\u246B \u7684 CTA \u8865\u4E0A\u60AC\u505C\u6682\u505C\u547C\u5438"
1691
+ ]
1692
+ },
1371
1693
  {
1372
1694
  date: "2026-08-24",
1373
1695
  items: [
@@ -3213,76 +3535,1103 @@ var drawerBottomBanner = createDrawerBanner({
3213
3535
  url: "https://maibaole.example.com/support"
3214
3536
  });
3215
3537
 
3216
- // src/docs/examples/index.ts
3217
- var HOTSPOT_BG = "rgba(255,68,51,0.16)";
3218
- var imageHotspot = {
3219
- version: 1,
3220
- type: "popup",
3221
- meta: { name: "\u6574\u56FE\u70ED\u533A\u5F39\u7A97" },
3222
- stage: {
3223
- // 窄屏时跟着父级收,最宽不超过 420
3224
- width: "calc(100% - 48px)",
3225
- height: 520,
3226
- mask: true,
3227
- maskClosable: true,
3228
- // 关闭按钮放到弹窗正下方外侧:offset 的 y 写负值即可,不会被圆角裁掉
3229
- closeButton: {
3230
- show: true,
3231
- position: "bottom-center",
3232
- offset: [0, -46],
3233
- size: 34,
3234
- // 不写 icon / image,用内置的矢量 × 图标(跟着 style.color 走)
3235
- style: {
3236
- background: "rgba(0,0,0,0.4)",
3237
- color: "#ffffff",
3238
- fontSize: 18,
3239
- borderWidth: 1,
3240
- borderStyle: "solid",
3241
- borderColor: "rgba(255,255,255,0.55)"
3242
- }
3243
- },
3244
- style: { radius: 12, maxWidth: 420 },
3245
- // 曝光埋点:数据就绪、弹窗真正展示时触发一次
3246
- onShow: { type: "track", event: "popup_show", params: { popup: "image_hotspot" } },
3247
- // 关闭埋点:点 X、点遮罩、点「不再提醒」都会触发,用 closeReason 区分
3248
- onClose: {
3249
- type: "track",
3250
- event: "popup_close",
3251
- params: { popup: "image_hotspot", reason: "{{ closeReason }}" }
3252
- }
3253
- },
3254
- nodes: [
3255
- {
3256
- // 背景图用百分比铺满舞台,舞台宽度变了也不用改配置
3257
- id: "bg",
3258
- type: "image",
3259
- rect: [0, 0, "100%", "100%"],
3260
- src: "https://picsum.photos/id/1015/420/520"
3538
+ // src/docs/examples/gift-give-up.ts
3539
+ var GIFT_MASK_STYLE = {
3540
+ background: "rgba(0,0,0,0.65)",
3541
+ backdropFilter: "blur(4px)"
3542
+ };
3543
+ function createGiveUpView(options) {
3544
+ return {
3545
+ type: "popup",
3546
+ stage: {
3547
+ width: 360,
3548
+ height: "auto",
3549
+ layout: "flow",
3550
+ mask: true,
3551
+ // 点遮罩 = 关掉栈顶这一层 = 退回主弹窗,正是原页面 hideConfirm 的行为:
3552
+ // 挽留层的 close 不会关掉整份物料,也不产生上报。
3553
+ // 【注意】这一层**不配 maskAction**:它的点击本来就该是「退回主弹窗」,
3554
+ // 配了动作反而会把这个退栈行为顶掉
3555
+ maskClosable: true,
3556
+ // 与主弹窗同一份,弹出这一层时背景不能有落差,见 GIFT_MASK_STYLE
3557
+ maskStyle: GIFT_MASK_STYLE,
3558
+ style: { radius: 16, background: "#ffffff" },
3559
+ onShow: { type: "track", event: `${options.giveUpEvent}_show` }
3261
3560
  },
3262
- // 热区想放几个放几个,位置各自由 rect 决定,互不影响。
3263
- // 热区 = 一个透明的 box + action,调试时把 background 的透明度调高就能看见框。
3264
- {
3265
- id: "hotspot-rule",
3266
- type: "box",
3267
- // 右上角「活动规则」
3268
- rect: ["62%", 24, "30%", 30],
3269
- style: { radius: 15, background: HOTSPOT_BG, cursor: "pointer" },
3270
- action: {
3271
- type: "sequence",
3272
- actions: [
3273
- { type: "track", event: "popup_click", params: { area: "rule" } },
3561
+ nodes: [
3562
+ {
3563
+ type: "flex",
3564
+ style: { direction: "column", align: "center", padding: "28px 24px" },
3565
+ children: [
3566
+ { type: "text", content: "\u{1F622}", style: { fontSize: 48, marginBottom: 12 } },
3274
3567
  {
3275
- type: "navigate",
3276
- url: "https://maibaole.example.com/rule",
3277
- target: "_blank"
3278
- }
3279
- ]
3280
- }
3281
- },
3282
- {
3283
- id: "hotspot-plan-a",
3284
- type: "box",
3285
- // 中部左半:套餐 A
3568
+ type: "text",
3569
+ content: "\u771F\u7684\u8981\u653E\u5F03\u5417\uFF1F",
3570
+ style: { fontSize: 18, fontWeight: "700", color: "#1d2129" }
3571
+ },
3572
+ {
3573
+ type: "text",
3574
+ content: "\u60A8\u5C06\u635F\u5931\u793C\u5305\u6536\u76CA",
3575
+ style: {
3576
+ margin: "12px 0 20px",
3577
+ fontSize: 13,
3578
+ lineHeight: 1.6,
3579
+ color: "#4e5969",
3580
+ textAlign: "center"
3581
+ }
3582
+ },
3583
+ {
3584
+ type: "flex",
3585
+ style: { width: "100%", gap: 12 },
3586
+ children: [
3587
+ {
3588
+ type: "button",
3589
+ text: "\u5FCD\u75DB\u653E\u5F03",
3590
+ style: {
3591
+ flex: "1",
3592
+ padding: 12,
3593
+ radius: 8,
3594
+ background: "#f7f8fa",
3595
+ color: "#86909c",
3596
+ fontSize: 14,
3597
+ fontWeight: "600"
3598
+ },
3599
+ hoverStyle: { background: "#f0f1f5" },
3600
+ // closeAll:挽留层和主弹窗一起关掉,只 close 的话会退回主弹窗
3601
+ action: {
3602
+ type: "sequence",
3603
+ actions: [
3604
+ { type: "track", event: options.giveUpEvent },
3605
+ { type: "closeAll", reason: "user-give-up" }
3606
+ ]
3607
+ }
3608
+ },
3609
+ {
3610
+ type: "button",
3611
+ text: "\u9886\u53D6\u793C\u5305",
3612
+ style: {
3613
+ flex: "1",
3614
+ padding: 12,
3615
+ radius: 8,
3616
+ background: "linear-gradient(90deg,#ff7a00 0%,#f53f3f 100%)",
3617
+ color: "#ffffff",
3618
+ fontSize: 14,
3619
+ fontWeight: "600"
3620
+ },
3621
+ hoverStyle: { transform: "translateY(-1px)" },
3622
+ action: {
3623
+ type: "sequence",
3624
+ actions: [
3625
+ {
3626
+ type: "track",
3627
+ event: options.claimEvent,
3628
+ params: { from: "confirm" }
3629
+ },
3630
+ { type: "navigate", url: options.url }
3631
+ ]
3632
+ }
3633
+ }
3634
+ ]
3635
+ }
3636
+ ]
3637
+ }
3638
+ ]
3639
+ };
3640
+ }
3641
+
3642
+ // src/docs/examples/gift-v6-head.ts
3643
+ var HEAD_HEIGHT = 300;
3644
+ function createHead() {
3645
+ return {
3646
+ type: "box",
3647
+ style: {
3648
+ width: "100%",
3649
+ height: HEAD_HEIGHT,
3650
+ background: "linear-gradient(180deg,#ff4d4d 0%,#d93025 100%)",
3651
+ overflow: "hidden"
3652
+ },
3653
+ children: [
3654
+ {
3655
+ // 左上角的白色光晕,原页面是 .v6-modal-top::before
3656
+ type: "box",
3657
+ rect: [-40, -40, "calc(100% + 80px)", "calc(100% + 80px)"],
3658
+ style: {
3659
+ background: "radial-gradient(circle at 30% 30%, rgba(255,255,255,0.2) 0%, transparent 50%)",
3660
+ // 装饰层必须让点击穿透,否则整块红头都点不动
3661
+ pointerEvents: "none"
3662
+ }
3663
+ },
3664
+ {
3665
+ type: "flex",
3666
+ rect: [0, 0, "100%", "auto"],
3667
+ style: { direction: "column", align: "center", padding: "20px 32px 0" },
3668
+ children: [
3669
+ {
3670
+ type: "text",
3671
+ content: "\u{1F389} \u642C\u5BB6\u6210\u529F \xB7 \u7CFB\u7EDF\u4E13\u5C5E\u5956\u52B1",
3672
+ style: {
3673
+ alignSelf: "center",
3674
+ padding: "4px 16px",
3675
+ marginBottom: 12,
3676
+ fontSize: 12,
3677
+ color: "#ffffff",
3678
+ background: "rgba(255,255,255,0.25)",
3679
+ radius: 12
3680
+ }
3681
+ },
3682
+ {
3683
+ type: "text",
3684
+ content: "\u606D\u559C\uFF01\u60A8\u83B7\u5F97\u4E00\u4EFD\u4E13\u5C5E\u793C\u5305",
3685
+ style: {
3686
+ fontSize: 24,
3687
+ fontWeight: "900",
3688
+ lineHeight: 1.3,
3689
+ color: "#ffffff",
3690
+ textAlign: "center"
3691
+ }
3692
+ },
3693
+ {
3694
+ type: "text",
3695
+ content: "\u4EC5\u9650\u521A\u5B8C\u6210\u642C\u5BB6\u7684\u7528\u6237",
3696
+ style: {
3697
+ marginTop: 6,
3698
+ fontSize: 13,
3699
+ color: "#ffffff",
3700
+ opacity: "0.9"
3701
+ }
3702
+ },
3703
+ {
3704
+ type: "flex",
3705
+ style: {
3706
+ alignSelf: "center",
3707
+ justify: "center",
3708
+ align: "center",
3709
+ width: 110,
3710
+ height: 110,
3711
+ marginTop: 16,
3712
+ radius: "50%",
3713
+ background: "linear-gradient(135deg,#fff5e6 0%,#ffd591 100%)",
3714
+ shadow: "0 8px 24px rgba(0,0,0,0.2), inset 0 4px 8px rgba(255,255,255,0.5)"
3715
+ },
3716
+ animate: {
3717
+ name: "floatY",
3718
+ duration: 3e3,
3719
+ easing: "ease-in-out",
3720
+ iteration: "infinite"
3721
+ },
3722
+ children: [
3723
+ {
3724
+ type: "text",
3725
+ content: "4\u6298",
3726
+ style: {
3727
+ fontSize: 40,
3728
+ fontWeight: "900",
3729
+ lineHeight: 1,
3730
+ color: "#d93025"
3731
+ }
3732
+ }
3733
+ ]
3734
+ }
3735
+ ]
3736
+ }
3737
+ ]
3738
+ };
3739
+ }
3740
+
3741
+ // src/docs/examples/gift-v6.ts
3742
+ var PURCHASE_URL = "https://fuwu.jinritemai.com/detail?from=isv.promotion&service_id=21361&promotionIdCode=CgYIASAHKAESXgpc6AasSWVCtjAmMcE%2B00V9l5ZRXgoh0wWk5uc6B7Z8JN4ILp0xJ0CmyiOhAVTvTbl5yoLE1muPBxT7P5lZMT1SYVI8RleaK62xu%2FEwuJHpwa0hmOuDn0wllsRvaLcaAA%3D%3D";
3743
+ var NUM_STYLE = {
3744
+ minWidth: 26,
3745
+ padding: "2px 6px",
3746
+ fontFamily: "'Courier New', monospace",
3747
+ fontSize: 13,
3748
+ fontWeight: "700",
3749
+ color: "#ffffff",
3750
+ textAlign: "center",
3751
+ background: "#1d2129",
3752
+ radius: 4,
3753
+ fontVariantNumeric: "tabular-nums"
3754
+ };
3755
+ function giftRow(highlight, text) {
3756
+ return {
3757
+ type: "flex",
3758
+ style: { align: "center", gap: 8, padding: "4px 0" },
3759
+ children: [
3760
+ { type: "text", content: "\u{1F381}", style: { fontSize: 14 } },
3761
+ {
3762
+ type: "flex",
3763
+ // gap 跟外层一致取 8:原页面 li 本身就是 `display:flex; gap:8`,
3764
+ // 🎁、`<b>4折</b>`、说明文案是同一层的三个 flex 项,三段间距相等。
3765
+ // 这里拆成两层是为了让说明文案能独立换行,间距必须还原成 8,
3766
+ // 写 4 会明显比行首那一格紧、看着像没对齐
3767
+ style: { flex: "1", align: "baseline", gap: 8 },
3768
+ children: [
3769
+ {
3770
+ type: "text",
3771
+ content: highlight,
3772
+ style: { fontSize: 11, fontWeight: "700", color: "#d93025" }
3773
+ },
3774
+ { type: "text", content: text, style: { fontSize: 11, color: "#4e5969" } }
3775
+ ]
3776
+ }
3777
+ ]
3778
+ };
3779
+ }
3780
+ var giftV6 = {
3781
+ version: 1,
3782
+ meta: { name: "\u590D\u523B\u7EBF\u4E0A\u5F39\u7A97 \xB7 4 \u6298\u4E13\u5C5E\u793C\u5305\uFF08\u52A8\u753B + \u4E8C\u6B21\u633D\u7559\uFF09" },
3783
+ entry: "main",
3784
+ // 关键帧库全配置共用,两个视图都能引用
3785
+ keyframes: {
3786
+ /** 遮罩淡入 */
3787
+ fadeIn: { from: { opacity: "0" }, to: { opacity: "1" } },
3788
+ /** 弹窗回弹放大,配 cubic-bezier 的超调曲线才有「弹一下」的手感 */
3789
+ zoomIn: {
3790
+ from: { opacity: "0", transform: "scale(0.7)" },
3791
+ to: { opacity: "1", transform: "scale(1)" }
3792
+ },
3793
+ /** 红包上下浮动 */
3794
+ floatY: {
3795
+ "0%": { transform: "translateY(0)" },
3796
+ "50%": { transform: "translateY(-8px)" },
3797
+ "100%": { transform: "translateY(0)" }
3798
+ },
3799
+ /** CTA 呼吸:只放大 2%,再多就晃眼了 */
3800
+ pulseBtn: {
3801
+ "0%": { transform: "scale(1)" },
3802
+ "50%": { transform: "scale(1.02)" },
3803
+ "100%": { transform: "scale(1)" }
3804
+ }
3805
+ },
3806
+ views: {
3807
+ main: {
3808
+ type: "popup",
3809
+ stage: {
3810
+ width: 450,
3811
+ height: "auto",
3812
+ layout: "flow",
3813
+ mask: true,
3814
+ maskClosable: true,
3815
+ // 原页面的遮罩是 rgba(0,0,0,0.65) + 4px 毛玻璃,比内置默认(0.55 纯色)更重
3816
+ // 与挽留层共用同一份:只有栈顶那层遮罩会画,两层不一致就会在弹出时看到落差
3817
+ maskStyle: GIFT_MASK_STYLE,
3818
+ // 点遮罩不直接关,先弹二次挽留(原页面 @click.self="tryClose()")
3819
+ maskAction: { type: "open", view: "confirm", mode: "stack" },
3820
+ // 内置关闭按钮(矢量 ✕)+ action:配了 action 就只执行它、不再自动关层
3821
+ closeButton: {
3822
+ position: "top-right",
3823
+ offset: [12, 12],
3824
+ size: 32,
3825
+ style: {
3826
+ background: "rgba(0,0,0,0.08)",
3827
+ backdropFilter: "blur(4px)",
3828
+ color: "#ffffff",
3829
+ transition: "background 0.2s"
3830
+ },
3831
+ hoverStyle: { background: "rgba(0,0,0,0.2)" },
3832
+ action: { type: "open", view: "confirm", mode: "stack" }
3833
+ },
3834
+ style: {
3835
+ radius: 20,
3836
+ background: "#ffffff",
3837
+ shadow: "0 20px 60px rgba(0,0,0,0.3)",
3838
+ maxWidth: "60vw"
3839
+ },
3840
+ animate: {
3841
+ name: "zoomIn",
3842
+ duration: 500,
3843
+ easing: "cubic-bezier(0.34, 1.56, 0.64, 1)"
3844
+ },
3845
+ maskAnimate: { name: "fadeIn", duration: 400 },
3846
+ onShow: { type: "track", event: "move_success_v6_show" },
3847
+ onClose: {
3848
+ type: "track",
3849
+ event: "move_success_v6_close",
3850
+ params: { reason: "{{ closeReason }}" }
3851
+ }
3852
+ },
3853
+ nodes: [
3854
+ createHead(),
3855
+ // ── 白色主体:往上盖住红头下沿 ──
3856
+ {
3857
+ type: "flex",
3858
+ style: {
3859
+ direction: "column",
3860
+ marginTop: -40,
3861
+ // 必须有层级,否则这 40px 根本盖不住:红头是 box 节点,解释器给所有 box
3862
+ // 加了 position:relative(它要当绝对定位子节点的包含块),定位元素恒画在
3863
+ // 静态元素之上。声明 zIndex 会让解释器顺带补一个 relative,见 resolveNodeStyle
3864
+ zIndex: 1,
3865
+ padding: "30px 32px 30px",
3866
+ background: "#ffffff",
3867
+ radius: "20px 20px 0 0"
3868
+ },
3869
+ children: [
3870
+ {
3871
+ type: "flex",
3872
+ style: {
3873
+ direction: "column",
3874
+ padding: 10,
3875
+ marginBottom: 10,
3876
+ background: "#fffbeb",
3877
+ borderWidth: 1,
3878
+ borderStyle: "dashed",
3879
+ borderColor: "#fbbf24",
3880
+ radius: 12
3881
+ },
3882
+ children: [
3883
+ {
3884
+ type: "text",
3885
+ content: "\u{1F4E6} \u793C\u5305\u5185\u5BB9",
3886
+ style: {
3887
+ marginBottom: 8,
3888
+ fontSize: 12,
3889
+ fontWeight: "600",
3890
+ color: "#92400e",
3891
+ textAlign: "center"
3892
+ }
3893
+ },
3894
+ giftRow("4\u6298", "\u300C\u4E00\u952E\u4E0B\u5355\u300D\u771F\u6298\u6263\u6765\u88AD\uFF0C\u4F4E\u81F34\u6298"),
3895
+ giftRow("50 \u5355", "0 \u670D\u52A1\u8D39 \xB7 \u5355\u5355\u8FD4\u4F63 0.5%"),
3896
+ giftRow("200%", "\u81EA\u52A8\u4E0B\u5355\u3001\u53D1\u8D27\u3001\u552E\u540E\uFF0C\u63D0\u9AD8\u4EBA\u6548")
3897
+ ]
3898
+ },
3899
+ {
3900
+ // duration 而不是 to:这份物料每次弹出都重新倒 5 分钟,没有绝对结束时间
3901
+ type: "countdown",
3902
+ duration: 3e5,
3903
+ precision: "cs",
3904
+ as: "cd",
3905
+ style: { justify: "center", align: "center", gap: 6, marginBottom: 16 },
3906
+ onEnd: { type: "closeAll", reason: "countdown-end" },
3907
+ children: [
3908
+ {
3909
+ type: "text",
3910
+ content: "\u23F0 \u793C\u5305\u5931\u6548\u5012\u8BA1\u65F6",
3911
+ style: { fontSize: 12, color: "#4e5969" }
3912
+ },
3913
+ { type: "text", content: "{{ cd.m }}", style: NUM_STYLE },
3914
+ { type: "text", content: ":", style: { fontSize: 13, color: "#4e5969" } },
3915
+ { type: "text", content: "{{ cd.s }}", style: NUM_STYLE },
3916
+ { type: "text", content: ":", style: { fontSize: 13, color: "#4e5969" } },
3917
+ { type: "text", content: "{{ cd.cs }}", style: NUM_STYLE }
3918
+ ]
3919
+ },
3920
+ {
3921
+ type: "button",
3922
+ text: "\u{1F381} \u7ACB\u5373\u9886\u53D6\u5E76\u542F\u7528",
3923
+ style: {
3924
+ width: "100%",
3925
+ padding: 10,
3926
+ fontSize: 16,
3927
+ fontWeight: "700",
3928
+ color: "#ffffff",
3929
+ background: "linear-gradient(90deg,#ff7a00 0%,#f53f3f 100%)",
3930
+ radius: 28,
3931
+ shadow: "0 6px 20px rgba(245,63,63,0.4)"
3932
+ },
3933
+ animate: {
3934
+ name: "pulseBtn",
3935
+ duration: 1500,
3936
+ easing: "ease-in-out",
3937
+ iteration: "infinite"
3938
+ },
3939
+ action: {
3940
+ type: "sequence",
3941
+ actions: [
3942
+ {
3943
+ type: "track",
3944
+ event: "move_success_v6_claim",
3945
+ params: { from: "main" }
3946
+ },
3947
+ { type: "navigate", url: PURCHASE_URL }
3948
+ ]
3949
+ }
3950
+ }
3951
+ ]
3952
+ }
3953
+ ]
3954
+ },
3955
+ confirm: createGiveUpView({
3956
+ url: PURCHASE_URL,
3957
+ claimEvent: "move_success_v6_claim",
3958
+ giveUpEvent: "move_success_v6_give_up"
3959
+ })
3960
+ }
3961
+ };
3962
+ var gift_v6_default = giftV6;
3963
+
3964
+ // src/docs/examples/gift-red-packet-head.ts
3965
+ var HEAD_HEIGHT2 = 158;
3966
+ function sparkle(left, size, delay) {
3967
+ return {
3968
+ type: "box",
3969
+ // bottom: 14px 换算成 top —— rect 只有 [x, y, w, h],没有 bottom
3970
+ rect: [left, HEAD_HEIGHT2 - 14 - size, size, size],
3971
+ style: {
3972
+ radius: "50%",
3973
+ background: "#ffe3a1",
3974
+ shadow: "0 0 9px rgba(255,214,130,0.95)",
3975
+ // 初始透明:关键帧从 opacity 0 起步,没有这一行会在动画开播前闪一下
3976
+ opacity: "0",
3977
+ pointerEvents: "none"
3978
+ },
3979
+ animate: {
3980
+ name: "floatUp",
3981
+ duration: 4400,
3982
+ delay,
3983
+ easing: "linear",
3984
+ iteration: "infinite"
3985
+ }
3986
+ };
3987
+ }
3988
+ function createHead2() {
3989
+ return {
3990
+ type: "box",
3991
+ style: {
3992
+ width: "100%",
3993
+ height: HEAD_HEIGHT2,
3994
+ background: "linear-gradient(168deg,#ff6a52 0%,#f5433a 54%,#dd2b22 100%)",
3995
+ overflow: "hidden"
3996
+ },
3997
+ children: [
3998
+ {
3999
+ // 顶部的暖光晕,原页面是 .rp-hd::before
4000
+ type: "box",
4001
+ rect: ["50%", -70, 300, 180],
4002
+ style: {
4003
+ background: "radial-gradient(ellipse, rgba(255,220,150,0.4), transparent 66%)",
4004
+ // 关键帧里的 transform 同样带着 translateX(-50%),否则播动画时会向右跳半个身位
4005
+ transform: "translateX(-50%)",
4006
+ pointerEvents: "none"
4007
+ },
4008
+ animate: {
4009
+ name: "glow",
4010
+ duration: 3600,
4011
+ easing: "ease-in-out",
4012
+ iteration: "infinite"
4013
+ }
4014
+ },
4015
+ {
4016
+ type: "flex",
4017
+ rect: [0, 0, "100%", "auto"],
4018
+ style: { direction: "column", align: "center", padding: "26px 26px 0" },
4019
+ children: [
4020
+ {
4021
+ type: "flex",
4022
+ style: {
4023
+ alignSelf: "center",
4024
+ align: "center",
4025
+ gap: 6,
4026
+ padding: "5px 14px",
4027
+ fontSize: 12,
4028
+ color: "#ffe9e2",
4029
+ letterSpacing: "0.04em",
4030
+ background: "rgba(255,255,255,0.2)",
4031
+ radius: 14
4032
+ },
4033
+ animate: {
4034
+ name: "bob",
4035
+ duration: 2800,
4036
+ easing: "ease-in-out",
4037
+ iteration: "infinite"
4038
+ },
4039
+ children: [
4040
+ { type: "text", content: "\u{1F381}", style: { fontSize: 14 } },
4041
+ {
4042
+ type: "text",
4043
+ content: "\u642C\u5BB6\u6210\u529F \xB7 \u4E13\u5C5E\u56DE\u9988",
4044
+ style: { fontSize: 12, color: "#ffe9e2" }
4045
+ }
4046
+ ]
4047
+ },
4048
+ {
4049
+ // 一行混排两种颜色:拆成三个 text,用 baseline 对齐,DSL 没有富文本
4050
+ type: "flex",
4051
+ style: { align: "baseline", justify: "center", marginTop: 14 },
4052
+ children: [
4053
+ {
4054
+ type: "text",
4055
+ content: "\u606D\u559C\u83B7\u5F97 ",
4056
+ style: {
4057
+ fontSize: 25,
4058
+ fontWeight: "800",
4059
+ color: "#ffffff",
4060
+ letterSpacing: "0.02em",
4061
+ textShadow: "0 2px 8px rgba(150,20,10,0.22)"
4062
+ }
4063
+ },
4064
+ {
4065
+ type: "text",
4066
+ content: "1 \u5206\u94B1",
4067
+ style: {
4068
+ fontSize: 25,
4069
+ fontWeight: "800",
4070
+ color: "#ffdc7d",
4071
+ letterSpacing: "0.02em",
4072
+ textShadow: "0 2px 8px rgba(150,20,10,0.22)"
4073
+ }
4074
+ },
4075
+ {
4076
+ type: "text",
4077
+ content: " \u534A\u5E74\u5361",
4078
+ style: {
4079
+ fontSize: 25,
4080
+ fontWeight: "800",
4081
+ color: "#ffffff",
4082
+ letterSpacing: "0.02em",
4083
+ textShadow: "0 2px 8px rgba(150,20,10,0.22)"
4084
+ }
4085
+ }
4086
+ ]
4087
+ }
4088
+ ]
4089
+ },
4090
+ sparkle("13%", 6, 0),
4091
+ sparkle("33%", 4, 1100),
4092
+ sparkle("64%", 6, 2200),
4093
+ sparkle("85%", 5, 3300)
4094
+ ]
4095
+ };
4096
+ }
4097
+ function createPlate() {
4098
+ return {
4099
+ type: "box",
4100
+ style: {
4101
+ // 负的上外边距把牌子提上去压住红头,左右各留 26 与主体对齐
4102
+ margin: "-38px 26px 0",
4103
+ height: 70,
4104
+ background: "linear-gradient(140deg,#fffdf6,#fff2d9)",
4105
+ borderWidth: 1,
4106
+ borderStyle: "solid",
4107
+ borderColor: "#ffe1a8",
4108
+ radius: 13,
4109
+ shadow: "0 10px 26px rgba(140,30,15,0.24)",
4110
+ // 扫光条比牌子宽,不裁会飘到牌子外面
4111
+ overflow: "hidden"
4112
+ },
4113
+ animate: {
4114
+ name: "plateIn",
4115
+ duration: 660,
4116
+ delay: 120,
4117
+ easing: "cubic-bezier(0.18, 1.05, 0.35, 1)"
4118
+ },
4119
+ children: [
4120
+ {
4121
+ type: "box",
4122
+ rect: [-110, 0, 72, "100%"],
4123
+ style: {
4124
+ background: "linear-gradient(100deg, transparent, rgba(255,255,255,0.85), transparent)",
4125
+ pointerEvents: "none"
4126
+ },
4127
+ // 原页面动的是 left,DSL 只放开 transform:改成横向位移,效果等价且不触发重排
4128
+ animate: {
4129
+ name: "sweep",
4130
+ duration: 4e3,
4131
+ delay: 1200,
4132
+ easing: "ease-in-out",
4133
+ iteration: "infinite"
4134
+ }
4135
+ },
4136
+ {
4137
+ type: "flex",
4138
+ rect: [0, 0, "100%", "100%"],
4139
+ style: { align: "center", gap: 14, padding: "0 18px" },
4140
+ children: [
4141
+ {
4142
+ type: "flex",
4143
+ style: {
4144
+ align: "baseline",
4145
+ flexShrink: "0",
4146
+ color: "#d3281f",
4147
+ transformOrigin: "left center"
4148
+ },
4149
+ animate: {
4150
+ name: "pop",
4151
+ duration: 3400,
4152
+ delay: 1e3,
4153
+ easing: "ease-in-out",
4154
+ iteration: "infinite"
4155
+ },
4156
+ children: [
4157
+ {
4158
+ type: "text",
4159
+ content: "\xA5",
4160
+ style: {
4161
+ marginRight: 1,
4162
+ fontSize: 18,
4163
+ fontWeight: "800",
4164
+ color: "#d3281f"
4165
+ }
4166
+ },
4167
+ {
4168
+ type: "text",
4169
+ content: "0.01",
4170
+ style: {
4171
+ fontSize: 42,
4172
+ fontWeight: "900",
4173
+ lineHeight: 1,
4174
+ letterSpacing: "-0.03em",
4175
+ color: "#d3281f"
4176
+ }
4177
+ }
4178
+ ]
4179
+ },
4180
+ {
4181
+ type: "box",
4182
+ style: { width: 1, height: 34, background: "#f2dcae", flexShrink: "0" }
4183
+ },
4184
+ {
4185
+ type: "flex",
4186
+ style: { direction: "column", flex: "1" },
4187
+ children: [
4188
+ {
4189
+ type: "text",
4190
+ content: "\u6253\u5355\u53D1\u8D27 \xB7 \u5168\u529F\u80FD\u534A\u5E74\u5361",
4191
+ style: {
4192
+ fontSize: 14.5,
4193
+ fontWeight: "800",
4194
+ color: "#8f3517",
4195
+ letterSpacing: "0.02em"
4196
+ }
4197
+ },
4198
+ {
4199
+ type: "text",
4200
+ content: "\u539F\u4EF7 \xA590 / \u534A\u5E74",
4201
+ style: {
4202
+ marginTop: 5,
4203
+ fontSize: 11.5,
4204
+ lineHeight: 1.5,
4205
+ color: "#b08b62",
4206
+ textDecoration: "line-through"
4207
+ }
4208
+ }
4209
+ ]
4210
+ }
4211
+ ]
4212
+ }
4213
+ ]
4214
+ };
4215
+ }
4216
+
4217
+ // src/docs/examples/gift-red-packet-body.ts
4218
+ var FEATURES = [
4219
+ { icon: "\u{1F5A8}\uFE0F", title: "\u6279\u91CF\u6253\u5355", desc: "\u6279\u91CF\u9762\u5355\u4E00\u6B21\u51FA", delay: 340 },
4220
+ { icon: "\u{1F69A}", title: "\u6279\u91CF\u53D1\u8D27", desc: "\u5168\u5E97\u8BA2\u5355\u79D2\u53D1\u5B8C", delay: 420 },
4221
+ { icon: "\u{1F3EA}", title: "\u591A\u5E97\u7BA1\u7406", desc: "\u7BA1\u7406\u591A\u4E2A\u5E97\u94FA\u8BA2\u5355", delay: 500 },
4222
+ { icon: "\u{1F9E9}", title: "\u8BA2\u5355\u5408\u5E76", desc: "\u540C\u5740\u5408\u5355\u7701\u8FD0\u8D39", delay: 580 },
4223
+ {
4224
+ icon: "\u{1F4CD}",
4225
+ title: "\u7269\u6D41\u8F68\u8FF9",
4226
+ desc: "\u9762\u5355\u7269\u6D41\u8F68\u8FF9\uFF0C\u5BA2\u8BC9\u63D0\u524D\u62E6\u622A",
4227
+ delay: 660,
4228
+ full: true
4229
+ }
4230
+ ];
4231
+ function featureCell(feature) {
4232
+ return {
4233
+ type: "flex",
4234
+ style: {
4235
+ // 两列网格用 flex wrap + 百分比宽复刻:gap 8 时每列是 calc(50% - 4px),
4236
+ // 末项写 100% 就等于原来的 grid-column: 1 / -1
4237
+ width: feature.full ? "100%" : "calc(50% - 4px)",
4238
+ align: "center",
4239
+ gap: 9,
4240
+ padding: "9px 11px",
4241
+ background: "#fff8f1",
4242
+ borderWidth: 1,
4243
+ borderStyle: "solid",
4244
+ borderColor: "#ffe6d5",
4245
+ radius: 9
4246
+ },
4247
+ animate: { name: "cellIn", duration: 460, delay: feature.delay, easing: "ease-out" },
4248
+ children: [
4249
+ {
4250
+ type: "flex",
4251
+ style: {
4252
+ justify: "center",
4253
+ align: "center",
4254
+ width: 26,
4255
+ height: 26,
4256
+ // 图标位不许被压扁,否则长副标题会把它挤成一条
4257
+ flexShrink: "0",
4258
+ background: "#ffe9d8",
4259
+ radius: 7
4260
+ },
4261
+ children: [{ type: "text", content: feature.icon, style: { fontSize: 15 } }]
4262
+ },
4263
+ {
4264
+ type: "flex",
4265
+ style: { direction: "column", minWidth: 0 },
4266
+ children: [
4267
+ {
4268
+ type: "text",
4269
+ content: feature.title,
4270
+ style: {
4271
+ fontSize: 13,
4272
+ fontWeight: "700",
4273
+ lineHeight: 1.35,
4274
+ color: "#8f3517"
4275
+ }
4276
+ },
4277
+ {
4278
+ type: "text",
4279
+ content: feature.desc,
4280
+ style: {
4281
+ fontSize: 11.5,
4282
+ lineHeight: 1.35,
4283
+ color: "#b07a5c",
4284
+ whiteSpace: "nowrap"
4285
+ }
4286
+ }
4287
+ ]
4288
+ }
4289
+ ]
4290
+ };
4291
+ }
4292
+ function createFeatureGrid() {
4293
+ return {
4294
+ type: "flex",
4295
+ style: { wrap: true, gap: 8 },
4296
+ children: FEATURES.map(featureCell)
4297
+ };
4298
+ }
4299
+ function createCta(action) {
4300
+ return {
4301
+ type: "box",
4302
+ // 【必须写死高度的原因】这是绝对定位容器(角标要骑在按钮上沿外面,只能脱流),
4303
+ // 子节点撑不起它,不写死就塌成 0。52 即原页面 .rp-cta 的按钮高度
4304
+ style: { width: "100%", height: 52, marginTop: 16 },
4305
+ children: [
4306
+ {
4307
+ type: "box",
4308
+ // 高度跟满父级即可,不用再写一遍 52
4309
+ rect: [0, 0, "100%", "100%"],
4310
+ style: {
4311
+ background: "linear-gradient(92deg,#ff8f3d,#f5433a)",
4312
+ radius: 26,
4313
+ overflow: "hidden",
4314
+ cursor: "pointer",
4315
+ shadow: "0 8px 20px rgba(245,67,58,0.34)",
4316
+ transition: "transform 0.18s, box-shadow 0.18s"
4317
+ },
4318
+ animate: {
4319
+ name: "breath",
4320
+ duration: 2400,
4321
+ easing: "ease-in-out",
4322
+ iteration: "infinite"
4323
+ },
4324
+ // 原页面 hover 时上浮并暂停呼吸动画,两条都能配
4325
+ hoverStyle: { transform: "translateY(-2px)", animationPlayState: "paused" },
4326
+ action,
4327
+ children: [
4328
+ {
4329
+ type: "box",
4330
+ rect: [-90, 0, 62, "100%"],
4331
+ style: {
4332
+ background: "linear-gradient(100deg, transparent, rgba(255,255,255,0.5), transparent)",
4333
+ pointerEvents: "none"
4334
+ },
4335
+ animate: {
4336
+ name: "sweep",
4337
+ duration: 2900,
4338
+ delay: 800,
4339
+ easing: "ease-in-out",
4340
+ iteration: "infinite"
4341
+ }
4342
+ },
4343
+ {
4344
+ type: "flex",
4345
+ rect: [0, 0, "100%", "100%"],
4346
+ style: { justify: "center", align: "center", gap: 8 },
4347
+ children: [
4348
+ { type: "text", content: "\u{1F381}", style: { fontSize: 18 } },
4349
+ {
4350
+ type: "text",
4351
+ content: "1 \u5206\u94B1\u8BA2\u9605\u534A\u5E74",
4352
+ style: {
4353
+ fontSize: 17,
4354
+ fontWeight: "700",
4355
+ color: "#ffffff",
4356
+ letterSpacing: "0.03em"
4357
+ }
4358
+ }
4359
+ ]
4360
+ }
4361
+ ]
4362
+ },
4363
+ {
4364
+ // 角标骑在按钮上沿外面:y 写负值即可,父级没有 overflow: hidden 就不会被裁
4365
+ type: "flex",
4366
+ rect: ["calc(100% - 112px)", -10, "auto", 22],
4367
+ style: {
4368
+ justify: "center",
4369
+ align: "center",
4370
+ gap: 4,
4371
+ padding: "0 10px",
4372
+ fontSize: 11.5,
4373
+ fontWeight: "700",
4374
+ color: "#7a3b00",
4375
+ letterSpacing: "0.03em",
4376
+ background: "linear-gradient(96deg,#ffe08a,#ffc24d)",
4377
+ borderWidth: 1,
4378
+ borderStyle: "solid",
4379
+ borderColor: "rgba(255,255,255,0.75)",
4380
+ radius: 11,
4381
+ shadow: "0 4px 10px rgba(190,120,20,0.3)",
4382
+ // 角标压在按钮上,不穿透点击的话这一块就点不动了
4383
+ pointerEvents: "none",
4384
+ zIndex: 2
4385
+ },
4386
+ animate: {
4387
+ name: "badge",
4388
+ duration: 2400,
4389
+ easing: "ease-in-out",
4390
+ iteration: "infinite"
4391
+ },
4392
+ children: [
4393
+ { type: "text", content: "\u23F0", style: { fontSize: 12 } },
4394
+ {
4395
+ type: "text",
4396
+ content: "\u9650\u65F6\u4F18\u60E0",
4397
+ style: { fontSize: 11.5, fontWeight: "700", color: "#7a3b00" }
4398
+ }
4399
+ ]
4400
+ }
4401
+ ]
4402
+ };
4403
+ }
4404
+
4405
+ // src/docs/examples/gift-red-packet.ts
4406
+ var PURCHASE_URL2 = "https://fuwu.jinritemai.com/detail?from=isv.promotion&service_id=37954&promotionIdCode=CgYIASAHKAESXgpcZiuxEgmEfp%2BCuIELbEjHDmFi85jdhDOrbaXhk7JWo7S2zDy7ZoIOuQoLYASUv9XymFznWhybdvdPTpaa4bhM0ydWadh6ViYxI7%2FhpcEo%2F7W4MlNCKrcmzIu9j3YaAA%3D%3D";
4407
+ var giftRedPacket = {
4408
+ version: 1,
4409
+ meta: { name: "\u590D\u523B\u7EBF\u4E0A\u5F39\u7A97 \xB7 1 \u5206\u94B1\u534A\u5E74\u5361\uFF08\u7EA2\u5305\u5F00\u7BB1\u7248\uFF09" },
4410
+ entry: "main",
4411
+ keyframes: {
4412
+ /** 遮罩淡入 */
4413
+ fadeIn: { from: { opacity: "0" }, to: { opacity: "1" } },
4414
+ /** 弹窗回弹放大 */
4415
+ zoomIn: {
4416
+ from: { opacity: "0", transform: "scale(0.7)" },
4417
+ to: { opacity: "1", transform: "scale(1)" }
4418
+ },
4419
+ /** 红头顶部光晕呼吸。transform 里必须带上 translateX(-50%),否则播动画时会向右跳 */
4420
+ glow: {
4421
+ "0%": { opacity: "0.7", transform: "translateX(-50%) scale(1)" },
4422
+ "50%": { opacity: "1", transform: "translateX(-50%) scale(1.14)" },
4423
+ "100%": { opacity: "0.7", transform: "translateX(-50%) scale(1)" }
4424
+ },
4425
+ /** 缎带轻浮 */
4426
+ bob: {
4427
+ "0%": { transform: "translateY(0)" },
4428
+ "50%": { transform: "translateY(-3px)" },
4429
+ "100%": { transform: "translateY(0)" }
4430
+ },
4431
+ /** 金色光点:从下往上飘 116px,两头都是透明 */
4432
+ floatUp: {
4433
+ "0%": { opacity: "0", transform: "translateY(30px) scale(0.5)" },
4434
+ "18%": { opacity: "0.95" },
4435
+ "100%": { opacity: "0", transform: "translateY(-86px) scale(1)" }
4436
+ },
4437
+ /** 价格牌托上来 */
4438
+ plateIn: {
4439
+ "0%": { opacity: "0", transform: "translateY(24px) scale(0.94)" },
4440
+ "100%": { opacity: "1", transform: "translateY(0) scale(1)" }
4441
+ },
4442
+ /**
4443
+ * 扫光:一条斜光带从左侧滑到右侧外面,停一会儿再来一趟。
4444
+ *
4445
+ * 原页面动的是 `left`,这里改成 `transform` 位移 —— 一是 DSL 只放开 transform,
4446
+ * 二是动 left 每帧都要重排,动 transform 只走合成层。
4447
+ */
4448
+ sweep: {
4449
+ "0%": { transform: "skew(-18deg) translateX(0)" },
4450
+ "42%": { transform: "skew(-18deg) translateX(600px)" },
4451
+ "100%": { transform: "skew(-18deg) translateX(600px)" }
4452
+ },
4453
+ /** 价格每隔几秒弹一下 */
4454
+ pop: {
4455
+ "0%": { transform: "scale(1)" },
4456
+ "86%": { transform: "scale(1)" },
4457
+ "92%": { transform: "scale(1.09)" },
4458
+ "100%": { transform: "scale(1)" }
4459
+ },
4460
+ /** 权益格入场,五格靠各自的 delay 交错 */
4461
+ cellIn: {
4462
+ "0%": { opacity: "0", transform: "translateY(10px)" },
4463
+ "100%": { opacity: "1", transform: "translateY(0)" }
4464
+ },
4465
+ /** 「限时优惠」角标轻浮 */
4466
+ badge: {
4467
+ "0%": { transform: "translateY(0)" },
4468
+ "50%": { transform: "translateY(-2px)" },
4469
+ "100%": { transform: "translateY(0)" }
4470
+ },
4471
+ /** CTA 呼吸:只放大阴影不放大自身,按钮尺寸恒定,不会把下面的内容顶动 */
4472
+ breath: {
4473
+ "0%": { shadow: "0 8px 20px rgba(245,67,58,0.34)" },
4474
+ "50%": { shadow: "0 12px 30px rgba(245,67,58,0.56)" },
4475
+ "100%": { shadow: "0 8px 20px rgba(245,67,58,0.34)" }
4476
+ }
4477
+ },
4478
+ views: {
4479
+ main: {
4480
+ type: "popup",
4481
+ stage: {
4482
+ width: 460,
4483
+ height: "auto",
4484
+ layout: "flow",
4485
+ mask: true,
4486
+ maskClosable: true,
4487
+ // 原页面遮罩 rgba(0,0,0,0.65) + 4px 毛玻璃;与挽留层共用同一份 ——
4488
+ // 只有栈顶那层遮罩会画,两层不一致就会在弹出挽留层时看到背景落差
4489
+ maskStyle: GIFT_MASK_STYLE,
4490
+ // 点遮罩弹二次挽留,不直接关(原页面 @click.self="tryClose()")
4491
+ maskAction: { type: "open", view: "confirm", mode: "stack" },
4492
+ // 内置关闭按钮画的就是矢量交叉线,和原页面那段内联 SVG 是同一种东西
4493
+ closeButton: {
4494
+ position: "top-right",
4495
+ offset: [14, 14],
4496
+ size: 30,
4497
+ style: {
4498
+ background: "rgba(255,255,255,0.22)",
4499
+ color: "#ffffff",
4500
+ transition: "background 0.2s"
4501
+ },
4502
+ hoverStyle: { background: "rgba(255,255,255,0.38)" },
4503
+ action: { type: "open", view: "confirm", mode: "stack" }
4504
+ },
4505
+ style: {
4506
+ radius: 16,
4507
+ background: "#ffffff",
4508
+ shadow: "0 18px 50px rgba(20,26,45,0.24)",
4509
+ maxWidth: "90vw",
4510
+ // 原页面 .rp-modal 显式指定了字体栈,弹窗内所有文字继承它,
4511
+ // 不写就跟着宿主页面走、字形和字重会有出入
4512
+ fontFamily: "-apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif"
4513
+ },
4514
+ animate: {
4515
+ name: "zoomIn",
4516
+ duration: 500,
4517
+ easing: "cubic-bezier(0.34, 1.56, 0.64, 1)"
4518
+ },
4519
+ maskAnimate: { name: "fadeIn", duration: 400 },
4520
+ onShow: { type: "track", event: "move_success_rp_show" },
4521
+ onClose: {
4522
+ type: "track",
4523
+ event: "move_success_rp_close",
4524
+ params: { reason: "{{ closeReason }}" }
4525
+ }
4526
+ },
4527
+ nodes: [
4528
+ createHead2(),
4529
+ createPlate(),
4530
+ {
4531
+ type: "flex",
4532
+ style: {
4533
+ direction: "column",
4534
+ // 底部 38 而不是原页面的 20:原页面 CTA 下面还有一行「今日不再提示」
4535
+ // (约 18px + 14px 间距),那一行按需求去掉了,不把留白补回来底部就贴得慌
4536
+ padding: "18px 26px 38px",
4537
+ background: "#ffffff"
4538
+ },
4539
+ children: [
4540
+ createFeatureGrid(),
4541
+ createCta({
4542
+ type: "sequence",
4543
+ actions: [
4544
+ {
4545
+ type: "track",
4546
+ event: "move_success_rp_claim",
4547
+ params: { from: "main" }
4548
+ },
4549
+ { type: "navigate", url: PURCHASE_URL2 }
4550
+ ]
4551
+ })
4552
+ ]
4553
+ }
4554
+ ]
4555
+ },
4556
+ confirm: createGiveUpView({
4557
+ url: PURCHASE_URL2,
4558
+ claimEvent: "move_success_rp_claim",
4559
+ giveUpEvent: "move_success_rp_give_up"
4560
+ })
4561
+ }
4562
+ };
4563
+ var gift_red_packet_default = giftRedPacket;
4564
+
4565
+ // src/docs/examples/index.ts
4566
+ var HOTSPOT_BG = "rgba(255,68,51,0.16)";
4567
+ var imageHotspot = {
4568
+ version: 1,
4569
+ type: "popup",
4570
+ meta: { name: "\u6574\u56FE\u70ED\u533A\u5F39\u7A97" },
4571
+ stage: {
4572
+ // 窄屏时跟着父级收,最宽不超过 420
4573
+ width: "calc(100% - 48px)",
4574
+ height: 520,
4575
+ mask: true,
4576
+ maskClosable: true,
4577
+ // 关闭按钮放到弹窗正下方外侧:offset 的 y 写负值即可,不会被圆角裁掉
4578
+ closeButton: {
4579
+ show: true,
4580
+ position: "bottom-center",
4581
+ offset: [0, -46],
4582
+ size: 34,
4583
+ // 不写 icon / image,用内置的矢量 × 图标(跟着 style.color 走)
4584
+ style: {
4585
+ background: "rgba(0,0,0,0.4)",
4586
+ color: "#ffffff",
4587
+ fontSize: 18,
4588
+ borderWidth: 1,
4589
+ borderStyle: "solid",
4590
+ borderColor: "rgba(255,255,255,0.55)"
4591
+ }
4592
+ },
4593
+ style: { radius: 12, maxWidth: 420 },
4594
+ // 曝光埋点:数据就绪、弹窗真正展示时触发一次
4595
+ onShow: { type: "track", event: "popup_show", params: { popup: "image_hotspot" } },
4596
+ // 关闭埋点:点 X、点遮罩、点「不再提醒」都会触发,用 closeReason 区分
4597
+ onClose: {
4598
+ type: "track",
4599
+ event: "popup_close",
4600
+ params: { popup: "image_hotspot", reason: "{{ closeReason }}" }
4601
+ }
4602
+ },
4603
+ nodes: [
4604
+ {
4605
+ // 背景图用百分比铺满舞台,舞台宽度变了也不用改配置
4606
+ id: "bg",
4607
+ type: "image",
4608
+ rect: [0, 0, "100%", "100%"],
4609
+ src: "https://picsum.photos/id/1015/420/520"
4610
+ },
4611
+ // 热区想放几个放几个,位置各自由 rect 决定,互不影响。
4612
+ // 热区 = 一个透明的 box + action,调试时把 background 的透明度调高就能看见框。
4613
+ {
4614
+ id: "hotspot-rule",
4615
+ type: "box",
4616
+ // 右上角「活动规则」
4617
+ rect: ["62%", 24, "30%", 30],
4618
+ style: { radius: 15, background: HOTSPOT_BG, cursor: "pointer" },
4619
+ action: {
4620
+ type: "sequence",
4621
+ actions: [
4622
+ { type: "track", event: "popup_click", params: { area: "rule" } },
4623
+ {
4624
+ type: "navigate",
4625
+ url: "https://maibaole.example.com/rule",
4626
+ target: "_blank"
4627
+ }
4628
+ ]
4629
+ }
4630
+ },
4631
+ {
4632
+ id: "hotspot-plan-a",
4633
+ type: "box",
4634
+ // 中部左半:套餐 A
3286
4635
  rect: ["8%", 300, "40%", 96],
3287
4636
  style: { radius: 10, background: HOTSPOT_BG, cursor: "pointer" },
3288
4637
  action: {
@@ -3454,6 +4803,16 @@ var examples = [
3454
4803
  label: "\u2469 \u62BD\u5C49\u5E95\u90E8 Banner\uFF08\u56FA\u5B9A 400\xD745\uFF09",
3455
4804
  value: "drawerBottomBanner",
3456
4805
  dsl: drawerBottomBanner
4806
+ },
4807
+ {
4808
+ label: "\u246A \u590D\u523B\u7EBF\u4E0A\u5F39\u7A97 \xB7 4 \u6298\u793C\u5305\uFF08\u52A8\u753B + \u4E8C\u6B21\u633D\u7559\uFF09",
4809
+ value: "giftV6",
4810
+ dsl: gift_v6_default
4811
+ },
4812
+ {
4813
+ label: "\u246B \u590D\u523B\u7EBF\u4E0A\u5F39\u7A97 \xB7 1 \u5206\u94B1\u534A\u5E74\u5361\uFF08\u52A8\u753B\u6700\u5BC6\u7684\u4E00\u4EFD\uFF09",
4814
+ value: "giftRedPacket",
4815
+ dsl: gift_red_packet_default
3457
4816
  }
3458
4817
  ];
3459
4818
  var examples_default = examples;
@@ -3487,7 +4846,7 @@ function blockToMarkdown(block) {
3487
4846
  return "";
3488
4847
  }
3489
4848
  }
3490
- function toMarkdown(sections10, meta2) {
4849
+ function toMarkdown(sections11, meta2) {
3491
4850
  const lines = [
3492
4851
  "# \u8425\u9500\u5185\u5BB9 DSL \xB7 \u5F00\u53D1\u6587\u6863",
3493
4852
  "",
@@ -3497,7 +4856,7 @@ function toMarkdown(sections10, meta2) {
3497
4856
  "> \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",
3498
4857
  ""
3499
4858
  ];
3500
- sections10.forEach((section) => {
4859
+ sections11.forEach((section) => {
3501
4860
  lines.push(`## ${section.title}`, "");
3502
4861
  section.blocks.forEach((block) => {
3503
4862
  const text = blockToMarkdown(block);
@@ -3558,17 +4917,28 @@ function structureSection() {
3558
4917
  "layout": "flow", // "absolute" \u6216 "flow"\uFF0C\u89C1\u4E0B\u9762\u300C\u5E03\u5C40\u300D
3559
4918
  "mask": true,
3560
4919
  "maskClosable": false,
4920
+ // \u53EF\u9009\uFF1A\u906E\u7F69\u6837\u5F0F\uFF0C\u8D70 style \u767D\u540D\u5355\u3002\u4E0D\u5199\u5C31\u662F\u5185\u7F6E\u7684 rgba(0,0,0,0.55) \u7EAF\u8272
4921
+ "maskStyle": { "background": "rgba(0,0,0,0.65)", "backdropFilter": "blur(4px)" },
4922
+ // \u53EF\u9009\uFF1A\u70B9\u906E\u7F69\u505A\u4EC0\u4E48\u3002\u4E0D\u5199 = \u5173\u6389\u8FD9\u4E00\u5C42\uFF1B\u5199\u4E86 = \u53EA\u6267\u884C\u52A8\u4F5C\u3001\u4E0D\u5173\u5C42
4923
+ "maskAction": { "type": "open", "view": "confirm", "mode": "stack" },
3561
4924
  "closeButton": {
3562
4925
  "position": "top-right", // ${CLOSE_POSITIONS.join(" | ")}
3563
4926
  "offset": [12, 12], // [x, y]\uFF1B\u5199\u8D1F\u503C = \u6309\u94AE\u8DD1\u5230\u5F39\u7A97\u5916\u9762
3564
4927
  "size": 26,
3565
4928
  // 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
3566
- "style": { "background": "rgba(0,0,0,0.35)", "color": "#fff" }
4929
+ "style": { "background": "rgba(0,0,0,0.35)", "color": "#fff" },
4930
+ // \u53EF\u9009\uFF1A\u70B9 \u2715 \u505A\u4EC0\u4E48\u3002\u4E0D\u5199 = \u5173\u6389\u8FD9\u4E00\u5C42\uFF1B\u5199\u4E86 = \u53EA\u6267\u884C\u52A8\u4F5C\u3001\u4E0D\u5173\u5C42
4931
+ "action": { "type": "open", "view": "confirm", "mode": "stack" }
3567
4932
  },
3568
4933
  "style": { "radius": 18, "maxWidth": 420 }
3569
4934
  }
3570
4935
  \`\`\`
3571
4936
 
4937
+ \`maskClosable\` \u51B3\u5B9A\u906E\u7F69\u54CD\u4E0D\u54CD\u5E94\u70B9\u51FB\uFF0C\`maskAction\` \u51B3\u5B9A\u70B9\u4E86\u505A\u4EC0\u4E48\uFF0C\u4E24\u4EF6\u4E8B\uFF1A
4938
+ \`maskClosable: false\` \u65F6\u5149\u914D \`maskAction\` \u4E0D\u4F1A\u89E6\u53D1\u3002
4939
+ \`maskAction\` / \`closeButton.action\` \u914D\u4E86\u5C31**\u4E0D\u518D\u81EA\u52A8\u5173\u5C42**\uFF0C\u8981\u5173\u5C31\u628A \`close\` \u5199\u8FDB\u52A8\u4F5C\u91CC\u3002
4940
+ \u300C\u70B9 \u2715 \u6216\u70B9\u906E\u7F69\u5148\u5F39\u4E8C\u6B21\u633D\u7559\u300D\u7684\u6807\u51C6\u5199\u6CD5\u5C31\u662F\u8FD9\u4E24\u4E2A\u5B57\u6BB5\u5404\u914D\u4E00\u4E2A \`open\`\u3002
4941
+
3572
4942
  **\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
3573
4943
  \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
3574
4944
  \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
@@ -3630,6 +5000,8 @@ function checklistSection() {
3630
5000
  - [ ] \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 }}"\`
3631
5001
  - [ ] \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
3632
5002
  - [ ] \u6CA1\u6709\u7528 \`call\` \u53BB\u8BB0\u5F55\u7528\u6237\u610F\u56FE\u6216\u5199\u672C\u5730\u5B58\u50A8\uFF08\`call\` \u53EA\u7528\u6765\u8BA9\u5BBF\u4E3B\u505A\u4E00\u4EF6\u4E8B\uFF0C\u5982\u5524\u8D77\u5145\u503C / \u6253\u5F00\u5BA2\u670D / \u590D\u5236\u5230\u526A\u8D34\u677F\uFF09\u3002\u300C\u4E0D\u518D\u63D0\u9192\u300D\u5199\u6210 \`{ "type": "close", "reason": "user-dismiss" }\`\uFF0C\u4E0D\u914D \`call\`
5003
+ - [ ] \u6BCF\u4E2A \`animate.name\` \u90FD\u80FD\u5728\u9876\u5C42 \`keyframes\` \u91CC\u627E\u5230\uFF1B\`easing\` \u5728\u767D\u540D\u5355\u91CC\uFF1B\u6CA1\u6709\u5B9A\u4E49\u4E86\u5374\u6CA1\u4EBA\u5F15\u7528\u7684\u5173\u952E\u5E27
5004
+ - [ ] \u88C5\u9970\u6027\u56FE\u5C42\uFF08\u5149\u6655\u3001\u626B\u5149\u3001\u5149\u70B9\uFF09\u90FD\u5199\u4E86 \`"pointerEvents": "none"\`
3633
5005
  - [ ] \u8F93\u51FA\u7684\u662F\u5408\u6CD5 JSON\uFF08\u6CA1\u6709\u591A\u4F59\u9017\u53F7\u3001\u6CA1\u6709\u6CE8\u91CA\uFF09`;
3634
5006
  }
3635
5007
  function requirementSection() {
@@ -3785,6 +5157,9 @@ function countdownSection() {
3785
5157
 
3786
5158
  \u5199\u6210 \`"\u4E0B\u5468\u4E09"\` \u8FD9\u79CD\u8BC6\u522B\u4E0D\u4E86\u7684\u4F1A\u5728\u4FDD\u5B58\u524D\u62A5\u9519\u3002
3787
5159
 
5160
+ \u300C\u6253\u5F00\u540E 5 \u5206\u949F\u5185\u4E0B\u5355\u300D\u8FD9\u79CD**\u76F8\u5BF9**\u65F6\u957F\u4E0D\u8981\u53BB\u7B97\u7ED3\u675F\u65F6\u95F4\uFF0C\u5199 \`"duration": 300000\`\uFF08\u6BEB\u79D2\uFF09\u4EE3\u66FF \`to\`\uFF0C
5161
+ \u4ECE\u8FD9\u4E00\u5C4F\u5C55\u793A\u90A3\u4E00\u523B\u8D77\u7B97\u3002\`to\` \u548C \`duration\` \u81F3\u5C11\u8981\u6709\u4E00\u4E2A\uFF0C\u540C\u65F6\u5199\u4EE5 \`to\` \u4E3A\u51C6\u3002
5162
+
3788
5163
  \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
3789
5164
 
3790
5165
  \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
@@ -3898,6 +5273,65 @@ ${DEFAULT_USER_FIELDS.map((field) => `\`${field}\`\uFF08${USER_FIELD_LABELS[fiel
3898
5273
  \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`;
3899
5274
  }
3900
5275
 
5276
+ // src/docs/ai-prompt/animation.ts
5277
+ function animationSection() {
5278
+ return `# \u52A8\u753B\u4E0E hover
5279
+
5280
+ \u4E24\u6B65\uFF1A\u9876\u5C42 \`keyframes\` \u5B9A\u4E49\u5173\u952E\u5E27 \u2192 \u9700\u8981\u52A8\u7684\u5730\u65B9\u5199 \`animate\` \u5F15\u7528\u5B83\u3002\u5173\u952E\u5E27\u5E93\u5168\u914D\u7F6E\u5171\u7528\u3002
5281
+
5282
+ \`\`\`jsonc
5283
+ "keyframes": {
5284
+ "zoomIn": { "from": { "opacity": "0", "transform": "scale(0.7)" },
5285
+ "to": { "opacity": "1", "transform": "scale(1)" } },
5286
+ "floatY": { "0%": { "transform": "translateY(0)" },
5287
+ "50%": { "transform": "translateY(-8px)" },
5288
+ "100%": { "transform": "translateY(0)" } }
5289
+ },
5290
+ "stage": {
5291
+ "animate": { "name": "zoomIn", "duration": 500, "easing": "cubic-bezier(0.34, 1.56, 0.64, 1)" },
5292
+ "maskAnimate": { "name": "fadeIn", "duration": 400 }
5293
+ },
5294
+ // \u4EFB\u610F\u8282\u70B9\u3001\u4EE5\u53CA stage.closeButton \u4E0A\u90FD\u80FD\u5199 animate
5295
+ { "animate": { "name": "floatY", "duration": 3000, "easing": "ease-in-out", "iteration": "infinite" } }
5296
+ \`\`\`
5297
+
5298
+ \`animate\` \u5B57\u6BB5\uFF1A\`name\`\uFF08\u5FC5\u586B\uFF0C\u5FC5\u987B\u5728 keyframes \u91CC\u5B9A\u4E49\u8FC7\uFF09\u3001\`duration\`\uFF08\u5FC5\u586B\uFF0C\u6BEB\u79D2\uFF0C>0\uFF09\u3001
5299
+ \`delay\`\uFF08\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 0\uFF09\u3001\`easing\`\uFF08\u9ED8\u8BA4 \`ease\`\uFF09\u3001\`iteration\`\uFF08\u6B63\u6574\u6570\u6216 \`"infinite"\`\uFF0C\u9ED8\u8BA4 1\uFF09\u3001
5300
+ \`direction\`\uFF08\`normal\`/\`reverse\`/\`alternate\`/\`alternate-reverse\`\uFF09\u3001\`fill\`\uFF08\u9ED8\u8BA4 \`both\`\uFF0C**\u4E0D\u8981\u6539**\uFF09\u3002
5301
+
5302
+ \`easing\` \u53EA\u80FD\u662F\uFF1A${ALLOWED_EASINGS.map((item) => "`" + item + "`").join(" ")}\uFF0C
5303
+ \u6216 \`cubic-bezier(0.34, 1.56, 0.64, 1)\` \u8FD9\u79CD\u56DB\u53C2\u6570\u5199\u6CD5\u3002**\u522B\u7684\u53D6\u503C\u4E00\u5F8B\u62A5\u9519**\u3002
5304
+
5305
+ \u5173\u952E\u5E27\u7684\u504F\u79FB\u91CF\u53EA\u80FD\u5199 \`"from"\` / \`"to"\` / \`"50%"\`\uFF1B\u6BCF\u4E00\u5E27\u7684\u503C\u662F\u6837\u5F0F\u5BF9\u8C61\uFF0C\u952E\u8D70 style \u767D\u540D\u5355
5306
+ \uFF08\u52A8\u753B\u91CC\u5E38\u7528\u7684\u5C31 \`transform\` \`opacity\` \`shadow\` \`background\` \`color\`\uFF09\u3002
5307
+
5308
+ \u89C4\u5219\uFF1A
5309
+
5310
+ - \u4E00\u4E2A\u8282\u70B9\u53EA\u80FD\u6302\u4E00\u7EC4 \`animate\`\u3002\u65E2\u8981\u5165\u573A\u53C8\u8981\u5FAA\u73AF\uFF0C\u5C31\u62C6\u6210\u7236\u5B50\u4E24\u5C42
5311
+ - \u4EA4\u9519\u5165\u573A\u7528**\u540C\u4E00\u7EC4\u5173\u952E\u5E27 + \u4E0D\u540C \`delay\`**\u3002\`delay\` \u5FC5\u987B\u662F\u5E38\u91CF\u6570\u5B57\uFF0C\u4E0D\u652F\u6301 \`{{ }}\`\uFF0C\u6240\u4EE5\u4EA4\u9519\u5217\u8868\u8981\u4E00\u683C\u4E00\u683C\u5199\u3001\u4E0D\u80FD\u7528 \`repeat\`
5312
+ - \u5FAA\u73AF\u52A8\u753B\u5199 \`"iteration": "infinite"\`\uFF0C\u5E45\u5EA6\u8981\u5C0F\uFF08\u6309\u94AE\u8109\u51B2\u653E\u5927 2% \u5C31\u591F\uFF09
5313
+ - \u4F4D\u79FB\u4E00\u5F8B\u7528 \`transform\`\uFF0C\u4E0D\u8981\u52A8\u5BBD\u9AD8 / \`left\`\uFF08\u6BCF\u5E27\u91CD\u6392\uFF09\uFF1B\u6309\u94AE\u547C\u5438\u4F18\u5148\u52A8 \`shadow\`
5314
+ - \u88C5\u9970\u5C42\uFF08\u5149\u6655\u3001\u626B\u5149\u6761\u3001\u5149\u70B9\uFF09\u5FC5\u987B\u5199 \`"pointerEvents": "none"\`\uFF0C\u5426\u5219\u6321\u4F4F\u4E0B\u9762\u7684\u6309\u94AE
5315
+ - \u5B9A\u4E49\u4E86\u6CA1\u4EBA\u5F15\u7528\u7684\u5173\u952E\u5E27\u4F1A\u544A\u8B66\uFF0C\u4E0D\u8981\u7559
5316
+
5317
+ \`hoverStyle\` \u4E0E \`style\` \u540C\u4E00\u5957\u767D\u540D\u5355\uFF0C\u53EA\u5728\u9F20\u6807\u60AC\u505C\u65F6\u751F\u6548\uFF08\u8282\u70B9\u4E0E \`stage.closeButton\` \u90FD\u80FD\u5199\uFF09\u3002
5318
+ \u8981\u5E73\u6ED1\u8FC7\u6E21\u5C31\u5728 \`style\` \u91CC\u5199 \`transition\`\u3002\u89E6\u5C4F\u6CA1\u6709 hover\uFF0C**hover \u91CC\u4E0D\u80FD\u653E\u4FE1\u606F**\u3002
5319
+ \u5E26\u5FAA\u73AF\u52A8\u753B\u7684\u6309\u94AE\u60F3\u5728\u60AC\u505C\u65F6\u505C\u4F4F\uFF0C\u5728 \`hoverStyle\` \u91CC\u52A0 \`"animationPlayState": "paused"\`
5320
+ \uFF08\u5199\u8FDB \`style\` \u7B49\u4E8E\u4E00\u5F00\u59CB\u5C31\u6682\u505C\uFF0C\u6CA1\u6709\u610F\u4E49\uFF09\u3002
5321
+
5322
+ \`\`\`jsonc
5323
+ { "type": "text", "content": "\u2715",
5324
+ "style": { "background": "rgba(0,0,0,0.08)", "transition": "background 0.2s" },
5325
+ "hoverStyle": { "background": "rgba(0,0,0,0.2)" } }
5326
+ \`\`\`
5327
+
5328
+ \u7CFB\u7EDF\u5F00\u4E86\u300C\u51CF\u5C11\u52A8\u6001\u6548\u679C\u300D\u65F6\uFF0C\u89E3\u91CA\u5668\u4F1A\u81EA\u52A8\u628A\u8FD9\u4EFD\u7269\u6599\u7684\u52A8\u753B\u548C\u8FC7\u6E21\u5168\u90E8\u5173\u6389\uFF0C\u914D\u7F6E\u91CC\u4E0D\u7528\u7BA1\uFF0C
5329
+ \u4E5F\u6CA1\u6709\u5F00\u5173\u80FD\u7ED5\u8FC7 \u2014\u2014 \u6240\u4EE5**\u9759\u6B62\u72B6\u6001\u4E0B\u8FD9\u4EFD\u7269\u6599\u5FC5\u987B\u5B8C\u6574\u53EF\u8BFB\u3001\u53EF\u70B9**\u3002
5330
+
5331
+ \u6CA1\u6709 \`position\`\u3001\u6CA1\u6709\u81EA\u7531 CSS\uFF1A\u7EDD\u5BF9\u5B9A\u4F4D\u7528 \`rect\`\uFF0C\`zIndex\` \u53EA\u5141\u8BB8 0~10\u3002
5332
+ \`keyframes\` \u548C \`hoverStyle\` \u7684\u503C\u91CC\u51FA\u73B0 \`{\` \`}\` \`<\` \`>\` \`;\` \`@\` \`/*\` \`\\\` \u65F6\uFF0C\u90A3\u6761\u58F0\u660E\u4F1A\u88AB\u6574\u6761\u4E22\u5F03\u3002`;
5333
+ }
5334
+
3901
5335
  // src/docs/ai-prompt/index.ts
3902
5336
  function findExample(value) {
3903
5337
  const found = examples_default.filter((item) => item.value === value)[0];
@@ -3931,6 +5365,7 @@ ${JSON.stringify(full, null, 2)}
3931
5365
  actionSection(),
3932
5366
  viewsSection(),
3933
5367
  countdownSection(),
5368
+ animationSection(),
3934
5369
  exampleSection,
3935
5370
  checklistSection(),
3936
5371
  requirementSection()