@taloswork/ose-shared 0.1.11 → 0.1.13

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 (159) hide show
  1. package/package.json +3 -3
  2. package/skills/document/SKILL.md +135 -219
  3. package/skills/document/art-directions/base.css +27 -2
  4. package/skills/document/art-directions/cinematic-depth.css +3 -1
  5. package/skills/document/art-directions/collage-paper.css +5 -1
  6. package/skills/document/art-directions/editorial-cut.css +5 -1
  7. package/skills/document/art-directions/geometric-pop.css +6 -0
  8. package/skills/document/art-directions/gradient-mesh.css +5 -1
  9. package/skills/document/art-directions/illustrated-doodle.css +5 -0
  10. package/skills/document/art-directions/luxury-ornament.css +4 -1
  11. package/skills/document/art-directions/maximalist-blocks.css +6 -0
  12. package/skills/document/art-directions/technical-grid.css +4 -0
  13. package/skills/document/assets/fonts/fonts.json +2 -2
  14. package/skills/document/assets/pdf-fonts/NotoSansSC-PDF-Bold.ttf +0 -0
  15. package/skills/document/assets/pdf-fonts/NotoSansSC-PDF-Regular.ttf +0 -0
  16. package/skills/document/assets/pdf-fonts/OFL.txt +93 -0
  17. package/skills/document/assets/pdf-fonts/README.md +35 -0
  18. package/skills/document/assets/tessdata/LICENSE-Apache-2.0.txt +202 -0
  19. package/skills/document/assets/tessdata/README.md +21 -0
  20. package/skills/document/assets/tessdata/chi_sim.traineddata.gz +0 -0
  21. package/skills/document/assets/tessdata/eng.traineddata.gz +0 -0
  22. package/skills/document/bin/deck-build.cjs +12563 -83
  23. package/skills/document/bin/deck-chart.cjs +771 -0
  24. package/skills/document/bin/deck-plan.cjs +12414 -0
  25. package/skills/document/bin/deck-qa.cjs +1075 -266
  26. package/skills/document/bin/deck-scenario.cjs +1363 -0
  27. package/skills/document/bin/deck-styles.cjs +1604 -0
  28. package/skills/document/bin/doc-convert.cjs +308 -292
  29. package/skills/document/bin/doc-fill.cjs +73264 -192
  30. package/skills/document/bin/doc-gen.cjs +2491 -312
  31. package/skills/document/bin/doc-run.cjs +162 -24
  32. package/skills/document/bin/doc-scan.cjs +13 -0
  33. package/skills/document/bin/doc-text.cjs +13 -0
  34. package/skills/document/bin/doc-validate.cjs +838 -68
  35. package/skills/document/bin/doc-xml.cjs +9 -5
  36. package/skills/document/bin/docx-annotate.cjs +95 -19
  37. package/skills/document/bin/docx-defaults.cjs +9907 -0
  38. package/skills/document/bin/fontkit.cjs +1 -0
  39. package/skills/document/bin/html2pptx.cjs +36622 -31394
  40. package/skills/document/bin/ocr-worker.cjs +1 -0
  41. package/skills/document/bin/ocr.cjs +131 -40
  42. package/skills/document/bin/pdf-form.cjs +682 -177
  43. package/skills/document/bin/pdf-images.cjs +13 -0
  44. package/skills/document/bin/pdf-ops.cjs +642 -199
  45. package/skills/document/bin/pdf-render.cjs +19 -3
  46. package/skills/document/bin/pdf-tables.cjs +13 -0
  47. package/skills/document/bin/pptx-clone.cjs +3 -3
  48. package/skills/document/bin/pptx-notes.cjs +10038 -0
  49. package/skills/document/bin/pptx-slide.cjs +3 -3
  50. package/skills/document/bin/pptx-tokenize.cjs +19 -4
  51. package/skills/document/bin/template-skin.cjs +10910 -0
  52. package/skills/document/bin/xlsx-query.cjs +192 -61
  53. package/skills/document/bin-reference.md +61 -33
  54. package/skills/document/catalog.json +33 -32
  55. package/skills/document/content-pipeline.md +179 -257
  56. package/skills/document/deck-design.md +378 -638
  57. package/skills/document/generated-visuals.md +99 -0
  58. package/skills/document/layouts/MAINTAINERS.md +33 -0
  59. package/skills/document/layouts/README.md +49 -36
  60. package/skills/document/layouts/big-stat.tpl +1 -1
  61. package/skills/document/layouts/capacity.json +1 -0
  62. package/skills/document/layouts/cards-3.tpl +1 -1
  63. package/skills/document/layouts/chart-full.tpl +1 -1
  64. package/skills/document/layouts/chart-kpi.tpl +1 -1
  65. package/skills/document/layouts/comparison.tpl +1 -1
  66. package/skills/document/layouts/data-table.tpl +1 -1
  67. package/skills/document/layouts/funnel.tpl +1 -1
  68. package/skills/document/layouts/gantt.tpl +1 -1
  69. package/skills/document/layouts/hub-flow.tpl +4 -0
  70. package/skills/document/layouts/icon-row.tpl +1 -1
  71. package/skills/document/layouts/image-grid.tpl +1 -1
  72. package/skills/document/layouts/matrix-2x2.tpl +1 -1
  73. package/skills/document/layouts/mock-qa.tpl +4 -0
  74. package/skills/document/layouts/profiles.json +2 -2
  75. package/skills/document/layouts/pyramid.tpl +1 -1
  76. package/skills/document/layouts/radar.tpl +1 -1
  77. package/skills/document/layouts/ring-progress.tpl +1 -1
  78. package/skills/document/layouts/slots.json +1 -1
  79. package/skills/document/layouts/steps-vertical.tpl +1 -1
  80. package/skills/document/layouts/steps.tpl +1 -1
  81. package/skills/document/layouts/three-kpi.tpl +1 -1
  82. package/skills/document/layouts/timeline.tpl +1 -1
  83. package/skills/document/layouts/toc-panel.tpl +2 -2
  84. package/skills/document/layouts/two-kpi.tpl +2 -2
  85. package/skills/document/layouts/versus.tpl +1 -1
  86. package/skills/document/motion/README.md +3 -2
  87. package/skills/document/office.md +3 -3
  88. package/skills/document/packs/README.md +1 -1
  89. package/skills/document/packs/board-brief/backdrop.html +2 -0
  90. package/skills/document/packs/board-brief/pack.css +2 -1
  91. package/skills/document/packs/mckinsey-photo/backdrop.html +2 -0
  92. package/skills/document/packs/mckinsey-photo/pack.css +2 -1
  93. package/skills/document/packs/press-room/backdrop.html +2 -0
  94. package/skills/document/packs/press-room/pack.css +2 -1
  95. package/skills/document/packs/prismatic-3d/backdrop.html +2 -0
  96. package/skills/document/packs/prismatic-3d/pack.css +4 -1
  97. package/skills/document/pdf.md +60 -43
  98. package/skills/document/rewrite.md +257 -309
  99. package/skills/document/scenarios.json +1307 -0
  100. package/skills/document/scenarios.schema.json +104 -0
  101. package/skills/document/styles/README.md +15 -25
  102. package/skills/document/styles/_backdrops/rimlight.html +3 -2
  103. package/skills/document/styles/_contract-defaults.css +31 -2
  104. package/skills/document/styles/_samples/_groups/biz-premium.webp +0 -0
  105. package/skills/document/styles/_samples/mckinsey.webp +0 -0
  106. package/skills/document/styles/anthropic/skin.css +6 -3
  107. package/skills/document/styles/apple/skin.css +4 -3
  108. package/skills/document/styles/bistro-warm/backdrop.html +2 -0
  109. package/skills/document/styles/bistro-warm/skin.css +4 -1
  110. package/skills/document/styles/black-gold/skin.css +6 -5
  111. package/skills/document/styles/bold-clash/backdrop.html +2 -0
  112. package/skills/document/styles/bold-clash/skin.css +2 -1
  113. package/skills/document/styles/branding/skin.css +4 -4
  114. package/skills/document/styles/campus-teal/backdrop.html +2 -0
  115. package/skills/document/styles/campus-teal/skin.css +2 -1
  116. package/skills/document/styles/cinereel/skin.css +7 -3
  117. package/skills/document/styles/clinic-care/backdrop.html +2 -0
  118. package/skills/document/styles/clinic-care/skin.css +2 -1
  119. package/skills/document/styles/cool/skin.css +6 -5
  120. package/skills/document/styles/dark-glass/backdrop.html +2 -0
  121. package/skills/document/styles/dark-glass/skin.css +2 -1
  122. package/skills/document/styles/gov-brief/backdrop.html +2 -0
  123. package/skills/document/styles/gov-brief/skin.css +2 -1
  124. package/skills/document/styles/grid-tech/backdrop.html +2 -0
  125. package/skills/document/styles/grid-tech/skin.css +2 -1
  126. package/skills/document/styles/hand-drawn/skin.css +3 -3
  127. package/skills/document/styles/ivory-gold/skin.css +7 -6
  128. package/skills/document/styles/legal-slate/backdrop.html +2 -0
  129. package/skills/document/styles/legal-slate/skin.css +2 -1
  130. package/skills/document/styles/magazine-ink/skin.css +4 -3
  131. package/skills/document/styles/mckinsey/backdrop.html +7 -5
  132. package/skills/document/styles/mckinsey/skin.css +2 -1
  133. package/skills/document/styles/memphis/backdrop.html +2 -0
  134. package/skills/document/styles/memphis/skin.css +2 -1
  135. package/skills/document/styles/mono/skin.css +6 -2
  136. package/skills/document/styles/neon-cyber/backdrop.html +2 -0
  137. package/skills/document/styles/neon-cyber/skin.css +2 -1
  138. package/skills/document/styles/olive-gold/skin.css +7 -6
  139. package/skills/document/styles/organic-earth/backdrop.html +2 -0
  140. package/skills/document/styles/organic-earth/skin.css +2 -1
  141. package/skills/document/styles/pastel-saas/backdrop.html +2 -0
  142. package/skills/document/styles/pastel-saas/skin.css +2 -1
  143. package/skills/document/styles/portfolio-noir/backdrop.html +2 -0
  144. package/skills/document/styles/portfolio-noir/skin.css +2 -1
  145. package/skills/document/styles/retro-press/backdrop.html +2 -0
  146. package/skills/document/styles/retro-press/skin.css +2 -1
  147. package/skills/document/styles/sport-arena/backdrop.html +2 -0
  148. package/skills/document/styles/sport-arena/skin.css +4 -1
  149. package/skills/document/styles/swiss-grid/skin.css +10 -5
  150. package/skills/document/styles/wedding-blush/backdrop.html +2 -0
  151. package/skills/document/styles/wedding-blush/skin.css +4 -1
  152. package/skills/document/theme-system.md +85 -77
  153. package/skills/document/themes/README.md +7 -5
  154. package/skills/document/vision.md +8 -5
  155. package/skills/document/xlsx.md +15 -25
  156. package/skills/grill-me/SKILL.md +6 -0
  157. package/skills/grill-me/agents/openai.yaml +5 -0
  158. package/skills/grilling/SKILL.md +28 -0
  159. package/skills/grilling/agents/openai.yaml +3 -0
