@topmindspace/tms-skills 0.1.0 → 0.1.2

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.
Files changed (102) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +9 -3
  3. package/bin/tms-skills.js +200 -160
  4. package/package.json +12 -9
  5. package/top-ppt-html/README.md +162 -254
  6. package/top-ppt-html/SKILL.md +126 -111
  7. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html +3926 -3926
  8. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.model.json +167 -167
  9. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html +4325 -4325
  10. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.model.json +320 -320
  11. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html +5527 -5527
  12. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.model.json +913 -913
  13. package/top-ppt-html/assets/pptx-export.js +1944 -1944
  14. package/top-ppt-html/assets/style-gallery.html +589 -589
  15. package/top-ppt-html/assets/templates/architecture.html +3728 -3728
  16. package/top-ppt-html/assets/templates/engine.css +840 -840
  17. package/top-ppt-html/assets/templates/presentation.html +3738 -3738
  18. package/top-ppt-html/assets/templates/research.html +4017 -4017
  19. package/top-ppt-html/assets/templates/ui.js +520 -520
  20. package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
  21. package/top-ppt-html/assets/theme-overview-research.png +0 -0
  22. package/top-ppt-html/assets/theme-overview.png +0 -0
  23. package/top-ppt-html/evals/prompts.csv +15 -15
  24. package/top-ppt-html/evals/rubric.schema.json +25 -25
  25. package/top-ppt-html/evals/run_evals.py +220 -220
  26. package/top-ppt-html/evals/trace.example.json +16 -16
  27. package/top-ppt-html/package-lock.json +186 -0
  28. package/top-ppt-html/package.json +11 -11
  29. package/top-ppt-html/references/charts-basic.md +624 -624
  30. package/top-ppt-html/references/charts-discipline.md +110 -108
  31. package/top-ppt-html/references/charts-extended.md +482 -482
  32. package/top-ppt-html/references/charts.md +37 -28
  33. package/top-ppt-html/references/components-atoms.md +624 -624
  34. package/top-ppt-html/references/components.md +30 -30
  35. package/top-ppt-html/references/content-rules.md +510 -490
  36. package/top-ppt-html/references/default-surface.md +61 -0
  37. package/top-ppt-html/references/design-system.md +478 -478
  38. package/top-ppt-html/references/failure-modes.md +227 -214
  39. package/top-ppt-html/references/high-fidelity.md +127 -127
  40. package/top-ppt-html/references/icons.md +176 -397
  41. package/top-ppt-html/references/infographics-stats.md +308 -308
  42. package/top-ppt-html/references/infographics-structure.md +226 -226
  43. package/top-ppt-html/references/infographics.md +43 -43
  44. package/top-ppt-html/references/layout-grammar.md +325 -315
  45. package/top-ppt-html/references/layouts-architecture.md +108 -108
  46. package/top-ppt-html/references/layouts-combo.md +600 -600
  47. package/top-ppt-html/references/layouts-research.md +160 -160
  48. package/top-ppt-html/references/modes.md +259 -254
  49. package/top-ppt-html/references/outline-design.md +275 -275
  50. package/top-ppt-html/references/playbook.md +284 -266
  51. package/top-ppt-html/references/pptx-export.md +227 -209
  52. package/top-ppt-html/references/presentation-craft.md +69 -0
  53. package/top-ppt-html/references/styles.md +370 -370
  54. package/top-ppt-html/references/tech-design.md +138 -138
  55. package/top-ppt-html/scripts/audit_css.py +109 -109
  56. package/top-ppt-html/scripts/audit_docs.py +176 -176
  57. package/top-ppt-html/scripts/audit_skill.py +231 -220
  58. package/top-ppt-html/scripts/audit_styles.py +351 -351
  59. package/top-ppt-html/scripts/build_examples.py +55 -2276
  60. package/top-ppt-html/scripts/build_pptx.js +2386 -2380
  61. package/top-ppt-html/scripts/capture_theme_overview.js +79 -78
  62. package/top-ppt-html/scripts/checks_html.py +166 -127
  63. package/top-ppt-html/scripts/cross_verify.py +298 -294
  64. package/top-ppt-html/scripts/env_probe.py +158 -158
  65. package/top-ppt-html/scripts/extract_model.py +210 -210
  66. package/top-ppt-html/scripts/extract_snippet.py +374 -374
  67. package/top-ppt-html/scripts/gen_channel_a.js +214 -214
  68. package/top-ppt-html/scripts/layout-constants.json +111 -18
  69. package/top-ppt-html/scripts/lib_layout_regions.js +410 -412
  70. package/top-ppt-html/scripts/measure_height.py +178 -178
  71. package/top-ppt-html/scripts/negative_tests.py +433 -307
  72. package/top-ppt-html/scripts/package_skill.py +294 -291
  73. package/top-ppt-html/scripts/prepare_images.py +341 -341
  74. package/top-ppt-html/scripts/probe_image_export.py +187 -188
  75. package/top-ppt-html/scripts/quality_gate.py +309 -301
  76. package/top-ppt-html/scripts/recommend_layout.py +384 -0
  77. package/top-ppt-html/scripts/regression.py +308 -308
  78. package/top-ppt-html/scripts/render_compare.py +275 -275
  79. package/top-ppt-html/scripts/render_from_model.py +698 -698
  80. package/top-ppt-html/scripts/scaffold_report.py +1054 -1054
  81. package/top-ppt-html/scripts/section-file-map.json +104 -104
  82. package/top-ppt-html/scripts/smoke_pptx.sh +30 -0
  83. package/top-ppt-html/scripts/sync_runtime.py +659 -662
  84. package/top-ppt-html/scripts/validate_pptx.py +1579 -1510
  85. package/top-ppt-html/scripts/validate_report.py +1755 -1456
  86. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.html +0 -3926
  87. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.model.json +0 -168
  88. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.html +0 -4325
  89. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.model.json +0 -321
  90. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.html +0 -4325
  91. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.model.json +0 -321
  92. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.html +0 -5527
  93. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.model.json +0 -914
  94. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.html +0 -5527
  95. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.model.json +0 -914
  96. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.html +0 -5527
  97. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.model.json +0 -914
  98. package/top-ppt-html/assets/theme-overview-presentation.png +0 -0
  99. package/top-ppt-html/references/design-system-engine.md +0 -235
  100. package/top-ppt-html/references/industry-benchmark.md +0 -105
  101. package/top-ppt-html/references/reform-plan.md +0 -252
  102. package/top-ppt-html/scripts/layout_slots.json +0 -830
