dsh-ppt-studio 1.1.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.
- package/LICENSE +21 -0
- package/README.md +480 -0
- package/agent-presets/ppt/agent.cordis.yml +308 -0
- package/agent-presets/ppt/preset.yml +3 -0
- package/cordis.patch.yml +29 -0
- package/docs/00-/350/256/276/350/256/241/346/272/220.md +537 -0
- package/docs/01-/351/234/200/346/261/202/344/270/216/347/233/256/346/240/207.md +136 -0
- package/docs/02-/346/212/200/346/234/257/346/212/245/345/221/212.md +483 -0
- package/docs/03-/346/233/264/346/226/260/346/227/245/345/277/227.md +2898 -0
- package/docs/04-/350/267/257/347/272/277/345/233/276/344/270/216/351/207/214/347/250/213/347/242/221.md +113 -0
- package/docs/05-/350/277/255/344/273/243/346/265/201/347/250/213.md +210 -0
- package/docs/06-/350/257/204/345/256/241/344/270/216/346/265/213/350/257/225.md +296 -0
- package/docs/fidelity-report.md +225 -0
- package/examples/fx/fx-mini/deck.yaml +39 -0
- package/examples/fx/fx-mini/pages/01.yaml +6 -0
- package/examples/fx/fx-mini/pages/02.yaml +2 -0
- package/examples/fx/fx-mini/pages/03.yaml +6 -0
- package/examples/fx/fx-pro/deck.yaml +48 -0
- package/examples/fx/fx-pro/pages/01_cover.yaml +40 -0
- package/examples/fx/fx-pro/pages/02_arch.yaml +55 -0
- package/examples/fx/fx-pro/pages/03_table.yaml +20 -0
- package/examples/fx/fx-pro/pages/04_chart.yaml +40 -0
- package/examples/fx/fx-pro/pages/05_timeline.yaml +71 -0
- package/examples/fx/fx-pro/pages/06_longtext.yaml +13 -0
- package/examples/fx/fx-pro/pages/07_safearea.yaml +33 -0
- package/examples/fx/fx-pro/pages/08_contrast.yaml +22 -0
- package/examples/fx/fx-pro/pages/09_custgeom.yaml +32 -0
- package/examples/fx/fx-pro/pages/10_numbers.yaml +25 -0
- package/examples/fx/fx-pro/pages/11_section.yaml +20 -0
- package/examples/fx/fx-pro/pages/12_summary.yaml +57 -0
- package/examples/fx/fx-pro/preview/01_pages_01_cover.html +1 -0
- package/examples/fx/fx-pro/preview/02_pages_02_arch.html +3 -0
- package/examples/fx/fx-pro/preview/03_pages_03_table.html +1 -0
- package/examples/fx/fx-pro/preview/04_pages_04_chart.html +3 -0
- package/examples/fx/fx-pro/preview/05_pages_05_timeline.html +2 -0
- package/examples/fx/fx-pro/preview/06_pages_06_longtext.html +4 -0
- package/examples/fx/fx-pro/preview/07_pages_07_safearea.html +2 -0
- package/examples/fx/fx-pro/preview/08_pages_08_contrast.html +1 -0
- package/examples/fx/fx-pro/preview/09_pages_09_custgeom.html +1 -0
- package/examples/fx/fx-pro/preview/10_pages_10_numbers.html +1 -0
- package/examples/fx/fx-pro/preview/11_pages_11_section.html +1 -0
- package/examples/fx/fx-pro/preview/12_pages_12_summary.html +1 -0
- package/examples/fx/fx-pro/preview/deck.html +10 -0
- package/examples/fx/fx-pro/preview/layout.json +2325 -0
- package/examples/fx/fx-pro/preview/measured.json +814 -0
- package/examples/fx/fx-pro.pptx +0 -0
- package/examples/fx/ren-single/01.png +0 -0
- package/examples/fx/ren-spliced/01.png +0 -0
- package/examples/fx/ren-spliced/03.png +0 -0
- package/examples/fx/seed.pptx +0 -0
- package/examples/fx/single.pptx +0 -0
- package/examples/fx/spliced.pptx +0 -0
- package/examples/smoke/deck.yaml +26 -0
- package/examples/smoke/imported/deck.yaml +30 -0
- package/examples/smoke/imported/import-styles.json +126 -0
- package/examples/smoke/imported/pages/slide_01.yaml +31 -0
- package/examples/smoke/imported/pages/slide_02.yaml +38 -0
- package/examples/smoke/imported/pages/slide_03.yaml +55 -0
- package/examples/smoke/imported/preview-rt/01_pages_slide_01.html +1 -0
- package/examples/smoke/imported/preview-rt/02_pages_slide_02.html +1 -0
- package/examples/smoke/imported/preview-rt/03_pages_slide_03.html +1 -0
- package/examples/smoke/imported/preview-rt/deck.html +1 -0
- package/examples/smoke/imported/preview-rt/layout.json +434 -0
- package/examples/smoke/imported/reference/previews/01.png +0 -0
- package/examples/smoke/imported/reference/previews/02.png +0 -0
- package/examples/smoke/imported/reference/previews/03.png +0 -0
- package/examples/smoke/imported/source.pptx +0 -0
- package/examples/smoke/media-test.png +0 -0
- package/examples/smoke/out-smoke.pptx +0 -0
- package/examples/smoke/pages/01_cover.yaml +27 -0
- package/examples/smoke/pages/02_content.yaml +42 -0
- package/examples/smoke/pages/03_chart.yaml +35 -0
- package/examples/smoke/preview/01_pages_01_cover.html +1 -0
- package/examples/smoke/preview/02_pages_02_content.html +1 -0
- package/examples/smoke/preview/03_pages_03_chart.html +1 -0
- package/examples/smoke/preview/deck.html +1 -0
- package/examples/smoke/preview/layout.json +378 -0
- package/lib/autodeclare.js +40 -0
- package/lib/commands.js +161 -0
- package/lib/crosscheck.js +300 -0
- package/lib/imgmeta.js +55 -0
- package/lib/index.js +239 -0
- package/lib/measurement.js +209 -0
- package/lib/msrender.js +123 -0
- package/lib/pptd/export-pptx.js +686 -0
- package/lib/pptd/import-pptx.js +774 -0
- package/lib/pptd/layout.js +209 -0
- package/lib/pptd/render-html.js +254 -0
- package/lib/pptd/schema.js +518 -0
- package/lib/pptd/svgCharts.js +147 -0
- package/lib/pptxPy.js +205 -0
- package/lib/preset-delivery.js +195 -0
- package/lib/preview-server.js +164 -0
- package/lib/router.js +165 -0
- package/lib/scaffold.js +315 -0
- package/lib/skill.js +174 -0
- package/lib/splice.js +219 -0
- package/lib/state.js +88 -0
- package/lib/surgical.js +369 -0
- package/lib/templates.js +400 -0
- package/lib/tools.js +955 -0
- package/lib/verify.js +828 -0
- package/lib/xmljs.js +112 -0
- package/lib/zips.js +117 -0
- package/package.json +81 -0
- package/scripts/audit-manual-facts.mjs +294 -0
- package/scripts/audit-template-fidelity.mjs +162 -0
- package/scripts/bench-m2.mjs +48 -0
- package/scripts/build-templates.mjs +63 -0
- package/scripts/build.mjs +14 -0
- package/scripts/build.sh +7 -0
- package/scripts/check-lib-freshness.mjs +70 -0
- package/scripts/check-preset.mjs +189 -0
- package/scripts/check-tracked-lf.mjs +84 -0
- package/scripts/dbg-import.mjs +13 -0
- package/scripts/dbg-media.mjs +10 -0
- package/scripts/dbg-tpl-inventory.mjs +23 -0
- package/scripts/dump-workflow-baseline.mjs +38 -0
- package/scripts/e2e-1.0.mjs +129 -0
- package/scripts/eval-skills-blind.mjs +91 -0
- package/scripts/eval-skills-score.mjs +129 -0
- package/scripts/export-orig-templates.ps1 +17 -0
- package/scripts/fixtures/workflow-baseline.json +300 -0
- package/scripts/fixtures.mjs +501 -0
- package/scripts/import-user-templates.mjs +60 -0
- package/scripts/install-desktop.mjs +312 -0
- package/scripts/install.mjs +209 -0
- package/scripts/migrate-templates-dualtrack.mjs +71 -0
- package/scripts/preflight-1.0.mjs +198 -0
- package/scripts/probe-asset-freshness.mjs +57 -0
- package/scripts/probe-effect-semantics.mjs +69 -0
- package/scripts/probe-reparse-safety.mjs +32 -0
- package/scripts/rebuild-templates-c11.mjs +69 -0
- package/scripts/regression-real.mjs +84 -0
- package/scripts/release-sync.mjs +425 -0
- package/scripts/shot-templates.mjs +49 -0
- package/scripts/smoke.mjs +2512 -0
- package/scripts/verify-bundle-install.mjs +281 -0
- package/scripts/verify-fresh-install.mjs +260 -0
- package/skills/ppt-studio-copy/SKILL.md +139 -0
- package/skills/ppt-studio-craft/SKILL.md +171 -0
- package/skills/ppt-studio-data/SKILL.md +173 -0
- package/skills/ppt-studio-manual/SKILL.md +104 -0
- package/templates/academic-white/deck.yaml +24 -0
- package/templates/academic-white/pages/_chart.yaml +43 -0
- package/templates/academic-white/pages/_compare.yaml +37 -0
- package/templates/academic-white/pages/_content.yaml +35 -0
- package/templates/academic-white/pages/_cover.yaml +28 -0
- package/templates/academic-white/pages/_ending.yaml +28 -0
- package/templates/academic-white/pages/_flow.yaml +61 -0
- package/templates/academic-white/preview.png +0 -0
- package/templates/academic-white/template.yaml +14 -0
- package/templates/business-blue/deck.yaml +28 -0
- package/templates/business-blue/pages/_chart.yaml +36 -0
- package/templates/business-blue/pages/_compare.yaml +45 -0
- package/templates/business-blue/pages/_content.yaml +80 -0
- package/templates/business-blue/pages/_cover.yaml +39 -0
- package/templates/business-blue/pages/_ending.yaml +32 -0
- package/templates/business-blue/pages/_flow.yaml +87 -0
- package/templates/business-blue/preview.png +0 -0
- package/templates/business-blue/template.yaml +14 -0
- package/templates/pitch-bold/deck.yaml +23 -0
- package/templates/pitch-bold/pages/_chart.yaml +32 -0
- package/templates/pitch-bold/pages/_compare.yaml +36 -0
- package/templates/pitch-bold/pages/_content.yaml +58 -0
- package/templates/pitch-bold/pages/_cover.yaml +31 -0
- package/templates/pitch-bold/pages/_ending.yaml +27 -0
- package/templates/pitch-bold/pages/_flow.yaml +46 -0
- package/templates/pitch-bold/preview.png +0 -0
- package/templates/pitch-bold/template.yaml +14 -0
- package/templates/tech-dark/deck.yaml +24 -0
- package/templates/tech-dark/pages/_chart.yaml +27 -0
- package/templates/tech-dark/pages/_compare.yaml +38 -0
- package/templates/tech-dark/pages/_content.yaml +51 -0
- package/templates/tech-dark/pages/_cover.yaml +30 -0
- package/templates/tech-dark/pages/_ending.yaml +25 -0
- package/templates/tech-dark/pages/_flow.yaml +80 -0
- package/templates/tech-dark/preview.png +0 -0
- package/templates/tech-dark/template.yaml +14 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
pageType: content
|
|
2
|
+
# 图表页母版(大字版:数字冲击 + 简图)
|
|
3
|
+
# 【2026-09-18】不预置"数据口径/来源/脱敏声明"占位块:依据写进页面 `source:` 字段(YAML,不进成品);
|
|
4
|
+
# 页面上只有读者确实需要知道口径时才留一行小字,不要逐页挂(见 ppt-studio-data §3)。
|
|
5
|
+
expectedOverlaps:
|
|
6
|
+
- {pair: [bigNumBg, bigNum]}
|
|
7
|
+
elements:
|
|
8
|
+
- elementId: kick
|
|
9
|
+
elementType: text
|
|
10
|
+
bounds: [60, 48, 400, 26]
|
|
11
|
+
content: {text: "03 · PROOF", style: "$caption", color: "$orange"}
|
|
12
|
+
- elementId: title
|
|
13
|
+
elementType: text
|
|
14
|
+
bounds: [60, 84, 840, 90]
|
|
15
|
+
content: {text: "数据证明:核心指标", style: "$title", color: "$ink", fontSize: 40}
|
|
16
|
+
- elementId: bigNumBg
|
|
17
|
+
elementType: shape
|
|
18
|
+
kind: rect
|
|
19
|
+
bounds: [60, 220, 340, 180]
|
|
20
|
+
fill: "$orange"
|
|
21
|
+
- elementId: bigNum
|
|
22
|
+
elementType: text
|
|
23
|
+
bounds: [80, 240, 300, 140]
|
|
24
|
+
content: {text: "10 倍\n(44pt 大数字)", style: "$title", color: "#FFFFFF", fontSize: 44}
|
|
25
|
+
- elementId: chartEl
|
|
26
|
+
elementType: chart
|
|
27
|
+
bounds: [460, 200, 440, 220]
|
|
28
|
+
chart: {type: bar, data: {cols: ["指标", "值"], rows: [["当前", 12], ["改进", 88]]}}
|
|
29
|
+
- elementId: footer
|
|
30
|
+
elementType: text
|
|
31
|
+
bounds: [60, 500, 300, 20]
|
|
32
|
+
content: {text: "第 4 页 · 公司名", style: "$caption"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
pageType: content
|
|
2
|
+
# 对比页母版(大字版:红黑对撞)
|
|
3
|
+
expectedOverlaps:
|
|
4
|
+
- {pair: [badBox, badT]}
|
|
5
|
+
- {pair: [goodBox, goodT]}
|
|
6
|
+
elements:
|
|
7
|
+
- elementId: kick
|
|
8
|
+
elementType: text
|
|
9
|
+
bounds: [60, 48, 400, 26]
|
|
10
|
+
content: {text: "04 · VS", style: "$caption", color: "$orange"}
|
|
11
|
+
- elementId: title
|
|
12
|
+
elementType: text
|
|
13
|
+
bounds: [60, 84, 840, 90]
|
|
14
|
+
content: {text: "对比:没有它 vs 有它", style: "$title", color: "$ink", fontSize: 40}
|
|
15
|
+
- elementId: badBox
|
|
16
|
+
elementType: shape
|
|
17
|
+
kind: rect
|
|
18
|
+
bounds: [60, 210, 390, 220]
|
|
19
|
+
fill: "$light"
|
|
20
|
+
- elementId: badT
|
|
21
|
+
elementType: text
|
|
22
|
+
bounds: [84, 234, 344, 180]
|
|
23
|
+
content: {text: "现状/痛点\n\n一句话:没有它时的问题", style: "$body", color: "$ink", fontSize: 18}
|
|
24
|
+
- elementId: goodBox
|
|
25
|
+
elementType: shape
|
|
26
|
+
kind: rect
|
|
27
|
+
bounds: [510, 210, 390, 220]
|
|
28
|
+
fill: "$orange"
|
|
29
|
+
- elementId: goodT
|
|
30
|
+
elementType: text
|
|
31
|
+
bounds: [534, 234, 344, 180]
|
|
32
|
+
content: {text: "有它/方案\n\n一句话:带来的改变", style: "$body", color: "#FFFFFF", fontSize: 18}
|
|
33
|
+
- elementId: footer
|
|
34
|
+
elementType: text
|
|
35
|
+
bounds: [60, 500, 300, 20]
|
|
36
|
+
content: {text: "第 5 页 · 公司名", style: "$caption"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
pageType: content
|
|
2
|
+
# 内容页骨架(大字版):大标题 + 三大要点(数字徽标 + 极简)
|
|
3
|
+
expectedOverlaps:
|
|
4
|
+
- {pair: [n1, n1T]}
|
|
5
|
+
- {pair: [n2, n2T]}
|
|
6
|
+
- {pair: [n3, n3T]}
|
|
7
|
+
elements:
|
|
8
|
+
- elementId: kick
|
|
9
|
+
elementType: text
|
|
10
|
+
bounds: [60, 48, 400, 26]
|
|
11
|
+
content: {text: "01 · WHY", style: "$caption", color: "$orange"}
|
|
12
|
+
- elementId: title
|
|
13
|
+
elementType: text
|
|
14
|
+
bounds: [60, 84, 840, 90]
|
|
15
|
+
content: {text: "大标题:三句话讲清一大点", style: "$title", color: "$ink", fontSize: 40}
|
|
16
|
+
- elementId: n1
|
|
17
|
+
elementType: shape
|
|
18
|
+
kind: ellipse
|
|
19
|
+
bounds: [60, 220, 64, 64]
|
|
20
|
+
fill: "$orange"
|
|
21
|
+
- elementId: n1T
|
|
22
|
+
elementType: text
|
|
23
|
+
bounds: [60, 220, 64, 64]
|
|
24
|
+
content: {text: "1", style: "$title", color: "#FFFFFF", fontSize: 28, align: center}
|
|
25
|
+
- elementId: p1
|
|
26
|
+
elementType: text
|
|
27
|
+
bounds: [60, 306, 260, 120]
|
|
28
|
+
content: {text: "要点一\n(18pt)一句话", style: "$body", color: "$ink", fontSize: 18}
|
|
29
|
+
- elementId: n2
|
|
30
|
+
elementType: shape
|
|
31
|
+
kind: ellipse
|
|
32
|
+
bounds: [350, 220, 64, 64]
|
|
33
|
+
fill: "$ink"
|
|
34
|
+
- elementId: n2T
|
|
35
|
+
elementType: text
|
|
36
|
+
bounds: [350, 220, 64, 64]
|
|
37
|
+
content: {text: "2", style: "$title", color: "#FFFFFF", fontSize: 28, align: center}
|
|
38
|
+
- elementId: p2
|
|
39
|
+
elementType: text
|
|
40
|
+
bounds: [350, 306, 260, 120]
|
|
41
|
+
content: {text: "要点二\n(18pt)一句话", style: "$body", color: "$ink", fontSize: 18}
|
|
42
|
+
- elementId: n3
|
|
43
|
+
elementType: shape
|
|
44
|
+
kind: ellipse
|
|
45
|
+
bounds: [640, 220, 64, 64]
|
|
46
|
+
fill: "$gray"
|
|
47
|
+
- elementId: n3T
|
|
48
|
+
elementType: text
|
|
49
|
+
bounds: [640, 220, 64, 64]
|
|
50
|
+
content: {text: "3", style: "$title", color: "#FFFFFF", fontSize: 28, align: center}
|
|
51
|
+
- elementId: p3
|
|
52
|
+
elementType: text
|
|
53
|
+
bounds: [640, 306, 260, 120]
|
|
54
|
+
content: {text: "要点三\n(18pt)一句话", style: "$body", color: "$ink", fontSize: 18}
|
|
55
|
+
- elementId: footer
|
|
56
|
+
elementType: text
|
|
57
|
+
bounds: [60, 500, 300, 20]
|
|
58
|
+
content: {text: "第 2 页 · 公司名", style: "$caption"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
pageType: cover
|
|
2
|
+
background: {type: solid, color: "$bg"}
|
|
3
|
+
safeArea: {top: 16, bottom: 16}
|
|
4
|
+
expectedOverlaps:
|
|
5
|
+
- {pair: [tag, tagT]}
|
|
6
|
+
elements:
|
|
7
|
+
- elementId: kick
|
|
8
|
+
elementType: text
|
|
9
|
+
bounds: [60, 70, 400, 30]
|
|
10
|
+
content: {text: "PITCH · 路演", style: "$caption", color: "$orange"}
|
|
11
|
+
- elementId: title
|
|
12
|
+
elementType: text
|
|
13
|
+
bounds: [60, 130, 840, 200]
|
|
14
|
+
content: {text: "一句话\n说清你做什么", style: "$title", color: "$ink", fontSize: 56, lineHeight: 1.2}
|
|
15
|
+
- elementId: sub
|
|
16
|
+
elementType: text
|
|
17
|
+
bounds: [60, 360, 840, 60]
|
|
18
|
+
content: {text: "副标题:为谁解决什么问题(18pt)", style: "$body", color: "$gray", fontSize: 18}
|
|
19
|
+
- elementId: tag
|
|
20
|
+
elementType: shape
|
|
21
|
+
kind: rect
|
|
22
|
+
bounds: [60, 452, 120, 36]
|
|
23
|
+
fill: "$orange"
|
|
24
|
+
- elementId: tagT
|
|
25
|
+
elementType: text
|
|
26
|
+
bounds: [60, 462, 120, 22]
|
|
27
|
+
content: {text: "公司名", style: "$label", color: "#FFFFFF", align: center}
|
|
28
|
+
- elementId: date
|
|
29
|
+
elementType: text
|
|
30
|
+
bounds: [200, 462, 300, 22]
|
|
31
|
+
content: {text: "日期 · 场合", style: "$caption"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
pageType: cover
|
|
2
|
+
background: {type: solid, color: "$bg"}
|
|
3
|
+
safeArea: {top: 16, bottom: 16}
|
|
4
|
+
expectedOverlaps:
|
|
5
|
+
- {pair: [tag, tagT]}
|
|
6
|
+
elements:
|
|
7
|
+
- elementId: title
|
|
8
|
+
elementType: text
|
|
9
|
+
bounds: [60, 130, 840, 200]
|
|
10
|
+
content: {text: "一起\n做成这件事", style: "$title", color: "$ink", fontSize: 56, lineHeight: 1.2}
|
|
11
|
+
- elementId: ask
|
|
12
|
+
elementType: text
|
|
13
|
+
bounds: [60, 360, 840, 40]
|
|
14
|
+
content: {text: "下一步:融资/合作/联系(18pt)", style: "$body", color: "$gray", fontSize: 18}
|
|
15
|
+
- elementId: tag
|
|
16
|
+
elementType: shape
|
|
17
|
+
kind: rect
|
|
18
|
+
bounds: [60, 452, 120, 36]
|
|
19
|
+
fill: "$orange"
|
|
20
|
+
- elementId: tagT
|
|
21
|
+
elementType: text
|
|
22
|
+
bounds: [60, 462, 120, 22]
|
|
23
|
+
content: {text: "公司名", style: "$label", color: "#FFFFFF", align: center}
|
|
24
|
+
- elementId: date
|
|
25
|
+
elementType: text
|
|
26
|
+
bounds: [200, 462, 300, 22]
|
|
27
|
+
content: {text: "联系邮箱 · 日期", style: "$caption"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
pageType: content
|
|
2
|
+
# 流程页母版(大字版:三闸门式)
|
|
3
|
+
expectedOverlaps:
|
|
4
|
+
- {pair: [s1, s1T]}
|
|
5
|
+
- {pair: [s2, s2T]}
|
|
6
|
+
- {pair: [s3, s3T]}
|
|
7
|
+
elements:
|
|
8
|
+
- elementId: kick
|
|
9
|
+
elementType: text
|
|
10
|
+
bounds: [60, 48, 400, 26]
|
|
11
|
+
content: {text: "02 · HOW", style: "$caption", color: "$orange"}
|
|
12
|
+
- elementId: title
|
|
13
|
+
elementType: text
|
|
14
|
+
bounds: [60, 84, 840, 90]
|
|
15
|
+
content: {text: "怎么做到:三步主线", style: "$title", color: "$ink", fontSize: 40}
|
|
16
|
+
- elementId: s1
|
|
17
|
+
elementType: shape
|
|
18
|
+
kind: rect
|
|
19
|
+
bounds: [60, 210, 250, 170]
|
|
20
|
+
fill: "$orange"
|
|
21
|
+
- elementId: s1T
|
|
22
|
+
elementType: text
|
|
23
|
+
bounds: [76, 226, 220, 140]
|
|
24
|
+
content: {text: "01 抓手\n\n一句话说明", style: "$body", color: "#FFFFFF", fontSize: 16}
|
|
25
|
+
- elementId: s2
|
|
26
|
+
elementType: shape
|
|
27
|
+
kind: rect
|
|
28
|
+
bounds: [355, 210, 250, 170]
|
|
29
|
+
fill: "$light"
|
|
30
|
+
- elementId: s2T
|
|
31
|
+
elementType: text
|
|
32
|
+
bounds: [371, 226, 220, 140]
|
|
33
|
+
content: {text: "02 引擎\n\n一句话说明", style: "$body", color: "$ink", fontSize: 16}
|
|
34
|
+
- elementId: s3
|
|
35
|
+
elementType: shape
|
|
36
|
+
kind: rect
|
|
37
|
+
bounds: [650, 210, 250, 170]
|
|
38
|
+
fill: "$light"
|
|
39
|
+
- elementId: s3T
|
|
40
|
+
elementType: text
|
|
41
|
+
bounds: [666, 226, 220, 140]
|
|
42
|
+
content: {text: "03 放大\n\n一句话说明", style: "$body", color: "$ink", fontSize: 16}
|
|
43
|
+
- elementId: footer
|
|
44
|
+
elementType: text
|
|
45
|
+
bounds: [60, 500, 300, 20]
|
|
46
|
+
content: {text: "第 3 页 · 公司名", style: "$caption"}
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
id: pitch-bold
|
|
2
|
+
name: 路演大字
|
|
3
|
+
style: 路演 / 大字报 / 极简
|
|
4
|
+
scene: 融资路演、产品推介、开营大课
|
|
5
|
+
desc: 白底 + 超大字号(标题 44pt+)+ 单一强调色(橙红);每页一个核心信息,一屏一线索。
|
|
6
|
+
words: 大字 / 冲击 / 极简 / 一屏一信息
|
|
7
|
+
colors: ["#E4572E", "#1F2937", "#FFFFFF", "#F2F3F5", "#9AA1A9"]
|
|
8
|
+
pages:
|
|
9
|
+
- pages/_cover.yaml
|
|
10
|
+
- pages/_content.yaml
|
|
11
|
+
- pages/_flow.yaml
|
|
12
|
+
- pages/_chart.yaml
|
|
13
|
+
- pages/_compare.yaml
|
|
14
|
+
- pages/_ending.yaml
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 科技深色模板工作区骨架
|
|
2
|
+
version: 1
|
|
3
|
+
title: 未命名发布
|
|
4
|
+
size: [960, 540]
|
|
5
|
+
theme:
|
|
6
|
+
colors:
|
|
7
|
+
bg: "#0F1B2D" # 深底
|
|
8
|
+
cyan: "#22D3EE" # 强调青
|
|
9
|
+
card: "#1E3A5F" # 卡片
|
|
10
|
+
white: "#E2E8F0" # 正文
|
|
11
|
+
sub: "#8FA3BF" # 次要
|
|
12
|
+
chip: "#334155" # 点缀
|
|
13
|
+
textStyles:
|
|
14
|
+
title: {fontSize: 32, color: "$white", bold: true}
|
|
15
|
+
h2: {fontSize: 20, color: "$cyan", bold: true}
|
|
16
|
+
body: {fontSize: 14, color: "$white"}
|
|
17
|
+
label: {fontSize: 12, color: "$white"}
|
|
18
|
+
caption: {fontSize: 12, color: "$sub"}
|
|
19
|
+
safeArea: {top: 16, bottom: 16}
|
|
20
|
+
grid: {base: 8}
|
|
21
|
+
minFontSize: 12
|
|
22
|
+
pages:
|
|
23
|
+
- pages/_cover.yaml
|
|
24
|
+
- pages/_content.yaml
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
pageType: content
|
|
2
|
+
# 图表页母版(深色版)
|
|
3
|
+
# 【2026-09-18】不预置"数据口径/来源/脱敏声明"占位块:依据写进页面 `source:` 字段(YAML,不进成品);
|
|
4
|
+
# 页面上只有读者确实需要知道口径时才留一行小字,不要逐页挂(见 ppt-studio-data §3)。
|
|
5
|
+
expectedOutOfSafeArea: [accentBar, pageTitle]
|
|
6
|
+
elements:
|
|
7
|
+
- elementId: accentBar
|
|
8
|
+
elementType: shape
|
|
9
|
+
kind: rect
|
|
10
|
+
bounds: [0, 0, 8, 46]
|
|
11
|
+
fill: "$cyan"
|
|
12
|
+
- elementId: pageTitle
|
|
13
|
+
elementType: text
|
|
14
|
+
bounds: [20, 10, 700, 30]
|
|
15
|
+
content: {text: "数据表现:指标趋势", style: "$title", color: "$white", fontSize: 24}
|
|
16
|
+
- elementId: chartEl
|
|
17
|
+
elementType: chart
|
|
18
|
+
bounds: [60, 90, 620, 360]
|
|
19
|
+
chart: {type: bar, data: {cols: ["指标", "值"], rows: [["A", 45], ["B", 66], ["C", 52], ["D", 88]]}, colors: ["#22D3EE"]}
|
|
20
|
+
- elementId: ins
|
|
21
|
+
elementType: text
|
|
22
|
+
bounds: [720, 110, 180, 120]
|
|
23
|
+
content: {text: "读图结论\n(阈值点 88%)", style: "$label", color: "$cyan", bold: true}
|
|
24
|
+
- elementId: footer
|
|
25
|
+
elementType: text
|
|
26
|
+
bounds: [60, 505, 300, 18]
|
|
27
|
+
content: {text: "产品名 · 数据页", style: "$caption"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
pageType: content
|
|
2
|
+
# 对比页母版(深色版:亮暗面)
|
|
3
|
+
expectedOverlaps:
|
|
4
|
+
- {pair: [darkBox, darkT]}
|
|
5
|
+
- {pair: [lightBox, lightT]}
|
|
6
|
+
expectedOutOfSafeArea: [accentBar, pageTitle]
|
|
7
|
+
elements:
|
|
8
|
+
- elementId: accentBar
|
|
9
|
+
elementType: shape
|
|
10
|
+
kind: rect
|
|
11
|
+
bounds: [0, 0, 8, 46]
|
|
12
|
+
fill: "$cyan"
|
|
13
|
+
- elementId: pageTitle
|
|
14
|
+
elementType: text
|
|
15
|
+
bounds: [20, 10, 700, 30]
|
|
16
|
+
content: {text: "对比:现状 vs 方案", style: "$title", color: "$white", fontSize: 24}
|
|
17
|
+
- elementId: darkBox
|
|
18
|
+
elementType: shape
|
|
19
|
+
kind: roundRect
|
|
20
|
+
bounds: [60, 100, 390, 340]
|
|
21
|
+
fill: "$card"
|
|
22
|
+
- elementId: darkT
|
|
23
|
+
elementType: text
|
|
24
|
+
bounds: [84, 124, 340, 290]
|
|
25
|
+
content: {text: "现状/痛点\n\n- 问题 1:描述\n- 问题 2:描述\n- 问题 3:描述", style: "$body", color: "$sub", fontSize: 14}
|
|
26
|
+
- elementId: lightBox
|
|
27
|
+
elementType: shape
|
|
28
|
+
kind: roundRect
|
|
29
|
+
bounds: [510, 100, 390, 340]
|
|
30
|
+
fill: "$cyan"
|
|
31
|
+
- elementId: lightT
|
|
32
|
+
elementType: text
|
|
33
|
+
bounds: [534, 124, 340, 290]
|
|
34
|
+
content: {text: "方案/亮点\n\n- 亮点 1:描述\n- 亮点 2:描述\n- 亮点 3:描述", style: "$body", color: "#0F1B2D", fontSize: 14}
|
|
35
|
+
- elementId: vs
|
|
36
|
+
elementType: text
|
|
37
|
+
bounds: [452, 258, 56, 30]
|
|
38
|
+
content: {text: "VS", style: "$h2", color: "$white", align: center}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
pageType: content
|
|
2
|
+
# 内容页骨架(深色版):左上角标 + 标题 + 大圆角卡片
|
|
3
|
+
expectedOverlaps:
|
|
4
|
+
- {pair: [accentBar, pageTitle]}
|
|
5
|
+
- {pair: [cardA, cardAT]}
|
|
6
|
+
- {pair: [cardB, cardBT]}
|
|
7
|
+
expectedOutOfSafeArea: [accentBar, pageTitle, pageNo]
|
|
8
|
+
elements:
|
|
9
|
+
- elementId: accentBar
|
|
10
|
+
elementType: shape
|
|
11
|
+
kind: rect
|
|
12
|
+
bounds: [0, 0, 8, 46]
|
|
13
|
+
fill: "$cyan"
|
|
14
|
+
- elementId: pageTitle
|
|
15
|
+
elementType: text
|
|
16
|
+
bounds: [20, 10, 700, 30]
|
|
17
|
+
content: {text: "章节标题", style: "$title", color: "$white", fontSize: 24}
|
|
18
|
+
- elementId: pageNo
|
|
19
|
+
elementType: text
|
|
20
|
+
bounds: [888, 12, 52, 24]
|
|
21
|
+
content: {text: "12", style: "$caption", align: right}
|
|
22
|
+
- elementId: cardA
|
|
23
|
+
elementType: shape
|
|
24
|
+
kind: roundRect
|
|
25
|
+
bounds: [60, 80, 410, 200]
|
|
26
|
+
fill: "$card"
|
|
27
|
+
- elementId: cardAT
|
|
28
|
+
elementType: text
|
|
29
|
+
bounds: [84, 104, 360, 150]
|
|
30
|
+
content: {text: "要点标题(14pt)\n要点正文:说明性文字,语义断点显式换行。", style: "$body", color: "$white"}
|
|
31
|
+
- elementId: cardB
|
|
32
|
+
elementType: shape
|
|
33
|
+
kind: roundRect
|
|
34
|
+
bounds: [500, 80, 400, 200]
|
|
35
|
+
fill: "$card"
|
|
36
|
+
- elementId: cardBT
|
|
37
|
+
elementType: text
|
|
38
|
+
bounds: [524, 104, 350, 150]
|
|
39
|
+
content: {text: "要点标题(14pt)\n要点正文:说明性文字,语义断点显式换行。", style: "$body", color: "$white"}
|
|
40
|
+
- elementId: metric
|
|
41
|
+
elementType: text
|
|
42
|
+
bounds: [60, 320, 300, 60]
|
|
43
|
+
content: {text: "关键指标 N1\n(大数字 20pt)", style: "$h2", color: "$cyan", fontSize: 20}
|
|
44
|
+
- elementId: metric2
|
|
45
|
+
elementType: text
|
|
46
|
+
bounds: [420, 320, 300, 60]
|
|
47
|
+
content: {text: "关键指标 N2\n(大数字 20pt)", style: "$h2", color: "$cyan", fontSize: 20}
|
|
48
|
+
- elementId: footer
|
|
49
|
+
elementType: text
|
|
50
|
+
bounds: [60, 505, 300, 18]
|
|
51
|
+
content: {text: "产品名 · 页", style: "$caption"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
pageType: cover
|
|
2
|
+
background: {type: solid, color: "$bg"}
|
|
3
|
+
safeArea: {top: 24, bottom: 24}
|
|
4
|
+
elements:
|
|
5
|
+
- elementId: kick
|
|
6
|
+
elementType: text
|
|
7
|
+
bounds: [60, 90, 500, 30]
|
|
8
|
+
content: {text: "PRODUCT · 产品/项目代号", style: "$caption", color: "$cyan"}
|
|
9
|
+
- elementId: title
|
|
10
|
+
elementType: text
|
|
11
|
+
bounds: [60, 140, 840, 130]
|
|
12
|
+
content: {text: "主标题:一句话讲清\n这次发布什么", style: "$title", color: "$white", fontSize: 44, lineHeight: 1.25}
|
|
13
|
+
- elementId: glow
|
|
14
|
+
elementType: shape
|
|
15
|
+
kind: rect
|
|
16
|
+
bounds: [60, 300, 140, 5]
|
|
17
|
+
fill: "$cyan"
|
|
18
|
+
- elementId: subtitle
|
|
19
|
+
elementType: text
|
|
20
|
+
bounds: [60, 330, 840, 40]
|
|
21
|
+
content: {text: "副标题:核心定位 / 一句话价值", style: "$body", color: "$sub", fontSize: 16}
|
|
22
|
+
- elementId: org
|
|
23
|
+
elementType: text
|
|
24
|
+
bounds: [60, 452, 700, 26]
|
|
25
|
+
content: {text: "团队 | 时间 | 版本", style: "$caption"}
|
|
26
|
+
- elementId: dot
|
|
27
|
+
elementType: shape
|
|
28
|
+
kind: ellipse
|
|
29
|
+
bounds: [880, 452, 20, 20]
|
|
30
|
+
fill: "$cyan"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
pageType: cover
|
|
2
|
+
background: {type: solid, color: "$bg"}
|
|
3
|
+
safeArea: {top: 24, bottom: 24}
|
|
4
|
+
elements:
|
|
5
|
+
- elementId: kick
|
|
6
|
+
elementType: text
|
|
7
|
+
bounds: [60, 90, 500, 30]
|
|
8
|
+
content: {text: "THANK YOU · 感谢", style: "$caption", color: "$cyan"}
|
|
9
|
+
- elementId: title
|
|
10
|
+
elementType: text
|
|
11
|
+
bounds: [60, 140, 840, 90]
|
|
12
|
+
content: {text: "让数据说话,让方案落地", style: "$title", color: "$white", fontSize: 40, bold: true}
|
|
13
|
+
- elementId: glow
|
|
14
|
+
elementType: shape
|
|
15
|
+
kind: rect
|
|
16
|
+
bounds: [60, 260, 140, 5]
|
|
17
|
+
fill: "$cyan"
|
|
18
|
+
- elementId: cta
|
|
19
|
+
elementType: text
|
|
20
|
+
bounds: [60, 300, 840, 40]
|
|
21
|
+
content: {text: "下一步:试点 / 联系 / 答疑", style: "$body", color: "$sub", fontSize: 16}
|
|
22
|
+
- elementId: org
|
|
23
|
+
elementType: text
|
|
24
|
+
bounds: [60, 452, 840, 26]
|
|
25
|
+
content: {text: "团队 | 时间 | 版本", style: "$caption"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
pageType: content
|
|
2
|
+
# 流程页母版(深色版):数字节点 + 连线
|
|
3
|
+
expectedOverlaps:
|
|
4
|
+
- {pair: [n1, n1T]}
|
|
5
|
+
- {pair: [n2, n2T]}
|
|
6
|
+
- {pair: [n3, n3T]}
|
|
7
|
+
- {pair: [noteBar, noteT]}
|
|
8
|
+
- {pair: [noteBar, noteBg]}
|
|
9
|
+
expectedOutOfSafeArea: [accentBar, pageTitle]
|
|
10
|
+
elements:
|
|
11
|
+
- elementId: accentBar
|
|
12
|
+
elementType: shape
|
|
13
|
+
kind: rect
|
|
14
|
+
bounds: [0, 0, 8, 46]
|
|
15
|
+
fill: "$cyan"
|
|
16
|
+
- elementId: pageTitle
|
|
17
|
+
elementType: text
|
|
18
|
+
bounds: [20, 10, 700, 30]
|
|
19
|
+
content: {text: "技术流程:输入 → 处理 → 输出", style: "$title", color: "$white", fontSize: 24}
|
|
20
|
+
- elementId: n1
|
|
21
|
+
elementType: shape
|
|
22
|
+
kind: ellipse
|
|
23
|
+
bounds: [60, 120, 48, 48]
|
|
24
|
+
fill: "$cyan"
|
|
25
|
+
- elementId: n1T
|
|
26
|
+
elementType: text
|
|
27
|
+
bounds: [60, 120, 48, 48]
|
|
28
|
+
content: {text: "1", style: "$title", color: "#0F1B2D", fontSize: 20, align: center}
|
|
29
|
+
- elementId: n2
|
|
30
|
+
elementType: shape
|
|
31
|
+
kind: ellipse
|
|
32
|
+
bounds: [410, 120, 48, 48]
|
|
33
|
+
fill: "$cyan"
|
|
34
|
+
- elementId: n2T
|
|
35
|
+
elementType: text
|
|
36
|
+
bounds: [410, 120, 48, 48]
|
|
37
|
+
content: {text: "2", style: "$title", color: "#0F1B2D", fontSize: 20, align: center}
|
|
38
|
+
- elementId: n3
|
|
39
|
+
elementType: shape
|
|
40
|
+
kind: ellipse
|
|
41
|
+
bounds: [760, 120, 48, 48]
|
|
42
|
+
fill: "$cyan"
|
|
43
|
+
- elementId: n3T
|
|
44
|
+
elementType: text
|
|
45
|
+
bounds: [760, 120, 48, 48]
|
|
46
|
+
content: {text: "3", style: "$title", color: "#0F1B2D", fontSize: 20, align: center}
|
|
47
|
+
- elementId: l1
|
|
48
|
+
elementType: line
|
|
49
|
+
points: [[110, 144], [408, 144]]
|
|
50
|
+
line: {color: "$chip", width: 3}
|
|
51
|
+
- elementId: l2
|
|
52
|
+
elementType: line
|
|
53
|
+
points: [[460, 144], [758, 144]]
|
|
54
|
+
line: {color: "$chip", width: 3}
|
|
55
|
+
- elementId: s1
|
|
56
|
+
elementType: text
|
|
57
|
+
bounds: [50, 200, 260, 140]
|
|
58
|
+
content: {text: "输入数据/信号\n描述:来源与口径。", style: "$body", color: "$white", fontSize: 14}
|
|
59
|
+
- elementId: s2
|
|
60
|
+
elementType: text
|
|
61
|
+
bounds: [400, 200, 260, 140]
|
|
62
|
+
content: {text: "算法/模型处理\n描述:方法与参数。", style: "$body", color: "$white", fontSize: 14}
|
|
63
|
+
- elementId: s3
|
|
64
|
+
elementType: text
|
|
65
|
+
bounds: [760, 200, 190, 140]
|
|
66
|
+
content: {text: "结果/服务输出\n描述:形态与接入。", style: "$body", color: "$white", fontSize: 14}
|
|
67
|
+
- elementId: noteBar
|
|
68
|
+
elementType: shape
|
|
69
|
+
kind: roundRect
|
|
70
|
+
bounds: [60, 400, 840, 70]
|
|
71
|
+
fill: "$card"
|
|
72
|
+
- elementId: noteT
|
|
73
|
+
elementType: text
|
|
74
|
+
bounds: [84, 416, 800, 40]
|
|
75
|
+
content: {text: "一句话结论:该流程的关键价值", style: "$body", color: "$cyan"}
|
|
76
|
+
- elementId: noteBg
|
|
77
|
+
elementType: shape
|
|
78
|
+
kind: rect
|
|
79
|
+
bounds: [60, 400, 6, 70]
|
|
80
|
+
fill: "$cyan"
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
id: tech-dark
|
|
2
|
+
name: 科技深色
|
|
3
|
+
style: 科技发布会 / 高对比
|
|
4
|
+
scene: 产品发布、技术方案、数据中台
|
|
5
|
+
desc: 深底(#0F1B2D)+ 青色强调 + 大圆角卡片 + 细发光线条;适合新技术/数字化主题。
|
|
6
|
+
words: 科技 / 前沿 / 高对比 / 数字化
|
|
7
|
+
colors: ["#0F1B2D", "#22D3EE", "#1E3A5F", "#E2E8F0", "#334155"]
|
|
8
|
+
pages:
|
|
9
|
+
- pages/_cover.yaml
|
|
10
|
+
- pages/_content.yaml
|
|
11
|
+
- pages/_flow.yaml
|
|
12
|
+
- pages/_chart.yaml
|
|
13
|
+
- pages/_compare.yaml
|
|
14
|
+
- pages/_ending.yaml
|