@openpresentation/opf 0.1.0 → 0.2.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 (499) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +146 -103
  3. package/dist/catalogs.d.ts +11 -1531
  4. package/dist/catalogs.js +5 -613
  5. package/dist/catalogs.js.map +1 -1
  6. package/dist/index.d.ts +3 -1
  7. package/dist/index.js +3831 -649
  8. package/dist/index.js.map +1 -1
  9. package/dist/previews.d.ts +40 -0
  10. package/dist/previews.js +447 -0
  11. package/dist/previews.js.map +1 -0
  12. package/dist/schemas.d.ts +105 -105
  13. package/dist/schemas.js +35 -35
  14. package/dist/schemas.js.map +1 -1
  15. package/dist/spec/catalogs/audiences/all-hands.json +23 -23
  16. package/dist/spec/catalogs/audiences/board.json +22 -22
  17. package/dist/spec/catalogs/audiences/candidates.json +23 -23
  18. package/dist/spec/catalogs/audiences/customers.json +23 -23
  19. package/dist/spec/catalogs/audiences/engineering-team.json +23 -23
  20. package/dist/spec/catalogs/audiences/executives.json +23 -23
  21. package/dist/spec/catalogs/audiences/index.json +67 -67
  22. package/dist/spec/catalogs/audiences/investors.json +23 -23
  23. package/dist/spec/catalogs/audiences/marketing-team.json +23 -23
  24. package/dist/spec/catalogs/audiences/regulators.json +23 -23
  25. package/dist/spec/catalogs/audiences/sales-team.json +23 -23
  26. package/dist/spec/catalogs/chart-types/100pct-bullet-bar-2x.json +86 -90
  27. package/dist/spec/catalogs/chart-types/100pct-bullet-bar-3x.json +98 -102
  28. package/dist/spec/catalogs/chart-types/100pct-bullet-bar.json +74 -78
  29. package/dist/spec/catalogs/chart-types/100pct-bullet-column-2x.json +86 -90
  30. package/dist/spec/catalogs/chart-types/100pct-bullet-column-3x.json +98 -102
  31. package/dist/spec/catalogs/chart-types/100pct-bullet-column.json +74 -78
  32. package/dist/spec/catalogs/chart-types/100pct-progress-bar.json +95 -99
  33. package/dist/spec/catalogs/chart-types/100pct-stacked-area-2x.json +96 -100
  34. package/dist/spec/catalogs/chart-types/100pct-stacked-area-3x.json +118 -122
  35. package/dist/spec/catalogs/chart-types/100pct-stacked-bar-2x.json +79 -83
  36. package/dist/spec/catalogs/chart-types/100pct-stacked-bar-3x.json +95 -99
  37. package/dist/spec/catalogs/chart-types/100pct-stacked-column-2x.json +85 -89
  38. package/dist/spec/catalogs/chart-types/100pct-stacked-column-3x.json +103 -107
  39. package/dist/spec/catalogs/chart-types/area.json +73 -77
  40. package/dist/spec/catalogs/chart-types/australia.json +66 -70
  41. package/dist/spec/catalogs/chart-types/bar.json +63 -67
  42. package/dist/spec/catalogs/chart-types/box-and-whisker-2x.json +126 -130
  43. package/dist/spec/catalogs/chart-types/box-and-whisker-3x.json +158 -162
  44. package/dist/spec/catalogs/chart-types/box-and-whisker.json +94 -98
  45. package/dist/spec/catalogs/chart-types/bullet-bar-2x.json +84 -88
  46. package/dist/spec/catalogs/chart-types/bullet-bar-3x.json +96 -100
  47. package/dist/spec/catalogs/chart-types/bullet-bar.json +72 -76
  48. package/dist/spec/catalogs/chart-types/bullet-column-2x.json +84 -88
  49. package/dist/spec/catalogs/chart-types/bullet-column-3x.json +96 -100
  50. package/dist/spec/catalogs/chart-types/bullet-column.json +72 -76
  51. package/dist/spec/catalogs/chart-types/canada.json +76 -80
  52. package/dist/spec/catalogs/chart-types/clustered-bar-2x.json +79 -83
  53. package/dist/spec/catalogs/chart-types/clustered-column.json +85 -89
  54. package/dist/spec/catalogs/chart-types/column.json +67 -71
  55. package/dist/spec/catalogs/chart-types/dot-plot-2x.json +94 -98
  56. package/dist/spec/catalogs/chart-types/dot-plot-3x.json +119 -123
  57. package/dist/spec/catalogs/chart-types/dot-plot-4x.json +144 -148
  58. package/dist/spec/catalogs/chart-types/dot-plot-5x.json +169 -173
  59. package/dist/spec/catalogs/chart-types/dot-plot-6x.json +194 -198
  60. package/dist/spec/catalogs/chart-types/dot-plot.json +69 -73
  61. package/dist/spec/catalogs/chart-types/doughnut.json +53 -57
  62. package/dist/spec/catalogs/chart-types/dumbbell.json +115 -119
  63. package/dist/spec/catalogs/chart-types/filled-radar.json +66 -70
  64. package/dist/spec/catalogs/chart-types/funnel.json +60 -64
  65. package/dist/spec/catalogs/chart-types/histogram.json +141 -145
  66. package/dist/spec/catalogs/chart-types/index.json +539 -843
  67. package/dist/spec/catalogs/chart-types/line-2x.json +95 -99
  68. package/dist/spec/catalogs/chart-types/line-3x.json +117 -121
  69. package/dist/spec/catalogs/chart-types/line-with-high-low-and-markers.json +139 -143
  70. package/dist/spec/catalogs/chart-types/line-with-high-low.json +139 -143
  71. package/dist/spec/catalogs/chart-types/line-with-markers-2x.json +96 -100
  72. package/dist/spec/catalogs/chart-types/line-with-markers-3x.json +118 -122
  73. package/dist/spec/catalogs/chart-types/line-with-markers.json +74 -78
  74. package/dist/spec/catalogs/chart-types/line.json +73 -77
  75. package/dist/spec/catalogs/chart-types/pareto.json +159 -163
  76. package/dist/spec/catalogs/chart-types/pie.json +53 -57
  77. package/dist/spec/catalogs/chart-types/radar-with-markers.json +66 -70
  78. package/dist/spec/catalogs/chart-types/radar.json +66 -70
  79. package/dist/spec/catalogs/chart-types/scatter.json +87 -91
  80. package/dist/spec/catalogs/chart-types/sparkline-2x.json +133 -137
  81. package/dist/spec/catalogs/chart-types/sparkline-3x.json +169 -173
  82. package/dist/spec/catalogs/chart-types/sparkline-4x.json +205 -209
  83. package/dist/spec/catalogs/chart-types/sparkline-5x.json +241 -245
  84. package/dist/spec/catalogs/chart-types/sparkline-6x.json +277 -281
  85. package/dist/spec/catalogs/chart-types/sparkline.json +97 -101
  86. package/dist/spec/catalogs/chart-types/stacked-area-2x.json +96 -100
  87. package/dist/spec/catalogs/chart-types/stacked-area-3x.json +118 -122
  88. package/dist/spec/catalogs/chart-types/stacked-bar-2x.json +79 -83
  89. package/dist/spec/catalogs/chart-types/stacked-bar-3x.json +95 -99
  90. package/dist/spec/catalogs/chart-types/stacked-column-2x.json +85 -89
  91. package/dist/spec/catalogs/chart-types/stacked-column-3x.json +103 -107
  92. package/dist/spec/catalogs/chart-types/stacked-line-2x.json +96 -100
  93. package/dist/spec/catalogs/chart-types/stacked-line-3x.json +118 -122
  94. package/dist/spec/catalogs/chart-types/stacked-line-with-markers-2x.json +97 -101
  95. package/dist/spec/catalogs/chart-types/stacked-line-with-markers-3x.json +119 -123
  96. package/dist/spec/catalogs/chart-types/treemap-2x.json +91 -95
  97. package/dist/spec/catalogs/chart-types/treemap-3x.json +112 -116
  98. package/dist/spec/catalogs/chart-types/treemap.json +62 -66
  99. package/dist/spec/catalogs/chart-types/{united-kindom.json → united-kingdom.json} +58 -62
  100. package/dist/spec/catalogs/chart-types/united-states.json +72 -76
  101. package/dist/spec/catalogs/chart-types/waterfall.json +66 -70
  102. package/dist/spec/catalogs/chart-types/world.json +78 -82
  103. package/dist/spec/catalogs/color-schemes/black-and-white.json +17 -17
  104. package/dist/spec/catalogs/color-schemes/bold-red.json +17 -17
  105. package/dist/spec/catalogs/color-schemes/boost.json +17 -17
  106. package/dist/spec/catalogs/color-schemes/burnt-orange.json +17 -17
  107. package/dist/spec/catalogs/color-schemes/cool-horizon.json +17 -17
  108. package/dist/spec/catalogs/color-schemes/corporate-blue.json +17 -17
  109. package/dist/spec/catalogs/color-schemes/deep-purple.json +17 -17
  110. package/dist/spec/catalogs/color-schemes/forest-green.json +17 -17
  111. package/dist/spec/catalogs/color-schemes/golden-yellow.json +17 -17
  112. package/dist/spec/catalogs/color-schemes/index.json +77 -77
  113. package/dist/spec/catalogs/color-schemes/luxury.json +17 -17
  114. package/dist/spec/catalogs/color-schemes/pastel-red.json +17 -17
  115. package/dist/spec/catalogs/color-schemes/slate-gray.json +17 -17
  116. package/dist/spec/catalogs/color-schemes/steel-blue.json +17 -17
  117. package/dist/spec/catalogs/color-schemes/vibes.json +17 -17
  118. package/dist/spec/catalogs/font-schemes/angsana-new.json +14 -14
  119. package/dist/spec/catalogs/font-schemes/aparajita.json +15 -15
  120. package/dist/spec/catalogs/font-schemes/aptos.json +12 -12
  121. package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +14 -14
  122. package/dist/spec/catalogs/font-schemes/arial.json +12 -12
  123. package/dist/spec/catalogs/font-schemes/batang.json +14 -14
  124. package/dist/spec/catalogs/font-schemes/bookman.json +12 -12
  125. package/dist/spec/catalogs/font-schemes/calibri.json +12 -12
  126. package/dist/spec/catalogs/font-schemes/century-schoolbook.json +12 -12
  127. package/dist/spec/catalogs/font-schemes/consolas.json +12 -12
  128. package/dist/spec/catalogs/font-schemes/constantia.json +12 -12
  129. package/dist/spec/catalogs/font-schemes/courier-new.json +12 -12
  130. package/dist/spec/catalogs/font-schemes/daunpenh.json +14 -14
  131. package/dist/spec/catalogs/font-schemes/david.json +14 -14
  132. package/dist/spec/catalogs/font-schemes/dilleniaupc.json +14 -14
  133. package/dist/spec/catalogs/font-schemes/fangsong.json +14 -14
  134. package/dist/spec/catalogs/font-schemes/garamond.json +12 -12
  135. package/dist/spec/catalogs/font-schemes/gautami.json +14 -14
  136. package/dist/spec/catalogs/font-schemes/georgia.json +12 -12
  137. package/dist/spec/catalogs/font-schemes/gisha.json +15 -15
  138. package/dist/spec/catalogs/font-schemes/grandview.json +12 -12
  139. package/dist/spec/catalogs/font-schemes/gungsuh.json +14 -14
  140. package/dist/spec/catalogs/font-schemes/impact.json +12 -12
  141. package/dist/spec/catalogs/font-schemes/index.json +452 -452
  142. package/dist/spec/catalogs/font-schemes/kalinga.json +14 -14
  143. package/dist/spec/catalogs/font-schemes/kartika.json +14 -14
  144. package/dist/spec/catalogs/font-schemes/khmer-ui.json +14 -14
  145. package/dist/spec/catalogs/font-schemes/latha.json +14 -14
  146. package/dist/spec/catalogs/font-schemes/lucida-sans.json +12 -12
  147. package/dist/spec/catalogs/font-schemes/malgun-gothic.json +14 -14
  148. package/dist/spec/catalogs/font-schemes/mangal.json +17 -17
  149. package/dist/spec/catalogs/font-schemes/meiryo.json +14 -14
  150. package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +14 -14
  151. package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +17 -17
  152. package/dist/spec/catalogs/font-schemes/mingliu.json +14 -14
  153. package/dist/spec/catalogs/font-schemes/miriam.json +14 -14
  154. package/dist/spec/catalogs/font-schemes/montserrat.json +12 -12
  155. package/dist/spec/catalogs/font-schemes/ms-mincho.json +14 -14
  156. package/dist/spec/catalogs/font-schemes/nirmala-ui.json +14 -14
  157. package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +14 -14
  158. package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +15 -15
  159. package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +16 -16
  160. package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +14 -14
  161. package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +15 -15
  162. package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +15 -15
  163. package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +14 -14
  164. package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +14 -14
  165. package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +14 -14
  166. package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +14 -14
  167. package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +14 -14
  168. package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +14 -14
  169. package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +14 -14
  170. package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +14 -14
  171. package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +14 -14
  172. package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +14 -14
  173. package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +14 -14
  174. package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +14 -14
  175. package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +17 -17
  176. package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +14 -14
  177. package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +14 -14
  178. package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +14 -14
  179. package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +14 -14
  180. package/dist/spec/catalogs/font-schemes/noto-sans.json +17 -17
  181. package/dist/spec/catalogs/font-schemes/nyala.json +14 -14
  182. package/dist/spec/catalogs/font-schemes/open-sans.json +12 -12
  183. package/dist/spec/catalogs/font-schemes/pmingliu.json +14 -14
  184. package/dist/spec/catalogs/font-schemes/poppins.json +12 -12
  185. package/dist/spec/catalogs/font-schemes/pt-serif.json +12 -12
  186. package/dist/spec/catalogs/font-schemes/raavi.json +14 -14
  187. package/dist/spec/catalogs/font-schemes/raleway.json +12 -12
  188. package/dist/spec/catalogs/font-schemes/roboto.json +12 -12
  189. package/dist/spec/catalogs/font-schemes/rockwell.json +12 -12
  190. package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +16 -16
  191. package/dist/spec/catalogs/font-schemes/seaford.json +12 -12
  192. package/dist/spec/catalogs/font-schemes/segoe-ui-light.json +12 -12
  193. package/dist/spec/catalogs/font-schemes/segoe-ui.json +12 -12
  194. package/dist/spec/catalogs/font-schemes/shonar-bangla.json +15 -15
  195. package/dist/spec/catalogs/font-schemes/shruti.json +14 -14
  196. package/dist/spec/catalogs/font-schemes/simsun.json +14 -14
  197. package/dist/spec/catalogs/font-schemes/skeena.json +12 -12
  198. package/dist/spec/catalogs/font-schemes/sylfaen.json +15 -15
  199. package/dist/spec/catalogs/font-schemes/tahoma.json +12 -12
  200. package/dist/spec/catalogs/font-schemes/tenorite.json +12 -12
  201. package/dist/spec/catalogs/font-schemes/times-new-roman.json +12 -12
  202. package/dist/spec/catalogs/font-schemes/traditional-arabic.json +16 -16
  203. package/dist/spec/catalogs/font-schemes/trebuchet-ms.json +12 -12
  204. package/dist/spec/catalogs/font-schemes/tunga.json +14 -14
  205. package/dist/spec/catalogs/font-schemes/verdana.json +12 -12
  206. package/dist/spec/catalogs/font-schemes/vrinda.json +14 -14
  207. package/dist/spec/catalogs/font-schemes/yu-gothic.json +14 -14
  208. package/dist/spec/catalogs/languages/afrikaans.json +9 -9
  209. package/dist/spec/catalogs/languages/albanian.json +9 -9
  210. package/dist/spec/catalogs/languages/amharic.json +9 -9
  211. package/dist/spec/catalogs/languages/arabic.json +9 -9
  212. package/dist/spec/catalogs/languages/armenian.json +9 -9
  213. package/dist/spec/catalogs/languages/aymara.json +9 -9
  214. package/dist/spec/catalogs/languages/azerbaijani.json +9 -9
  215. package/dist/spec/catalogs/languages/bengali.json +9 -9
  216. package/dist/spec/catalogs/languages/berber-latin.json +9 -9
  217. package/dist/spec/catalogs/languages/bosnian-latin.json +9 -9
  218. package/dist/spec/catalogs/languages/bulgarian.json +9 -9
  219. package/dist/spec/catalogs/languages/catalan.json +9 -9
  220. package/dist/spec/catalogs/languages/cebuano.json +9 -9
  221. package/dist/spec/catalogs/languages/chinese-simplified.json +9 -9
  222. package/dist/spec/catalogs/languages/chinese-traditional.json +9 -9
  223. package/dist/spec/catalogs/languages/chittagonian.json +9 -9
  224. package/dist/spec/catalogs/languages/croatian.json +9 -9
  225. package/dist/spec/catalogs/languages/czech.json +9 -9
  226. package/dist/spec/catalogs/languages/danish.json +9 -9
  227. package/dist/spec/catalogs/languages/dutch.json +9 -9
  228. package/dist/spec/catalogs/languages/english-au.json +9 -9
  229. package/dist/spec/catalogs/languages/english-ca.json +9 -9
  230. package/dist/spec/catalogs/languages/english-gb.json +9 -9
  231. package/dist/spec/catalogs/languages/english-in.json +9 -9
  232. package/dist/spec/catalogs/languages/english-us.json +9 -9
  233. package/dist/spec/catalogs/languages/english.json +9 -9
  234. package/dist/spec/catalogs/languages/estonian.json +9 -9
  235. package/dist/spec/catalogs/languages/filipino.json +9 -9
  236. package/dist/spec/catalogs/languages/finnish.json +9 -9
  237. package/dist/spec/catalogs/languages/french.json +9 -9
  238. package/dist/spec/catalogs/languages/fulfulde.json +9 -9
  239. package/dist/spec/catalogs/languages/galician.json +9 -9
  240. package/dist/spec/catalogs/languages/georgian.json +9 -9
  241. package/dist/spec/catalogs/languages/german.json +9 -9
  242. package/dist/spec/catalogs/languages/greek.json +9 -9
  243. package/dist/spec/catalogs/languages/gujarati.json +9 -9
  244. package/dist/spec/catalogs/languages/hausa.json +9 -9
  245. package/dist/spec/catalogs/languages/hebrew.json +9 -9
  246. package/dist/spec/catalogs/languages/hindi.json +9 -9
  247. package/dist/spec/catalogs/languages/hungarian.json +9 -9
  248. package/dist/spec/catalogs/languages/igbo.json +9 -9
  249. package/dist/spec/catalogs/languages/index.json +565 -565
  250. package/dist/spec/catalogs/languages/indonesian.json +9 -9
  251. package/dist/spec/catalogs/languages/italian.json +9 -9
  252. package/dist/spec/catalogs/languages/japanese.json +9 -9
  253. package/dist/spec/catalogs/languages/kannada.json +9 -9
  254. package/dist/spec/catalogs/languages/kazakh.json +9 -9
  255. package/dist/spec/catalogs/languages/khmer.json +9 -9
  256. package/dist/spec/catalogs/languages/kinyarwanda.json +9 -9
  257. package/dist/spec/catalogs/languages/korean.json +9 -9
  258. package/dist/spec/catalogs/languages/kurmanji.json +9 -9
  259. package/dist/spec/catalogs/languages/latvian.json +9 -9
  260. package/dist/spec/catalogs/languages/lithuanian.json +9 -9
  261. package/dist/spec/catalogs/languages/macedonian.json +9 -9
  262. package/dist/spec/catalogs/languages/malagasy.json +9 -9
  263. package/dist/spec/catalogs/languages/malay.json +9 -9
  264. package/dist/spec/catalogs/languages/malayalam.json +9 -9
  265. package/dist/spec/catalogs/languages/maori.json +9 -9
  266. package/dist/spec/catalogs/languages/marathi.json +9 -9
  267. package/dist/spec/catalogs/languages/mongolian.json +9 -9
  268. package/dist/spec/catalogs/languages/nepali.json +9 -9
  269. package/dist/spec/catalogs/languages/norwegian.json +9 -9
  270. package/dist/spec/catalogs/languages/odia.json +9 -9
  271. package/dist/spec/catalogs/languages/oromo.json +9 -9
  272. package/dist/spec/catalogs/languages/pashto.json +9 -9
  273. package/dist/spec/catalogs/languages/persian.json +9 -9
  274. package/dist/spec/catalogs/languages/polish.json +9 -9
  275. package/dist/spec/catalogs/languages/portuguese.json +9 -9
  276. package/dist/spec/catalogs/languages/punjabi-gurmukhi.json +9 -9
  277. package/dist/spec/catalogs/languages/punjabi-shahmukhi.json +9 -9
  278. package/dist/spec/catalogs/languages/romanian.json +9 -9
  279. package/dist/spec/catalogs/languages/russian.json +9 -9
  280. package/dist/spec/catalogs/languages/serbian-cyrillic.json +9 -9
  281. package/dist/spec/catalogs/languages/serbian-latin.json +9 -9
  282. package/dist/spec/catalogs/languages/shona.json +9 -9
  283. package/dist/spec/catalogs/languages/slovak.json +9 -9
  284. package/dist/spec/catalogs/languages/slovenian.json +9 -9
  285. package/dist/spec/catalogs/languages/somali.json +9 -9
  286. package/dist/spec/catalogs/languages/spanish.json +9 -9
  287. package/dist/spec/catalogs/languages/swahili.json +9 -9
  288. package/dist/spec/catalogs/languages/swedish.json +9 -9
  289. package/dist/spec/catalogs/languages/tagalog.json +9 -9
  290. package/dist/spec/catalogs/languages/tajik.json +9 -9
  291. package/dist/spec/catalogs/languages/tamil.json +9 -9
  292. package/dist/spec/catalogs/languages/telugu.json +9 -9
  293. package/dist/spec/catalogs/languages/thai.json +9 -9
  294. package/dist/spec/catalogs/languages/turkish.json +9 -9
  295. package/dist/spec/catalogs/languages/ukrainian.json +9 -9
  296. package/dist/spec/catalogs/languages/urdu.json +9 -9
  297. package/dist/spec/catalogs/languages/uzbek-latin.json +9 -9
  298. package/dist/spec/catalogs/languages/vietnamese-quoc-ngu.json +9 -9
  299. package/dist/spec/catalogs/languages/xhosa.json +9 -9
  300. package/dist/spec/catalogs/languages/yoruba.json +9 -9
  301. package/dist/spec/catalogs/languages/zulu.json +9 -9
  302. package/dist/spec/catalogs/layouts/blank.json +6 -6
  303. package/dist/spec/catalogs/layouts/chart-1x.json +16 -16
  304. package/dist/spec/catalogs/layouts/chart-2x.json +22 -22
  305. package/dist/spec/catalogs/layouts/chart-3x.json +28 -28
  306. package/dist/spec/catalogs/layouts/code-1x.json +16 -16
  307. package/dist/spec/catalogs/layouts/extract/canonical.json +487 -487
  308. package/dist/spec/catalogs/layouts/image-1x.json +16 -16
  309. package/dist/spec/catalogs/layouts/image-2x.json +22 -22
  310. package/dist/spec/catalogs/layouts/image-3x.json +28 -28
  311. package/dist/spec/catalogs/layouts/image-bleed.json +10 -10
  312. package/dist/spec/catalogs/layouts/index.json +147 -147
  313. package/dist/spec/catalogs/layouts/list-1x.json +13 -13
  314. package/dist/spec/catalogs/layouts/list-2x.json +16 -16
  315. package/dist/spec/catalogs/layouts/list-3x.json +19 -19
  316. package/dist/spec/catalogs/layouts/list-4x.json +22 -22
  317. package/dist/spec/catalogs/layouts/list-5x.json +25 -25
  318. package/dist/spec/catalogs/layouts/list-6x.json +28 -28
  319. package/dist/spec/catalogs/layouts/media-1x.json +16 -16
  320. package/dist/spec/catalogs/layouts/number-1x.json +13 -13
  321. package/dist/spec/catalogs/layouts/number-2x.json +16 -16
  322. package/dist/spec/catalogs/layouts/number-3x.json +19 -19
  323. package/dist/spec/catalogs/layouts/number-4x.json +22 -22
  324. package/dist/spec/catalogs/layouts/number-5x.json +25 -25
  325. package/dist/spec/catalogs/layouts/number-6x.json +28 -28
  326. package/dist/spec/catalogs/layouts/table-1x.json +16 -16
  327. package/dist/spec/catalogs/layouts/text-1x.json +13 -13
  328. package/dist/spec/catalogs/layouts/text-2x.json +16 -16
  329. package/dist/spec/catalogs/layouts/text-3x.json +19 -19
  330. package/dist/spec/catalogs/layouts/title-subtitle.json +13 -13
  331. package/dist/spec/catalogs/layouts/title.json +10 -10
  332. package/dist/spec/catalogs/narratives/board-meeting.json +192 -192
  333. package/dist/spec/catalogs/narratives/business-narrative.json +87 -87
  334. package/dist/spec/catalogs/narratives/business-review.json +119 -119
  335. package/dist/spec/catalogs/narratives/capacity-planning.json +88 -88
  336. package/dist/spec/catalogs/narratives/challenge-resolution.json +80 -80
  337. package/dist/spec/catalogs/narratives/classic-story.json +78 -78
  338. package/dist/spec/catalogs/narratives/company-intro.json +96 -96
  339. package/dist/spec/catalogs/narratives/conference-talk.json +54 -54
  340. package/dist/spec/catalogs/narratives/early-startup-pitch.json +119 -119
  341. package/dist/spec/catalogs/narratives/educate.json +95 -95
  342. package/dist/spec/catalogs/narratives/employee-review.json +87 -87
  343. package/dist/spec/catalogs/narratives/failure-analysis.json +104 -104
  344. package/dist/spec/catalogs/narratives/focus.json +120 -120
  345. package/dist/spec/catalogs/narratives/golden-circle.json +50 -50
  346. package/dist/spec/catalogs/narratives/index.json +358 -358
  347. package/dist/spec/catalogs/narratives/innovation.json +96 -96
  348. package/dist/spec/catalogs/narratives/justice.json +112 -112
  349. package/dist/spec/catalogs/narratives/marketing-strategy.json +111 -111
  350. package/dist/spec/catalogs/narratives/performance-improvement-plan.json +87 -87
  351. package/dist/spec/catalogs/narratives/performance-review.json +111 -111
  352. package/dist/spec/catalogs/narratives/persuade.json +94 -94
  353. package/dist/spec/catalogs/narratives/persuasive-sales.json +87 -87
  354. package/dist/spec/catalogs/narratives/pitch-deck.json +107 -107
  355. package/dist/spec/catalogs/narratives/problem-solution.json +61 -61
  356. package/dist/spec/catalogs/narratives/product-launch.json +104 -104
  357. package/dist/spec/catalogs/narratives/project-proposal.json +104 -104
  358. package/dist/spec/catalogs/narratives/qbr.json +85 -85
  359. package/dist/spec/catalogs/narratives/rags-to-riches.json +80 -80
  360. package/dist/spec/catalogs/narratives/reveal.json +87 -87
  361. package/dist/spec/catalogs/narratives/scqa.json +55 -55
  362. package/dist/spec/catalogs/narratives/status-update.json +72 -72
  363. package/dist/spec/catalogs/narratives/strategic-advisory.json +85 -85
  364. package/dist/spec/catalogs/narratives/strategic-narrative.json +61 -61
  365. package/dist/spec/catalogs/narratives/survey-analysis.json +104 -104
  366. package/dist/spec/catalogs/narratives/survival-story.json +103 -103
  367. package/dist/spec/catalogs/narratives/transformation-arc.json +50 -50
  368. package/dist/spec/catalogs/narratives/trend-analysis.json +79 -79
  369. package/dist/spec/catalogs/narratives/underdog-victory.json +87 -87
  370. package/dist/spec/catalogs/narratives/venture-pitch.json +109 -109
  371. package/dist/spec/catalogs/narratives/weekly-progress.json +103 -103
  372. package/dist/spec/catalogs/purposes/align.json +16 -16
  373. package/dist/spec/catalogs/purposes/decide.json +16 -16
  374. package/dist/spec/catalogs/purposes/educate.json +16 -16
  375. package/dist/spec/catalogs/purposes/index.json +61 -61
  376. package/dist/spec/catalogs/purposes/inform.json +16 -16
  377. package/dist/spec/catalogs/purposes/persuade.json +16 -16
  378. package/dist/spec/catalogs/purposes/pitch.json +16 -16
  379. package/dist/spec/catalogs/purposes/plan.json +16 -16
  380. package/dist/spec/catalogs/purposes/report.json +16 -16
  381. package/dist/spec/catalogs/purposes/sell.json +16 -16
  382. package/dist/spec/catalogs/social-platforms/bluesky.json +14 -14
  383. package/dist/spec/catalogs/social-platforms/facebook.json +14 -14
  384. package/dist/spec/catalogs/social-platforms/github.json +15 -15
  385. package/dist/spec/catalogs/social-platforms/index.json +68 -68
  386. package/dist/spec/catalogs/social-platforms/instagram.json +13 -13
  387. package/dist/spec/catalogs/social-platforms/linkedin.json +15 -15
  388. package/dist/spec/catalogs/social-platforms/mastodon.json +14 -14
  389. package/dist/spec/catalogs/social-platforms/threads.json +13 -13
  390. package/dist/spec/catalogs/social-platforms/tiktok.json +14 -14
  391. package/dist/spec/catalogs/social-platforms/x.json +14 -14
  392. package/dist/spec/catalogs/social-platforms/youtube.json +14 -14
  393. package/dist/spec/catalogs/themes/bold.json +13 -13
  394. package/dist/spec/catalogs/themes/classic.json +13 -13
  395. package/dist/spec/catalogs/themes/dark.json +13 -13
  396. package/dist/spec/catalogs/themes/index.json +31 -31
  397. package/dist/spec/catalogs/themes/minimal.json +13 -13
  398. package/dist/spec/catalogs/tones/authoritative.json +31 -31
  399. package/dist/spec/catalogs/tones/casual.json +31 -31
  400. package/dist/spec/catalogs/tones/conversational.json +31 -31
  401. package/dist/spec/catalogs/tones/formal.json +31 -31
  402. package/dist/spec/catalogs/tones/index.json +49 -49
  403. package/dist/spec/catalogs/tones/inspirational.json +31 -31
  404. package/dist/spec/catalogs/tones/persuasive.json +32 -32
  405. package/dist/spec/catalogs/tones/technical.json +31 -31
  406. package/dist/spec/openapi.yaml +776 -776
  407. package/dist/spec/previews/layouts/action-plan.html +1 -0
  408. package/dist/spec/previews/layouts/agenda.html +1 -0
  409. package/dist/spec/previews/layouts/appendix-index.html +1 -0
  410. package/dist/spec/previews/layouts/architecture-stack.html +1 -0
  411. package/dist/spec/previews/layouts/assumptions-dependencies.html +1 -0
  412. package/dist/spec/previews/layouts/before-after.html +1 -0
  413. package/dist/spec/previews/layouts/benchmark-target-table.html +1 -0
  414. package/dist/spec/previews/layouts/bullet-list.html +1 -0
  415. package/dist/spec/previews/layouts/business-model-canvas.html +1 -0
  416. package/dist/spec/previews/layouts/capability-map.html +1 -0
  417. package/dist/spec/previews/layouts/case-study.html +1 -0
  418. package/dist/spec/previews/layouts/chapter-recap.html +1 -0
  419. package/dist/spec/previews/layouts/circular-lifecycle.html +1 -0
  420. package/dist/spec/previews/layouts/comparison.html +1 -0
  421. package/dist/spec/previews/layouts/competitive-landscape.html +1 -0
  422. package/dist/spec/previews/layouts/customer-journey.html +1 -0
  423. package/dist/spec/previews/layouts/customer-logos.html +1 -0
  424. package/dist/spec/previews/layouts/dashboard.html +1 -0
  425. package/dist/spec/previews/layouts/data-visualization.html +1 -0
  426. package/dist/spec/previews/layouts/decision-tree.html +1 -0
  427. package/dist/spec/previews/layouts/detailed-data-table.html +1 -0
  428. package/dist/spec/previews/layouts/ecosystem-map.html +1 -0
  429. package/dist/spec/previews/layouts/executive-decision.html +1 -0
  430. package/dist/spec/previews/layouts/executive-summary.html +1 -0
  431. package/dist/spec/previews/layouts/faq.html +1 -0
  432. package/dist/spec/previews/layouts/feature-comparison-matrix.html +1 -0
  433. package/dist/spec/previews/layouts/forecast-scenario.html +1 -0
  434. package/dist/spec/previews/layouts/funnel-pyramid.html +1 -0
  435. package/dist/spec/previews/layouts/gantt-project-plan.html +1 -0
  436. package/dist/spec/previews/layouts/geographic-map.html +1 -0
  437. package/dist/spec/previews/layouts/heatmap-cohort.html +1 -0
  438. package/dist/spec/previews/layouts/hub-and-spoke.html +1 -0
  439. package/dist/spec/previews/layouts/icon-grid.html +1 -0
  440. package/dist/spec/previews/layouts/image-focus.html +1 -0
  441. package/dist/spec/previews/layouts/index.json +357 -0
  442. package/dist/spec/previews/layouts/key-takeaway.html +1 -0
  443. package/dist/spec/previews/layouts/kpi-scorecard.html +1 -0
  444. package/dist/spec/previews/layouts/logic-tree.html +1 -0
  445. package/dist/spec/previews/layouts/market-size.html +1 -0
  446. package/dist/spec/previews/layouts/matrix-quadrant.html +1 -0
  447. package/dist/spec/previews/layouts/network-dependency-map.html +1 -0
  448. package/dist/spec/previews/layouts/one-column-explainer.html +1 -0
  449. package/dist/spec/previews/layouts/org-chart.html +1 -0
  450. package/dist/spec/previews/layouts/persona-grid.html +1 -0
  451. package/dist/spec/previews/layouts/photo-grid.html +1 -0
  452. package/dist/spec/previews/layouts/pricing-table.html +1 -0
  453. package/dist/spec/previews/layouts/process-flow.html +1 -0
  454. package/dist/spec/previews/layouts/product-feature.html +1 -0
  455. package/dist/spec/previews/layouts/pros-cons.html +1 -0
  456. package/dist/spec/previews/layouts/qa-discussion.html +1 -0
  457. package/dist/spec/previews/layouts/quote-highlight.html +1 -0
  458. package/dist/spec/previews/layouts/raci-matrix.html +1 -0
  459. package/dist/spec/previews/layouts/risk-heatmap.html +1 -0
  460. package/dist/spec/previews/layouts/roadmap.html +1 -0
  461. package/dist/spec/previews/layouts/screenshot-walkthrough.html +1 -0
  462. package/dist/spec/previews/layouts/section-divider.html +1 -0
  463. package/dist/spec/previews/layouts/single-message-statement.html +1 -0
  464. package/dist/spec/previews/layouts/stats-metrics.html +1 -0
  465. package/dist/spec/previews/layouts/status-rag.html +1 -0
  466. package/dist/spec/previews/layouts/swimlane-process.html +1 -0
  467. package/dist/spec/previews/layouts/swot-analysis.html +1 -0
  468. package/dist/spec/previews/layouts/team-bio.html +1 -0
  469. package/dist/spec/previews/layouts/testimonial-grid.html +1 -0
  470. package/dist/spec/previews/layouts/thank-you-cta.html +1 -0
  471. package/dist/spec/previews/layouts/three-column.html +1 -0
  472. package/dist/spec/previews/layouts/timeline.html +1 -0
  473. package/dist/spec/previews/layouts/title-slide.html +1 -0
  474. package/dist/spec/previews/layouts/two-column.html +1 -0
  475. package/dist/spec/previews/layouts/venn-overlap.html +1 -0
  476. package/dist/spec/previews/layouts/waterfall-bridge.html +1 -0
  477. package/dist/spec/previews/layouts/wheel-radial.html +1 -0
  478. package/dist/spec/reference/engine-defaults.json +35 -35
  479. package/dist/spec/schemas/audience.schema.json +156 -156
  480. package/dist/spec/schemas/chart-type.schema.json +537 -537
  481. package/dist/spec/schemas/color-scheme.schema.json +200 -200
  482. package/dist/spec/schemas/font-scheme.schema.json +174 -174
  483. package/dist/spec/schemas/language.schema.json +158 -158
  484. package/dist/spec/schemas/layout.schema.json +280 -280
  485. package/dist/spec/schemas/narrative.schema.json +207 -207
  486. package/dist/spec/schemas/opf.schema.json +2536 -2537
  487. package/dist/spec/schemas/purpose.schema.json +92 -92
  488. package/dist/spec/schemas/social-platform.schema.json +183 -184
  489. package/dist/spec/schemas/theme.schema.json +168 -168
  490. package/dist/spec/schemas/tone.schema.json +146 -146
  491. package/dist/spec-files.d.ts +2388 -0
  492. package/dist/spec-files.js +3349 -0
  493. package/dist/spec-files.js.map +1 -0
  494. package/dist/types.d.ts +5 -5
  495. package/dist/{validator-Be5EzqAt.d.ts → validator-D7WwzKyx.d.ts} +16 -16
  496. package/dist/validator.d.ts +1 -1
  497. package/dist/validator.js +35 -35
  498. package/dist/validator.js.map +1 -1
  499. package/package.json +91 -80
