@openpresentation/opf 0.13.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/README.md +40 -49
  2. package/dist/catalog-refs-BSfGELpt.d.ts +128 -0
  3. package/dist/catalog-schemas-CinPh5WA.d.ts +12 -0
  4. package/dist/catalog.d.ts +91 -0
  5. package/dist/{chunk-E34DJ5LL.js → catalog.js} +16949 -17628
  6. package/dist/{chart-data-Cdr6rRVV.d.ts → chart-data-BnNqgnC-.d.ts} +17 -6
  7. package/dist/{chunk-7QBCWNWL.js → chunk-2CJPC4HI.js} +1807 -1904
  8. package/dist/{chunk-II5EYKZU.js → chunk-374R35TJ.js} +2 -92
  9. package/dist/chunk-3JG4YXWF.js +1842 -0
  10. package/dist/chunk-3RKB4RDJ.js +192 -0
  11. package/dist/{chunk-IS2CPNVJ.js → chunk-5FTUIDUH.js} +26 -26
  12. package/dist/{chunk-GJKJL4YY.js → chunk-HXHOZ7AH.js} +1379 -504
  13. package/dist/{chunk-MPM7NRG7.js → chunk-O744SXXA.js} +2014 -885
  14. package/dist/chunk-QDI75P2M.js +3515 -0
  15. package/dist/chunk-SPFV27O5.js +210 -0
  16. package/dist/chunk-TRDXRRQK.js +17 -0
  17. package/dist/chunk-TWQJLI6E.js +601 -0
  18. package/dist/{chunk-ATGDDJPX.js → chunk-U4J75TRG.js} +3 -3
  19. package/dist/{chunk-RAYB46AB.js → chunk-UBFJ2QHH.js} +34 -30
  20. package/dist/chunk-VGAOJEY7.js +94 -0
  21. package/dist/chunk-ZPU46TFA.js +83 -0
  22. package/dist/{composition-D7we69Tr.d.ts → composition-D2tghM82.d.ts} +947 -111
  23. package/dist/composition.d.ts +3 -2
  24. package/dist/composition.js +2 -2
  25. package/dist/convert.d.ts +18 -19
  26. package/dist/convert.js +61 -50
  27. package/dist/data.d.ts +4 -4
  28. package/dist/data.js +3 -3
  29. package/dist/diff.d.ts +4 -4
  30. package/dist/diff.js +7 -605
  31. package/dist/docs.js +56 -44
  32. package/dist/examples.d.ts +1 -1
  33. package/dist/examples.js +49451 -6259
  34. package/dist/finding-CT_f_vbD.d.ts +212 -0
  35. package/dist/format.d.ts +4 -4
  36. package/dist/format.js +2 -83
  37. package/dist/index.d.ts +492 -309
  38. package/dist/index.js +767 -1097
  39. package/dist/json-BFSdESOE.d.ts +19 -0
  40. package/dist/markdown.d.ts +40 -27
  41. package/dist/markdown.js +9 -1941
  42. package/dist/pagination-wedbe7eq.d.ts +119 -0
  43. package/dist/pagination.d.ts +4 -61
  44. package/dist/pagination.js +6 -6
  45. package/dist/patch.d.ts +12 -23
  46. package/dist/patch.js +6 -6
  47. package/dist/{presentation-mG-IYErQ.d.ts → presentation-CDKQVkyI.d.ts} +702 -1026
  48. package/dist/repo-readme.js +1 -1
  49. package/dist/schemas.d.ts +284 -1
  50. package/dist/schemas.js +1 -1
  51. package/dist/spec/README.md +11 -6
  52. package/dist/spec/catalogs/audiences/index.json +2 -50
  53. package/dist/spec/catalogs/chart-types/100pct-stacked-area.json +21 -0
  54. package/dist/spec/catalogs/chart-types/100pct-stacked-bar.json +22 -0
  55. package/dist/spec/catalogs/chart-types/100pct-stacked-column.json +22 -0
  56. package/dist/spec/catalogs/chart-types/area.json +2 -60
  57. package/dist/spec/catalogs/chart-types/bar.json +2 -48
  58. package/dist/spec/catalogs/chart-types/box-and-whisker.json +2 -132
  59. package/dist/spec/catalogs/chart-types/column.json +2 -52
  60. package/dist/spec/catalogs/chart-types/combo.json +37 -0
  61. package/dist/spec/catalogs/chart-types/doughnut.json +2 -40
  62. package/dist/spec/catalogs/chart-types/filled-radar.json +2 -52
  63. package/dist/spec/catalogs/chart-types/funnel.json +2 -46
  64. package/dist/spec/catalogs/chart-types/histogram.json +2 -149
  65. package/dist/spec/catalogs/chart-types/index.json +50 -520
  66. package/dist/spec/catalogs/chart-types/line-with-markers.json +2 -60
  67. package/dist/spec/catalogs/chart-types/line.json +2 -60
  68. package/dist/spec/catalogs/chart-types/pareto.json +2 -50
  69. package/dist/spec/catalogs/chart-types/pie.json +2 -40
  70. package/dist/spec/catalogs/chart-types/radar-with-markers.json +2 -52
  71. package/dist/spec/catalogs/chart-types/radar.json +2 -52
  72. package/dist/spec/catalogs/chart-types/scatter.json +2 -73
  73. package/dist/spec/catalogs/chart-types/stacked-area.json +21 -0
  74. package/dist/spec/catalogs/chart-types/stacked-bar.json +22 -0
  75. package/dist/spec/catalogs/chart-types/stacked-column.json +22 -0
  76. package/dist/spec/catalogs/chart-types/stacked-line-with-markers.json +22 -0
  77. package/dist/spec/catalogs/chart-types/stacked-line.json +21 -0
  78. package/dist/spec/catalogs/chart-types/treemap.json +2 -48
  79. package/dist/spec/catalogs/chart-types/waterfall.json +2 -52
  80. package/dist/spec/catalogs/chart-types/world.json +2 -64
  81. package/dist/spec/catalogs/font-schemes/angsana-new.json +2 -2
  82. package/dist/spec/catalogs/font-schemes/aparajita.json +3 -3
  83. package/dist/spec/catalogs/font-schemes/aptos.json +1 -1
  84. package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +2 -2
  85. package/dist/spec/catalogs/font-schemes/arial.json +1 -1
  86. package/dist/spec/catalogs/font-schemes/batang.json +2 -2
  87. package/dist/spec/catalogs/font-schemes/bookman.json +1 -1
  88. package/dist/spec/catalogs/font-schemes/calibri.json +1 -1
  89. package/dist/spec/catalogs/font-schemes/century-schoolbook.json +1 -1
  90. package/dist/spec/catalogs/font-schemes/consolas.json +2 -4
  91. package/dist/spec/catalogs/font-schemes/constantia.json +1 -1
  92. package/dist/spec/catalogs/font-schemes/courier-new.json +2 -4
  93. package/dist/spec/catalogs/font-schemes/daunpenh.json +2 -2
  94. package/dist/spec/catalogs/font-schemes/david.json +2 -2
  95. package/dist/spec/catalogs/font-schemes/dilleniaupc.json +2 -2
  96. package/dist/spec/catalogs/font-schemes/fangsong.json +2 -2
  97. package/dist/spec/catalogs/font-schemes/garamond.json +1 -1
  98. package/dist/spec/catalogs/font-schemes/gautami.json +2 -2
  99. package/dist/spec/catalogs/font-schemes/georgia.json +1 -1
  100. package/dist/spec/catalogs/font-schemes/gisha.json +3 -3
  101. package/dist/spec/catalogs/font-schemes/grandview.json +1 -1
  102. package/dist/spec/catalogs/font-schemes/gungsuh.json +2 -2
  103. package/dist/spec/catalogs/font-schemes/impact.json +1 -1
  104. package/dist/spec/catalogs/font-schemes/index.json +1 -1
  105. package/dist/spec/catalogs/font-schemes/kalinga.json +2 -2
  106. package/dist/spec/catalogs/font-schemes/kartika.json +2 -2
  107. package/dist/spec/catalogs/font-schemes/khmer-ui.json +2 -2
  108. package/dist/spec/catalogs/font-schemes/latha.json +2 -2
  109. package/dist/spec/catalogs/font-schemes/lucida-sans.json +1 -1
  110. package/dist/spec/catalogs/font-schemes/malgun-gothic.json +2 -2
  111. package/dist/spec/catalogs/font-schemes/mangal.json +4 -5
  112. package/dist/spec/catalogs/font-schemes/meiryo.json +2 -2
  113. package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +2 -2
  114. package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +5 -5
  115. package/dist/spec/catalogs/font-schemes/mingliu.json +2 -2
  116. package/dist/spec/catalogs/font-schemes/miriam.json +2 -2
  117. package/dist/spec/catalogs/font-schemes/montserrat.json +1 -1
  118. package/dist/spec/catalogs/font-schemes/ms-mincho.json +2 -2
  119. package/dist/spec/catalogs/font-schemes/nirmala-ui.json +2 -2
  120. package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +2 -2
  121. package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +3 -3
  122. package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +4 -4
  123. package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +2 -2
  124. package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +3 -3
  125. package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +3 -3
  126. package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +2 -2
  127. package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +2 -2
  128. package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +2 -2
  129. package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +2 -2
  130. package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +2 -2
  131. package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +2 -2
  132. package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +2 -2
  133. package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +2 -2
  134. package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +2 -2
  135. package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +2 -2
  136. package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +2 -2
  137. package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +2 -2
  138. package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +5 -5
  139. package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +2 -2
  140. package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +2 -2
  141. package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +2 -2
  142. package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +2 -2
  143. package/dist/spec/catalogs/font-schemes/noto-sans.json +5 -5
  144. package/dist/spec/catalogs/font-schemes/nyala.json +2 -2
  145. package/dist/spec/catalogs/font-schemes/open-sans.json +1 -1
  146. package/dist/spec/catalogs/font-schemes/pmingliu.json +2 -2
  147. package/dist/spec/catalogs/font-schemes/poppins.json +1 -1
  148. package/dist/spec/catalogs/font-schemes/pt-serif.json +1 -1
  149. package/dist/spec/catalogs/font-schemes/raavi.json +2 -2
  150. package/dist/spec/catalogs/font-schemes/raleway.json +1 -1
  151. package/dist/spec/catalogs/font-schemes/roboto.json +1 -1
  152. package/dist/spec/catalogs/font-schemes/rockwell.json +1 -1
  153. package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +4 -4
  154. package/dist/spec/catalogs/font-schemes/seaford.json +1 -1
  155. package/dist/spec/catalogs/font-schemes/segoe-ui-light.json +1 -1
  156. package/dist/spec/catalogs/font-schemes/segoe-ui.json +1 -1
  157. package/dist/spec/catalogs/font-schemes/shonar-bangla.json +3 -3
  158. package/dist/spec/catalogs/font-schemes/shruti.json +2 -2
  159. package/dist/spec/catalogs/font-schemes/simsun.json +2 -2
  160. package/dist/spec/catalogs/font-schemes/skeena.json +1 -1
  161. package/dist/spec/catalogs/font-schemes/sylfaen.json +3 -3
  162. package/dist/spec/catalogs/font-schemes/tahoma.json +1 -1
  163. package/dist/spec/catalogs/font-schemes/tenorite.json +1 -1
  164. package/dist/spec/catalogs/font-schemes/times-new-roman.json +1 -1
  165. package/dist/spec/catalogs/font-schemes/traditional-arabic.json +4 -4
  166. package/dist/spec/catalogs/font-schemes/trebuchet-ms.json +1 -1
  167. package/dist/spec/catalogs/font-schemes/tunga.json +2 -2
  168. package/dist/spec/catalogs/font-schemes/verdana.json +1 -1
  169. package/dist/spec/catalogs/font-schemes/vrinda.json +2 -2
  170. package/dist/spec/catalogs/font-schemes/yu-gothic.json +2 -2
  171. package/dist/spec/catalogs/layouts/action-plan.json +9 -15
  172. package/dist/spec/catalogs/layouts/agenda.json +8 -15
  173. package/dist/spec/catalogs/layouts/appendix-index.json +7 -15
  174. package/dist/spec/catalogs/layouts/architecture-stack.json +9 -15
  175. package/dist/spec/catalogs/layouts/assumptions-dependencies.json +9 -15
  176. package/dist/spec/catalogs/layouts/before-after.json +9 -15
  177. package/dist/spec/catalogs/layouts/benchmark-target-table.json +9 -15
  178. package/dist/spec/catalogs/layouts/blank.json +11 -1
  179. package/dist/spec/catalogs/layouts/bullet-list.json +9 -15
  180. package/dist/spec/catalogs/layouts/business-model-canvas.json +9 -15
  181. package/dist/spec/catalogs/layouts/capability-map.json +11 -16
  182. package/dist/spec/catalogs/layouts/case-study.json +9 -15
  183. package/dist/spec/catalogs/layouts/chapter-recap.json +8 -15
  184. package/dist/spec/catalogs/layouts/chart-1x-title-center.json +30 -0
  185. package/dist/spec/catalogs/layouts/chart-1x.json +15 -0
  186. package/dist/spec/catalogs/layouts/chart-2x-title-center.json +36 -0
  187. package/dist/spec/catalogs/layouts/chart-2x-vertical-title-left.json +37 -0
  188. package/dist/spec/catalogs/layouts/chart-2x.json +15 -0
  189. package/dist/spec/catalogs/layouts/chart-3x-bottom-vertical-title-left.json +46 -0
  190. package/dist/spec/catalogs/layouts/chart-3x-left-title-center.json +45 -0
  191. package/dist/spec/catalogs/layouts/chart-3x-left.json +40 -0
  192. package/dist/spec/catalogs/layouts/chart-3x-right-title-center.json +45 -0
  193. package/dist/spec/catalogs/layouts/chart-3x-right.json +40 -0
  194. package/dist/spec/catalogs/layouts/chart-3x-title-center.json +39 -0
  195. package/dist/spec/catalogs/layouts/chart-3x-top-vertical-title-left.json +46 -0
  196. package/dist/spec/catalogs/layouts/chart-3x.json +15 -0
  197. package/dist/spec/catalogs/layouts/circular-lifecycle.json +9 -15
  198. package/dist/spec/catalogs/layouts/code-1x.json +10 -0
  199. package/dist/spec/catalogs/layouts/comparison.json +9 -15
  200. package/dist/spec/catalogs/layouts/competitive-landscape.json +11 -16
  201. package/dist/spec/catalogs/layouts/customer-journey.json +11 -16
  202. package/dist/spec/catalogs/layouts/customer-logos.json +9 -15
  203. package/dist/spec/catalogs/layouts/dashboard.json +9 -15
  204. package/dist/spec/catalogs/layouts/data-visualization.json +9 -15
  205. package/dist/spec/catalogs/layouts/decision-tree.json +11 -16
  206. package/dist/spec/catalogs/layouts/detailed-data-table.json +9 -15
  207. package/dist/spec/catalogs/layouts/ecosystem-map.json +11 -16
  208. package/dist/spec/catalogs/layouts/executive-decision.json +9 -15
  209. package/dist/spec/catalogs/layouts/executive-summary.json +9 -15
  210. package/dist/spec/catalogs/layouts/extract/canonical.json +7 -16
  211. package/dist/spec/catalogs/layouts/faq.json +9 -15
  212. package/dist/spec/catalogs/layouts/feature-comparison-matrix.json +9 -15
  213. package/dist/spec/catalogs/layouts/forecast-scenario.json +9 -15
  214. package/dist/spec/catalogs/layouts/funnel-pyramid.json +9 -15
  215. package/dist/spec/catalogs/layouts/gantt-project-plan.json +9 -15
  216. package/dist/spec/catalogs/layouts/geographic-map.json +10 -15
  217. package/dist/spec/catalogs/layouts/heatmap-cohort.json +9 -15
  218. package/dist/spec/catalogs/layouts/hub-and-spoke.json +9 -15
  219. package/dist/spec/catalogs/layouts/icon-grid.json +11 -16
  220. package/dist/spec/catalogs/layouts/image-1x-crop-title-center.json +32 -0
  221. package/dist/spec/catalogs/layouts/image-1x-crop-title-left.json +32 -0
  222. package/dist/spec/catalogs/layouts/image-1x-crop.json +27 -0
  223. package/dist/spec/catalogs/layouts/image-1x-fit-title-center.json +32 -0
  224. package/dist/spec/catalogs/layouts/image-1x.json +14 -1
  225. package/dist/spec/catalogs/layouts/image-2x-crop-title-center.json +38 -0
  226. package/dist/spec/catalogs/layouts/image-2x-crop-vertical-title-left.json +39 -0
  227. package/dist/spec/catalogs/layouts/image-2x-crop-vertical.json +34 -0
  228. package/dist/spec/catalogs/layouts/image-2x-crop.json +33 -0
  229. package/dist/spec/catalogs/layouts/image-2x-fit-title-center.json +38 -0
  230. package/dist/spec/catalogs/layouts/image-2x-fit-vertical-title-left.json +39 -0
  231. package/dist/spec/catalogs/layouts/image-2x-fit-vertical.json +34 -0
  232. package/dist/spec/catalogs/layouts/image-2x.json +15 -2
  233. package/dist/spec/catalogs/layouts/image-3x-crop-title-center.json +41 -0
  234. package/dist/spec/catalogs/layouts/image-3x-crop-vertical-title-left.json +42 -0
  235. package/dist/spec/catalogs/layouts/image-3x-crop-vertical.json +37 -0
  236. package/dist/spec/catalogs/layouts/image-3x-crop.json +36 -0
  237. package/dist/spec/catalogs/layouts/image-3x-fit-title-center.json +41 -0
  238. package/dist/spec/catalogs/layouts/image-3x-fit-vertical-title-left.json +42 -0
  239. package/dist/spec/catalogs/layouts/image-3x-fit-vertical.json +37 -0
  240. package/dist/spec/catalogs/layouts/image-3x-fit.json +36 -0
  241. package/dist/spec/catalogs/layouts/image-3x.json +16 -3
  242. package/dist/spec/catalogs/layouts/image-focus.json +13 -18
  243. package/dist/spec/catalogs/layouts/image-only-1x-crop-title-center.json +31 -0
  244. package/dist/spec/catalogs/layouts/image-only-1x-fit-title-center.json +31 -0
  245. package/dist/spec/catalogs/layouts/image-only-2x-crop-title-center.json +37 -0
  246. package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical-title-left.json +38 -0
  247. package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical.json +33 -0
  248. package/dist/spec/catalogs/layouts/image-only-2x-fit-title-center.json +37 -0
  249. package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical-title-left.json +38 -0
  250. package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical.json +33 -0
  251. package/dist/spec/catalogs/layouts/image-only-3x-crop-title-center.json +40 -0
  252. package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical-title-left.json +41 -0
  253. package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical.json +36 -0
  254. package/dist/spec/catalogs/layouts/image-only-3x-crop.json +35 -0
  255. package/dist/spec/catalogs/layouts/image-only-3x-fit-title-center.json +40 -0
  256. package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical-title-left.json +41 -0
  257. package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical.json +36 -0
  258. package/dist/spec/catalogs/layouts/image-only-3x-fit.json +35 -0
  259. package/dist/spec/catalogs/layouts/index.json +1041 -151
  260. package/dist/spec/catalogs/layouts/key-takeaway.json +8 -15
  261. package/dist/spec/catalogs/layouts/kpi-scorecard.json +9 -15
  262. package/dist/spec/catalogs/layouts/list-1x-box-title-center.json +32 -0
  263. package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-center.json +33 -0
  264. package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-left.json +33 -0
  265. package/dist/spec/catalogs/layouts/list-1x-box-vertical.json +28 -0
  266. package/dist/spec/catalogs/layouts/list-1x-box.json +27 -0
  267. package/dist/spec/catalogs/layouts/list-1x-itemimage-title-center.json +32 -0
  268. package/dist/spec/catalogs/layouts/list-1x-itemimage-vertical-title-center.json +33 -0
  269. package/dist/spec/catalogs/layouts/list-1x-title-center.json +31 -0
  270. package/dist/spec/catalogs/layouts/list-1x-vertical-title-center.json +32 -0
  271. package/dist/spec/catalogs/layouts/list-1x.json +17 -1
  272. package/dist/spec/catalogs/layouts/list-2x-box-title-center.json +38 -0
  273. package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-center.json +39 -0
  274. package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-left.json +39 -0
  275. package/dist/spec/catalogs/layouts/list-2x-box-vertical.json +34 -0
  276. package/dist/spec/catalogs/layouts/list-2x-box.json +33 -0
  277. package/dist/spec/catalogs/layouts/list-2x-itemimage-title-center.json +38 -0
  278. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-center.json +39 -0
  279. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-left.json +39 -0
  280. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical.json +34 -0
  281. package/dist/spec/catalogs/layouts/list-2x-title-center.json +37 -0
  282. package/dist/spec/catalogs/layouts/list-2x-vertical-title-center.json +38 -0
  283. package/dist/spec/catalogs/layouts/list-2x-vertical-title-left.json +38 -0
  284. package/dist/spec/catalogs/layouts/list-2x-vertical.json +33 -0
  285. package/dist/spec/catalogs/layouts/list-2x.json +16 -0
  286. package/dist/spec/catalogs/layouts/list-3x-box-title-center.json +41 -0
  287. package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-center.json +42 -0
  288. package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-left.json +42 -0
  289. package/dist/spec/catalogs/layouts/list-3x-box-vertical.json +37 -0
  290. package/dist/spec/catalogs/layouts/list-3x-box.json +36 -0
  291. package/dist/spec/catalogs/layouts/list-3x-itemimage-title-center.json +41 -0
  292. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-center.json +42 -0
  293. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-left.json +42 -0
  294. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical.json +37 -0
  295. package/dist/spec/catalogs/layouts/list-3x-itemimage.json +36 -0
  296. package/dist/spec/catalogs/layouts/list-3x-title-center.json +40 -0
  297. package/dist/spec/catalogs/layouts/list-3x-vertical-title-center.json +41 -0
  298. package/dist/spec/catalogs/layouts/list-3x-vertical-title-left.json +41 -0
  299. package/dist/spec/catalogs/layouts/list-3x-vertical.json +36 -0
  300. package/dist/spec/catalogs/layouts/list-3x.json +16 -0
  301. package/dist/spec/catalogs/layouts/list-4x-box-title-center.json +45 -0
  302. package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-center.json +45 -0
  303. package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-left.json +45 -0
  304. package/dist/spec/catalogs/layouts/list-4x-box-vertical.json +40 -0
  305. package/dist/spec/catalogs/layouts/list-4x-box.json +40 -0
  306. package/dist/spec/catalogs/layouts/list-4x-itemimage-title-center.json +45 -0
  307. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-center.json +45 -0
  308. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-left.json +45 -0
  309. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical.json +40 -0
  310. package/dist/spec/catalogs/layouts/list-4x-title-center.json +44 -0
  311. package/dist/spec/catalogs/layouts/list-4x-vertical-title-center.json +44 -0
  312. package/dist/spec/catalogs/layouts/list-4x-vertical-title-left.json +44 -0
  313. package/dist/spec/catalogs/layouts/list-4x-vertical.json +39 -0
  314. package/dist/spec/catalogs/layouts/list-4x.json +16 -0
  315. package/dist/spec/catalogs/layouts/list-5x-box-title-center.json +48 -0
  316. package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-center.json +50 -0
  317. package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-left.json +50 -0
  318. package/dist/spec/catalogs/layouts/list-5x-box-vertical.json +45 -0
  319. package/dist/spec/catalogs/layouts/list-5x-box.json +43 -0
  320. package/dist/spec/catalogs/layouts/list-5x-itemimage-title-center.json +48 -0
  321. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-center.json +48 -0
  322. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-left.json +48 -0
  323. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical.json +43 -0
  324. package/dist/spec/catalogs/layouts/list-5x-title-center.json +47 -0
  325. package/dist/spec/catalogs/layouts/list-5x-vertical-title-center.json +47 -0
  326. package/dist/spec/catalogs/layouts/list-5x-vertical-title-left.json +47 -0
  327. package/dist/spec/catalogs/layouts/list-5x-vertical.json +42 -0
  328. package/dist/spec/catalogs/layouts/list-5x.json +16 -0
  329. package/dist/spec/catalogs/layouts/list-6x-box-title-center.json +51 -0
  330. package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-center.json +53 -0
  331. package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-left.json +53 -0
  332. package/dist/spec/catalogs/layouts/list-6x-box-vertical.json +48 -0
  333. package/dist/spec/catalogs/layouts/list-6x-box.json +46 -0
  334. package/dist/spec/catalogs/layouts/list-6x-itemimage-title-center.json +51 -0
  335. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-center.json +51 -0
  336. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-left.json +51 -0
  337. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical.json +46 -0
  338. package/dist/spec/catalogs/layouts/list-6x-title-center.json +50 -0
  339. package/dist/spec/catalogs/layouts/list-6x-vertical-title-center.json +50 -0
  340. package/dist/spec/catalogs/layouts/list-6x-vertical-title-left.json +50 -0
  341. package/dist/spec/catalogs/layouts/list-6x-vertical.json +45 -0
  342. package/dist/spec/catalogs/layouts/list-6x.json +16 -0
  343. package/dist/spec/catalogs/layouts/logic-tree.json +9 -15
  344. package/dist/spec/catalogs/layouts/market-size.json +9 -15
  345. package/dist/spec/catalogs/layouts/matrix-quadrant.json +9 -15
  346. package/dist/spec/catalogs/layouts/media-1x.json +11 -1
  347. package/dist/spec/catalogs/layouts/network-dependency-map.json +10 -15
  348. package/dist/spec/catalogs/layouts/number-1x-box-title-center.json +30 -0
  349. package/dist/spec/catalogs/layouts/number-1x-box.json +25 -0
  350. package/dist/spec/catalogs/layouts/number-1x-title-center.json +29 -0
  351. package/dist/spec/catalogs/layouts/number-1x.json +16 -1
  352. package/dist/spec/catalogs/layouts/number-2x-box-title-center.json +36 -0
  353. package/dist/spec/catalogs/layouts/number-2x-box.json +31 -0
  354. package/dist/spec/catalogs/layouts/number-2x-title-center.json +35 -0
  355. package/dist/spec/catalogs/layouts/number-2x.json +15 -0
  356. package/dist/spec/catalogs/layouts/number-3x-box-title-center.json +39 -0
  357. package/dist/spec/catalogs/layouts/number-3x-box.json +34 -0
  358. package/dist/spec/catalogs/layouts/number-3x-title-center.json +38 -0
  359. package/dist/spec/catalogs/layouts/number-3x.json +15 -0
  360. package/dist/spec/catalogs/layouts/number-4x-box-title-center.json +43 -0
  361. package/dist/spec/catalogs/layouts/number-4x-box.json +38 -0
  362. package/dist/spec/catalogs/layouts/number-4x-title-center.json +42 -0
  363. package/dist/spec/catalogs/layouts/number-4x.json +15 -0
  364. package/dist/spec/catalogs/layouts/number-5x-box-title-center.json +46 -0
  365. package/dist/spec/catalogs/layouts/number-5x-box.json +41 -0
  366. package/dist/spec/catalogs/layouts/number-5x-title-center.json +45 -0
  367. package/dist/spec/catalogs/layouts/number-5x.json +15 -0
  368. package/dist/spec/catalogs/layouts/number-6x-box-title-center.json +49 -0
  369. package/dist/spec/catalogs/layouts/number-6x-box.json +44 -0
  370. package/dist/spec/catalogs/layouts/number-6x-title-center.json +48 -0
  371. package/dist/spec/catalogs/layouts/number-6x.json +15 -0
  372. package/dist/spec/catalogs/layouts/one-column-explainer.json +9 -15
  373. package/dist/spec/catalogs/layouts/org-chart.json +9 -15
  374. package/dist/spec/catalogs/layouts/persona-grid.json +11 -16
  375. package/dist/spec/catalogs/layouts/photo-grid.json +14 -19
  376. package/dist/spec/catalogs/layouts/pricing-table.json +9 -15
  377. package/dist/spec/catalogs/layouts/process-flow.json +9 -15
  378. package/dist/spec/catalogs/layouts/product-feature.json +11 -16
  379. package/dist/spec/catalogs/layouts/pros-cons.json +9 -15
  380. package/dist/spec/catalogs/layouts/qa-discussion.json +7 -15
  381. package/dist/spec/catalogs/layouts/quote-1x.json +11 -1
  382. package/dist/spec/catalogs/layouts/quote-highlight.json +9 -15
  383. package/dist/spec/catalogs/layouts/raci-matrix.json +9 -15
  384. package/dist/spec/catalogs/layouts/risk-heatmap.json +9 -15
  385. package/dist/spec/catalogs/layouts/roadmap.json +9 -15
  386. package/dist/spec/catalogs/layouts/screenshot-walkthrough.json +11 -16
  387. package/dist/spec/catalogs/layouts/section-divider.json +8 -15
  388. package/dist/spec/catalogs/layouts/single-message-statement.json +8 -15
  389. package/dist/spec/catalogs/layouts/stats-metrics.json +9 -15
  390. package/dist/spec/catalogs/layouts/status-rag.json +9 -15
  391. package/dist/spec/catalogs/layouts/swimlane-process.json +11 -16
  392. package/dist/spec/catalogs/layouts/swot-analysis.json +9 -15
  393. package/dist/spec/catalogs/layouts/table-1x.json +10 -0
  394. package/dist/spec/catalogs/layouts/team-bio.json +11 -16
  395. package/dist/spec/catalogs/layouts/testimonial-grid.json +9 -15
  396. package/dist/spec/catalogs/layouts/text-1x-box-title-center.json +31 -0
  397. package/dist/spec/catalogs/layouts/text-1x-box-title-left.json +31 -0
  398. package/dist/spec/catalogs/layouts/text-1x-center-box-title-center.json +31 -0
  399. package/dist/spec/catalogs/layouts/text-1x-center-box-title-left.json +31 -0
  400. package/dist/spec/catalogs/layouts/text-1x-center-box.json +26 -0
  401. package/dist/spec/catalogs/layouts/text-1x-center-title-center.json +30 -0
  402. package/dist/spec/catalogs/layouts/text-1x-center-title-left.json +30 -0
  403. package/dist/spec/catalogs/layouts/text-1x-center.json +25 -0
  404. package/dist/spec/catalogs/layouts/text-1x-left-box.json +26 -0
  405. package/dist/spec/catalogs/layouts/text-1x-title-center.json +30 -0
  406. package/dist/spec/catalogs/layouts/text-1x.json +11 -1
  407. package/dist/spec/catalogs/layouts/text-2x-box-title-center.json +37 -0
  408. package/dist/spec/catalogs/layouts/text-2x-box-vertical-title-left.json +37 -0
  409. package/dist/spec/catalogs/layouts/text-2x-center-box-title-center.json +37 -0
  410. package/dist/spec/catalogs/layouts/text-2x-center-box-vertical-title-left.json +37 -0
  411. package/dist/spec/catalogs/layouts/text-2x-center-box.json +32 -0
  412. package/dist/spec/catalogs/layouts/text-2x-center-title-center.json +36 -0
  413. package/dist/spec/catalogs/layouts/text-2x-center-vertical-title-left.json +36 -0
  414. package/dist/spec/catalogs/layouts/text-2x-center.json +31 -0
  415. package/dist/spec/catalogs/layouts/text-2x-left-box.json +32 -0
  416. package/dist/spec/catalogs/layouts/text-2x-title-center.json +36 -0
  417. package/dist/spec/catalogs/layouts/text-2x-vertical-title-left.json +36 -0
  418. package/dist/spec/catalogs/layouts/text-2x.json +10 -0
  419. package/dist/spec/catalogs/layouts/text-3x-box-title-center.json +40 -0
  420. package/dist/spec/catalogs/layouts/text-3x-box-vertical-title-left.json +41 -0
  421. package/dist/spec/catalogs/layouts/text-3x-center-box-title-center.json +40 -0
  422. package/dist/spec/catalogs/layouts/text-3x-center-box-vertical-title-left.json +41 -0
  423. package/dist/spec/catalogs/layouts/text-3x-center-box.json +35 -0
  424. package/dist/spec/catalogs/layouts/text-3x-center-title-center.json +39 -0
  425. package/dist/spec/catalogs/layouts/text-3x-center-vertical-title-left.json +40 -0
  426. package/dist/spec/catalogs/layouts/text-3x-center.json +34 -0
  427. package/dist/spec/catalogs/layouts/text-3x-left-box.json +35 -0
  428. package/dist/spec/catalogs/layouts/text-3x-left.json +34 -0
  429. package/dist/spec/catalogs/layouts/text-3x-title-center.json +39 -0
  430. package/dist/spec/catalogs/layouts/text-3x-vertical-title-left.json +40 -0
  431. package/dist/spec/catalogs/layouts/text-3x.json +10 -0
  432. package/dist/spec/catalogs/layouts/thank-you-cta.json +8 -15
  433. package/dist/spec/catalogs/layouts/three-column.json +9 -15
  434. package/dist/spec/catalogs/layouts/timeline-1x.json +11 -1
  435. package/dist/spec/catalogs/layouts/timeline.json +9 -15
  436. package/dist/spec/catalogs/layouts/title-center-box.json +27 -0
  437. package/dist/spec/catalogs/layouts/title-center-image-bottom.json +34 -0
  438. package/dist/spec/catalogs/layouts/title-center-image-top.json +34 -0
  439. package/dist/spec/catalogs/layouts/title-center.json +26 -0
  440. package/dist/spec/catalogs/layouts/title-left-image-bottom.json +34 -0
  441. package/dist/spec/catalogs/layouts/title-left-image-left.json +34 -0
  442. package/dist/spec/catalogs/layouts/title-left-image-right.json +34 -0
  443. package/dist/spec/catalogs/layouts/title-left-image-top.json +34 -0
  444. package/dist/spec/catalogs/layouts/title-slide.json +8 -15
  445. package/dist/spec/catalogs/layouts/title-subtitle.json +11 -1
  446. package/dist/spec/catalogs/layouts/title.json +11 -1
  447. package/dist/spec/catalogs/layouts/two-column.json +9 -15
  448. package/dist/spec/catalogs/layouts/venn-overlap.json +9 -15
  449. package/dist/spec/catalogs/layouts/waterfall-bridge.json +9 -15
  450. package/dist/spec/catalogs/layouts/wheel-radial.json +9 -15
  451. package/dist/spec/catalogs/manifest.json +22 -22
  452. package/dist/spec/catalogs/narratives/board-meeting.json +45 -45
  453. package/dist/spec/catalogs/narratives/business-narrative.json +19 -19
  454. package/dist/spec/catalogs/narratives/business-review.json +27 -27
  455. package/dist/spec/catalogs/narratives/capacity-planning.json +19 -19
  456. package/dist/spec/catalogs/narratives/challenge-resolution.json +17 -17
  457. package/dist/spec/catalogs/narratives/change-story.json +13 -13
  458. package/dist/spec/catalogs/narratives/classic-story.json +17 -17
  459. package/dist/spec/catalogs/narratives/company-intro.json +21 -21
  460. package/dist/spec/catalogs/narratives/conference-talk.json +4 -4
  461. package/dist/spec/catalogs/narratives/data-story.json +13 -14
  462. package/dist/spec/catalogs/narratives/early-startup-pitch.json +27 -27
  463. package/dist/spec/catalogs/narratives/educate.json +21 -21
  464. package/dist/spec/catalogs/narratives/employee-review.json +19 -19
  465. package/dist/spec/catalogs/narratives/failure-analysis.json +23 -23
  466. package/dist/spec/catalogs/narratives/focus.json +27 -27
  467. package/dist/spec/catalogs/narratives/golden-circle.json +4 -4
  468. package/dist/spec/catalogs/narratives/heros-journey.json +13 -13
  469. package/dist/spec/catalogs/narratives/index.json +145 -145
  470. package/dist/spec/catalogs/narratives/innovation.json +21 -21
  471. package/dist/spec/catalogs/narratives/justice.json +25 -25
  472. package/dist/spec/catalogs/narratives/marketing-strategy.json +25 -25
  473. package/dist/spec/catalogs/narratives/performance-improvement-plan.json +19 -19
  474. package/dist/spec/catalogs/narratives/performance-review.json +25 -25
  475. package/dist/spec/catalogs/narratives/persuade.json +17 -17
  476. package/dist/spec/catalogs/narratives/persuasive-sales.json +19 -19
  477. package/dist/spec/catalogs/narratives/pitch-deck.json +6 -6
  478. package/dist/spec/catalogs/narratives/problem-solution.json +5 -5
  479. package/dist/spec/catalogs/narratives/product-launch.json +23 -23
  480. package/dist/spec/catalogs/narratives/project-proposal.json +23 -23
  481. package/dist/spec/catalogs/narratives/pyramid-principle.json +9 -9
  482. package/dist/spec/catalogs/narratives/qbr.json +8 -8
  483. package/dist/spec/catalogs/narratives/rags-to-riches.json +17 -17
  484. package/dist/spec/catalogs/narratives/reveal.json +19 -19
  485. package/dist/spec/catalogs/narratives/scqa.json +4 -4
  486. package/dist/spec/catalogs/narratives/situation-complication-resolution.json +11 -11
  487. package/dist/spec/catalogs/narratives/sparkline.json +11 -11
  488. package/dist/spec/catalogs/narratives/star-method.json +11 -11
  489. package/dist/spec/catalogs/narratives/status-update.json +15 -15
  490. package/dist/spec/catalogs/narratives/strategic-advisory.json +17 -17
  491. package/dist/spec/catalogs/narratives/strategic-narrative.json +4 -4
  492. package/dist/spec/catalogs/narratives/survey-analysis.json +23 -23
  493. package/dist/spec/catalogs/narratives/survival-story.json +23 -23
  494. package/dist/spec/catalogs/narratives/transformation-arc.json +4 -4
  495. package/dist/spec/catalogs/narratives/trend-analysis.json +17 -17
  496. package/dist/spec/catalogs/narratives/underdog-victory.json +19 -19
  497. package/dist/spec/catalogs/narratives/venture-pitch.json +27 -27
  498. package/dist/spec/catalogs/narratives/vision-roadmap.json +13 -13
  499. package/dist/spec/catalogs/narratives/weekly-progress.json +23 -23
  500. package/dist/spec/catalogs/narratives/what-so-what-now-what.json +9 -9
  501. package/dist/spec/openapi.yaml +4 -7
  502. package/dist/spec/reference/engine-defaults.json +22 -30
  503. package/dist/spec/reference/engine-vocabularies.json +1577 -0
  504. package/dist/spec/schemas/audience.schema.json +6 -27
  505. package/dist/spec/schemas/catalog-index.schema.json +2 -2
  506. package/dist/spec/schemas/catalog-manifest.schema.json +3 -3
  507. package/dist/spec/schemas/chart-type.schema.json +17 -321
  508. package/dist/spec/schemas/color-scheme.schema.json +23 -36
  509. package/dist/spec/schemas/finding.schema.json +191 -0
  510. package/dist/spec/schemas/font-scheme.schema.json +17 -75
  511. package/dist/spec/schemas/language.schema.json +7 -28
  512. package/dist/spec/schemas/layout.schema.json +130 -184
  513. package/dist/spec/schemas/narrative.schema.json +20 -48
  514. package/dist/spec/schemas/opf.schema.json +678 -701
  515. package/dist/spec/schemas/purpose.schema.json +5 -26
  516. package/dist/spec/schemas/social-platform.schema.json +2 -48
  517. package/dist/spec/schemas/theme.schema.json +13 -38
  518. package/dist/spec/schemas/tone.schema.json +4 -25
  519. package/dist/spec-files.d.ts +1 -1
  520. package/dist/spec-files.js +1 -1
  521. package/dist/symbol-font-encodings.js +18448 -1
  522. package/dist/types.d.ts +1125 -4
  523. package/dist/validation-types-BOcY9GTs.d.ts +276 -0
  524. package/dist/validator.d.ts +63 -4
  525. package/dist/validator.js +5 -5
  526. package/dist/yaml.d.ts +102 -0
  527. package/dist/yaml.js +322 -0
  528. package/package.json +9 -17
  529. package/dist/audit.d.ts +0 -35
  530. package/dist/audit.js +0 -7
  531. package/dist/catalogs-ywCamd8C.d.ts +0 -1465
  532. package/dist/catalogs.d.ts +0 -2
  533. package/dist/catalogs.js +0 -2
  534. package/dist/chunk-7N4VMAT4.js +0 -1694
  535. package/dist/chunk-FYLJVF7X.js +0 -18448
  536. package/dist/chunk-INU7ZNSB.js +0 -670
  537. package/dist/chunk-IYCJUKWD.js +0 -951
  538. package/dist/chunk-PIQXLBBJ.js +0 -445
  539. package/dist/chunk-S5W34SIJ.js +0 -1
  540. package/dist/lint-B7azdiuE.d.ts +0 -197
  541. package/dist/lint.d.ts +0 -7
  542. package/dist/lint.js +0 -6
  543. package/dist/previews.d.ts +0 -40
  544. package/dist/previews.js +0 -1
  545. package/dist/schemas-BbPonsTz.d.ts +0 -270
  546. package/dist/spec/catalogs/audiences/customers.json +0 -27
  547. package/dist/spec/catalogs/audiences/executives.json +0 -27
  548. package/dist/spec/catalogs/audiences/investors.json +0 -27
  549. package/dist/spec/catalogs/audiences/marketing-team.json +0 -27
  550. package/dist/spec/catalogs/audiences/regulators.json +0 -27
  551. package/dist/spec/catalogs/audiences/sales-team.json +0 -27
  552. package/dist/spec/catalogs/chart-types/100pct-bullet-bar-2x.json +0 -91
  553. package/dist/spec/catalogs/chart-types/100pct-bullet-bar-3x.json +0 -103
  554. package/dist/spec/catalogs/chart-types/100pct-bullet-bar.json +0 -79
  555. package/dist/spec/catalogs/chart-types/100pct-bullet-column-2x.json +0 -91
  556. package/dist/spec/catalogs/chart-types/100pct-bullet-column-3x.json +0 -103
  557. package/dist/spec/catalogs/chart-types/100pct-bullet-column.json +0 -79
  558. package/dist/spec/catalogs/chart-types/100pct-progress-bar.json +0 -105
  559. package/dist/spec/catalogs/chart-types/100pct-stacked-area-2x.json +0 -106
  560. package/dist/spec/catalogs/chart-types/100pct-stacked-area-3x.json +0 -123
  561. package/dist/spec/catalogs/chart-types/100pct-stacked-bar-2x.json +0 -89
  562. package/dist/spec/catalogs/chart-types/100pct-stacked-bar-3x.json +0 -100
  563. package/dist/spec/catalogs/chart-types/100pct-stacked-column-2x.json +0 -95
  564. package/dist/spec/catalogs/chart-types/100pct-stacked-column-3x.json +0 -108
  565. package/dist/spec/catalogs/chart-types/australia.json +0 -76
  566. package/dist/spec/catalogs/chart-types/box-and-whisker-2x.json +0 -136
  567. package/dist/spec/catalogs/chart-types/box-and-whisker-3x.json +0 -168
  568. package/dist/spec/catalogs/chart-types/bullet-bar-2x.json +0 -89
  569. package/dist/spec/catalogs/chart-types/bullet-bar-3x.json +0 -101
  570. package/dist/spec/catalogs/chart-types/bullet-bar.json +0 -77
  571. package/dist/spec/catalogs/chart-types/bullet-column-2x.json +0 -89
  572. package/dist/spec/catalogs/chart-types/bullet-column-3x.json +0 -101
  573. package/dist/spec/catalogs/chart-types/bullet-column.json +0 -77
  574. package/dist/spec/catalogs/chart-types/canada.json +0 -86
  575. package/dist/spec/catalogs/chart-types/clustered-bar-2x.json +0 -89
  576. package/dist/spec/catalogs/chart-types/clustered-column.json +0 -95
  577. package/dist/spec/catalogs/chart-types/dot-plot-2x.json +0 -99
  578. package/dist/spec/catalogs/chart-types/dot-plot-3x.json +0 -124
  579. package/dist/spec/catalogs/chart-types/dot-plot-4x.json +0 -149
  580. package/dist/spec/catalogs/chart-types/dot-plot-5x.json +0 -174
  581. package/dist/spec/catalogs/chart-types/dot-plot-6x.json +0 -199
  582. package/dist/spec/catalogs/chart-types/dot-plot.json +0 -74
  583. package/dist/spec/catalogs/chart-types/dumbbell.json +0 -120
  584. package/dist/spec/catalogs/chart-types/line-2x.json +0 -105
  585. package/dist/spec/catalogs/chart-types/line-3x.json +0 -127
  586. package/dist/spec/catalogs/chart-types/line-with-high-low-and-markers.json +0 -144
  587. package/dist/spec/catalogs/chart-types/line-with-high-low.json +0 -144
  588. package/dist/spec/catalogs/chart-types/line-with-markers-2x.json +0 -106
  589. package/dist/spec/catalogs/chart-types/line-with-markers-3x.json +0 -128
  590. package/dist/spec/catalogs/chart-types/sparkline-2x.json +0 -138
  591. package/dist/spec/catalogs/chart-types/sparkline-3x.json +0 -174
  592. package/dist/spec/catalogs/chart-types/sparkline-4x.json +0 -210
  593. package/dist/spec/catalogs/chart-types/sparkline-5x.json +0 -246
  594. package/dist/spec/catalogs/chart-types/sparkline-6x.json +0 -282
  595. package/dist/spec/catalogs/chart-types/sparkline.json +0 -102
  596. package/dist/spec/catalogs/chart-types/stacked-area-2x.json +0 -106
  597. package/dist/spec/catalogs/chart-types/stacked-area-3x.json +0 -123
  598. package/dist/spec/catalogs/chart-types/stacked-bar-2x.json +0 -89
  599. package/dist/spec/catalogs/chart-types/stacked-bar-3x.json +0 -100
  600. package/dist/spec/catalogs/chart-types/stacked-column-2x.json +0 -95
  601. package/dist/spec/catalogs/chart-types/stacked-column-3x.json +0 -108
  602. package/dist/spec/catalogs/chart-types/stacked-line-2x.json +0 -106
  603. package/dist/spec/catalogs/chart-types/stacked-line-3x.json +0 -123
  604. package/dist/spec/catalogs/chart-types/stacked-line-with-markers-2x.json +0 -107
  605. package/dist/spec/catalogs/chart-types/stacked-line-with-markers-3x.json +0 -124
  606. package/dist/spec/catalogs/chart-types/treemap-2x.json +0 -101
  607. package/dist/spec/catalogs/chart-types/treemap-3x.json +0 -122
  608. package/dist/spec/catalogs/chart-types/united-kingdom.json +0 -68
  609. package/dist/spec/catalogs/chart-types/united-states.json +0 -82
  610. package/dist/spec/catalogs/layouts/image-bleed.json +0 -10
  611. package/dist/validator-CIylxoIm.d.ts +0 -172
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Inline audience metadata for the presentation. Use 'id' to reference an audiences catalog record and override selected fields, or use 'name' for a custom inline audience.
2
+ * Inline audience metadata for the presentation. Use 'id' to reference an audiences record (a bare id or 'name:id') and override selected fields, or use 'name' for a custom inline audience.
3
3
  *
