@topmindspace/tms-skills 0.1.0 → 2.0.1

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,547 +1,547 @@
1
- {
2
- "$comment": "TopPPT HTML · REPORT_MODEL DSL schema 单源。双端同源:scripts/sync_runtime.py 把本文件注入 assets/pptx-export.js 的 __TOPPPT_SCHEMA__ 标记块(浏览器端 validateModel);scripts/extract_model.py 直接读本文件做本地校验。禁止在两端手写副本。字段路径约定:'a.b:c' 中 ':array' 要求非空数组,':str' 要求非空字符串,无后缀仅做真值检查;'anyof:a|b:c' 表示「任一满足即通过」(用于素材图片页:src / items / placeholder 三选一)。pageTypes[].modes = 该页型允许的模式(越界仅告警,不阻断)。commonSectionFields 为任意页型可选的通用字段(flags = 待核实标注清单,image = 素材图片/配图占位)。chartTypes = 图表类型白名单(起含原生与形状两条通道,通道归属见 scripts/layout-constants.json 的 charts.registry)。图片规格与占位约定见同文件 imageSpec。",
3
- "version": "0.1",
4
- "modes": [
5
- "presentation",
6
- "research",
7
- "architecture"
8
- ],
9
- "model": {
10
- "required": [
11
- "title",
12
- "sections:array",
13
- "closing.title",
14
- "closing.points:array"
15
- ],
16
- "optional": [
17
- "mode",
18
- "style",
19
- "theme",
20
- "subtitle",
21
- "meta",
22
- "agenda:array"
23
- ],
24
- "agendaMin": {
25
- "presentation": 3,
26
- "research": 3,
27
- "architecture": 0
28
- },
29
- "sectionsMin": 1,
30
- "sectionsRecommended": 3,
31
- "agendaComfortMax": 16
32
- },
33
- "commonSectionFields": [
34
- "eyebrow",
35
- "title",
36
- "lead",
37
- "soWhat",
38
- "footnote",
39
- "flags",
40
- "image",
41
- "exhibitNo",
42
- "layoutPreset"
43
- ],
44
- "flagsHint": "flags = 待核实/待二次修改条目字符串数组(如 '2027 增速 xx%(口径未定)');渲染为 accent 强调色标注行,提示用户核对。",
45
- "imageHint": "image = 素材图片/配图占位对象。三选一必填:src(用户图,data: 内联或相对路径,零外链铁律禁 http(s))|items(多图版式:grid/compare/wall,元素 {src?, alt?, caption?, placeholder?})|placeholder:true(无图时出配图占位,原生形状渲染、pictures 不增)。其余可选:layout(full/half/bleed/grid/compare/wall,见 layout-constants.json imageSpec.layouts)、fit(cover 默认 / contain)、caption、alt、hint、ratio。",
46
- "imageLayoutHint": "layout 与 HTML 版式对应:full=版心全宽图|half=左图右注(points 为右栏注解)|bleed=通栏出血|grid=多图网格(items 2/3/4/6 张)|compare=双图 A/B 对比(items 2 张)|wall=Logo 墙(items 3–12 张小图)。占位符标签文本由双引擎按 imageSpec 拼同一串,保证 A/B 通道逐页文本一致。",
47
- "chartTypes": [
48
- "bar",
49
- "hbar",
50
- "stack",
51
- "stackline",
52
- "line",
53
- "dualline",
54
- "area",
55
- "donut",
56
- "multidonut",
57
- "pie",
58
- "radar",
59
- "scatter",
60
- "bubble",
61
- "waterfall",
62
- "gauge",
63
- "pareto",
64
- "funnel",
65
- "gantt",
66
- "vsbar",
67
- "progress",
68
- "sparkline",
69
- "slope",
70
- "dumbbell",
71
- "lollipop",
72
- "dotplot",
73
- "bulletchart",
74
- "waffle",
75
- "radialbar",
76
- "rose",
77
- "candlestick"
78
- ],
79
- "chartTypesHint": "chart.type 可取值 = 本表(30 类:16 原生 + 14 形状还原)。其余 6 类复杂信息图(sankey/treemap/boxplot/network/marimekko/streamgraph)是**专属页型**而非 chart.type——它们要按列/段/节点等结构化载荷表达,故走 sections[].type。不变量:charts.registry.types == chartTypes ∪ 上述 6 类页型(sync_runtime.py 校验)。",
80
- "chartDataTable": {
81
- "$comment": "数据表策略:图表页的数据可追溯开关。notes = 数据写入演讲者备注(默认,零版面占用);inline = 页内附原生小字号表格;appendix = 自动生成附录数据页(原生表格);off = 不附(仅 sparkline 这类纯装饰微图允许)。pptx=shape 的非原生图表至少 notes。",
82
- "enum": [
83
- "notes",
84
- "inline",
85
- "appendix",
86
- "off"
87
- ],
88
- "default": "notes",
89
- "rule": "非原生图表(registry.pptx=shape)的 dataTable 不得为 off;缺失时按 registry 默认值补齐。"
90
- },
91
- "pageTypes": {
92
- "points": {
93
- "label": "要点列表页",
94
- "modes": [
95
- "presentation",
96
- "research",
97
- "architecture"
98
- ],
99
- "required": [
100
- "points:array"
101
- ],
102
- "optional": [
103
- "metrics:array"
104
- ]
105
- },
106
- "metrics": {
107
- "label": "指标带页(4–6 个核心数字)",
108
- "modes": [
109
- "presentation",
110
- "research"
111
- ],
112
- "required": [
113
- "metrics:array"
114
- ]
115
- },
116
- "kpi": {
117
- "label": "大数指标页(hero 大数字 + 支撑指标行)",
118
- "modes": [
119
- "presentation",
120
- "research"
121
- ],
122
- "required": [
123
- "hero:array"
124
- ],
125
- "optional": [
126
- "metrics:array"
127
- ]
128
- },
129
- "table": {
130
- "label": "对比表页",
131
- "modes": [
132
- "presentation",
133
- "research",
134
- "architecture"
135
- ],
136
- "required": [
137
- "table.head:array",
138
- "table.rows:array"
139
- ],
140
- "optional": [
141
- "table.colW:array"
142
- ]
143
- },
144
- "timeline": {
145
- "label": "时间线 / 路线页",
146
- "modes": [
147
- "presentation",
148
- "research"
149
- ],
150
- "required": [
151
- "phases:array"
152
- ]
153
- },
154
- "steps": {
155
- "label": "步骤条页(N 步横排 + 箭头,可分组)",
156
- "modes": [
157
- "presentation",
158
- "research",
159
- "architecture"
160
- ],
161
- "required": [
162
- "steps:array"
163
- ],
164
- "optional": [
165
- "groups:array",
166
- "note"
167
- ]
168
- },
169
- "bar": {
170
- "label": "图表页(chart.type 见 chartTypes;native 通道走原生数据图表,shape 通道走高保真形状还原 + 数据表)",
171
- "modes": [
172
- "presentation",
173
- "research"
174
- ],
175
- "required": [
176
- "chart.labels:array",
177
- "chart.values:array"
178
- ],
179
- "optional": [
180
- "chart.type",
181
- "chart.series:array",
182
- "chart.points:array",
183
- "chart.max",
184
- "chart.unit",
185
- "chart.colors:array",
186
- "chart.start:array",
187
- "chart.target:array",
188
- "chart.dataTable",
189
- "note"
190
- ]
191
- },
192
- "donut": {
193
- "label": "环形图页(原生 pie 楔形 + 图例)",
194
- "modes": [
195
- "presentation",
196
- "research"
197
- ],
198
- "required": [
199
- "chart.labels:array",
200
- "chart.values:array"
201
- ],
202
- "optional": [
203
- "chart.unit",
204
- "chart.centerLabel",
205
- "chart.colors:array",
206
- "chart.dataTable",
207
- "note"
208
- ]
209
- },
210
- "heatmap": {
211
- "label": "热力矩阵页(行 × 列 + 强度色阶)",
212
- "modes": [
213
- "presentation",
214
- "research"
215
- ],
216
- "required": [
217
- "rowHeads:array",
218
- "colHeads:array",
219
- "cells:array"
220
- ],
221
- "optional": [
222
- "unit",
223
- "scaleLabel:array",
224
- "note"
225
- ]
226
- },
227
- "bullet": {
228
- "label": "达成对比页(实际 vs 目标条)",
229
- "modes": [
230
- "presentation",
231
- "research"
232
- ],
233
- "required": [
234
- "items:array"
235
- ],
236
- "optional": [
237
- "unit",
238
- "max",
239
- "note"
240
- ]
241
- },
242
- "pyramid": {
243
- "label": "金字塔页(层级递进,顶层最窄)",
244
- "modes": [
245
- "presentation",
246
- "research",
247
- "architecture"
248
- ],
249
- "required": [
250
- "levels:array"
251
- ],
252
- "optional": [
253
- "note"
254
- ]
255
- },
256
- "image": {
257
- "label": "素材图片页(full/half/bleed/grid/compare/wall,效果与位置锁定;支持配图占位)",
258
- "modes": [
259
- "presentation",
260
- "research",
261
- "architecture"
262
- ],
263
- "required": [
264
- "anyof:image.src:str|image.items:array|image.placeholder"
265
- ],
266
- "optional": [
267
- "image.caption",
268
- "image.alt",
269
- "image.layout",
270
- "image.fit",
271
- "image.ratio",
272
- "image.hint",
273
- "points:array",
274
- "note"
275
- ]
276
- },
277
- "cards": {
278
- "label": "卡片网格页(cards 元素须为 {title, points:[[k,v]…]},不接受元组)",
279
- "modes": [
280
- "presentation",
281
- "research"
282
- ],
283
- "required": [
284
- "cards:array"
285
- ],
286
- "optional": [
287
- "columns"
288
- ]
289
- },
290
- "split": {
291
- "label": "双区组合页(left / right 各可为 要点|图表|表格|图片:type = points(默认)| table | image | 图表类型名;图表/表格字段直接挂在对应侧)",
292
- "modes": [
293
- "presentation",
294
- "research"
295
- ],
296
- "required": [
297
- "anyof:left.points:array|left.type:str"
298
- ],
299
- "optional": [
300
- "left.cap",
301
- "left.image",
302
- "left.labels:array",
303
- "left.values:array",
304
- "left.series:array",
305
- "left.points:array",
306
- "left.max",
307
- "left.unit",
308
- "left.colors:array",
309
- "left.dataTable",
310
- "left.head:array",
311
- "left.rows:array",
312
- "left.colW:array",
313
- "right.type",
314
- "right.cap",
315
- "right.image",
316
- "right.labels:array",
317
- "right.values:array",
318
- "right.series:array",
319
- "right.points:array",
320
- "right.max",
321
- "right.unit",
322
- "right.colors:array",
323
- "right.dataTable",
324
- "right.head:array",
325
- "right.rows:array",
326
- "right.colW:array"
327
- ]
328
- },
329
- "comparison": {
330
- "label": "对比页(左右双栏 + 可选结论条)",
331
- "modes": [
332
- "presentation",
333
- "research"
334
- ],
335
- "required": [
336
- "left.title",
337
- "left.points:array",
338
- "right.title",
339
- "right.points:array"
340
- ],
341
- "optional": [
342
- "verdict"
343
- ]
344
- },
345
- "quote": {
346
- "label": "引用 / 金句页(深色全幅)",
347
- "modes": [
348
- "presentation",
349
- "research"
350
- ],
351
- "required": [
352
- "quote",
353
- "author"
354
- ],
355
- "optional": [
356
- "context"
357
- ]
358
- },
359
- "diagram": {
360
- "label": "分层架构页(architecture 模式走全幅几何)",
361
- "modes": [
362
- "presentation",
363
- "research",
364
- "architecture"
365
- ],
366
- "required": [
367
- "layers:array"
368
- ],
369
- "optional": [
370
- "legend:array"
371
- ]
372
- },
373
- "exhibit": {
374
- "label": "Exhibit 编号图表页(research R2)",
375
- "modes": [
376
- "research"
377
- ],
378
- "required": [
379
- "chart.labels:array",
380
- "chart.values:array"
381
- ],
382
- "optional": [
383
- "exhibitNo",
384
- "chart.type",
385
- "chart.series:array",
386
- "chart.points:array",
387
- "chart.max",
388
- "chart.unit",
389
- "chart.colors:array",
390
- "chart.dataTable",
391
- "note"
392
- ]
393
- },
394
- "twocol": {
395
- "label": "双栏论证页(research R1)",
396
- "modes": [
397
- "research"
398
- ],
399
- "required": [
400
- "paragraphs:array"
401
- ]
402
- },
403
- "threecol": {
404
- "label": "三栏证据页(research R6)",
405
- "modes": [
406
- "research"
407
- ],
408
- "required": [
409
- "paragraphs:array"
410
- ]
411
- },
412
- "halftable": {
413
- "label": "半表半图页(research R7)",
414
- "modes": [
415
- "research"
416
- ],
417
- "required": [
418
- "table.head:array",
419
- "table.rows:array",
420
- "chart.labels:array",
421
- "chart.values:array"
422
- ],
423
- "optional": [
424
- "table.colW:array",
425
- "chart.type",
426
- "chart.series:array",
427
- "chart.points:array",
428
- "chart.max",
429
- "chart.unit",
430
- "chart.colors:array",
431
- "chart.dataTable",
432
- "note"
433
- ]
434
- },
435
- "matrix": {
436
- "label": "矩阵图页(research R8)",
437
- "modes": [
438
- "research"
439
- ],
440
- "required": [
441
- "rowHeads:array",
442
- "colHeads:array",
443
- "cells:array"
444
- ]
445
- },
446
- "lane": {
447
- "label": "泳道页(architecture A2)",
448
- "modes": [
449
- "architecture"
450
- ],
451
- "required": [
452
- "lanes:array"
453
- ]
454
- },
455
- "sankey": {
456
- "label": "桑基图页(节点-流带,流向与流量)",
457
- "modes": [
458
- "research",
459
- "architecture"
460
- ],
461
- "required": [
462
- "flows:array"
463
- ],
464
- "optional": [
465
- "unit",
466
- "chart.dataTable",
467
- "note"
468
- ]
469
- },
470
- "treemap": {
471
- "label": "树图页(面积编码的层级构成)",
472
- "modes": [
473
- "research",
474
- "architecture"
475
- ],
476
- "required": [
477
- "items:array"
478
- ],
479
- "optional": [
480
- "unit",
481
- "chart.dataTable",
482
- "note"
483
- ]
484
- },
485
- "boxplot": {
486
- "label": "箱线图页(分布对比:min/q1/median/q3/max)",
487
- "modes": [
488
- "research",
489
- "architecture"
490
- ],
491
- "required": [
492
- "groups:array"
493
- ],
494
- "optional": [
495
- "unit",
496
- "chart.dataTable",
497
- "note"
498
- ]
499
- },
500
- "network": {
501
- "label": "关系网络页(节点-边拓扑)",
502
- "modes": [
503
- "research",
504
- "architecture"
505
- ],
506
- "required": [
507
- "nodes:array",
508
- "edges:array"
509
- ],
510
- "optional": [
511
- "chart.dataTable",
512
- "note"
513
- ]
514
- },
515
- "marimekko": {
516
- "label": "马赛克图页(列宽 × 列高双重编码)",
517
- "modes": [
518
- "research",
519
- "architecture"
520
- ],
521
- "required": [
522
- "cols:array",
523
- "cells:array"
524
- ],
525
- "optional": [
526
- "unit",
527
- "chart.dataTable",
528
- "note"
529
- ]
530
- },
531
- "streamgraph": {
532
- "label": "流带图页(时间上的构成演变)",
533
- "modes": [
534
- "research",
535
- "architecture"
536
- ],
537
- "required": [
538
- "series:array"
539
- ],
540
- "optional": [
541
- "labels:array",
542
- "chart.dataTable",
543
- "note"
544
- ]
545
- }
546
- }
547
- }
1
+ {
2
+ "$comment": "TopPPT HTML · REPORT_MODEL DSL schema 单源。双端同源:scripts/sync_runtime.py 把本文件注入 assets/pptx-export.js 的 __TOPPPT_SCHEMA__ 标记块(浏览器端 validateModel);scripts/extract_model.py 直接读本文件做本地校验。禁止在两端手写副本。字段路径约定:'a.b:c' 中 ':array' 要求非空数组,':str' 要求非空字符串,无后缀仅做真值检查;'anyof:a|b:c' 表示「任一满足即通过」(用于素材图片页:src / items / placeholder 三选一)。pageTypes[].modes = 该页型允许的模式(越界仅告警,不阻断)。commonSectionFields 为任意页型可选的通用字段(flags = 待核实标注清单,image = 素材图片/配图占位)。chartTypes = 图表类型白名单(起含原生与形状两条通道,通道归属见 scripts/layout-constants.json 的 charts.registry)。图片规格与占位约定见同文件 imageSpec。",
3
+ "version": "9.1",
4
+ "modes": [
5
+ "presentation",
6
+ "research",
7
+ "architecture"
8
+ ],
9
+ "model": {
10
+ "required": [
11
+ "title",
12
+ "sections:array",
13
+ "closing.title",
14
+ "closing.points:array"
15
+ ],
16
+ "optional": [
17
+ "mode",
18
+ "style",
19
+ "theme",
20
+ "subtitle",
21
+ "meta",
22
+ "agenda:array"
23
+ ],
24
+ "agendaMin": {
25
+ "presentation": 3,
26
+ "research": 3,
27
+ "architecture": 0
28
+ },
29
+ "sectionsMin": 1,
30
+ "sectionsRecommended": 3,
31
+ "agendaComfortMax": 16
32
+ },
33
+ "commonSectionFields": [
34
+ "eyebrow",
35
+ "title",
36
+ "lead",
37
+ "soWhat",
38
+ "footnote",
39
+ "flags",
40
+ "image",
41
+ "exhibitNo",
42
+ "layoutPreset"
43
+ ],
44
+ "flagsHint": "flags = 待核实/待二次修改条目字符串数组(如 '2027 增速 xx%(口径未定)');渲染为 accent 强调色标注行,提示用户核对。",
45
+ "imageHint": "image = 素材图片/配图占位对象。三选一必填:src(用户图,data: 内联或相对路径,零外链铁律禁 http(s))|items(多图版式:grid/compare/wall,元素 {src?, alt?, caption?, placeholder?})|placeholder:true(无图时出配图占位,原生形状渲染、pictures 不增)。其余可选:layout(full/half/bleed/grid/compare/wall,见 layout-constants.json imageSpec.layouts)、fit(cover 默认 / contain)、caption、alt、hint、ratio。",
46
+ "imageLayoutHint": "layout 与 HTML 版式对应:full=版心全宽图|half=左图右注(points 为右栏注解)|bleed=通栏出血|grid=多图网格(items 2/3/4/6 张)|compare=双图 A/B 对比(items 2 张)|wall=Logo 墙(items 3–12 张小图)。占位符标签文本由双引擎按 imageSpec 拼同一串,保证 A/B 通道逐页文本一致。",
47
+ "chartTypes": [
48
+ "bar",
49
+ "hbar",
50
+ "stack",
51
+ "stackline",
52
+ "line",
53
+ "dualline",
54
+ "area",
55
+ "donut",
56
+ "multidonut",
57
+ "pie",
58
+ "radar",
59
+ "scatter",
60
+ "bubble",
61
+ "waterfall",
62
+ "gauge",
63
+ "pareto",
64
+ "funnel",
65
+ "gantt",
66
+ "vsbar",
67
+ "progress",
68
+ "sparkline",
69
+ "slope",
70
+ "dumbbell",
71
+ "lollipop",
72
+ "dotplot",
73
+ "bulletchart",
74
+ "waffle",
75
+ "radialbar",
76
+ "rose",
77
+ "candlestick"
78
+ ],
79
+ "chartTypesHint": "chart.type 可取值 = 本表(30 类:16 原生 + 14 形状还原)。其余 6 类复杂信息图(sankey/treemap/boxplot/network/marimekko/streamgraph)是**专属页型**而非 chart.type——它们要按列/段/节点等结构化载荷表达,故走 sections[].type。不变量:charts.registry.types == chartTypes ∪ 上述 6 类页型(sync_runtime.py 校验)。",
80
+ "chartDataTable": {
81
+ "$comment": "数据表策略:图表页的数据可追溯开关。notes = 数据写入演讲者备注(默认,零版面占用);inline = 页内附原生小字号表格;appendix = 自动生成附录数据页(原生表格);off = 不附(仅 sparkline 这类纯装饰微图允许)。pptx=shape 的非原生图表至少 notes。",
82
+ "enum": [
83
+ "notes",
84
+ "inline",
85
+ "appendix",
86
+ "off"
87
+ ],
88
+ "default": "notes",
89
+ "rule": "非原生图表(registry.pptx=shape)的 dataTable 不得为 off;缺失时按 registry 默认值补齐。"
90
+ },
91
+ "pageTypes": {
92
+ "points": {
93
+ "label": "要点列表页",
94
+ "modes": [
95
+ "presentation",
96
+ "research",
97
+ "architecture"
98
+ ],
99
+ "required": [
100
+ "points:array"
101
+ ],
102
+ "optional": [
103
+ "metrics:array"
104
+ ]
105
+ },
106
+ "metrics": {
107
+ "label": "指标带页(4–6 个核心数字)",
108
+ "modes": [
109
+ "presentation",
110
+ "research"
111
+ ],
112
+ "required": [
113
+ "metrics:array"
114
+ ]
115
+ },
116
+ "kpi": {
117
+ "label": "大数指标页(hero 大数字 + 支撑指标行)",
118
+ "modes": [
119
+ "presentation",
120
+ "research"
121
+ ],
122
+ "required": [
123
+ "hero:array"
124
+ ],
125
+ "optional": [
126
+ "metrics:array"
127
+ ]
128
+ },
129
+ "table": {
130
+ "label": "对比表页",
131
+ "modes": [
132
+ "presentation",
133
+ "research",
134
+ "architecture"
135
+ ],
136
+ "required": [
137
+ "table.head:array",
138
+ "table.rows:array"
139
+ ],
140
+ "optional": [
141
+ "table.colW:array"
142
+ ]
143
+ },
144
+ "timeline": {
145
+ "label": "时间线 / 路线页",
146
+ "modes": [
147
+ "presentation",
148
+ "research"
149
+ ],
150
+ "required": [
151
+ "phases:array"
152
+ ]
153
+ },
154
+ "steps": {
155
+ "label": "步骤条页(N 步横排 + 箭头,可分组)",
156
+ "modes": [
157
+ "presentation",
158
+ "research",
159
+ "architecture"
160
+ ],
161
+ "required": [
162
+ "steps:array"
163
+ ],
164
+ "optional": [
165
+ "groups:array",
166
+ "note"
167
+ ]
168
+ },
169
+ "bar": {
170
+ "label": "图表页(chart.type 见 chartTypes;native 通道走原生数据图表,shape 通道走高保真形状还原 + 数据表)",
171
+ "modes": [
172
+ "presentation",
173
+ "research"
174
+ ],
175
+ "required": [
176
+ "chart.labels:array",
177
+ "chart.values:array"
178
+ ],
179
+ "optional": [
180
+ "chart.type",
181
+ "chart.series:array",
182
+ "chart.points:array",
183
+ "chart.max",
184
+ "chart.unit",
185
+ "chart.colors:array",
186
+ "chart.start:array",
187
+ "chart.target:array",
188
+ "chart.dataTable",
189
+ "note"
190
+ ]
191
+ },
192
+ "donut": {
193
+ "label": "环形图页(原生 pie 楔形 + 图例)",
194
+ "modes": [
195
+ "presentation",
196
+ "research"
197
+ ],
198
+ "required": [
199
+ "chart.labels:array",
200
+ "chart.values:array"
201
+ ],
202
+ "optional": [
203
+ "chart.unit",
204
+ "chart.centerLabel",
205
+ "chart.colors:array",
206
+ "chart.dataTable",
207
+ "note"
208
+ ]
209
+ },
210
+ "heatmap": {
211
+ "label": "热力矩阵页(行 × 列 + 强度色阶)",
212
+ "modes": [
213
+ "presentation",
214
+ "research"
215
+ ],
216
+ "required": [
217
+ "rowHeads:array",
218
+ "colHeads:array",
219
+ "cells:array"
220
+ ],
221
+ "optional": [
222
+ "unit",
223
+ "scaleLabel:array",
224
+ "note"
225
+ ]
226
+ },
227
+ "bullet": {
228
+ "label": "达成对比页(实际 vs 目标条)",
229
+ "modes": [
230
+ "presentation",
231
+ "research"
232
+ ],
233
+ "required": [
234
+ "items:array"
235
+ ],
236
+ "optional": [
237
+ "unit",
238
+ "max",
239
+ "note"
240
+ ]
241
+ },
242
+ "pyramid": {
243
+ "label": "金字塔页(层级递进,顶层最窄)",
244
+ "modes": [
245
+ "presentation",
246
+ "research",
247
+ "architecture"
248
+ ],
249
+ "required": [
250
+ "levels:array"
251
+ ],
252
+ "optional": [
253
+ "note"
254
+ ]
255
+ },
256
+ "image": {
257
+ "label": "素材图片页(full/half/bleed/grid/compare/wall,效果与位置锁定;支持配图占位)",
258
+ "modes": [
259
+ "presentation",
260
+ "research",
261
+ "architecture"
262
+ ],
263
+ "required": [
264
+ "anyof:image.src:str|image.items:array|image.placeholder"
265
+ ],
266
+ "optional": [
267
+ "image.caption",
268
+ "image.alt",
269
+ "image.layout",
270
+ "image.fit",
271
+ "image.ratio",
272
+ "image.hint",
273
+ "points:array",
274
+ "note"
275
+ ]
276
+ },
277
+ "cards": {
278
+ "label": "卡片网格页(cards 元素须为 {title, points:[[k,v]…]},不接受元组)",
279
+ "modes": [
280
+ "presentation",
281
+ "research"
282
+ ],
283
+ "required": [
284
+ "cards:array"
285
+ ],
286
+ "optional": [
287
+ "columns"
288
+ ]
289
+ },
290
+ "split": {
291
+ "label": "双区组合页(left / right 各可为 要点|图表|表格|图片:type = points(默认)| table | image | 图表类型名;图表/表格字段直接挂在对应侧)",
292
+ "modes": [
293
+ "presentation",
294
+ "research"
295
+ ],
296
+ "required": [
297
+ "anyof:left.points:array|left.type:str"
298
+ ],
299
+ "optional": [
300
+ "left.cap",
301
+ "left.image",
302
+ "left.labels:array",
303
+ "left.values:array",
304
+ "left.series:array",
305
+ "left.points:array",
306
+ "left.max",
307
+ "left.unit",
308
+ "left.colors:array",
309
+ "left.dataTable",
310
+ "left.head:array",
311
+ "left.rows:array",
312
+ "left.colW:array",
313
+ "right.type",
314
+ "right.cap",
315
+ "right.image",
316
+ "right.labels:array",
317
+ "right.values:array",
318
+ "right.series:array",
319
+ "right.points:array",
320
+ "right.max",
321
+ "right.unit",
322
+ "right.colors:array",
323
+ "right.dataTable",
324
+ "right.head:array",
325
+ "right.rows:array",
326
+ "right.colW:array"
327
+ ]
328
+ },
329
+ "comparison": {
330
+ "label": "对比页(左右双栏 + 可选结论条)",
331
+ "modes": [
332
+ "presentation",
333
+ "research"
334
+ ],
335
+ "required": [
336
+ "left.title",
337
+ "left.points:array",
338
+ "right.title",
339
+ "right.points:array"
340
+ ],
341
+ "optional": [
342
+ "verdict"
343
+ ]
344
+ },
345
+ "quote": {
346
+ "label": "引用 / 金句页(深色全幅)",
347
+ "modes": [
348
+ "presentation",
349
+ "research"
350
+ ],
351
+ "required": [
352
+ "quote",
353
+ "author"
354
+ ],
355
+ "optional": [
356
+ "context"
357
+ ]
358
+ },
359
+ "diagram": {
360
+ "label": "分层架构页(architecture 模式走全幅几何)",
361
+ "modes": [
362
+ "presentation",
363
+ "research",
364
+ "architecture"
365
+ ],
366
+ "required": [
367
+ "layers:array"
368
+ ],
369
+ "optional": [
370
+ "legend:array"
371
+ ]
372
+ },
373
+ "exhibit": {
374
+ "label": "Exhibit 编号图表页(research R2)",
375
+ "modes": [
376
+ "research"
377
+ ],
378
+ "required": [
379
+ "chart.labels:array",
380
+ "chart.values:array"
381
+ ],
382
+ "optional": [
383
+ "exhibitNo",
384
+ "chart.type",
385
+ "chart.series:array",
386
+ "chart.points:array",
387
+ "chart.max",
388
+ "chart.unit",
389
+ "chart.colors:array",
390
+ "chart.dataTable",
391
+ "note"
392
+ ]
393
+ },
394
+ "twocol": {
395
+ "label": "双栏论证页(research R1)",
396
+ "modes": [
397
+ "research"
398
+ ],
399
+ "required": [
400
+ "paragraphs:array"
401
+ ]
402
+ },
403
+ "threecol": {
404
+ "label": "三栏证据页(research R6)",
405
+ "modes": [
406
+ "research"
407
+ ],
408
+ "required": [
409
+ "paragraphs:array"
410
+ ]
411
+ },
412
+ "halftable": {
413
+ "label": "半表半图页(research R7)",
414
+ "modes": [
415
+ "research"
416
+ ],
417
+ "required": [
418
+ "table.head:array",
419
+ "table.rows:array",
420
+ "chart.labels:array",
421
+ "chart.values:array"
422
+ ],
423
+ "optional": [
424
+ "table.colW:array",
425
+ "chart.type",
426
+ "chart.series:array",
427
+ "chart.points:array",
428
+ "chart.max",
429
+ "chart.unit",
430
+ "chart.colors:array",
431
+ "chart.dataTable",
432
+ "note"
433
+ ]
434
+ },
435
+ "matrix": {
436
+ "label": "矩阵图页(research R8)",
437
+ "modes": [
438
+ "research"
439
+ ],
440
+ "required": [
441
+ "rowHeads:array",
442
+ "colHeads:array",
443
+ "cells:array"
444
+ ]
445
+ },
446
+ "lane": {
447
+ "label": "泳道页(architecture A2)",
448
+ "modes": [
449
+ "architecture"
450
+ ],
451
+ "required": [
452
+ "lanes:array"
453
+ ]
454
+ },
455
+ "sankey": {
456
+ "label": "桑基图页(节点-流带,流向与流量)",
457
+ "modes": [
458
+ "research",
459
+ "architecture"
460
+ ],
461
+ "required": [
462
+ "flows:array"
463
+ ],
464
+ "optional": [
465
+ "unit",
466
+ "chart.dataTable",
467
+ "note"
468
+ ]
469
+ },
470
+ "treemap": {
471
+ "label": "树图页(面积编码的层级构成)",
472
+ "modes": [
473
+ "research",
474
+ "architecture"
475
+ ],
476
+ "required": [
477
+ "items:array"
478
+ ],
479
+ "optional": [
480
+ "unit",
481
+ "chart.dataTable",
482
+ "note"
483
+ ]
484
+ },
485
+ "boxplot": {
486
+ "label": "箱线图页(分布对比:min/q1/median/q3/max)",
487
+ "modes": [
488
+ "research",
489
+ "architecture"
490
+ ],
491
+ "required": [
492
+ "groups:array"
493
+ ],
494
+ "optional": [
495
+ "unit",
496
+ "chart.dataTable",
497
+ "note"
498
+ ]
499
+ },
500
+ "network": {
501
+ "label": "关系网络页(节点-边拓扑)",
502
+ "modes": [
503
+ "research",
504
+ "architecture"
505
+ ],
506
+ "required": [
507
+ "nodes:array",
508
+ "edges:array"
509
+ ],
510
+ "optional": [
511
+ "chart.dataTable",
512
+ "note"
513
+ ]
514
+ },
515
+ "marimekko": {
516
+ "label": "马赛克图页(列宽 × 列高双重编码)",
517
+ "modes": [
518
+ "research",
519
+ "architecture"
520
+ ],
521
+ "required": [
522
+ "cols:array",
523
+ "cells:array"
524
+ ],
525
+ "optional": [
526
+ "unit",
527
+ "chart.dataTable",
528
+ "note"
529
+ ]
530
+ },
531
+ "streamgraph": {
532
+ "label": "流带图页(时间上的构成演变)",
533
+ "modes": [
534
+ "research",
535
+ "architecture"
536
+ ],
537
+ "required": [
538
+ "series:array"
539
+ ],
540
+ "optional": [
541
+ "labels:array",
542
+ "chart.dataTable",
543
+ "note"
544
+ ]
545
+ }
546
+ }
547
+ }