@@ -1,108 +1,110 @@
1
- # 图表全库 · charts-discipline.md
2
-
3
- > 由 `charts.md` 拆出(§编号保持不变,跨文件稳定引用)。
4
- > 取码:`python scripts/extract_snippet.py --file charts.md --section <编号>`
5
- > 或直接 `--file charts-discipline.md --section <编号>`。整读大文件视为违规。
6
-
7
- ## 64. 图表与"大信息量"的合理性
8
-
9
- > 数据量大不等于要一次画完。**图要能被 3 秒读懂**,超出承载就升级形态或拆页。
10
-
11
- | 情形 | 处理 |
12
- |------|------|
13
- | 系列 > 5(构成类) | 合并为"其他"(用 `f-c5`/中性),或改 treemap / marimekko |
14
- | 类别 > 8(排名类) | 取 Top 7 + "其余合并"行;全量放附录密表(同源同口径) |
15
- | 时间点 > 8(趋势类) | 改面积/折线(点不标数值),或按季度聚合 |
16
- | 二维 + 第三维 | 散点 → 气泡(半径 ∝ 第三维,面积平方映射) |
17
- | 行数 > 6(bullet/dumbbell/lollipop/progress) | 拆页或改密表(research) |
18
- | 极坐标维度 > 6 | 拆成两组雷达,或改热力矩阵(heatmap) |
19
- | 需要"读数值" | 数值标在数据本体旁(条末/点侧/环内),不强迫查图例换算 |
20
- | 需要"看结构" | 用色阶与位置,弱化数值(避免数字墙) |
21
-
22
- **四条硬底线**(校验器会拦):
23
- 1. 图表显示尺寸不得低于 `charts.minSize`(环形 ≥140px、雷达/玫瑰 ≥220/180px、柱折线 viewBox 高 ≥160)。
24
- 2. `data-chart` 类型必须在 `layout-constants.json` `charts.types` 登记。
25
- 3. 图表配色走 `.f-acc/.f-s*/.f-c*` 语义类——**不写死色值**,随主题/风格自动变色。
26
- 4. 一屏只一个视觉重心(图大就不要同时放巨号数字)。
27
-
28
- ---
29
-
30
- ---
31
-
32
- ## 66. 图表误用反例与多样性纪律(交付前自查)
33
-
34
- > 登记 36 种 ≠ 用对。**选型决策层(分析意图 → 图型 → 禁用条件)见 `references/playbook.md` §五**;本节是落地自查与校验器口径。
35
-
36
- ### 66-1 七种最常见的误用(出现即改判)
37
-
38
- | 误用 | 症状 | 改成 |
39
- |------|------|------|
40
- | 用 `bar` 表达占比 | 柱高加起来不是 100% | `donut` / `stackline` / `waffle` / `marimekko` |
41
- | 用 `donut` 表达 8 个类别 | 扇区挤成碎片 | 合并为"其他"(≤5 段)或改 `treemap` |
42
- | 用 `line` 表达类别对比(无时间轴) | x 轴是分类而非时间 | `hbar` / `lollipop` / `pareto` |
43
- | 用 `table` 表达趋势 | 读者要自己在数字里找方向 | `line` / `area` / `slope` |
44
- | 用均值型图表达分布 | 均值掩盖离散度 | `boxplot` / `dotplot` |
45
- | 同页放两张同型图 | 两个视觉重心互相打架 | 改 `split` / `halftable` 并让两图**编码不同维度** |
46
- | 多系列图用单色明度阶梯 | 三条线分不清谁是谁 | `f-c1~c5` / `s-c1~c5` 编码色板(见 `design-system.md` §9b) |
47
-
48
- ### 66-2 多样性纪律(校验器硬拦 · 阈值单源 `layout-constants.json` `charts.variety`)
49
-
50
- 1. **类型数下限**:全篇不同 `data-chart` 类型数 ≥ `min(minTypes[mode], ⌈图表页数 × 0.6⌉)`(research 上限 6 / presentation 4 / architecture 3)。
51
- 2. **不连续同型**:相邻图表页不得使用同一 `data-chart` 类型——读者视角就是"又一张一样的图"。
52
- 3. **组合版式比例**(research):含 ≥2 种承载类型(图表 / 表格 / 卡片 / 指标 / 图片 / 结构图)的内容页 ≥ **30%**——单件页是例外不是默认。组合方式见 `components.md` §46c 与 `references/playbook.md` §四。
53
- 4. **一屏一个视觉重心**:主件明显大于从件;两个并列大件必须拆页或走 `split` 明确左右分工。
54
-
55
- ### 66-3 编码色 ≠ 状态色(别混用)
56
-
57
- - **分类**(哪个系列 / 哪个域 / 哪个渠道)→ `f-c1~c5` / `s-c1~c5`:9 套风格各有自己的 5 色板,随主题自动切换。
58
- - **状态 / 评价**(好 vs 坏、达标 vs 未达标、涨 vs 跌)→ **只用强调色明度阶梯 + 中性色**,**不得用红绿**(`heatmap` / `bullet` / `bulletchart` / `candlestick` 的既有规则不变)。
59
- - 两者不可互换:用红绿表达"哪个域"会让读者误读为"好坏";用色阶表达"达标与否"会让读者分不清类别。
60
-
61
- ### 66-4 误用 → 改判对照代码(三组高频案例)
62
-
63
- **① 占比用了 `bar`(柱高相加无意义)→ 改 `donut`**
64
-
65
- ```html
66
- <!-- ✗ 误用:构成数据画成独立柱,读者无法感知"份额" -->
67
- <svg class="chart" data-chart="bar" viewBox="0 0 480 190">
68
- <rect x="40" y="30" width="60" height="120" class="f-c1"/> <!-- 工具 42% -->
69
- <rect x="160" y="69" width="60" height="81" class="f-c2"/> <!-- 资讯 31% -->
70
- <rect x="280" y="107" width="60" height="43" class="f-c3"/> <!-- 社交 27% -->
71
- </svg>
72
-
73
- <!-- ✓ 改判:donut,扇区 ≤5,数值标环心,口径写来源行(完整代码 --chart donut) -->
74
- <svg class="chart" data-chart="donut" viewBox="0 0 150 150" style="width:190px;margin-inline:auto">
75
- <circle cx="75" cy="75" r="54" class="f-none s-bds" stroke-width="15"/>
76
- <circle data-sweep data-circ="339.3" data-p="0.42" cx="75" cy="75" r="54" class="f-none s-acc"
77
- stroke-width="15" stroke-dasharray="142.5 196.8" transform="rotate(-90 75 75)"/>
78
- <text x="75" y="73" text-anchor="middle" class="f-txt" font-size="24">42%</text>
79
- <text x="75" y="93" text-anchor="middle" class="f-txt3" font-size="11">工具类</text>
80
- </svg>
81
- ```
82
-
83
- **② `donut` 硬塞 8 个类别(最小扇区 <8%)→ 合并"其他"或改 `treemap`**
84
-
85
- ```html
86
- <!-- ✗ 误用:8 段扇区,4 段 <8% 挤成碎片,图例比图还大 -->
87
- <!-- ✓ 改判:保留 Top 4,其余并入"其他"(f-c5/中性);叶 >16 才升级 treemap -->
88
- ```
89
- > 执行:`data-p` 取 0.42/0.31/0.14/0.08/0.05(其他),扇区 5 段封顶;"其他"明细沉附录密表(同源同口径)。
90
-
91
- **③ `line` 表达类别对比(x 轴不是时间)→ 改 `hbar`**
92
-
93
- ```html
94
- <!-- ✗ 误用:x 轴是部门名,折线暗示了不存在的时序连续性 -->
95
- <svg class="chart" data-chart="line" viewBox="0 0 480 190">
96
- <polyline points="40,120 160,60 280,90 400,40" class="s-acc" fill="none"/>
97
- <text x="40" y="180" class="f-txt3">研发</text> <!-- 分类被当成了时间 -->
98
- </svg>
99
-
100
- <!-- ✓ 改判:hbar——排名类比较,类别名在左、数值标条末(完整代码 --chart hbar) -->
101
- <svg class="chart" data-chart="hbar" viewBox="0 0 520 210">
102
- <rect x="90" y="20" width="360" height="26" class="f-acc"/> <!-- 研发 849 -->
103
- <rect x="90" y="70" width="330" height="26" class="f-c2"/> <!-- 供应 834 -->
104
- </svg>
105
- ```
106
-
107
- ---
108
-
1
+ # 图表全库 · charts-discipline.md
2
+
3
+ > 由 `charts.md` 拆出(§编号保持不变,跨文件稳定引用)。
4
+ > 取码:`python scripts/extract_snippet.py --file charts.md --section <编号>`
5
+ > 或直接 `--file charts-discipline.md --section <编号>`。整读大文件视为违规。
6
+
7
+ ## 64. 图表与"大信息量"的合理性
8
+
9
+ > 数据量大不等于要一次画完。**图要能被 3 秒读懂**,超出承载就升级形态或拆页。
10
+
11
+ | 情形 | 处理 |
12
+ |------|------|
13
+ | 系列 > 5(构成类) | 合并为"其他"(用 `f-c5`/中性),或改 treemap / marimekko |
14
+ | 类别 > 8(排名类) | 取 Top 7 + "其余合并"行;全量放附录密表(同源同口径) |
15
+ | 时间点 > 8(趋势类) | 改面积/折线(点不标数值),或按季度聚合 |
16
+ | 二维 + 第三维 | 散点 → 气泡(半径 ∝ 第三维,面积平方映射) |
17
+ | 行数 > 6(bullet/dumbbell/lollipop/progress) | 拆页或改密表(research) |
18
+ | 极坐标维度 > 6 | 拆成两组雷达,或改热力矩阵(heatmap) |
19
+ | 需要"读数值" | 数值标在数据本体旁(条末/点侧/环内),不强迫查图例换算 |
20
+ | 需要"看结构" | 用色阶与位置,弱化数值(避免数字墙) |
21
+
22
+ **四条硬底线**(校验器会拦):
23
+ 1. 图表显示尺寸不得低于 `charts.minSize`(环形 ≥140px、雷达/玫瑰 ≥220/180px、柱折线 viewBox 高 ≥160)。
24
+ 2. `data-chart` 类型必须在 `layout-constants.json` `charts.types` 登记。
25
+ 3. 图表配色走 `.f-acc/.f-s*/.f-c*` 语义类——**不写死色值**,随主题/风格自动变色。
26
+ 4. 一屏只一个视觉重心(图大就不要同时放巨号数字)。
27
+
28
+ ---
29
+
30
+ ---
31
+
32
+ ## 66. 图表误用反例与多样性纪律(交付前自查)
33
+
34
+ > 登记 36 种 ≠ 用对。**选型决策层(分析意图 → 图型 → 禁用条件)见 `references/playbook.md` §五**;本节是落地自查与校验器口径。
35
+
36
+ ### 66-1 七种最常见的误用(出现即改判)
37
+
38
+ | 误用 | 症状 | 改成 |
39
+ |------|------|------|
40
+ | 用 `bar` 表达占比 | 柱高加起来不是 100% | `donut` / `stackline` / `waffle` / `marimekko` |
41
+ | 用 `donut` 表达 8 个类别 | 扇区挤成碎片 | 合并为"其他"(≤5 段)或改 `treemap` |
42
+ | 用 `line` 表达类别对比(无时间轴) | x 轴是分类而非时间 | `hbar` / `lollipop` / `pareto` |
43
+ | 用 `table` 表达趋势 | 读者要自己在数字里找方向 | `line` / `area` / `slope` |
44
+ | 用均值型图表达分布 | 均值掩盖离散度 | `boxplot` / `dotplot` |
45
+ | 同页放两张同型图 | 两个视觉重心互相打架 | 改 `split` / `halftable` 并让两图**编码不同维度** |
46
+ | 多系列图用单色明度阶梯 | 三条线分不清谁是谁 | `f-c1~c5` / `s-c1~c5` 编码色板(见 `design-system.md` §9b) |
47
+
48
+ ### 66-2 多样性纪律(校验器硬拦 · 参数单源 `layout-constants.json` `charts.variety`)
49
+
50
+ > **preferCoreFirst**:优先用核图 8 拉开多样性;`charts-extended` / advanced **意图命中才加载**。advanced 一旦使用即计入类型数下限(不罚);**禁止**为过 `minTypes` 硬上冷门图。
51
+
52
+ 1. **类型数下限**:全篇不同 `data-chart` 类型数 ≥ `min(minTypes[mode], ⌈图表页数 × 0.6⌉)`(research 上限 6 / presentation 4 / architecture 3)。
53
+ 2. **不连续同型**:相邻图表页不得使用同一 `data-chart` 类型——读者视角就是"又一张一样的图"。
54
+ 3. **组合版式比例**(research):含 ≥2 种承载类型(图表 / 表格 / 卡片 / 指标 / 图片 / 结构图)的内容页 ≥ **30%**——单件页是例外不是默认。组合方式见 `components.md` §46c 与 `references/playbook.md` §四。
55
+ 4. **一屏一个视觉重心**:主件明显大于从件;两个并列大件必须拆页或走 `split` 明确左右分工。
56
+
57
+ ### 66-3 编码色 ≠ 状态色(别混用)
58
+
59
+ - **分类**(哪个系列 / 哪个域 / 哪个渠道)→ `f-c1~c5` / `s-c1~c5`:9 套风格各有自己的 5 色板,随主题自动切换。
60
+ - **状态 / 评价**(好 vs 坏、达标 vs 未达标、涨 vs 跌)→ **只用强调色明度阶梯 + 中性色**,**不得用红绿**(`heatmap` / `bullet` / `bulletchart` / `candlestick` 的既有规则不变)。
61
+ - 两者不可互换:用红绿表达"哪个域"会让读者误读为"好坏";用色阶表达"达标与否"会让读者分不清类别。
62
+
63
+ ### 66-4 误用 → 改判对照代码(三组高频案例)
64
+
65
+ **① 占比用了 `bar`(柱高相加无意义)→ 改 `donut`**
66
+
67
+ ```html
68
+ <!-- ✗ 误用:构成数据画成独立柱,读者无法感知"份额" -->
69
+ <svg class="chart" data-chart="bar" viewBox="0 0 480 190">
70
+ <rect x="40" y="30" width="60" height="120" class="f-c1"/> <!-- 工具 42% -->
71
+ <rect x="160" y="69" width="60" height="81" class="f-c2"/> <!-- 资讯 31% -->
72
+ <rect x="280" y="107" width="60" height="43" class="f-c3"/> <!-- 社交 27% -->
73
+ </svg>
74
+
75
+ <!-- ✓ 改判:donut,扇区 ≤5,数值标环心,口径写来源行(完整代码 --chart donut) -->
76
+ <svg class="chart" data-chart="donut" viewBox="0 0 150 150" style="width:190px;margin-inline:auto">
77
+ <circle cx="75" cy="75" r="54" class="f-none s-bds" stroke-width="15"/>
78
+ <circle data-sweep data-circ="339.3" data-p="0.42" cx="75" cy="75" r="54" class="f-none s-acc"
79
+ stroke-width="15" stroke-dasharray="142.5 196.8" transform="rotate(-90 75 75)"/>
80
+ <text x="75" y="73" text-anchor="middle" class="f-txt" font-size="24">42%</text>
81
+ <text x="75" y="93" text-anchor="middle" class="f-txt3" font-size="11">工具类</text>
82
+ </svg>
83
+ ```
84
+
85
+ **② `donut` 硬塞 8 个类别(最小扇区 <8%)→ 合并"其他"或改 `treemap`**
86
+
87
+ ```html
88
+ <!-- ✗ 误用:8 段扇区,4 段 <8% 挤成碎片,图例比图还大 -->
89
+ <!-- ✓ 改判:保留 Top 4,其余并入"其他"(f-c5/中性);叶 >16 才升级 treemap -->
90
+ ```
91
+ > 执行:`data-p` 取 0.42/0.31/0.14/0.08/0.05(其他),扇区 5 段封顶;"其他"明细沉附录密表(同源同口径)。
92
+
93
+ **③ `line` 表达类别对比(x 轴不是时间)→ 改 `hbar`**
94
+
95
+ ```html
96
+ <!-- ✗ 误用:x 轴是部门名,折线暗示了不存在的时序连续性 -->
97
+ <svg class="chart" data-chart="line" viewBox="0 0 480 190">
98
+ <polyline points="40,120 160,60 280,90 400,40" class="s-acc" fill="none"/>
99
+ <text x="40" y="180" class="f-txt3">研发</text> <!-- 分类被当成了时间 -->
100
+ </svg>
101
+
102
+ <!-- ✓ 改判:hbar——排名类比较,类别名在左、数值标条末(完整代码 --chart hbar) -->
103
+ <svg class="chart" data-chart="hbar" viewBox="0 0 520 210">
104
+ <rect x="90" y="20" width="360" height="26" class="f-acc"/> <!-- 研发 849 -->
105
+ <rect x="90" y="70" width="330" height="26" class="f-c2"/> <!-- 供应 834 -->
106
+ </svg>
107
+ ```
108
+
109
+ ---
110
+