@topmindspace/tms-skills 0.3.6 → 0.3.9
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/CHANGELOG.md +74 -0
- package/README.en.md +4 -4
- package/README.md +4 -4
- package/bin/tms-skills.js +9 -1
- package/package.json +1 -1
- package/top-ppt-html/README.en.md +2 -2
- package/top-ppt-html/README.md +1 -1
- package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html +43 -14
- package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html +43 -14
- package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html +43 -14
- package/top-ppt-html/assets/examples/2026-09-26-topmind-tms-skills-showcase.html +43 -14
- package/top-ppt-html/assets/pptx-export.js +42 -13
- package/top-ppt-html/assets/style-gallery.html +1 -1
- package/top-ppt-html/assets/templates/architecture.html +45 -15
- package/top-ppt-html/assets/templates/presentation.html +45 -15
- package/top-ppt-html/assets/templates/research.html +45 -15
- package/top-ppt-html/scripts/audit_css.py +1 -1
- package/top-ppt-html/scripts/build_pptx.js +136 -25
- package/top-ppt-html/scripts/layout-constants.json +1 -1
- package/top-ppt-html/scripts/regression.py +3 -3
- package/top-ppt-html/scripts/render_compare.py +1 -1
- package/top-ppt-html/scripts/scaffold_report.py +1 -1
- package/top-ppt-html/scripts/sync_runtime.py +14 -14
- package/top-ppt-html/scripts/validate_report.py +4 -0
- package/topmind-cover/README.en.md +1 -1
- package/topmind-cover/README.md +1 -1
- package/topmind-cover/SKILL.md +3 -1
- package/topmind-cover/assets/examples/big-type-wechat.png +0 -0
- package/topmind-cover/assets/examples/big-type.png +0 -0
- package/topmind-cover/assets/examples/brand-launch-wechat.png +0 -0
- package/topmind-cover/assets/examples/brand-launch.png +0 -0
- package/topmind-cover/assets/examples/gan-huo-wechat.png +0 -0
- package/topmind-cover/assets/examples/gan-huo.png +0 -0
- package/topmind-cover/assets/examples/ip-fun-wechat.png +0 -0
- package/topmind-cover/assets/examples/ip-fun.png +0 -0
- package/topmind-cover/assets/examples/magazine-wechat.png +0 -0
- package/topmind-cover/assets/examples/magazine.png +0 -0
- package/topmind-cover/assets/examples/minimal-wechat.png +0 -0
- package/topmind-cover/assets/examples/minimal.png +0 -0
- package/topmind-cover/assets/examples/news-flash-wechat.png +0 -0
- package/topmind-cover/assets/examples/news-flash.png +0 -0
- package/topmind-cover/assets/examples/overview.png +0 -0
- package/topmind-cover/assets/examples/tutorial-steps-wechat.png +0 -0
- package/topmind-cover/assets/examples/tutorial-steps.png +0 -0
- package/topmind-cover/references/cover-styles.md +65 -22
- package/topmind-cover/references/impact-language.md +38 -0
- package/topmind-cover/scripts/crop-cover.py +19 -13
- package/topmind-wechat-post/README.en.md +2 -2
- package/topmind-wechat-post/README.md +2 -2
- package/topmind-wechat-post/SKILL.md +1 -1
- package/topmind-wechat-post/scripts/md2wechat.py +12 -3
- package/topmind-x-article/README.en.md +1 -1
- package/topmind-x-article/README.md +1 -1
- package/topmind-x-article/scripts/md2x.py +7 -2
|
@@ -3589,7 +3589,7 @@ window.REPORT_MODEL = {
|
|
|
3589
3589
|
|
|
3590
3590
|
/* __TOPPPT_RUNTIME_START__ */
|
|
3591
3591
|
/* ══ PPTX 导出运行时(assets/pptx-export.js 的内联副本 · 由 scripts/sync_runtime.py 注入,禁止手改) ══ */
|
|
3592
|
-
/* __TOPPPT_RUNTIME_SHA__:
|
|
3592
|
+
/* __TOPPPT_RUNTIME_SHA__:a4c909346759fe9c */
|
|
3593
3593
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
3594
3594
|
* TopPPT HTML· 浏览器端 PPTX 预览运行时
|
|
3595
3595
|
* 零依赖、随报告单文件分发;OOXML 序列化器(仅供预览,页面不导出文件)。
|
|
@@ -3644,7 +3644,7 @@ function isRec(v) { return !!v && typeof v === 'object' && !Array.isArray(v); }
|
|
|
3644
3644
|
var PW = 13.333, PH = 7.5, MX = 0.6, CW = PW - 2 * MX, EMU = 914400;
|
|
3645
3645
|
var TS_BASE = {"coverTitle":44,"coverSub":18,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10};
|
|
3646
3646
|
var MTS = {"presentation":{"coverTitle":44,"coverSub":18,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10},"research":{"coverTitle":36,"coverSub":14,"h1":22,"h2":13.5,"lead":11.5,"body":10.5,"caption":9,"micro":8.5},"architecture":{"coverTitle":44,"coverSub":19,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10}};
|
|
3647
|
-
var PT = {"layout":{"contentTop":2.35,"contentBottom":6.9,"contentBottomWithNote":6.4,"pageNumY":7.0},"common":{"headEyebrowY":0.48,"headTitleY":0.82,"headRuleY":1.72,"leadY":1.88,"bodyY":2.35,"bodyYWithLead":2.55,"pagerY":7.0},"cover":{"metaY":0.7,"titleY":2.4,"titleH":2.0,"subtitleY":4.5,"subtitleH":0.8},"closing":{"eyebrowY":0.7,"titleY":1.2,"titleH":1.2,"pointsY":3.0,"pointTitleH":0.6,"pointBodyH":1.2},"points":{"listY":2.5,"rowH":0.72,"rowHMin":0.5,"markSize":0.14,"metricY":4.7,"metricW":2.6,"metricValH":0.9,"metricCapY":5.6},"metrics":{"bandY":3.1,"cardH":2.3,"valY":3.45,"valH":1.1,"capY":4.55,"capH":0.7,"gap":0.3,"maxW":2.9},"table":{"y":2.5,"rowH":0.55,"rowHMin":0.32,"headRowH":0.5},"bar":{"hbarY0":2.6,"hbarY1":6.25,"chartX":0.6,"chartY":2.95,"chartW":1.2,"chartH":3.35,"noteY":6.55},"note":{"y":6.55,"h":0.4},"exhibit":{"badgeY":2.35,"chartY":2.75,"chartH":3.25,"soWhatY":6.05,"footnoteY":6.72},"twocol":{"colGap":0.5,"bodyH":3.6,"rowHMin":0.5},"hbar":{"labelW":1.9,"valW":1.0,"rowH":0.55,"barRatio":0.5},"diagram":{"layerBarW":1.35,"layerGap":0.15,"nodeGap":0.15,"bodyStartY":2.9,"maxLayerH":1.15,"nodeMaxW":2.2},"split":{"leftW":0.55,"rightW":0.415,"rightX":0.585,"pointsY":2.7,"rowH":0.78,"capY":2.55,"chartY":3.0,"chartH":3.7,"tableY":2.7,"tableRowH":0.5},"cards":{"startY":3.0,"gap":0.25,"maxH":2.0,"titleH":0.4},"timeline":{"labelY":2.95,"axisY":3.58,"dotY":3.51,"dotR":0.18,"nameY":3.9,"descY":4.45,"descH":1.2},"research":{"col3Gap":0.38,"matrixLabelW":1.5,"matrixCellH":0.85,"matrixY":2.2,"denseTableY":2.2,"denseRowH":0.42,"halfTableW":0.52,"halfChartX":0.57,"halfChartW":0.43},"arch":{"fullStartY":2.1,"fullEndY":6.9,"laneH":0.72,"laneHMin":0.5,"laneGap":0.14,"laneHeadW":1.3,"stepGap":0.12,"stepMaxW":1.9},"kpi":{"heroY":2.9,"heroW":0.52,"heroH":1.6,"dividerX":0.56,"metricY0":2.95,"metricRowH":0.85},"comparison":{"panelGap":0.4,"panelY":2.55,"panelH":3.4,"titleH":0.45,"rowH":0.62},"quote":{"markY":1.75,"textY":2.7,"textH":2.3,"authorY":5.25,"contextY":5.8},"donut":{"centerX":3.05,"centerY":4.6,"r":1.6,"holeR":0.95,"legendX":5.6,"legendRowH":0.55,"legendLabelW":3.4,"legendValW":1.3,"legendPctX":
|
|
3647
|
+
var PT = {"layout":{"contentTop":2.35,"contentBottom":6.9,"contentBottomWithNote":6.4,"pageNumY":7.0},"common":{"headEyebrowY":0.48,"headTitleY":0.82,"headRuleY":1.72,"leadY":1.88,"bodyY":2.35,"bodyYWithLead":2.55,"pagerY":7.0},"cover":{"metaY":0.7,"titleY":2.4,"titleH":2.0,"subtitleY":4.5,"subtitleH":0.8},"closing":{"eyebrowY":0.7,"titleY":1.2,"titleH":1.2,"pointsY":3.0,"pointTitleH":0.6,"pointBodyH":1.2},"points":{"listY":2.5,"rowH":0.72,"rowHMin":0.5,"markSize":0.14,"metricY":4.7,"metricW":2.6,"metricValH":0.9,"metricCapY":5.6},"metrics":{"bandY":3.1,"cardH":2.3,"valY":3.45,"valH":1.1,"capY":4.55,"capH":0.7,"gap":0.3,"maxW":2.9},"table":{"y":2.5,"rowH":0.55,"rowHMin":0.32,"headRowH":0.5},"bar":{"hbarY0":2.6,"hbarY1":6.25,"chartX":0.6,"chartY":2.95,"chartW":1.2,"chartH":3.35,"noteY":6.55},"note":{"y":6.55,"h":0.4},"exhibit":{"badgeY":2.35,"chartY":2.75,"chartH":3.25,"soWhatY":6.05,"footnoteY":6.72},"twocol":{"colGap":0.5,"bodyH":3.6,"rowHMin":0.5},"hbar":{"labelW":1.9,"valW":1.0,"rowH":0.55,"barRatio":0.5},"diagram":{"layerBarW":1.35,"layerGap":0.15,"nodeGap":0.15,"bodyStartY":2.9,"maxLayerH":1.15,"nodeMaxW":2.2},"split":{"leftW":0.55,"rightW":0.415,"rightX":0.585,"pointsY":2.7,"rowH":0.78,"capY":2.55,"chartY":3.0,"chartH":3.7,"tableY":2.7,"tableRowH":0.5},"cards":{"startY":3.0,"gap":0.25,"maxH":2.0,"titleH":0.4},"timeline":{"labelY":2.95,"axisY":3.58,"dotY":3.51,"dotR":0.18,"nameY":3.9,"descY":4.45,"descH":1.2},"research":{"col3Gap":0.38,"matrixLabelW":1.5,"matrixCellH":0.85,"matrixY":2.2,"denseTableY":2.2,"denseRowH":0.42,"halfTableW":0.52,"halfChartX":0.57,"halfChartW":0.43},"arch":{"fullStartY":2.1,"fullEndY":6.9,"laneH":0.72,"laneHMin":0.5,"laneGap":0.14,"laneHeadW":1.3,"stepGap":0.12,"stepMaxW":1.9},"kpi":{"heroY":2.9,"heroW":0.52,"heroH":1.6,"dividerX":0.56,"metricY0":2.95,"metricRowH":0.85},"comparison":{"panelGap":0.4,"panelY":2.55,"panelH":3.4,"titleH":0.45,"rowH":0.62},"quote":{"markY":1.75,"textY":2.7,"textH":2.3,"authorY":5.25,"contextY":5.8},"donut":{"centerX":3.05,"centerY":4.6,"r":1.6,"holeR":0.95,"legendX":5.6,"legendRowH":0.55,"legendLabelW":3.4,"legendValW":1.3,"legendPctX":10.8,"legendPctW":1.3},"steps":{"y":3.05,"barH":1.35,"gap":0.12,"arrowW":0.3,"numH":0.3,"titleH":0.34,"pad":0.08,"maxPerRow":6},"heatmap":{"y":2.6,"labelW":1.7,"headH":0.42,"cellH":0.6,"cellGap":0.06,"legendW":1.6},"pyramid":{"y":2.35,"rowH":0.72,"gap":0.08,"minW":0.34,"labelW":3.2},"bullet":{"y":2.6,"rowH":0.8,"labelW":2.4,"valW":1.7,"barH":0.26},"image":{"y":2.3,"h":4.2,"halfW":0.56,"halfGap":0.06,"capY":6.6,"capH":0.3,"radius":0.09,"noteRowH":0.62,"gridGap":0.16,"gridCols":{"2":2,"3":3,"4":4,"6":3},"gridCapH":0.28,"compareGap":0.3,"compareTagH":0.26,"wallCellH":0.92,"wallGap":0.18,"wallMaxRows":2},"flagbar":{"hdH":0.26,"rowH":0.24,"maxRows":3,"gap":0.12},"sankey":{"y":2.45,"h":4.1,"nodeW":0.32,"nodeGap":0.14,"labelW":1.55,"minBandH":0.22,"maxNodes":12,"maxFlows":24},"treemap":{"y":2.45,"h":4.1,"gap":0.05,"labelMinH":0.34,"maxLeaves":16,"maxDepth":3},"boxplot":{"y":2.7,"h":3.7,"labelW":1.5,"groupGap":0.3,"boxMaxW":0.9,"whiskerCapW":0.34,"maxGroups":8},"network":{"y":2.4,"h":4.2,"nodeR":0.28,"nodeRMin":0.18,"labelMaxW":1.4,"maxNodes":18,"maxEdges":30},"marimekko":{"y":2.6,"h":3.75,"labelW":1.55,"colGap":0.06,"legendH":0.42,"maxCols":6,"maxSegs":4},"streamgraph":{"y":2.6,"h":3.75,"labelW":1.4,"bandMinH":0.12,"maxSeries":6}};
|
|
3648
3648
|
var PRESETS = {
|
|
3649
3649
|
'business-blue': { accent:'1A73E8', ink:'202124', body:'5F6368', faint:'80868B', bg:'FFFFFF', surface:'F8F9FA', line:'DADCE0', soft:'E8F0FE', onAccent:'FFFFFF', font:'Microsoft YaHei', fontDisplay:'Microsoft YaHei' },
|
|
3650
3650
|
'apple-mono': { accent:'1D1D1F', ink:'1D1D1F', body:'6E6E73', faint:'86868B', bg:'FFFFFF', surface:'F5F5F7', line:'D2D2D7', soft:'F5F5F7', onAccent:'FFFFFF', font:'Microsoft YaHei', fontDisplay:'Microsoft YaHei' },
|
|
@@ -4585,7 +4585,9 @@ function infoTableRows(sec) {
|
|
|
4585
4585
|
if (t === 'marimekko') {
|
|
4586
4586
|
var head = ['列', '总量' + u].concat((sec.legend || []).map(String));
|
|
4587
4587
|
return [head].concat((sec.cols || []).map(function (c, i) {
|
|
4588
|
-
return [String(c[0]), String(c[1])].concat(((sec.cells || [])[i] || []).map(
|
|
4588
|
+
return [String(c[0]), String(c[1])].concat((((sec.cells || [])[i] || []).map(function (el) {
|
|
4589
|
+
return Array.isArray(el) ? String(el[0]) + ' ' + el[1] : String(el);
|
|
4590
|
+
})));
|
|
4589
4591
|
}));
|
|
4590
4592
|
}
|
|
4591
4593
|
if (t === 'streamgraph') {
|
|
@@ -4733,7 +4735,11 @@ function infoApprox(sh, sec, S, y0, y1) {
|
|
|
4733
4735
|
var cx1 = MX;
|
|
4734
4736
|
cols.forEach(function (c, i) {
|
|
4735
4737
|
var cw = Math.max(0.2, (Number(c[1]) || 0) / total * availW);
|
|
4736
|
-
|
|
4738
|
+
/* 单元格兼容 [标签,数值] 对(与 B 通道 marimekkoSegs 同规则);非数值 → 0 */
|
|
4739
|
+
var shares = ((sec.cells || [])[i] || []).map(function (el) {
|
|
4740
|
+
var v = Number(Array.isArray(el) ? el[1] : el);
|
|
4741
|
+
return isFinite(v) ? v : 0;
|
|
4742
|
+
});
|
|
4737
4743
|
var sum = shares.reduce(function (a, b) { return a + b; }, 0) || 1;
|
|
4738
4744
|
var cy = P.y0;
|
|
4739
4745
|
shares.forEach(function (v, k) {
|
|
@@ -4883,13 +4889,20 @@ function slidesOf(model, S) {
|
|
|
4883
4889
|
});
|
|
4884
4890
|
}
|
|
4885
4891
|
|
|
4886
|
-
/*
|
|
4892
|
+
/* Exhibit 徽标文本:纯编号补 "Exhibit " 前缀(HTML 为 `Exhibit {no}` + CSS uppercase);
|
|
4893
|
+
调用方已带前缀的不重复(与 B 通道 exhibitBadge 同规则) */
|
|
4894
|
+
function exhibitBadge(no) {
|
|
4895
|
+
var t = String(no == null ? '' : no).trim();
|
|
4896
|
+
if (!t) return t;
|
|
4897
|
+
return /^exhibit[\s\-:]*/i.test(t) ? t.toUpperCase() : ('EXHIBIT ' + t.toUpperCase());
|
|
4898
|
+
}
|
|
4899
|
+
/* 章节页 */
|
|
4887
4900
|
(model.sections || []).forEach(function (sec) {
|
|
4888
4901
|
var type = sec.type || 'points';
|
|
4889
4902
|
var sh = [];
|
|
4890
4903
|
if (type !== 'quote') head(sh, sec.eyebrow, sec.title, sec.lead);
|
|
4891
4904
|
/* 非 exhibit 页型也可带 Exhibit 编号(帧头徽标;正文区下移让位,与 B 通道同规则) */
|
|
4892
|
-
var exBadge = (type !== 'exhibit' && sec.exhibitNo) ?
|
|
4905
|
+
var exBadge = (type !== 'exhibit' && sec.exhibitNo) ? exhibitBadge(sec.exhibitNo) : null;
|
|
4893
4906
|
var bodyY0 = sec.lead ? PT.common.bodyYWithLead : CONTENT_TOP;
|
|
4894
4907
|
var bodyY = exBadge ? bodyY0 + 0.42 : bodyY0;
|
|
4895
4908
|
if (exBadge) {
|
|
@@ -4900,7 +4913,7 @@ function slidesOf(model, S) {
|
|
|
4900
4913
|
var _F = PT.flagbar || { hdH: 0.26, rowH: 0.24, maxRows: 3, gap: 0.12 };
|
|
4901
4914
|
var flagH = flagItems.length
|
|
4902
4915
|
? (_F.hdH + Math.min(_F.maxRows, flagItems.length) * _F.rowH + 0.06) : 0;
|
|
4903
|
-
var bodyBottom = chartBottom(!!sec.soWhat, !!sec.footnote);
|
|
4916
|
+
var bodyBottom = chartBottom(!!sec.soWhat, !!(sec.footnote || sec.note));
|
|
4904
4917
|
var flagY = 0;
|
|
4905
4918
|
if (flagH) {
|
|
4906
4919
|
flagY = CONTENT_BOTTOM - flagH;
|
|
@@ -4934,9 +4947,14 @@ function slidesOf(model, S) {
|
|
|
4934
4947
|
sh.push(shape('rect', kdivX, K.heroY + 0.15, 0.025, 3.1, S.line));
|
|
4935
4948
|
var mRegK = regOf('kpi', 'metrics') || { x: kdivX + 0.35, y: K.metricY0, w: CW * (1 - K.dividerX) - 0.5 };
|
|
4936
4949
|
var kmets = sec.metrics || [];
|
|
4937
|
-
|
|
4950
|
+
/* 容量按最小允许行高判断,行高按全部指标自适应压缩 —— 禁静默丢数据(与 B 通道同规则) */
|
|
4951
|
+
var kAvailA = CONTENT_BOTTOM - mRegK.y;
|
|
4952
|
+
var kCap = Math.max(1, Math.floor(kAvailA / 0.42));
|
|
4938
4953
|
var kRows = Math.min(kmets.length, kCap);
|
|
4939
|
-
|
|
4954
|
+
if (kRows < kmets.length && typeof console !== 'undefined')
|
|
4955
|
+
console.warn('[pptx-export] KPI 页「' + (sec.title || '') + '」支撑指标 ' + kmets.length +
|
|
4956
|
+
' 个超出容量,仅渲染前 ' + kRows + ' 个 —— 建议拆页');
|
|
4957
|
+
var kRowH = fitRowH(kAvailA, kRows, K.metricRowH, 0.42);
|
|
4940
4958
|
var kTopH = Math.min(0.55, kRowH * 0.62);
|
|
4941
4959
|
kmets.slice(0, kRows).forEach(function (m, i) {
|
|
4942
4960
|
var ky = mRegK.y + i * kRowH;
|
|
@@ -5087,9 +5105,20 @@ function slidesOf(model, S) {
|
|
|
5087
5105
|
var lt = isRec(l) ? (l.t || '') : String(l[0] || '');
|
|
5088
5106
|
var ld = isRec(l) ? (l.d || '') : String(l[1] || '');
|
|
5089
5107
|
sh.push(shape('roundRect', x2, y2, w2, rowHP, acc ? S.soft : S.surface, { adj: 5000, line: acc ? undefined : S.line }));
|
|
5090
|
-
var lwP = Math.min(P.labelW, w2 - 0.44);
|
|
5091
|
-
|
|
5092
|
-
|
|
5108
|
+
var lwP = Math.min(P.labelW, (w2 - 0.44) * (P.labelFrac == null ? 0.32 : P.labelFrac));
|
|
5109
|
+
var descW = w2 - 0.44 - lwP;
|
|
5110
|
+
/* 窄层判定:说明列 < 1.2in,或标题在标题列内放不下单行 → 单框混排(与 B 通道同规则) */
|
|
5111
|
+
var narrowP = descW < 1.2 || (ld && estLines(lt, lwP, 13.5) > 1) || (!ld && estLines(lt, w2 - 0.44, 13.5) > 1);
|
|
5112
|
+
if (narrowP) {
|
|
5113
|
+
/* 顶层窄 → 标题上、说明下单框混排(HTML 窄屏 .pyr__lvl 即单列,与 B 通道同规则) */
|
|
5114
|
+
sh.push(txSp(x2 + 0.22, y2 + 0.03, w2 - 0.44, 0.30,
|
|
5115
|
+
[[{ t: lt, sz: 12.5, b: 1, col: acc ? S.accent : S.ink, font: S.font }]]));
|
|
5116
|
+
sh.push(txSp(x2 + 0.22, y2 + 0.33, w2 - 0.44, Math.max(0.2, rowHP - 0.36),
|
|
5117
|
+
[[{ t: ld, sz: 10.5, col: S.faint, font: S.font }]]));
|
|
5118
|
+
} else {
|
|
5119
|
+
sh.push(txSp(x2 + 0.22, y2, lwP, rowHP, [[{ t: lt, sz: 13.5, b: 1, col: acc ? S.accent : S.ink, font: S.font }]], { anchor: 'ctr' }));
|
|
5120
|
+
if (ld) sh.push(txSp(x2 + 0.22 + lwP, y2, descW, rowHP, [[{ t: ld, sz: 11, col: S.faint, font: S.font }]], { anchor: 'ctr' }));
|
|
5121
|
+
}
|
|
5093
5122
|
});
|
|
5094
5123
|
} else if (type === 'steps') {
|
|
5095
5124
|
var S2 = PT.steps, st = sec.steps || [], maxPer = S2.maxPerRow || 6, groups = sec.groups || [];
|
|
@@ -5438,12 +5467,12 @@ function slidesOf(model, S) {
|
|
|
5438
5467
|
var eReg = regOf('exhibit', 'primary')
|
|
5439
5468
|
|| { x: MX, y: PT.exhibit.chartY, w: CW, badgeY: PT.exhibit.badgeY };
|
|
5440
5469
|
if (sec.exhibitNo) {
|
|
5441
|
-
sh.push(txSp(MX, eReg.badgeY != null ? eReg.badgeY : PT.exhibit.badgeY, CW, 0.35, [[{ t:
|
|
5470
|
+
sh.push(txSp(MX, eReg.badgeY != null ? eReg.badgeY : PT.exhibit.badgeY, CW, 0.35, [[{ t: exhibitBadge(sec.exhibitNo), sz: 11.5, b: 1, col: S.accent, font: S.font, spc: 200 }]]));
|
|
5442
5471
|
}
|
|
5443
5472
|
var ec2 = sec.chart || {};
|
|
5444
5473
|
if (ec2.labels && ec2.values) {
|
|
5445
5474
|
var edcols2 = (ec2.colors || dataColors(model.style, model.theme));
|
|
5446
|
-
var hh2 = Math.max(1.2, chartBottom(!!sec.soWhat, !!sec.footnote) - eReg.y - 0.05);
|
|
5475
|
+
var hh2 = Math.max(1.2, chartBottom(!!sec.soWhat, !!(sec.footnote || sec.note)) - eReg.y - 0.05);
|
|
5447
5476
|
if (ec2.type === 'hbar') {
|
|
5448
5477
|
chartBlockShapes(sh, ec2, S, eReg.x, eReg.y, eReg.w, hh2, edcols2);
|
|
5449
5478
|
} else {
|
|
@@ -2372,7 +2372,7 @@ window.REPORT_MODEL = {
|
|
|
2372
2372
|
|
|
2373
2373
|
/* __TOPPPT_RUNTIME_START__ */
|
|
2374
2374
|
/* ══ PPTX 导出运行时(assets/pptx-export.js 的内联副本 · 由 scripts/sync_runtime.py 注入,禁止手改) ══ */
|
|
2375
|
-
/* __TOPPPT_RUNTIME_SHA__:
|
|
2375
|
+
/* __TOPPPT_RUNTIME_SHA__:a4c909346759fe9c */
|
|
2376
2376
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
2377
2377
|
* TopPPT HTML· 浏览器端 PPTX 预览运行时
|
|
2378
2378
|
* 零依赖、随报告单文件分发;OOXML 序列化器(仅供预览,页面不导出文件)。
|
|
@@ -2427,7 +2427,7 @@ function isRec(v) { return !!v && typeof v === 'object' && !Array.isArray(v); }
|
|
|
2427
2427
|
var PW = 13.333, PH = 7.5, MX = 0.6, CW = PW - 2 * MX, EMU = 914400;
|
|
2428
2428
|
var TS_BASE = {"coverTitle":44,"coverSub":18,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10};
|
|
2429
2429
|
var MTS = {"presentation":{"coverTitle":44,"coverSub":18,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10},"research":{"coverTitle":36,"coverSub":14,"h1":22,"h2":13.5,"lead":11.5,"body":10.5,"caption":9,"micro":8.5},"architecture":{"coverTitle":44,"coverSub":19,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10}};
|
|
2430
|
-
var PT = {"layout":{"contentTop":2.35,"contentBottom":6.9,"contentBottomWithNote":6.4,"pageNumY":7.0},"common":{"headEyebrowY":0.48,"headTitleY":0.82,"headRuleY":1.72,"leadY":1.88,"bodyY":2.35,"bodyYWithLead":2.55,"pagerY":7.0},"cover":{"metaY":0.7,"titleY":2.4,"titleH":2.0,"subtitleY":4.5,"subtitleH":0.8},"closing":{"eyebrowY":0.7,"titleY":1.2,"titleH":1.2,"pointsY":3.0,"pointTitleH":0.6,"pointBodyH":1.2},"points":{"listY":2.5,"rowH":0.72,"rowHMin":0.5,"markSize":0.14,"metricY":4.7,"metricW":2.6,"metricValH":0.9,"metricCapY":5.6},"metrics":{"bandY":3.1,"cardH":2.3,"valY":3.45,"valH":1.1,"capY":4.55,"capH":0.7,"gap":0.3,"maxW":2.9},"table":{"y":2.5,"rowH":0.55,"rowHMin":0.32,"headRowH":0.5},"bar":{"hbarY0":2.6,"hbarY1":6.25,"chartX":0.6,"chartY":2.95,"chartW":1.2,"chartH":3.35,"noteY":6.55},"note":{"y":6.55,"h":0.4},"exhibit":{"badgeY":2.35,"chartY":2.75,"chartH":3.25,"soWhatY":6.05,"footnoteY":6.72},"twocol":{"colGap":0.5,"bodyH":3.6,"rowHMin":0.5},"hbar":{"labelW":1.9,"valW":1.0,"rowH":0.55,"barRatio":0.5},"diagram":{"layerBarW":1.35,"layerGap":0.15,"nodeGap":0.15,"bodyStartY":2.9,"maxLayerH":1.15,"nodeMaxW":2.2},"split":{"leftW":0.55,"rightW":0.415,"rightX":0.585,"pointsY":2.7,"rowH":0.78,"capY":2.55,"chartY":3.0,"chartH":3.7,"tableY":2.7,"tableRowH":0.5},"cards":{"startY":3.0,"gap":0.25,"maxH":2.0,"titleH":0.4},"timeline":{"labelY":2.95,"axisY":3.58,"dotY":3.51,"dotR":0.18,"nameY":3.9,"descY":4.45,"descH":1.2},"research":{"col3Gap":0.38,"matrixLabelW":1.5,"matrixCellH":0.85,"matrixY":2.2,"denseTableY":2.2,"denseRowH":0.42,"halfTableW":0.52,"halfChartX":0.57,"halfChartW":0.43},"arch":{"fullStartY":2.1,"fullEndY":6.9,"laneH":0.72,"laneHMin":0.5,"laneGap":0.14,"laneHeadW":1.3,"stepGap":0.12,"stepMaxW":1.9},"kpi":{"heroY":2.9,"heroW":0.52,"heroH":1.6,"dividerX":0.56,"metricY0":2.95,"metricRowH":0.85},"comparison":{"panelGap":0.4,"panelY":2.55,"panelH":3.4,"titleH":0.45,"rowH":0.62},"quote":{"markY":1.75,"textY":2.7,"textH":2.3,"authorY":5.25,"contextY":5.8},"donut":{"centerX":3.05,"centerY":4.6,"r":1.6,"holeR":0.95,"legendX":5.6,"legendRowH":0.55,"legendLabelW":3.4,"legendValW":1.3,"legendPctX":
|
|
2430
|
+
var PT = {"layout":{"contentTop":2.35,"contentBottom":6.9,"contentBottomWithNote":6.4,"pageNumY":7.0},"common":{"headEyebrowY":0.48,"headTitleY":0.82,"headRuleY":1.72,"leadY":1.88,"bodyY":2.35,"bodyYWithLead":2.55,"pagerY":7.0},"cover":{"metaY":0.7,"titleY":2.4,"titleH":2.0,"subtitleY":4.5,"subtitleH":0.8},"closing":{"eyebrowY":0.7,"titleY":1.2,"titleH":1.2,"pointsY":3.0,"pointTitleH":0.6,"pointBodyH":1.2},"points":{"listY":2.5,"rowH":0.72,"rowHMin":0.5,"markSize":0.14,"metricY":4.7,"metricW":2.6,"metricValH":0.9,"metricCapY":5.6},"metrics":{"bandY":3.1,"cardH":2.3,"valY":3.45,"valH":1.1,"capY":4.55,"capH":0.7,"gap":0.3,"maxW":2.9},"table":{"y":2.5,"rowH":0.55,"rowHMin":0.32,"headRowH":0.5},"bar":{"hbarY0":2.6,"hbarY1":6.25,"chartX":0.6,"chartY":2.95,"chartW":1.2,"chartH":3.35,"noteY":6.55},"note":{"y":6.55,"h":0.4},"exhibit":{"badgeY":2.35,"chartY":2.75,"chartH":3.25,"soWhatY":6.05,"footnoteY":6.72},"twocol":{"colGap":0.5,"bodyH":3.6,"rowHMin":0.5},"hbar":{"labelW":1.9,"valW":1.0,"rowH":0.55,"barRatio":0.5},"diagram":{"layerBarW":1.35,"layerGap":0.15,"nodeGap":0.15,"bodyStartY":2.9,"maxLayerH":1.15,"nodeMaxW":2.2},"split":{"leftW":0.55,"rightW":0.415,"rightX":0.585,"pointsY":2.7,"rowH":0.78,"capY":2.55,"chartY":3.0,"chartH":3.7,"tableY":2.7,"tableRowH":0.5},"cards":{"startY":3.0,"gap":0.25,"maxH":2.0,"titleH":0.4},"timeline":{"labelY":2.95,"axisY":3.58,"dotY":3.51,"dotR":0.18,"nameY":3.9,"descY":4.45,"descH":1.2},"research":{"col3Gap":0.38,"matrixLabelW":1.5,"matrixCellH":0.85,"matrixY":2.2,"denseTableY":2.2,"denseRowH":0.42,"halfTableW":0.52,"halfChartX":0.57,"halfChartW":0.43},"arch":{"fullStartY":2.1,"fullEndY":6.9,"laneH":0.72,"laneHMin":0.5,"laneGap":0.14,"laneHeadW":1.3,"stepGap":0.12,"stepMaxW":1.9},"kpi":{"heroY":2.9,"heroW":0.52,"heroH":1.6,"dividerX":0.56,"metricY0":2.95,"metricRowH":0.85},"comparison":{"panelGap":0.4,"panelY":2.55,"panelH":3.4,"titleH":0.45,"rowH":0.62},"quote":{"markY":1.75,"textY":2.7,"textH":2.3,"authorY":5.25,"contextY":5.8},"donut":{"centerX":3.05,"centerY":4.6,"r":1.6,"holeR":0.95,"legendX":5.6,"legendRowH":0.55,"legendLabelW":3.4,"legendValW":1.3,"legendPctX":10.8,"legendPctW":1.3},"steps":{"y":3.05,"barH":1.35,"gap":0.12,"arrowW":0.3,"numH":0.3,"titleH":0.34,"pad":0.08,"maxPerRow":6},"heatmap":{"y":2.6,"labelW":1.7,"headH":0.42,"cellH":0.6,"cellGap":0.06,"legendW":1.6},"pyramid":{"y":2.35,"rowH":0.72,"gap":0.08,"minW":0.34,"labelW":3.2},"bullet":{"y":2.6,"rowH":0.8,"labelW":2.4,"valW":1.7,"barH":0.26},"image":{"y":2.3,"h":4.2,"halfW":0.56,"halfGap":0.06,"capY":6.6,"capH":0.3,"radius":0.09,"noteRowH":0.62,"gridGap":0.16,"gridCols":{"2":2,"3":3,"4":4,"6":3},"gridCapH":0.28,"compareGap":0.3,"compareTagH":0.26,"wallCellH":0.92,"wallGap":0.18,"wallMaxRows":2},"flagbar":{"hdH":0.26,"rowH":0.24,"maxRows":3,"gap":0.12},"sankey":{"y":2.45,"h":4.1,"nodeW":0.32,"nodeGap":0.14,"labelW":1.55,"minBandH":0.22,"maxNodes":12,"maxFlows":24},"treemap":{"y":2.45,"h":4.1,"gap":0.05,"labelMinH":0.34,"maxLeaves":16,"maxDepth":3},"boxplot":{"y":2.7,"h":3.7,"labelW":1.5,"groupGap":0.3,"boxMaxW":0.9,"whiskerCapW":0.34,"maxGroups":8},"network":{"y":2.4,"h":4.2,"nodeR":0.28,"nodeRMin":0.18,"labelMaxW":1.4,"maxNodes":18,"maxEdges":30},"marimekko":{"y":2.6,"h":3.75,"labelW":1.55,"colGap":0.06,"legendH":0.42,"maxCols":6,"maxSegs":4},"streamgraph":{"y":2.6,"h":3.75,"labelW":1.4,"bandMinH":0.12,"maxSeries":6}};
|
|
2431
2431
|
var PRESETS = {
|
|
2432
2432
|
'business-blue': { accent:'1A73E8', ink:'202124', body:'5F6368', faint:'80868B', bg:'FFFFFF', surface:'F8F9FA', line:'DADCE0', soft:'E8F0FE', onAccent:'FFFFFF', font:'Microsoft YaHei', fontDisplay:'Microsoft YaHei' },
|
|
2433
2433
|
'apple-mono': { accent:'1D1D1F', ink:'1D1D1F', body:'6E6E73', faint:'86868B', bg:'FFFFFF', surface:'F5F5F7', line:'D2D2D7', soft:'F5F5F7', onAccent:'FFFFFF', font:'Microsoft YaHei', fontDisplay:'Microsoft YaHei' },
|
|
@@ -3368,7 +3368,9 @@ function infoTableRows(sec) {
|
|
|
3368
3368
|
if (t === 'marimekko') {
|
|
3369
3369
|
var head = ['列', '总量' + u].concat((sec.legend || []).map(String));
|
|
3370
3370
|
return [head].concat((sec.cols || []).map(function (c, i) {
|
|
3371
|
-
return [String(c[0]), String(c[1])].concat(((sec.cells || [])[i] || []).map(
|
|
3371
|
+
return [String(c[0]), String(c[1])].concat((((sec.cells || [])[i] || []).map(function (el) {
|
|
3372
|
+
return Array.isArray(el) ? String(el[0]) + ' ' + el[1] : String(el);
|
|
3373
|
+
})));
|
|
3372
3374
|
}));
|
|
3373
3375
|
}
|
|
3374
3376
|
if (t === 'streamgraph') {
|
|
@@ -3516,7 +3518,11 @@ function infoApprox(sh, sec, S, y0, y1) {
|
|
|
3516
3518
|
var cx1 = MX;
|
|
3517
3519
|
cols.forEach(function (c, i) {
|
|
3518
3520
|
var cw = Math.max(0.2, (Number(c[1]) || 0) / total * availW);
|
|
3519
|
-
|
|
3521
|
+
/* 单元格兼容 [标签,数值] 对(与 B 通道 marimekkoSegs 同规则);非数值 → 0 */
|
|
3522
|
+
var shares = ((sec.cells || [])[i] || []).map(function (el) {
|
|
3523
|
+
var v = Number(Array.isArray(el) ? el[1] : el);
|
|
3524
|
+
return isFinite(v) ? v : 0;
|
|
3525
|
+
});
|
|
3520
3526
|
var sum = shares.reduce(function (a, b) { return a + b; }, 0) || 1;
|
|
3521
3527
|
var cy = P.y0;
|
|
3522
3528
|
shares.forEach(function (v, k) {
|
|
@@ -3666,13 +3672,20 @@ function slidesOf(model, S) {
|
|
|
3666
3672
|
});
|
|
3667
3673
|
}
|
|
3668
3674
|
|
|
3669
|
-
/*
|
|
3675
|
+
/* Exhibit 徽标文本:纯编号补 "Exhibit " 前缀(HTML 为 `Exhibit {no}` + CSS uppercase);
|
|
3676
|
+
调用方已带前缀的不重复(与 B 通道 exhibitBadge 同规则) */
|
|
3677
|
+
function exhibitBadge(no) {
|
|
3678
|
+
var t = String(no == null ? '' : no).trim();
|
|
3679
|
+
if (!t) return t;
|
|
3680
|
+
return /^exhibit[\s\-:]*/i.test(t) ? t.toUpperCase() : ('EXHIBIT ' + t.toUpperCase());
|
|
3681
|
+
}
|
|
3682
|
+
/* 章节页 */
|
|
3670
3683
|
(model.sections || []).forEach(function (sec) {
|
|
3671
3684
|
var type = sec.type || 'points';
|
|
3672
3685
|
var sh = [];
|
|
3673
3686
|
if (type !== 'quote') head(sh, sec.eyebrow, sec.title, sec.lead);
|
|
3674
3687
|
/* 非 exhibit 页型也可带 Exhibit 编号(帧头徽标;正文区下移让位,与 B 通道同规则) */
|
|
3675
|
-
var exBadge = (type !== 'exhibit' && sec.exhibitNo) ?
|
|
3688
|
+
var exBadge = (type !== 'exhibit' && sec.exhibitNo) ? exhibitBadge(sec.exhibitNo) : null;
|
|
3676
3689
|
var bodyY0 = sec.lead ? PT.common.bodyYWithLead : CONTENT_TOP;
|
|
3677
3690
|
var bodyY = exBadge ? bodyY0 + 0.42 : bodyY0;
|
|
3678
3691
|
if (exBadge) {
|
|
@@ -3683,7 +3696,7 @@ function slidesOf(model, S) {
|
|
|
3683
3696
|
var _F = PT.flagbar || { hdH: 0.26, rowH: 0.24, maxRows: 3, gap: 0.12 };
|
|
3684
3697
|
var flagH = flagItems.length
|
|
3685
3698
|
? (_F.hdH + Math.min(_F.maxRows, flagItems.length) * _F.rowH + 0.06) : 0;
|
|
3686
|
-
var bodyBottom = chartBottom(!!sec.soWhat, !!sec.footnote);
|
|
3699
|
+
var bodyBottom = chartBottom(!!sec.soWhat, !!(sec.footnote || sec.note));
|
|
3687
3700
|
var flagY = 0;
|
|
3688
3701
|
if (flagH) {
|
|
3689
3702
|
flagY = CONTENT_BOTTOM - flagH;
|
|
@@ -3717,9 +3730,14 @@ function slidesOf(model, S) {
|
|
|
3717
3730
|
sh.push(shape('rect', kdivX, K.heroY + 0.15, 0.025, 3.1, S.line));
|
|
3718
3731
|
var mRegK = regOf('kpi', 'metrics') || { x: kdivX + 0.35, y: K.metricY0, w: CW * (1 - K.dividerX) - 0.5 };
|
|
3719
3732
|
var kmets = sec.metrics || [];
|
|
3720
|
-
|
|
3733
|
+
/* 容量按最小允许行高判断,行高按全部指标自适应压缩 —— 禁静默丢数据(与 B 通道同规则) */
|
|
3734
|
+
var kAvailA = CONTENT_BOTTOM - mRegK.y;
|
|
3735
|
+
var kCap = Math.max(1, Math.floor(kAvailA / 0.42));
|
|
3721
3736
|
var kRows = Math.min(kmets.length, kCap);
|
|
3722
|
-
|
|
3737
|
+
if (kRows < kmets.length && typeof console !== 'undefined')
|
|
3738
|
+
console.warn('[pptx-export] KPI 页「' + (sec.title || '') + '」支撑指标 ' + kmets.length +
|
|
3739
|
+
' 个超出容量,仅渲染前 ' + kRows + ' 个 —— 建议拆页');
|
|
3740
|
+
var kRowH = fitRowH(kAvailA, kRows, K.metricRowH, 0.42);
|
|
3723
3741
|
var kTopH = Math.min(0.55, kRowH * 0.62);
|
|
3724
3742
|
kmets.slice(0, kRows).forEach(function (m, i) {
|
|
3725
3743
|
var ky = mRegK.y + i * kRowH;
|
|
@@ -3870,9 +3888,20 @@ function slidesOf(model, S) {
|
|
|
3870
3888
|
var lt = isRec(l) ? (l.t || '') : String(l[0] || '');
|
|
3871
3889
|
var ld = isRec(l) ? (l.d || '') : String(l[1] || '');
|
|
3872
3890
|
sh.push(shape('roundRect', x2, y2, w2, rowHP, acc ? S.soft : S.surface, { adj: 5000, line: acc ? undefined : S.line }));
|
|
3873
|
-
var lwP = Math.min(P.labelW, w2 - 0.44);
|
|
3874
|
-
|
|
3875
|
-
|
|
3891
|
+
var lwP = Math.min(P.labelW, (w2 - 0.44) * (P.labelFrac == null ? 0.32 : P.labelFrac));
|
|
3892
|
+
var descW = w2 - 0.44 - lwP;
|
|
3893
|
+
/* 窄层判定:说明列 < 1.2in,或标题在标题列内放不下单行 → 单框混排(与 B 通道同规则) */
|
|
3894
|
+
var narrowP = descW < 1.2 || (ld && estLines(lt, lwP, 13.5) > 1) || (!ld && estLines(lt, w2 - 0.44, 13.5) > 1);
|
|
3895
|
+
if (narrowP) {
|
|
3896
|
+
/* 顶层窄 → 标题上、说明下单框混排(HTML 窄屏 .pyr__lvl 即单列,与 B 通道同规则) */
|
|
3897
|
+
sh.push(txSp(x2 + 0.22, y2 + 0.03, w2 - 0.44, 0.30,
|
|
3898
|
+
[[{ t: lt, sz: 12.5, b: 1, col: acc ? S.accent : S.ink, font: S.font }]]));
|
|
3899
|
+
sh.push(txSp(x2 + 0.22, y2 + 0.33, w2 - 0.44, Math.max(0.2, rowHP - 0.36),
|
|
3900
|
+
[[{ t: ld, sz: 10.5, col: S.faint, font: S.font }]]));
|
|
3901
|
+
} else {
|
|
3902
|
+
sh.push(txSp(x2 + 0.22, y2, lwP, rowHP, [[{ t: lt, sz: 13.5, b: 1, col: acc ? S.accent : S.ink, font: S.font }]], { anchor: 'ctr' }));
|
|
3903
|
+
if (ld) sh.push(txSp(x2 + 0.22 + lwP, y2, descW, rowHP, [[{ t: ld, sz: 11, col: S.faint, font: S.font }]], { anchor: 'ctr' }));
|
|
3904
|
+
}
|
|
3876
3905
|
});
|
|
3877
3906
|
} else if (type === 'steps') {
|
|
3878
3907
|
var S2 = PT.steps, st = sec.steps || [], maxPer = S2.maxPerRow || 6, groups = sec.groups || [];
|
|
@@ -4221,12 +4250,12 @@ function slidesOf(model, S) {
|
|
|
4221
4250
|
var eReg = regOf('exhibit', 'primary')
|
|
4222
4251
|
|| { x: MX, y: PT.exhibit.chartY, w: CW, badgeY: PT.exhibit.badgeY };
|
|
4223
4252
|
if (sec.exhibitNo) {
|
|
4224
|
-
sh.push(txSp(MX, eReg.badgeY != null ? eReg.badgeY : PT.exhibit.badgeY, CW, 0.35, [[{ t:
|
|
4253
|
+
sh.push(txSp(MX, eReg.badgeY != null ? eReg.badgeY : PT.exhibit.badgeY, CW, 0.35, [[{ t: exhibitBadge(sec.exhibitNo), sz: 11.5, b: 1, col: S.accent, font: S.font, spc: 200 }]]));
|
|
4225
4254
|
}
|
|
4226
4255
|
var ec2 = sec.chart || {};
|
|
4227
4256
|
if (ec2.labels && ec2.values) {
|
|
4228
4257
|
var edcols2 = (ec2.colors || dataColors(model.style, model.theme));
|
|
4229
|
-
var hh2 = Math.max(1.2, chartBottom(!!sec.soWhat, !!sec.footnote) - eReg.y - 0.05);
|
|
4258
|
+
var hh2 = Math.max(1.2, chartBottom(!!sec.soWhat, !!(sec.footnote || sec.note)) - eReg.y - 0.05);
|
|
4230
4259
|
if (ec2.type === 'hbar') {
|
|
4231
4260
|
chartBlockShapes(sh, ec2, S, eReg.x, eReg.y, eReg.w, hh2, edcols2);
|
|
4232
4261
|
} else {
|
|
@@ -52,7 +52,7 @@ function isRec(v) { return !!v && typeof v === 'object' && !Array.isArray(v); }
|
|
|
52
52
|
var PW = 13.333, PH = 7.5, MX = 0.6, CW = PW - 2 * MX, EMU = 914400;
|
|
53
53
|
var TS_BASE = {"coverTitle":44,"coverSub":18,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10};
|
|
54
54
|
var MTS = {"presentation":{"coverTitle":44,"coverSub":18,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10},"research":{"coverTitle":36,"coverSub":14,"h1":22,"h2":13.5,"lead":11.5,"body":10.5,"caption":9,"micro":8.5},"architecture":{"coverTitle":44,"coverSub":19,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10}};
|
|
55
|
-
var PT = {"layout":{"contentTop":2.35,"contentBottom":6.9,"contentBottomWithNote":6.4,"pageNumY":7.0},"common":{"headEyebrowY":0.48,"headTitleY":0.82,"headRuleY":1.72,"leadY":1.88,"bodyY":2.35,"bodyYWithLead":2.55,"pagerY":7.0},"cover":{"metaY":0.7,"titleY":2.4,"titleH":2.0,"subtitleY":4.5,"subtitleH":0.8},"closing":{"eyebrowY":0.7,"titleY":1.2,"titleH":1.2,"pointsY":3.0,"pointTitleH":0.6,"pointBodyH":1.2},"points":{"listY":2.5,"rowH":0.72,"rowHMin":0.5,"markSize":0.14,"metricY":4.7,"metricW":2.6,"metricValH":0.9,"metricCapY":5.6},"metrics":{"bandY":3.1,"cardH":2.3,"valY":3.45,"valH":1.1,"capY":4.55,"capH":0.7,"gap":0.3,"maxW":2.9},"table":{"y":2.5,"rowH":0.55,"rowHMin":0.32,"headRowH":0.5},"bar":{"hbarY0":2.6,"hbarY1":6.25,"chartX":0.6,"chartY":2.95,"chartW":1.2,"chartH":3.35,"noteY":6.55},"note":{"y":6.55,"h":0.4},"exhibit":{"badgeY":2.35,"chartY":2.75,"chartH":3.25,"soWhatY":6.05,"footnoteY":6.72},"twocol":{"colGap":0.5,"bodyH":3.6,"rowHMin":0.5},"hbar":{"labelW":1.9,"valW":1.0,"rowH":0.55,"barRatio":0.5},"diagram":{"layerBarW":1.35,"layerGap":0.15,"nodeGap":0.15,"bodyStartY":2.9,"maxLayerH":1.15,"nodeMaxW":2.2},"split":{"leftW":0.55,"rightW":0.415,"rightX":0.585,"pointsY":2.7,"rowH":0.78,"capY":2.55,"chartY":3.0,"chartH":3.7,"tableY":2.7,"tableRowH":0.5},"cards":{"startY":3.0,"gap":0.25,"maxH":2.0,"titleH":0.4},"timeline":{"labelY":2.95,"axisY":3.58,"dotY":3.51,"dotR":0.18,"nameY":3.9,"descY":4.45,"descH":1.2},"research":{"col3Gap":0.38,"matrixLabelW":1.5,"matrixCellH":0.85,"matrixY":2.2,"denseTableY":2.2,"denseRowH":0.42,"halfTableW":0.52,"halfChartX":0.57,"halfChartW":0.43},"arch":{"fullStartY":2.1,"fullEndY":6.9,"laneH":0.72,"laneHMin":0.5,"laneGap":0.14,"laneHeadW":1.3,"stepGap":0.12,"stepMaxW":1.9},"kpi":{"heroY":2.9,"heroW":0.52,"heroH":1.6,"dividerX":0.56,"metricY0":2.95,"metricRowH":0.85},"comparison":{"panelGap":0.4,"panelY":2.55,"panelH":3.4,"titleH":0.45,"rowH":0.62},"quote":{"markY":1.75,"textY":2.7,"textH":2.3,"authorY":5.25,"contextY":5.8},"donut":{"centerX":3.05,"centerY":4.6,"r":1.6,"holeR":0.95,"legendX":5.6,"legendRowH":0.55,"legendLabelW":3.4,"legendValW":1.3,"legendPctX":
|
|
55
|
+
var PT = {"layout":{"contentTop":2.35,"contentBottom":6.9,"contentBottomWithNote":6.4,"pageNumY":7.0},"common":{"headEyebrowY":0.48,"headTitleY":0.82,"headRuleY":1.72,"leadY":1.88,"bodyY":2.35,"bodyYWithLead":2.55,"pagerY":7.0},"cover":{"metaY":0.7,"titleY":2.4,"titleH":2.0,"subtitleY":4.5,"subtitleH":0.8},"closing":{"eyebrowY":0.7,"titleY":1.2,"titleH":1.2,"pointsY":3.0,"pointTitleH":0.6,"pointBodyH":1.2},"points":{"listY":2.5,"rowH":0.72,"rowHMin":0.5,"markSize":0.14,"metricY":4.7,"metricW":2.6,"metricValH":0.9,"metricCapY":5.6},"metrics":{"bandY":3.1,"cardH":2.3,"valY":3.45,"valH":1.1,"capY":4.55,"capH":0.7,"gap":0.3,"maxW":2.9},"table":{"y":2.5,"rowH":0.55,"rowHMin":0.32,"headRowH":0.5},"bar":{"hbarY0":2.6,"hbarY1":6.25,"chartX":0.6,"chartY":2.95,"chartW":1.2,"chartH":3.35,"noteY":6.55},"note":{"y":6.55,"h":0.4},"exhibit":{"badgeY":2.35,"chartY":2.75,"chartH":3.25,"soWhatY":6.05,"footnoteY":6.72},"twocol":{"colGap":0.5,"bodyH":3.6,"rowHMin":0.5},"hbar":{"labelW":1.9,"valW":1.0,"rowH":0.55,"barRatio":0.5},"diagram":{"layerBarW":1.35,"layerGap":0.15,"nodeGap":0.15,"bodyStartY":2.9,"maxLayerH":1.15,"nodeMaxW":2.2},"split":{"leftW":0.55,"rightW":0.415,"rightX":0.585,"pointsY":2.7,"rowH":0.78,"capY":2.55,"chartY":3.0,"chartH":3.7,"tableY":2.7,"tableRowH":0.5},"cards":{"startY":3.0,"gap":0.25,"maxH":2.0,"titleH":0.4},"timeline":{"labelY":2.95,"axisY":3.58,"dotY":3.51,"dotR":0.18,"nameY":3.9,"descY":4.45,"descH":1.2},"research":{"col3Gap":0.38,"matrixLabelW":1.5,"matrixCellH":0.85,"matrixY":2.2,"denseTableY":2.2,"denseRowH":0.42,"halfTableW":0.52,"halfChartX":0.57,"halfChartW":0.43},"arch":{"fullStartY":2.1,"fullEndY":6.9,"laneH":0.72,"laneHMin":0.5,"laneGap":0.14,"laneHeadW":1.3,"stepGap":0.12,"stepMaxW":1.9},"kpi":{"heroY":2.9,"heroW":0.52,"heroH":1.6,"dividerX":0.56,"metricY0":2.95,"metricRowH":0.85},"comparison":{"panelGap":0.4,"panelY":2.55,"panelH":3.4,"titleH":0.45,"rowH":0.62},"quote":{"markY":1.75,"textY":2.7,"textH":2.3,"authorY":5.25,"contextY":5.8},"donut":{"centerX":3.05,"centerY":4.6,"r":1.6,"holeR":0.95,"legendX":5.6,"legendRowH":0.55,"legendLabelW":3.4,"legendValW":1.3,"legendPctX":10.8,"legendPctW":1.3},"steps":{"y":3.05,"barH":1.35,"gap":0.12,"arrowW":0.3,"numH":0.3,"titleH":0.34,"pad":0.08,"maxPerRow":6},"heatmap":{"y":2.6,"labelW":1.7,"headH":0.42,"cellH":0.6,"cellGap":0.06,"legendW":1.6},"pyramid":{"y":2.35,"rowH":0.72,"gap":0.08,"minW":0.34,"labelW":3.2},"bullet":{"y":2.6,"rowH":0.8,"labelW":2.4,"valW":1.7,"barH":0.26},"image":{"y":2.3,"h":4.2,"halfW":0.56,"halfGap":0.06,"capY":6.6,"capH":0.3,"radius":0.09,"noteRowH":0.62,"gridGap":0.16,"gridCols":{"2":2,"3":3,"4":4,"6":3},"gridCapH":0.28,"compareGap":0.3,"compareTagH":0.26,"wallCellH":0.92,"wallGap":0.18,"wallMaxRows":2},"flagbar":{"hdH":0.26,"rowH":0.24,"maxRows":3,"gap":0.12},"sankey":{"y":2.45,"h":4.1,"nodeW":0.32,"nodeGap":0.14,"labelW":1.55,"minBandH":0.22,"maxNodes":12,"maxFlows":24},"treemap":{"y":2.45,"h":4.1,"gap":0.05,"labelMinH":0.34,"maxLeaves":16,"maxDepth":3},"boxplot":{"y":2.7,"h":3.7,"labelW":1.5,"groupGap":0.3,"boxMaxW":0.9,"whiskerCapW":0.34,"maxGroups":8},"network":{"y":2.4,"h":4.2,"nodeR":0.28,"nodeRMin":0.18,"labelMaxW":1.4,"maxNodes":18,"maxEdges":30},"marimekko":{"y":2.6,"h":3.75,"labelW":1.55,"colGap":0.06,"legendH":0.42,"maxCols":6,"maxSegs":4},"streamgraph":{"y":2.6,"h":3.75,"labelW":1.4,"bandMinH":0.12,"maxSeries":6}};
|
|
56
56
|
var PRESETS = {
|
|
57
57
|
'business-blue': { accent:'1A73E8', ink:'202124', body:'5F6368', faint:'80868B', bg:'FFFFFF', surface:'F8F9FA', line:'DADCE0', soft:'E8F0FE', onAccent:'FFFFFF', font:'Microsoft YaHei', fontDisplay:'Microsoft YaHei' },
|
|
58
58
|
'apple-mono': { accent:'1D1D1F', ink:'1D1D1F', body:'6E6E73', faint:'86868B', bg:'FFFFFF', surface:'F5F5F7', line:'D2D2D7', soft:'F5F5F7', onAccent:'FFFFFF', font:'Microsoft YaHei', fontDisplay:'Microsoft YaHei' },
|
|
@@ -993,7 +993,9 @@ function infoTableRows(sec) {
|
|
|
993
993
|
if (t === 'marimekko') {
|
|
994
994
|
var head = ['列', '总量' + u].concat((sec.legend || []).map(String));
|
|
995
995
|
return [head].concat((sec.cols || []).map(function (c, i) {
|
|
996
|
-
return [String(c[0]), String(c[1])].concat(((sec.cells || [])[i] || []).map(
|
|
996
|
+
return [String(c[0]), String(c[1])].concat((((sec.cells || [])[i] || []).map(function (el) {
|
|
997
|
+
return Array.isArray(el) ? String(el[0]) + ' ' + el[1] : String(el);
|
|
998
|
+
})));
|
|
997
999
|
}));
|
|
998
1000
|
}
|
|
999
1001
|
if (t === 'streamgraph') {
|
|
@@ -1141,7 +1143,11 @@ function infoApprox(sh, sec, S, y0, y1) {
|
|
|
1141
1143
|
var cx1 = MX;
|
|
1142
1144
|
cols.forEach(function (c, i) {
|
|
1143
1145
|
var cw = Math.max(0.2, (Number(c[1]) || 0) / total * availW);
|
|
1144
|
-
|
|
1146
|
+
/* 单元格兼容 [标签,数值] 对(与 B 通道 marimekkoSegs 同规则);非数值 → 0 */
|
|
1147
|
+
var shares = ((sec.cells || [])[i] || []).map(function (el) {
|
|
1148
|
+
var v = Number(Array.isArray(el) ? el[1] : el);
|
|
1149
|
+
return isFinite(v) ? v : 0;
|
|
1150
|
+
});
|
|
1145
1151
|
var sum = shares.reduce(function (a, b) { return a + b; }, 0) || 1;
|
|
1146
1152
|
var cy = P.y0;
|
|
1147
1153
|
shares.forEach(function (v, k) {
|
|
@@ -1291,13 +1297,20 @@ function slidesOf(model, S) {
|
|
|
1291
1297
|
});
|
|
1292
1298
|
}
|
|
1293
1299
|
|
|
1294
|
-
/*
|
|
1300
|
+
/* Exhibit 徽标文本:纯编号补 "Exhibit " 前缀(HTML 为 `Exhibit {no}` + CSS uppercase);
|
|
1301
|
+
调用方已带前缀的不重复(与 B 通道 exhibitBadge 同规则) */
|
|
1302
|
+
function exhibitBadge(no) {
|
|
1303
|
+
var t = String(no == null ? '' : no).trim();
|
|
1304
|
+
if (!t) return t;
|
|
1305
|
+
return /^exhibit[\s\-:]*/i.test(t) ? t.toUpperCase() : ('EXHIBIT ' + t.toUpperCase());
|
|
1306
|
+
}
|
|
1307
|
+
/* 章节页 */
|
|
1295
1308
|
(model.sections || []).forEach(function (sec) {
|
|
1296
1309
|
var type = sec.type || 'points';
|
|
1297
1310
|
var sh = [];
|
|
1298
1311
|
if (type !== 'quote') head(sh, sec.eyebrow, sec.title, sec.lead);
|
|
1299
1312
|
/* 非 exhibit 页型也可带 Exhibit 编号(帧头徽标;正文区下移让位,与 B 通道同规则) */
|
|
1300
|
-
var exBadge = (type !== 'exhibit' && sec.exhibitNo) ?
|
|
1313
|
+
var exBadge = (type !== 'exhibit' && sec.exhibitNo) ? exhibitBadge(sec.exhibitNo) : null;
|
|
1301
1314
|
var bodyY0 = sec.lead ? PT.common.bodyYWithLead : CONTENT_TOP;
|
|
1302
1315
|
var bodyY = exBadge ? bodyY0 + 0.42 : bodyY0;
|
|
1303
1316
|
if (exBadge) {
|
|
@@ -1308,7 +1321,7 @@ function slidesOf(model, S) {
|
|
|
1308
1321
|
var _F = PT.flagbar || { hdH: 0.26, rowH: 0.24, maxRows: 3, gap: 0.12 };
|
|
1309
1322
|
var flagH = flagItems.length
|
|
1310
1323
|
? (_F.hdH + Math.min(_F.maxRows, flagItems.length) * _F.rowH + 0.06) : 0;
|
|
1311
|
-
var bodyBottom = chartBottom(!!sec.soWhat, !!sec.footnote);
|
|
1324
|
+
var bodyBottom = chartBottom(!!sec.soWhat, !!(sec.footnote || sec.note));
|
|
1312
1325
|
var flagY = 0;
|
|
1313
1326
|
if (flagH) {
|
|
1314
1327
|
flagY = CONTENT_BOTTOM - flagH;
|
|
@@ -1342,9 +1355,14 @@ function slidesOf(model, S) {
|
|
|
1342
1355
|
sh.push(shape('rect', kdivX, K.heroY + 0.15, 0.025, 3.1, S.line));
|
|
1343
1356
|
var mRegK = regOf('kpi', 'metrics') || { x: kdivX + 0.35, y: K.metricY0, w: CW * (1 - K.dividerX) - 0.5 };
|
|
1344
1357
|
var kmets = sec.metrics || [];
|
|
1345
|
-
|
|
1358
|
+
/* 容量按最小允许行高判断,行高按全部指标自适应压缩 —— 禁静默丢数据(与 B 通道同规则) */
|
|
1359
|
+
var kAvailA = CONTENT_BOTTOM - mRegK.y;
|
|
1360
|
+
var kCap = Math.max(1, Math.floor(kAvailA / 0.42));
|
|
1346
1361
|
var kRows = Math.min(kmets.length, kCap);
|
|
1347
|
-
|
|
1362
|
+
if (kRows < kmets.length && typeof console !== 'undefined')
|
|
1363
|
+
console.warn('[pptx-export] KPI 页「' + (sec.title || '') + '」支撑指标 ' + kmets.length +
|
|
1364
|
+
' 个超出容量,仅渲染前 ' + kRows + ' 个 —— 建议拆页');
|
|
1365
|
+
var kRowH = fitRowH(kAvailA, kRows, K.metricRowH, 0.42);
|
|
1348
1366
|
var kTopH = Math.min(0.55, kRowH * 0.62);
|
|
1349
1367
|
kmets.slice(0, kRows).forEach(function (m, i) {
|
|
1350
1368
|
var ky = mRegK.y + i * kRowH;
|
|
@@ -1495,9 +1513,20 @@ function slidesOf(model, S) {
|
|
|
1495
1513
|
var lt = isRec(l) ? (l.t || '') : String(l[0] || '');
|
|
1496
1514
|
var ld = isRec(l) ? (l.d || '') : String(l[1] || '');
|
|
1497
1515
|
sh.push(shape('roundRect', x2, y2, w2, rowHP, acc ? S.soft : S.surface, { adj: 5000, line: acc ? undefined : S.line }));
|
|
1498
|
-
var lwP = Math.min(P.labelW, w2 - 0.44);
|
|
1499
|
-
|
|
1500
|
-
|
|
1516
|
+
var lwP = Math.min(P.labelW, (w2 - 0.44) * (P.labelFrac == null ? 0.32 : P.labelFrac));
|
|
1517
|
+
var descW = w2 - 0.44 - lwP;
|
|
1518
|
+
/* 窄层判定:说明列 < 1.2in,或标题在标题列内放不下单行 → 单框混排(与 B 通道同规则) */
|
|
1519
|
+
var narrowP = descW < 1.2 || (ld && estLines(lt, lwP, 13.5) > 1) || (!ld && estLines(lt, w2 - 0.44, 13.5) > 1);
|
|
1520
|
+
if (narrowP) {
|
|
1521
|
+
/* 顶层窄 → 标题上、说明下单框混排(HTML 窄屏 .pyr__lvl 即单列,与 B 通道同规则) */
|
|
1522
|
+
sh.push(txSp(x2 + 0.22, y2 + 0.03, w2 - 0.44, 0.30,
|
|
1523
|
+
[[{ t: lt, sz: 12.5, b: 1, col: acc ? S.accent : S.ink, font: S.font }]]));
|
|
1524
|
+
sh.push(txSp(x2 + 0.22, y2 + 0.33, w2 - 0.44, Math.max(0.2, rowHP - 0.36),
|
|
1525
|
+
[[{ t: ld, sz: 10.5, col: S.faint, font: S.font }]]));
|
|
1526
|
+
} else {
|
|
1527
|
+
sh.push(txSp(x2 + 0.22, y2, lwP, rowHP, [[{ t: lt, sz: 13.5, b: 1, col: acc ? S.accent : S.ink, font: S.font }]], { anchor: 'ctr' }));
|
|
1528
|
+
if (ld) sh.push(txSp(x2 + 0.22 + lwP, y2, descW, rowHP, [[{ t: ld, sz: 11, col: S.faint, font: S.font }]], { anchor: 'ctr' }));
|
|
1529
|
+
}
|
|
1501
1530
|
});
|
|
1502
1531
|
} else if (type === 'steps') {
|
|
1503
1532
|
var S2 = PT.steps, st = sec.steps || [], maxPer = S2.maxPerRow || 6, groups = sec.groups || [];
|
|
@@ -1846,12 +1875,12 @@ function slidesOf(model, S) {
|
|
|
1846
1875
|
var eReg = regOf('exhibit', 'primary')
|
|
1847
1876
|
|| { x: MX, y: PT.exhibit.chartY, w: CW, badgeY: PT.exhibit.badgeY };
|
|
1848
1877
|
if (sec.exhibitNo) {
|
|
1849
|
-
sh.push(txSp(MX, eReg.badgeY != null ? eReg.badgeY : PT.exhibit.badgeY, CW, 0.35, [[{ t:
|
|
1878
|
+
sh.push(txSp(MX, eReg.badgeY != null ? eReg.badgeY : PT.exhibit.badgeY, CW, 0.35, [[{ t: exhibitBadge(sec.exhibitNo), sz: 11.5, b: 1, col: S.accent, font: S.font, spc: 200 }]]));
|
|
1850
1879
|
}
|
|
1851
1880
|
var ec2 = sec.chart || {};
|
|
1852
1881
|
if (ec2.labels && ec2.values) {
|
|
1853
1882
|
var edcols2 = (ec2.colors || dataColors(model.style, model.theme));
|
|
1854
|
-
var hh2 = Math.max(1.2, chartBottom(!!sec.soWhat, !!sec.footnote) - eReg.y - 0.05);
|
|
1883
|
+
var hh2 = Math.max(1.2, chartBottom(!!sec.soWhat, !!(sec.footnote || sec.note)) - eReg.y - 0.05);
|
|
1855
1884
|
if (ec2.type === 'hbar') {
|
|
1856
1885
|
chartBlockShapes(sh, ec2, S, eReg.x, eReg.y, eReg.w, hh2, edcols2);
|
|
1857
1886
|
} else {
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
var PW = 13.333, PH = 7.5, MX = 0.6, CW = PW - 2 * MX, EMU = 914400;
|
|
181
181
|
var TS_BASE = {"coverTitle":44,"coverSub":18,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10};
|
|
182
182
|
var MTS = {"presentation":{"coverTitle":44,"coverSub":18,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10},"research":{"coverTitle":36,"coverSub":14,"h1":22,"h2":13.5,"lead":11.5,"body":10.5,"caption":9,"micro":8.5},"architecture":{"coverTitle":44,"coverSub":19,"h1":30,"h2":17,"lead":14,"body":13,"caption":11,"micro":10}};
|
|
183
|
-
var PT = {"layout":{"contentTop":2.35,"contentBottom":6.9,"contentBottomWithNote":6.4,"pageNumY":7.0},"common":{"headEyebrowY":0.48,"headTitleY":0.82,"headRuleY":1.72,"leadY":1.88,"bodyY":2.35,"bodyYWithLead":2.55,"pagerY":7.0},"cover":{"metaY":0.7,"titleY":2.4,"titleH":2.0,"subtitleY":4.5,"subtitleH":0.8},"closing":{"eyebrowY":0.7,"titleY":1.2,"titleH":1.2,"pointsY":3.0,"pointTitleH":0.6,"pointBodyH":1.2},"points":{"listY":2.5,"rowH":0.72,"rowHMin":0.5,"markSize":0.14,"metricY":4.7,"metricW":2.6,"metricValH":0.9,"metricCapY":5.6},"metrics":{"bandY":3.1,"cardH":2.3,"valY":3.45,"valH":1.1,"capY":4.55,"capH":0.7,"gap":0.3,"maxW":2.9},"table":{"y":2.5,"rowH":0.55,"rowHMin":0.32,"headRowH":0.5},"bar":{"hbarY0":2.6,"hbarY1":6.25,"chartX":0.6,"chartY":2.95,"chartW":1.2,"chartH":3.35,"noteY":6.55},"note":{"y":6.55,"h":0.4},"exhibit":{"badgeY":2.35,"chartY":2.75,"chartH":3.25,"soWhatY":6.05,"footnoteY":6.72},"twocol":{"colGap":0.5,"bodyH":3.6,"rowHMin":0.5},"hbar":{"labelW":1.9,"valW":1.0,"rowH":0.55,"barRatio":0.5},"diagram":{"layerBarW":1.35,"layerGap":0.15,"nodeGap":0.15,"bodyStartY":2.9,"maxLayerH":1.15,"nodeMaxW":2.2},"split":{"leftW":0.55,"rightW":0.415,"rightX":0.585,"pointsY":2.7,"rowH":0.78,"capY":2.55,"chartY":3.0,"chartH":3.7,"tableY":2.7,"tableRowH":0.5},"cards":{"startY":3.0,"gap":0.25,"maxH":2.0,"titleH":0.4},"timeline":{"labelY":2.95,"axisY":3.58,"dotY":3.51,"dotR":0.18,"nameY":3.9,"descY":4.45,"descH":1.2},"research":{"col3Gap":0.38,"matrixLabelW":1.5,"matrixCellH":0.85,"matrixY":2.2,"denseTableY":2.2,"denseRowH":0.42,"halfTableW":0.52,"halfChartX":0.57,"halfChartW":0.43},"arch":{"fullStartY":2.1,"fullEndY":6.9,"laneH":0.72,"laneHMin":0.5,"laneGap":0.14,"laneHeadW":1.3,"stepGap":0.12,"stepMaxW":1.9},"kpi":{"heroY":2.9,"heroW":0.52,"heroH":1.6,"dividerX":0.56,"metricY0":2.95,"metricRowH":0.85},"comparison":{"panelGap":0.4,"panelY":2.55,"panelH":3.4,"titleH":0.45,"rowH":0.62},"quote":{"markY":1.75,"textY":2.7,"textH":2.3,"authorY":5.25,"contextY":5.8},"donut":{"centerX":3.05,"centerY":4.6,"r":1.6,"holeR":0.95,"legendX":5.6,"legendRowH":0.55,"legendLabelW":3.4,"legendValW":1.3,"legendPctX":
|
|
183
|
+
var PT = {"layout":{"contentTop":2.35,"contentBottom":6.9,"contentBottomWithNote":6.4,"pageNumY":7.0},"common":{"headEyebrowY":0.48,"headTitleY":0.82,"headRuleY":1.72,"leadY":1.88,"bodyY":2.35,"bodyYWithLead":2.55,"pagerY":7.0},"cover":{"metaY":0.7,"titleY":2.4,"titleH":2.0,"subtitleY":4.5,"subtitleH":0.8},"closing":{"eyebrowY":0.7,"titleY":1.2,"titleH":1.2,"pointsY":3.0,"pointTitleH":0.6,"pointBodyH":1.2},"points":{"listY":2.5,"rowH":0.72,"rowHMin":0.5,"markSize":0.14,"metricY":4.7,"metricW":2.6,"metricValH":0.9,"metricCapY":5.6},"metrics":{"bandY":3.1,"cardH":2.3,"valY":3.45,"valH":1.1,"capY":4.55,"capH":0.7,"gap":0.3,"maxW":2.9},"table":{"y":2.5,"rowH":0.55,"rowHMin":0.32,"headRowH":0.5},"bar":{"hbarY0":2.6,"hbarY1":6.25,"chartX":0.6,"chartY":2.95,"chartW":1.2,"chartH":3.35,"noteY":6.55},"note":{"y":6.55,"h":0.4},"exhibit":{"badgeY":2.35,"chartY":2.75,"chartH":3.25,"soWhatY":6.05,"footnoteY":6.72},"twocol":{"colGap":0.5,"bodyH":3.6,"rowHMin":0.5},"hbar":{"labelW":1.9,"valW":1.0,"rowH":0.55,"barRatio":0.5},"diagram":{"layerBarW":1.35,"layerGap":0.15,"nodeGap":0.15,"bodyStartY":2.9,"maxLayerH":1.15,"nodeMaxW":2.2},"split":{"leftW":0.55,"rightW":0.415,"rightX":0.585,"pointsY":2.7,"rowH":0.78,"capY":2.55,"chartY":3.0,"chartH":3.7,"tableY":2.7,"tableRowH":0.5},"cards":{"startY":3.0,"gap":0.25,"maxH":2.0,"titleH":0.4},"timeline":{"labelY":2.95,"axisY":3.58,"dotY":3.51,"dotR":0.18,"nameY":3.9,"descY":4.45,"descH":1.2},"research":{"col3Gap":0.38,"matrixLabelW":1.5,"matrixCellH":0.85,"matrixY":2.2,"denseTableY":2.2,"denseRowH":0.42,"halfTableW":0.52,"halfChartX":0.57,"halfChartW":0.43},"arch":{"fullStartY":2.1,"fullEndY":6.9,"laneH":0.72,"laneHMin":0.5,"laneGap":0.14,"laneHeadW":1.3,"stepGap":0.12,"stepMaxW":1.9},"kpi":{"heroY":2.9,"heroW":0.52,"heroH":1.6,"dividerX":0.56,"metricY0":2.95,"metricRowH":0.85},"comparison":{"panelGap":0.4,"panelY":2.55,"panelH":3.4,"titleH":0.45,"rowH":0.62},"quote":{"markY":1.75,"textY":2.7,"textH":2.3,"authorY":5.25,"contextY":5.8},"donut":{"centerX":3.05,"centerY":4.6,"r":1.6,"holeR":0.95,"legendX":5.6,"legendRowH":0.55,"legendLabelW":3.4,"legendValW":1.3,"legendPctX":10.8,"legendPctW":1.3},"steps":{"y":3.05,"barH":1.35,"gap":0.12,"arrowW":0.3,"numH":0.3,"titleH":0.34,"pad":0.08,"maxPerRow":6},"heatmap":{"y":2.6,"labelW":1.7,"headH":0.42,"cellH":0.6,"cellGap":0.06,"legendW":1.6},"pyramid":{"y":2.35,"rowH":0.72,"gap":0.08,"minW":0.34,"labelW":3.2},"bullet":{"y":2.6,"rowH":0.8,"labelW":2.4,"valW":1.7,"barH":0.26},"image":{"y":2.3,"h":4.2,"halfW":0.56,"halfGap":0.06,"capY":6.6,"capH":0.3,"radius":0.09,"noteRowH":0.62,"gridGap":0.16,"gridCols":{"2":2,"3":3,"4":4,"6":3},"gridCapH":0.28,"compareGap":0.3,"compareTagH":0.26,"wallCellH":0.92,"wallGap":0.18,"wallMaxRows":2},"flagbar":{"hdH":0.26,"rowH":0.24,"maxRows":3,"gap":0.12},"sankey":{"y":2.45,"h":4.1,"nodeW":0.32,"nodeGap":0.14,"labelW":1.55,"minBandH":0.22,"maxNodes":12,"maxFlows":24},"treemap":{"y":2.45,"h":4.1,"gap":0.05,"labelMinH":0.34,"maxLeaves":16,"maxDepth":3},"boxplot":{"y":2.7,"h":3.7,"labelW":1.5,"groupGap":0.3,"boxMaxW":0.9,"whiskerCapW":0.34,"maxGroups":8},"network":{"y":2.4,"h":4.2,"nodeR":0.28,"nodeRMin":0.18,"labelMaxW":1.4,"maxNodes":18,"maxEdges":30},"marimekko":{"y":2.6,"h":3.75,"labelW":1.55,"colGap":0.06,"legendH":0.42,"maxCols":6,"maxSegs":4},"streamgraph":{"y":2.6,"h":3.75,"labelW":1.4,"bandMinH":0.12,"maxSeries":6}};
|
|
184
184
|
var PRESETS = {
|
|
185
185
|
'business-blue': { accent:'1A73E8', ink:'202124', body:'5F6368', faint:'80868B', bg:'FFFFFF', surface:'F8F9FA', line:'DADCE0', soft:'E8F0FE', onAccent:'FFFFFF', font:'Microsoft YaHei', fontDisplay:'Microsoft YaHei' },
|
|
186
186
|
'apple-mono': { accent:'1D1D1F', ink:'1D1D1F', body:'6E6E73', faint:'86868B', bg:'FFFFFF', surface:'F5F5F7', line:'D2D2D7', soft:'F5F5F7', onAccent:'FFFFFF', font:'Microsoft YaHei', fontDisplay:'Microsoft YaHei' },
|