@@ -1,776 +1,776 @@
1
- openapi: 3.1.0
2
- info:
3
- title: pptx.dev API
4
- version: "1.0.0"
5
- description: |
6
- REST API for parsing, validating, converting, generating, and rendering presentations.
7
- OPF (Open Presentation Format) is the JSON contract; schema URL: `https://openpresentation.org/schema/opf/v1`.
8
-
9
- **Authentication:** Send `Authorization: Bearer <Clerk API key>` on every request, or use a signed-in browser session (Studio). `POST /v1/preview` is anonymous (IP rate-limited) for the OPF Playground.
10
-
11
- Human-readable docs: [pptx.dev/docs](https://www.pptx.dev/docs)
12
- contact:
13
- name: pptx.dev
14
- url: https://www.pptx.dev
15
- license:
16
- name: MIT
17
- url: https://opensource.org/licenses/MIT
18
-
19
- servers:
20
- - url: https://api.pptx.dev
21
- description: Production API
22
- - url: http://localhost:3000/api
23
- description: Local Next.js App Router (`/api` prefix)
24
-
25
- tags:
26
- - name: playground
27
- description: Anonymous OPF playground helpers (IP rate limits)
28
- - name: validate
29
- description: OPF schema validation (no billing for validation)
30
- - name: parse
31
- description: Upload and inspect .pptx files
32
- - name: convert
33
- description: PPTX to OPF
34
- - name: generate
35
- description: OPF to PPTX and exports
36
- - name: render
37
- description: PPTX to web or raster/vector previews
38
-
39
- security:
40
- - bearerAuth: []
41
-
42
- paths:
43
- /v1/validate:
44
- post:
45
- operationId: validateOpf
46
- tags: [validate]
47
- summary: Validate OPF JSON
48
- description: Validates an OPF document against the schema. Returns structured errors and warnings.
49
- requestBody:
50
- required: true
51
- content:
52
- application/json:
53
- schema:
54
- $ref: "#/components/schemas/OpfDocument"
55
- examples:
56
- minimal:
57
- summary: Minimal OPF
58
- value:
59
- $schema: "https://openpresentation.org/schema/opf/v1"
60
- meta:
61
- title: Example
62
- design:
63
- theme: corporate-minimal
64
- slides:
65
- - id: s1
66
- layout: title-slide
67
- elements:
68
- - id: h1
69
- type: text
70
- content:
71
- text: Hello
72
- responses:
73
- "200":
74
- description: Validation result
75
- content:
76
- application/json:
77
- schema:
78
- $ref: "#/components/schemas/ValidateResponse"
79
- "400":
80
- description: Bad request (wrong Content-Type or invalid JSON)
81
- content:
82
- application/json:
83
- schema:
84
- $ref: "#/components/schemas/ErrorResponse"
85
- "401":
86
- $ref: "#/components/responses/Unauthorized"
87
- "500":
88
- $ref: "#/components/responses/InternalError"
89
-
90
- /v1/preview:
91
- post:
92
- operationId: previewOpf
93
- tags: [playground]
94
- summary: OPF preview summary (anonymous)
95
- description: |
96
- Validates OPF JSON (body max 256 KB) for live preview without an API key.
97
- Per-IP limits: 30 requests/minute and 500/hour (separate fixed windows).
98
- `format=web` returns `textRuns` per slide (similar to `/v1/render?format=web`).
99
- `format=svg|png` returns `svg: null` per slide with an `export` stub until the engine ships.
100
- security: []
101
- parameters:
102
- - name: format
103
- in: query
104
- required: false
105
- schema:
106
- type: string
107
- enum: [web, svg, png]
108
- default: svg
109
- description: Preview representation
110
- - name: slides
111
- in: query
112
- required: false
113
- schema:
114
- type: string
115
- description: Comma-separated 1-based slide numbers (subset of slides to return)
116
- requestBody:
117
- required: true
118
- content:
119
- application/json:
120
- schema:
121
- $ref: "#/components/schemas/OpfDocument"
122
- responses:
123
- "200":
124
- description: Valid OPF — preview payload (`slides` shape depends on `format`)
125
- content:
126
- application/json:
127
- schema:
128
- $ref: "#/components/schemas/PreviewResponse"
129
- "400":
130
- description: Bad request (wrong Content-Type, invalid JSON, bad `format`/`slides`)
131
- content:
132
- application/json:
133
- schema:
134
- $ref: "#/components/schemas/ErrorResponse"
135
- "413":
136
- description: Request body larger than 256 KB
137
- content:
138
- application/json:
139
- schema:
140
- $ref: "#/components/schemas/ErrorResponse"
141
- "422":
142
- description: OPF failed validation
143
- content:
144
- application/json:
145
- schema:
146
- $ref: "#/components/schemas/ErrorResponse"
147
- "429":
148
- description: Rate limit exceeded
149
- content:
150
- application/json:
151
- schema:
152
- $ref: "#/components/schemas/ErrorResponse"
153
- "500":
154
- $ref: "#/components/responses/InternalError"
155
-
156
- /v1/parse:
157
- post:
158
- operationId: parsePptx
159
- tags: [parse]
160
- summary: Parse a .pptx upload
161
- description: Upload a `.pptx` file and receive a `parseId` for follow-up GET endpoints.
162
- requestBody:
163
- required: true
164
- content:
165
- multipart/form-data:
166
- schema:
167
- type: object
168
- required: [file]
169
- properties:
170
- file:
171
- type: string
172
- format: binary
173
- description: PowerPoint file (.pptx)
174
- responses:
175
- "200":
176
- description: Parse job created
177
- content:
178
- application/json:
179
- schema:
180
- $ref: "#/components/schemas/ParseAcceptedResponse"
181
- "400":
182
- description: Missing file or not a .pptx
183
- content:
184
- application/json:
185
- schema:
186
- $ref: "#/components/schemas/ErrorResponse"
187
- "401":
188
- $ref: "#/components/responses/Unauthorized"
189
- "500":
190
- $ref: "#/components/responses/InternalError"
191
-
192
- /v1/convert:
193
- post:
194
- operationId: convertPptxToOpf
195
- tags: [convert]
196
- summary: Convert .pptx to OPF JSON
197
- description: Reverse of `/v1/generate` — imports an existing deck as OPF.
198
- requestBody:
199
- required: true
200
- content:
201
- multipart/form-data:
202
- schema:
203
- type: object
204
- required: [file]
205
- properties:
206
- file:
207
- type: string
208
- format: binary
209
- responses:
210
- "200":
211
- description: OPF document
212
- content:
213
- application/json:
214
- schema:
215
- $ref: "#/components/schemas/OpfDocument"
216
- "400":
217
- description: Missing file or not a .pptx
218
- content:
219
- application/json:
220
- schema:
221
- $ref: "#/components/schemas/ErrorResponse"
222
- "401":
223
- $ref: "#/components/responses/Unauthorized"
224
- "500":
225
- $ref: "#/components/responses/InternalError"
226
-
227
- /v1/generate:
228
- post:
229
- operationId: generateFromOpf
230
- tags: [generate]
231
- summary: Generate output from OPF
232
- description: |
233
- Validates OPF, then enqueues or returns generation status. Query `format` selects the target
234
- (`pptx`, `pdf`, `png`, `svg`). The PPTX engine may return `202 Accepted` while work is stubbed or async.
235
- parameters:
236
- - name: format
237
- in: query
238
- required: false
239
- schema:
240
- type: string
241
- enum: [pptx, pdf, png, svg]
242
- default: pptx
243
- description: Output format
244
- requestBody:
245
- required: true
246
- content:
247
- application/json:
248
- schema:
249
- $ref: "#/components/schemas/OpfDocument"
250
- responses:
251
- "202":
252
- description: Accepted — generation stub or async pipeline
253
- content:
254
- application/json:
255
- schema:
256
- $ref: "#/components/schemas/GenerateAcceptedResponse"
257
- "400":
258
- description: Invalid format or wrong Content-Type
259
- content:
260
- application/json:
261
- schema:
262
- $ref: "#/components/schemas/ErrorResponse"
263
- "401":
264
- $ref: "#/components/responses/Unauthorized"
265
- "422":
266
- description: OPF failed validation
267
- content:
268
- application/json:
269
- schema:
270
- $ref: "#/components/schemas/ErrorResponse"
271
- "500":
272
- $ref: "#/components/responses/InternalError"
273
-
274
- /v1/render:
275
- post:
276
- operationId: renderPptx
277
- tags: [render]
278
- summary: Render a .pptx for web or export
279
- description: |
280
- Parses upload, stores result, and returns slide data (`format=web`) or an acceptance payload
281
- for raster/vector engines (`svg`, `png`).
282
- parameters:
283
- - name: format
284
- in: query
285
- required: false
286
- schema:
287
- type: string
288
- enum: [web, svg, png]
289
- default: web
290
- - name: slides
291
- in: query
292
- required: false
293
- schema:
294
- type: string
295
- description: Comma-separated 1-based slide numbers (e.g. `1,3,5`)
296
- requestBody:
297
- required: true
298
- content:
299
- multipart/form-data:
300
- schema:
301
- type: object
302
- required: [file]
303
- properties:
304
- file:
305
- type: string
306
- format: binary
307
- responses:
308
- "200":
309
- description: Web slide payload
310
- content:
311
- application/json:
312
- schema:
313
- $ref: "#/components/schemas/RenderWebResponse"
314
- "202":
315
- description: Export pipeline not ready — stub response
316
- content:
317
- application/json:
318
- schema:
319
- $ref: "#/components/schemas/RenderAcceptedResponse"
320
- "400":
321
- description: Invalid format, slides, or missing file
322
- content:
323
- application/json:
324
- schema:
325
- $ref: "#/components/schemas/ErrorResponse"
326
- "401":
327
- $ref: "#/components/responses/Unauthorized"
328
- "500":
329
- $ref: "#/components/responses/InternalError"
330
-
331
- /v1/parse/{parseId}/metadata:
332
- get:
333
- operationId: getParseMetadata
334
- tags: [parse]
335
- summary: Get document metadata for a parse
336
- parameters:
337
- - $ref: "#/components/parameters/ParseId"
338
- responses:
339
- "200":
340
- description: Metadata buckets (core, app, custom)
341
- content:
342
- application/json:
343
- schema:
344
- $ref: "#/components/schemas/ParseMetadataResponse"
345
- "400":
346
- description: Bad request
347
- content:
348
- application/json:
349
- schema:
350
- $ref: "#/components/schemas/ErrorResponse"
351
- "401":
352
- $ref: "#/components/responses/Unauthorized"
353
- "404":
354
- description: Parse expired or unknown
355
- content:
356
- application/json:
357
- schema:
358
- $ref: "#/components/schemas/ErrorResponse"
359
-
360
- /v1/parse/{parseId}/slides/{index}:
361
- get:
362
- operationId: getParseSlide
363
- tags: [parse]
364
- summary: Get one slide by index
365
- parameters:
366
- - $ref: "#/components/parameters/ParseId"
367
- - name: index
368
- in: path
369
- required: true
370
- schema:
371
- type: integer
372
- minimum: 0
373
- description: Zero-based slide index
374
- responses:
375
- "200":
376
- description: Slide payload
377
- content:
378
- application/json:
379
- schema:
380
- $ref: "#/components/schemas/ParseSlideResponse"
381
- "400":
382
- description: Invalid index
383
- content:
384
- application/json:
385
- schema:
386
- $ref: "#/components/schemas/ErrorResponse"
387
- "401":
388
- $ref: "#/components/responses/Unauthorized"
389
- "404":
390
- description: Parse or slide not found
391
- content:
392
- application/json:
393
- schema:
394
- $ref: "#/components/schemas/ErrorResponse"
395
-
396
- /v1/parse/{parseId}/text:
397
- get:
398
- operationId: getParseAllText
399
- tags: [parse]
400
- summary: Get flattened text for all slides
401
- parameters:
402
- - $ref: "#/components/parameters/ParseId"
403
- responses:
404
- "200":
405
- description: Text per slide
406
- content:
407
- application/json:
408
- schema:
409
- $ref: "#/components/schemas/ParseTextResponse"
410
- "401":
411
- $ref: "#/components/responses/Unauthorized"
412
- "404":
413
- description: Parse expired or unknown
414
- content:
415
- application/json:
416
- schema:
417
- $ref: "#/components/schemas/ErrorResponse"
418
-
419
- components:
420
- securitySchemes:
421
- bearerAuth:
422
- type: http
423
- scheme: bearer
424
- description: Clerk user or org API key (`ppx_…`), or session cookie from signed-in Studio user.
425
-
426
- parameters:
427
- ParseId:
428
- name: parseId
429
- in: path
430
- required: true
431
- schema:
432
- type: string
433
- description: Identifier returned by `POST /v1/parse` or `/v1/render`
434
-
435
- responses:
436
- Unauthorized:
437
- description: Missing or invalid credentials
438
- content:
439
- application/json:
440
- schema:
441
- $ref: "#/components/schemas/ErrorResponse"
442
- InternalError:
443
- description: Server error
444
- content:
445
- application/json:
446
- schema:
447
- $ref: "#/components/schemas/ErrorResponse"
448
-
449
- schemas:
450
- ErrorResponse:
451
- type: object
452
- required: [error]
453
- properties:
454
- error:
455
- $ref: "#/components/schemas/ApiError"
456
-
457
- ApiError:
458
- type: object
459
- required: [code, message, requestId]
460
- properties:
461
- code:
462
- type: string
463
- enum:
464
- - invalid_request
465
- - unauthorized
466
- - forbidden
467
- - not_found
468
- - rate_limited
469
- - idempotency_conflict
470
- - internal_error
471
- message:
472
- type: string
473
- details:
474
- type: object
475
- additionalProperties: true
476
- description: Optional structured details for the error code.
477
- requestId:
478
- type: string
479
-
480
- OpfDocument:
481
- type: object
482
- description: OPF v1 document. See https://www.pptx.dev/docs/opf for field reference.
483
- additionalProperties: true
484
- properties:
485
- $schema:
486
- type: string
487
- const: "https://openpresentation.org/schema/opf/v1"
488
- meta:
489
- type: object
490
- additionalProperties: true
491
- design:
492
- type: object
493
- additionalProperties: true
494
- slides:
495
- type: array
496
- items:
497
- type: object
498
- additionalProperties: true
499
-
500
- ValidationIssue:
501
- type: object
502
- required: [path, message]
503
- properties:
504
- path:
505
- type: string
506
- message:
507
- type: string
508
-
509
- ValidateResponse:
510
- type: object
511
- required: [valid, errors, warnings]
512
- properties:
513
- valid:
514
- type: boolean
515
- errors:
516
- type: array
517
- items:
518
- $ref: "#/components/schemas/ValidationIssue"
519
- warnings:
520
- type: array
521
- items:
522
- $ref: "#/components/schemas/ValidationIssue"
523
-
524
- PreviewWebSlide:
525
- type: object
526
- required: [index, slideNumber, id, layout, hidden, textRuns, speakerNotes]
527
- properties:
528
- index:
529
- type: integer
530
- minimum: 0
531
- slideNumber:
532
- type: integer
533
- minimum: 1
534
- id:
535
- type: string
536
- layout:
537
- type: string
538
- hidden:
539
- type: boolean
540
- textRuns:
541
- type: array
542
- items:
543
- type: object
544
- additionalProperties: true
545
- speakerNotes:
546
- type: string
547
-
548
- PreviewRasterSlide:
549
- type: object
550
- required: [index, slideNumber, id, layout, svg]
551
- properties:
552
- index:
553
- type: integer
554
- minimum: 0
555
- slideNumber:
556
- type: integer
557
- minimum: 1
558
- id:
559
- type: string
560
- layout:
561
- type: string
562
- svg:
563
- type: string
564
- nullable: true
565
-
566
- PreviewExportStub:
567
- type: object
568
- required: [status, message]
569
- properties:
570
- status:
571
- type: string
572
- example: accepted
573
- message:
574
- type: string
575
-
576
- PreviewResponse:
577
- type: object
578
- required: [status, format, slideCount, dimensions, meta, design, slides, warnings]
579
- properties:
580
- status:
581
- type: string
582
- example: ok
583
- format:
584
- type: string
585
- enum: [web, svg, png]
586
- slideCount:
587
- type: integer
588
- minimum: 0
589
- dimensions:
590
- type: object
591
- required: [widthPx, heightPx, preset]
592
- properties:
593
- widthPx:
594
- type: integer
595
- heightPx:
596
- type: integer
597
- preset:
598
- type: string
599
- meta:
600
- type: object
601
- required: [title]
602
- properties:
603
- title:
604
- type: string
605
- filename:
606
- type: string
607
- description: Suggested download filename including extension (resolved from meta.filename or title).
608
- subtitle:
609
- type: string
610
- design:
611
- type: object
612
- properties:
613
- theme:
614
- type: string
615
- export:
616
- $ref: "#/components/schemas/PreviewExportStub"
617
- slides:
618
- type: array
619
- items:
620
- oneOf:
621
- - $ref: "#/components/schemas/PreviewWebSlide"
622
- - $ref: "#/components/schemas/PreviewRasterSlide"
623
- warnings:
624
- type: array
625
- items:
626
- $ref: "#/components/schemas/ValidationIssue"
627
-
628
- ParseAcceptedResponse:
629
- type: object
630
- required: [parseId, slideCount, width, height]
631
- properties:
632
- parseId:
633
- type: string
634
- slideCount:
635
- type: integer
636
- width:
637
- type: integer
638
- description: Slide width in EMUs
639
- height:
640
- type: integer
641
- description: Slide height in EMUs
642
-
643
- GenerateAcceptedResponse:
644
- type: object
645
- required: [status, message, format, slideCount, validationWarnings]
646
- properties:
647
- status:
648
- type: string
649
- example: accepted
650
- message:
651
- type: string
652
- format:
653
- type: string
654
- filename:
655
- type: string
656
- description: Suggested output filename including extension (from meta.filename or title slug).
657
- slideCount:
658
- type: integer
659
- validationWarnings:
660
- type: array
661
- items:
662
- type: string
663
-
664
- TextRun:
665
- type: object
666
- additionalProperties: true
667
- properties:
668
- text:
669
- type: string
670
- bold:
671
- type: boolean
672
- italic:
673
- type: boolean
674
- underline:
675
- type: boolean
676
- fontSize:
677
- type: number
678
- fontFamily:
679
- type: string
680
- color:
681
- type: string
682
- alignment:
683
- type: string
684
-
685
- RenderWebResponse:
686
- type: object
687
- required: [parseId, format, dimensions, slideCount, slides, metadata, viewerUrl]
688
- properties:
689
- parseId:
690
- type: string
691
- format:
692
- type: string
693
- enum: [web]
694
- dimensions:
695
- type: object
696
- additionalProperties: true
697
- slideCount:
698
- type: integer
699
- slides:
700
- type: array
701
- items:
702
- type: object
703
- additionalProperties: true
704
- metadata:
705
- type: object
706
- additionalProperties: true
707
- viewerUrl:
708
- type: string
709
- description: Relative URL to the web viewer
710
-
711
- RenderAcceptedResponse:
712
- type: object
713
- required: [status, message, parseId, format, slideCount, viewerUrl]
714
- properties:
715
- status:
716
- type: string
717
- example: accepted
718
- message:
719
- type: string
720
- parseId:
721
- type: string
722
- format:
723
- type: string
724
- slideCount:
725
- type: integer
726
- viewerUrl:
727
- type: string
728
-
729
- ParseMetadataResponse:
730
- type: object
731
- required: [parseId, core, app, custom]
732
- properties:
733
- parseId:
734
- type: string
735
- core:
736
- type: object
737
- additionalProperties: true
738
- app:
739
- type: object
740
- additionalProperties: true
741
- custom:
742
- type: object
743
- additionalProperties: true
744
-
745
- ParseSlideResponse:
746
- type: object
747
- required: [index, slideNumber, hidden, width, height, textRuns]
748
- properties:
749
- index:
750
- type: integer
751
- slideNumber:
752
- type: integer
753
- hidden:
754
- type: boolean
755
- width:
756
- type: integer
757
- height:
758
- type: integer
759
- textRuns:
760
- type: array
761
- items:
762
- $ref: "#/components/schemas/TextRun"
763
- speakerNotes:
764
- type: string
765
-
766
- ParseTextResponse:
767
- type: object
768
- required: [parseId, slides]
769
- properties:
770
- parseId:
771
- type: string
772
- slides:
773
- type: array
774
- items:
775
- type: object
776
- additionalProperties: true
1
+ openapi: 3.1.0
2
+ info:
3
+ title: pptx.dev API
4
+ version: "1.0.0"
5
+ description: |
6
+ REST API for parsing, validating, converting, generating, and rendering presentations.
7
+ OPF (Open Presentation Format) is the JSON contract; schema URL: `https://openpresentation.org/schema/opf/v1`.
8
+
9
+ **Authentication:** Send `Authorization: Bearer <Clerk API key>` on every request, or use a signed-in browser session (Studio). `POST /v1/preview` is anonymous (IP rate-limited) for the OPF Playground.
10
+
11
+ Human-readable docs: [pptx.dev/docs](https://www.pptx.dev/docs)
12
+ contact:
13
+ name: pptx.dev
14
+ url: https://www.pptx.dev
15
+ license:
16
+ name: MIT
17
+ url: https://opensource.org/licenses/MIT
18
+
19
+ servers:
20
+ - url: https://api.pptx.dev
21
+ description: Production API
22
+ - url: http://localhost:3000/api
23
+ description: Local Next.js App Router (`/api` prefix)
24
+
25
+ tags:
26
+ - name: playground
27
+ description: Anonymous OPF playground helpers (IP rate limits)
28
+ - name: validate
29
+ description: OPF schema validation (no billing for validation)
30
+ - name: parse
31
+ description: Upload and inspect .pptx files
32
+ - name: convert
33
+ description: PPTX to OPF
34
+ - name: generate
35
+ description: OPF to PPTX and exports
36
+ - name: render
37
+ description: PPTX to web or raster/vector previews
38
+
39
+ security:
40
+ - bearerAuth: []
41
+
42
+ paths:
43
+ /v1/validate:
44
+ post:
45
+ operationId: validateOpf
46
+ tags: [validate]
47
+ summary: Validate OPF JSON
48
+ description: Validates an OPF document against the schema. Returns structured errors and warnings.
49
+ requestBody:
50
+ required: true
51
+ content:
52
+ application/json:
53
+ schema:
54
+ $ref: "#/components/schemas/OpfDocument"
55
+ examples:
56
+ minimal:
57
+ summary: Minimal OPF
58
+ value:
59
+ $schema: "https://openpresentation.org/schema/opf/v1"
60
+ meta:
61
+ title: Example
62
+ design:
63
+ theme: corporate-minimal
64
+ slides:
65
+ - id: s1
66
+ layout: title-slide
67
+ elements:
68
+ - id: h1
69
+ type: text
70
+ content:
71
+ text: Hello
72
+ responses:
73
+ "200":
74
+ description: Validation result
75
+ content:
76
+ application/json:
77
+ schema:
78
+ $ref: "#/components/schemas/ValidateResponse"
79
+ "400":
80
+ description: Bad request (wrong Content-Type or invalid JSON)
81
+ content:
82
+ application/json:
83
+ schema:
84
+ $ref: "#/components/schemas/ErrorResponse"
85
+ "401":
86
+ $ref: "#/components/responses/Unauthorized"
87
+ "500":
88
+ $ref: "#/components/responses/InternalError"
89
+
90
+ /v1/preview:
91
+ post:
92
+ operationId: previewOpf
93
+ tags: [playground]
94
+ summary: OPF preview summary (anonymous)
95
+ description: |
96
+ Validates OPF JSON (body max 256 KB) for live preview without an API key.
97
+ Per-IP limits: 30 requests/minute and 500/hour (separate fixed windows).
98
+ `format=web` returns `textRuns` per slide (similar to `/v1/render?format=web`).
99
+ `format=svg|png` returns `svg: null` per slide with an `export` stub until the engine ships.
100
+ security: []
101
+ parameters:
102
+ - name: format
103
+ in: query
104
+ required: false
105
+ schema:
106
+ type: string
107
+ enum: [web, svg, png]
108
+ default: svg
109
+ description: Preview representation
110
+ - name: slides
111
+ in: query
112
+ required: false
113
+ schema:
114
+ type: string
115
+ description: Comma-separated 1-based slide numbers (subset of slides to return)
116
+ requestBody:
117
+ required: true
118
+ content:
119
+ application/json:
120
+ schema:
121
+ $ref: "#/components/schemas/OpfDocument"
122
+ responses:
123
+ "200":
124
+ description: Valid OPF — preview payload (`slides` shape depends on `format`)
125
+ content:
126
+ application/json:
127
+ schema:
128
+ $ref: "#/components/schemas/PreviewResponse"
129
+ "400":
130
+ description: Bad request (wrong Content-Type, invalid JSON, bad `format`/`slides`)
131
+ content:
132
+ application/json:
133
+ schema:
134
+ $ref: "#/components/schemas/ErrorResponse"
135
+ "413":
136
+ description: Request body larger than 256 KB
137
+ content:
138
+ application/json:
139
+ schema:
140
+ $ref: "#/components/schemas/ErrorResponse"
141
+ "422":
142
+ description: OPF failed validation
143
+ content:
144
+ application/json:
145
+ schema:
146
+ $ref: "#/components/schemas/ErrorResponse"
147
+ "429":
148
+ description: Rate limit exceeded
149
+ content:
150
+ application/json:
151
+ schema:
152
+ $ref: "#/components/schemas/ErrorResponse"
153
+ "500":
154
+ $ref: "#/components/responses/InternalError"
155
+
156
+ /v1/parse:
157
+ post:
158
+ operationId: parsePptx
159
+ tags: [parse]
160
+ summary: Parse a .pptx upload
161
+ description: Upload a `.pptx` file and receive a `parseId` for follow-up GET endpoints.
162
+ requestBody:
163
+ required: true
164
+ content:
165
+ multipart/form-data:
166
+ schema:
167
+ type: object
168
+ required: [file]
169
+ properties:
170
+ file:
171
+ type: string
172
+ format: binary
173
+ description: PowerPoint file (.pptx)
174
+ responses:
175
+ "200":
176
+ description: Parse job created
177
+ content:
178
+ application/json:
179
+ schema:
180
+ $ref: "#/components/schemas/ParseAcceptedResponse"
181
+ "400":
182
+ description: Missing file or not a .pptx
183
+ content:
184
+ application/json:
185
+ schema:
186
+ $ref: "#/components/schemas/ErrorResponse"
187
+ "401":
188
+ $ref: "#/components/responses/Unauthorized"
189
+ "500":
190
+ $ref: "#/components/responses/InternalError"
191
+
192
+ /v1/convert:
193
+ post:
194
+ operationId: convertPptxToOpf
195
+ tags: [convert]
196
+ summary: Convert .pptx to OPF JSON
197
+ description: Reverse of `/v1/generate` — imports an existing deck as OPF.
198
+ requestBody:
199
+ required: true
200
+ content:
201
+ multipart/form-data:
202
+ schema:
203
+ type: object
204
+ required: [file]
205
+ properties:
206
+ file:
207
+ type: string
208
+ format: binary
209
+ responses:
210
+ "200":
211
+ description: OPF document
212
+ content:
213
+ application/json:
214
+ schema:
215
+ $ref: "#/components/schemas/OpfDocument"
216
+ "400":
217
+ description: Missing file or not a .pptx
218
+ content:
219
+ application/json:
220
+ schema:
221
+ $ref: "#/components/schemas/ErrorResponse"
222
+ "401":
223
+ $ref: "#/components/responses/Unauthorized"
224
+ "500":
225
+ $ref: "#/components/responses/InternalError"
226
+
227
+ /v1/generate:
228
+ post:
229
+ operationId: generateFromOpf
230
+ tags: [generate]
231
+ summary: Generate output from OPF
232
+ description: |
233
+ Validates OPF, then enqueues or returns generation status. Query `format` selects the target
234
+ (`pptx`, `pdf`, `png`, `svg`). The PPTX engine may return `202 Accepted` while work is stubbed or async.
235
+ parameters:
236
+ - name: format
237
+ in: query
238
+ required: false
239
+ schema:
240
+ type: string
241
+ enum: [pptx, pdf, png, svg]
242
+ default: pptx
243
+ description: Output format
244
+ requestBody:
245
+ required: true
246
+ content:
247
+ application/json:
248
+ schema:
249
+ $ref: "#/components/schemas/OpfDocument"
250
+ responses:
251
+ "202":
252
+ description: Accepted — generation stub or async pipeline
253
+ content:
254
+ application/json:
255
+ schema:
256
+ $ref: "#/components/schemas/GenerateAcceptedResponse"
257
+ "400":
258
+ description: Invalid format or wrong Content-Type
259
+ content:
260
+ application/json:
261
+ schema:
262
+ $ref: "#/components/schemas/ErrorResponse"
263
+ "401":
264
+ $ref: "#/components/responses/Unauthorized"
265
+ "422":
266
+ description: OPF failed validation
267
+ content:
268
+ application/json:
269
+ schema:
270
+ $ref: "#/components/schemas/ErrorResponse"
271
+ "500":
272
+ $ref: "#/components/responses/InternalError"
273
+
274
+ /v1/render:
275
+ post:
276
+ operationId: renderPptx
277
+ tags: [render]
278
+ summary: Render a .pptx for web or export
279
+ description: |
280
+ Parses upload, stores result, and returns slide data (`format=web`) or an acceptance payload
281
+ for raster/vector engines (`svg`, `png`).
282
+ parameters:
283
+ - name: format
284
+ in: query
285
+ required: false
286
+ schema:
287
+ type: string
288
+ enum: [web, svg, png]
289
+ default: web
290
+ - name: slides
291
+ in: query
292
+ required: false
293
+ schema:
294
+ type: string
295
+ description: Comma-separated 1-based slide numbers (e.g. `1,3,5`)
296
+ requestBody:
297
+ required: true
298
+ content:
299
+ multipart/form-data:
300
+ schema:
301
+ type: object
302
+ required: [file]
303
+ properties:
304
+ file:
305
+ type: string
306
+ format: binary
307
+ responses:
308
+ "200":
309
+ description: Web slide payload
310
+ content:
311
+ application/json:
312
+ schema:
313
+ $ref: "#/components/schemas/RenderWebResponse"
314
+ "202":
315
+ description: Export pipeline not ready — stub response
316
+ content:
317
+ application/json:
318
+ schema:
319
+ $ref: "#/components/schemas/RenderAcceptedResponse"
320
+ "400":
321
+ description: Invalid format, slides, or missing file
322
+ content:
323
+ application/json:
324
+ schema:
325
+ $ref: "#/components/schemas/ErrorResponse"
326
+ "401":
327
+ $ref: "#/components/responses/Unauthorized"
328
+ "500":
329
+ $ref: "#/components/responses/InternalError"
330
+
331
+ /v1/parse/{parseId}/metadata:
332
+ get:
333
+ operationId: getParseMetadata
334
+ tags: [parse]
335
+ summary: Get document metadata for a parse
336
+ parameters:
337
+ - $ref: "#/components/parameters/ParseId"
338
+ responses:
339
+ "200":
340
+ description: Metadata buckets (core, app, custom)
341
+ content:
342
+ application/json:
343
+ schema:
344
+ $ref: "#/components/schemas/ParseMetadataResponse"
345
+ "400":
346
+ description: Bad request
347
+ content:
348
+ application/json:
349
+ schema:
350
+ $ref: "#/components/schemas/ErrorResponse"
351
+ "401":
352
+ $ref: "#/components/responses/Unauthorized"
353
+ "404":
354
+ description: Parse expired or unknown
355
+ content:
356
+ application/json:
357
+ schema:
358
+ $ref: "#/components/schemas/ErrorResponse"
359
+
360
+ /v1/parse/{parseId}/slides/{index}:
361
+ get:
362
+ operationId: getParseSlide
363
+ tags: [parse]
364
+ summary: Get one slide by index
365
+ parameters:
366
+ - $ref: "#/components/parameters/ParseId"
367
+ - name: index
368
+ in: path
369
+ required: true
370
+ schema:
371
+ type: integer
372
+ minimum: 0
373
+ description: Zero-based slide index
374
+ responses:
375
+ "200":
376
+ description: Slide payload
377
+ content:
378
+ application/json:
379
+ schema:
380
+ $ref: "#/components/schemas/ParseSlideResponse"
381
+ "400":
382
+ description: Invalid index
383
+ content:
384
+ application/json:
385
+ schema:
386
+ $ref: "#/components/schemas/ErrorResponse"
387
+ "401":
388
+ $ref: "#/components/responses/Unauthorized"
389
+ "404":
390
+ description: Parse or slide not found
391
+ content:
392
+ application/json:
393
+ schema:
394
+ $ref: "#/components/schemas/ErrorResponse"
395
+
396
+ /v1/parse/{parseId}/text:
397
+ get:
398
+ operationId: getParseAllText
399
+ tags: [parse]
400
+ summary: Get flattened text for all slides
401
+ parameters:
402
+ - $ref: "#/components/parameters/ParseId"
403
+ responses:
404
+ "200":
405
+ description: Text per slide
406
+ content:
407
+ application/json:
408
+ schema:
409
+ $ref: "#/components/schemas/ParseTextResponse"
410
+ "401":
411
+ $ref: "#/components/responses/Unauthorized"
412
+ "404":
413
+ description: Parse expired or unknown
414
+ content:
415
+ application/json:
416
+ schema:
417
+ $ref: "#/components/schemas/ErrorResponse"
418
+
419
+ components:
420
+ securitySchemes:
421
+ bearerAuth:
422
+ type: http
423
+ scheme: bearer
424
+ description: Clerk user or org API key (`ppx_…`), or session cookie from signed-in Studio user.
425
+
426
+ parameters:
427
+ ParseId:
428
+ name: parseId
429
+ in: path
430
+ required: true
431
+ schema:
432
+ type: string
433
+ description: Identifier returned by `POST /v1/parse` or `/v1/render`
434
+
435
+ responses:
436
+ Unauthorized:
437
+ description: Missing or invalid credentials
438
+ content:
439
+ application/json:
440
+ schema:
441
+ $ref: "#/components/schemas/ErrorResponse"
442
+ InternalError:
443
+ description: Server error
444
+ content:
445
+ application/json:
446
+ schema:
447
+ $ref: "#/components/schemas/ErrorResponse"
448
+
449
+ schemas:
450
+ ErrorResponse:
451
+ type: object
452
+ required: [error]
453
+ properties:
454
+ error:
455
+ $ref: "#/components/schemas/ApiError"
456
+
457
+ ApiError:
458
+ type: object
459
+ required: [code, message, requestId]
460
+ properties:
461
+ code:
462
+ type: string
463
+ enum:
464
+ - invalid_request
465
+ - unauthorized
466
+ - forbidden
467
+ - not_found
468
+ - rate_limited
469
+ - idempotency_conflict
470
+ - internal_error
471
+ message:
472
+ type: string
473
+ details:
474
+ type: object
475
+ additionalProperties: true
476
+ description: Optional structured details for the error code.
477
+ requestId:
478
+ type: string
479
+
480
+ OpfDocument:
481
+ type: object
482
+ description: OPF v1 document. See https://www.pptx.dev/docs/opf for field reference.
483
+ additionalProperties: true
484
+ properties:
485
+ $schema:
486
+ type: string
487
+ const: "https://openpresentation.org/schema/opf/v1"
488
+ meta:
489
+ type: object
490
+ additionalProperties: true
491
+ design:
492
+ type: object
493
+ additionalProperties: true
494
+ slides:
495
+ type: array
496
+ items:
497
+ type: object
498
+ additionalProperties: true
499
+
500
+ ValidationIssue:
501
+ type: object
502
+ required: [path, message]
503
+ properties:
504
+ path:
505
+ type: string
506
+ message:
507
+ type: string
508
+
509
+ ValidateResponse:
510
+ type: object
511
+ required: [valid, errors, warnings]
512
+ properties:
513
+ valid:
514
+ type: boolean
515
+ errors:
516
+ type: array
517
+ items:
518
+ $ref: "#/components/schemas/ValidationIssue"
519
+ warnings:
520
+ type: array
521
+ items:
522
+ $ref: "#/components/schemas/ValidationIssue"
523
+
524
+ PreviewWebSlide:
525
+ type: object
526
+ required: [index, slideNumber, id, layout, hidden, textRuns, speakerNotes]
527
+ properties:
528
+ index:
529
+ type: integer
530
+ minimum: 0
531
+ slideNumber:
532
+ type: integer
533
+ minimum: 1
534
+ id:
535
+ type: string
536
+ layout:
537
+ type: string
538
+ hidden:
539
+ type: boolean
540
+ textRuns:
541
+ type: array
542
+ items:
543
+ type: object
544
+ additionalProperties: true
545
+ speakerNotes:
546
+ type: string
547
+
548
+ PreviewRasterSlide:
549
+ type: object
550
+ required: [index, slideNumber, id, layout, svg]
551
+ properties:
552
+ index:
553
+ type: integer
554
+ minimum: 0
555
+ slideNumber:
556
+ type: integer
557
+ minimum: 1
558
+ id:
559
+ type: string
560
+ layout:
561
+ type: string
562
+ svg:
563
+ type: string
564
+ nullable: true
565
+
566
+ PreviewExportStub:
567
+ type: object
568
+ required: [status, message]
569
+ properties:
570
+ status:
571
+ type: string
572
+ example: accepted
573
+ message:
574
+ type: string
575
+
576
+ PreviewResponse:
577
+ type: object
578
+ required: [status, format, slideCount, dimensions, meta, design, slides, warnings]
579
+ properties:
580
+ status:
581
+ type: string
582
+ example: ok
583
+ format:
584
+ type: string
585
+ enum: [web, svg, png]
586
+ slideCount:
587
+ type: integer
588
+ minimum: 0
589
+ dimensions:
590
+ type: object
591
+ required: [widthPx, heightPx, preset]
592
+ properties:
593
+ widthPx:
594
+ type: integer
595
+ heightPx:
596
+ type: integer
597
+ preset:
598
+ type: string
599
+ meta:
600
+ type: object
601
+ required: [title]
602
+ properties:
603
+ title:
604
+ type: string
605
+ filename:
606
+ type: string
607
+ description: Suggested download filename including extension (resolved from meta.filename or title).
608
+ subtitle:
609
+ type: string
610
+ design:
611
+ type: object
612
+ properties:
613
+ theme:
614
+ type: string
615
+ export:
616
+ $ref: "#/components/schemas/PreviewExportStub"
617
+ slides:
618
+ type: array
619
+ items:
620
+ oneOf:
621
+ - $ref: "#/components/schemas/PreviewWebSlide"
622
+ - $ref: "#/components/schemas/PreviewRasterSlide"
623
+ warnings:
624
+ type: array
625
+ items:
626
+ $ref: "#/components/schemas/ValidationIssue"
627
+
628
+ ParseAcceptedResponse:
629
+ type: object
630
+ required: [parseId, slideCount, width, height]
631
+ properties:
632
+ parseId:
633
+ type: string
634
+ slideCount:
635
+ type: integer
636
+ width:
637
+ type: integer
638
+ description: Slide width in EMUs
639
+ height:
640
+ type: integer
641
+ description: Slide height in EMUs
642
+
643
+ GenerateAcceptedResponse:
644
+ type: object
645
+ required: [status, message, format, slideCount, validationWarnings]
646
+ properties:
647
+ status:
648
+ type: string
649
+ example: accepted
650
+ message:
651
+ type: string
652
+ format:
653
+ type: string
654
+ filename:
655
+ type: string
656
+ description: Suggested output filename including extension (from meta.filename or title slug).
657
+ slideCount:
658
+ type: integer
659
+ validationWarnings:
660
+ type: array
661
+ items:
662
+ type: string
663
+
664
+ TextRun:
665
+ type: object
666
+ additionalProperties: true
667
+ properties:
668
+ text:
669
+ type: string
670
+ bold:
671
+ type: boolean
672
+ italic:
673
+ type: boolean
674
+ underline:
675
+ type: boolean
676
+ fontSize:
677
+ type: number
678
+ fontFamily:
679
+ type: string
680
+ color:
681
+ type: string
682
+ alignment:
683
+ type: string
684
+
685
+ RenderWebResponse:
686
+ type: object
687
+ required: [parseId, format, dimensions, slideCount, slides, metadata, viewerUrl]
688
+ properties:
689
+ parseId:
690
+ type: string
691
+ format:
692
+ type: string
693
+ enum: [web]
694
+ dimensions:
695
+ type: object
696
+ additionalProperties: true
697
+ slideCount:
698
+ type: integer
699
+ slides:
700
+ type: array
701
+ items:
702
+ type: object
703
+ additionalProperties: true
704
+ metadata:
705
+ type: object
706
+ additionalProperties: true
707
+ viewerUrl:
708
+ type: string
709
+ description: Relative URL to the web viewer
710
+
711
+ RenderAcceptedResponse:
712
+ type: object
713
+ required: [status, message, parseId, format, slideCount, viewerUrl]
714
+ properties:
715
+ status:
716
+ type: string
717
+ example: accepted
718
+ message:
719
+ type: string
720
+ parseId:
721
+ type: string
722
+ format:
723
+ type: string
724
+ slideCount:
725
+ type: integer
726
+ viewerUrl:
727
+ type: string
728
+
729
+ ParseMetadataResponse:
730
+ type: object
731
+ required: [parseId, core, app, custom]
732
+ properties:
733
+ parseId:
734
+ type: string
735
+ core:
736
+ type: object
737
+ additionalProperties: true
738
+ app:
739
+ type: object
740
+ additionalProperties: true
741
+ custom:
742
+ type: object
743
+ additionalProperties: true
744
+
745
+ ParseSlideResponse:
746
+ type: object
747
+ required: [index, slideNumber, hidden, width, height, textRuns]
748
+ properties:
749
+ index:
750
+ type: integer
751
+ slideNumber:
752
+ type: integer
753
+ hidden:
754
+ type: boolean
755
+ width:
756
+ type: integer
757
+ height:
758
+ type: integer
759
+ textRuns:
760
+ type: array
761
+ items:
762
+ $ref: "#/components/schemas/TextRun"
763
+ speakerNotes:
764
+ type: string
765
+
766
+ ParseTextResponse:
767
+ type: object
768
+ required: [parseId, slides]
769
+ properties:
770
+ parseId:
771
+ type: string
772
+ slides:
773
+ type: array
774
+ items:
775
+ type: object
776
+ additionalProperties: true