@@ -0,0 +1,1604 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ // apps/admin/data/skills.lib/document/bin-src/deck-styles.mjs
5
+ var import_node_fs2 = require("node:fs");
6
+ var import_node_path2 = require("node:path");
7
+
8
+ // packages/core/dist/document/deck-scenarios.data.js
9
+ var SCENARIO_MATRIX = {
10
+ "scenarios": [
11
+ {
12
+ "id": "pitch",
13
+ "subtitle": "\u878D\u8D44/\u8DEF\u6F14",
14
+ "tone": [
15
+ "\u81EA\u4FE1",
16
+ "\u6709\u5F20\u529B",
17
+ "\u6545\u4E8B\u9A71\u52A8"
18
+ ],
19
+ "density": [
20
+ "\u4E2D",
21
+ "\u5927\u6570\u5B57+\u4E00\u53E5\u89E3\u91CA"
22
+ ],
23
+ "requiredSections": [
24
+ {
25
+ "terms": [
26
+ "Problem",
27
+ "\u95EE\u9898"
28
+ ],
29
+ "content": "\u8C01\u75DB\u3001\u591A\u75DB\uFF1A\u91CF\u5316\u7684\u75DB\u70B9\u8BC1\u636E\uFF08\u65F6\u95F4/\u91D1\u94B1\u635F\u5931\uFF09\uFF1B\u5B9C \u5927\u6570\u5B57"
30
+ },
31
+ {
32
+ "terms": [
33
+ "Solution",
34
+ "\u89E3\u51B3\u65B9\u6848"
35
+ ],
36
+ "content": "\u600E\u4E48\u89E3\u51B3\u3001\u4E3A\u4EC0\u4E48\u73B0\u5728\u80FD\u89E3\u51B3\uFF1B\u5B9C \u524D\u540E\u5BF9\u6BD4\u6216\u6D41\u7A0B"
37
+ },
38
+ {
39
+ "terms": [
40
+ "Market",
41
+ "\u5E02\u573A"
42
+ ],
43
+ "content": "TAM/SAM/SOM \u4E0E\u589E\u901F\uFF0C\u6CE8\u660E\u6765\u6E90\u5E74\u4EFD\uFF1B\u5B9C \u67F1\u72B6\u56FE"
44
+ },
45
+ {
46
+ "terms": [
47
+ "Product",
48
+ "Traction",
49
+ "\u4EA7\u54C1",
50
+ "\u8FDB\u5C55"
51
+ ],
52
+ "content": "\u4EA7\u54C1\u5F62\u6001 + \u589E\u957F\u8BC1\u636E\uFF08\u5BA2\u6237\u6570\u3001\u6536\u5165\u3001\u7559\u5B58\uFF09\uFF1B\u5B9C \u589E\u957F\u6298\u7EBF"
53
+ },
54
+ {
55
+ "terms": [
56
+ "Team",
57
+ "\u56E2\u961F"
58
+ ],
59
+ "content": "\u6838\u5FC3\u6210\u5458\u4E0E\u8FD9\u4EF6\u4E8B\u76F8\u5173\u7684\u7ECF\u5386\uFF1B\u5B9C \u5E76\u5217\u5361\u7247"
60
+ },
61
+ {
62
+ "terms": [
63
+ "Ask",
64
+ "\u878D\u8D44\u9700\u6C42"
65
+ ],
66
+ "key": true,
67
+ "content": "\u878D\u8D44\u91D1\u989D\u3001\u8D44\u91D1\u7528\u9014\u5360\u6BD4\u3001\u5230\u4E0B\u4E00\u8F6E\u7684\u91CC\u7A0B\u7891\uFF1B\u5B9C \u997C\u56FE\u6216\u62C6\u5206"
68
+ }
69
+ ],
70
+ "narrative": "SCQA / \u95EE\u9898-\u65B9\u6848",
71
+ "pages": {
72
+ "min": 10,
73
+ "max": 12
74
+ },
75
+ "researchFocus": [
76
+ "\u5E02\u573A\u89C4\u6A21\u4E0E\u589E\u901F(TAM/SAM)",
77
+ "\u53EF\u6BD4\u516C\u53F8\u878D\u8D44\u4E0E\u4F30\u503C",
78
+ "\u540C\u7C7B\u4EA7\u54C1\u4E0E\u5DEE\u5F02",
79
+ "\u76EE\u6807\u5BA2\u7FA4\u75DB\u70B9\u8BC1\u636E"
80
+ ],
81
+ "motion": {
82
+ "delivery": "presented",
83
+ "keywords": [
84
+ "pitch",
85
+ "\u8DEF\u6F14"
86
+ ]
87
+ }
88
+ },
89
+ {
90
+ "id": "\u5185\u5BA1",
91
+ "tone": [
92
+ "\u5BA2\u89C2",
93
+ "\u76F4\u63A5",
94
+ "\u7ED3\u8BBA\u5148\u884C"
95
+ ],
96
+ "density": [
97
+ "\u7565\u5BC6(\u5BB9\u660E\u7EC6/\u6570\u636E)"
98
+ ],
99
+ "requiredSections": [
100
+ {
101
+ "terms": [
102
+ "\u7ED3\u8BBA",
103
+ "\u8FDB\u5C55"
104
+ ],
105
+ "content": "\u4E00\u53E5\u8BDD\u7ED3\u8BBA\uFF1A\u8FBE\u6210/\u672A\u8FBE\u6210\u4E0E\u504F\u5DEE\u5E45\u5EA6"
106
+ },
107
+ {
108
+ "terms": [
109
+ "\u5173\u952E\u6307\u6807"
110
+ ],
111
+ "content": "\u6838\u5FC3\u6307\u6807 \u5B9E\u9645 vs \u76EE\u6807 vs \u4E0A\u671F\uFF0C\u53E3\u5F84\u4E00\u81F4\uFF1B\u5B9C \u8868\u683C\u6216\u5BF9\u6BD4\u67F1"
112
+ },
113
+ {
114
+ "terms": [
115
+ "\u95EE\u9898\u4E0E\u98CE\u9669"
116
+ ],
117
+ "content": "\u95EE\u9898\u3001\u5F71\u54CD\u7A0B\u5EA6\u3001\u8D23\u4EFB\u65B9\uFF1B\u5B9C \u5217\u8868\u6216\u77E9\u9635"
118
+ },
119
+ {
120
+ "terms": [
121
+ "\u4E0B\u4E00\u6B65",
122
+ "\u51B3\u7B56\u9879"
123
+ ],
124
+ "content": "\u9700\u62CD\u677F\u7684\u51B3\u7B56\u9879\u3001\u8D1F\u8D23\u4EBA\u3001\u622A\u6B62\u65F6\u95F4"
125
+ }
126
+ ],
127
+ "narrative": "\u7ED3\u8BBA\u5148\u884C",
128
+ "pages": {
129
+ "min": 6,
130
+ "max": 8
131
+ },
132
+ "researchFocus": [
133
+ "\u884C\u4E1A\u5BF9\u6807\u6307\u6807",
134
+ "\u53E3\u5F84\u5B9A\u4E49",
135
+ "\u5916\u90E8\u98CE\u9669\u4E8B\u4EF6"
136
+ ],
137
+ "motion": {
138
+ "delivery": "read",
139
+ "keywords": [
140
+ "\u5185\u5BA1"
141
+ ]
142
+ }
143
+ },
144
+ {
145
+ "id": "\u9500\u552E",
146
+ "tone": [
147
+ "\u5229\u76CA\u9A71\u52A8",
148
+ "\u5BA2\u6237\u4E2D\u5FC3",
149
+ "\u8BF4\u670D"
150
+ ],
151
+ "density": [
152
+ "\u4E2D",
153
+ "\u91CD\u4EF7\u503C\u4E0E\u4F50\u8BC1"
154
+ ],
155
+ "requiredSections": [
156
+ {
157
+ "terms": [
158
+ "\u75DB\u70B9"
159
+ ],
160
+ "content": "\u5BA2\u6237\u7684\u4E1A\u52A1\u75DB\u70B9\u4E0E\u4EE3\u4EF7\uFF0C\u7528\u5BA2\u6237\u884C\u4E1A\u7684\u6570\u636E"
161
+ },
162
+ {
163
+ "terms": [
164
+ "\u65B9\u6848",
165
+ "\u4EF7\u503C\u4E3B\u5F20"
166
+ ],
167
+ "content": "\u65B9\u6848\u5982\u4F55\u89E3\u51B3\u3001\u5BF9\u5BA2\u6237\u7684\u4EF7\u503C\u4E3B\u5F20\u4E00\u53E5\u8BDD"
168
+ },
169
+ {
170
+ "terms": [
171
+ "\u5DEE\u5F02\u5316"
172
+ ],
173
+ "content": "\u4E0E\u66FF\u4EE3\u65B9\u6848\u9010\u9879\u5BF9\u6BD4\u7684\u5DEE\u5F02\u70B9\uFF1B\u5B9C \u5BF9\u6BD4\u8868"
174
+ },
175
+ {
176
+ "terms": [
177
+ "\u5BA2\u6237\u6848\u4F8B"
178
+ ],
179
+ "content": "\u540C\u884C\u4E1A\u5BA2\u6237\u3001\u505A\u4E86\u4EC0\u4E48\u3001\u91CF\u5316\u7ED3\u679C"
180
+ },
181
+ {
182
+ "terms": [
183
+ "ROI",
184
+ "\u5B9A\u4EF7"
185
+ ],
186
+ "content": "\u6295\u5165\u3001\u56DE\u62A5\u3001\u56DE\u672C\u5468\u671F\u6216\u5B9A\u4EF7\u65B9\u6848\uFF1B\u5B9C \u5927\u6570\u5B57"
187
+ },
188
+ {
189
+ "terms": [
190
+ "CTA",
191
+ "\u884C\u52A8\u53F7\u53EC"
192
+ ],
193
+ "key": true,
194
+ "content": "\u4E0B\u4E00\u6B65\u5177\u4F53\u52A8\u4F5C\uFF1A\u8BD5\u7528\u3001\u4F1A\u8BAE\u3001\u7B7E\u7EA6\u65F6\u95F4"
195
+ }
196
+ ],
197
+ "narrative": "\u95EE\u9898-\u65B9\u6848",
198
+ "pages": {
199
+ "min": 8,
200
+ "max": 12
201
+ },
202
+ "researchFocus": [
203
+ "\u5BA2\u6237\u6240\u5728\u884C\u4E1A\u75DB\u70B9",
204
+ "\u7ADE\u54C1\u65B9\u6848\u4E0E\u5DEE\u5F02",
205
+ "\u540C\u884C\u843D\u5730\u6848\u4F8B\u4E0E ROI",
206
+ "\u516C\u5F00\u5B9A\u4EF7"
207
+ ],
208
+ "motion": {
209
+ "delivery": "presented",
210
+ "keywords": [
211
+ "\u9500\u552E",
212
+ "sales"
213
+ ]
214
+ }
215
+ },
216
+ {
217
+ "id": "\u8BB2\u5EA7",
218
+ "subtitle": "\u5B66\u672F",
219
+ "tone": [
220
+ "\u8BB2\u89E3",
221
+ "\u5FAA\u5E8F\u6E10\u8FDB"
222
+ ],
223
+ "density": [
224
+ "\u4E2D",
225
+ "\u6982\u5FF5+\u4F8B\u5B50"
226
+ ],
227
+ "requiredSections": [
228
+ {
229
+ "terms": [
230
+ "\u5B66\u4E60\u76EE\u6807"
231
+ ],
232
+ "content": "\u542C\u5B8C\u80FD\u505A\u5230\u7684 3 \u4EF6\u4E8B"
233
+ },
234
+ {
235
+ "terms": [
236
+ "\u80CC\u666F",
237
+ "\u57FA\u7840"
238
+ ],
239
+ "content": "\u7406\u89E3\u6838\u5FC3\u6982\u5FF5\u5FC5\u987B\u5148\u77E5\u9053\u7684\u524D\u7F6E\u77E5\u8BC6"
240
+ },
241
+ {
242
+ "terms": [
243
+ "\u6838\u5FC3\u6982\u5FF5"
244
+ ],
245
+ "content": "\u5B9A\u4E49\u3001\u5173\u952E\u6027\u8D28\uFF0C\u914D\u4E00\u4E2A\u76F4\u89C2\u4F8B\u5B50"
246
+ },
247
+ {
248
+ "terms": [
249
+ "\u6848\u4F8B",
250
+ "\u63A8\u5BFC"
251
+ ],
252
+ "content": "\u5B8C\u6574\u7684\u6848\u4F8B\u6216\u63A8\u5BFC\u6B65\u9AA4\uFF1B\u5B9C \u6B65\u9AA4"
253
+ },
254
+ {
255
+ "terms": [
256
+ "\u5C0F\u7ED3"
257
+ ],
258
+ "content": "\u8981\u70B9\u56DE\u987E + \u5EF6\u4F38\u9605\u8BFB"
259
+ }
260
+ ],
261
+ "narrative": "\u7531\u6D45\u5165\u6DF1",
262
+ "pages": {
263
+ "min": 10,
264
+ "max": 15
265
+ },
266
+ "researchFocus": [
267
+ "\u6982\u5FF5\u5B9A\u4E49\u4E0E\u6743\u5A01\u6559\u6750",
268
+ "\u5173\u952E\u8BBA\u6587\u4E0E\u7EFC\u8FF0",
269
+ "\u7ECF\u5178\u6848\u4F8B/\u63A8\u5BFC",
270
+ "\u5E38\u89C1\u8BEF\u89E3"
271
+ ],
272
+ "motion": {
273
+ "delivery": "presented",
274
+ "keywords": [
275
+ "\u8BB2\u5EA7",
276
+ "lecture"
277
+ ]
278
+ }
279
+ },
280
+ {
281
+ "id": "\u53D1\u5E03\u4F1A",
282
+ "subtitle": "keynote",
283
+ "tone": [
284
+ "\u60C5\u7EEA\u5316",
285
+ "\u620F\u5267\u6027",
286
+ "\u63ED\u6653\u611F"
287
+ ],
288
+ "density": [
289
+ "\u6781\u7A00\u758F",
290
+ "\u4E00\u9875\u4E00\u4FE1\u606F",
291
+ "\u8D85\u5927\u89C6\u89C9"
292
+ ],
293
+ "densityEmphasis": true,
294
+ "requiredSections": [
295
+ {
296
+ "terms": [
297
+ "\u94A9\u5B50"
298
+ ],
299
+ "content": "\u4E00\u53E5\u8BDD\u6216\u4E00\u4E2A\u753B\u9762\u6293\u4F4F\u6CE8\u610F\u529B\uFF1B\u5B9C \u5927\u5B57\u6216\u5927\u56FE"
300
+ },
301
+ {
302
+ "terms": [
303
+ "\u80CC\u666F",
304
+ "\u75DB\u70B9"
305
+ ],
306
+ "content": "\u7528\u6237\u4ECA\u5929\u7684\u56F0\u6270\uFF0C\u4E00\u4E2A\u5177\u4F53\u573A\u666F"
307
+ },
308
+ {
309
+ "terms": [
310
+ "\u4EA7\u54C1\u63ED\u6653"
311
+ ],
312
+ "content": "\u4EA7\u54C1\u540D\u4E0E\u4E00\u53E5\u8BDD\u5B9A\u4F4D\uFF0C\u5355\u72EC\u4E00\u9875\uFF1B\u5B9C \u5927\u56FE"
313
+ },
314
+ {
315
+ "terms": [
316
+ "\u4EAE\u70B9\u7279\u6027"
317
+ ],
318
+ "content": "3 \u4E2A\u4EE5\u5185\u7684\u6838\u5FC3\u5356\u70B9\uFF0C\u5404\u914D\u4E00\u4E2A\u53EF\u611F\u77E5\u7684\u6570\u5B57"
319
+ },
320
+ {
321
+ "terms": [
322
+ "Demo",
323
+ "\u6F14\u793A"
324
+ ],
325
+ "content": "\u771F\u5B9E\u4F7F\u7528\u6D41\u7A0B\u6F14\u793A\uFF1B\u5B9C \u6B65\u9AA4\u6216\u622A\u56FE"
326
+ },
327
+ {
328
+ "terms": [
329
+ "\u4EF7\u683C\u4E0A\u5E02"
330
+ ],
331
+ "content": "\u4EF7\u683C\u3001\u7248\u672C\u3001\u4E0A\u5E02\u65F6\u95F4\u4E0E\u6E20\u9053"
332
+ },
333
+ {
334
+ "terms": [
335
+ "\u884C\u52A8\u53F7\u53EC"
336
+ ],
337
+ "key": true,
338
+ "content": "\u73B0\u5728\u5C31\u80FD\u505A\u7684\u4E8B\uFF1A\u9884\u8BA2\u3001\u4E0B\u8F7D\u3001\u4F53\u9A8C"
339
+ }
340
+ ],
341
+ "narrative": "\u60C5\u7EEA\u7EBF",
342
+ "pages": {
343
+ "min": 15,
344
+ "max": 20
345
+ },
346
+ "researchFocus": [
347
+ "\u540C\u7C7B\u4EA7\u54C1\u75DB\u70B9\u4E0E\u5DEE\u8BC4",
348
+ "\u7ADE\u54C1\u53C2\u6570\u5BF9\u6BD4",
349
+ "\u7ADE\u54C1\u5B9A\u4EF7\u4E0E\u4E0A\u5E02\u8282\u594F",
350
+ "\u53EF\u5F15\u7528\u7684\u7528\u6237\u573A\u666F"
351
+ ],
352
+ "motion": {
353
+ "delivery": "presented",
354
+ "keywords": [
355
+ "\u53D1\u5E03\u4F1A",
356
+ "launch",
357
+ "keynote"
358
+ ]
359
+ }
360
+ },
361
+ {
362
+ "id": "\u57F9\u8BAD",
363
+ "tone": [
364
+ "\u6559\u5B66",
365
+ "\u6E05\u6670",
366
+ "\u53EF\u64CD\u4F5C"
367
+ ],
368
+ "density": [
369
+ "\u4E2D",
370
+ "\u5206\u6A21\u5757"
371
+ ],
372
+ "requiredSections": [
373
+ {
374
+ "terms": [
375
+ "Objectives",
376
+ "\u5B66\u4E60\u76EE\u6807"
377
+ ],
378
+ "content": "\u5B66\u5B8C\u80FD\u505A\u5230\u4EC0\u4E48\uFF0C\u53EF\u68C0\u9A8C"
379
+ },
380
+ {
381
+ "terms": [
382
+ "Module",
383
+ "\u8BFE\u7A0B\u6A21\u5757"
384
+ ],
385
+ "content": "\u6A21\u5757\u5212\u5206\u4E0E\u6BCF\u5757\u8981\u70B9\uFF1B\u5B9C \u5206\u5C42\u6216\u6B65\u9AA4"
386
+ },
387
+ {
388
+ "terms": [
389
+ "\u7EC3\u4E60",
390
+ "\u793A\u4F8B",
391
+ "Exercise"
392
+ ],
393
+ "content": "\u53EF\u7167\u505A\u7684\u793A\u4F8B\u6216\u7EC3\u4E60\u9898"
394
+ },
395
+ {
396
+ "terms": [
397
+ "Quiz",
398
+ "\u968F\u5802\u6D4B\u9A8C"
399
+ ],
400
+ "content": "\u68C0\u9A8C\u7406\u89E3\u7684\u9898\u76EE\u4E0E\u7B54\u6848"
401
+ },
402
+ {
403
+ "terms": [
404
+ "Summary",
405
+ "\u5C0F\u7ED3"
406
+ ],
407
+ "content": "\u8981\u70B9\u56DE\u987E\u4E0E\u8BFE\u540E\u884C\u52A8"
408
+ }
409
+ ],
410
+ "narrative": "\u7531\u6D45\u5165\u6DF1",
411
+ "pages": {
412
+ "min": 8,
413
+ "max": 15
414
+ },
415
+ "researchFocus": [
416
+ "\u6743\u5A01\u6559\u7A0B\u4E0E\u6807\u51C6",
417
+ "\u5206\u6B65\u64CD\u4F5C\u793A\u4F8B",
418
+ "\u5E38\u89C1\u9519\u8BEF\u4E0E\u6392\u9519",
419
+ "\u7EC3\u4E60\u9898\u4E0E\u8003\u70B9"
420
+ ],
421
+ "motion": {
422
+ "delivery": "read",
423
+ "keywords": [
424
+ "\u57F9\u8BAD",
425
+ "training"
426
+ ]
427
+ }
428
+ },
429
+ {
430
+ "id": "\u5927\u4F1A",
431
+ "subtitle": "talk",
432
+ "tone": [
433
+ "\u89C2\u70B9\u9C9C\u660E",
434
+ "\u542F\u53D1",
435
+ "\u8BB0\u5FC6\u70B9"
436
+ ],
437
+ "density": [
438
+ "\u7A00\u758F",
439
+ "\u4E00\u56FE\u4E00\u53E5"
440
+ ],
441
+ "requiredSections": [
442
+ {
443
+ "terms": [
444
+ "\u5F00\u573A\u94A9\u5B50"
445
+ ],
446
+ "content": "\u53CD\u5E38\u8BC6\u7684\u95EE\u9898\u3001\u6570\u636E\u6216\u6545\u4E8B\u5F00\u573A"
447
+ },
448
+ {
449
+ "terms": [
450
+ "\u6838\u5FC3\u8BBA\u70B9"
451
+ ],
452
+ "content": "\u4E00\u53E5\u8BDD\u89C2\u70B9\uFF0C\u5168\u573A\u53EA\u6B64\u4E00\u4E2A"
453
+ },
454
+ {
455
+ "terms": [
456
+ "\u8BBA\u636E",
457
+ "\u6848\u4F8B"
458
+ ],
459
+ "content": "\u652F\u6491\u89C2\u70B9\u7684\u6848\u4F8B\u4E0E\u6570\u636E\uFF0C\u6CE8\u660E\u51FA\u5904"
460
+ },
461
+ {
462
+ "terms": [
463
+ "\u53CD\u76F4\u89C9\u6D1E\u5BDF"
464
+ ],
465
+ "content": "\u4E0E\u542C\u4F17\u76F4\u89C9\u76F8\u53CD\u7684\u53D1\u73B0\u53CA\u5176\u539F\u56E0"
466
+ },
467
+ {
468
+ "terms": [
469
+ "\u6536\u675F\u8BB0\u5FC6\u70B9"
470
+ ],
471
+ "content": "\u4E00\u53E5\u53EF\u88AB\u590D\u8FF0\u7684\u8BDD\u6536\u5C3E"
472
+ }
473
+ ],
474
+ "narrative": "\u60C5\u7EEA\u7EBF / SCQA",
475
+ "pages": {
476
+ "min": 15,
477
+ "max": 20
478
+ },
479
+ "researchFocus": [
480
+ "\u53CD\u76F4\u89C9\u6570\u636E\u4E0E\u7814\u7A76",
481
+ "\u4E89\u8BAE\u89C2\u70B9\u4E0E\u53CD\u4F8B",
482
+ "\u4E00\u624B\u6848\u4F8B/\u5931\u8D25\u6559\u8BAD",
483
+ "\u53EF\u5F15\u7528\u91D1\u53E5"
484
+ ],
485
+ "motion": {
486
+ "delivery": "presented",
487
+ "keywords": [
488
+ "\u5927\u4F1A",
489
+ "conference",
490
+ "talk"
491
+ ]
492
+ }
493
+ },
494
+ {
495
+ "id": "\u5DE5\u4F5C\u6C47\u62A5",
496
+ "subtitle": "\u5468\u6708\u5B63\u62A5",
497
+ "aliases": [
498
+ "\u5468\u62A5",
499
+ "\u6708\u62A5",
500
+ "\u5B63\u62A5"
501
+ ],
502
+ "tone": [
503
+ "\u5BA2\u89C2",
504
+ "\u7B80\u6D01",
505
+ "\u7ED3\u8BBA\u5148\u884C"
506
+ ],
507
+ "density": [
508
+ "\u4E2D"
509
+ ],
510
+ "requiredSections": [
511
+ {
512
+ "terms": [
513
+ "\u6982\u8981"
514
+ ],
515
+ "content": "\u672C\u671F\u7ED3\u8BBA\u4E00\u53E5\u8BDD + 2\u20133 \u4E2A\u5173\u952E\u6570"
516
+ },
517
+ {
518
+ "terms": [
519
+ "\u8FDB\u5C55",
520
+ "\u6210\u679C"
521
+ ],
522
+ "content": "\u5B8C\u6210\u4E8B\u9879\u4E0E\u4EA7\u51FA\uFF0C\u5BF9\u7167\u8BA1\u5212"
523
+ },
524
+ {
525
+ "terms": [
526
+ "\u6570\u636E\u6307\u6807"
527
+ ],
528
+ "content": "\u5173\u952E\u6307\u6807\u73AF\u6BD4/\u540C\u6BD4\uFF0C\u53E3\u5F84\u4E00\u81F4\uFF1B\u5B9C \u6298\u7EBF\u6216\u67F1\u72B6"
529
+ },
530
+ {
531
+ "terms": [
532
+ "\u95EE\u9898"
533
+ ],
534
+ "content": "\u672A\u8FBE\u6210\u9879\u3001\u539F\u56E0\u3001\u9700\u8981\u7684\u652F\u6301"
535
+ },
536
+ {
537
+ "terms": [
538
+ "\u4E0B\u4E00\u6B65\u8BA1\u5212"
539
+ ],
540
+ "content": "\u4E0B\u671F\u76EE\u6807\u3001\u5173\u952E\u52A8\u4F5C\u3001\u65F6\u95F4\u70B9"
541
+ }
542
+ ],
543
+ "narrative": "\u7ED3\u8BBA\u5148\u884C",
544
+ "pages": {
545
+ "min": 5,
546
+ "max": 10
547
+ },
548
+ "researchFocus": [
549
+ "\u884C\u4E1A\u57FA\u51C6\u4E0E\u540C\u884C\u6570\u636E",
550
+ "\u6307\u6807\u53E3\u5F84\u5B9A\u4E49",
551
+ "\u5916\u90E8\u73AF\u5883\u53D8\u5316"
552
+ ],
553
+ "motion": {
554
+ "delivery": "read",
555
+ "keywords": [
556
+ "\u6C47\u62A5",
557
+ "\u5468\u62A5",
558
+ "\u6708\u62A5"
559
+ ]
560
+ }
561
+ },
562
+ {
563
+ "id": "\u8FF0\u804C/\u664B\u5347",
564
+ "tone": [
565
+ "\u81EA\u4FE1",
566
+ "\u6709\u636E",
567
+ "\u4E2A\u4EBA\u89C6\u89D2"
568
+ ],
569
+ "density": [
570
+ "\u4E2D"
571
+ ],
572
+ "requiredSections": [
573
+ {
574
+ "terms": [
575
+ "\u804C\u8D23\u6982\u8FF0"
576
+ ],
577
+ "content": "\u5C97\u4F4D\u804C\u8D23\u4E0E\u8D1F\u8D23\u8303\u56F4"
578
+ },
579
+ {
580
+ "terms": [
581
+ "\u5173\u952E\u6210\u679C",
582
+ "STAR"
583
+ ],
584
+ "content": "2\u20133 \u4E2A\u4EE3\u8868\u6027\u6210\u679C\uFF0C\u6309\u60C5\u5883-\u4EFB\u52A1-\u884C\u52A8-\u7ED3\u679C\u5199"
585
+ },
586
+ {
587
+ "terms": [
588
+ "\u6570\u636E\u4F50\u8BC1"
589
+ ],
590
+ "content": "\u6210\u679C\u7684\u91CF\u5316\u6570\u636E\u4E0E\u5BF9\u6BD4\u57FA\u51C6"
591
+ },
592
+ {
593
+ "terms": [
594
+ "\u80FD\u529B\u6210\u957F"
595
+ ],
596
+ "content": "\u76F8\u6BD4\u4E0A\u671F\u65B0\u589E\u7684\u80FD\u529B\uFF0C\u914D\u4E8B\u4F8B"
597
+ },
598
+ {
599
+ "terms": [
600
+ "\u89C4\u5212"
601
+ ],
602
+ "content": "\u4E0B\u4E00\u9636\u6BB5\u76EE\u6807\u4E0E\u8BA1\u5212"
603
+ }
604
+ ],
605
+ "narrative": "\u7ED3\u8BBA\u5148\u884C",
606
+ "pages": {
607
+ "min": 8,
608
+ "max": 12
609
+ },
610
+ "researchFocus": [
611
+ "\u540C\u5C97\u4F4D\u80FD\u529B\u6A21\u578B",
612
+ "\u884C\u4E1A\u5BF9\u6807\u6570\u636E",
613
+ "\u8BE5\u9886\u57DF\u516C\u8BA4\u7684\u6210\u679C\u8861\u91CF\u53E3\u5F84"
614
+ ],
615
+ "motion": {
616
+ "delivery": "read",
617
+ "keywords": [
618
+ "\u8FF0\u804C"
619
+ ]
620
+ }
621
+ },
622
+ {
623
+ "id": "\u9879\u76EE\u7ACB\u9879/\u8BC4\u5BA1",
624
+ "aliases": [
625
+ "\u7ACB\u9879"
626
+ ],
627
+ "tone": [
628
+ "\u4E25\u8C28",
629
+ "\u8BF4\u670D"
630
+ ],
631
+ "density": [
632
+ "\u4E2D\u504F\u5BC6"
633
+ ],
634
+ "requiredSections": [
635
+ {
636
+ "terms": [
637
+ "\u80CC\u666F",
638
+ "\u75DB\u70B9"
639
+ ],
640
+ "content": "\u4E3A\u4EC0\u4E48\u8981\u505A\uFF1A\u73B0\u72B6\u95EE\u9898\u4E0E\u4E0D\u505A\u7684\u4EE3\u4EF7"
641
+ },
642
+ {
643
+ "terms": [
644
+ "\u76EE\u6807"
645
+ ],
646
+ "content": "\u53EF\u8861\u91CF\u7684\u76EE\u6807\u4E0E\u9A8C\u6536\u6807\u51C6"
647
+ },
648
+ {
649
+ "terms": [
650
+ "\u65B9\u6848"
651
+ ],
652
+ "content": "\u65B9\u6848\u8981\u70B9\u4E0E\u5907\u9009\u65B9\u6848\u5BF9\u6BD4\uFF1B\u5B9C \u5BF9\u6BD4\u8868"
653
+ },
654
+ {
655
+ "terms": [
656
+ "\u8BA1\u5212",
657
+ "\u91CC\u7A0B\u7891"
658
+ ],
659
+ "content": "\u9636\u6BB5\u5212\u5206\u3001\u91CC\u7A0B\u7891\u3001\u65F6\u95F4\uFF1B\u5B9C \u65F6\u95F4\u8F74"
660
+ },
661
+ {
662
+ "terms": [
663
+ "\u8D44\u6E90",
664
+ "\u9884\u7B97"
665
+ ],
666
+ "content": "\u4EBA\u529B\u3001\u9884\u7B97\u3001\u5916\u90E8\u4F9D\u8D56\uFF1B\u5B9C \u8868\u683C"
667
+ },
668
+ {
669
+ "terms": [
670
+ "\u98CE\u9669"
671
+ ],
672
+ "content": "\u4E3B\u8981\u98CE\u9669\u3001\u6982\u7387\u5F71\u54CD\u3001\u5E94\u5BF9\u63AA\u65BD\uFF1B\u5B9C \u77E9\u9635"
673
+ }
674
+ ],
675
+ "narrative": "\u95EE\u9898-\u65B9\u6848",
676
+ "pages": {
677
+ "min": 8,
678
+ "max": 14
679
+ },
680
+ "researchFocus": [
681
+ "\u540C\u7C7B\u9879\u76EE\u6295\u5165\u4EA7\u51FA",
682
+ "\u6280\u672F\u65B9\u6848\u4E0E\u9009\u578B\u5BF9\u6BD4",
683
+ "\u5408\u89C4\u4E0E\u98CE\u9669\u6848\u4F8B",
684
+ "\u4EBA\u529B/\u9884\u7B97\u57FA\u51C6"
685
+ ],
686
+ "motion": {
687
+ "delivery": "read",
688
+ "keywords": [
689
+ "\u8BC4\u5BA1",
690
+ "review"
691
+ ]
692
+ }
693
+ },
694
+ {
695
+ "id": "\u5E74\u5EA6\u603B\u7ED3/\u5E74\u4F1A",
696
+ "aliases": [
697
+ "\u5E74\u7EC8\u603B\u7ED3"
698
+ ],
699
+ "tone": [
700
+ "\u632F\u594B",
701
+ "\u4EEA\u5F0F\u611F"
702
+ ],
703
+ "density": [
704
+ "\u7A00\u758F",
705
+ "\u5927\u89C6\u89C9"
706
+ ],
707
+ "requiredSections": [
708
+ {
709
+ "terms": [
710
+ "\u56DE\u987E",
711
+ "\u9AD8\u5149"
712
+ ],
713
+ "content": "\u5E74\u5EA6\u9AD8\u5149\u65F6\u523B\uFF0C\u914D\u753B\u9762"
714
+ },
715
+ {
716
+ "terms": [
717
+ "\u5173\u952E\u6570\u636E"
718
+ ],
719
+ "content": "\u5168\u5E74\u6838\u5FC3\u6570\u636E\u4E0E\u589E\u957F\uFF1B\u5B9C \u5927\u6570\u5B57"
720
+ },
721
+ {
722
+ "terms": [
723
+ "\u91CC\u7A0B\u7891"
724
+ ],
725
+ "content": "\u6309\u65F6\u95F4\u6392\u5217\u7684\u5173\u952E\u8282\u70B9\uFF1B\u5B9C \u65F6\u95F4\u8F74"
726
+ },
727
+ {
728
+ "terms": [
729
+ "\u56E2\u961F"
730
+ ],
731
+ "content": "\u81F4\u8C22\u7684\u56E2\u961F\u4E0E\u4EBA\u7269\uFF0C\u914D\u6545\u4E8B"
732
+ },
733
+ {
734
+ "terms": [
735
+ "\u6765\u5E74\u5C55\u671B"
736
+ ],
737
+ "content": "\u6765\u5E74\u76EE\u6807\u4E0E\u65B9\u5411"
738
+ }
739
+ ],
740
+ "narrative": "\u60C5\u7EEA\u7EBF",
741
+ "pages": {
742
+ "min": 12,
743
+ "max": 20
744
+ },
745
+ "researchFocus": [
746
+ "\u884C\u4E1A\u5E74\u5EA6\u5927\u4E8B",
747
+ "\u540C\u884C\u91CC\u7A0B\u7891\u5BF9\u7167",
748
+ "\u6765\u5E74\u8D8B\u52BF\u9884\u6D4B"
749
+ ]
750
+ },
751
+ {
752
+ "id": "\u5546\u4E1A\u8BA1\u5212\u4E66",
753
+ "subtitle": "BP",
754
+ "tone": [
755
+ "\u81EA\u4FE1",
756
+ "\u5168\u9762",
757
+ "\u6570\u636E\u652F\u6491"
758
+ ],
759
+ "density": [
760
+ "\u4E2D\u504F\u5BC6"
761
+ ],
762
+ "requiredSections": [
763
+ {
764
+ "terms": [
765
+ "\u95EE\u9898"
766
+ ],
767
+ "content": "\u76EE\u6807\u7528\u6237\u7684\u75DB\u70B9\u4E0E\u89C4\u6A21"
768
+ },
769
+ {
770
+ "terms": [
771
+ "\u65B9\u6848"
772
+ ],
773
+ "content": "\u4EA7\u54C1\u5982\u4F55\u89E3\u51B3\uFF0C\u4E3A\u4EC0\u4E48\u662F\u73B0\u5728"
774
+ },
775
+ {
776
+ "terms": [
777
+ "\u5E02\u573A"
778
+ ],
779
+ "content": "\u5E02\u573A\u89C4\u6A21\u5206\u5C42\u4E0E\u589E\u901F\uFF0C\u6CE8\u660E\u6765\u6E90\uFF1B\u5B9C \u67F1\u72B6\u56FE"
780
+ },
781
+ {
782
+ "terms": [
783
+ "\u4EA7\u54C1"
784
+ ],
785
+ "content": "\u4EA7\u54C1\u5F62\u6001\u3001\u6838\u5FC3\u529F\u80FD\u3001\u5F53\u524D\u8FDB\u5C55"
786
+ },
787
+ {
788
+ "terms": [
789
+ "\u5546\u4E1A\u6A21\u5F0F"
790
+ ],
791
+ "content": "\u600E\u4E48\u8D5A\u94B1\uFF1A\u6536\u5165\u6765\u6E90\u3001\u5B9A\u4EF7\u3001\u5355\u4F4D\u7ECF\u6D4E"
792
+ },
793
+ {
794
+ "terms": [
795
+ "\u7ADE\u4E89"
796
+ ],
797
+ "content": "\u7ADE\u54C1\u683C\u5C40\u4E0E\u5DEE\u5F02\u5316\uFF1B\u5B9C \u77E9\u9635\u6216\u5BF9\u6BD4\u8868"
798
+ },
799
+ {
800
+ "terms": [
801
+ "\u8D22\u52A1\u9884\u6D4B"
802
+ ],
803
+ "content": "\u672A\u6765 3\u20135 \u5E74\u6536\u5165\u3001\u6210\u672C\u3001\u5229\u6DA6\u9884\u6D4B\u4E0E\u5173\u952E\u5047\u8BBE\uFF1B\u5B9C \u8868\u683C"
804
+ },
805
+ {
806
+ "terms": [
807
+ "\u56E2\u961F"
808
+ ],
809
+ "content": "\u6838\u5FC3\u56E2\u961F\u4E0E\u76F8\u5173\u7ECF\u5386"
810
+ },
811
+ {
812
+ "terms": [
813
+ "\u878D\u8D44"
814
+ ],
815
+ "key": true,
816
+ "content": "\u878D\u8D44\u91D1\u989D\u3001\u51FA\u8BA9\u6BD4\u4F8B\u3001\u8D44\u91D1\u7528\u9014\u5360\u6BD4"
817
+ }
818
+ ],
819
+ "narrative": "SCQA",
820
+ "pages": {
821
+ "min": 15,
822
+ "max": 25
823
+ },
824
+ "researchFocus": [
825
+ "\u5E02\u573A\u89C4\u6A21\u4E0E\u5206\u5C42",
826
+ "\u7ADE\u4E89\u683C\u5C40\u4E0E\u4EFD\u989D",
827
+ "\u5546\u4E1A\u6A21\u5F0F\u4E0E\u5355\u4F4D\u7ECF\u6D4E",
828
+ "\u53EF\u6BD4\u516C\u53F8\u8D22\u52A1\u4E0E\u878D\u8D44"
829
+ ]
830
+ },
831
+ {
832
+ "id": "\u6295\u6807",
833
+ "subtitle": "\u62DB\u6295\u6807",
834
+ "tone": [
835
+ "\u6B63\u5F0F",
836
+ "\u8981\u7D20\u9F50\u5168",
837
+ "\u5F97\u5206\u5BFC\u5411"
838
+ ],
839
+ "density": [
840
+ "\u5BC6"
841
+ ],
842
+ "requiredSections": [
843
+ {
844
+ "terms": [
845
+ "\u9700\u6C42\u7406\u89E3"
846
+ ],
847
+ "content": "\u5BF9\u62DB\u6807\u9700\u6C42\u4E0E\u8BC4\u5206\u70B9\u7684\u9010\u6761\u56DE\u5E94"
848
+ },
849
+ {
850
+ "terms": [
851
+ "\u65B9\u6848"
852
+ ],
853
+ "content": "\u6280\u672F\u65B9\u6848\u8981\u70B9\uFF0C\u5BF9\u5E94\u9700\u6C42\u6761\u76EE"
854
+ },
855
+ {
856
+ "terms": [
857
+ "\u56E2\u961F",
858
+ "\u8D44\u8D28"
859
+ ],
860
+ "content": "\u9879\u76EE\u56E2\u961F\u914D\u7F6E\u4E0E\u8D44\u8D28\u8BC1\u4E66"
861
+ },
862
+ {
863
+ "terms": [
864
+ "\u6848\u4F8B\u4E1A\u7EE9"
865
+ ],
866
+ "content": "\u540C\u7C7B\u9879\u76EE\u4E1A\u7EE9\u3001\u5BA2\u6237\u3001\u89C4\u6A21"
867
+ },
868
+ {
869
+ "terms": [
870
+ "\u5B9E\u65BD\u8BA1\u5212"
871
+ ],
872
+ "content": "\u9636\u6BB5\u3001\u91CC\u7A0B\u7891\u3001\u5DE5\u671F\uFF1B\u5B9C \u65F6\u95F4\u8F74"
873
+ },
874
+ {
875
+ "terms": [
876
+ "\u62A5\u4EF7"
877
+ ],
878
+ "key": true,
879
+ "content": "\u62A5\u4EF7\u603B\u989D\u4E0E\u5206\u9879\u660E\u7EC6\u3001\u4ED8\u6B3E\u65B9\u5F0F\uFF1B\u5B9C \u8868\u683C"
880
+ },
881
+ {
882
+ "terms": [
883
+ "\u552E\u540E"
884
+ ],
885
+ "content": "\u552E\u540E\u670D\u52A1\u5185\u5BB9\u3001\u54CD\u5E94\u65F6\u95F4\u3001\u8D28\u4FDD\u671F"
886
+ }
887
+ ],
888
+ "narrative": "\u7ED3\u8BBA\u5148\u884C",
889
+ "pages": {
890
+ "min": 15,
891
+ "max": 30
892
+ },
893
+ "researchFocus": [
894
+ "\u62DB\u6807\u65B9\u80CC\u666F\u4E0E\u65E2\u5F80\u91C7\u8D2D",
895
+ "\u8BC4\u5206\u529E\u6CD5\u4E0E\u8D44\u8D28\u8981\u6C42",
896
+ "\u540C\u7C7B\u4E2D\u6807\u516C\u544A\u4E0E\u62A5\u4EF7\u533A\u95F4",
897
+ "\u6807\u6746\u6848\u4F8B"
898
+ ]
899
+ },
900
+ {
901
+ "id": "\u653F\u52A1/\u515A\u653F\u6C47\u62A5",
902
+ "aliases": [
903
+ "\u653F\u52A1\u6C47\u62A5"
904
+ ],
905
+ "tone": [
906
+ "\u4E25\u8083",
907
+ "\u89C4\u8303"
908
+ ],
909
+ "density": [
910
+ "\u4E2D\u504F\u5BC6"
911
+ ],
912
+ "requiredSections": [
913
+ {
914
+ "terms": [
915
+ "\u80CC\u666F",
916
+ "\u4F9D\u636E"
917
+ ],
918
+ "content": "\u653F\u7B56\u4F9D\u636E\u4E0E\u4E0A\u7EA7\u90E8\u7F72\uFF0C\u5F15\u539F\u6587\u51FA\u5904"
919
+ },
920
+ {
921
+ "terms": [
922
+ "\u5DE5\u4F5C\u4E3E\u63AA"
923
+ ],
924
+ "content": "\u91C7\u53D6\u7684\u4E3B\u8981\u63AA\u65BD\uFF0C\u5206\u6761\u5217\u51FA"
925
+ },
926
+ {
927
+ "terms": [
928
+ "\u6210\u6548\u6570\u636E"
929
+ ],
930
+ "content": "\u91CF\u5316\u6210\u6548\u4E0E\u540C\u6BD4\uFF0C\u6CE8\u660E\u53E3\u5F84\uFF1B\u5B9C \u8868\u683C"
931
+ },
932
+ {
933
+ "terms": [
934
+ "\u5B58\u5728\u95EE\u9898"
935
+ ],
936
+ "content": "\u5B58\u5728\u7684\u95EE\u9898\u4E0E\u539F\u56E0\u5206\u6790"
937
+ },
938
+ {
939
+ "terms": [
940
+ "\u4E0B\u6B65\u90E8\u7F72"
941
+ ],
942
+ "content": "\u4E0B\u4E00\u6B65\u5DE5\u4F5C\u5B89\u6392\u4E0E\u65F6\u95F4\u8282\u70B9"
943
+ }
944
+ ],
945
+ "narrative": "\u7ED3\u8BBA\u5148\u884C",
946
+ "pages": {
947
+ "min": 8,
948
+ "max": 15
949
+ },
950
+ "researchFocus": [
951
+ "\u653F\u7B56\u6587\u4EF6\u4E0E\u4F9D\u636E\u539F\u6587",
952
+ "\u4E0A\u7EA7\u90E8\u7F72\u53E3\u5F84",
953
+ "\u540C\u7EA7\u5730\u533A\u505A\u6CD5",
954
+ "\u516C\u5F00\u7EDF\u8BA1\u6570\u636E"
955
+ ],
956
+ "motion": {
957
+ "delivery": "read",
958
+ "keywords": [
959
+ "\u6C47\u62A5"
960
+ ]
961
+ }
962
+ },
963
+ {
964
+ "id": "\u516C\u53F8/\u4EA7\u54C1\u4ECB\u7ECD",
965
+ "aliases": [
966
+ "\u516C\u53F8\u4ECB\u7ECD"
967
+ ],
968
+ "tone": [
969
+ "\u54C1\u724C",
970
+ "\u81EA\u4FE1",
971
+ "\u5229\u76CA\u5BFC\u5411"
972
+ ],
973
+ "density": [
974
+ "\u4E2D",
975
+ "\u91CD\u89C6\u89C9"
976
+ ],
977
+ "requiredSections": [
978
+ {
979
+ "terms": [
980
+ "\u516C\u53F8",
981
+ "\u613F\u666F"
982
+ ],
983
+ "content": "\u516C\u53F8\u662F\u8C01\u3001\u613F\u666F\u4E00\u53E5\u8BDD\u3001\u5173\u952E\u80CC\u666F\u6570\u636E"
984
+ },
985
+ {
986
+ "terms": [
987
+ "\u6838\u5FC3\u80FD\u529B"
988
+ ],
989
+ "content": "\u6838\u5FC3\u6280\u672F\u6216\u80FD\u529B\uFF0C\u4E0E\u540C\u884C\u7684\u5DEE\u5F02"
990
+ },
991
+ {
992
+ "terms": [
993
+ "\u4EA7\u54C1",
994
+ "\u65B9\u6848"
995
+ ],
996
+ "content": "\u4EA7\u54C1\u6216\u65B9\u6848\u7EC4\u5408\u4E0E\u9002\u7528\u573A\u666F"
997
+ },
998
+ {
999
+ "terms": [
1000
+ "\u6807\u6746\u6848\u4F8B"
1001
+ ],
1002
+ "content": "\u6807\u6746\u5BA2\u6237\u4E0E\u91CF\u5316\u6210\u679C"
1003
+ },
1004
+ {
1005
+ "terms": [
1006
+ "\u6570\u636E"
1007
+ ],
1008
+ "content": "\u89C4\u6A21\u3001\u5BA2\u6237\u6570\u3001\u589E\u957F\u7B49\u53EF\u516C\u5F00\u6570\u636E\uFF1B\u5B9C \u5927\u6570\u5B57"
1009
+ },
1010
+ {
1011
+ "terms": [
1012
+ "\u5408\u4F5C\u9080\u8BF7"
1013
+ ],
1014
+ "content": "\u5408\u4F5C\u65B9\u5F0F\u4E0E\u8054\u7CFB\u65B9\u5F0F"
1015
+ }
1016
+ ],
1017
+ "narrative": "\u95EE\u9898-\u65B9\u6848",
1018
+ "pages": {
1019
+ "min": 8,
1020
+ "max": 15
1021
+ },
1022
+ "researchFocus": [
1023
+ "\u884C\u4E1A\u5730\u4F4D\u4E0E\u7B2C\u4E09\u65B9\u62A5\u544A",
1024
+ "\u7ADE\u54C1\u5BF9\u6BD4",
1025
+ "\u53EF\u516C\u5F00\u5F15\u7528\u7684\u5BA2\u6237\u6848\u4F8B",
1026
+ "\u884C\u4E1A\u8D8B\u52BF"
1027
+ ]
1028
+ },
1029
+ {
1030
+ "id": "\u4EA7\u54C1\u8C03\u7814",
1031
+ "subtitle": "\u7ADE\u54C1\u5206\u6790 \u5E02\u573A\u7814\u7A76",
1032
+ "tone": [
1033
+ "\u5BA2\u89C2",
1034
+ "\u6709\u636E",
1035
+ "\u4E0D\u66FF\u7ED3\u8BBA\u4E0B\u5224\u65AD"
1036
+ ],
1037
+ "density": [
1038
+ "\u4E2D"
1039
+ ],
1040
+ "requiredSections": [
1041
+ {
1042
+ "terms": [
1043
+ "\u5E02\u573A\u89C4\u6A21"
1044
+ ],
1045
+ "content": "\u5E02\u573A\u89C4\u6A21\u4E0E\u589E\u901F\uFF0C\u6CE8\u660E\u6765\u6E90\u5E74\u4EFD\uFF1B\u5B9C \u67F1\u72B6\u56FE"
1046
+ },
1047
+ {
1048
+ "terms": [
1049
+ "\u7ADE\u54C1\u683C\u5C40"
1050
+ ],
1051
+ "content": "\u4E3B\u8981\u7ADE\u54C1\u7684\u5B9A\u4F4D\u3001\u529F\u80FD\u3001\u5B9A\u4EF7\u3001\u4EFD\u989D\uFF1B\u5B9C \u5BF9\u6BD4\u8868"
1052
+ },
1053
+ {
1054
+ "terms": [
1055
+ "\u7528\u6237\u9700\u6C42"
1056
+ ],
1057
+ "content": "\u7528\u6237\u7684\u6838\u5FC3\u9700\u6C42\u4E0E\u75DB\u70B9\uFF0C\u5F15\u7528\u8BC4\u4EF7\u539F\u8BDD"
1058
+ },
1059
+ {
1060
+ "terms": [
1061
+ "\u5DEE\u8DDD\u4E0E\u673A\u4F1A"
1062
+ ],
1063
+ "content": "\u7ADE\u54C1\u672A\u6EE1\u8DB3\u7684\u9700\u6C42\u4E0E\u6211\u4EEC\u7684\u673A\u4F1A"
1064
+ },
1065
+ {
1066
+ "terms": [
1067
+ "\u7ED3\u8BBA\u5EFA\u8BAE"
1068
+ ],
1069
+ "content": "\u57FA\u4E8E\u4E0A\u8FF0\u4E8B\u5B9E\u7684\u5224\u65AD\u4E0E\u5EFA\u8BAE"
1070
+ }
1071
+ ],
1072
+ "narrative": "\u5148\u6446\u4E8B\u5B9E\uFF0C\u518D\u7ED9\u5224\u65AD",
1073
+ "pages": {
1074
+ "min": 10,
1075
+ "max": 15
1076
+ },
1077
+ "researchFocus": [
1078
+ "\u5E02\u573A\u89C4\u6A21\u4E0E\u589E\u901F",
1079
+ "\u7ADE\u54C1\u529F\u80FD\u4E0E\u5B9A\u4EF7\u5BF9\u6BD4",
1080
+ "\u7528\u6237\u8BC4\u4EF7\u4E0E\u5DEE\u8BC4",
1081
+ "\u6E20\u9053\u4E0E\u4EFD\u989D\u6570\u636E"
1082
+ ],
1083
+ "motion": {
1084
+ "delivery": "read",
1085
+ "keywords": [
1086
+ "\u8C03\u7814",
1087
+ "research"
1088
+ ]
1089
+ }
1090
+ },
1091
+ {
1092
+ "id": "\u4F1A\u8BAE\u7EAA\u8981",
1093
+ "subtitle": "\u4F1A\u540E\u540C\u6B65",
1094
+ "tone": [
1095
+ "\u7B80\u6D01",
1096
+ "\u53EF\u6267\u884C",
1097
+ "\u4E0D\u590D\u8FF0\u8FC7\u7A0B"
1098
+ ],
1099
+ "density": [
1100
+ "\u4F4E"
1101
+ ],
1102
+ "requiredSections": [
1103
+ {
1104
+ "terms": [
1105
+ "\u8BAE\u9898"
1106
+ ],
1107
+ "content": "\u8BA8\u8BBA\u7684\u8BAE\u9898\u6E05\u5355"
1108
+ },
1109
+ {
1110
+ "terms": [
1111
+ "\u7ED3\u8BBA"
1112
+ ],
1113
+ "content": "\u6BCF\u4E2A\u8BAE\u9898\u7684\u7ED3\u8BBA"
1114
+ },
1115
+ {
1116
+ "terms": [
1117
+ "\u5F85\u529E"
1118
+ ],
1119
+ "content": "\u5F85\u529E\u4E8B\u9879\u3001\u8D1F\u8D23\u4EBA\u3001\u622A\u6B62\u65F6\u95F4\uFF1B\u5B9C \u8868\u683C"
1120
+ },
1121
+ {
1122
+ "terms": [
1123
+ "\u5F85\u51B3\u4E8B\u9879"
1124
+ ],
1125
+ "content": "\u672A\u51B3\u4E8B\u9879\u4E0E\u5F85\u51B3\u4EBA"
1126
+ }
1127
+ ],
1128
+ "narrative": "\u7ED3\u8BBA\u5148\u884C",
1129
+ "pages": {
1130
+ "min": 4,
1131
+ "max": 8
1132
+ },
1133
+ "researchFocus": [
1134
+ "\u8BAE\u9898\u6D89\u53CA\u7684\u5916\u90E8\u4E8B\u5B9E",
1135
+ "\u76F8\u5173\u53E3\u5F84\u4E0E\u5B9A\u4E49",
1136
+ "\u540C\u7C7B\u51B3\u7B56\u7684\u516C\u5F00\u5148\u4F8B"
1137
+ ],
1138
+ "motion": {
1139
+ "delivery": "read",
1140
+ "keywords": [
1141
+ "\u7EAA\u8981",
1142
+ "minutes"
1143
+ ]
1144
+ }
1145
+ },
1146
+ {
1147
+ "id": "\u6570\u636E\u5206\u6790",
1148
+ "subtitle": "\u6570\u636E\u89E3\u8BFB \u6307\u6807\u590D\u76D8",
1149
+ "tone": [
1150
+ "\u7ED3\u8BBA\u5148\u884C",
1151
+ "\u53EF\u8FFD\u6EAF"
1152
+ ],
1153
+ "density": [
1154
+ "\u4E2D"
1155
+ ],
1156
+ "requiredSections": [
1157
+ {
1158
+ "terms": [
1159
+ "\u7ED3\u8BBA"
1160
+ ],
1161
+ "content": "\u4E00\u53E5\u8BDD\u7ED3\u8BBA\u4E0E\u5173\u952E\u6570\u5B57\uFF1B\u5B9C \u5927\u6570\u5B57"
1162
+ },
1163
+ {
1164
+ "terms": [
1165
+ "\u53E3\u5F84\u4E0E\u6570\u636E\u6E90"
1166
+ ],
1167
+ "content": "\u6307\u6807\u5B9A\u4E49\u3001\u6570\u636E\u6765\u6E90\u3001\u65F6\u95F4\u8303\u56F4"
1168
+ },
1169
+ {
1170
+ "terms": [
1171
+ "\u7EF4\u5EA6\u62C6\u89E3"
1172
+ ],
1173
+ "content": "\u6309\u7EF4\u5EA6\u62C6\u89E3\u7684\u5206\u5E03\u4E0E\u53D8\u5316\uFF1B\u5B9C \u67F1\u72B6\u6216\u6298\u7EBF"
1174
+ },
1175
+ {
1176
+ "terms": [
1177
+ "\u5F52\u56E0"
1178
+ ],
1179
+ "content": "\u53D8\u5316\u7684\u4E3B\u8981\u539F\u56E0\u53CA\u5176\u8D21\u732E"
1180
+ },
1181
+ {
1182
+ "terms": [
1183
+ "\u5EFA\u8BAE"
1184
+ ],
1185
+ "content": "\u57FA\u4E8E\u5F52\u56E0\u7684\u53EF\u6267\u884C\u5EFA\u8BAE"
1186
+ }
1187
+ ],
1188
+ "narrative": "\u7ED3\u8BBA\u5148\u884C",
1189
+ "pages": {
1190
+ "min": 6,
1191
+ "max": 10
1192
+ },
1193
+ "researchFocus": [
1194
+ "\u6307\u6807\u53E3\u5F84\u5B9A\u4E49",
1195
+ "\u884C\u4E1A\u57FA\u51C6\u503C",
1196
+ "\u540C\u7C7B\u5F52\u56E0\u6848\u4F8B\u4E0E\u65B9\u6CD5"
1197
+ ],
1198
+ "motion": {
1199
+ "delivery": "read",
1200
+ "keywords": [
1201
+ "\u5206\u6790",
1202
+ "analysis"
1203
+ ]
1204
+ }
1205
+ }
1206
+ ],
1207
+ "narratives": [
1208
+ {
1209
+ "deckType": "\u62A5\u544A/\u603B\u7ED3",
1210
+ "structure": "\u7ED3\u8BBA\u5148\u884C",
1211
+ "flow": [
1212
+ "\u7ED3\u8BBA",
1213
+ "\u8BC1\u636E",
1214
+ "\u7EC6\u8282",
1215
+ "\u4E0B\u4E00\u6B65"
1216
+ ]
1217
+ },
1218
+ {
1219
+ "deckType": "\u4EA7\u54C1/\u9500\u552E",
1220
+ "structure": "\u95EE\u9898-\u65B9\u6848",
1221
+ "flow": [
1222
+ "\u75DB\u70B9",
1223
+ "\u65B9\u6848",
1224
+ "\u4EF7\u503C",
1225
+ "\u4F50\u8BC1",
1226
+ "CTA"
1227
+ ]
1228
+ },
1229
+ {
1230
+ "deckType": "\u57F9\u8BAD/\u6559\u5B66",
1231
+ "structure": "\u7531\u6D45\u5165\u6DF1",
1232
+ "flow": [
1233
+ "\u57FA\u7840",
1234
+ "\u6838\u5FC3",
1235
+ "\u8FDB\u9636",
1236
+ "\u7EC3\u4E60"
1237
+ ]
1238
+ },
1239
+ {
1240
+ "deckType": "\u878D\u8D44/\u8DEF\u6F14",
1241
+ "structure": "SCQA",
1242
+ "flow": [
1243
+ "\u60C5\u5883",
1244
+ "\u51B2\u7A81",
1245
+ "\u95EE\u9898",
1246
+ "\u89E3\u7B54"
1247
+ ]
1248
+ },
1249
+ {
1250
+ "deckType": "\u6D3B\u52A8/\u5BA3\u4F20",
1251
+ "structure": "\u60C5\u7EEA\u7EBF",
1252
+ "flow": [
1253
+ "\u94A9\u5B50",
1254
+ "\u5171\u9E23",
1255
+ "\u9AD8\u6F6E",
1256
+ "\u884C\u52A8"
1257
+ ]
1258
+ }
1259
+ ],
1260
+ "styleBias": [
1261
+ {
1262
+ "tones": [
1263
+ "\u5F20\u529B",
1264
+ "\u60C5\u7EEA"
1265
+ ],
1266
+ "scenarios": [
1267
+ "pitch",
1268
+ "\u53D1\u5E03\u4F1A",
1269
+ "\u5927\u4F1A"
1270
+ ],
1271
+ "look": "\u6DF1\u8272\u9177\u70AB",
1272
+ "styles": [
1273
+ "cool",
1274
+ "apple",
1275
+ "black-gold"
1276
+ ]
1277
+ },
1278
+ {
1279
+ "tones": [
1280
+ "\u52A1\u5B9E"
1281
+ ],
1282
+ "scenarios": [
1283
+ "\u5185\u5BA1",
1284
+ "\u9500\u552E"
1285
+ ],
1286
+ "look": "\u767D\u5E95\u54A8\u8BE2",
1287
+ "styles": [
1288
+ "mckinsey"
1289
+ ]
1290
+ },
1291
+ {
1292
+ "tones": [
1293
+ "\u6E05\u6670"
1294
+ ],
1295
+ "scenarios": [
1296
+ "\u8BB2\u5EA7",
1297
+ "\u57F9\u8BAD"
1298
+ ],
1299
+ "look": "\u4E2D\u6027/\u6559\u80B2\u98CE",
1300
+ "styles": []
1301
+ }
1302
+ ],
1303
+ "motionExtraKeywords": {
1304
+ "presented": [
1305
+ "\u4E3B\u9898\u6F14\u8BB2"
1306
+ ],
1307
+ "read": [
1308
+ "\u62A5\u544A",
1309
+ "report",
1310
+ "\u8BB2\u4E49",
1311
+ "handout"
1312
+ ]
1313
+ }
1314
+ };
1315
+
1316
+ // packages/core/dist/document/deck-catalog.js
1317
+ var SCENARIO_IDS = new Set(SCENARIO_MATRIX.scenarios.map((s) => s.id));
1318
+ var KINDS = ["skin", "pack"];
1319
+ var MODES = ["light", "dark"];
1320
+ var RENDER_MODES = ["classic-v1", "theme-v2"];
1321
+ var ID_RE = /^[a-z0-9][a-z0-9-]*$/;
1322
+ var COMMIT_RE = /^[0-9a-f]{7,40}$/;
1323
+ function isStr(v) {
1324
+ return typeof v === "string" && v.length > 0;
1325
+ }
1326
+ function isStrArr(v) {
1327
+ return Array.isArray(v) && v.every((x) => typeof x === "string");
1328
+ }
1329
+ function parseCatalog(raw2) {
1330
+ const errors2 = [];
1331
+ const o = raw2;
1332
+ if (!o || typeof o !== "object")
1333
+ return { catalog: null, errors: ["catalog is not an object"] };
1334
+ const groups = [];
1335
+ const rawGroups = Array.isArray(o.groups) ? o.groups : [];
1336
+ if (!Array.isArray(o.groups))
1337
+ errors2.push("catalog.groups must be an array");
1338
+ rawGroups.forEach((g, i) => {
1339
+ const at2 = `group[${i}]`;
1340
+ if (!isStr(g?.id) || !ID_RE.test(g.id))
1341
+ errors2.push(`${at2}: bad id`);
1342
+ if (!isStr(g?.name_cn))
1343
+ errors2.push(`${at2}: missing name_cn`);
1344
+ if (!isStr(g?.sample))
1345
+ errors2.push(`${at2}: missing sample`);
1346
+ if (!isStrArr(g?.scenarios))
1347
+ errors2.push(`${at2}: scenarios must be a string array`);
1348
+ if (isStr(g?.id) && isStr(g?.name_cn) && isStr(g?.sample) && isStrArr(g?.scenarios)) {
1349
+ groups.push({ id: g.id, name_cn: g.name_cn, sample: g.sample, scenarios: g.scenarios });
1350
+ }
1351
+ });
1352
+ const collections = [];
1353
+ const rawCollections = o.collections === void 0 ? [] : Array.isArray(o.collections) ? o.collections : [];
1354
+ if (o.collections !== void 0 && !Array.isArray(o.collections))
1355
+ errors2.push("catalog.collections must be an array when present");
1356
+ rawCollections.forEach((c, i) => {
1357
+ const at2 = `collection[${i}]`;
1358
+ const before = errors2.length;
1359
+ if (!isStr(c?.id) || !ID_RE.test(c.id))
1360
+ errors2.push(`${at2}: bad id`);
1361
+ if (!isStr(c?.name_cn))
1362
+ errors2.push(`${at2}: missing name_cn`);
1363
+ if (!isStr(c?.renderMode) || !RENDER_MODES.includes(c.renderMode))
1364
+ errors2.push(`${at2}: bad renderMode`);
1365
+ if (!isStrArr(c?.entryIds) || c.entryIds.length === 0)
1366
+ errors2.push(`${at2}: entryIds must be a non-empty string array`);
1367
+ if (c?.sourceCommit !== void 0 && (!isStr(c.sourceCommit) || !COMMIT_RE.test(c.sourceCommit)))
1368
+ errors2.push(`${at2}: bad sourceCommit`);
1369
+ if (c?.renderMode === "classic-v1" && c?.sourceCommit === void 0)
1370
+ errors2.push(`${at2}: classic-v1 requires sourceCommit`);
1371
+ if (errors2.length === before) {
1372
+ collections.push({
1373
+ id: c.id,
1374
+ name_cn: c.name_cn,
1375
+ renderMode: c.renderMode,
1376
+ entryIds: c.entryIds,
1377
+ ...c.sourceCommit !== void 0 ? { sourceCommit: c.sourceCommit } : {}
1378
+ });
1379
+ }
1380
+ });
1381
+ const entries = [];
1382
+ const rawEntries = Array.isArray(o.entries) ? o.entries : [];
1383
+ if (!Array.isArray(o.entries))
1384
+ errors2.push("catalog.entries must be an array");
1385
+ rawEntries.forEach((e, i) => {
1386
+ const at2 = `entry[${i}]${isStr(e?.id) ? ` (${e.id})` : ""}`;
1387
+ const before = errors2.length;
1388
+ if (!isStr(e?.id) || !ID_RE.test(e.id))
1389
+ errors2.push(`${at2}: bad id`);
1390
+ if (!isStr(e?.kind) || !KINDS.includes(e.kind))
1391
+ errors2.push(`${at2}: kind must be "skin" or "pack"`);
1392
+ if (!isStr(e?.group))
1393
+ errors2.push(`${at2}: missing group`);
1394
+ if (!isStr(e?.name_cn))
1395
+ errors2.push(`${at2}: missing name_cn`);
1396
+ if (!isStr(e?.oneliner))
1397
+ errors2.push(`${at2}: missing oneliner`);
1398
+ if (!isStrArr(e?.scenarios))
1399
+ errors2.push(`${at2}: scenarios must be a string array`);
1400
+ if (!isStr(e?.mode) || !MODES.includes(e.mode))
1401
+ errors2.push(`${at2}: mode must be "light" or "dark"`);
1402
+ if (!isStr(e?.sample))
1403
+ errors2.push(`${at2}: missing sample`);
1404
+ if (e?.motion !== void 0 && !isStr(e.motion))
1405
+ errors2.push(`${at2}: motion must be a string when present`);
1406
+ if (e?.use_cases !== void 0) {
1407
+ if (!isStrArr(e.use_cases))
1408
+ errors2.push(`${at2}: use_cases must be a string array`);
1409
+ else
1410
+ for (const uc of e.use_cases)
1411
+ if (!SCENARIO_IDS.has(uc))
1412
+ errors2.push(`${at2}: use_cases "${uc}" is not a scenarios.json id`);
1413
+ }
1414
+ if (errors2.length === before) {
1415
+ entries.push({
1416
+ id: e.id,
1417
+ kind: e.kind,
1418
+ group: e.group,
1419
+ name_cn: e.name_cn,
1420
+ oneliner: e.oneliner,
1421
+ scenarios: e.scenarios,
1422
+ mode: e.mode,
1423
+ sample: e.sample,
1424
+ ...e.motion !== void 0 ? { motion: e.motion } : {},
1425
+ ...isStrArr(e.use_cases) ? { use_cases: e.use_cases } : {}
1426
+ });
1427
+ }
1428
+ });
1429
+ let fallbackEntryIds;
1430
+ if (o.fallbackEntryIds !== void 0) {
1431
+ if (!isStrArr(o.fallbackEntryIds))
1432
+ errors2.push("fallbackEntryIds must be a string array");
1433
+ else {
1434
+ const ids = new Set(entries.map((e) => e.id));
1435
+ for (const id of o.fallbackEntryIds)
1436
+ if (!ids.has(id))
1437
+ errors2.push(`fallbackEntryIds: "${id}" is not a registered entry`);
1438
+ fallbackEntryIds = o.fallbackEntryIds;
1439
+ }
1440
+ }
1441
+ return {
1442
+ catalog: errors2.length ? null : { groups, ...collections.length ? { collections } : {}, entries, ...fallbackEntryIds ? { fallbackEntryIds } : {} },
1443
+ errors: errors2
1444
+ };
1445
+ }
1446
+ function deckEntryLabel(catalog2, entry) {
1447
+ if (entry.kind === "pack")
1448
+ return `PACK \xB7 ${entry.name_cn}`;
1449
+ if (renderModeOf(catalog2, entry.id) === "classic-v1")
1450
+ return `\u7ECF\u5178 \xB7 ${entry.name_cn}`;
1451
+ return entry.name_cn;
1452
+ }
1453
+ function renderModeOf(catalog2, id) {
1454
+ return catalog2.collections?.find((c) => c.entryIds.includes(id))?.renderMode ?? "theme-v2";
1455
+ }
1456
+
1457
+ // packages/core/dist/document/deck-scenarios.js
1458
+ function findScenario(m, text) {
1459
+ const hay = text?.trim().toLowerCase();
1460
+ if (!hay)
1461
+ return void 0;
1462
+ const exact = m.scenarios.find((s) => s.id.toLowerCase() === hay);
1463
+ if (exact)
1464
+ return exact;
1465
+ let best;
1466
+ for (const row of m.scenarios) {
1467
+ const aliases = [...row.id.split("/"), ...(row.subtitle ?? "").split(/[\s/]+/), ...row.aliases ?? []];
1468
+ for (const alias of aliases) {
1469
+ const a = alias.trim().toLowerCase();
1470
+ if (a.length < 2 || !hay.includes(a))
1471
+ continue;
1472
+ if (!best || a.length > best.len)
1473
+ best = { row, len: a.length };
1474
+ }
1475
+ }
1476
+ return best?.row;
1477
+ }
1478
+
1479
+ // packages/core/dist/document/deck-picker-cards.js
1480
+ var BROWSE_ALL_STYLES_LABEL = "\u67E5\u770B\u5168\u90E8\u98CE\u683C";
1481
+ var TEMPLATE_CARD_LABEL = "\u4F7F\u7528\u6211\u7684\u6A21\u677F\u6587\u4EF6";
1482
+ var DECK_CATALOG_EXPANDER_KIND = "deck-catalog";
1483
+ var TEMPLATE_STYLE_CARD = {
1484
+ id: "use-my-template-file",
1485
+ label: TEMPLATE_CARD_LABEL,
1486
+ description: "\u5B66\u4E60\u73B0\u6210 PPT \u7684\u98CE\u683C\uFF08logo\u3001\u9875\u7709\u9875\u811A\u3001\u914D\u8272\u3001\u5B57\u4F53\uFF09",
1487
+ filePick: "file"
1488
+ };
1489
+ var BROWSE_ALL_STYLES_CARD = {
1490
+ id: "browse-all-styles",
1491
+ label: BROWSE_ALL_STYLES_LABEL,
1492
+ description: "\u4E00\u6B21\u67E5\u770B\u5168\u90E8\u6A21\u677F",
1493
+ expand: { kind: DECK_CATALOG_EXPANDER_KIND, source: "document:catalog.json" }
1494
+ };
1495
+
1496
+ // packages/core/dist/document/deck-styles.js
1497
+ var MIN_CARDS = 6;
1498
+ var MAX_CARDS = 8;
1499
+ var SAVED_CARDS = 2;
1500
+ function entryCard(catalog2, entry) {
1501
+ return { id: entry.id, label: deckEntryLabel(catalog2, entry), description: entry.oneliner, imagePath: `document:${entry.sample}` };
1502
+ }
1503
+ function styleCandidates(catalog2, scenarioInput, matrix = SCENARIO_MATRIX, saved2 = []) {
1504
+ const scenario2 = findScenario(matrix, scenarioInput)?.id ?? null;
1505
+ const byId = new Map(catalog2.entries.map((e) => [e.id, e]));
1506
+ const matched = scenario2 ? catalog2.entries.filter((e) => e.use_cases?.includes(scenario2)) : [];
1507
+ const bias = scenario2 ? matrix.styleBias.filter((b) => b.scenarios.includes(scenario2)).flatMap((b) => b.styles) : [];
1508
+ const ordered = [];
1509
+ const add = (e) => {
1510
+ if (e && !ordered.includes(e))
1511
+ ordered.push(e);
1512
+ };
1513
+ for (const e of matched)
1514
+ if (e.kind === "pack")
1515
+ add(e);
1516
+ for (const id of bias) {
1517
+ const e = byId.get(id);
1518
+ if (e && matched.includes(e))
1519
+ add(e);
1520
+ }
1521
+ for (const e of matched)
1522
+ add(e);
1523
+ const own = saved2.slice(0, SAVED_CARDS).map((c) => ({ ...c, match: "saved" }));
1524
+ const cards = [...own, ...ordered.slice(0, MAX_CARDS - own.length).map((e) => ({ ...entryCard(catalog2, e), match: "scenario" }))];
1525
+ if (cards.length < MIN_CARDS) {
1526
+ const fill = [...(catalog2.fallbackEntryIds ?? []).map((id) => byId.get(id)), ...catalog2.entries];
1527
+ for (const e of fill) {
1528
+ if (cards.length >= MIN_CARDS)
1529
+ break;
1530
+ if (e && !cards.some((c) => c.id === e.id))
1531
+ cards.push({ ...entryCard(catalog2, e), match: "fallback" });
1532
+ }
1533
+ }
1534
+ const fromScenario = cards.filter((c) => c.match === "scenario").length;
1535
+ const fromCatalog = cards.filter((c) => c.match !== "saved").length;
1536
+ return {
1537
+ scenario: scenario2,
1538
+ source: fromScenario === fromCatalog ? "matched" : fromScenario === 0 ? "fallback" : "mixed",
1539
+ cards,
1540
+ options: [...cards.map(({ match: _m, ...card }) => card), BROWSE_ALL_STYLES_CARD, TEMPLATE_STYLE_CARD]
1541
+ };
1542
+ }
1543
+
1544
+ // packages/core/dist/document/deck-picker.js
1545
+ var import_node_fs = require("node:fs");
1546
+ var import_node_path = require("node:path");
1547
+ var SAFE_NAME = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
1548
+ var STYLE_PREVIEWS = ["sample-cover.png", "cover.png", "sample.png"];
1549
+ function savedStyleLabel(dir, name) {
1550
+ try {
1551
+ const tpl = JSON.parse((0, import_node_fs.readFileSync)((0, import_node_path.join)(dir, "template.json"), "utf8"));
1552
+ if (typeof tpl.label === "string" && tpl.label.trim())
1553
+ return tpl.label.trim();
1554
+ } catch {
1555
+ }
1556
+ return name;
1557
+ }
1558
+ function savedStyleCards(userStylesDir, takenIds) {
1559
+ if (!userStylesDir)
1560
+ return [];
1561
+ const root = (0, import_node_path.join)(userStylesDir, "styles");
1562
+ if (!(0, import_node_fs.existsSync)(root))
1563
+ return [];
1564
+ const found = [];
1565
+ for (const name of (0, import_node_fs.readdirSync)(root)) {
1566
+ const dir = (0, import_node_path.join)(root, name);
1567
+ const css = (0, import_node_path.join)(dir, "skin.css");
1568
+ if (!SAFE_NAME.test(name) || takenIds.has(name) || !(0, import_node_fs.existsSync)(css))
1569
+ continue;
1570
+ const preview = STYLE_PREVIEWS.map((f) => (0, import_node_path.join)(dir, f)).find((p) => (0, import_node_fs.existsSync)(p));
1571
+ found.push({
1572
+ at: (0, import_node_fs.statSync)(css).mtimeMs,
1573
+ card: {
1574
+ id: name,
1575
+ label: `\u6211\u7684\u98CE\u683C \xB7 ${savedStyleLabel(dir, name)}`,
1576
+ description: (0, import_node_fs.existsSync)((0, import_node_path.join)(dir, "template.json")) ? "\u5B66\u81EA\u4F60\u7684\u6A21\u677F\u6587\u4EF6" : "\u4F60\u4FDD\u5B58\u7684\u98CE\u683C",
1577
+ ...preview ? { imagePath: preview } : {}
1578
+ }
1579
+ });
1580
+ }
1581
+ return found.sort((a, b) => b.at - a.at || a.card.id.localeCompare(b.card.id)).map((f) => f.card);
1582
+ }
1583
+
1584
+ // apps/admin/data/skills.lib/document/bin-src/deck-styles.mjs
1585
+ function die(msg, code = 1) {
1586
+ process.stderr.write(`deck-styles: ${msg}
1587
+ `);
1588
+ process.exit(code);
1589
+ }
1590
+ var argv = process.argv.slice(2);
1591
+ var at = argv.indexOf("--scenario");
1592
+ var scenario = at === -1 ? void 0 : argv[at + 1];
1593
+ var catalogPath = (0, import_node_path2.join)((0, import_node_path2.dirname)((0, import_node_path2.dirname)(process.argv[1] || "")), "catalog.json");
1594
+ var raw;
1595
+ try {
1596
+ raw = JSON.parse((0, import_node_fs2.readFileSync)(catalogPath, "utf8"));
1597
+ } catch (e) {
1598
+ die(`cannot read ${catalogPath}: ${e.message}`, 66);
1599
+ }
1600
+ var { catalog, errors } = parseCatalog(raw);
1601
+ if (!catalog) die(`catalog.json failed validation: ${errors.join("; ")}`, 65);
1602
+ var saved = savedStyleCards(process.env.TALOS_DOC_STYLES_DIR?.trim() || void 0, new Set(catalog.entries.map((e) => e.id)));
1603
+ var { cards: _cards, ...result } = styleCandidates(catalog, scenario, void 0, saved);
1604
+ process.stdout.write(JSON.stringify(result, null, 1) + "\n");