4
4
  * This interface was referenced by `Presentation`'s JSON-Schema
5
5
  * via the `definition` "Audience".
6
6
  */
7
7
  type Audience = (Audience1 & {
8
8
  /**
9
- * Optional audiences catalog id to resolve before applying inline overrides.
9
+ * Optional audiences reference (a bare id or 'name:id') resolved before applying the inline overrides.
10
10
  */
11
11
  id?: string;
12
12
  /**
@@ -38,11 +38,11 @@ type Audience = (Audience1 & {
38
38
  */
39
39
  attentionBudgetMinutes?: number;
40
40
  /**
41
- * Soft cross-link: narrative-catalog ids that work well for this audience.
41
+ * Soft cross-link: narrative ids that work well for this audience, for picker UIs. Never resolved, embedded or validated as references.
42
42
  */
43
43
  recommendedNarratives?: string[];
44
44
  /**
45
- * Soft cross-link: tone-catalog ids that work well for this audience.
45
+ * Soft cross-link: tone ids that work well for this audience, for picker UIs. Never resolved, embedded or validated as references.
46
46
  */
47
47
  recommendedTones?: string[];
48
48
  /**
@@ -55,14 +55,14 @@ type Audience1 = {
55
55
  [k: string]: unknown;
56
56
  };
57
57
  /**
58
- * Inline purpose metadata for the presentation. Use 'id' to reference a purposes catalog record and override selected fields, or use 'name' for a custom inline purpose.
58
+ * Inline purpose metadata for the presentation. Use 'id' to reference a purposes record (a bare id or 'name:id') and override selected fields, or use 'name' for a custom inline purpose.
59
59
  *
60
60
  * This interface was referenced by `Presentation`'s JSON-Schema
61
61
  * via the `definition` "Purpose".
62
62
  */
63
63
  type Purpose = (Purpose1 & {
64
64
  /**
65
- * Optional purposes catalog id to resolve before applying inline overrides.
65
+ * Optional purposes reference (a bare id or 'name:id') resolved before applying the inline overrides.
66
66
  */
67
67
  id?: string;
68
68
  /**
@@ -86,11 +86,11 @@ type Purpose = (Purpose1 & {
86
86
  */
87
87
  successCriteria?: string[];
88
88
  /**
89
- * Soft cross-link: narrative-catalog ids that work well for this purpose.
89
+ * Soft cross-link: narrative ids that work well for this purpose, for picker UIs. Never resolved, embedded or validated as references.
90
90
  */
91
91
  recommendedNarratives?: string[];
92
92
  /**
93
- * Soft cross-link: tone-catalog ids that work well for this purpose.
93
+ * Soft cross-link: tone ids that work well for this purpose, for picker UIs. Never resolved, embedded or validated as references.
94
94
  */
95
95
  recommendedTones?: string[];
96
96
  /**
@@ -103,74 +103,28 @@ type Purpose1 = {
103
103
  [k: string]: unknown;
104
104
  };
105
105
  /**
106
- * Inline language metadata for the presentation. Use 'id' to reference a languages catalog record and override selected fields, or use 'bcp47' for a custom language tag without a catalog record.
106
+ * A BCP-47 language tag ('en-US', 'ja', 'zh-Hans', 'sr-Latn-ME'), an engine vocabulary. Use 'en-GB' for UK English; 'en-UK' is not a valid region.
107
107
  *
108
108
  * This interface was referenced by `Presentation`'s JSON-Schema
109
- * via the `definition` "Language".
109
+ * via the `definition` "LanguageTag".
110
110
  */
111
- type Language = (Language1 & {
112
- /**
113
- * Optional languages catalog id to resolve before applying inline overrides.
114
- */
115
- id?: string;
116
- /**
117
- * Human-readable language name.
118
- */
119
- name?: string;
120
- /**
121
- * BCP-47 language tag used for locale-aware rendering, proofing, and accessibility metadata. Use 'en-GB' for UK English; 'en-UK' is not a valid BCP-47 region form.
122
- */
123
- bcp47?: string;
124
- /**
125
- * Curated culture tag for OOXML text-run language attributes (a:rPr/@lang, a:endParaRPr/@lang), in the language-[Script-]REGION form Office recognizes (e.g. 'ja-JP', 'ar-SA', 'ms-MY', 'nb-NO', 'fil-PH', 'zh-CN'). Engines emit it instead of 'bcp47' when the document names the language by catalog id or by a tag without a region; a region-bearing tag written by the author is emitted as written. Curated rather than inferred so output does not depend on the runtime's locale data.
126
- */
127
- ooxmlLang?: string;
128
- /**
129
- * ISO 639-3 or 639-2 language code carried for engines that prefer ISO codes.
130
- */
131
- code?: string;
132
- /**
133
- * Base text direction for the language. When omitted, engines derive it from the script: Arabic (Arab), Hebrew (Hebr), Syriac (Syrc), Thaana (Thaa), N'Ko (Nkoo), Adlam (Adlm), Samaritan (Samr), Mandaic (Mand) and Hanifi Rohingya (Rohg) are right-to-left; every other script is left-to-right. Bundled language records state it explicitly.
134
- */
135
- direction?: ("ltr" | "rtl");
136
- /**
137
- * ISO 15924 script code of the language's writing system. The script selects the OOXML font slot the language's text uses: East Asian scripts (Hans, Hant, Hani, Jpan, Kore, Hang, Hira, Kana, Bopo, Yiii) use the eastAsian slot; complex scripts (for example Arab, Hebr, Syrc, Thaa, Deva, Beng, Guru, Gujr, Orya, Taml, Telu, Knda, Mlym, Sinh, Thai, Laoo, Tibt, Mymr, Khmr, Mong) use the complexScript slot; every other script (Latn, Cyrl, Grek, Armn, Geor, Ethi, ...) uses the latin slot. When omitted, engines infer it from the BCP-47 tag. Bundled language records state it explicitly. See docs/programs/font-fidelity-everywhere/script-font-model.md.
138
- */
139
- script?: string;
140
- /**
141
- * Default font-scheme id for this language when targeting PowerPoint output. Resolves against catalogs.fontSchemes the same way design.fontScheme or design.fontScheme.id does. Its major/minor families fill the language's script slot (eastAsian or complexScript, chosen by 'script') unless the effective design font scheme sets that slot itself; the latin slot always follows the design font scheme.
142
- */
143
- fontScheme?: string;
144
- /**
145
- * Default font-scheme id for this language when targeting Google Slides output. Resolves against catalogs.fontSchemes the same way design.fontScheme or design.fontScheme.id does. Used in place of 'fontScheme' when resolving script fonts for Google Slides output.
146
- */
147
- googleFontScheme?: string;
148
- /**
149
- * One-sentence note about coverage or font defaults.
150
- */
151
- summary?: string;
152
- /**
153
- * Longer prose describing the language record and any font-pairing rationale.
154
- */
155
- description?: string;
156
- /**
157
- * Free-form labels for filtering and search.
158
- */
159
- tags?: string[];
160
- [k: string]: unknown;
161
- });
162
- type Language1 = {
163
- [k: string]: unknown;
164
- };
111
+ type LanguageTag = string;
112
+ /**
113
+ * A content reference: a bare id ('two-column') or 'name:id' ('acme:hero'), where the prefix names a group of 'catalogs'. URLs and 'pkg:' strings are not references; a named catalog group replaces them. See Catalogs for the resolution order.
114
+ *
115
+ * This interface was referenced by `Presentation`'s JSON-Schema
116
+ * via the `definition` "CatalogReference".
117
+ */
118
+ type CatalogReference = string;
165
119
  /**
166
- * Inline tone metadata for the presentation. Use 'id' to reference a tones catalog record and override selected fields, or use 'name' for a custom inline tone.
120
+ * Inline tone metadata for the presentation. Use 'id' to reference a tones record (a bare id or 'name:id') and override selected fields, or use 'name' for a custom inline tone.
167
121
  *
168
122
  * This interface was referenced by `Presentation`'s JSON-Schema
169
123
  * via the `definition` "Tone".
170
124
  */
171
125
  type Tone = (Tone1 & {
172
126
  /**
173
- * Optional tones catalog id to resolve before applying inline overrides.
127
+ * A content reference: a bare id ('two-column') or 'name:id' ('acme:hero'), where the prefix names a group of 'catalogs'. URLs and 'pkg:' strings are not references; a named catalog group replaces them. See Catalogs for the resolution order.
174
128
  */
175
129
  id?: string;
176
130
  /**
@@ -198,7 +152,7 @@ type Tone = (Tone1 & {
198
152
  */
199
153
  samplePhrases?: string[];
200
154
  /**
201
- * Soft cross-link: narrative-catalog ids this tone pairs well with.
155
+ * Soft cross-link: narrative ids this tone pairs well with, for picker UIs. Never resolved, embedded or validated as references.
202
156
  */
203
157
  recommendedNarratives?: string[];
204
158
  /**
@@ -211,12 +165,19 @@ type Tone1 = {
211
165
  [k: string]: unknown;
212
166
  };
213
167
  /**
214
- * String shorthand for a background. Theme slots ('light1', 'light2', 'dark1', 'dark2') are equivalent to { type: 'theme', slot: value }; hex colors are equivalent to { type: 'solid', color: value }.
168
+ * Named dimension preset; chooses both aspect ratio and physical size. 'widescreen' is an alias for 16:9 in PowerPoint widescreen size; 'standard' is an alias for 4:3 in PowerPoint standard size. The social-feed ratios keep the widescreen short edge of 7.5 in: 1:1 is 7.5 x 7.5 in, 4:5 is 7.5 x 9.375 in and 9:16 is 7.5 x 13.333 in (portrait).
169
+ *
170
+ * This interface was referenced by `Presentation`'s JSON-Schema
171
+ * via the `definition` "DimensionPreset".
172
+ */
173
+ type DimensionPreset = ("16:9" | "4:3" | "16:10" | "1:1" | "4:5" | "9:16" | "letter" | "a4" | "widescreen" | "standard");
174
+ /**
175
+ * String shorthand for a background. Theme slots ('light1', 'light2', 'dark1', 'dark2') are equivalent to { type: 'theme', slot: value }; hex colors are equivalent to { type: 'solid', color: value }; an image source (starting with 'asset:', 'https://', 'data:', './' or '../') is equivalent to { type: 'image', src: value }, a cover image. Any other string is invalid.
215
176
  *
216
177
  * This interface was referenced by `Presentation`'s JSON-Schema
217
178
  * via the `definition` "BackgroundShortcut".
218
179
  */
219
- type BackgroundShortcut = (ThemeBackgroundSlot | HexColor);
180
+ type BackgroundShortcut = (ThemeBackgroundSlot | HexColor | ImageSource);
220
181
  /**
221
182
  * PowerPoint theme-controlled slide background slot from the active color scheme. These are slots, not assumptions about actual colors: light1 is usually white and dark1 is usually black by convention, but the color scheme controls the real values.
222
183
  *
@@ -232,21 +193,21 @@ type ThemeBackgroundSlot = ("light1" | "light2" | "dark1" | "dark2");
232
193
  */
233
194
  type HexColor = string;
234
195
  /**
235
- * Background fill applied to slides. Theme backgrounds preserve PowerPoint's color-scheme background choice; other variants represent fixed background fills.
196
+ * An image source in a string shorthand: an 'asset:<id>' reference, an HTTPS URL, a data URI, or a relative path starting with './' or '../' (resolved against the OPF file location).
236
197
  *
237
198
  * This interface was referenced by `Presentation`'s JSON-Schema
238
- * via the `definition` "Background".
199
+ * via the `definition` "ImageSource".
239
200
  */
240
- type Background = (ThemeBackground | SolidBackground | GradientBackground | ImageBackground | PatternBackground);
201
+ type ImageSource = string;
241
202
  /**
242
- * Named dimension preset; chooses both aspect ratio and physical size. 'widescreen' is an alias for 16:9 in PowerPoint widescreen size; 'standard' is an alias for 4:3 in PowerPoint standard size.
203
+ * Background fill applied to slides. Theme backgrounds preserve PowerPoint's color-scheme background choice; other variants represent fixed background fills.
243
204
  *
244
205
  * This interface was referenced by `Presentation`'s JSON-Schema
245
- * via the `definition` "DimensionPreset".
206
+ * via the `definition` "Background".
246
207
  */
247
- type DimensionPreset = ("16:9" | "4:3" | "16:10" | "letter" | "a4" | "widescreen" | "standard");
208
+ type Background = (ThemeBackground | SolidBackground | GradientBackground | ImageBackground | PatternBackground);
248
209
  /**
249
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
210
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
250
211
  *
251
212
  * This interface was referenced by `Presentation`'s JSON-Schema
252
213
  * via the `definition` "Asset".
@@ -272,11 +233,30 @@ type Asset = (string | {
272
233
  * Optional MIME media type when it cannot be inferred from src.
273
234
  */
274
235
  mediaType?: string;
236
+ });
237
+ /**
238
+ * Decorative watermark: an image ('src') or a text stamp ('text'), exactly one of the two, with its opacity. An image is drawn once per slide, contained and centered in a fixed frame (the middle 40% of the slide width and height, from 30% to 70% on each axis). A text watermark is one line of text in the heading font and the theme text color at the given opacity, centered on the slide and rotated 30 degrees counterclockwise (rising to the right), sized to span at most 70% of the slide width and at most 30% of the shorter slide edge in height; it is drawn behind the slide content and above the background. There is no option to move, scale, rotate or tile either form. PPTX export writes one native picture (image) or one native text box (text) per slide with the opacity as alpha, and import restores the watermark. A string or Asset (no opacity) is the image watermark at opacity 0.08. A watermark object needs opacity and exactly one of src and text; use a plain string or Asset for an image at the default opacity. Use design.watermark = false to disable an inherited watermark.
239
+ *
240
+ * This interface was referenced by `Presentation`'s JSON-Schema
241
+ * via the `definition` "Watermark".
242
+ */
243
+ type Watermark = ({
275
244
  /**
276
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
245
+ * Source for the watermark image: an 'asset:<id>' reference, HTTPS URL, data URI, relative path or local path, as for Asset.src. Exactly one of src and text is set.
277
246
  */
278
- format?: string;
279
- });
247
+ src?: string;
248
+ /**
249
+ * Text for a text watermark, such as DRAFT or CONFIDENTIAL; line breaks are drawn as spaces. Exactly one of src and text is set.
250
+ */
251
+ text?: string;
252
+ /**
253
+ * Watermark opacity from 0 (fully transparent) to 1 (fully opaque).
254
+ */
255
+ opacity: number;
256
+ } & Watermark1);
257
+ type Watermark1 = {
258
+ [k: string]: unknown;
259
+ };
280
260
  /**
281
261
  * A single named variable: a hex string (shorthand for a color variable) or an object whose 'type' is color, text, number, date, image, url or list. 'value' is the current value and is optional: a variable with no value is unfilled, which a template allows and a normal deck does not. 'example' only illustrates the slot (fill forms, template previews) and never reaches output.
282
262
  *
@@ -320,11 +300,19 @@ type TextRun = (string | {
320
300
  */
321
301
  fontSize?: number;
322
302
  /**
323
- * Run font family override.
303
+ * Run font family override. It wins over the code font a run with 'code' takes.
324
304
  */
325
305
  fontFamily?: string;
326
306
  /**
327
- * URL to link the run text to.
307
+ * Whether the run is an inline code span: it is drawn in the design's code font (design.fontScheme.code, else the resolved font scheme's code family, else Roboto Mono), unless the run names its own fontFamily. Only the font changes; there is no background, because a PPTX run cannot have one. Markdown backticks read and write code runs.
308
+ */
309
+ code?: boolean;
310
+ /**
311
+ * BCP-47 language tag of the run, such as 'fr-FR' or 'ja-JP', when it differs from the deck language. It sets the proofing language (PPTX a:rPr lang) and the language the run's script fonts and glyph variants follow (for example the Japanese or the Simplified Chinese face for Han characters); without it the run follows the deck language.
312
+ */
313
+ lang?: string;
314
+ /**
315
+ * URL to link the run text to: an http(s) URL, a 'mailto:' address or a 'tel:' number, without whitespace. The preview draws it as a link and PPTX export writes a native hyperlink for all three; any other scheme is not valid.
328
316
  */
329
317
  link?: string;
330
318
  /**
@@ -336,11 +324,11 @@ type TextRun = (string | {
336
324
  */
337
325
  subscript?: boolean;
338
326
  /**
339
- * One or more ids from the top-level references list that this run cites. Engines draw a superscript marker ('1', or '1,2' for several ids) directly after the run and list '<n> <reference text>' in the slide's footnote area; markers are numbered per deck in order of first use, and the same id keeps its number. An id missing from references is a validation error (cite-unknown-reference). Supported in text, bullets and list item runs.
327
+ * One or more ids from the top-level references list that this run cites. Engines draw a superscript marker ('1', or '1,2' for several ids) directly after the run and list '<n> <reference text>' in the slide's footnote area; markers are numbered per deck in order of first use, and the same id keeps its number. An id missing from references is a validation error (cite-unknown-reference). Supported in text, bullets and list item runs, in the slide title, subtitle and tag, and in the quote text.
340
328
  */
341
329
  cite?: (string | [string, ...(string)[]]);
342
330
  /**
343
- * An inline note for this run, without a references entry. Engines draw a superscript marker after the run and list the note in the slide's footnote area; every footnote takes a new number in the deck's marker sequence. Supported in text, bullets and list item runs.
331
+ * An inline note for this run, without a references entry. Engines draw a superscript marker after the run and list the note in the slide's footnote area; every footnote takes a new number in the deck's marker sequence. Supported in text, bullets and list item runs, in the slide title, subtitle and tag, and in the quote text.
344
332
  */
345
333
  footnote?: (string | [TextRun, ...(TextRun)[]]);
346
334
  [k: string]: unknown;
@@ -467,7 +455,7 @@ type ContentPayload = {
467
455
  */
468
456
  numbering?: (NumberingStyle | Numbering | [(NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)]);
469
457
  /**
470
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
458
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
471
459
  */
472
460
  image?: (string | {
473
461
  /**
@@ -490,13 +478,46 @@ type ContentPayload = {
490
478
  * Optional MIME media type when it cannot be inferred from src.
491
479
  */
492
480
  mediaType?: string;
481
+ });
482
+ /**
483
+ * Image payloads only. How the picture fills its frame: 'cover' fills it and crops what overflows around focus; 'contain' shows the whole picture centered; 'stretch' scales it to the frame exactly. Default: the effective design.imageFit, else 'cover'.
484
+ */
485
+ fit?: ("cover" | "contain" | "stretch");
486
+ focus?: ImageFocus1;
487
+ /**
488
+ * Image payloads only. Width-to-height ratio of the frame: the frame becomes the largest centered box with this ratio inside the block's region, for example 2.39 for a cinematic letterbox or 0.5 for a phone-shaped frame. shape 'circle' always uses 1.
489
+ */
490
+ aspectRatio?: number;
491
+ /**
492
+ * Image payloads only. Mask applied to the frame, exported as the picture's native preset geometry (rect, roundRect, ellipse, hexagon). 'circle' makes the frame square. Default 'rectangle'.
493
+ */
494
+ shape?: ("rectangle" | "rounded" | "circle" | "hexagon");
495
+ /**
496
+ * Image payloads only. Corner radius for shape 'rounded' as a fraction of the frame's shorter side. Default 0.16667, PowerPoint's roundRect default.
497
+ */
498
+ cornerRadius?: number;
499
+ border?: ImageBorder;
500
+ /**
501
+ * Image payloads only. Picture opacity from 0 to 1, exported as a native alphaModFix. The border and overlay keep their own opacity. Default 1.
502
+ */
503
+ opacity?: number;
504
+ /**
505
+ * Image payloads only. Grayscale or duotone treatment of the picture's pixels.
506
+ */
507
+ recolor?: ("grayscale" | {
508
+ /**
509
+ * Color at luminance 0.
510
+ */
511
+ dark: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
493
512
  /**
494
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
513
+ * Color at luminance 1.
495
514
  */
496
- format?: string;
515
+ light: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
497
516
  });
517
+ overlay?: Overlay1;
518
+ placement?: ImagePlacement;
498
519
  /**
499
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
520
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
500
521
  */
501
522
  video?: (string | {
502
523
  /**
@@ -519,10 +540,6 @@ type ContentPayload = {
519
540
  * Optional MIME media type when it cannot be inferred from src.
520
541
  */
521
542
  mediaType?: string;
522
- /**
523
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
524
- */
525
- format?: string;
526
543
  });
527
544
  chart?: Chart1;
528
545
  table?: Table1;
@@ -531,11 +548,11 @@ type ContentPayload = {
531
548
  */
532
549
  code?: (string | Code);
533
550
  /**
534
- * Metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, and trend metadata. Numeric values remain numbers; renderers format them for display.
551
+ * Metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, trend, and sentiment metadata. Numeric values remain numbers; renderers format them for display.
535
552
  */
536
553
  metric?: (string | number | Metric);
537
554
  /**
538
- * Quote payload. A string is shorthand for { "text": value }; object form carries optional attribution and source metadata.
555
+ * Quote payload. A string is shorthand for { "text": value }; object form carries optional attribution, role, photo and source metadata.
539
556
  */
540
557
  quote?: (string | Quote);
541
558
  /**
@@ -583,10 +600,7 @@ type ContentPayload = {
583
600
  composition?: Composition;
584
601
  };
585
602
  /**
586
- * Catalog source location. Accepts:
587
- * - A bare URL pointing at a catalog directory (e.g. 'https://acme.com/decks/narratives'); record ids resolve to '<base>/<id>.json'.
588
- * - A URL pointing at an index file (e.g. 'https://acme.com/decks/narratives/index.json'); records are resolved relative to the index file's directory and the index entries describe what's available. Index files follow https://openpresentation.org/schema/opf-catalog-index/v1; the default catalog's index is https://www.pptx.gallery/<kind>/index.json.
589
- * - A package reference of the form 'pkg:<package>[/<subpath>]'; resolved through a locally-installed package on the engine's package path.
603
+ * Identity of a catalog: an HTTPS URL ('https://www.pptx.gallery') or a package reference ('pkg:@acme/opf-catalog'). It names the catalog; engines never fetch or install it. A host registers the catalog's records under this exact string, and copying slides between documents matches groups by it.
590
604
  *
591
605
  * This interface was referenced by `Presentation`'s JSON-Schema
592
606
  * via the `definition` "CatalogSource".
@@ -595,9 +609,9 @@ type CatalogSource = string;
595
609
  /**
596
610
  * Open-source JSON format for describing PowerPoint presentations. Agents describe narratives, content, audience, reusable assets, and design — the engine handles OOXML complexity.
597
611
  *
598
- * Fields that reference catalog records (narrative, language, tone, audience, purpose, design.theme / design.theme.id, design.colorScheme / design.colorScheme.id, design.fontScheme / design.fontScheme.id, Slide.layout, Chart.type, Organization.socials / Speaker.socials) resolve through the catalog system: inline 'catalogs.<kind>.records[]' on the document → 'catalogs.<kind>.source' on the document → engine defaults → the default catalog at https://www.pptx.gallery/<kind>. The default catalog is published by pptx.gallery: the index at https://www.pptx.gallery/<kind>/index.json (also GET https://www.pptx.gallery/<kind> with Accept: application/json) and each record at https://www.pptx.gallery/<kind>/<id>.json. Engines resolve it from the pinned snapshot bundled in @openpresentation/opf (spec/catalogs, pinned by spec/catalogs/manifest.json) and never fetch it at run time; fetching a document's catalogs.<kind>.source is an explicit opt-in by the caller. Every reference resolves to the catalog record's 'id' field. When an OPF document omits a reference entirely, the engine falls back to engine defaults (see /spec/reference/engine-defaults.json for a reference example). The defaults file is engine configuration; it is not part of the OPF document contract and has no JSON Schema.
612
+ * Content references (Slide.layout, design.theme, design.colorScheme / design.colorScheme.id, design.fontScheme / design.fontScheme.id, narrative, audience, purpose and tone, and the colorScheme / fontScheme a theme record names) point at catalog records. Each is a bare 'id' or a 'name:id' whose prefix names a group in 'catalogs'. A bare id resolves in catalogs.custom, then in the records embedded under catalogs.default, then in the catalog the host registered for catalogs.default.source (or the host's default catalog when 'default' is omitted); 'name:id' resolves in catalogs.<name>, then in the catalog the host registered for its source. A reference that resolves nowhere is the warning opf/unresolved-reference, and the slide uses automatic composition or the engine default. Engines never fetch a catalog: a saved document embeds every record it uses, and hosts register any other catalog by its source string. See docs/default-catalog.md.
599
613
  *
600
- * Most catalog references accept the bare 'id' as a string for the common case (e.g. narrative = 'classic-story', design.colorScheme = 'cool-horizon'). Audience, purpose, tone, design, and language object forms use 'id' as a base catalog reference plus inline overrides. Asset references use 'asset:<id>' strings that point into the top-level assets registry, and content color fields (rich-text runs, styled table cells) accept hex values, color-scheme slot/role names, or 'var:<id>' references into the top-level variables map.
614
+ * chart.type, the language tag and the keys of Organization.socials / Speaker.socials are engine vocabularies, validated directly with no catalog lookup. When a document names no theme, colour scheme or font scheme, every engine uses the same small engine defaults (spec/reference/engine-defaults.json). Asset references use 'asset:<id>' strings that point into the top-level assets registry, and content color fields (rich-text runs, styled table cells) accept hex values, color-scheme slot/role names, or 'var:<id>' references into the top-level variables map.
601
615
  */
602
616
  interface Presentation {
603
617
  /**
@@ -605,67 +619,68 @@ interface Presentation {
605
619
  */
606
620
  $schema?: "https://openpresentation.org/schema/opf/v1";
607
621
  /**
608
- * Display name of the presentation for GUI/TUI lists, library/search indexing, OS-level metadata, and default export filenames. This is deck identity, not slide content. Use slides[].title and slides[].subtitle for text that should appear on presented slides.
622
+ * Display name of the presentation for GUI/TUI lists, library/search indexing, OS-level metadata, and default export filenames. This is deck identity, not slide content. Use slides[].title and slides[].subtitle for text that should appear on presented slides. Also the built-in variable 'deck.name'.
609
623
  */
610
624
  name?: string;
611
625
  /**
612
- * Free-form prose describing what this presentation is about. Used by agents and humans as a deck-level summary; complements purpose (the goal) and narrative (the structured storyline). Round-trips to OOXML 'docProps/core.xml' as '<dc:description>' (PowerPoint surfaces this as the 'Comments' field in File → Properties).
626
+ * Free-form prose describing what this presentation is about. Used by agents and humans as a deck-level summary; complements purpose (the goal) and narrative (the structured storyline). Round-trips to OOXML 'docProps/core.xml' as '<dc:description>' (PowerPoint surfaces this as the 'Comments' field in File → Properties). Also the built-in variable 'deck.description'.
613
627
  */
614
628
  description?: string;
615
629
  /**
616
- * Optional base filename for exports (without extension). Engine strips a trailing .pptx, .pdf, .png, or .svg (case-insensitive) and appends the target format's extension. When omitted, the engine slugifies name when present. See /docs/opf for full validation rules.
630
+ * Optional base filename for exports (without extension). The opf CLI (render, export) and the editor strip a trailing .pptx, .pdf, .png, or .svg (case-insensitive) and append the target format's extension. When omitted, they slugify name; with no usable name the CLI uses the input file name and the editor uses 'presentation'. See /docs/opf for full validation rules.
617
631
  */
618
632
  filename?: string;
619
633
  /**
620
- * Organization associated with the presentation, usually the presenting company. Array form supports hosts, partners, clients, and sponsors. The primary organization (declared via Organization.role or, if no role is set, the first item) drives default branding such as cover-slide logo.
634
+ * Organization associated with the presentation, usually the presenting company. Array form supports hosts, partners, clients, and sponsors. The primary organization (Organization.role 'primary', else the first item) supplies the default deck logo, the 'organization' and 'socials' header/footer fields and the 'organization.<field>' built-in variables; the others are available by id as 'organization.<id>.<field>' and are not drawn automatically.
621
635
  */
622
636
  organization?: (Organization | [Organization, ...(Organization)[]]);
623
637
  /**
624
- * Person presenting the deck. Array form supports panels and multi-speaker decks. Used for cover slides, bio slides, footers, and panel attribution.
638
+ * Person presenting the deck. Array form supports panels and multi-speaker decks. The first speaker is the primary speaker: the built-in variables 'speaker.<field>' and the 'speaker' header/footer field read it, 'speakers' lists every name, and 'speaker.<id>.<field>' addresses one by id. A speaker is drawn nowhere else.
625
639
  */
626
640
  speaker?: (Speaker | [Speaker, ...(Speaker)[]]);
627
641
  /**
628
- * Optional credit for the person who authored or contributed to the deck, distinct from speaker. Array form supports multiple contributors. Round-trips to OOXML 'docProps/core.xml' as '<dc:creator>' (semicolon-joined when multiple) and seeds '<cp:lastModifiedBy>' on first write; subsequent edits in PowerPoint overwrite '<cp:lastModifiedBy>' with the editing user.
642
+ * Optional credit for the person who authored or contributed to the deck, distinct from speaker. Array form supports multiple contributors. Round-trips to OOXML 'docProps/core.xml' as '<dc:creator>' (semicolon-joined when multiple) and seeds '<cp:lastModifiedBy>' on first write; subsequent edits in PowerPoint overwrite '<cp:lastModifiedBy>' with the editing user. Also the built-in variable 'deck.author' (an array joined with ', ').
629
643
  */
630
644
  author?: (string | [string, ...(string)[]]);
631
645
  /**
632
- * Intended audiences for the presentation. Accepts either:
633
- * - A single string shorthand: free-form description ('Series B investors'), an audiences catalog id ('executive'), an HTTPS URL, or a 'pkg:' reference.
634
- * - An array of string shorthands and/or inline Audience objects for custom audience metadata or catalog-backed overrides. Object form mirrors https://openpresentation.org/schema/opf-audience/v1 without '$schema'.
646
+ * Intended audiences for the presentation. Accepts any of:
647
+ * - A single string: an audiences reference ('executive', or 'acme:board' for a record of the catalogs.acme group), or free-form text ('Series B investors'). A string that is a bare id or 'name:id' is a reference; any other string is free text and is never looked up.
648
+ * - A single inline Audience object, for custom audience metadata or overrides on a referenced record. Object form has the fields of https://openpresentation.org/schema/opf-audience/v1.
649
+ * - An array of strings and/or inline Audience objects, for more than one audience.
635
650
  *
636
- * Resolution order for catalog ids and references: inline catalogs.audiences.records[] → catalogs.audiences.source → default catalog at https://www.pptx.gallery/audiences.
651
+ * A reference resolves like every content reference (see catalogs); one that resolves nowhere is the warning opf/unresolved-reference. Nothing is drawn from the audience.
637
652
  */
638
- audience?: (string | [(string | Audience), ...((string | Audience))[]]);
653
+ audience?: (string | Audience | [(string | Audience), ...((string | Audience))[]]);
639
654
  /**
640
655
  * Primary goal of the presentation. Accepts either:
641
- * - A string shorthand: free-form goal ('Raise a Series B round of $30M'), a purposes catalog id ('decide', 'align'), an HTTPS URL, or a 'pkg:' reference.
642
- * - An inline Purpose object for custom purpose metadata or catalog-backed overrides. Object form mirrors https://openpresentation.org/schema/opf-purpose/v1 without '$schema'.
656
+ * - A string: a purposes reference ('decide', or 'acme:fundraise' for a record of the catalogs.acme group), or a free-form goal ('Raise a Series B round of $30M'). A string that is a bare id or 'name:id' is a reference; any other string is free text and is never looked up.
657
+ * - An inline Purpose object for custom purpose metadata or overrides on a referenced record. Object form has the fields of https://openpresentation.org/schema/opf-purpose/v1.
643
658
  *
644
- * Resolution order for catalog ids and references: inline catalogs.purposes.records[] → catalogs.purposes.source → default catalog at https://www.pptx.gallery/purposes.
659
+ * A reference resolves like every content reference (see catalogs); one that resolves nowhere is the warning opf/unresolved-reference. Nothing is drawn from the purpose.
645
660
  */
646
661
  purpose?: (string | Purpose);
647
662
  /**
648
- * Language for the presentation content. Accepts either:
649
- * - A string shorthand: a BCP-47 language tag ('en-US', 'en-GB', 'ja-JP', 'fr'), a languages catalog id ('english', 'japanese'), an HTTPS URL, or a 'pkg:' reference.
650
- * - An inline Language object for custom language metadata or catalog-backed overrides. Object form mirrors https://openpresentation.org/schema/opf-language/v1 without '$schema'.
663
+ * Language of the presentation content, an engine vocabulary: a BCP-47 language tag, validated directly with no catalog lookup. Accepts either:
664
+ * - A BCP-47 tag ('en-US', 'en-GB', 'ja', 'zh-Hans', 'ar-SA').
665
+ * - An inline Language object: a 'bcp47' tag plus overrides of what engines know about it (name, ooxmlLang, script, direction, the script font schemes).
651
666
  *
652
- * Resolution order for catalog ids and references: inline catalogs.languages.records[] → catalogs.languages.source → default catalog at https://www.pptx.gallery/languages.
667
+ * Engines know the script, base direction, OOXML language tag and default script fonts of the tags in spec/reference/engine-vocabularies.json; any other well-formed tag is accepted and its script is inferred from the tag. Language names and descriptions are catalog display metadata, not part of the document.
653
668
  */
654
- language?: (string | Language);
669
+ language?: (LanguageTag | Language);
655
670
  /**
656
671
  * Desired tone for the presentation. Accepts either:
657
- * - A string shorthand: a tones catalog id ('formal'), an HTTPS URL, or a 'pkg:' reference.
658
- * - An inline Tone object for custom tone metadata or catalog-backed overrides. Object form mirrors https://openpresentation.org/schema/opf-tone/v1 without '$schema'.
672
+ * - A tones reference: a bare id ('formal') or 'name:id' for a record of a named catalogs group.
673
+ * - An inline Tone object for custom tone metadata or overrides on a referenced record. Object form has the fields of https://openpresentation.org/schema/opf-tone/v1.
659
674
  *
660
- * Resolution order for catalog ids and references: inline catalogs.tones.records[] → catalogs.tones.source → default catalog at https://www.pptx.gallery/tones.
675
+ * A reference resolves like every content reference (see catalogs); one that resolves nowhere is the warning opf/unresolved-reference. Nothing is drawn from the tone.
661
676
  */
662
- tone?: (string | Tone);
677
+ tone?: (CatalogReference | Tone);
663
678
  /**
664
679
  * Audience-facing takeaway the presentation should leave behind. Array form supports multiple takeaways. Deck-level intent used by AI to seed and pressure-test slide content.
665
680
  */
666
681
  takeaway?: (string | [string, ...(string)[]]);
667
682
  /**
668
- * Target presentation duration, as an integer number of minutes. Used by AI to set pace and depth, and to compare against the resolved narrative's durationRange.
683
+ * Target presentation duration, as an integer number of minutes. The opf-render presenter view counts the elapsed time against it, and core validate warns when it lies outside the resolved narrative's 'duration' range. Agents can also use it to set pace and depth. Nothing else reads it: the preview and the PPTX export draw no duration.
669
684
  */
670
685
  duration?: number;
671
686
  /**
@@ -679,17 +694,9 @@ interface Presentation {
679
694
  */
680
695
  template?: boolean;
681
696
  /**
682
- * Structured storyline describing the deck's arc and beats. Resolves to the 'id' of a 'narratives' catalog record.
683
- *
684
- * Accepts two forms:
685
- * - String shorthand for the common case: 'narrative = "classic-story"'. Accepts a bare id (lowercase kebab-case), an HTTPS URL pointing at a record file, or a 'pkg:' reference to a locally-installed package.
686
- * - Object form for inline overrides or fully custom narratives: 'narrative = { id: "classic-story", beats: [...] }'. The object shape mirrors https://openpresentation.org/schema/opf-narrative/v1 (sans '$schema'), so a library record and an inline narrative are interchangeable.
687
- *
688
- * Resolution order: inline catalogs.narratives.records[] → catalogs.narratives.source → default catalog at https://www.pptx.gallery/narratives. Unknown ids produce a validation warning, not an error.
689
- *
690
- * Deck-level concerns that aren't part of the storyline (audience, tone, takeaway, duration) live as siblings on the presentation root rather than inside the narrative object.
697
+ * A content reference: a bare id ('two-column') or 'name:id' ('acme:hero'), where the prefix names a group of 'catalogs'. URLs and 'pkg:' strings are not references; a named catalog group replaces them. See Catalogs for the resolution order.
691
698
  */
692
- narrative?: (string | Narrative);
699
+ narrative?: string;
693
700
  /**
694
701
  * Ordered array of slides that make up the presentation.
695
702
  *
@@ -697,7 +704,7 @@ interface Presentation {
697
704
  */
698
705
  slides: [Slide, ...(Slide)[]];
699
706
  /**
700
- * Sources that text runs cite with 'cite'. Ids are unique. A cited reference is listed in the footnote area of every slide that cites it, with a marker number assigned per deck in order of first use; a reference no run cites is a lint warning (opf/unused-reference). referencesSlide() turns the cited references into an ordinary list slide.
707
+ * Sources that text runs cite with 'cite'. Ids are unique. A cited reference is listed in the footnote area of every slide that cites it, with a marker number assigned per deck in order of first use; a reference no run cites is the warning opf/unused-reference. referencesSlide() turns the cited references into an ordinary list slide.
701
708
  */
702
709
  references?: Reference[];
703
710
  datasets?: Datasets;
@@ -711,26 +718,26 @@ interface Presentation {
711
718
  };
712
719
  }
713
720
  /**
714
- * An organization associated with the presentation — typically the presenting company, but also hosts, partners, clients, or sponsors. Surfaced on cover slides, footers, and brand bars; the primary organization's logo is the default deck logo unless overridden by design.logo.
721
+ * An organization associated with the presentation, typically the presenting company, but also hosts, partners, clients, or sponsors. The primary organization (role 'primary', else the first one) supplies the default deck logo (unless design.logo overrides it), the 'organization' header/footer field (its name) and the 'socials' field (its socials). Every field is also a built-in variable ('{{organization.name}}', 'var:organization.logo', 'organization.<id>.<field>'). Nothing else about an organization is drawn automatically. See docs/templates-and-variables.md.
715
722
  *
716
723
  * This interface was referenced by `Presentation`'s JSON-Schema
717
724
  * via the `definition` "Organization".
718
725
  */
719
726
  interface Organization {
720
727
  /**
721
- * Stable identifier for the organization, used to reference it from Speaker.organizationId. Must be unique within the deck.
728
+ * Stable identifier for the organization, used to reference it from Speaker.organizationId and to address it in built-in variables as 'organization.<id>.<field>'. Must be unique among organizations (a duplicate is a validation error).
722
729
  */
723
730
  id: string;
724
731
  /**
725
- * Display name shown on slides.
732
+ * Display name. Drawn by the 'organization' header/footer field for the primary organization; the built-in variable 'organization.name' (or 'organization.<id>.name') carries it into any string.
726
733
  */
727
734
  name: string;
728
735
  /**
729
- * Optional legal entity name when it differs from the display name.
736
+ * Optional legal entity name when it differs from the display name. Never drawn automatically; available as the built-in variable 'organization.legalName'.
730
737
  */
731
738
  legalName?: string;
732
739
  /**
733
- * Source for the organization's logo image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are SVG (preferred for vector logos), PNG (with transparency), or JPG. The primary organization's logo (role 'primary', else the first organization) is the fallback source wherever the deck logo is drawn: a slide's design.logo, then design.logo, then this value. It is therefore drawn on cover and section slides and by header/footer zones with logo: true, exactly as design.logo would be (see design.logo and docs/design-resolution.md).
740
+ * Source for the organization's logo image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are SVG (preferred for vector logos), PNG (with transparency), or JPG. The primary organization's logo (role 'primary', else the first organization) is the fallback source wherever the deck logo is drawn: a slide's design.logo, then design.logo, then this value. It is therefore drawn on cover and section slides and by header/footer zones with logo: true, exactly as design.logo would be (see design.logo and docs/design-resolution.md). It is also the built-in image variable 'organization.logo' (or 'organization.<id>.logo'), placed with 'var:organization.logo' in an image field.
734
741
  */
735
742
  logo?: (string | {
736
743
  /**
@@ -753,29 +760,25 @@ interface Organization {
753
760
  * Optional MIME media type when it cannot be inferred from src.
754
761
  */
755
762
  mediaType?: string;
756
- /**
757
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
758
- */
759
- format?: string;
760
763
  });
761
764
  /**
762
- * Bare internet domain for the organization. Used for footers, contact slides, and engine-driven asset lookups (e.g., favicon-based brand defaults).
765
+ * Bare internet domain for the organization. Never drawn automatically and not used to look up assets; available as the built-in variable 'organization.domain'.
763
766
  */
764
767
  domain?: string;
765
768
  /**
766
- * General contact email for the organization. Used on contact slides and footer attribution.
769
+ * General contact email for the organization. Never drawn automatically; available as the built-in variable 'organization.email'.
767
770
  */
768
771
  email?: string;
769
772
  /**
770
- * Main contact phone number for the organization. E.164 format is recommended.
773
+ * Main contact phone number for the organization. E.164 format is recommended. Never drawn automatically; available as the built-in variable 'organization.phone'.
771
774
  */
772
775
  phone?: string;
773
776
  /**
774
- * Short tagline rendered alongside the organization name on cover slides.
777
+ * Short tagline. Never drawn automatically (cover slides do not show it); available as the built-in variable 'organization.tagline', for example in a footer 'text' of '{{organization.tagline}}'.
775
778
  */
776
779
  tagline?: string;
777
780
  /**
778
- * Role of the organization relative to the presentation. When omitted, the single organization or first organization in array form is treated as primary.
781
+ * Role of the organization relative to the presentation. Only 'primary' has behavior: it selects the primary organization (deck logo, 'organization' and 'socials' header/footer fields, and the 'organization.<field>' built-ins). When no organization has role 'primary', the first one is primary. 'partner', 'client', 'sponsor' and 'host' are descriptive labels that change nothing.
779
782
  */
780
783
  role?: ("primary" | "partner" | "client" | "sponsor" | "host");
781
784
  socials?: Socials;
@@ -791,26 +794,26 @@ interface Socials {
791
794
  [k: string]: string;
792
795
  }
793
796
  /**
794
- * A person presenting the deck. Used for cover slides, bio/intro slides, footer attribution, and panel formats with multiple presenters.
797
+ * A person presenting the deck. A speaker is drawn only through built-in variables ('{{speaker.name}}' inside any string, 'var:speaker.photo' as a whole image field) and the 'speaker' header/footer field (the first speaker's name and title). No layout, cover or bio slide places a speaker on its own. See docs/templates-and-variables.md.
795
798
  *
796
799
  * This interface was referenced by `Presentation`'s JSON-Schema
797
800
  * via the `definition` "Speaker".
798
801
  */
799
802
  interface Speaker {
800
803
  /**
801
- * Stable identifier for the speaker, used for cross-references within the deck. Must be unique within the deck.
804
+ * Stable identifier for the speaker. Must be unique among speakers (a duplicate is a validation error). Addresses this speaker in built-in variables as 'speaker.<id>.<field>', such as '{{speaker.alice.title}}'.
802
805
  */
803
806
  id: string;
804
807
  /**
805
- * Display name.
808
+ * Display name. Built-in variable 'speaker.name' (first speaker) or 'speaker.<id>.name'; the first speaker's name is also drawn by the 'speaker' header/footer field and every name is listed by 'speakers'.
806
809
  */
807
810
  name: string;
808
811
  /**
809
- * Role or title. Often paired with the speaker's organization on cover slides.
812
+ * Role or title. Built-in variable 'speaker.title'; the 'speaker' header/footer field draws it after the name ('Alice Chen, VP of Engineering').
810
813
  */
811
814
  title?: string;
812
815
  /**
813
- * Source for the speaker's headshot image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are JPG or PNG; SVG is not appropriate for photographic content. Authoring metadata for hosts and layouts (cover and bio slides built by a host): the reference renderer and exporter do not draw it, because no slide field or layout slot places a speaker; it round-trips through PPTX provenance.
816
+ * Source for the speaker's headshot image. Accepts an HTTPS URL, data URI, relative path (resolved against the OPF file location), local path, or 'asset:<id>' reference. Common formats are JPG or PNG; SVG is not appropriate for photographic content. Never drawn automatically: it is the built-in image variable 'speaker.photo' (or 'speaker.<id>.photo'), placed with 'var:speaker.photo' in a slide's image field. It also round-trips through PPTX provenance.
814
817
  */
815
818
  photo?: (string | {
816
819
  /**
@@ -833,32 +836,28 @@ interface Speaker {
833
836
  * Optional MIME media type when it cannot be inferred from src.
834
837
  */
835
838
  mediaType?: string;
836
- /**
837
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
838
- */
839
- format?: string;
840
839
  });
841
840
  /**
842
- * Contact email, used on contact slides or footer attribution when appropriate.
841
+ * Contact email. Never drawn automatically; available as the built-in variable 'speaker.email'.
843
842
  */
844
843
  email?: string;
845
844
  /**
846
- * Contact phone number for the speaker. E.164 format is recommended.
845
+ * Contact phone number for the speaker. E.164 format is recommended. Never drawn automatically; available as the built-in variable 'speaker.phone'.
847
846
  */
848
847
  phone?: string;
849
848
  /**
850
- * Short biographical paragraph for bio or 'about the speaker' slides.
849
+ * Short biographical paragraph. Never drawn automatically; available as the built-in variable 'speaker.bio', for a bio or 'about the speaker' slide you write.
851
850
  */
852
851
  bio?: string;
853
852
  /**
854
- * Reference to an Organization.id in organization. Lets a speaker be attributed to their org in panel or multi-org decks without repeating organization details.
853
+ * Reference to an Organization.id in organization; it must name an existing organization (a validation error otherwise). Attribution metadata for hosts: no engine draws it or changes which organization is primary because of it.
855
854
  */
856
855
  organizationId?: string;
857
856
  socials?: Socials1;
858
857
  [k: string]: unknown;
859
858
  }
860
859
  /**
861
- * Optional social media handles or URLs for the speaker. Authoring metadata: no header/footer field renders speaker socials yet.
860
+ * Optional social media handles or URLs for the speaker. Authoring metadata only: nothing draws speaker socials and there is no built-in variable for them (the 'socials' header/footer field draws the primary organization's socials).
862
861
  */
863
862
  interface Socials1 {
864
863
  /**
@@ -866,34 +865,81 @@ interface Socials1 {
866
865
  */
867
866
  [k: string]: string;
868
867
  }
868
+ /**
869
+ * Inline language metadata for the presentation: a BCP-47 'bcp47' tag plus overrides of what engines know about it. Languages are an engine vocabulary, not catalog records, so there is no 'id'.
870
+ *
871
+ * This interface was referenced by `Presentation`'s JSON-Schema
872
+ * via the `definition` "Language".
873
+ */
874
+ interface Language {
875
+ /**
876
+ * Human-readable language name.
877
+ */
878
+ name?: string;
879
+ /**
880
+ * A BCP-47 language tag ('en-US', 'ja', 'zh-Hans', 'sr-Latn-ME'), an engine vocabulary. Use 'en-GB' for UK English; 'en-UK' is not a valid region.
881
+ */
882
+ bcp47: string;
883
+ /**
884
+ * Culture tag for OOXML text-run language attributes (a:rPr/@lang, a:endParaRPr/@lang), in the language-[Script-]REGION form Office recognizes (e.g. 'ja-JP', 'ar-SA', 'ms-MY', 'nb-NO', 'fil-PH', 'zh-CN'). Without it, engines emit the curated tag of their language vocabulary (spec/reference/engine-vocabularies.json) for a tag without a region, and a region-bearing tag as written. Curated rather than inferred so output does not depend on the runtime's locale data.
885
+ */
886
+ ooxmlLang?: string;
887
+ /**
888
+ * ISO 639-3 or 639-2 language code carried for engines that prefer ISO codes.
889
+ */
890
+ code?: string;
891
+ /**
892
+ * Base text direction for the language. When omitted, engines derive it from the script: Arabic (Arab), Hebrew (Hebr), Syriac (Syrc), Thaana (Thaa), N'Ko (Nkoo), Adlam (Adlm), Samaritan (Samr), Mandaic (Mand) and Hanifi Rohingya (Rohg) are right-to-left; every other script is left-to-right. The engine language vocabulary (spec/reference/engine-vocabularies.json) states it for the tags it knows.
893
+ */
894
+ direction?: ("ltr" | "rtl");
895
+ /**
896
+ * ISO 15924 script code of the language's writing system. The script selects the OOXML font slot the language's text uses: East Asian scripts (Hans, Hant, Hani, Jpan, Kore, Hang, Hira, Kana, Bopo, Yiii) use the eastAsian slot; complex scripts (for example Arab, Hebr, Syrc, Thaa, Deva, Beng, Guru, Gujr, Orya, Taml, Telu, Knda, Mlym, Sinh, Thai, Laoo, Tibt, Mymr, Khmr, Mong) use the complexScript slot; every other script (Latn, Cyrl, Grek, Armn, Geor, Ethi, ...) uses the latin slot. When omitted, engines infer it from the BCP-47 tag. The engine language vocabulary (spec/reference/engine-vocabularies.json) states it for the tags it knows. See docs/programs/font-fidelity-everywhere/script-font-model.md.
897
+ */
898
+ script?: string;
899
+ /**
900
+ * Font-scheme reference (a bare id or 'name:id') for this language's script slot when targeting PowerPoint output. Its major/minor families fill the language's script slot (eastAsian or complexScript, chosen by 'script') unless the effective design font scheme sets that slot itself; the latin slot always follows the design font scheme. Without it, engines use the default script fonts of their language vocabulary.
901
+ */
902
+ fontScheme?: string;
903
+ /**
904
+ * Font-scheme reference (a bare id or 'name:id') used in place of 'fontScheme' when resolving script fonts for Google Slides output.
905
+ */
906
+ googleFontScheme?: string;
907
+ /**
908
+ * One-sentence note about coverage or font defaults.
909
+ */
910
+ summary?: string;
911
+ /**
912
+ * Longer prose describing the language record and any font-pairing rationale.
913
+ */
914
+ description?: string;
915
+ /**
916
+ * Free-form labels for filtering and search.
917
+ */
918
+ tags?: string[];
919
+ [k: string]: unknown;
920
+ }
869
921
  /**
870
922
  * Optional design system covering theme, color scheme, font scheme, dimensions, background, logo, watermark, header, and footer applied to the deck. When omitted, engines use their default design configuration.
871
923
  */
872
924
  interface Design {
873
925
  /**
874
- * Theme for the deck. Accepts two forms:
875
- * - String shorthand: 'design.theme = "minimal"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'themes' catalog record.
876
- * - Object form: a Theme with an optional 'id' base reference plus theme-level overrides.
877
- *
878
- * Inline overrides on design.colorScheme / design.fontScheme / design.background / design.dimensions take precedence over the resolved theme.
879
- *
880
- * Resolution order: inline catalogs.themes.records[] -> catalogs.themes.source -> default catalog at https://www.pptx.gallery/themes.
926
+ * A content reference: a bare id ('two-column') or 'name:id' ('acme:hero'), where the prefix names a group of 'catalogs'. URLs and 'pkg:' strings are not references; a named catalog group replaces them. See Catalogs for the resolution order.
881
927
  */
882
- theme?: (string | Theme);
928
+ theme?: string;
883
929
  /**
884
930
  * Color scheme for the presentation. Accepts two forms:
885
- * - String shorthand: 'design.colorScheme = "cool-horizon"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'colorSchemes' catalog record.
886
- * - Object form: a ColorScheme with an optional 'id' base reference plus slot/role overrides.
931
+ * - A colorSchemes reference: a bare id ('cool-horizon') or 'name:id' ('acme:ocean').
932
+ * - Object form: a ColorScheme with an optional 'id' reference as the base plus slot/role overrides. Without 'id', the overrides apply on top of the engine default colour scheme.
887
933
  *
888
- * Resolution order: inline catalogs.colorSchemes.records[] -> catalogs.colorSchemes.source -> default catalog at https://www.pptx.gallery/color-schemes.
934
+ * Without either, the theme's colorScheme applies, then the engine default colour scheme.
889
935
  */
890
936
  colorScheme?: (string | ColorScheme);
891
937
  /**
892
938
  * Font scheme for heading, body, accent, and code text. Accepts two forms:
893
- * - String shorthand: 'design.fontScheme = "aptos"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'fontSchemes' catalog record.
894
- * - Object form: a FontScheme with an optional 'id' base reference plus pair/role overrides.
939
+ * - A fontSchemes reference: a bare id ('aptos') or 'name:id' ('acme:inter').
940
+ * - Object form: a FontScheme with an optional 'id' reference as the base plus pair/role overrides.
895
941
  *
896
- * Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.source -> default catalog at https://www.pptx.gallery/font-schemes.
942
+ * Without either, the theme's fontScheme applies, then the engine default font scheme.
897
943
  */
898
944
  fontScheme?: (string | FontScheme);
899
945
  /**
@@ -901,7 +947,7 @@ interface Design {
901
947
  */
902
948
  dimensions?: (DimensionPreset | Dimensions);
903
949
  /**
904
- * Default slide background applied across the deck unless overridden on a slide. String shorthand accepts theme slots ('light1', 'light2', 'dark1', 'dark2') or hex colors; object forms support theme, solid, gradient, image, or pattern fills.
950
+ * Default slide background applied across the deck unless overridden on a slide (slides.N.design.background); the resolved theme's background is the fallback. A background is the only canvas fill and never moves content. String shorthand accepts theme slots ('light1', 'light2', 'dark1', 'dark2'), hex colors, or an image source starting with 'asset:', 'https://', 'data:', './' or '../' (a cover image); object forms support theme, solid, gradient, image, or pattern fills.
905
951
  */
906
952
  background?: (BackgroundShortcut | Background);
907
953
  /**
@@ -909,7 +955,7 @@ interface Design {
909
955
  */
910
956
  logo?: (Asset | LogoSet);
911
957
  /**
912
- * Optional decorative watermark applied across slides. Use false to suppress an inherited watermark in slide-level design; a string is equivalent to { src: value }.
958
+ * Optional decorative watermark applied across slides: an image or a text stamp, in the fixed frame and at the opacity described on Watermark. Use false to suppress an inherited watermark in slide-level design; a string or Asset is the image at opacity 0.08.
913
959
  */
914
960
  watermark?: (false | Asset | Watermark);
915
961
  /**
@@ -921,191 +967,50 @@ interface Design {
921
967
  */
922
968
  footer?: (false | HeaderFooter);
923
969
  /**
924
- * Default horizontal alignment for title placeholders in resolved layouts.
970
+ * Default horizontal alignment for title placeholders in resolved layouts. Effective value: the slide's design, then the deck's design, then the layout record's design.titleAlignment, then the engine default.
925
971
  */
926
972
  titleAlignment?: ("left" | "center" | "right");
927
973
  /**
928
- * Default horizontal alignment for body/content regions in resolved layouts.
974
+ * Default horizontal alignment for body/content regions in resolved layouts. Effective value: the slide's design, then the deck's design, then the layout record's design.contentAlignment, then the engine default. A cover's tag and subtitle follow titleAlignment unless the slide's own design sets contentAlignment.
929
975
  */
930
976
  contentAlignment?: ("left" | "center" | "right");
931
977
  /**
932
- * Whether body/content regions are rendered inside a visible card or surface.
978
+ * Whether body/content regions are rendered inside a visible card or surface. Effective value: the slide's design, then the deck's design, then the layout record's design.contentBox, then the engine default.
933
979
  */
934
980
  contentBox?: boolean;
935
981
  /**
936
- * Optional slide-level image, separate from content images. It applies to a slide that sets its own design.slideImage, and to slides whose layout declares slideImage: true or whose root image is the same source as a deck-level value. A root image with the same source becomes the slide image instead of a content item. Blur, shadows, soft edges, background removal and device artwork are not part of the treatment vocabulary; see docs/image-treatments.md.
937
- */
938
- slideImage?: (Asset | {
939
- /**
940
- * Source for the slide-level image. When omitted in a design override, the object only configures how a slide-level image should be placed when one is supplied by a content payload, asset, or renderer convention.
941
- */
942
- src?: string;
943
- /**
944
- * Where the slide-level image sits relative to the content. 'background' is a full-bleed image behind the content. The other positions give the image a band along that edge (see size) and compose headings and content in the rest of the slide.
945
- */
946
- position: ("background" | "top" | "bottom" | "left" | "right");
947
- /**
948
- * Alternative text for the slide-level image. Overrides the alt text of a referenced asset.
949
- */
950
- alt?: string;
951
- /**
952
- * How the image fills its frame: 'crop' covers the frame from the center; 'fit' shows the whole image centered inside it. Overrides design.imageFill for this image. Default: design.imageFill, else 'crop'.
953
- */
954
- fill?: ("crop" | "fit");
955
- /**
956
- * Share of the slide width (left/right) or height (top/bottom) given to the image band. Ignored for 'background'. Default 0.5.
957
- */
958
- size?: number;
959
- /**
960
- * Place the frame inside the slide padding instead of edge to edge, like a card. Default false.
961
- */
962
- inset?: boolean;
963
- /**
964
- * Width-to-height ratio of the frame. The frame becomes the largest centered box with this ratio inside the band or slide, for example 2.39 for a cinematic letterbox or 0.5 for a phone-shaped frame. 'circle' always uses 1.
965
- */
966
- aspectRatio?: number;
967
- /**
968
- * Mask applied to the frame, exported as the picture's native preset geometry (rect, roundRect, ellipse, hexagon). 'circle' makes the frame square. Default 'rectangle'.
969
- */
970
- shape?: ("rectangle" | "rounded" | "circle" | "hexagon");
971
- /**
972
- * Corner radius for shape 'rounded' as a fraction of the frame's shorter side. Default 0.16667, PowerPoint's roundRect default.
973
- */
974
- cornerRadius?: number;
975
- /**
976
- * Solid line along the frame's shape. A thick dark border on a rounded portrait frame gives a device bezel.
977
- */
978
- border?: {
979
- /**
980
- * Line color: a hex color, a color-scheme slot or role name, or a 'var:<id>' variable reference.
981
- */
982
- color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
983
- /**
984
- * Line width in reference pixels at a 720-pixel short edge, centered on the frame outline like a native picture line. 0 removes the line.
985
- */
986
- width: number;
987
- };
988
- /**
989
- * Image opacity from 0 to 1, exported as a native alphaModFix. The border and overlay keep their own opacity. Default 1.
990
- */
991
- opacity?: number;
992
- /**
993
- * Color treatment for the image pixels. Luminance uses Rec. 601 weights (0.299, 0.587, 0.114) on sRGB values.
994
- */
995
- recolor?: ("grayscale" | {
996
- /**
997
- * Color at luminance 0.
998
- */
999
- dark: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
1000
- /**
1001
- * Color at luminance 1.
1002
- */
1003
- light: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
1004
- });
1005
- /**
1006
- * Solid scrim drawn over the image in the frame's shape, beneath headings and content, for example to keep overlaid text readable. Exported as a native shape above the picture.
1007
- */
1008
- overlay?: {
1009
- /**
1010
- * Overlay fill color.
1011
- */
1012
- color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
1013
- /**
1014
- * Overlay fill opacity.
1015
- */
1016
- opacity: number;
1017
- /**
1018
- * Cover only a band along this edge of the frame, for example a caption strip. Rectangle frames only; other shapes report unsupported-image-treatment and draw no overlay. Omit to cover the whole frame.
1019
- */
1020
- edge?: ("top" | "bottom" | "left" | "right");
1021
- /**
1022
- * Band share of the frame for an edge overlay. Default 0.3.
1023
- */
1024
- size?: number;
1025
- };
1026
- });
1027
- /**
1028
- * Axis along which parallel body content is arranged. Sets the root arrangement mode of blocks and root payloads when no composition.mode is set on the slide or on its layout record: 'vertical' is column, 'horizontal' is row. Precedence: composition.mode (the slide's own, else the layout record's geometry contract), then this value (slide design, then deck design), then the layout record's slideLayoutDirection, then automatic selection. A layout that carries a composition.mode keeps its grid or direction whatever this value says. Promoted regions (left, top:left, ...) keep their explicit geometry and nested groups keep their own composition.
982
+ * Axis along which parallel body content is arranged. Sets the root arrangement mode of blocks and root payloads when no composition.mode is set on the slide or on its layout record: 'vertical' is column, 'horizontal' is row. Precedence: composition.mode (the slide's own, else the layout record's geometry contract), then the effective value (slide design, then deck design, then the layout record's design.contentDirection), then automatic selection. A layout that carries a composition.mode keeps its grid or direction whatever this value says. Promoted regions (left, top:left, ...) keep their explicit geometry and nested groups keep their own composition.
1029
983
  */
1030
984
  contentDirection?: ("horizontal" | "vertical");
1031
985
  /**
1032
- * Where the primary chart sits relative to supporting content. Effective value: slide design, then deck design, then the layout record's contentTypeChartPrimary. When the slide has no promoted regions and no composition.mode of its own, and its root nodes mix at least one chart with other content, the first chart becomes a primary track and the other nodes form one synthetic sub-grid: 'left'/'right' is a two-track row and 'top'/'bottom' a two-track column, weighted 3:2 in favor of the chart; explicit root columns and weights are ignored while it applies. 'none' (the default) keeps the ordinary automatic grid with equal weight.
986
+ * Where the primary chart sits relative to supporting content. Effective value: slide design, then deck design, then the layout record's design.chartPrimary. When the slide has no promoted regions and no composition.mode of its own, and its root nodes mix at least one chart with other content, the first chart becomes a primary track and the other nodes form one synthetic sub-grid: 'left'/'right' is a two-track row and 'top'/'bottom' a two-track column, weighted 3:2 in favor of the chart; explicit root columns and weights are ignored while it applies. 'none' (the default) keeps the ordinary automatic grid with equal weight.
1033
987
  */
1034
988
  chartPrimary?: ("none" | "top" | "bottom" | "left" | "right");
1035
989
  /**
1036
- * How picture placeholders fill their allocated region.
990
+ * Default fit of image blocks (and Slide.image) that set no fit of their own: 'cover' fills the frame and crops what overflows around the block's focus, 'contain' shows the whole picture centered in the frame, 'stretch' scales it to the frame exactly. Effective value: the slide's design, then the deck's design, then the layout record's design.imageFit, then 'cover'. Backgrounds set their own fit.
1037
991
  */
1038
- imageFill?: ("crop" | "fit");
992
+ imageFit?: ("cover" | "contain" | "stretch");
1039
993
  /**
1040
- * Marker style for items and bullets lists. 'character' (the default) draws the glyph marker. 'image' draws the deck's icon logo (a slide's design.logo, then design.logo, then the primary organization's logo; light variants on dark backgrounds) as a picture bullet: a square of the marker's font size whose bottom sits on the marker baseline, so list geometry does not change. Without a logo the glyph is drawn and the engine reports unresolved-content at this field.
994
+ * Marker style for items and bullets lists. Effective value: the slide's design, then the deck's design, then the layout record's design.listBullet, then 'character'. 'character' (the default) draws the glyph marker. 'image' draws the deck's icon logo (a slide's design.logo, then design.logo, then the primary organization's logo; light variants on dark backgrounds) as a picture bullet: a square of the marker's font size whose bottom sits on the marker baseline, so list geometry does not change. Without a logo the glyph is drawn and the engine reports unresolved-content at this field.
1041
995
  */
1042
996
  listBullet?: ("character" | "image");
1043
997
  [k: string]: unknown;
1044
998
  }
1045
999
  /**
1046
- * Theme bundle used by the design system. In design.theme, 'id' resolves a themes catalog record as the base; any sibling fields override the resolved theme. The string shorthand on design.theme is equivalent to setting only 'id'.
1047
- *
1048
- * This interface was referenced by `Presentation`'s JSON-Schema
1049
- * via the `definition` "Theme".
1050
- */
1051
- interface Theme {
1052
- /**
1053
- * Theme reference. Resolves to the 'id' of a 'themes' catalog record. Accepts a bare id (lowercase kebab-case, e.g. 'minimal'), an HTTPS URL pointing at a record file, or a 'pkg:' reference. Field overrides on the surrounding Theme object take precedence over the resolved theme.
1054
- *
1055
- * Resolution order: inline catalogs.themes.records[] -> catalogs.themes.source -> default catalog at https://www.pptx.gallery/themes.
1056
- */
1057
- id?: string;
1058
- /**
1059
- * Human-readable theme name shown in pickers.
1060
- */
1061
- name?: string;
1062
- /**
1063
- * One-sentence positioning of the theme - when to reach for it.
1064
- */
1065
- summary?: string;
1066
- /**
1067
- * Longer prose describing what the theme looks and feels like and the kinds of decks it suits.
1068
- */
1069
- description?: string;
1070
- /**
1071
- * Default color scheme for this theme. A string resolves against catalogs.colorSchemes; an object may provide an 'id' base reference plus overrides.
1072
- */
1073
- colorScheme?: (string | ColorScheme);
1074
- /**
1075
- * Default font scheme for this theme. A string resolves against catalogs.fontSchemes; an object may provide an 'id' base reference plus overrides.
1076
- */
1077
- fontScheme?: (string | FontScheme);
1078
- /**
1079
- * Default background for this theme. String shorthand accepts theme slots ('light1', 'light2', 'dark1', 'dark2') or hex colors.
1080
- */
1081
- background?: (BackgroundShortcut | Background);
1082
- /**
1083
- * Default slide size for this theme. A string preset is equivalent to { preset: value }.
1084
- */
1085
- dimensions?: (DimensionPreset | Dimensions);
1086
- /**
1087
- * Free-form labels for filtering and search.
1088
- */
1089
- tags?: string[];
1090
- [k: string]: unknown;
1091
- }
1092
- /**
1093
- * Color palette used by the design system. The slot fields (accent1-accent6, dark1, dark2, light1, light2, hyperlink, followedHyperlink) mirror color-scheme.schema.json (https://openpresentation.org/schema/opf-color-scheme/v1) so library records and inline OPF overrides are interchangeable on those fields.
1000
+ * Color palette used by the design system. Every slot and role is a hex color ('#RGB', '#RRGGBB' or '#RRGGBBAA'); a color-scheme name or a 'var:<id>' reference is not valid here, because those resolve through the scheme. The slot fields (accent1-accent6, dark1, dark2, light1, light2, hyperlink, followedHyperlink) mirror color-scheme.schema.json (https://openpresentation.org/schema/opf-color-scheme/v1) so library records and inline OPF overrides are interchangeable on those fields.
1094
1001
  *
1095
1002
  * Two parallel models are supported and may be mixed:
1096
1003
  * - OOXML slots - the 12-slot PowerPoint theme model that round-trips directly to OOXML. Use these for full control over the palette as PowerPoint sees it.
1097
- * - Abstract roles (primary, secondary, accent, background, surface, text, textSecondary, custom) - OPF-specific semantic aliases the engine maps onto the OOXML slots. Convenient for inline overrides without thinking in slot numbers; not part of the catalog record schema.
1004
+ * - Abstract roles (primary, secondary, accent, background, surface, text, textSecondary) - OPF-specific semantic aliases the engine maps onto the OOXML slots. Convenient for inline overrides without thinking in slot numbers; not part of the catalog record schema.
1098
1005
  *
1099
- * In design.colorScheme, 'id' resolves a colorSchemes catalog record as the base; slot and role overrides on the same object take precedence over the resolved scheme. The string shorthand on design.colorScheme is equivalent to setting only 'id'.
1006
+ * In design.colorScheme, 'id' resolves a colorSchemes record as the base; slot and role overrides on the same object take precedence over the resolved scheme. The string form of design.colorScheme is equivalent to setting only 'id'.
1100
1007
  *
1101
1008
  * This interface was referenced by `Presentation`'s JSON-Schema
1102
1009
  * via the `definition` "ColorScheme".
1103
1010
  */
1104
1011
  interface ColorScheme {
1105
1012
  /**
1106
- * Color scheme reference. Resolves to the 'id' of a 'colorSchemes' catalog record. Accepts a bare id (lowercase kebab-case, e.g. 'cool-horizon'), an HTTPS URL pointing at a record file, or a 'pkg:' reference. Slot and role overrides on the surrounding ColorScheme object take precedence over the resolved scheme.
1107
- *
1108
- * Resolution order: inline catalogs.colorSchemes.records[] -> catalogs.colorSchemes.source -> default catalog at https://www.pptx.gallery/color-schemes.
1013
+ * A content reference: a bare id ('two-column') or 'name:id' ('acme:hero'), where the prefix names a group of 'catalogs'. URLs and 'pkg:' strings are not references; a named catalog group replaces them. See Catalogs for the resolution order.
1109
1014
  */
1110
1015
  id?: string;
1111
1016
  /**
@@ -1149,7 +1054,7 @@ interface ColorScheme {
1149
1054
  */
1150
1055
  light2?: string;
1151
1056
  /**
1152
- * Hyperlink color (hex). OOXML hlink.
1057
+ * Hyperlink color (hex). OOXML hlink. Link runs with no color of their own are drawn underlined in it, in the preview and in PowerPoint, unless it has under 4.5:1 contrast against the slide background, then in the slide text color.
1153
1058
  */
1154
1059
  hyperlink?: string;
1155
1060
  /**
@@ -1169,27 +1074,21 @@ interface ColorScheme {
1169
1074
  */
1170
1075
  accent?: string;
1171
1076
  /**
1172
- * Abstract role: default slide background color (hex). The engine maps this to one of light1 / light2 / dark1 / dark2 when serializing.
1077
+ * Abstract role: default slide background color (hex), used when the design names no single-color background (and for gradient and picture backgrounds). Overrides light1 as that default.
1173
1078
  */
1174
1079
  background?: string;
1175
1080
  /**
1176
- * Abstract role: color for elevated surfaces such as cards and panels (hex).
1081
+ * Abstract role: color for elevated surfaces such as cards and panels (hex). Overrides the default of light2 (dark2 on a dark slide).
1177
1082
  */
1178
1083
  surface?: string;
1179
1084
  /**
1180
- * Abstract role: primary body text color (hex).
1085
+ * Abstract role: primary body text color (hex). Overrides dark1 on a light slide only; a dark slide always uses light1.
1181
1086
  */
1182
1087
  text?: string;
1183
1088
  /**
1184
- * Abstract role: secondary or muted text color used for captions and supporting copy (hex).
1089
+ * Abstract role: secondary or muted text color used for captions and supporting copy (hex). Overrides the default of dark2 (light2 on a dark slide).
1185
1090
  */
1186
1091
  textSecondary?: string;
1187
- /**
1188
- * Map of custom named colors for advanced or theme-specific use.
1189
- */
1190
- custom?: {
1191
- [k: string]: string;
1192
- };
1193
1092
  [k: string]: unknown;
1194
1093
  }
1195
1094
  /**
@@ -1197,18 +1096,16 @@ interface ColorScheme {
1197
1096
  *
1198
1097
  * Two parallel models are supported and may be mixed:
1199
1098
  * - OOXML pairs (major, minor) - heading and body family names that round-trip directly to PowerPoint majorFont/minorFont entries.
1200
- * - Abstract roles (heading, body, accent, code) - OPF-specific Font objects the engine maps onto the OOXML pair when serializing. Convenient for inline overrides and for adding accent/code roles that don't have a direct OOXML slot. Catalog records may also carry 'code' (for example the consolas and courier-new records); heading, body and accent are not part of the catalog record schema.
1099
+ * - Abstract roles (heading, body, accent, code) - OPF-specific font family names the engine maps onto the OOXML pair when serializing. Convenient for inline overrides and for adding accent/code roles that don't have a direct OOXML slot. Catalog records may also carry 'code' (for example the consolas and courier-new records); heading, body and accent are not part of the catalog record schema. A role is a family name only: weight, style and tracking come from the text styles, and PowerPoint has no numeric weight.
1201
1100
  *
1202
- * In design.fontScheme, 'id' resolves a fontSchemes catalog record as the base; pair and role overrides on the same object take precedence over the resolved scheme. The string shorthand on design.fontScheme is equivalent to setting only 'id'.
1101
+ * In design.fontScheme, 'id' resolves a fontSchemes record as the base; pair and role overrides on the same object take precedence over the resolved scheme. The string form of design.fontScheme is equivalent to setting only 'id'.
1203
1102
  *
1204
1103
  * This interface was referenced by `Presentation`'s JSON-Schema
1205
1104
  * via the `definition` "FontScheme".
1206
1105
  */
1207
1106
  interface FontScheme {
1208
1107
  /**
1209
- * Font scheme reference. Resolves to the 'id' of a 'fontSchemes' catalog record. Accepts a bare id (lowercase kebab-case, e.g. 'aptos'), an HTTPS URL pointing at a record file, or a 'pkg:' reference. Field overrides on the surrounding FontScheme object take precedence over the resolved scheme.
1210
- *
1211
- * Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.source -> default catalog at https://www.pptx.gallery/font-schemes.
1108
+ * A content reference: a bare id ('two-column') or 'name:id' ('acme:hero'), where the prefix names a group of 'catalogs'. URLs and 'pkg:' strings are not references; a named catalog group replaces them. See Catalogs for the resolution order.
1212
1109
  */
1213
1110
  id?: string;
1214
1111
  /**
@@ -1250,105 +1147,47 @@ interface FontScheme {
1250
1147
  */
1251
1148
  type?: ("sans-serif" | "serif" | "monospace");
1252
1149
  /**
1253
- * Target application this font pairing is intended for.
1254
- */
1255
- app?: ("PowerPoint" | "Google Slides");
1256
- /**
1257
- * OOXML font-language family this scheme is intended for: 'latin' for Latin-script content, 'ea' for East Asian scripts, 'cs' for Complex Scripts. As the design font scheme, an 'ea' or 'cs' scheme also fills that script slot with its own major/minor families when its languages list is empty or names the presentation language.
1258
- */
1259
- languageFamily?: ("latin" | "ea" | "cs");
1260
- heading?: Font;
1261
- body?: Font1;
1262
- accent?: Font2;
1263
- code?: Font3;
1264
- [k: string]: unknown;
1265
- }
1266
- /**
1267
- * Abstract role: font used for slide titles and headings. Maps onto the OOXML major slot when serializing.
1268
- */
1269
- interface Font {
1270
- /**
1271
- * Font family name.
1272
- */
1273
- family: string;
1274
- /**
1275
- * Numeric font weight (e.g., 400 for regular, 700 for bold).
1276
- */
1277
- weight?: number;
1278
- /**
1279
- * Font style.
1280
- */
1281
- style?: ("normal" | "italic");
1282
- /**
1283
- * Letter spacing (tracking) in ems.
1284
- */
1285
- letterSpacing?: number;
1286
- [k: string]: unknown;
1287
- }
1288
- /**
1289
- * Abstract role: font used for body copy. Maps onto the OOXML minor slot when serializing.
1290
- */
1291
- interface Font1 {
1292
- /**
1293
- * Font family name.
1150
+ * Target application this font pairing is intended for. Metadata for pickers and catalog filters: no engine changes its output by it.
1294
1151
  */
1295
- family: string;
1152
+ app?: ("powerpoint" | "google-slides");
1296
1153
  /**
1297
- * Numeric font weight (e.g., 400 for regular, 700 for bold).
1154
+ * Font-language family this scheme is intended for: 'latin' for Latin-script content, 'ea' (or 'eastAsian', the same value) for East Asian scripts, 'cs' (or 'complexScript', the same value) for Complex Scripts. The long names match the 'eastAsian' and 'complexScript' slot keys; the short names match the OOXML a:ea and a:cs elements; core reads both spellings as one value. As the design font scheme, an 'ea'/'eastAsian' or 'cs'/'complexScript' scheme also fills that script slot with its own major/minor families when its languages list is empty or names the presentation language.
1298
1155
  */
1299
- weight?: number;
1300
- /**
1301
- * Font style.
1302
- */
1303
- style?: ("normal" | "italic");
1304
- /**
1305
- * Letter spacing (tracking) in ems.
1306
- */
1307
- letterSpacing?: number;
1308
- [k: string]: unknown;
1309
- }
1310
- /**
1311
- * Abstract role: font used for accent text. When set, the slide tag (eyebrow) and the quote body use this family instead of the body and heading families; nothing else changes. resolveFontFamilies() returns it as accent only when the scheme defines it. No direct OOXML slot: PPTX export writes it on those runs, and the theme fonts stay major/minor.
1312
- */
1313
- interface Font2 {
1156
+ languageFamily?: ("latin" | "ea" | "cs" | "eastAsian" | "complexScript");
1314
1157
  /**
1315
- * Font family name.
1158
+ * Abstract role: font family name used for slide titles and headings. Maps onto the OOXML major slot when serializing.
1316
1159
  */
1317
- family: string;
1160
+ heading?: string;
1318
1161
  /**
1319
- * Numeric font weight (e.g., 400 for regular, 700 for bold).
1162
+ * Abstract role: font family name used for body copy. Maps onto the OOXML minor slot when serializing.
1320
1163
  */
1321
- weight?: number;
1164
+ body?: string;
1322
1165
  /**
1323
- * Font style.
1166
+ * Abstract role: font family name used for accent text. When set, the slide tag (eyebrow) and the quote body use this family instead of the body and heading families; nothing else changes. resolveFontFamilies() returns it as accent only when the scheme defines it. No direct OOXML slot: PPTX export writes it on those runs, and the theme fonts stay major/minor.
1324
1167
  */
1325
- style?: ("normal" | "italic");
1168
+ accent?: string;
1326
1169
  /**
1327
- * Letter spacing (tracking) in ems.
1170
+ * Abstract role: monospaced font family name used for code blocks and for inline code runs (TextRun.code). No direct OOXML slot. Resolution: this override, then the resolved font-scheme record's 'code' (for example Consolas for the consolas scheme), then the engine fallback Roboto Mono. Heading and body families are never used as the code fallback.
1328
1171
  */
1329
- letterSpacing?: number;
1172
+ code?: string;
1330
1173
  [k: string]: unknown;
1331
1174
  }
1332
1175
  /**
1333
- * Abstract role: monospaced font used for code blocks and inline code. No direct OOXML slot. Resolution: this override, then the resolved catalog record's 'code' (for example Consolas for the consolas scheme), then the engine fallback Roboto Mono. Heading and body families are never used as the code fallback.
1176
+ * Slide dimensions; either pick a preset or specify custom inches.
1177
+ *
1178
+ * This interface was referenced by `Presentation`'s JSON-Schema
1179
+ * via the `definition` "Dimensions".
1334
1180
  */
1335
- interface Font3 {
1336
- /**
1337
- * Font family name.
1338
- */
1339
- family: string;
1340
- /**
1341
- * Numeric font weight (e.g., 400 for regular, 700 for bold).
1342
- */
1343
- weight?: number;
1181
+ interface Dimensions {
1182
+ preset?: DimensionPreset;
1344
1183
  /**
1345
- * Font style.
1184
+ * Custom slide width in inches; overrides the preset width when provided.
1346
1185
  */
1347
- style?: ("normal" | "italic");
1186
+ widthInches?: number;
1348
1187
  /**
1349
- * Letter spacing (tracking) in ems.
1188
+ * Custom slide height in inches; overrides the preset height when provided.
1350
1189
  */
1351
- letterSpacing?: number;
1190
+ heightInches?: number;
1352
1191
  [k: string]: unknown;
1353
1192
  }
1354
1193
  /**
@@ -1379,7 +1218,7 @@ interface SolidBackground {
1379
1218
  /**
1380
1219
  * Fixed solid fill color: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef, resolved against the effective color scheme and the deck variables). Use { type: 'theme', slot: ... } for PowerPoint's four theme-controlled background choices.
1381
1220
  */
1382
- color: string;
1221
+ color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1383
1222
  /**
1384
1223
  * Background opacity from 0 (fully transparent) to 1 (fully opaque).
1385
1224
  */
@@ -1406,21 +1245,47 @@ interface GradientBackground {
1406
1245
  */
1407
1246
  angle?: number;
1408
1247
  /**
1409
- * Ordered list of color stops along the gradient.
1248
+ * Ordered list of color stops along the gradient. A gradient needs at least two stops.
1249
+ *
1250
+ * @minItems 2
1410
1251
  *
1411
1252
  * Items: Color stop along the gradient.
1412
1253
  */
1413
- stops?: {
1414
- /**
1415
- * Stop color: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1416
- */
1417
- color: string;
1418
- /**
1419
- * Stop position along the gradient, from 0 (start) to 1 (end).
1420
- */
1421
- position: number;
1422
- [k: string]: unknown;
1423
- }[];
1254
+ stops?: [
1255
+ {
1256
+ /**
1257
+ * Stop color: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1258
+ */
1259
+ color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1260
+ /**
1261
+ * Stop position along the gradient, from 0 (start) to 1 (end).
1262
+ */
1263
+ position: number;
1264
+ [k: string]: unknown;
1265
+ },
1266
+ {
1267
+ /**
1268
+ * Stop color: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1269
+ */
1270
+ color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1271
+ /**
1272
+ * Stop position along the gradient, from 0 (start) to 1 (end).
1273
+ */
1274
+ position: number;
1275
+ [k: string]: unknown;
1276
+ },
1277
+ ...({
1278
+ /**
1279
+ * Stop color: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1280
+ */
1281
+ color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1282
+ /**
1283
+ * Stop position along the gradient, from 0 (start) to 1 (end).
1284
+ */
1285
+ position: number;
1286
+ [k: string]: unknown;
1287
+ })[]
1288
+ ];
1424
1289
  [k: string]: unknown;
1425
1290
  };
1426
1291
  /**
@@ -1430,35 +1295,81 @@ interface GradientBackground {
1430
1295
  [k: string]: unknown;
1431
1296
  }
1432
1297
  /**
1433
- * Fixed image slide background fill.
1298
+ * Picture background: the image fills the whole canvas behind everything and never moves content (to push content aside, use an image block with placement). The string shorthand 'asset:x' (or any image source) is { type: 'image', src: 'asset:x' }, a cover image. Paint order: the colour scheme's default slide background, the picture, then the overlay, then furniture and content.
1434
1299
  *
1435
1300
  * This interface was referenced by `Presentation`'s JSON-Schema
1436
1301
  * via the `definition` "ImageBackground".
1437
1302
  */
1438
1303
  interface ImageBackground {
1439
1304
  /**
1440
- * Fixed image background fill.
1305
+ * Picture background.
1441
1306
  */
1442
1307
  type: "image";
1443
1308
  /**
1444
- * Image fill definition.
1309
+ * Source for the background image: an 'asset:<id>' reference, HTTPS URL, data URI, or a relative path resolved against the OPF file location.
1310
+ */
1311
+ src: string;
1312
+ /**
1313
+ * Alternative text. A background with alt is meaningful: PowerPoint export draws it as a full-slide picture at the back that carries the text, so screen readers see it. Without alt it is decorative and exports as the native slide background; the alt text of a referenced asset does not count, so a background is decorative unless it says otherwise.
1445
1314
  */
1446
- image: {
1315
+ alt?: string;
1316
+ /**
1317
+ * How the picture fills the canvas: 'cover' fills it and crops what overflows around focus; 'contain' shows the whole picture centered over the colour scheme's default background; 'stretch' scales it to the canvas exactly; 'tile' repeats it at its own size from the top-left corner. Default 'cover'.
1318
+ */
1319
+ fit?: ("cover" | "contain" | "stretch" | "tile");
1320
+ focus?: ImageFocus;
1321
+ /**
1322
+ * Picture opacity from 0 (fully transparent) to 1 (fully opaque); the overlay keeps its own opacity. Default 1.
1323
+ */
1324
+ opacity?: number;
1325
+ /**
1326
+ * Grayscale or duotone treatment of the picture's pixels, as on an image block: recolor and opacity apply to the pixels, then the overlay is drawn above.
1327
+ */
1328
+ recolor?: ("grayscale" | {
1447
1329
  /**
1448
- * Source for the background image.
1330
+ * Color at luminance 0.
1449
1331
  */
1450
- src: string;
1332
+ dark: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1451
1333
  /**
1452
- * How the image fills the slide background.
1334
+ * Color at luminance 1.
1453
1335
  */
1454
- fit?: ("cover" | "contain" | "tile");
1455
- [k: string]: unknown;
1456
- };
1336
+ light: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1337
+ });
1338
+ overlay?: Overlay;
1339
+ }
1340
+ /**
1341
+ * Point of the picture to keep in view when 'cover' crops it. Ignored by the other fits.
1342
+ */
1343
+ interface ImageFocus {
1457
1344
  /**
1458
- * Background opacity from 0 (fully transparent) to 1 (fully opaque).
1345
+ * Horizontal position, 0 (left edge) to 1 (right edge).
1459
1346
  */
1460
- opacity?: number;
1461
- [k: string]: unknown;
1347
+ x: number;
1348
+ /**
1349
+ * Vertical position, 0 (top edge) to 1 (bottom edge).
1350
+ */
1351
+ y: number;
1352
+ }
1353
+ /**
1354
+ * Scrim over the whole picture or a band along one edge (edge, size), beneath furniture and content, for example to keep a title readable over a busy photo.
1355
+ */
1356
+ interface Overlay {
1357
+ /**
1358
+ * Overlay fill color: a hex color (eight-digit hex keeps its alpha), a color-scheme slot or role name, or a 'var:<id>' variable reference.
1359
+ */
1360
+ color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1361
+ /**
1362
+ * Overlay fill opacity.
1363
+ */
1364
+ opacity: number;
1365
+ /**
1366
+ * Cover only a band along this edge of the frame, for example a caption strip. Backgrounds and rectangle image frames only; on another shape the overlay is not drawn and composition reports unsupported-image-treatment. Omit to cover the whole frame. In a right-to-left deck 'left' and 'right' are the start and end sides.
1367
+ */
1368
+ edge?: ("top" | "bottom" | "left" | "right");
1369
+ /**
1370
+ * Band share of the frame for an edge overlay. Default 0.3. Ignored without edge.
1371
+ */
1372
+ size?: number;
1462
1373
  }
1463
1374
  /**
1464
1375
  * Fixed pattern slide background fill.
@@ -1482,11 +1393,11 @@ interface PatternBackground {
1482
1393
  /**
1483
1394
  * Foreground color for the pattern: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1484
1395
  */
1485
- foregroundColor?: string;
1396
+ foregroundColor?: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1486
1397
  /**
1487
1398
  * Background color behind the pattern: a hex string, a color-scheme slot or role name, or a var:<id> variable reference (a ColorRef).
1488
1399
  */
1489
- backgroundColor?: string;
1400
+ backgroundColor?: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
1490
1401
  [k: string]: unknown;
1491
1402
  };
1492
1403
  /**
@@ -1495,24 +1406,6 @@ interface PatternBackground {
1495
1406
  opacity?: number;
1496
1407
  [k: string]: unknown;
1497
1408
  }
1498
- /**
1499
- * Slide dimensions; either pick a preset or specify custom inches.
1500
- *
1501
- * This interface was referenced by `Presentation`'s JSON-Schema
1502
- * via the `definition` "Dimensions".
1503
- */
1504
- interface Dimensions {
1505
- preset?: DimensionPreset;
1506
- /**
1507
- * Custom slide width in inches; overrides the preset width when provided.
1508
- */
1509
- widthInches?: number;
1510
- /**
1511
- * Custom slide height in inches; overrides the preset height when provided.
1512
- */
1513
- heightInches?: number;
1514
- [k: string]: unknown;
1515
- }
1516
1409
  /**
1517
1410
  * Deck logo variants surfaced by covers, section dividers, headers, footers and picture bullets. Organization identity lives in organization; this object only controls visual rendering assets. Engines select one variant per slot and background tone (resolveLogo in @openpresentation/opf): same-tone variants first, neutral ones next, the opposite tone last. Lockup on a dark background: light, default, stackedLight, stacked, wordmarkLight, wordmark, iconLight, icon, then dark, stackedDark, wordmarkDark, iconDark; on a light background: dark, default, stackedDark, stacked, wordmarkDark, wordmark, iconDark, icon, then light, stackedLight, wordmarkLight, iconLight. The icon slot (headers, footers, picture bullets) tries iconLight or iconDark for the tone, then icon, then the lockup chain; the stacked slot tries stackedLight or stackedDark, then stacked, then the lockup chain.
1518
1411
  *
@@ -1521,7 +1414,7 @@ interface Dimensions {
1521
1414
  */
1522
1415
  interface LogoSet {
1523
1416
  /**
1524
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1417
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1525
1418
  */
1526
1419
  default?: (string | {
1527
1420
  /**
@@ -1544,13 +1437,9 @@ interface LogoSet {
1544
1437
  * Optional MIME media type when it cannot be inferred from src.
1545
1438
  */
1546
1439
  mediaType?: string;
1547
- /**
1548
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1549
- */
1550
- format?: string;
1551
1440
  });
1552
1441
  /**
1553
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1442
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1554
1443
  */
1555
1444
  light?: (string | {
1556
1445
  /**
@@ -1573,13 +1462,9 @@ interface LogoSet {
1573
1462
  * Optional MIME media type when it cannot be inferred from src.
1574
1463
  */
1575
1464
  mediaType?: string;
1576
- /**
1577
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1578
- */
1579
- format?: string;
1580
1465
  });
1581
1466
  /**
1582
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1467
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1583
1468
  */
1584
1469
  dark?: (string | {
1585
1470
  /**
@@ -1602,13 +1487,9 @@ interface LogoSet {
1602
1487
  * Optional MIME media type when it cannot be inferred from src.
1603
1488
  */
1604
1489
  mediaType?: string;
1605
- /**
1606
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1607
- */
1608
- format?: string;
1609
1490
  });
1610
1491
  /**
1611
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1492
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1612
1493
  */
1613
1494
  stacked?: (string | {
1614
1495
  /**
@@ -1631,13 +1512,9 @@ interface LogoSet {
1631
1512
  * Optional MIME media type when it cannot be inferred from src.
1632
1513
  */
1633
1514
  mediaType?: string;
1634
- /**
1635
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1636
- */
1637
- format?: string;
1638
1515
  });
1639
1516
  /**
1640
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1517
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1641
1518
  */
1642
1519
  stackedLight?: (string | {
1643
1520
  /**
@@ -1660,13 +1537,9 @@ interface LogoSet {
1660
1537
  * Optional MIME media type when it cannot be inferred from src.
1661
1538
  */
1662
1539
  mediaType?: string;
1663
- /**
1664
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1665
- */
1666
- format?: string;
1667
1540
  });
1668
1541
  /**
1669
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1542
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1670
1543
  */
1671
1544
  stackedDark?: (string | {
1672
1545
  /**
@@ -1689,13 +1562,9 @@ interface LogoSet {
1689
1562
  * Optional MIME media type when it cannot be inferred from src.
1690
1563
  */
1691
1564
  mediaType?: string;
1692
- /**
1693
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1694
- */
1695
- format?: string;
1696
1565
  });
1697
1566
  /**
1698
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1567
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1699
1568
  */
1700
1569
  icon?: (string | {
1701
1570
  /**
@@ -1718,13 +1587,9 @@ interface LogoSet {
1718
1587
  * Optional MIME media type when it cannot be inferred from src.
1719
1588
  */
1720
1589
  mediaType?: string;
1721
- /**
1722
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1723
- */
1724
- format?: string;
1725
1590
  });
1726
1591
  /**
1727
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1592
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1728
1593
  */
1729
1594
  iconLight?: (string | {
1730
1595
  /**
@@ -1747,13 +1612,9 @@ interface LogoSet {
1747
1612
  * Optional MIME media type when it cannot be inferred from src.
1748
1613
  */
1749
1614
  mediaType?: string;
1750
- /**
1751
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1752
- */
1753
- format?: string;
1754
1615
  });
1755
1616
  /**
1756
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1617
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1757
1618
  */
1758
1619
  iconDark?: (string | {
1759
1620
  /**
@@ -1776,13 +1637,9 @@ interface LogoSet {
1776
1637
  * Optional MIME media type when it cannot be inferred from src.
1777
1638
  */
1778
1639
  mediaType?: string;
1779
- /**
1780
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1781
- */
1782
- format?: string;
1783
1640
  });
1784
1641
  /**
1785
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1642
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1786
1643
  */
1787
1644
  wordmark?: (string | {
1788
1645
  /**
@@ -1805,13 +1662,9 @@ interface LogoSet {
1805
1662
  * Optional MIME media type when it cannot be inferred from src.
1806
1663
  */
1807
1664
  mediaType?: string;
1808
- /**
1809
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1810
- */
1811
- format?: string;
1812
1665
  });
1813
1666
  /**
1814
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1667
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1815
1668
  */
1816
1669
  wordmarkLight?: (string | {
1817
1670
  /**
@@ -1834,13 +1687,9 @@ interface LogoSet {
1834
1687
  * Optional MIME media type when it cannot be inferred from src.
1835
1688
  */
1836
1689
  mediaType?: string;
1837
- /**
1838
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1839
- */
1840
- format?: string;
1841
1690
  });
1842
1691
  /**
1843
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1692
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1844
1693
  */
1845
1694
  wordmarkDark?: (string | {
1846
1695
  /**
@@ -1863,28 +1712,8 @@ interface LogoSet {
1863
1712
  * Optional MIME media type when it cannot be inferred from src.
1864
1713
  */
1865
1714
  mediaType?: string;
1866
- /**
1867
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1868
- */
1869
- format?: string;
1870
1715
  });
1871
1716
  }
1872
- /**
1873
- * Decorative watermark image and rendering options. Use design.watermark = false to disable an inherited watermark.
1874
- *
1875
- * This interface was referenced by `Presentation`'s JSON-Schema
1876
- * via the `definition` "Watermark".
1877
- */
1878
- interface Watermark {
1879
- /**
1880
- * Source for the watermark image.
1881
- */
1882
- src?: string;
1883
- /**
1884
- * Watermark opacity from 0 (fully transparent) to 1 (fully opaque).
1885
- */
1886
- opacity: number;
1887
- }
1888
1717
  /**
1889
1718
  * Repeated header or footer content split into left, center, and right zones. Header/footer content is slide furniture, separate from the main slide content payloads.
1890
1719
  *
@@ -1910,7 +1739,7 @@ interface HeaderFooterItem {
1910
1739
  */
1911
1740
  text?: string;
1912
1741
  /**
1913
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1742
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1914
1743
  */
1915
1744
  image?: (string | {
1916
1745
  /**
@@ -1933,10 +1762,6 @@ interface HeaderFooterItem {
1933
1762
  * Optional MIME media type when it cannot be inferred from src.
1934
1763
  */
1935
1764
  mediaType?: string;
1936
- /**
1937
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
1938
- */
1939
- format?: string;
1940
1765
  });
1941
1766
  /**
1942
1767
  * Whether to render the current slide number in this zone. PPTX export writes a native slide-number field when its value fits within one accepted text line; a value split across lines exports as static text with a diagnostic.
@@ -1955,9 +1780,13 @@ interface HeaderFooterItem {
1955
1780
  */
1956
1781
  dateFormat?: string;
1957
1782
  /**
1958
- * Whether to render the primary organization name from organization.
1783
+ * Whether to render the primary organization's name from organization (role 'primary', else the first organization).
1959
1784
  */
1960
1785
  organization?: boolean;
1786
+ /**
1787
+ * Whether to render the primary (first) speaker's name and title from speaker, joined as 'Ada Lovelace, CTO' (just the name when the speaker has no title). It is generated text: without a named speaker the engine reports unresolved-content at this field. PPTX export writes it as static text and import restores the flag from the file's furniture provenance.
1788
+ */
1789
+ speaker?: boolean;
1961
1790
  /**
1962
1791
  * Whether to render the current slide section label.
1963
1792
  */
@@ -1981,7 +1810,7 @@ interface HeaderFooterItem1 {
1981
1810
  */
1982
1811
  text?: string;
1983
1812
  /**
1984
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1813
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
1985
1814
  */
1986
1815
  image?: (string | {
1987
1816
  /**
@@ -2004,10 +1833,6 @@ interface HeaderFooterItem1 {
2004
1833
  * Optional MIME media type when it cannot be inferred from src.
2005
1834
  */
2006
1835
  mediaType?: string;
2007
- /**
2008
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
2009
- */
2010
- format?: string;
2011
1836
  });
2012
1837
  /**
2013
1838
  * Whether to render the current slide number in this zone. PPTX export writes a native slide-number field when its value fits within one accepted text line; a value split across lines exports as static text with a diagnostic.
@@ -2026,9 +1851,13 @@ interface HeaderFooterItem1 {
2026
1851
  */
2027
1852
  dateFormat?: string;
2028
1853
  /**
2029
- * Whether to render the primary organization name from organization.
1854
+ * Whether to render the primary organization's name from organization (role 'primary', else the first organization).
2030
1855
  */
2031
1856
  organization?: boolean;
1857
+ /**
1858
+ * Whether to render the primary (first) speaker's name and title from speaker, joined as 'Ada Lovelace, CTO' (just the name when the speaker has no title). It is generated text: without a named speaker the engine reports unresolved-content at this field. PPTX export writes it as static text and import restores the flag from the file's furniture provenance.
1859
+ */
1860
+ speaker?: boolean;
2032
1861
  /**
2033
1862
  * Whether to render the current slide section label.
2034
1863
  */
@@ -2052,7 +1881,7 @@ interface HeaderFooterItem2 {
2052
1881
  */
2053
1882
  text?: string;
2054
1883
  /**
2055
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
1884
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
2056
1885
  */
2057
1886
  image?: (string | {
2058
1887
  /**
@@ -2075,10 +1904,6 @@ interface HeaderFooterItem2 {
2075
1904
  * Optional MIME media type when it cannot be inferred from src.
2076
1905
  */
2077
1906
  mediaType?: string;
2078
- /**
2079
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
2080
- */
2081
- format?: string;
2082
1907
  });
2083
1908
  /**
2084
1909
  * Whether to render the current slide number in this zone. PPTX export writes a native slide-number field when its value fits within one accepted text line; a value split across lines exports as static text with a diagnostic.
@@ -2097,9 +1922,13 @@ interface HeaderFooterItem2 {
2097
1922
  */
2098
1923
  dateFormat?: string;
2099
1924
  /**
2100
- * Whether to render the primary organization name from organization.
1925
+ * Whether to render the primary organization's name from organization (role 'primary', else the first organization).
2101
1926
  */
2102
1927
  organization?: boolean;
1928
+ /**
1929
+ * Whether to render the primary (first) speaker's name and title from speaker, joined as 'Ada Lovelace, CTO' (just the name when the speaker has no title). It is generated text: without a named speaker the engine reports unresolved-content at this field. PPTX export writes it as static text and import restores the flag from the file's furniture provenance.
1930
+ */
1931
+ speaker?: boolean;
2103
1932
  /**
2104
1933
  * Whether to render the current slide section label.
2105
1934
  */
@@ -2111,7 +1940,7 @@ interface HeaderFooterItem2 {
2111
1940
  [k: string]: unknown;
2112
1941
  }
2113
1942
  /**
2114
- * Optional named variables: deck colors referenced as 'var:<id>' (the original use), and typed content variables (text, number, date, image, url, list) referenced inline as '{{<id>}}' or whole as 'var:<id>'. Variables are what makes a deck a fillable template when combined with 'template': true. Color variables complement the color scheme: scheme slots and roles stay the primary vocabulary; variables cover deck-specific named colors that have no scheme slot.
1943
+ * Optional named variables: deck colors referenced as 'var:<id>' (the original use), and typed content variables (text, number, date, image, url, list) referenced inline as '{{<id>}}' or whole as 'var:<id>'. Variables are what makes a deck a fillable template when combined with 'template': true. Color variables complement the color scheme: scheme slots and roles stay the primary vocabulary; variables cover deck-specific named colors that have no scheme slot. Built-in variables ('{{speaker.name}}', 'var:organization.logo', 'deck.name', ...) need no declaration; see Variables.
2115
1944
  */
2116
1945
  interface Variables {
2117
1946
  [k: string]: Variable;
@@ -2264,7 +2093,7 @@ interface ImageVariable {
2264
2093
  */
2265
2094
  type: "image";
2266
2095
  /**
2267
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
2096
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
2268
2097
  */
2269
2098
  value?: (string | {
2270
2099
  /**
@@ -2287,10 +2116,6 @@ interface ImageVariable {
2287
2116
  * Optional MIME media type when it cannot be inferred from src.
2288
2117
  */
2289
2118
  mediaType?: string;
2290
- /**
2291
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
2292
- */
2293
- format?: string;
2294
2119
  });
2295
2120
  /**
2296
2121
  * Whether the variable must be filled. Defaults to true: a variable with no 'value' is unfilled, and an unfilled required variable is an error in a normal deck and expected in a template. Set false for an optional slot: an unfilled optional variable resolves to empty text (inline tokens) or the field that references it is omitted.
@@ -2305,7 +2130,7 @@ interface ImageVariable {
2305
2130
  */
2306
2131
  description?: string;
2307
2132
  /**
2308
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
2133
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
2309
2134
  */
2310
2135
  example?: (string | {
2311
2136
  /**
@@ -2328,10 +2153,6 @@ interface ImageVariable {
2328
2153
  * Optional MIME media type when it cannot be inferred from src.
2329
2154
  */
2330
2155
  mediaType?: string;
2331
- /**
2332
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
2333
- */
2334
- format?: string;
2335
2156
  });
2336
2157
  }
2337
2158
  /**
@@ -2358,157 +2179,45 @@ interface UrlVariable {
2358
2179
  */
2359
2180
  label?: string;
2360
2181
  /**
2361
- * Optional prose describing what the variable is for, surfaced by pickers, fill forms and agents.
2362
- */
2363
- description?: string;
2364
- /**
2365
- * Illustrative link shown in fill forms and used when a template is previewed with examples. Never written to output.
2366
- */
2367
- example?: string;
2368
- }
2369
- /**
2370
- * A list of strings, for bullets and list items. A whole-string array element 'var:<id>' splices every entry into the array in place; a whole field 'var:<id>' becomes the array; '{{<id>}}' joins the entries with ', ' (or the separator after a pipe: '{{<id>|; }}').
2371
- *
2372
- * This interface was referenced by `Presentation`'s JSON-Schema
2373
- * via the `definition` "ListVariable".
2374
- */
2375
- interface ListVariable {
2376
- /**
2377
- * Variable kind. One of color, text, number, date, image, url or list.
2378
- */
2379
- type: "list";
2380
- /**
2381
- * Entries this variable resolves to.
2382
- */
2383
- value?: string[];
2384
- /**
2385
- * Whether the variable must be filled. Defaults to true: a variable with no 'value' is unfilled, and an unfilled required variable is an error in a normal deck and expected in a template. Set false for an optional slot: an unfilled optional variable resolves to empty text (inline tokens) or the field that references it is omitted.
2386
- */
2387
- required?: boolean;
2388
- /**
2389
- * Optional short human label for forms and fill panels.
2390
- */
2391
- label?: string;
2392
- /**
2393
- * Optional prose describing what the variable is for, surfaced by pickers, fill forms and agents.
2394
- */
2395
- description?: string;
2396
- /**
2397
- * Illustrative entries shown in fill forms and used when a template is previewed with examples. Never written to output.
2398
- */
2399
- example?: string[];
2400
- }
2401
- /**
2402
- * Structured storyline used by AI to shape generated content. Mirrors the OPF Narrative Template record at https://openpresentation.org/schema/opf-narrative/v1 (sans '$schema'), so a library record and an inline narrative are interchangeable.
2403
- *
2404
- * Narrative declares the deck's intended story arc; slides may opt into beats via Slide.beat. The narrative does not constrain slide structure — validators warn on drift (orphan slides, unused beats) but never error. Slides are the source of truth; narrative is intent that travels with the deck.
2405
- *
2406
- * When 'id' matches a record in the resolved 'narratives' catalog, the inline fields override matching fields on the catalog record (beats merge by beat 'id'). When 'id' doesn't match, this object defines a fully custom inline narrative.
2407
- *
2408
- * Deck-level concerns that aren't part of the storyline (audience, tone, takeaway, duration) live as siblings on the presentation root rather than inside this object.
2409
- *
2410
- * This interface was referenced by `Presentation`'s JSON-Schema
2411
- * via the `definition` "Narrative".
2412
- */
2413
- interface Narrative {
2414
- /**
2415
- * Stable slug identifying this narrative. When it matches a record in the resolved 'narratives' catalog, the catalog record's beats and metadata seed this narrative; inline fields override per-key. When it doesn't match, this is a fully custom inline narrative. Lowercase kebab-case.
2416
- */
2417
- id?: string;
2418
- /**
2419
- * Human-readable narrative name.
2420
- */
2421
- name?: string;
2422
- /**
2423
- * One-sentence description of when and why to use this narrative.
2424
- */
2425
- summary?: string;
2426
- /**
2427
- * Longer prose describing the narrative arc and ideal use cases. Used by AI-driven generation to seed deck-level direction.
2428
- */
2429
- description?: string;
2430
- /**
2431
- * Audiences this narrative works well for. Free-form strings or 'audiences' catalog ids.
2432
- */
2433
- audienceFit?: string[];
2434
- /**
2435
- * Typical talk-length window this narrative suits. Compared by validators against duration.
2436
- */
2437
- durationRange?: {
2438
- minMinutes?: number;
2439
- maxMinutes?: number;
2440
- [k: string]: unknown;
2441
- };
2442
- /**
2443
- * Free-form labels for filtering and search.
2444
- */
2445
- tags?: string[];
2446
- /**
2447
- * Visual previews of the narrative, used by picker UIs and inline rendering. All sub-fields are optional.
2182
+ * Optional prose describing what the variable is for, surfaced by pickers, fill forms and agents.
2448
2183
  */
2449
- preview?: {
2450
- /**
2451
- * Main preview image (PNG/JPG).
2452
- */
2453
- src?: string;
2454
- /**
2455
- * Smaller thumbnail preview for dense grid views.
2456
- */
2457
- thumbnailSrc?: string;
2458
- /**
2459
- * SVG / vector preview for crisp scaling at any size.
2460
- */
2461
- vectorSrc?: string;
2462
- [k: string]: unknown;
2463
- };
2184
+ description?: string;
2464
2185
  /**
2465
- * Ordered list of beats that make up the narrative arc. When 'id' matches a catalog record, beats here override or extend matching catalog beats by their own 'id'. Beat IDs must be unique within the narrative.
2186
+ * Illustrative link shown in fill forms and used when a template is previewed with examples. Never written to output.
2466
2187
  */
2467
- beats?: NarrativeBeat[];
2468
- [k: string]: unknown;
2188
+ example?: string;
2469
2189
  }
2470
2190
  /**
2471
- * A single narrative beat — a labeled segment of the story arc with a specific dramatic purpose (e.g. 'hook', 'problem', 'evidence', 'ask'). Slides reference beats via Slide.beat. Beats may also carry slide-blueprint hints (slideType, layoutHint, thoughtCues, instructions) that guide the assigned slide.
2472
- *
2473
- * Mirrors the Beat definition in narrative.schema.json (https://openpresentation.org/schema/opf-narrative/v1) so library entries and inline OPF beats are interchangeable.
2191
+ * A list of strings, for bullets and list items. A whole-string array element 'var:<id>' splices every entry into the array in place; a whole field 'var:<id>' becomes the array; '{{<id>}}' joins the entries with ', ' (or the separator after a pipe: '{{<id>|; }}').
2474
2192
  *
2475
2193
  * This interface was referenced by `Presentation`'s JSON-Schema
2476
- * via the `definition` "NarrativeBeat".
2194
+ * via the `definition` "ListVariable".
2477
2195
  */
2478
- interface NarrativeBeat {
2479
- /**
2480
- * Stable slug used by Slide.beat to reference this beat. Lowercase kebab-case.
2481
- */
2482
- id: string;
2483
- /**
2484
- * Human-readable beat name.
2485
- */
2486
- name: string;
2196
+ interface ListVariable {
2487
2197
  /**
2488
- * Curator-written prose that explains what this beat should accomplish.
2198
+ * Variable kind. One of color, text, number, date, image, url or list.
2489
2199
  */
2490
- description?: string;
2200
+ type: "list";
2491
2201
  /**
2492
- * Short author-facing instruction for the beat — typically one phrase. Complements 'description' with a concise directive.
2202
+ * Entries this variable resolves to.
2493
2203
  */
2494
- instructions?: string;
2204
+ value?: string[];
2495
2205
  /**
2496
- * Optional explicit slide count for this beat. Defaults to 1 when omitted; values >1 are reserved for beats that intentionally span multiple slides. Prefer decomposing a heavy beat into multiple beats over setting a high slideCount. The validator emits a warning if the deck's actual count differs significantly.
2206
+ * Whether the variable must be filled. Defaults to true: a variable with no 'value' is unfilled, and an unfilled required variable is an error in a normal deck and expected in a template. Set false for an optional slot: an unfilled optional variable resolves to empty text (inline tokens) or the field that references it is omitted.
2497
2207
  */
2498
- slideCount?: number;
2208
+ required?: boolean;
2499
2209
  /**
2500
- * Default content kind for the beat's slide. Mirrors ContentPayload.type and helps engines choose a sensible layout when only the beat is specified.
2210
+ * Optional short human label for forms and fill panels.
2501
2211
  */
2502
- slideType?: ("text" | "list" | "image" | "chart" | "table" | "video" | "code" | "metric" | "quote" | "timeline");
2212
+ label?: string;
2503
2213
  /**
2504
- * Suggested layout id for the beat's opening slide. Resolves the same way as Slide.layout — against catalogs.layouts and the default catalog at https://www.pptx.gallery/layouts.
2214
+ * Optional prose describing what the variable is for, surfaced by pickers, fill forms and agents.
2505
2215
  */
2506
- layoutHint?: string;
2216
+ description?: string;
2507
2217
  /**
2508
- * Optional speaker or thinking cues attached to the beat. Surfaced in presenter notes.
2218
+ * Illustrative entries shown in fill forms and used when a template is previewed with examples. Never written to output.
2509
2219
  */
2510
- thoughtCues?: string[];
2511
- [k: string]: unknown;
2220
+ example?: string[];
2512
2221
  }
2513
2222
  /**
2514
2223
  * A single slide. Content can be authored as a full-slide root payload, or inside promoted named region keys such as 'left', 'center+right', and 'top:left'.
@@ -2526,27 +2235,25 @@ interface Slide {
2526
2235
  */
2527
2236
  type?: ("text" | "list" | "image" | "chart" | "table" | "video" | "code" | "metric" | "quote" | "timeline");
2528
2237
  /**
2529
- * Optional reference to one or more narrative beats (each value matches an id from narrative.beats or the resolved template). A single string declares the slide's primary beat; an array declares that one slide covers multiple beats. Declares the slide's role in the story arc; does not constrain ordering or structure. Slides without a beat are valid; multiple slides may share a beat.
2238
+ * Optional reference to one or more beats of the deck's narrative (each value is the id of a beat in the narrative record that the root 'narrative' resolves to). A single string declares the slide's primary beat; an array declares that one slide covers multiple beats. Declares the slide's role in the story arc; does not constrain ordering or structure. Core validate warns about a beat id the resolved narrative does not define, and reports a beat that no slide references. Slides without a beat are valid; multiple slides may share a beat.
2530
2239
  */
2531
2240
  beat?: (string | string[]);
2532
2241
  /**
2533
- * Optional slide layout reference. Resolves to the 'id' of a 'layouts' catalog record. When omitted, engines infer a layout from the slide's root payload or promoted region keys. Accepts a bare id (lowercase kebab-case, e.g. 'title-subtitle'), an HTTPS URL pointing at a record file, or a 'pkg:' reference. Free-form custom layout names that don't resolve through any catalog fall through to engine-defined layouts.
2534
- *
2535
- * Resolution order: inline catalogs.layouts.records[] → catalogs.layouts.source → default catalog at https://www.pptx.gallery/layouts.
2242
+ * A content reference: a bare id ('two-column') or 'name:id' ('acme:hero'), where the prefix names a group of 'catalogs'. URLs and 'pkg:' strings are not references; a named catalog group replaces them. See Catalogs for the resolution order.
2536
2243
  */
2537
2244
  layout?: string;
2538
2245
  /**
2539
- * Slide-level title content. When the resolved layout exposes a 'title' placeholder, the engine renders this value there.
2246
+ * Slide-level title content. When the resolved layout exposes a 'title' placeholder, the engine renders this value there. Use a string for plain text or TextRun[] for inline rich text (a colored word, bold, a link, a citation or footnote marker); the heading keeps its size and fitting rules either way, and run colors resolve like body text.
2540
2247
  */
2541
- title?: string;
2248
+ title?: (string | TextRun[]);
2542
2249
  /**
2543
- * Slide-level subtitle or supporting line. When the resolved layout exposes a 'subtitle' placeholder, the engine renders this value there.
2250
+ * Slide-level subtitle or supporting line. When the resolved layout exposes a 'subtitle' placeholder, the engine renders this value there. Use a string for plain text or TextRun[] for inline rich text (a colored word, bold, a link, a citation or footnote marker); the heading keeps its size and fitting rules either way, and run colors resolve like body text.
2544
2251
  */
2545
- subtitle?: string;
2252
+ subtitle?: (string | TextRun[]);
2546
2253
  /**
2547
- * Small slide-level label or badge. When the resolved layout exposes a 'tag' placeholder, the engine renders this value there.
2254
+ * Small slide-level label or badge. When the resolved layout exposes a 'tag' placeholder, the engine renders this value there. Use a string for plain text or TextRun[] for inline rich text (a colored word, bold, a link, a citation or footnote marker); the heading keeps its size and fitting rules either way, and run colors resolve like body text.
2548
2255
  */
2549
- tag?: string;
2256
+ tag?: (string | TextRun[]);
2550
2257
  /**
2551
2258
  * Full-slide text payload. Use a string for plain text or TextRun[] for inline rich text. TextRun items may be plain strings or formatted run objects.
2552
2259
  */
@@ -2564,7 +2271,7 @@ interface Slide {
2564
2271
  */
2565
2272
  numbering?: (NumberingStyle | Numbering | [(NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)] | [(NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering), (NumberingStyle | Numbering)]);
2566
2273
  /**
2567
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
2274
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
2568
2275
  */
2569
2276
  image?: (string | {
2570
2277
  /**
@@ -2587,13 +2294,9 @@ interface Slide {
2587
2294
  * Optional MIME media type when it cannot be inferred from src.
2588
2295
  */
2589
2296
  mediaType?: string;
2590
- /**
2591
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
2592
- */
2593
- format?: string;
2594
2297
  });
2595
2298
  /**
2596
- * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title, mediaType, or format matters.
2299
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
2597
2300
  */
2598
2301
  video?: (string | {
2599
2302
  /**
@@ -2616,10 +2319,6 @@ interface Slide {
2616
2319
  * Optional MIME media type when it cannot be inferred from src.
2617
2320
  */
2618
2321
  mediaType?: string;
2619
- /**
2620
- * Optional authoring/parsing format hint. Useful when format is more convenient than a full MIME media type.
2621
- */
2622
- format?: string;
2623
2322
  });
2624
2323
  chart?: Chart;
2625
2324
  table?: Table;
@@ -2628,7 +2327,7 @@ interface Slide {
2628
2327
  */
2629
2328
  code?: (string | Code);
2630
2329
  /**
2631
- * Full-slide metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, and trend metadata. Numeric values remain numbers; renderers format them for display. Presence of this field infers type 'metric'.
2330
+ * Full-slide metric payload. A string or number is shorthand for { "value": value }; object form carries optional label, description, unit, delta, trend, and sentiment metadata. Numeric values remain numbers; renderers format them for display. Presence of this field infers type 'metric'.
2632
2331
  */
2633
2332
  metric?: (string | number | Metric);
2634
2333
  /**
@@ -2675,6 +2374,9 @@ interface Slide {
2675
2374
  * Layout-agnostic content blocks rendered together as a composed payload when exact placement is unspecified. At slide root, multiple content payload kinds with no explicit type, blocks, or regions are accepted as shorthand for equivalent blocks.
2676
2375
  */
2677
2376
  blocks?: ContentPayload[];
2377
+ /**
2378
+ * Slide-level design applied on top of the deck-wide design.
2379
+ */
2678
2380
  design?: Design1;
2679
2381
  left?: ContentPayload;
2680
2382
  center?: ContentPayload;
@@ -2733,7 +2435,7 @@ interface Slide {
2733
2435
  */
2734
2436
  section?: string;
2735
2437
  /**
2736
- * Whether the slide is hidden from the presented sequence.
2438
+ * Whether the slide is hidden from the presented sequence. The player skips it, the PPTX export writes it as a hidden slide, and per-slide image and PDF output skips it unless the caller asks to include hidden slides (opf CLI: --include-hidden; the deck-level renderSvg: the opt-in skipHidden). A slide named explicitly (opf render --slides, renderSvg slideIndex) is still rendered.
2737
2439
  */
2738
2440
  hidden?: boolean;
2739
2441
  composition?: Composition1;
@@ -2769,14 +2471,26 @@ interface Numbering {
2769
2471
  */
2770
2472
  interface Chart {
2771
2473
  /**
2772
- * Chart type id. Resolves to the id of a chartTypes catalog record; renderers map that record through mappings.openxml and any renderer-specific mapping they understand. The bundled catalog covers the chart types Aspose.Slides officially supports; deprecated ids still resolve but validate with a warning naming their replacement.
2474
+ * Chart type, an engine vocabulary validated directly (no catalog lookup): the chart types Aspose.Slides officially supports, plus 'combo' (clustered columns with line series, see 'line' and 'secondaryAxis'). Each engine maps a type to its own chart model; labels and picker groups are catalog display metadata.
2773
2475
  */
2774
- type: string;
2476
+ type: ("100pct-stacked-area" | "100pct-stacked-bar" | "100pct-stacked-column" | "area" | "bar" | "box-and-whisker" | "column" | "combo" | "doughnut" | "filled-radar" | "funnel" | "histogram" | "line" | "line-with-markers" | "pareto" | "pie" | "radar" | "radar-with-markers" | "scatter" | "stacked-area" | "stacked-bar" | "stacked-column" | "stacked-line" | "stacked-line-with-markers" | "treemap" | "waterfall" | "world");
2775
2477
  /**
2776
- * Chart data. Inline data uses a tabular columns/rows shape; renderers convert rows to chart series internally. A DatasetRef ({ "dataset": "<id>" }) plots a top-level dataset instead. A ChartDataSource is not resolved by any engine (a 'chart-data-source-unresolved' warning; engines draw a placeholder); prefer inline data with a 'source'.
2478
+ * Chart data. Inline data uses a tabular columns/rows shape; renderers convert rows to chart series internally. A DatasetRef ({ "dataset": "<id>" }) plots a top-level dataset instead. Data from a spreadsheet or file is imported into inline columns and rows, and its origin is recorded in data.source.
2777
2479
  */
2778
- data: (ChartData | ChartDataSource | DatasetRef);
2480
+ data: (ChartData | DatasetRef);
2779
2481
  mapping?: ChartMapping;
2482
+ /**
2483
+ * Combo charts only (type 'combo'): the plotted series, by column name, that are drawn as lines with markers; every other plotted series is drawn as clustered columns. Absent: the last plotted series is the line. A combo chart keeps at least one column series, so a list that names every series draws the first one as columns. Column series are drawn, exported and listed in the legend first, then the line series on the primary axis, then those on the secondary axis, each in plotted order. A name that is not a column is a 'chart-mapping-unknown-column' error; a column that is not plotted is a 'chart-mapping-adapted' warning. On any other chart type it is ignored with a 'chart-option-adapted' warning.
2484
+ *
2485
+ * @minItems 1
2486
+ */
2487
+ line?: [string, ...(string)[]];
2488
+ /**
2489
+ * Combo charts only: line series, by column name, plotted against a secondary value axis at the right of the plot. That axis has its own scale, and its tick labels use the number format of the first secondary series' column (DataColumn.format), for example '0%' for a margin. Absent: every series shares the primary value axis at the left. A name that is not a line series (see 'line') stays on the primary axis with a 'chart-mapping-adapted' warning; an unknown column is a 'chart-mapping-unknown-column' error. On any other chart type it is ignored with a 'chart-option-adapted' warning.
2490
+ *
2491
+ * @minItems 1
2492
+ */
2493
+ secondaryAxis?: [string, ...(string)[]];
2780
2494
  axisTitles?: ChartAxisTitles;
2781
2495
  /**
2782
2496
  * Optional legend position. 'none' hides the legend. Absent keeps today's behaviour exactly (a legend at the right of multi-series charts and of pie and doughnut charts, none for single-series charts). A named position shows the legend there even for a single-series chart. Of the Office 2016 constructs only box-and-whisker takes a legend; histogram, pareto, waterfall, funnel, treemap and map drop the option with a 'chart-option-adapted' diagnostic.
@@ -2786,6 +2500,11 @@ interface Chart {
2786
2500
  * Optional data labels. true shows value labels at each type's default position, false (or absent) shows none, which is today's behaviour. Use the object form for the label content, position and separator.
2787
2501
  */
2788
2502
  dataLabels?: (boolean | ChartDataLabels);
2503
+ /**
2504
+ * Text alternative for the chart: what the data shows (the point and the key numbers), not 'a chart' or 'bar chart'. The preview exposes it as the chart's accessible name (role img with aria-label) and the PowerPoint export writes it as the chart frame's alternative text (descr); import reads it back. An empty string marks the chart decorative, with the same meaning as an empty Asset alt, but it is a reviewed choice that opf/chart-text-alternative still reports as info (a chart almost always carries a message). When absent, validate accepts text beside the chart instead.
2505
+ */
2506
+ alt?: string;
2507
+ highlight?: ChartHighlight;
2789
2508
  }
2790
2509
  /**
2791
2510
  * Inline tabular data driving a chart. The first column usually supplies category/x-axis labels; subsequent columns are plotted measures unless 'chart.mapping' or a chart type maps them differently. Value cells are numbers; a string is read only in strict decimal syntax ('12', '-3.5', '1e6'), and anything else ('12%', '$5', '(5)', '1,234') is a gap and a 'chart-value-not-numeric' warning.
@@ -2855,30 +2574,6 @@ interface DataSourceRef {
2855
2574
  */
2856
2575
  description?: string;
2857
2576
  }
2858
- /**
2859
- * Chart data sourced from an asset reference, URL, data URI, relative path, or local path such as CSV, TSV, JSON, or XLSX. The source is interpreted as a table; optional columns select or order fields from that table.
2860
- *
2861
- * This interface was referenced by `Presentation`'s JSON-Schema
2862
- * via the `definition` "ChartDataSource".
2863
- */
2864
- interface ChartDataSource {
2865
- /**
2866
- * Data source. Use 'asset:<id>' to reference the top-level assets registry, or provide an HTTPS URL, data URI, relative path, or local filesystem path.
2867
- */
2868
- src: string;
2869
- /**
2870
- * Optional sheet name or table name for spreadsheet-like assets.
2871
- */
2872
- sheet?: string;
2873
- /**
2874
- * Optional A1-style range or engine-defined range selector for spreadsheet-like assets.
2875
- */
2876
- range?: string;
2877
- /**
2878
- * Optional ordered columns or fields to read from the source. When omitted, renderers may use the source's own header row or schema.
2879
- */
2880
- columns?: string[];
2881
- }
2882
2577
  /**
2883
2578
  * Chart data taken from a top-level dataset. Engines inline it before plotting; 'chart.mapping' names columns after the 'fields' selection.
2884
2579
  *
@@ -2912,7 +2607,7 @@ interface ChartMapping {
2912
2607
  series?: [string, ...(string)[]];
2913
2608
  }
2914
2609
  /**
2915
- * Optional axis titles. Absent keeps today's untitled axes. Supported on the chart types that have a category/value (or X/Y) axis pair (column, bar, line, area, scatter, and the histogram, pareto, waterfall and box-and-whisker constructs; the funnel construct takes a category title only); a title on a type without that axis (pie, doughnut, radar, treemap, map) is dropped with a 'chart-option-adapted' diagnostic by renderers and exporters.
2610
+ * Optional axis titles. Absent keeps today's untitled axes. Supported on the chart types that have a category/value (or X/Y) axis pair (column, bar, line, area, scatter, and the histogram, pareto, waterfall and box-and-whisker constructs; the funnel construct takes a category title only; a combo chart also takes 'secondary' when it plots a series on the secondary axis); a title on a type without that axis (pie, doughnut, radar, treemap, map) is dropped with a 'chart-option-adapted' diagnostic by renderers and exporters.
2916
2611
  */
2917
2612
  interface ChartAxisTitles {
2918
2613
  /**
@@ -2920,9 +2615,13 @@ interface ChartAxisTitles {
2920
2615
  */
2921
2616
  category?: string;
2922
2617
  /**
2923
- * Title of the value (Y) axis.
2618
+ * Title of the value (Y) axis. On a combo chart, the primary (left) value axis.
2924
2619
  */
2925
2620
  value?: string;
2621
+ /**
2622
+ * Combo charts only: title of the secondary value axis at the right of the plot, drawn rotated like the primary value axis title. Dropped with a 'chart-option-adapted' diagnostic on any other chart type and on a combo chart without 'secondaryAxis'.
2623
+ */
2624
+ secondary?: string;
2926
2625
  }
2927
2626
  /**
2928
2627
  * Data label settings. A label shows the selected content parts in the fixed order category, value, percent, joined by the separator.
@@ -2938,7 +2637,7 @@ interface ChartDataLabels {
2938
2637
  */
2939
2638
  content?: [("value" | "percent" | "category"), ...(("value" | "percent" | "category"))[]];
2940
2639
  /**
2941
- * Where a label sits relative to its mark. 'auto' (the default) is the type's default: outside-end for clustered columns and bars, pie slices and the histogram, pareto and waterfall constructs; center for stacked columns and bars; above for line and scatter points. Clustered columns and bars and the histogram, pareto and waterfall constructs take center, inside-end, inside-base and outside-end; stacked columns and bars take center, inside-end and inside-base; pie takes center, inside-end and outside-end; line and scatter points take above, below, left, right and center. Area, doughnut and radar charts and the funnel and treemap constructs take only 'auto' (the box-and-whisker and map constructs have no data labels). An unsupported position falls back to 'auto' with a 'chart-option-adapted' diagnostic.
2640
+ * Where a label sits relative to its mark. 'auto' (the default) is the type's default: outside-end for clustered columns and bars, pie slices and the histogram, pareto and waterfall constructs; center for stacked columns and bars; above for line and scatter points. Clustered columns and bars and the histogram, pareto and waterfall constructs take center, inside-end, inside-base and outside-end; stacked columns and bars take center, inside-end and inside-base; pie takes center, inside-end and outside-end; line and scatter points take above, below, left, right and center. Area, doughnut and radar charts and the funnel and treemap constructs take only 'auto' (the box-and-whisker and map constructs have no data labels). A combo chart places the labels of its column series like clustered columns and those of its line series like line points; a position only one part takes applies to that part, and the other part keeps its default (outside-end, above). An unsupported position falls back to 'auto' with a 'chart-option-adapted' diagnostic.
2942
2641
  */
2943
2642
  position?: ("auto" | "center" | "inside-end" | "inside-base" | "outside-end" | "above" | "below" | "left" | "right");
2944
2643
  /**
@@ -2946,6 +2645,23 @@ interface ChartDataLabels {
2946
2645
  */
2947
2646
  separator?: string;
2948
2647
  }
2648
+ /**
2649
+ * Optional emphasis: the series and/or categories that carry the message. The engines draw the highlighted marks in the deck's primary (accent) color and every other mark in a muted neutral derived from the theme (a light grey on a light chart panel, a dim grey on a dark one); there is no color field. A mark is highlighted when its series OR its category is named. Absent keeps today's colors exactly. Supported on column, bar and line charts (series and categories; on a line a category highlight marks that category's points), pie and doughnut charts (categories, one per slice), and area, scatter and radar charts (series); the histogram, pareto, waterfall, funnel, treemap, box-and-whisker, map and combo constructs drop the option with a 'chart-option-adapted' diagnostic, as does a part the type cannot highlight. A name that matches no column or row label is a 'chart-highlight-unknown-name' error.
2650
+ */
2651
+ interface ChartHighlight {
2652
+ /**
2653
+ * Series (value columns) to highlight: all marks of each named series. A name that is not a column is a 'chart-highlight-unknown-name' error; a column that is not plotted as a series (the category or X column, or one mapping.series leaves out) highlights nothing and is a 'chart-highlight-adapted' warning.
2654
+ *
2655
+ * @minItems 1
2656
+ */
2657
+ series?: [string, ...(string)[]];
2658
+ /**
2659
+ * Categories (row labels) to highlight: the marks of each named category (a column or bar of every series, a line's points, a pie or doughnut slice). A label no row has is a 'chart-highlight-unknown-name' error.
2660
+ *
2661
+ * @minItems 1
2662
+ */
2663
+ categories?: [string, ...(string)[]];
2664
+ }
2949
2665
  /**
2950
2666
  * Full-slide table payload. Presence of this field infers type 'table'.
2951
2667
  */
@@ -2999,11 +2715,11 @@ interface TableCellStyle {
2999
2715
  /**
3000
2716
  * Cell background: a hex color, a color-scheme slot or role name, or a 'var:<id>' variable reference. Eight-digit hex colors include alpha; #00000000 is transparent.
3001
2717
  */
3002
- fill?: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
2718
+ fill?: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
3003
2719
  /**
3004
2720
  * Default text color, overridden by individual rich run colors. Accepts a hex color, a color-scheme slot or role name, or a 'var:<id>' variable reference.
3005
2721
  */
3006
- color?: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
2722
+ color?: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
3007
2723
  /**
3008
2724
  * Horizontal text alignment inside the cell.
3009
2725
  */
@@ -3045,7 +2761,7 @@ interface TableCellBorder {
3045
2761
  /**
3046
2762
  * Border color: a hex color, a color-scheme slot or role name, or a 'var:<id>' variable reference. Eight-digit hex colors include alpha; #00000000 is transparent.
3047
2763
  */
3048
- color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
2764
+ color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
3049
2765
  /**
3050
2766
  * Border width in reference pixels; 0 removes this edge.
3051
2767
  */
@@ -3056,7 +2772,7 @@ interface TableCellBorder {
3056
2772
  dash?: ("solid" | "dash" | "dot");
3057
2773
  }
3058
2774
  /**
3059
- * Code content with optional rendering metadata. Use 'source' for the code text, 'language' for syntax highlighting, and 'filename' when the rendered block should show a file label. A string value in a code field is shorthand for { "source": value }.
2775
+ * Code content with optional rendering metadata. Use 'source' for the code text, 'language' for syntax highlighting, 'filename' when the rendered block should show a file label, and 'highlight' to emphasize lines. A string value in a code field is shorthand for { "source": value }.
3060
2776
  *
3061
2777
  * This interface was referenced by `Presentation`'s JSON-Schema
3062
2778
  * via the `definition` "Code".
@@ -3074,9 +2790,15 @@ interface Code {
3074
2790
  * Optional file label shown with the code block.
3075
2791
  */
3076
2792
  filename?: string;
2793
+ /**
2794
+ * Source lines to emphasize, 1-based: each entry is a line number or an inclusive [start, end] range, so [3, [5, 7]] marks lines 3 and 5 to 7. Lines are counted by line break in 'source', so a line that wraps stays one line. Engines draw a theme-derived band behind the marked lines and dim the other lines slightly, keeping every line at least 4.5:1 against its background; PPTX export draws one native rectangle behind the line text boxes and import restores the list. A line number past the last line, or a range written end before start, gets a validation warning (code-highlight-out-of-range, code-highlight-range-reversed) and is ignored. When a code block is paginated across slides each page keeps the lines that fall on it, renumbered from 1.
2795
+ *
2796
+ * @minItems 1
2797
+ */
2798
+ highlight?: [(number | [number, number]), ...((number | [number, number]))[]];
3077
2799
  }
3078
2800
  /**
3079
- * Metric content with optional display metadata. Use 'value' for the primary value, 'label' for the metric name, 'description' for supporting context, 'unit' for a suffix/currency marker, 'delta' for change, and 'trend' for direction. A string or number value in a metric field is shorthand for { "value": value }; numeric values remain numbers and are formatted by renderers.
2801
+ * Metric content with optional display metadata. Use 'value' for the primary value, 'label' for the metric name, 'description' for supporting context, 'unit' for a suffix/currency marker, 'delta' for change, 'trend' for direction, and 'sentiment' for whether the change is good news. A string or number value in a metric field is shorthand for { "value": value }; numeric values remain numbers and are formatted by renderers.
3080
2802
  *
3081
2803
  * This interface was referenced by `Presentation`'s JSON-Schema
3082
2804
  * via the `definition` "Metric".
@@ -3103,27 +2825,60 @@ interface Metric {
3103
2825
  */
3104
2826
  delta?: (string | number);
3105
2827
  /**
3106
- * Metric trend direction.
2828
+ * Metric trend direction. The preview and the PowerPoint export draw an arrow beside the trend word that always points the way the trend does (up, down or flat) and colour the arrow, the trend word and the delta text by `sentiment`.
3107
2829
  */
3108
2830
  trend?: ("up" | "down" | "flat");
2831
+ /**
2832
+ * Whether the change is good news. Positive draws the trend arrow and the trend and delta text in green, negative in red and neutral in the neutral text colour, each kept at 4.5:1 contrast or more against the slide background. When absent the colour follows the trend: up is positive, down is negative and flat is neutral. Set it when the direction is not the verdict, for example positive on a falling churn, cost or latency trend. The arrow always keeps the direction of `trend`. Only the trend arrow and the trend and delta text take the colour, so sentiment has no visible effect on a metric without a trend.
2833
+ */
2834
+ sentiment?: ("positive" | "negative" | "neutral");
3109
2835
  }
3110
2836
  /**
3111
- * Quote content with optional attribution metadata. Use 'text' for the quoted text, 'attribution' for the credited person or organization, and 'source' for a citation or URL. A string value in a quote field is shorthand for { "text": value }.
2837
+ * Quote content with optional attribution metadata. Use 'text' for the quoted text, 'attribution' for the credited person or organization, 'role' for that person's title and organization, 'photo' for their headshot and 'source' for a citation or URL. A string value in a quote field is shorthand for { "text": value }.
3112
2838
  *
3113
2839
  * This interface was referenced by `Presentation`'s JSON-Schema
3114
2840
  * via the `definition` "Quote".
3115
2841
  */
3116
2842
  interface Quote {
3117
2843
  /**
3118
- * Quoted text.
2844
+ * Quoted text: a string, or TextRun[] for inline rich text (a colored phrase, bold, a link, or a citation or footnote marker). The engine draws the surrounding quotation marks.
3119
2845
  */
3120
- text: string;
2846
+ text: (string | TextRun[]);
3121
2847
  /**
3122
- * Person or organization credited for the quote.
2848
+ * Person or organization credited for the quote. Drawn after the quote text, in the muted text color.
3123
2849
  */
3124
2850
  attribution?: string;
3125
2851
  /**
3126
- * Optional quote source, citation, or URL.
2852
+ * Title and organization of the attributed person. Drawn on its own line under the attribution; without an attribution it stands alone. It does not replace the attribution, so the person's name belongs in 'attribution'.
2853
+ */
2854
+ role?: string;
2855
+ /**
2856
+ * Reusable or inline resource. A string is shorthand for { "src": value }. Source strings accept 'asset:<id>' references, HTTPS URLs, data URIs, relative paths resolved against the OPF file location, or local filesystem paths. Use object form when metadata such as alt text, title or mediaType matters.
2857
+ */
2858
+ photo?: (string | {
2859
+ /**
2860
+ * Resource source. Accepts an 'asset:<id>' reference, HTTPS URL, data URI, relative path resolved against the OPF file location, or local filesystem path.
2861
+ */
2862
+ src: string;
2863
+ /**
2864
+ * Alternative text for images and other visual assets.
2865
+ */
2866
+ alt?: string;
2867
+ /**
2868
+ * Human-readable asset title for editors and asset pickers.
2869
+ */
2870
+ title?: string;
2871
+ /**
2872
+ * Optional notes about the asset's contents, provenance, or intended use.
2873
+ */
2874
+ description?: string;
2875
+ /**
2876
+ * Optional MIME media type when it cannot be inferred from src.
2877
+ */
2878
+ mediaType?: string;
2879
+ });
2880
+ /**
2881
+ * Optional quote source, citation, or URL. Follows the attribution and role after ' - '.
3127
2882
  */
3128
2883
  source?: string;
3129
2884
  }
@@ -3146,20 +2901,100 @@ interface TimelineEvent {
3146
2901
  * Optional event detail.
3147
2902
  */
3148
2903
  description?: string;
2904
+ /**
2905
+ * Progress of the event, drawn from the deck's own colors by both the SVG renderer and the PPTX exporter. Absent means no status and the event is drawn as a plain filled marker with normal text, which is also how 'done' looks. 'done' is a filled marker in the primary color with normal text. 'current' marks 'we are here': the filled marker is surrounded by a ring and the event label (`what`) is bold. 'planned' is an outlined, hollow marker (primary-color outline over the slide background) with muted secondary text. Text colors keep a 4.5:1 contrast against the slide background. In PPTX the markers are native ellipses (the ring is a second ellipse), and PPTX import restores the status the export recorded. Status describes progress only; schedule health such as at risk or blocked belongs in the event text.
2906
+ */
2907
+ status?: ("done" | "current" | "planned");
2908
+ }
2909
+ /**
2910
+ * Image payloads only. Point of the picture to keep in view when 'cover' crops it. Ignored by the other fits.
2911
+ */
2912
+ interface ImageFocus1 {
2913
+ /**
2914
+ * Horizontal position, 0 (left edge) to 1 (right edge).
2915
+ */
2916
+ x: number;
2917
+ /**
2918
+ * Vertical position, 0 (top edge) to 1 (bottom edge).
2919
+ */
2920
+ y: number;
2921
+ }
2922
+ /**
2923
+ * Image payloads only. Line along the frame's shape.
2924
+ */
2925
+ interface ImageBorder {
2926
+ /**
2927
+ * Line color: a hex color, a color-scheme slot or role name, or a 'var:<id>' variable reference.
2928
+ */
2929
+ color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
2930
+ /**
2931
+ * Line width in reference pixels at a 720-pixel short edge. 0 removes the line.
2932
+ */
2933
+ width: number;
2934
+ }
2935
+ /**
2936
+ * Image payloads only. Scrim over the picture in the frame's shape, or a band along one edge of a rectangle frame.
2937
+ */
2938
+ interface Overlay1 {
2939
+ /**
2940
+ * Overlay fill color: a hex color (eight-digit hex keeps its alpha), a color-scheme slot or role name, or a 'var:<id>' variable reference.
2941
+ */
2942
+ color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "surfaceAlt" | "text" | "textSecondary") | string);
2943
+ /**
2944
+ * Overlay fill opacity.
2945
+ */
2946
+ opacity: number;
2947
+ /**
2948
+ * Cover only a band along this edge of the frame, for example a caption strip. Backgrounds and rectangle image frames only; on another shape the overlay is not drawn and composition reports unsupported-image-treatment. Omit to cover the whole frame. In a right-to-left deck 'left' and 'right' are the start and end sides.
2949
+ */
2950
+ edge?: ("top" | "bottom" | "left" | "right");
2951
+ /**
2952
+ * Band share of the frame for an edge overlay. Default 0.3. Ignored without edge.
2953
+ */
2954
+ size?: number;
2955
+ }
2956
+ /**
2957
+ * Image payloads only, and only on a top-level block (slides.N.blocks.I), at most one per edge. Bleeds the image to one slide edge; the headings and the other blocks compose in the rest of the slide.
2958
+ */
2959
+ interface ImagePlacement {
2960
+ /**
2961
+ * The slide edge the image bleeds to.
2962
+ */
2963
+ edge: ("left" | "right" | "top" | "bottom");
2964
+ /**
2965
+ * Share of the slide width (left, right) or height (top, bottom) given to the band. Default 0.5.
2966
+ */
2967
+ size?: number;
2968
+ /**
2969
+ * Draw the frame inside the slide padding on every side of the band, like a card, instead of edge to edge. Default false.
2970
+ */
2971
+ inset?: boolean;
3149
2972
  }
3150
2973
  /**
3151
2974
  * Chart payload. Presence of this field infers type 'chart'.
3152
2975
  */
3153
2976
  interface Chart1 {
3154
2977
  /**
3155
- * Chart type id. Resolves to the id of a chartTypes catalog record; renderers map that record through mappings.openxml and any renderer-specific mapping they understand. The bundled catalog covers the chart types Aspose.Slides officially supports; deprecated ids still resolve but validate with a warning naming their replacement.
2978
+ * Chart type, an engine vocabulary validated directly (no catalog lookup): the chart types Aspose.Slides officially supports, plus 'combo' (clustered columns with line series, see 'line' and 'secondaryAxis'). Each engine maps a type to its own chart model; labels and picker groups are catalog display metadata.
3156
2979
  */
3157
- type: string;
2980
+ type: ("100pct-stacked-area" | "100pct-stacked-bar" | "100pct-stacked-column" | "area" | "bar" | "box-and-whisker" | "column" | "combo" | "doughnut" | "filled-radar" | "funnel" | "histogram" | "line" | "line-with-markers" | "pareto" | "pie" | "radar" | "radar-with-markers" | "scatter" | "stacked-area" | "stacked-bar" | "stacked-column" | "stacked-line" | "stacked-line-with-markers" | "treemap" | "waterfall" | "world");
3158
2981
  /**
3159
- * Chart data. Inline data uses a tabular columns/rows shape; renderers convert rows to chart series internally. A DatasetRef ({ "dataset": "<id>" }) plots a top-level dataset instead. A ChartDataSource is not resolved by any engine (a 'chart-data-source-unresolved' warning; engines draw a placeholder); prefer inline data with a 'source'.
2982
+ * Chart data. Inline data uses a tabular columns/rows shape; renderers convert rows to chart series internally. A DatasetRef ({ "dataset": "<id>" }) plots a top-level dataset instead. Data from a spreadsheet or file is imported into inline columns and rows, and its origin is recorded in data.source.
3160
2983
  */
3161
- data: (ChartData | ChartDataSource | DatasetRef);
2984
+ data: (ChartData | DatasetRef);
3162
2985
  mapping?: ChartMapping;
2986
+ /**
2987
+ * Combo charts only (type 'combo'): the plotted series, by column name, that are drawn as lines with markers; every other plotted series is drawn as clustered columns. Absent: the last plotted series is the line. A combo chart keeps at least one column series, so a list that names every series draws the first one as columns. Column series are drawn, exported and listed in the legend first, then the line series on the primary axis, then those on the secondary axis, each in plotted order. A name that is not a column is a 'chart-mapping-unknown-column' error; a column that is not plotted is a 'chart-mapping-adapted' warning. On any other chart type it is ignored with a 'chart-option-adapted' warning.
2988
+ *
2989
+ * @minItems 1
2990
+ */
2991
+ line?: [string, ...(string)[]];
2992
+ /**
2993
+ * Combo charts only: line series, by column name, plotted against a secondary value axis at the right of the plot. That axis has its own scale, and its tick labels use the number format of the first secondary series' column (DataColumn.format), for example '0%' for a margin. Absent: every series shares the primary value axis at the left. A name that is not a line series (see 'line') stays on the primary axis with a 'chart-mapping-adapted' warning; an unknown column is a 'chart-mapping-unknown-column' error. On any other chart type it is ignored with a 'chart-option-adapted' warning.
2994
+ *
2995
+ * @minItems 1
2996
+ */
2997
+ secondaryAxis?: [string, ...(string)[]];
3163
2998
  axisTitles?: ChartAxisTitles;
3164
2999
  /**
3165
3000
  * Optional legend position. 'none' hides the legend. Absent keeps today's behaviour exactly (a legend at the right of multi-series charts and of pie and doughnut charts, none for single-series charts). A named position shows the legend there even for a single-series chart. Of the Office 2016 constructs only box-and-whisker takes a legend; histogram, pareto, waterfall, funnel, treemap and map drop the option with a 'chart-option-adapted' diagnostic.
@@ -3169,6 +3004,11 @@ interface Chart1 {
3169
3004
  * Optional data labels. true shows value labels at each type's default position, false (or absent) shows none, which is today's behaviour. Use the object form for the label content, position and separator.
3170
3005
  */
3171
3006
  dataLabels?: (boolean | ChartDataLabels);
3007
+ /**
3008
+ * Text alternative for the chart: what the data shows (the point and the key numbers), not 'a chart' or 'bar chart'. The preview exposes it as the chart's accessible name (role img with aria-label) and the PowerPoint export writes it as the chart frame's alternative text (descr); import reads it back. An empty string marks the chart decorative, with the same meaning as an empty Asset alt, but it is a reviewed choice that opf/chart-text-alternative still reports as info (a chart almost always carries a message). When absent, validate accepts text beside the chart instead.
3009
+ */
3010
+ alt?: string;
3011
+ highlight?: ChartHighlight;
3172
3012
  }
3173
3013
  /**
3174
3014
  * Table payload. Presence of this field infers type 'table'.
@@ -3225,33 +3065,30 @@ interface Composition {
3225
3065
  overflow?: ("warn" | "error");
3226
3066
  }
3227
3067
  /**
3228
- * Slide-level design applied on top of the deck-wide design.
3068
+ * Visual design system applied to the presentation; individual slides may override fields via Slide.design.
3069
+ *
3070
+ * This interface was referenced by `Presentation`'s JSON-Schema
3071
+ * via the `definition` "Design".
3229
3072
  */
3230
3073
  interface Design1 {
3231
3074
  /**
3232
- * Theme for the deck. Accepts two forms:
3233
- * - String shorthand: 'design.theme = "minimal"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'themes' catalog record.
3234
- * - Object form: a Theme with an optional 'id' base reference plus theme-level overrides.
3235
- *
3236
- * Inline overrides on design.colorScheme / design.fontScheme / design.background / design.dimensions take precedence over the resolved theme.
3237
- *
3238
- * Resolution order: inline catalogs.themes.records[] -> catalogs.themes.source -> default catalog at https://www.pptx.gallery/themes.
3075
+ * A content reference: a bare id ('two-column') or 'name:id' ('acme:hero'), where the prefix names a group of 'catalogs'. URLs and 'pkg:' strings are not references; a named catalog group replaces them. See Catalogs for the resolution order.
3239
3076
  */
3240
- theme?: (string | Theme);
3077
+ theme?: string;
3241
3078
  /**
3242
3079
  * Color scheme for the presentation. Accepts two forms:
3243
- * - String shorthand: 'design.colorScheme = "cool-horizon"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'colorSchemes' catalog record.
3244
- * - Object form: a ColorScheme with an optional 'id' base reference plus slot/role overrides.
3080
+ * - A colorSchemes reference: a bare id ('cool-horizon') or 'name:id' ('acme:ocean').
3081
+ * - Object form: a ColorScheme with an optional 'id' reference as the base plus slot/role overrides. Without 'id', the overrides apply on top of the engine default colour scheme.
3245
3082
  *
3246
- * Resolution order: inline catalogs.colorSchemes.records[] -> catalogs.colorSchemes.source -> default catalog at https://www.pptx.gallery/color-schemes.
3083
+ * Without either, the theme's colorScheme applies, then the engine default colour scheme.
3247
3084
  */
3248
3085
  colorScheme?: (string | ColorScheme);
3249
3086
  /**
3250
3087
  * Font scheme for heading, body, accent, and code text. Accepts two forms:
3251
- * - String shorthand: 'design.fontScheme = "aptos"'. Bare id, HTTPS URL, or 'pkg:' reference resolved as the 'id' of a 'fontSchemes' catalog record.
3252
- * - Object form: a FontScheme with an optional 'id' base reference plus pair/role overrides.
3088
+ * - A fontSchemes reference: a bare id ('aptos') or 'name:id' ('acme:inter').
3089
+ * - Object form: a FontScheme with an optional 'id' reference as the base plus pair/role overrides.
3253
3090
  *
3254
- * Resolution order: inline catalogs.fontSchemes.records[] -> catalogs.fontSchemes.source -> default catalog at https://www.pptx.gallery/font-schemes.
3091
+ * Without either, the theme's fontScheme applies, then the engine default font scheme.
3255
3092
  */
3256
3093
  fontScheme?: (string | FontScheme);
3257
3094
  /**
@@ -3259,7 +3096,7 @@ interface Design1 {
3259
3096
  */
3260
3097
  dimensions?: (DimensionPreset | Dimensions);
3261
3098
  /**
3262
- * Default slide background applied across the deck unless overridden on a slide. String shorthand accepts theme slots ('light1', 'light2', 'dark1', 'dark2') or hex colors; object forms support theme, solid, gradient, image, or pattern fills.
3099
+ * Default slide background applied across the deck unless overridden on a slide (slides.N.design.background); the resolved theme's background is the fallback. A background is the only canvas fill and never moves content. String shorthand accepts theme slots ('light1', 'light2', 'dark1', 'dark2'), hex colors, or an image source starting with 'asset:', 'https://', 'data:', './' or '../' (a cover image); object forms support theme, solid, gradient, image, or pattern fills.
3263
3100
  */
3264
3101
  background?: (BackgroundShortcut | Background);
3265
3102
  /**
@@ -3267,7 +3104,7 @@ interface Design1 {
3267
3104
  */
3268
3105
  logo?: (Asset | LogoSet);
3269
3106
  /**
3270
- * Optional decorative watermark applied across slides. Use false to suppress an inherited watermark in slide-level design; a string is equivalent to { src: value }.
3107
+ * Optional decorative watermark applied across slides: an image or a text stamp, in the fixed frame and at the opacity described on Watermark. Use false to suppress an inherited watermark in slide-level design; a string or Asset is the image at opacity 0.08.
3271
3108
  */
3272
3109
  watermark?: (false | Asset | Watermark);
3273
3110
  /**
@@ -3279,123 +3116,31 @@ interface Design1 {
3279
3116
  */
3280
3117
  footer?: (false | HeaderFooter);
3281
3118
  /**
3282
- * Default horizontal alignment for title placeholders in resolved layouts.
3119
+ * Default horizontal alignment for title placeholders in resolved layouts. Effective value: the slide's design, then the deck's design, then the layout record's design.titleAlignment, then the engine default.
3283
3120
  */
3284
3121
  titleAlignment?: ("left" | "center" | "right");
3285
3122
  /**
3286
- * Default horizontal alignment for body/content regions in resolved layouts.
3123
+ * Default horizontal alignment for body/content regions in resolved layouts. Effective value: the slide's design, then the deck's design, then the layout record's design.contentAlignment, then the engine default. A cover's tag and subtitle follow titleAlignment unless the slide's own design sets contentAlignment.
3287
3124
  */
3288
3125
  contentAlignment?: ("left" | "center" | "right");
3289
3126
  /**
3290
- * Whether body/content regions are rendered inside a visible card or surface.
3127
+ * Whether body/content regions are rendered inside a visible card or surface. Effective value: the slide's design, then the deck's design, then the layout record's design.contentBox, then the engine default.
3291
3128
  */
3292
3129
  contentBox?: boolean;
3293
3130
  /**
3294
- * Optional slide-level image, separate from content images. It applies to a slide that sets its own design.slideImage, and to slides whose layout declares slideImage: true or whose root image is the same source as a deck-level value. A root image with the same source becomes the slide image instead of a content item. Blur, shadows, soft edges, background removal and device artwork are not part of the treatment vocabulary; see docs/image-treatments.md.
3295
- */
3296
- slideImage?: (Asset | {
3297
- /**
3298
- * Source for the slide-level image. When omitted in a design override, the object only configures how a slide-level image should be placed when one is supplied by a content payload, asset, or renderer convention.
3299
- */
3300
- src?: string;
3301
- /**
3302
- * Where the slide-level image sits relative to the content. 'background' is a full-bleed image behind the content. The other positions give the image a band along that edge (see size) and compose headings and content in the rest of the slide.
3303
- */
3304
- position: ("background" | "top" | "bottom" | "left" | "right");
3305
- /**
3306
- * Alternative text for the slide-level image. Overrides the alt text of a referenced asset.
3307
- */
3308
- alt?: string;
3309
- /**
3310
- * How the image fills its frame: 'crop' covers the frame from the center; 'fit' shows the whole image centered inside it. Overrides design.imageFill for this image. Default: design.imageFill, else 'crop'.
3311
- */
3312
- fill?: ("crop" | "fit");
3313
- /**
3314
- * Share of the slide width (left/right) or height (top/bottom) given to the image band. Ignored for 'background'. Default 0.5.
3315
- */
3316
- size?: number;
3317
- /**
3318
- * Place the frame inside the slide padding instead of edge to edge, like a card. Default false.
3319
- */
3320
- inset?: boolean;
3321
- /**
3322
- * Width-to-height ratio of the frame. The frame becomes the largest centered box with this ratio inside the band or slide, for example 2.39 for a cinematic letterbox or 0.5 for a phone-shaped frame. 'circle' always uses 1.
3323
- */
3324
- aspectRatio?: number;
3325
- /**
3326
- * Mask applied to the frame, exported as the picture's native preset geometry (rect, roundRect, ellipse, hexagon). 'circle' makes the frame square. Default 'rectangle'.
3327
- */
3328
- shape?: ("rectangle" | "rounded" | "circle" | "hexagon");
3329
- /**
3330
- * Corner radius for shape 'rounded' as a fraction of the frame's shorter side. Default 0.16667, PowerPoint's roundRect default.
3331
- */
3332
- cornerRadius?: number;
3333
- /**
3334
- * Solid line along the frame's shape. A thick dark border on a rounded portrait frame gives a device bezel.
3335
- */
3336
- border?: {
3337
- /**
3338
- * Line color: a hex color, a color-scheme slot or role name, or a 'var:<id>' variable reference.
3339
- */
3340
- color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
3341
- /**
3342
- * Line width in reference pixels at a 720-pixel short edge, centered on the frame outline like a native picture line. 0 removes the line.
3343
- */
3344
- width: number;
3345
- };
3346
- /**
3347
- * Image opacity from 0 to 1, exported as a native alphaModFix. The border and overlay keep their own opacity. Default 1.
3348
- */
3349
- opacity?: number;
3350
- /**
3351
- * Color treatment for the image pixels. Luminance uses Rec. 601 weights (0.299, 0.587, 0.114) on sRGB values.
3352
- */
3353
- recolor?: ("grayscale" | {
3354
- /**
3355
- * Color at luminance 0.
3356
- */
3357
- dark: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
3358
- /**
3359
- * Color at luminance 1.
3360
- */
3361
- light: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
3362
- });
3363
- /**
3364
- * Solid scrim drawn over the image in the frame's shape, beneath headings and content, for example to keep overlaid text readable. Exported as a native shape above the picture.
3365
- */
3366
- overlay?: {
3367
- /**
3368
- * Overlay fill color.
3369
- */
3370
- color: (HexColor | ("accent1" | "accent2" | "accent3" | "accent4" | "accent5" | "accent6" | "dark1" | "dark2" | "light1" | "light2" | "hyperlink" | "followedHyperlink" | "primary" | "secondary" | "accent" | "background" | "surface" | "text" | "textSecondary") | string);
3371
- /**
3372
- * Overlay fill opacity.
3373
- */
3374
- opacity: number;
3375
- /**
3376
- * Cover only a band along this edge of the frame, for example a caption strip. Rectangle frames only; other shapes report unsupported-image-treatment and draw no overlay. Omit to cover the whole frame.
3377
- */
3378
- edge?: ("top" | "bottom" | "left" | "right");
3379
- /**
3380
- * Band share of the frame for an edge overlay. Default 0.3.
3381
- */
3382
- size?: number;
3383
- };
3384
- });
3385
- /**
3386
- * Axis along which parallel body content is arranged. Sets the root arrangement mode of blocks and root payloads when no composition.mode is set on the slide or on its layout record: 'vertical' is column, 'horizontal' is row. Precedence: composition.mode (the slide's own, else the layout record's geometry contract), then this value (slide design, then deck design), then the layout record's slideLayoutDirection, then automatic selection. A layout that carries a composition.mode keeps its grid or direction whatever this value says. Promoted regions (left, top:left, ...) keep their explicit geometry and nested groups keep their own composition.
3131
+ * Axis along which parallel body content is arranged. Sets the root arrangement mode of blocks and root payloads when no composition.mode is set on the slide or on its layout record: 'vertical' is column, 'horizontal' is row. Precedence: composition.mode (the slide's own, else the layout record's geometry contract), then the effective value (slide design, then deck design, then the layout record's design.contentDirection), then automatic selection. A layout that carries a composition.mode keeps its grid or direction whatever this value says. Promoted regions (left, top:left, ...) keep their explicit geometry and nested groups keep their own composition.
3387
3132
  */
3388
3133
  contentDirection?: ("horizontal" | "vertical");
3389
3134
  /**
3390
- * Where the primary chart sits relative to supporting content. Effective value: slide design, then deck design, then the layout record's contentTypeChartPrimary. When the slide has no promoted regions and no composition.mode of its own, and its root nodes mix at least one chart with other content, the first chart becomes a primary track and the other nodes form one synthetic sub-grid: 'left'/'right' is a two-track row and 'top'/'bottom' a two-track column, weighted 3:2 in favor of the chart; explicit root columns and weights are ignored while it applies. 'none' (the default) keeps the ordinary automatic grid with equal weight.
3135
+ * Where the primary chart sits relative to supporting content. Effective value: slide design, then deck design, then the layout record's design.chartPrimary. When the slide has no promoted regions and no composition.mode of its own, and its root nodes mix at least one chart with other content, the first chart becomes a primary track and the other nodes form one synthetic sub-grid: 'left'/'right' is a two-track row and 'top'/'bottom' a two-track column, weighted 3:2 in favor of the chart; explicit root columns and weights are ignored while it applies. 'none' (the default) keeps the ordinary automatic grid with equal weight.
3391
3136
  */
3392
3137
  chartPrimary?: ("none" | "top" | "bottom" | "left" | "right");
3393
3138
  /**
3394
- * How picture placeholders fill their allocated region.
3139
+ * Default fit of image blocks (and Slide.image) that set no fit of their own: 'cover' fills the frame and crops what overflows around the block's focus, 'contain' shows the whole picture centered in the frame, 'stretch' scales it to the frame exactly. Effective value: the slide's design, then the deck's design, then the layout record's design.imageFit, then 'cover'. Backgrounds set their own fit.
3395
3140
  */
3396
- imageFill?: ("crop" | "fit");
3141
+ imageFit?: ("cover" | "contain" | "stretch");
3397
3142
  /**
3398
- * Marker style for items and bullets lists. 'character' (the default) draws the glyph marker. 'image' draws the deck's icon logo (a slide's design.logo, then design.logo, then the primary organization's logo; light variants on dark backgrounds) as a picture bullet: a square of the marker's font size whose bottom sits on the marker baseline, so list geometry does not change. Without a logo the glyph is drawn and the engine reports unresolved-content at this field.
3143
+ * Marker style for items and bullets lists. Effective value: the slide's design, then the deck's design, then the layout record's design.listBullet, then 'character'. 'character' (the default) draws the glyph marker. 'image' draws the deck's icon logo (a slide's design.logo, then design.logo, then the primary organization's logo; light variants on dark backgrounds) as a picture bullet: a square of the marker's font size whose bottom sits on the marker baseline, so list geometry does not change. Without a logo the glyph is drawn and the engine reports unresolved-content at this field.
3399
3144
  */
3400
3145
  listBullet?: ("character" | "image");
3401
3146
  [k: string]: unknown;
@@ -3460,7 +3205,7 @@ interface Reference {
3460
3205
  url?: string;
3461
3206
  }
3462
3207
  /**
3463
- * Optional shared data tables, keyed by id. A chart ('chart.data': { "dataset": "<id>" }) or a table ('table': { "dataset": "<id>" }) references one instead of holding its own copy; engines inline the reference before composing, rendering or exporting. A dataset nothing references is a lint warning (opf/unused-dataset). See docs/chart-table-data.md.
3208
+ * Optional shared data tables, keyed by id. A chart ('chart.data': { "dataset": "<id>" }) or a table ('table': { "dataset": "<id>" }) references one instead of holding its own copy; engines inline the reference before composing, rendering or exporting. A dataset nothing references is the warning opf/unused-dataset. See docs/chart-table-data.md.
3464
3209
  */
3465
3210
  interface Datasets {
3466
3211
  [k: string]: Dataset;
@@ -3530,197 +3275,128 @@ interface Assets {
3530
3275
  [k: string]: Asset;
3531
3276
  }
3532
3277
  /**
3533
- * Optional per-kind catalog overrides. Each kind may declare a non-default 'source' and/or inline 'records' that override or supplement the default catalog at https://www.pptx.gallery/<kind>. References elsewhere in the document (e.g. design.theme, narrative) resolve through this section before falling back to the default catalog.
3278
+ * The catalog records this document embeds, grouped by the catalog they came from: 'default' (the catalog bare ids come from), 'custom' (records the document defines itself) and any number of named catalogs ('acme', referenced as 'acme:<id>'). A saved document embeds every record it references, so it renders the same with no catalog registered. See Catalogs.
3534
3279
  */
3535
3280
  interface Catalogs {
3536
- narratives?: CatalogEntry;
3537
- themes?: CatalogEntry1;
3538
- colorSchemes?: CatalogEntry2;
3539
- fontSchemes?: CatalogEntry3;
3540
- languages?: CatalogEntry4;
3541
- layouts?: CatalogEntry5;
3542
- chartTypes?: CatalogEntry6;
3543
- tones?: CatalogEntry7;
3544
- purposes?: CatalogEntry8;
3545
- audiences?: CatalogEntry9;
3546
- socialPlatforms?: CatalogEntry10;
3547
- [k: string]: unknown;
3548
- }
3549
- /**
3550
- * Catalog of narrative templates. Records validate against https://openpresentation.org/schema/opf-narrative/v1. Default source: https://www.pptx.gallery/narratives.
3551
- */
3552
- interface CatalogEntry {
3553
3281
  /**
3554
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3282
+ * The catalog bare ids come from: its source and the records of it this document embeds. false turns off the catalog fallback for bare ids.
3555
3283
  */
3556
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3284
+ default?: (CatalogGroup | false);
3557
3285
  /**
3558
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3286
+ * Records the document defines itself, referenced by bare id. Checked first for every bare id. Forking a catalog record copies it here under a new id, so the change of ownership is visible.
3559
3287
  */
3560
- records?: {
3561
- [k: string]: unknown;
3562
- }[];
3563
- [k: string]: unknown;
3564
- }
3565
- /**
3566
- * Catalog of themes. Records validate against https://openpresentation.org/schema/opf-theme/v1. Default source: https://www.pptx.gallery/themes.
3567
- */
3568
- interface CatalogEntry1 {
3569
- /**
3570
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3571
- */
3572
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3288
+ custom?: CatalogGroup;
3573
3289
  /**
3574
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3290
+ * A named catalog: its source and the records of it this document embeds. References name it as a prefix ('acme:hero').
3575
3291
  */
3576
- records?: {
3292
+ [k: string]: (CatalogGroup & {
3577
3293
  [k: string]: unknown;
3578
- }[];
3579
- [k: string]: unknown;
3294
+ }) | CatalogGroup | false | undefined;
3580
3295
  }
3581
3296
  /**
3582
- * Catalog of color schemes. Records validate against https://openpresentation.org/schema/opf-color-scheme/v1. Default source: https://www.pptx.gallery/color-schemes.
3297
+ * One catalog group: the catalog's source and the records of it the document embeds, by kind and then by id.
3298
+ *
3299
+ * This interface was referenced by `Presentation`'s JSON-Schema
3300
+ * via the `definition` "CatalogGroup".
3583
3301
  */
3584
- interface CatalogEntry2 {
3585
- /**
3586
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3587
- */
3588
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3589
- /**
3590
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3591
- */
3592
- records?: {
3593
- [k: string]: unknown;
3594
- }[];
3595
- [k: string]: unknown;
3302
+ interface CatalogGroup {
3303
+ source?: CatalogSource;
3304
+ layouts?: CatalogRecords;
3305
+ themes?: CatalogRecords1;
3306
+ colorSchemes?: CatalogRecords2;
3307
+ fontSchemes?: CatalogRecords3;
3308
+ narratives?: CatalogRecords4;
3309
+ audiences?: CatalogRecords5;
3310
+ purposes?: CatalogRecords6;
3311
+ tones?: CatalogRecords7;
3596
3312
  }
3597
3313
  /**
3598
- * Catalog of font schemes. Records validate against https://openpresentation.org/schema/opf-font-scheme/v1. Default source: https://www.pptx.gallery/font-schemes.
3314
+ * Layout records keyed by id, each with the fields of https://openpresentation.org/schema/opf-layout/v1. Referenced from Slide.layout.
3599
3315
  */
3600
- interface CatalogEntry3 {
3316
+ interface CatalogRecords {
3601
3317
  /**
3602
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3318
+ * One embedded record: the fields of the kind's companion schema without '$schema' and 'id'.
3603
3319
  */
3604
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3605
- /**
3606
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3607
- */
3608
- records?: {
3320
+ [k: string]: {
3609
3321
  [k: string]: unknown;
3610
- }[];
3611
- [k: string]: unknown;
3322
+ };
3612
3323
  }
3613
3324
  /**
3614
- * Catalog of languages. Records validate against https://openpresentation.org/schema/opf-language/v1. Default source: https://www.pptx.gallery/languages.
3325
+ * Theme records keyed by id, each with the fields of https://openpresentation.org/schema/opf-theme/v1. Referenced from design.theme.
3615
3326
  */
3616
- interface CatalogEntry4 {
3327
+ interface CatalogRecords1 {
3617
3328
  /**
3618
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3329
+ * One embedded record: the fields of the kind's companion schema without '$schema' and 'id'.
3619
3330
  */
3620
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3621
- /**
3622
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3623
- */
3624
- records?: {
3331
+ [k: string]: {
3625
3332
  [k: string]: unknown;
3626
- }[];
3627
- [k: string]: unknown;
3333
+ };
3628
3334
  }
3629
3335
  /**
3630
- * Catalog of slide layouts. Records validate against https://openpresentation.org/schema/opf-layout/v1. Default source: https://www.pptx.gallery/layouts.
3336
+ * Colour-scheme records keyed by id, each with the fields of https://openpresentation.org/schema/opf-color-scheme/v1. Referenced from design.colorScheme and a theme's colorScheme.
3631
3337
  */
3632
- interface CatalogEntry5 {
3338
+ interface CatalogRecords2 {
3633
3339
  /**
3634
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3340
+ * One embedded record: the fields of the kind's companion schema without '$schema' and 'id'.
3635
3341
  */
3636
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3637
- /**
3638
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3639
- */
3640
- records?: {
3342
+ [k: string]: {
3641
3343
  [k: string]: unknown;
3642
- }[];
3643
- [k: string]: unknown;
3344
+ };
3644
3345
  }
3645
3346
  /**
3646
- * Catalog of chart types. Records validate against https://openpresentation.org/schema/opf-chart-type/v1. Default source: https://www.pptx.gallery/chart-types.
3347
+ * Font-scheme records keyed by id, each with the fields of https://openpresentation.org/schema/opf-font-scheme/v1. Referenced from design.fontScheme, a theme's fontScheme and a language's font schemes.
3647
3348
  */
3648
- interface CatalogEntry6 {
3349
+ interface CatalogRecords3 {
3649
3350
  /**
3650
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3351
+ * One embedded record: the fields of the kind's companion schema without '$schema' and 'id'.
3651
3352
  */
3652
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3653
- /**
3654
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3655
- */
3656
- records?: {
3353
+ [k: string]: {
3657
3354
  [k: string]: unknown;
3658
- }[];
3659
- [k: string]: unknown;
3355
+ };
3660
3356
  }
3661
3357
  /**
3662
- * Catalog of presentation tones. Records validate against https://openpresentation.org/schema/opf-tone/v1. Default source: https://www.pptx.gallery/tones. Referenced from tone.
3358
+ * Narrative records keyed by id, each with the fields of https://openpresentation.org/schema/opf-narrative/v1. Referenced from narrative.
3663
3359
  */
3664
- interface CatalogEntry7 {
3360
+ interface CatalogRecords4 {
3665
3361
  /**
3666
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3362
+ * One embedded record: the fields of the kind's companion schema without '$schema' and 'id'.
3667
3363
  */
3668
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3669
- /**
3670
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3671
- */
3672
- records?: {
3364
+ [k: string]: {
3673
3365
  [k: string]: unknown;
3674
- }[];
3675
- [k: string]: unknown;
3366
+ };
3676
3367
  }
3677
3368
  /**
3678
- * Catalog of presentation purposes. Records validate against https://openpresentation.org/schema/opf-purpose/v1. Default source: https://www.pptx.gallery/purposes. Referenced from purpose.
3369
+ * Audience records keyed by id, each with the fields of https://openpresentation.org/schema/opf-audience/v1. Referenced from audience.
3679
3370
  */
3680
- interface CatalogEntry8 {
3371
+ interface CatalogRecords5 {
3681
3372
  /**
3682
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3373
+ * One embedded record: the fields of the kind's companion schema without '$schema' and 'id'.
3683
3374
  */
3684
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3685
- /**
3686
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3687
- */
3688
- records?: {
3375
+ [k: string]: {
3689
3376
  [k: string]: unknown;
3690
- }[];
3691
- [k: string]: unknown;
3377
+ };
3692
3378
  }
3693
3379
  /**
3694
- * Catalog of presentation audiences. Records validate against https://openpresentation.org/schema/opf-audience/v1. Default source: https://www.pptx.gallery/audiences. Referenced from audience.
3380
+ * Purpose records keyed by id, each with the fields of https://openpresentation.org/schema/opf-purpose/v1. Referenced from purpose.
3695
3381
  */
3696
- interface CatalogEntry9 {
3382
+ interface CatalogRecords6 {
3697
3383
  /**
3698
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3384
+ * One embedded record: the fields of the kind's companion schema without '$schema' and 'id'.
3699
3385
  */
3700
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3701
- /**
3702
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3703
- */
3704
- records?: {
3386
+ [k: string]: {
3705
3387
  [k: string]: unknown;
3706
- }[];
3707
- [k: string]: unknown;
3388
+ };
3708
3389
  }
3709
3390
  /**
3710
- * Catalog of social-media platforms. Records validate against https://openpresentation.org/schema/opf-social-platform/v1. Default source: https://www.pptx.gallery/social-platforms. Referenced via the property keys of any Socials object (Organization.socials, Speaker.socials).
3391
+ * Tone records keyed by id, each with the fields of https://openpresentation.org/schema/opf-tone/v1. Referenced from tone.
3711
3392
  */
3712
- interface CatalogEntry10 {
3393
+ interface CatalogRecords7 {
3713
3394
  /**
3714
- * Single source or an ordered search path of sources. When omitted, the engine falls back to the default catalog at https://www.pptx.gallery/<kind>, resolved from its bundled snapshot. Fetching a declared source is an explicit opt-in: the engine or its caller performs that fetch.
3395
+ * One embedded record: the fields of the kind's companion schema without '$schema' and 'id'.
3715
3396
  */
3716
- source?: (CatalogSource | [CatalogSource, ...(CatalogSource)[]]);
3717
- /**
3718
- * Inline catalog records embedded in this OPF document. Each record validates against the kind's companion schema (e.g. https://openpresentation.org/schema/opf-narrative/v1 for narratives). Inline records win over anything resolved from 'source' and over the default catalog.
3719
- */
3720
- records?: {
3397
+ [k: string]: {
3721
3398
  [k: string]: unknown;
3722
- }[];
3723
- [k: string]: unknown;
3399
+ };
3724
3400
  }
3725
3401
 
3726
3402
  export type { Presentation as P };