@openpresentation/opf 0.18.4 → 0.20.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 (760) hide show
  1. package/README.md +18 -17
  2. package/dist/browser.js +17 -19
  3. package/dist/{catalog-refs-BSfGELpt.d.ts → catalog-refs-CSHevLn1.d.ts} +1 -1
  4. package/dist/{chunk-IM337HP5.js → chunk-2AGWO7RM.js} +4 -5
  5. package/dist/{chunk-WHHLGDCQ.js → chunk-2XJUXMBS.js} +1 -1
  6. package/dist/{chunk-JCOSZTOI.js → chunk-32MHL3B3.js} +7 -2
  7. package/dist/{chunk-ECP7QPGK.js → chunk-4FBXVST6.js} +6 -6
  8. package/dist/{chunk-KA3ZPFVT.js → chunk-7QUAOKS6.js} +96 -40
  9. package/dist/{chunk-FO3WGS4R.js → chunk-BDXJYO6R.js} +25 -16
  10. package/dist/chunk-BYEIFHWS.js +16 -0
  11. package/dist/{chunk-K5EG3UMS.js → chunk-JMYM44I4.js} +50 -20
  12. package/dist/{chunk-L5YACLWK.js → chunk-L6RRLN6Q.js} +2 -2
  13. package/dist/{chunk-GVOLSWAJ.js → chunk-NZDWCYDI.js} +5 -5
  14. package/dist/{chunk-R7KIASS4.js → chunk-P6LMWUXV.js} +1 -1
  15. package/dist/{chunk-MSFE2HUK.js → chunk-RFJ5TR3V.js} +16 -13
  16. package/dist/{chunk-PNINP5IF.js → chunk-UA5EROLC.js} +1 -1
  17. package/dist/{chunk-MBU42S5Y.js → chunk-UAXSW6VV.js} +1237 -293
  18. package/dist/chunk-UJSAR6GF.js +181 -0
  19. package/dist/{chunk-2PEWUUBR.js → chunk-VEHLQVGQ.js} +381 -314
  20. package/dist/{chunk-ZCFSDSUX.js → chunk-W7G5LSXI.js} +1 -1
  21. package/dist/{chunk-TRELE6I6.js → chunk-ZU5EQ23T.js} +1 -1
  22. package/dist/{composition-C-OoqvAr.d.ts → composition-MFjGwuN_.d.ts} +395 -99
  23. package/dist/composition.d.ts +2 -2
  24. package/dist/composition.js +1 -2
  25. package/dist/{conversion-BxZbBd_0.d.ts → conversion-DDd1mdIj.d.ts} +11 -11
  26. package/dist/conversion-WHN4D4WH.js +19 -0
  27. package/dist/convert.d.ts +3 -3
  28. package/dist/convert.js +7 -9
  29. package/dist/data.d.ts +1 -1
  30. package/dist/data.js +2 -3
  31. package/dist/{deck-report-DiDf_Vew.d.ts → deck-report-DldBcTHe.d.ts} +3 -3
  32. package/dist/deck.d.ts +6 -6
  33. package/dist/deck.js +10 -12
  34. package/dist/diff.js +5 -7
  35. package/dist/docs.js +34 -22
  36. package/dist/examples.d.ts +1 -1
  37. package/dist/examples.js +27210 -20994
  38. package/dist/format.js +2 -2
  39. package/dist/index.d.ts +22 -21
  40. package/dist/index.js +23 -26
  41. package/dist/markdown.d.ts +4 -4
  42. package/dist/markdown.js +7 -9
  43. package/dist/node-engine.d.ts +27 -9
  44. package/dist/node-engine.js +22 -23
  45. package/dist/{pagination-BaUjDrTz.d.ts → pagination-BKsZIEcA.d.ts} +3 -3
  46. package/dist/pagination.d.ts +3 -3
  47. package/dist/pagination.js +4 -6
  48. package/dist/patch.js +4 -6
  49. package/dist/{presentation-81rNihF0.d.ts → presentation-B_e2Djga.d.ts} +35 -19
  50. package/dist/repo-readme.js +1 -1
  51. package/dist/schemas.d.ts +2 -18
  52. package/dist/schemas.js +1 -1
  53. package/dist/spec/README.md +12 -19
  54. package/dist/spec/reference/engine-vocabularies.json +1 -1
  55. package/dist/spec/schemas/catalog-index.schema.json +3 -3
  56. package/dist/spec/schemas/catalog-manifest.schema.json +1 -1
  57. package/dist/spec/schemas/chart-type.schema.json +2 -2
  58. package/dist/spec/schemas/language.schema.json +1 -1
  59. package/dist/spec/schemas/layout-preview-index.schema.json +25 -11
  60. package/dist/spec/schemas/layout.schema.json +212 -272
  61. package/dist/spec/schemas/opf.schema.json +63 -18
  62. package/dist/spec/schemas/social-platform.schema.json +1 -1
  63. package/dist/spec/schemas/theme.schema.json +60 -0
  64. package/dist/spec-files.d.ts +2 -2
  65. package/dist/spec-files.js +1 -1
  66. package/dist/types.d.ts +115 -40
  67. package/dist/{validation-types-PbGDrNUr.d.ts → validation-types-DtN8X_HZ.d.ts} +2 -2
  68. package/dist/validator-1d29Z3YY.d.ts +73 -0
  69. package/dist/validator.d.ts +6 -60
  70. package/dist/validator.js +3 -5
  71. package/dist/yaml.d.ts +4 -4
  72. package/dist/yaml.js +7 -9
  73. package/package.json +8 -11
  74. package/dist/catalog-schemas-CinPh5WA.d.ts +0 -12
  75. package/dist/catalog.d.ts +0 -91
  76. package/dist/catalog.js +0 -3
  77. package/dist/chunk-HXHOZ7AH.js +0 -4937
  78. package/dist/chunk-SPFV27O5.js +0 -210
  79. package/dist/chunk-TRDXRRQK.js +0 -17
  80. package/dist/chunk-WCG3THTD.js +0 -23712
  81. package/dist/conversion-SHYVL7FC.js +0 -21
  82. package/dist/spec/catalogs/audiences/academic.json +0 -24
  83. package/dist/spec/catalogs/audiences/all-hands.json +0 -25
  84. package/dist/spec/catalogs/audiences/board.json +0 -24
  85. package/dist/spec/catalogs/audiences/candidates.json +0 -23
  86. package/dist/spec/catalogs/audiences/customer.json +0 -25
  87. package/dist/spec/catalogs/audiences/engineering-team.json +0 -23
  88. package/dist/spec/catalogs/audiences/executive.json +0 -24
  89. package/dist/spec/catalogs/audiences/general-public.json +0 -25
  90. package/dist/spec/catalogs/audiences/index.json +0 -105
  91. package/dist/spec/catalogs/audiences/internal-team.json +0 -25
  92. package/dist/spec/catalogs/audiences/investor.json +0 -25
  93. package/dist/spec/catalogs/audiences/marketing.json +0 -25
  94. package/dist/spec/catalogs/audiences/media.json +0 -24
  95. package/dist/spec/catalogs/audiences/partner.json +0 -25
  96. package/dist/spec/catalogs/audiences/regulatory.json +0 -25
  97. package/dist/spec/catalogs/audiences/sales.json +0 -25
  98. package/dist/spec/catalogs/audiences/technical.json +0 -25
  99. package/dist/spec/catalogs/chart-types/100pct-stacked-area.json +0 -21
  100. package/dist/spec/catalogs/chart-types/100pct-stacked-bar.json +0 -22
  101. package/dist/spec/catalogs/chart-types/100pct-stacked-column.json +0 -22
  102. package/dist/spec/catalogs/chart-types/area.json +0 -20
  103. package/dist/spec/catalogs/chart-types/bar.json +0 -22
  104. package/dist/spec/catalogs/chart-types/box-and-whisker.json +0 -21
  105. package/dist/spec/catalogs/chart-types/column.json +0 -22
  106. package/dist/spec/catalogs/chart-types/combo.json +0 -37
  107. package/dist/spec/catalogs/chart-types/doughnut.json +0 -20
  108. package/dist/spec/catalogs/chart-types/filled-radar.json +0 -21
  109. package/dist/spec/catalogs/chart-types/funnel.json +0 -21
  110. package/dist/spec/catalogs/chart-types/histogram.json +0 -21
  111. package/dist/spec/catalogs/chart-types/index.json +0 -171
  112. package/dist/spec/catalogs/chart-types/line-with-markers.json +0 -21
  113. package/dist/spec/catalogs/chart-types/line.json +0 -20
  114. package/dist/spec/catalogs/chart-types/pareto.json +0 -22
  115. package/dist/spec/catalogs/chart-types/pie.json +0 -20
  116. package/dist/spec/catalogs/chart-types/radar-with-markers.json +0 -21
  117. package/dist/spec/catalogs/chart-types/radar.json +0 -21
  118. package/dist/spec/catalogs/chart-types/scatter.json +0 -21
  119. package/dist/spec/catalogs/chart-types/stacked-area.json +0 -21
  120. package/dist/spec/catalogs/chart-types/stacked-bar.json +0 -22
  121. package/dist/spec/catalogs/chart-types/stacked-column.json +0 -22
  122. package/dist/spec/catalogs/chart-types/stacked-line-with-markers.json +0 -22
  123. package/dist/spec/catalogs/chart-types/stacked-line.json +0 -21
  124. package/dist/spec/catalogs/chart-types/treemap.json +0 -21
  125. package/dist/spec/catalogs/chart-types/waterfall.json +0 -21
  126. package/dist/spec/catalogs/chart-types/world.json +0 -21
  127. package/dist/spec/catalogs/color-schemes/black-and-white.json +0 -26
  128. package/dist/spec/catalogs/color-schemes/bold-red.json +0 -26
  129. package/dist/spec/catalogs/color-schemes/boost.json +0 -26
  130. package/dist/spec/catalogs/color-schemes/burnt-orange.json +0 -26
  131. package/dist/spec/catalogs/color-schemes/cool-horizon.json +0 -26
  132. package/dist/spec/catalogs/color-schemes/corporate-blue.json +0 -26
  133. package/dist/spec/catalogs/color-schemes/deep-purple.json +0 -26
  134. package/dist/spec/catalogs/color-schemes/forest-green.json +0 -26
  135. package/dist/spec/catalogs/color-schemes/golden-yellow.json +0 -26
  136. package/dist/spec/catalogs/color-schemes/index.json +0 -79
  137. package/dist/spec/catalogs/color-schemes/luxury.json +0 -26
  138. package/dist/spec/catalogs/color-schemes/pastel-red.json +0 -26
  139. package/dist/spec/catalogs/color-schemes/slate-gray.json +0 -26
  140. package/dist/spec/catalogs/color-schemes/steel-blue.json +0 -26
  141. package/dist/spec/catalogs/color-schemes/vibes.json +0 -26
  142. package/dist/spec/catalogs/font-schemes/angsana-new.json +0 -15
  143. package/dist/spec/catalogs/font-schemes/aparajita.json +0 -16
  144. package/dist/spec/catalogs/font-schemes/aptos.json +0 -13
  145. package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +0 -15
  146. package/dist/spec/catalogs/font-schemes/arial.json +0 -13
  147. package/dist/spec/catalogs/font-schemes/batang.json +0 -15
  148. package/dist/spec/catalogs/font-schemes/bookman.json +0 -13
  149. package/dist/spec/catalogs/font-schemes/calibri.json +0 -13
  150. package/dist/spec/catalogs/font-schemes/century-schoolbook.json +0 -13
  151. package/dist/spec/catalogs/font-schemes/consolas.json +0 -14
  152. package/dist/spec/catalogs/font-schemes/constantia.json +0 -13
  153. package/dist/spec/catalogs/font-schemes/courier-new.json +0 -14
  154. package/dist/spec/catalogs/font-schemes/daunpenh.json +0 -15
  155. package/dist/spec/catalogs/font-schemes/david.json +0 -15
  156. package/dist/spec/catalogs/font-schemes/dilleniaupc.json +0 -15
  157. package/dist/spec/catalogs/font-schemes/fangsong.json +0 -15
  158. package/dist/spec/catalogs/font-schemes/garamond.json +0 -13
  159. package/dist/spec/catalogs/font-schemes/gautami.json +0 -15
  160. package/dist/spec/catalogs/font-schemes/georgia.json +0 -13
  161. package/dist/spec/catalogs/font-schemes/gisha.json +0 -16
  162. package/dist/spec/catalogs/font-schemes/grandview.json +0 -13
  163. package/dist/spec/catalogs/font-schemes/gungsuh.json +0 -15
  164. package/dist/spec/catalogs/font-schemes/impact.json +0 -13
  165. package/dist/spec/catalogs/font-schemes/index.json +0 -454
  166. package/dist/spec/catalogs/font-schemes/kalinga.json +0 -15
  167. package/dist/spec/catalogs/font-schemes/kartika.json +0 -15
  168. package/dist/spec/catalogs/font-schemes/khmer-ui.json +0 -15
  169. package/dist/spec/catalogs/font-schemes/latha.json +0 -15
  170. package/dist/spec/catalogs/font-schemes/lucida-sans.json +0 -13
  171. package/dist/spec/catalogs/font-schemes/malgun-gothic.json +0 -15
  172. package/dist/spec/catalogs/font-schemes/mangal.json +0 -17
  173. package/dist/spec/catalogs/font-schemes/meiryo.json +0 -15
  174. package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +0 -15
  175. package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +0 -18
  176. package/dist/spec/catalogs/font-schemes/mingliu.json +0 -15
  177. package/dist/spec/catalogs/font-schemes/miriam.json +0 -15
  178. package/dist/spec/catalogs/font-schemes/montserrat.json +0 -13
  179. package/dist/spec/catalogs/font-schemes/ms-mincho.json +0 -15
  180. package/dist/spec/catalogs/font-schemes/nirmala-ui.json +0 -15
  181. package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +0 -15
  182. package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +0 -16
  183. package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +0 -17
  184. package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +0 -15
  185. package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +0 -16
  186. package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +0 -16
  187. package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +0 -15
  188. package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +0 -15
  189. package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +0 -15
  190. package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +0 -15
  191. package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +0 -15
  192. package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +0 -15
  193. package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +0 -15
  194. package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +0 -15
  195. package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +0 -15
  196. package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +0 -15
  197. package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +0 -15
  198. package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +0 -15
  199. package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +0 -18
  200. package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +0 -15
  201. package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +0 -15
  202. package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +0 -15
  203. package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +0 -15
  204. package/dist/spec/catalogs/font-schemes/noto-sans.json +0 -18
  205. package/dist/spec/catalogs/font-schemes/nyala.json +0 -15
  206. package/dist/spec/catalogs/font-schemes/open-sans.json +0 -13
  207. package/dist/spec/catalogs/font-schemes/pmingliu.json +0 -15
  208. package/dist/spec/catalogs/font-schemes/poppins.json +0 -13
  209. package/dist/spec/catalogs/font-schemes/pt-serif.json +0 -13
  210. package/dist/spec/catalogs/font-schemes/raavi.json +0 -15
  211. package/dist/spec/catalogs/font-schemes/raleway.json +0 -13
  212. package/dist/spec/catalogs/font-schemes/roboto.json +0 -13
  213. package/dist/spec/catalogs/font-schemes/rockwell.json +0 -13
  214. package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +0 -17
  215. package/dist/spec/catalogs/font-schemes/seaford.json +0 -13
  216. package/dist/spec/catalogs/font-schemes/segoe-ui-light.json +0 -13
  217. package/dist/spec/catalogs/font-schemes/segoe-ui.json +0 -13
  218. package/dist/spec/catalogs/font-schemes/shonar-bangla.json +0 -16
  219. package/dist/spec/catalogs/font-schemes/shruti.json +0 -15
  220. package/dist/spec/catalogs/font-schemes/simsun.json +0 -15
  221. package/dist/spec/catalogs/font-schemes/skeena.json +0 -13
  222. package/dist/spec/catalogs/font-schemes/sylfaen.json +0 -16
  223. package/dist/spec/catalogs/font-schemes/tahoma.json +0 -13
  224. package/dist/spec/catalogs/font-schemes/tenorite.json +0 -13
  225. package/dist/spec/catalogs/font-schemes/times-new-roman.json +0 -13
  226. package/dist/spec/catalogs/font-schemes/traditional-arabic.json +0 -17
  227. package/dist/spec/catalogs/font-schemes/trebuchet-ms.json +0 -13
  228. package/dist/spec/catalogs/font-schemes/tunga.json +0 -15
  229. package/dist/spec/catalogs/font-schemes/verdana.json +0 -13
  230. package/dist/spec/catalogs/font-schemes/vrinda.json +0 -15
  231. package/dist/spec/catalogs/font-schemes/yu-gothic.json +0 -15
  232. package/dist/spec/catalogs/languages/afrikaans.json +0 -12
  233. package/dist/spec/catalogs/languages/albanian.json +0 -12
  234. package/dist/spec/catalogs/languages/amharic.json +0 -12
  235. package/dist/spec/catalogs/languages/arabic.json +0 -12
  236. package/dist/spec/catalogs/languages/armenian.json +0 -12
  237. package/dist/spec/catalogs/languages/aymara.json +0 -12
  238. package/dist/spec/catalogs/languages/azerbaijani.json +0 -12
  239. package/dist/spec/catalogs/languages/bengali.json +0 -12
  240. package/dist/spec/catalogs/languages/berber-latin.json +0 -12
  241. package/dist/spec/catalogs/languages/bosnian-latin.json +0 -12
  242. package/dist/spec/catalogs/languages/bulgarian.json +0 -12
  243. package/dist/spec/catalogs/languages/catalan.json +0 -12
  244. package/dist/spec/catalogs/languages/cebuano.json +0 -12
  245. package/dist/spec/catalogs/languages/chinese-simplified.json +0 -12
  246. package/dist/spec/catalogs/languages/chinese-traditional.json +0 -12
  247. package/dist/spec/catalogs/languages/chittagonian.json +0 -12
  248. package/dist/spec/catalogs/languages/croatian.json +0 -12
  249. package/dist/spec/catalogs/languages/czech.json +0 -12
  250. package/dist/spec/catalogs/languages/danish.json +0 -12
  251. package/dist/spec/catalogs/languages/dutch.json +0 -12
  252. package/dist/spec/catalogs/languages/english-au.json +0 -12
  253. package/dist/spec/catalogs/languages/english-ca.json +0 -12
  254. package/dist/spec/catalogs/languages/english-gb.json +0 -12
  255. package/dist/spec/catalogs/languages/english-in.json +0 -12
  256. package/dist/spec/catalogs/languages/english-us.json +0 -12
  257. package/dist/spec/catalogs/languages/english.json +0 -12
  258. package/dist/spec/catalogs/languages/estonian.json +0 -12
  259. package/dist/spec/catalogs/languages/filipino.json +0 -12
  260. package/dist/spec/catalogs/languages/finnish.json +0 -12
  261. package/dist/spec/catalogs/languages/french.json +0 -12
  262. package/dist/spec/catalogs/languages/fulfulde.json +0 -12
  263. package/dist/spec/catalogs/languages/galician.json +0 -12
  264. package/dist/spec/catalogs/languages/georgian.json +0 -12
  265. package/dist/spec/catalogs/languages/german.json +0 -12
  266. package/dist/spec/catalogs/languages/greek.json +0 -12
  267. package/dist/spec/catalogs/languages/gujarati.json +0 -12
  268. package/dist/spec/catalogs/languages/hausa.json +0 -12
  269. package/dist/spec/catalogs/languages/hebrew.json +0 -12
  270. package/dist/spec/catalogs/languages/hindi.json +0 -12
  271. package/dist/spec/catalogs/languages/hungarian.json +0 -12
  272. package/dist/spec/catalogs/languages/igbo.json +0 -12
  273. package/dist/spec/catalogs/languages/index.json +0 -567
  274. package/dist/spec/catalogs/languages/indonesian.json +0 -12
  275. package/dist/spec/catalogs/languages/italian.json +0 -12
  276. package/dist/spec/catalogs/languages/japanese.json +0 -12
  277. package/dist/spec/catalogs/languages/kannada.json +0 -12
  278. package/dist/spec/catalogs/languages/kazakh.json +0 -12
  279. package/dist/spec/catalogs/languages/khmer.json +0 -12
  280. package/dist/spec/catalogs/languages/kinyarwanda.json +0 -12
  281. package/dist/spec/catalogs/languages/korean.json +0 -12
  282. package/dist/spec/catalogs/languages/kurmanji.json +0 -12
  283. package/dist/spec/catalogs/languages/latvian.json +0 -12
  284. package/dist/spec/catalogs/languages/lithuanian.json +0 -12
  285. package/dist/spec/catalogs/languages/macedonian.json +0 -12
  286. package/dist/spec/catalogs/languages/malagasy.json +0 -12
  287. package/dist/spec/catalogs/languages/malay.json +0 -12
  288. package/dist/spec/catalogs/languages/malayalam.json +0 -12
  289. package/dist/spec/catalogs/languages/maori.json +0 -12
  290. package/dist/spec/catalogs/languages/marathi.json +0 -12
  291. package/dist/spec/catalogs/languages/mongolian.json +0 -12
  292. package/dist/spec/catalogs/languages/nepali.json +0 -12
  293. package/dist/spec/catalogs/languages/norwegian.json +0 -12
  294. package/dist/spec/catalogs/languages/odia.json +0 -12
  295. package/dist/spec/catalogs/languages/oromo.json +0 -12
  296. package/dist/spec/catalogs/languages/pashto.json +0 -12
  297. package/dist/spec/catalogs/languages/persian.json +0 -12
  298. package/dist/spec/catalogs/languages/polish.json +0 -12
  299. package/dist/spec/catalogs/languages/portuguese.json +0 -12
  300. package/dist/spec/catalogs/languages/punjabi-gurmukhi.json +0 -12
  301. package/dist/spec/catalogs/languages/punjabi-shahmukhi.json +0 -12
  302. package/dist/spec/catalogs/languages/romanian.json +0 -12
  303. package/dist/spec/catalogs/languages/russian.json +0 -12
  304. package/dist/spec/catalogs/languages/serbian-cyrillic.json +0 -12
  305. package/dist/spec/catalogs/languages/serbian-latin.json +0 -12
  306. package/dist/spec/catalogs/languages/shona.json +0 -12
  307. package/dist/spec/catalogs/languages/slovak.json +0 -12
  308. package/dist/spec/catalogs/languages/slovenian.json +0 -12
  309. package/dist/spec/catalogs/languages/somali.json +0 -12
  310. package/dist/spec/catalogs/languages/spanish.json +0 -12
  311. package/dist/spec/catalogs/languages/swahili.json +0 -12
  312. package/dist/spec/catalogs/languages/swedish.json +0 -12
  313. package/dist/spec/catalogs/languages/tagalog.json +0 -12
  314. package/dist/spec/catalogs/languages/tajik.json +0 -12
  315. package/dist/spec/catalogs/languages/tamil.json +0 -12
  316. package/dist/spec/catalogs/languages/telugu.json +0 -12
  317. package/dist/spec/catalogs/languages/thai.json +0 -12
  318. package/dist/spec/catalogs/languages/turkish.json +0 -12
  319. package/dist/spec/catalogs/languages/ukrainian.json +0 -12
  320. package/dist/spec/catalogs/languages/urdu.json +0 -12
  321. package/dist/spec/catalogs/languages/uzbek-latin.json +0 -12
  322. package/dist/spec/catalogs/languages/vietnamese-quoc-ngu.json +0 -12
  323. package/dist/spec/catalogs/languages/xhosa.json +0 -12
  324. package/dist/spec/catalogs/languages/yoruba.json +0 -12
  325. package/dist/spec/catalogs/languages/zulu.json +0 -12
  326. package/dist/spec/catalogs/layouts/action-plan.json +0 -29
  327. package/dist/spec/catalogs/layouts/agenda.json +0 -28
  328. package/dist/spec/catalogs/layouts/appendix-index.json +0 -30
  329. package/dist/spec/catalogs/layouts/architecture-stack.json +0 -29
  330. package/dist/spec/catalogs/layouts/assumptions-dependencies.json +0 -29
  331. package/dist/spec/catalogs/layouts/before-after.json +0 -35
  332. package/dist/spec/catalogs/layouts/benchmark-target-table.json +0 -29
  333. package/dist/spec/catalogs/layouts/blank.json +0 -16
  334. package/dist/spec/catalogs/layouts/bullet-list.json +0 -32
  335. package/dist/spec/catalogs/layouts/business-model-canvas.json +0 -94
  336. package/dist/spec/catalogs/layouts/capability-map.json +0 -80
  337. package/dist/spec/catalogs/layouts/case-study.json +0 -29
  338. package/dist/spec/catalogs/layouts/chapter-recap.json +0 -28
  339. package/dist/spec/catalogs/layouts/chart-1x-title-center.json +0 -30
  340. package/dist/spec/catalogs/layouts/chart-1x.json +0 -34
  341. package/dist/spec/catalogs/layouts/chart-2x-title-center.json +0 -36
  342. package/dist/spec/catalogs/layouts/chart-2x-vertical-title-left.json +0 -37
  343. package/dist/spec/catalogs/layouts/chart-2x.json +0 -65
  344. package/dist/spec/catalogs/layouts/chart-3x-bottom-vertical-title-left.json +0 -52
  345. package/dist/spec/catalogs/layouts/chart-3x-left-title-center.json +0 -51
  346. package/dist/spec/catalogs/layouts/chart-3x-left.json +0 -46
  347. package/dist/spec/catalogs/layouts/chart-3x-right-title-center.json +0 -51
  348. package/dist/spec/catalogs/layouts/chart-3x-right.json +0 -46
  349. package/dist/spec/catalogs/layouts/chart-3x-title-center.json +0 -39
  350. package/dist/spec/catalogs/layouts/chart-3x-top-vertical-title-left.json +0 -52
  351. package/dist/spec/catalogs/layouts/chart-3x.json +0 -83
  352. package/dist/spec/catalogs/layouts/circular-lifecycle.json +0 -29
  353. package/dist/spec/catalogs/layouts/code-1x.json +0 -29
  354. package/dist/spec/catalogs/layouts/comparison.json +0 -35
  355. package/dist/spec/catalogs/layouts/competitive-landscape.json +0 -30
  356. package/dist/spec/catalogs/layouts/customer-journey.json +0 -30
  357. package/dist/spec/catalogs/layouts/customer-logos.json +0 -32
  358. package/dist/spec/catalogs/layouts/dashboard.json +0 -67
  359. package/dist/spec/catalogs/layouts/data-visualization.json +0 -39
  360. package/dist/spec/catalogs/layouts/decision-tree.json +0 -30
  361. package/dist/spec/catalogs/layouts/detailed-data-table.json +0 -35
  362. package/dist/spec/catalogs/layouts/ecosystem-map.json +0 -30
  363. package/dist/spec/catalogs/layouts/executive-decision.json +0 -32
  364. package/dist/spec/catalogs/layouts/executive-summary.json +0 -32
  365. package/dist/spec/catalogs/layouts/extract/canonical.json +0 -575
  366. package/dist/spec/catalogs/layouts/faq.json +0 -29
  367. package/dist/spec/catalogs/layouts/feature-comparison-matrix.json +0 -29
  368. package/dist/spec/catalogs/layouts/forecast-scenario.json +0 -39
  369. package/dist/spec/catalogs/layouts/funnel-pyramid.json +0 -32
  370. package/dist/spec/catalogs/layouts/gantt-project-plan.json +0 -32
  371. package/dist/spec/catalogs/layouts/geographic-map.json +0 -30
  372. package/dist/spec/catalogs/layouts/heatmap-cohort.json +0 -32
  373. package/dist/spec/catalogs/layouts/hub-and-spoke.json +0 -29
  374. package/dist/spec/catalogs/layouts/icon-grid.json +0 -30
  375. package/dist/spec/catalogs/layouts/image-1x-crop-title-center.json +0 -32
  376. package/dist/spec/catalogs/layouts/image-1x-crop-title-left.json +0 -32
  377. package/dist/spec/catalogs/layouts/image-1x-crop.json +0 -27
  378. package/dist/spec/catalogs/layouts/image-1x-fit-title-center.json +0 -32
  379. package/dist/spec/catalogs/layouts/image-1x.json +0 -32
  380. package/dist/spec/catalogs/layouts/image-2x-crop-title-center.json +0 -38
  381. package/dist/spec/catalogs/layouts/image-2x-crop-vertical-title-left.json +0 -39
  382. package/dist/spec/catalogs/layouts/image-2x-crop-vertical.json +0 -34
  383. package/dist/spec/catalogs/layouts/image-2x-crop.json +0 -33
  384. package/dist/spec/catalogs/layouts/image-2x-fit-title-center.json +0 -38
  385. package/dist/spec/catalogs/layouts/image-2x-fit-vertical-title-left.json +0 -39
  386. package/dist/spec/catalogs/layouts/image-2x-fit-vertical.json +0 -34
  387. package/dist/spec/catalogs/layouts/image-2x.json +0 -63
  388. package/dist/spec/catalogs/layouts/image-3x-crop-title-center.json +0 -41
  389. package/dist/spec/catalogs/layouts/image-3x-crop-vertical-title-left.json +0 -42
  390. package/dist/spec/catalogs/layouts/image-3x-crop-vertical.json +0 -37
  391. package/dist/spec/catalogs/layouts/image-3x-crop.json +0 -36
  392. package/dist/spec/catalogs/layouts/image-3x-fit-title-center.json +0 -41
  393. package/dist/spec/catalogs/layouts/image-3x-fit-vertical-title-left.json +0 -42
  394. package/dist/spec/catalogs/layouts/image-3x-fit-vertical.json +0 -37
  395. package/dist/spec/catalogs/layouts/image-3x-fit.json +0 -36
  396. package/dist/spec/catalogs/layouts/image-3x.json +0 -81
  397. package/dist/spec/catalogs/layouts/image-focus.json +0 -30
  398. package/dist/spec/catalogs/layouts/image-only-1x-crop-title-center.json +0 -31
  399. package/dist/spec/catalogs/layouts/image-only-1x-fit-title-center.json +0 -31
  400. package/dist/spec/catalogs/layouts/image-only-2x-crop-title-center.json +0 -37
  401. package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical-title-left.json +0 -38
  402. package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical.json +0 -33
  403. package/dist/spec/catalogs/layouts/image-only-2x-fit-title-center.json +0 -37
  404. package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical-title-left.json +0 -38
  405. package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical.json +0 -33
  406. package/dist/spec/catalogs/layouts/image-only-3x-crop-title-center.json +0 -40
  407. package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical-title-left.json +0 -41
  408. package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical.json +0 -36
  409. package/dist/spec/catalogs/layouts/image-only-3x-crop.json +0 -35
  410. package/dist/spec/catalogs/layouts/image-only-3x-fit-title-center.json +0 -40
  411. package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical-title-left.json +0 -41
  412. package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical.json +0 -36
  413. package/dist/spec/catalogs/layouts/image-only-3x-fit.json +0 -35
  414. package/dist/spec/catalogs/layouts/index.json +0 -1399
  415. package/dist/spec/catalogs/layouts/key-takeaway.json +0 -25
  416. package/dist/spec/catalogs/layouts/kpi-scorecard.json +0 -83
  417. package/dist/spec/catalogs/layouts/list-1x-box-title-center.json +0 -32
  418. package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-center.json +0 -33
  419. package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-left.json +0 -33
  420. package/dist/spec/catalogs/layouts/list-1x-box-vertical.json +0 -28
  421. package/dist/spec/catalogs/layouts/list-1x-box.json +0 -27
  422. package/dist/spec/catalogs/layouts/list-1x-itemimage-title-center.json +0 -32
  423. package/dist/spec/catalogs/layouts/list-1x-itemimage-vertical-title-center.json +0 -33
  424. package/dist/spec/catalogs/layouts/list-1x-title-center.json +0 -31
  425. package/dist/spec/catalogs/layouts/list-1x-vertical-title-center.json +0 -32
  426. package/dist/spec/catalogs/layouts/list-1x.json +0 -29
  427. package/dist/spec/catalogs/layouts/list-2x-box-title-center.json +0 -38
  428. package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-center.json +0 -39
  429. package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-left.json +0 -39
  430. package/dist/spec/catalogs/layouts/list-2x-box-vertical.json +0 -34
  431. package/dist/spec/catalogs/layouts/list-2x-box.json +0 -33
  432. package/dist/spec/catalogs/layouts/list-2x-itemimage-title-center.json +0 -38
  433. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-center.json +0 -39
  434. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-left.json +0 -39
  435. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical.json +0 -34
  436. package/dist/spec/catalogs/layouts/list-2x-title-center.json +0 -37
  437. package/dist/spec/catalogs/layouts/list-2x-vertical-title-center.json +0 -38
  438. package/dist/spec/catalogs/layouts/list-2x-vertical-title-left.json +0 -38
  439. package/dist/spec/catalogs/layouts/list-2x-vertical.json +0 -33
  440. package/dist/spec/catalogs/layouts/list-2x.json +0 -35
  441. package/dist/spec/catalogs/layouts/list-3x-box-title-center.json +0 -41
  442. package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-center.json +0 -42
  443. package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-left.json +0 -42
  444. package/dist/spec/catalogs/layouts/list-3x-box-vertical.json +0 -37
  445. package/dist/spec/catalogs/layouts/list-3x-box.json +0 -36
  446. package/dist/spec/catalogs/layouts/list-3x-itemimage-title-center.json +0 -41
  447. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-center.json +0 -42
  448. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-left.json +0 -42
  449. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical.json +0 -37
  450. package/dist/spec/catalogs/layouts/list-3x-itemimage.json +0 -36
  451. package/dist/spec/catalogs/layouts/list-3x-title-center.json +0 -40
  452. package/dist/spec/catalogs/layouts/list-3x-vertical-title-center.json +0 -41
  453. package/dist/spec/catalogs/layouts/list-3x-vertical-title-left.json +0 -41
  454. package/dist/spec/catalogs/layouts/list-3x-vertical.json +0 -36
  455. package/dist/spec/catalogs/layouts/list-3x.json +0 -38
  456. package/dist/spec/catalogs/layouts/list-4x-box-title-center.json +0 -45
  457. package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-center.json +0 -45
  458. package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-left.json +0 -45
  459. package/dist/spec/catalogs/layouts/list-4x-box-vertical.json +0 -40
  460. package/dist/spec/catalogs/layouts/list-4x-box.json +0 -40
  461. package/dist/spec/catalogs/layouts/list-4x-itemimage-title-center.json +0 -45
  462. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-center.json +0 -45
  463. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-left.json +0 -45
  464. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical.json +0 -40
  465. package/dist/spec/catalogs/layouts/list-4x-title-center.json +0 -44
  466. package/dist/spec/catalogs/layouts/list-4x-vertical-title-center.json +0 -44
  467. package/dist/spec/catalogs/layouts/list-4x-vertical-title-left.json +0 -44
  468. package/dist/spec/catalogs/layouts/list-4x-vertical.json +0 -39
  469. package/dist/spec/catalogs/layouts/list-4x.json +0 -42
  470. package/dist/spec/catalogs/layouts/list-5x-box-title-center.json +0 -48
  471. package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-center.json +0 -50
  472. package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-left.json +0 -50
  473. package/dist/spec/catalogs/layouts/list-5x-box-vertical.json +0 -45
  474. package/dist/spec/catalogs/layouts/list-5x-box.json +0 -43
  475. package/dist/spec/catalogs/layouts/list-5x-itemimage-title-center.json +0 -48
  476. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-center.json +0 -48
  477. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-left.json +0 -48
  478. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical.json +0 -43
  479. package/dist/spec/catalogs/layouts/list-5x-title-center.json +0 -47
  480. package/dist/spec/catalogs/layouts/list-5x-vertical-title-center.json +0 -47
  481. package/dist/spec/catalogs/layouts/list-5x-vertical-title-left.json +0 -47
  482. package/dist/spec/catalogs/layouts/list-5x-vertical.json +0 -42
  483. package/dist/spec/catalogs/layouts/list-5x.json +0 -45
  484. package/dist/spec/catalogs/layouts/list-6x-box-title-center.json +0 -51
  485. package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-center.json +0 -53
  486. package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-left.json +0 -53
  487. package/dist/spec/catalogs/layouts/list-6x-box-vertical.json +0 -48
  488. package/dist/spec/catalogs/layouts/list-6x-box.json +0 -46
  489. package/dist/spec/catalogs/layouts/list-6x-itemimage-title-center.json +0 -51
  490. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-center.json +0 -51
  491. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-left.json +0 -51
  492. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical.json +0 -46
  493. package/dist/spec/catalogs/layouts/list-6x-title-center.json +0 -50
  494. package/dist/spec/catalogs/layouts/list-6x-vertical-title-center.json +0 -50
  495. package/dist/spec/catalogs/layouts/list-6x-vertical-title-left.json +0 -50
  496. package/dist/spec/catalogs/layouts/list-6x-vertical.json +0 -45
  497. package/dist/spec/catalogs/layouts/list-6x.json +0 -48
  498. package/dist/spec/catalogs/layouts/logic-tree.json +0 -98
  499. package/dist/spec/catalogs/layouts/market-size.json +0 -53
  500. package/dist/spec/catalogs/layouts/matrix-quadrant.json +0 -42
  501. package/dist/spec/catalogs/layouts/media-1x.json +0 -29
  502. package/dist/spec/catalogs/layouts/network-dependency-map.json +0 -30
  503. package/dist/spec/catalogs/layouts/number-1x-box-title-center.json +0 -30
  504. package/dist/spec/catalogs/layouts/number-1x-box.json +0 -25
  505. package/dist/spec/catalogs/layouts/number-1x-title-center.json +0 -29
  506. package/dist/spec/catalogs/layouts/number-1x.json +0 -28
  507. package/dist/spec/catalogs/layouts/number-2x-box-title-center.json +0 -36
  508. package/dist/spec/catalogs/layouts/number-2x-box.json +0 -31
  509. package/dist/spec/catalogs/layouts/number-2x-title-center.json +0 -35
  510. package/dist/spec/catalogs/layouts/number-2x.json +0 -34
  511. package/dist/spec/catalogs/layouts/number-3x-box-title-center.json +0 -39
  512. package/dist/spec/catalogs/layouts/number-3x-box.json +0 -34
  513. package/dist/spec/catalogs/layouts/number-3x-title-center.json +0 -38
  514. package/dist/spec/catalogs/layouts/number-3x.json +0 -37
  515. package/dist/spec/catalogs/layouts/number-4x-box-title-center.json +0 -43
  516. package/dist/spec/catalogs/layouts/number-4x-box.json +0 -38
  517. package/dist/spec/catalogs/layouts/number-4x-title-center.json +0 -42
  518. package/dist/spec/catalogs/layouts/number-4x.json +0 -41
  519. package/dist/spec/catalogs/layouts/number-5x-box-title-center.json +0 -46
  520. package/dist/spec/catalogs/layouts/number-5x-box.json +0 -41
  521. package/dist/spec/catalogs/layouts/number-5x-title-center.json +0 -45
  522. package/dist/spec/catalogs/layouts/number-5x.json +0 -44
  523. package/dist/spec/catalogs/layouts/number-6x-box-title-center.json +0 -49
  524. package/dist/spec/catalogs/layouts/number-6x-box.json +0 -44
  525. package/dist/spec/catalogs/layouts/number-6x-title-center.json +0 -48
  526. package/dist/spec/catalogs/layouts/number-6x.json +0 -47
  527. package/dist/spec/catalogs/layouts/one-column-explainer.json +0 -29
  528. package/dist/spec/catalogs/layouts/org-chart.json +0 -86
  529. package/dist/spec/catalogs/layouts/persona-grid.json +0 -30
  530. package/dist/spec/catalogs/layouts/photo-grid.json +0 -43
  531. package/dist/spec/catalogs/layouts/pricing-table.json +0 -29
  532. package/dist/spec/catalogs/layouts/process-flow.json +0 -29
  533. package/dist/spec/catalogs/layouts/product-feature.json +0 -30
  534. package/dist/spec/catalogs/layouts/pros-cons.json +0 -35
  535. package/dist/spec/catalogs/layouts/qa-discussion.json +0 -30
  536. package/dist/spec/catalogs/layouts/quote-1x.json +0 -23
  537. package/dist/spec/catalogs/layouts/quote-highlight.json +0 -29
  538. package/dist/spec/catalogs/layouts/raci-matrix.json +0 -29
  539. package/dist/spec/catalogs/layouts/risk-heatmap.json +0 -29
  540. package/dist/spec/catalogs/layouts/roadmap.json +0 -29
  541. package/dist/spec/catalogs/layouts/screenshot-walkthrough.json +0 -30
  542. package/dist/spec/catalogs/layouts/section-divider.json +0 -28
  543. package/dist/spec/catalogs/layouts/single-message-statement.json +0 -25
  544. package/dist/spec/catalogs/layouts/stats-metrics.json +0 -39
  545. package/dist/spec/catalogs/layouts/status-rag.json +0 -29
  546. package/dist/spec/catalogs/layouts/swimlane-process.json +0 -30
  547. package/dist/spec/catalogs/layouts/swot-analysis.json +0 -42
  548. package/dist/spec/catalogs/layouts/table-1x.json +0 -29
  549. package/dist/spec/catalogs/layouts/team-bio.json +0 -30
  550. package/dist/spec/catalogs/layouts/testimonial-grid.json +0 -38
  551. package/dist/spec/catalogs/layouts/text-1x-box-title-center.json +0 -31
  552. package/dist/spec/catalogs/layouts/text-1x-box-title-left.json +0 -31
  553. package/dist/spec/catalogs/layouts/text-1x-center-box-title-center.json +0 -31
  554. package/dist/spec/catalogs/layouts/text-1x-center-box-title-left.json +0 -31
  555. package/dist/spec/catalogs/layouts/text-1x-center-box.json +0 -26
  556. package/dist/spec/catalogs/layouts/text-1x-center-title-center.json +0 -30
  557. package/dist/spec/catalogs/layouts/text-1x-center-title-left.json +0 -30
  558. package/dist/spec/catalogs/layouts/text-1x-center.json +0 -25
  559. package/dist/spec/catalogs/layouts/text-1x-left-box.json +0 -26
  560. package/dist/spec/catalogs/layouts/text-1x-title-center.json +0 -30
  561. package/dist/spec/catalogs/layouts/text-1x.json +0 -23
  562. package/dist/spec/catalogs/layouts/text-2x-box-title-center.json +0 -37
  563. package/dist/spec/catalogs/layouts/text-2x-box-vertical-title-left.json +0 -37
  564. package/dist/spec/catalogs/layouts/text-2x-center-box-title-center.json +0 -37
  565. package/dist/spec/catalogs/layouts/text-2x-center-box-vertical-title-left.json +0 -37
  566. package/dist/spec/catalogs/layouts/text-2x-center-box.json +0 -32
  567. package/dist/spec/catalogs/layouts/text-2x-center-title-center.json +0 -36
  568. package/dist/spec/catalogs/layouts/text-2x-center-vertical-title-left.json +0 -36
  569. package/dist/spec/catalogs/layouts/text-2x-center.json +0 -31
  570. package/dist/spec/catalogs/layouts/text-2x-left-box.json +0 -32
  571. package/dist/spec/catalogs/layouts/text-2x-title-center.json +0 -36
  572. package/dist/spec/catalogs/layouts/text-2x-vertical-title-left.json +0 -36
  573. package/dist/spec/catalogs/layouts/text-2x.json +0 -29
  574. package/dist/spec/catalogs/layouts/text-3x-box-title-center.json +0 -40
  575. package/dist/spec/catalogs/layouts/text-3x-box-vertical-title-left.json +0 -41
  576. package/dist/spec/catalogs/layouts/text-3x-center-box-title-center.json +0 -40
  577. package/dist/spec/catalogs/layouts/text-3x-center-box-vertical-title-left.json +0 -41
  578. package/dist/spec/catalogs/layouts/text-3x-center-box.json +0 -35
  579. package/dist/spec/catalogs/layouts/text-3x-center-title-center.json +0 -39
  580. package/dist/spec/catalogs/layouts/text-3x-center-vertical-title-left.json +0 -40
  581. package/dist/spec/catalogs/layouts/text-3x-center.json +0 -34
  582. package/dist/spec/catalogs/layouts/text-3x-left-box.json +0 -35
  583. package/dist/spec/catalogs/layouts/text-3x-left.json +0 -34
  584. package/dist/spec/catalogs/layouts/text-3x-title-center.json +0 -39
  585. package/dist/spec/catalogs/layouts/text-3x-vertical-title-left.json +0 -40
  586. package/dist/spec/catalogs/layouts/text-3x.json +0 -32
  587. package/dist/spec/catalogs/layouts/thank-you-cta.json +0 -28
  588. package/dist/spec/catalogs/layouts/three-column.json +0 -39
  589. package/dist/spec/catalogs/layouts/timeline-1x.json +0 -23
  590. package/dist/spec/catalogs/layouts/timeline.json +0 -32
  591. package/dist/spec/catalogs/layouts/title-center-box.json +0 -27
  592. package/dist/spec/catalogs/layouts/title-center-image-bottom.json +0 -34
  593. package/dist/spec/catalogs/layouts/title-center-image-top.json +0 -34
  594. package/dist/spec/catalogs/layouts/title-center.json +0 -26
  595. package/dist/spec/catalogs/layouts/title-left-image-bottom.json +0 -34
  596. package/dist/spec/catalogs/layouts/title-left-image-left.json +0 -34
  597. package/dist/spec/catalogs/layouts/title-left-image-right.json +0 -34
  598. package/dist/spec/catalogs/layouts/title-left-image-top.json +0 -34
  599. package/dist/spec/catalogs/layouts/title-slide.json +0 -28
  600. package/dist/spec/catalogs/layouts/title-subtitle.json +0 -23
  601. package/dist/spec/catalogs/layouts/title.json +0 -20
  602. package/dist/spec/catalogs/layouts/two-column.json +0 -36
  603. package/dist/spec/catalogs/layouts/venn-overlap.json +0 -29
  604. package/dist/spec/catalogs/layouts/waterfall-bridge.json +0 -39
  605. package/dist/spec/catalogs/layouts/wheel-radial.json +0 -29
  606. package/dist/spec/catalogs/manifest.json +0 -111
  607. package/dist/spec/catalogs/narratives/board-meeting.json +0 -192
  608. package/dist/spec/catalogs/narratives/business-narrative.json +0 -87
  609. package/dist/spec/catalogs/narratives/business-review.json +0 -119
  610. package/dist/spec/catalogs/narratives/capacity-planning.json +0 -88
  611. package/dist/spec/catalogs/narratives/challenge-resolution.json +0 -80
  612. package/dist/spec/catalogs/narratives/change-story.json +0 -64
  613. package/dist/spec/catalogs/narratives/classic-story.json +0 -78
  614. package/dist/spec/catalogs/narratives/company-intro.json +0 -96
  615. package/dist/spec/catalogs/narratives/conference-talk.json +0 -54
  616. package/dist/spec/catalogs/narratives/data-story.json +0 -65
  617. package/dist/spec/catalogs/narratives/early-startup-pitch.json +0 -119
  618. package/dist/spec/catalogs/narratives/educate.json +0 -95
  619. package/dist/spec/catalogs/narratives/employee-review.json +0 -87
  620. package/dist/spec/catalogs/narratives/failure-analysis.json +0 -104
  621. package/dist/spec/catalogs/narratives/focus.json +0 -120
  622. package/dist/spec/catalogs/narratives/golden-circle.json +0 -50
  623. package/dist/spec/catalogs/narratives/heros-journey.json +0 -64
  624. package/dist/spec/catalogs/narratives/index.json +0 -1041
  625. package/dist/spec/catalogs/narratives/innovation.json +0 -96
  626. package/dist/spec/catalogs/narratives/justice.json +0 -112
  627. package/dist/spec/catalogs/narratives/marketing-strategy.json +0 -111
  628. package/dist/spec/catalogs/narratives/performance-improvement-plan.json +0 -87
  629. package/dist/spec/catalogs/narratives/performance-review.json +0 -111
  630. package/dist/spec/catalogs/narratives/persuade.json +0 -94
  631. package/dist/spec/catalogs/narratives/persuasive-sales.json +0 -87
  632. package/dist/spec/catalogs/narratives/pitch-deck.json +0 -107
  633. package/dist/spec/catalogs/narratives/problem-solution.json +0 -61
  634. package/dist/spec/catalogs/narratives/product-launch.json +0 -104
  635. package/dist/spec/catalogs/narratives/project-proposal.json +0 -104
  636. package/dist/spec/catalogs/narratives/pyramid-principle.json +0 -48
  637. package/dist/spec/catalogs/narratives/qbr.json +0 -85
  638. package/dist/spec/catalogs/narratives/rags-to-riches.json +0 -80
  639. package/dist/spec/catalogs/narratives/reveal.json +0 -87
  640. package/dist/spec/catalogs/narratives/scqa.json +0 -55
  641. package/dist/spec/catalogs/narratives/situation-complication-resolution.json +0 -56
  642. package/dist/spec/catalogs/narratives/sparkline.json +0 -56
  643. package/dist/spec/catalogs/narratives/star-method.json +0 -56
  644. package/dist/spec/catalogs/narratives/status-update.json +0 -72
  645. package/dist/spec/catalogs/narratives/strategic-advisory.json +0 -85
  646. package/dist/spec/catalogs/narratives/strategic-narrative.json +0 -61
  647. package/dist/spec/catalogs/narratives/survey-analysis.json +0 -104
  648. package/dist/spec/catalogs/narratives/survival-story.json +0 -103
  649. package/dist/spec/catalogs/narratives/transformation-arc.json +0 -50
  650. package/dist/spec/catalogs/narratives/trend-analysis.json +0 -79
  651. package/dist/spec/catalogs/narratives/underdog-victory.json +0 -87
  652. package/dist/spec/catalogs/narratives/venture-pitch.json +0 -109
  653. package/dist/spec/catalogs/narratives/vision-roadmap.json +0 -65
  654. package/dist/spec/catalogs/narratives/weekly-progress.json +0 -103
  655. package/dist/spec/catalogs/narratives/what-so-what-now-what.json +0 -48
  656. package/dist/spec/catalogs/purposes/align.json +0 -16
  657. package/dist/spec/catalogs/purposes/decide.json +0 -16
  658. package/dist/spec/catalogs/purposes/educate.json +0 -16
  659. package/dist/spec/catalogs/purposes/index.json +0 -63
  660. package/dist/spec/catalogs/purposes/inform.json +0 -16
  661. package/dist/spec/catalogs/purposes/persuade.json +0 -16
  662. package/dist/spec/catalogs/purposes/pitch.json +0 -16
  663. package/dist/spec/catalogs/purposes/plan.json +0 -16
  664. package/dist/spec/catalogs/purposes/report.json +0 -16
  665. package/dist/spec/catalogs/purposes/sell.json +0 -16
  666. package/dist/spec/catalogs/social-platforms/bluesky.json +0 -14
  667. package/dist/spec/catalogs/social-platforms/facebook.json +0 -14
  668. package/dist/spec/catalogs/social-platforms/github.json +0 -15
  669. package/dist/spec/catalogs/social-platforms/index.json +0 -69
  670. package/dist/spec/catalogs/social-platforms/instagram.json +0 -13
  671. package/dist/spec/catalogs/social-platforms/linkedin.json +0 -15
  672. package/dist/spec/catalogs/social-platforms/mastodon.json +0 -14
  673. package/dist/spec/catalogs/social-platforms/threads.json +0 -13
  674. package/dist/spec/catalogs/social-platforms/tiktok.json +0 -14
  675. package/dist/spec/catalogs/social-platforms/x.json +0 -14
  676. package/dist/spec/catalogs/social-platforms/youtube.json +0 -14
  677. package/dist/spec/catalogs/themes/bold.json +0 -13
  678. package/dist/spec/catalogs/themes/classic.json +0 -13
  679. package/dist/spec/catalogs/themes/dark.json +0 -13
  680. package/dist/spec/catalogs/themes/index.json +0 -33
  681. package/dist/spec/catalogs/themes/minimal.json +0 -13
  682. package/dist/spec/catalogs/tones/authoritative.json +0 -31
  683. package/dist/spec/catalogs/tones/casual.json +0 -31
  684. package/dist/spec/catalogs/tones/conversational.json +0 -31
  685. package/dist/spec/catalogs/tones/formal.json +0 -31
  686. package/dist/spec/catalogs/tones/index.json +0 -51
  687. package/dist/spec/catalogs/tones/inspirational.json +0 -31
  688. package/dist/spec/catalogs/tones/persuasive.json +0 -32
  689. package/dist/spec/catalogs/tones/technical.json +0 -31
  690. package/dist/spec/previews/layouts/action-plan.html +0 -1
  691. package/dist/spec/previews/layouts/agenda.html +0 -1
  692. package/dist/spec/previews/layouts/appendix-index.html +0 -1
  693. package/dist/spec/previews/layouts/architecture-stack.html +0 -1
  694. package/dist/spec/previews/layouts/assumptions-dependencies.html +0 -1
  695. package/dist/spec/previews/layouts/before-after.html +0 -1
  696. package/dist/spec/previews/layouts/benchmark-target-table.html +0 -1
  697. package/dist/spec/previews/layouts/bullet-list.html +0 -1
  698. package/dist/spec/previews/layouts/business-model-canvas.html +0 -1
  699. package/dist/spec/previews/layouts/capability-map.html +0 -1
  700. package/dist/spec/previews/layouts/case-study.html +0 -1
  701. package/dist/spec/previews/layouts/chapter-recap.html +0 -1
  702. package/dist/spec/previews/layouts/circular-lifecycle.html +0 -1
  703. package/dist/spec/previews/layouts/comparison.html +0 -1
  704. package/dist/spec/previews/layouts/competitive-landscape.html +0 -1
  705. package/dist/spec/previews/layouts/customer-journey.html +0 -1
  706. package/dist/spec/previews/layouts/customer-logos.html +0 -1
  707. package/dist/spec/previews/layouts/dashboard.html +0 -1
  708. package/dist/spec/previews/layouts/data-visualization.html +0 -1
  709. package/dist/spec/previews/layouts/decision-tree.html +0 -1
  710. package/dist/spec/previews/layouts/detailed-data-table.html +0 -1
  711. package/dist/spec/previews/layouts/ecosystem-map.html +0 -1
  712. package/dist/spec/previews/layouts/executive-decision.html +0 -1
  713. package/dist/spec/previews/layouts/executive-summary.html +0 -1
  714. package/dist/spec/previews/layouts/faq.html +0 -1
  715. package/dist/spec/previews/layouts/feature-comparison-matrix.html +0 -1
  716. package/dist/spec/previews/layouts/forecast-scenario.html +0 -1
  717. package/dist/spec/previews/layouts/funnel-pyramid.html +0 -1
  718. package/dist/spec/previews/layouts/gantt-project-plan.html +0 -1
  719. package/dist/spec/previews/layouts/geographic-map.html +0 -1
  720. package/dist/spec/previews/layouts/heatmap-cohort.html +0 -1
  721. package/dist/spec/previews/layouts/hub-and-spoke.html +0 -1
  722. package/dist/spec/previews/layouts/icon-grid.html +0 -1
  723. package/dist/spec/previews/layouts/image-focus.html +0 -1
  724. package/dist/spec/previews/layouts/index.json +0 -357
  725. package/dist/spec/previews/layouts/key-takeaway.html +0 -1
  726. package/dist/spec/previews/layouts/kpi-scorecard.html +0 -1
  727. package/dist/spec/previews/layouts/logic-tree.html +0 -1
  728. package/dist/spec/previews/layouts/market-size.html +0 -1
  729. package/dist/spec/previews/layouts/matrix-quadrant.html +0 -1
  730. package/dist/spec/previews/layouts/network-dependency-map.html +0 -1
  731. package/dist/spec/previews/layouts/one-column-explainer.html +0 -1
  732. package/dist/spec/previews/layouts/org-chart.html +0 -1
  733. package/dist/spec/previews/layouts/persona-grid.html +0 -1
  734. package/dist/spec/previews/layouts/photo-grid.html +0 -1
  735. package/dist/spec/previews/layouts/pricing-table.html +0 -1
  736. package/dist/spec/previews/layouts/process-flow.html +0 -1
  737. package/dist/spec/previews/layouts/product-feature.html +0 -1
  738. package/dist/spec/previews/layouts/pros-cons.html +0 -1
  739. package/dist/spec/previews/layouts/qa-discussion.html +0 -1
  740. package/dist/spec/previews/layouts/quote-highlight.html +0 -1
  741. package/dist/spec/previews/layouts/raci-matrix.html +0 -1
  742. package/dist/spec/previews/layouts/risk-heatmap.html +0 -1
  743. package/dist/spec/previews/layouts/roadmap.html +0 -1
  744. package/dist/spec/previews/layouts/screenshot-walkthrough.html +0 -1
  745. package/dist/spec/previews/layouts/section-divider.html +0 -1
  746. package/dist/spec/previews/layouts/single-message-statement.html +0 -1
  747. package/dist/spec/previews/layouts/stats-metrics.html +0 -1
  748. package/dist/spec/previews/layouts/status-rag.html +0 -1
  749. package/dist/spec/previews/layouts/swimlane-process.html +0 -1
  750. package/dist/spec/previews/layouts/swot-analysis.html +0 -1
  751. package/dist/spec/previews/layouts/team-bio.html +0 -1
  752. package/dist/spec/previews/layouts/testimonial-grid.html +0 -1
  753. package/dist/spec/previews/layouts/thank-you-cta.html +0 -1
  754. package/dist/spec/previews/layouts/three-column.html +0 -1
  755. package/dist/spec/previews/layouts/timeline.html +0 -1
  756. package/dist/spec/previews/layouts/title-slide.html +0 -1
  757. package/dist/spec/previews/layouts/two-column.html +0 -1
  758. package/dist/spec/previews/layouts/venn-overlap.html +0 -1
  759. package/dist/spec/previews/layouts/waterfall-bridge.html +0 -1
  760. package/dist/spec/previews/layouts/wheel-radial.html +0 -1
package/README.md CHANGED
@@ -30,7 +30,7 @@ Use the common root API for most application code:
30
30
 
31
31
  ```ts
32
32
  import { presentation, validate, embed } from "@openpresentation/opf";
33
- import { defaultCatalog } from "@openpresentation/opf/catalog";
33
+ import { gallery } from "@openpresentation/gallery";
34
34
 
35
35
  import type { Presentation } from "@openpresentation/opf";
36
36
 
@@ -40,13 +40,14 @@ const deck: Presentation = {
40
40
  };
41
41
 
42
42
  console.log(presentation.$id);
43
- // Register the catalogs your host trusts; core itself ships no records in its main entry.
44
- const catalogs = [defaultCatalog];
43
+ // Register the catalogs your host trusts; core ships no records. In Node, validate, stats, paginate, embed and edit
44
+ // register the gallery (@openpresentation/gallery, a dependency of core) when a call names none.
45
+ const catalogs = [gallery];
45
46
  console.log(validate({ ...deck, design: { theme: "classic" } }, { catalogs }).valid);
46
47
  // Save with every record the deck uses embedded, so it renders the same with no catalog registered.
47
48
  const saved = embed({ ...deck, design: { theme: "classic" } }, { catalogs }).document;
48
49
  console.log(Object.keys(saved.catalogs.default.themes)); // ["classic"]
49
- console.log(Object.keys(defaultCatalog.tones));
50
+ console.log(Object.keys(gallery.tones));
50
51
  ```
51
52
 
52
53
  In Node (and Bun and Deno), the root adds files: `convert` turns one file into another (a deck to PDF, PNG, SVG or PPTX, a PowerPoint file to a deck, one deck form to another, or bytes with no output path), `open` reads a deck file or imports a `.pptx`, and `save` writes one. The same import works in every runtime, so one namespace import covers an application:
@@ -67,13 +68,12 @@ Use focused imports when you only need one surface:
67
68
 
68
69
  ```ts
69
70
  import { presentation, audience } from "@openpresentation/opf/schemas";
70
- import { defaultCatalog, catalogDisplay, layoutPreviews, getLayoutPreview, hasLayoutPreview } from "@openpresentation/opf/catalog";
71
71
  import { specFileEntries } from "@openpresentation/opf/spec-files";
72
72
  import { validate, assertValid, validationRules } from "@openpresentation/opf/validator";
73
73
  import type { Presentation, Audience, Tone } from "@openpresentation/opf/types";
74
74
  ```
75
75
 
76
- The root entry holds the application-level API: schemas, catalog references and their resolution (`resolveReference`, `embed`, `copySlides`, `updateFromCatalog`), validation, variables, pagination, data helpers, font policy, `stats`, `resolveSlideContext` and `resolveSlideVariables`. Engines compose and draw `context.slide` from `resolveSlideContext(deck, index, { slideNumber, slideCount })`: the slide with the slide-scoped built-ins `{{slide.number}}`, `{{slide.section}}` and `{{deck.slideCount}}` substituted for the same numbers its `options` carry (`resolveSlideVariables(slide, { slideNumber, slideCount })` does that substitution alone). Header and footer text is substituted by `layoutFurniture`, which records each slide number in `FurnitureTextPart.fields`. See [templates and variables](../../docs/templates-and-variables.md#slide-scoped-built-ins). It carries no catalog records: the pinned pptx.gallery snapshot is the opt-in `@openpresentation/opf/catalog` (`defaultCatalog`, display metadata and layout previews), and every entry point that resolves references takes `{ catalogs }`, the catalogs the host registered; the first one is the default for documents that omit `catalogs.default`. See [catalogs and the default catalog](../../docs/default-catalog.md).
76
+ The root entry holds the application-level API: schemas, catalog references and their resolution (`resolveReference`, `embed`, `copySlides`, `updateFromCatalog`), validation, variables, pagination, data helpers, font policy, `stats`, `resolveSlideContext` and `resolveSlideVariables`. Engines compose and draw `context.slide` from `resolveSlideContext(deck, index, { slideNumber, slideCount })`: the slide with the slide-scoped built-ins `{{slide.number}}`, `{{slide.section}}` and `{{deck.slideCount}}` substituted for the same numbers its `options` carry (`resolveSlideVariables(slide, { slideNumber, slideCount })` does that substitution alone). Header and footer text is substituted by `layoutFurniture`, which records each slide number in `FurnitureTextPart.fields`. See [templates and variables](../../docs/templates-and-variables.md#slide-scoped-built-ins). It carries no catalog records: the pptx.gallery catalog is the package `@openpresentation/gallery` (`gallery`, `catalogDisplay`, and the layout previews of `@openpresentation/gallery/previews`), a dependency of core released on its own version line, which the Node build registers when a call names no catalogs (OPF 0.19 removed `@openpresentation/opf/catalog` and `defaultCatalog`, with no alias). Every entry point that resolves references takes `{ catalogs }`, the catalogs the host registered; the first one is the default for documents that omit `catalogs.default`. See [catalogs and the default catalog](../../docs/default-catalog.md).
77
77
 
78
78
  The layout engine's names are not on the root. `composeSlide`, `fitText`, `layoutQuote` and the other `layoutX`/`fitX` functions, numbering, footnotes and citations, colour contrast, code syntax, pattern fills, metric trends, chart options, script fonts and text direction come from `@openpresentation/opf/composition`; the symbol-font tables come from `@openpresentation/opf/symbol-font-encodings`.
79
79
 
@@ -107,14 +107,14 @@ Added in 0.12.0 (not in 0.11.4 or earlier): `@openpresentation/opf/patch` is the
107
107
 
108
108
  ### Layout previews
109
109
 
110
- `@openpresentation/opf/catalog` ships pre-rendered HTML thumbnails for the
110
+ `@openpresentation/gallery/previews` ships pre-rendered HTML thumbnails for the
111
111
  slide layouts catalogued at pptx.gallery. Each preview is a Tailwind-styled
112
112
  fragment sized to fill a 16:9 container and only depends on the standard
113
113
  `--background`, `--foreground`, `--card`, `--muted`, `--muted-foreground`,
114
114
  `--accent`, and `--border` CSS variables.
115
115
 
116
116
  ```tsx
117
- import { getLayoutPreview } from "@openpresentation/opf/catalog";
117
+ import { getLayoutPreview } from "@openpresentation/gallery/previews";
118
118
 
119
119
  export function LayoutThumbnail({ slug }: { slug: string }) {
120
120
  const html = getLayoutPreview(slug);
@@ -128,8 +128,7 @@ export function LayoutThumbnail({ slug }: { slug: string }) {
128
128
  }
129
129
  ```
130
130
 
131
- Raw HTML source-of-truth lives under `spec/previews/layouts/<slug>.html` and is
132
- also addressable via `@openpresentation/opf/spec/previews/layouts/<slug>.html`.
131
+ The HTML source lives in [OpenPresentation/gallery](https://github.com/OpenPresentation/gallery); this checkout materializes ignored copies from the installed package for checks.
133
132
 
134
133
  ### Example decks
135
134
 
@@ -195,7 +194,7 @@ in the records the document embeds (`catalogs.custom`, `catalogs.default`, named
195
194
  groups), then in the catalogs the host registered with `{ catalogs }`.
196
195
 
197
196
  ```ts
198
- const report = validate(deck, { catalogs: [defaultCatalog] });
197
+ const report = validate(deck, { catalogs: [gallery] });
199
198
  if (!report.valid) console.error(report.findings.filter((finding) => finding.severity === "error"));
200
199
  for (const finding of report.findings) console.warn(finding.ruleId, finding.path, finding.message);
201
200
  ```
@@ -203,10 +202,12 @@ for (const finding of report.findings) console.warn(finding.ruleId, finding.path
203
202
  Validate catalog records locally:
204
203
 
205
204
  ```ts
206
- import { audiences, validateCatalogRecord } from "@openpresentation/opf";
205
+ import { validateCatalogRecord } from "@openpresentation/opf";
206
+ import { gallery } from "@openpresentation/gallery";
207
207
 
208
- for (const record of audiences) {
209
- const result = validateCatalogRecord("audiences", record);
208
+ for (const [id, record] of Object.entries(gallery.audiences)) {
209
+ // A published record file carries its $schema and id; the gallery keys records by id without them.
210
+ const result = validateCatalogRecord("audiences", { $schema: "https://openpresentation.org/schema/opf-audience/v1", id, ...record });
210
211
  if (!result.valid) {
211
212
  console.error(result.findings);
212
213
  }
@@ -230,11 +231,11 @@ const openApi = specFileEntries.find((entry) => entry.path === "openapi.yaml");
230
231
  console.log(openApi?.packagePath);
231
232
  ```
232
233
 
233
- The snapshot's raw record files stay package-addressable (`@openpresentation/opf/spec/catalogs/<kind>/<id>.json`) for tools that read published records; documents never point at them. A host registers the catalog instead:
234
+ Core ships no catalog record files (RR-78): the records are `@openpresentation/gallery`'s, and pptx.gallery serves each published record file at `https://www.pptx.gallery/<kind>/<id>.json`. Documents never point at them. A host registers the catalog instead:
234
235
 
235
236
  ```js
236
- import { defaultCatalog } from "@openpresentation/opf/catalog";
237
- validate(deck, { catalogs: [defaultCatalog] });
237
+ import { gallery } from "@openpresentation/gallery";
238
+ validate(deck, { catalogs: [gallery] });
238
239
  ```
239
240
 
240
241
  ## Development
package/dist/browser.js CHANGED
@@ -1,22 +1,20 @@
1
- import { OPFApiError } from './chunk-IM337HP5.js';
2
- export { OPFApiError, OPFExportError, OPFImportError, OPFMoveToCustomError, copySlides, edit, embed, fill, fillRecords, moveToCustom, parseSlideSelection, sameRecord, stats, updateFromCatalog } from './chunk-IM337HP5.js';
3
- export { specFileEntries, specFileKinds, specFilePaths } from './chunk-HXHOZ7AH.js';
4
- export { OPFDataImportError, ingest, parseTabularData } from './chunk-ZCFSDSUX.js';
5
- export { DECK_FORMATS, deckFormatOf, parse, stringify } from './chunk-GVOLSWAJ.js';
6
- export { fromMarkdown, toMarkdown } from './chunk-MSFE2HUK.js';
7
- import './chunk-ECP7QPGK.js';
8
- export { OPFMarkdownError } from './chunk-R7KIASS4.js';
9
- export { diff, merge } from './chunk-L5YACLWK.js';
10
- export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-WHHLGDCQ.js';
11
- export { OPFFormatError, format } from './chunk-JCOSZTOI.js';
12
- export { OPFPaginationError, paginate, paginateSlide } from './chunk-FO3WGS4R.js';
13
- import './chunk-PNINP5IF.js';
14
- import './chunk-TRELE6I6.js';
15
- export { DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-KA3ZPFVT.js';
16
- export { CHART_TYPES, DEFAULT_VARIABLE_DATE_FORMAT, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, LANGUAGES, LOGO_SHAPES, OPFVariableError, SLIDE_SCOPED_BUILTINS, SOCIAL_PLATFORMS, VARIABLE_KINDS, chartNumber, coerceVariableValue, datasetDiagnostics, formatDataNumber, formatVariableNumber, fromExcelNumberFormat, hasContentVariables, inlineChartData, inlineDatasets, inlineTableData, isDatasetRef, isTemplate, isXYChartType, listBuiltinVariables, listVariables, normalizeLanguageFamily, numberFormatError, resolveChartData, resolveDesignRecords, resolveFontScheme, resolveSlideVariables, resolveTableData, resolveVariables, suggestChartNumberFix, tableCellDisplayValue, toExcelNumberFormat, unusedDatasets, variableDeclarations } from './chunk-MBU42S5Y.js';
17
- export { catalogDisplayKinds, catalogSchemaNames } from './chunk-TRDXRRQK.js';
18
- export { CATALOG_GROUP_PATTERN, CATALOG_REFERENCE_PATTERN, OPFCatalogsOptionError, OPFUnresolvedReferenceError, catalogGroupSource, catalogKinds, catalogRecords, catalogReferenceSites, parseReference, resolveReference, unresolvedReference } from './chunk-SPFV27O5.js';
19
- export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-2PEWUUBR.js';
1
+ import { OPFApiError } from './chunk-2AGWO7RM.js';
2
+ export { OPFApiError, OPFExportError, OPFImportError, OPFMoveToCustomError, copySlides, edit, embed, fill, fillRecords, moveToCustom, parseSlideSelection, sameRecord, stats, updateFromCatalog } from './chunk-2AGWO7RM.js';
3
+ export { specFileEntries, specFileKinds, specFilePaths } from './chunk-UJSAR6GF.js';
4
+ export { OPFDataImportError, ingest, parseTabularData } from './chunk-W7G5LSXI.js';
5
+ export { DECK_FORMATS, deckFormatOf, parse, stringify } from './chunk-NZDWCYDI.js';
6
+ export { fromMarkdown, toMarkdown } from './chunk-RFJ5TR3V.js';
7
+ import './chunk-4FBXVST6.js';
8
+ export { OPFMarkdownError } from './chunk-P6LMWUXV.js';
9
+ export { diff, merge } from './chunk-L6RRLN6Q.js';
10
+ export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-2XJUXMBS.js';
11
+ export { OPFFormatError, format } from './chunk-32MHL3B3.js';
12
+ export { OPFPaginationError, paginate, paginateSlide } from './chunk-BDXJYO6R.js';
13
+ import './chunk-UA5EROLC.js';
14
+ import './chunk-ZU5EQ23T.js';
15
+ export { CATALOG_SCHEMA, DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, catalogDisplayKinds, catalogSchemaNames, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-7QUAOKS6.js';
16
+ export { CATALOG_GROUP_PATTERN, CATALOG_REFERENCE_PATTERN, CHART_TYPES, DEFAULT_VARIABLE_DATE_FORMAT, ENGINE_DEFAULT_CHART_TYPES, ENGINE_DEFAULT_COLOR_SCHEME, ENGINE_DEFAULT_FONT_SCHEME, ENGINE_DEFAULT_THEME, LANGUAGES, LOGO_SHAPES, OPFCatalogsOptionError, OPFUnresolvedReferenceError, OPFVariableError, SLIDE_SCOPED_BUILTINS, SOCIAL_PLATFORMS, VARIABLE_KINDS, catalogGroupSource, catalogKinds, catalogRecords, catalogReferenceSites, chartNumber, coerceVariableValue, datasetDiagnostics, formatDataNumber, formatVariableNumber, fromExcelNumberFormat, hasContentVariables, inlineChartData, inlineDatasets, inlineTableData, isDatasetRef, isTemplate, isXYChartType, listBuiltinVariables, listVariables, normalizeLanguageFamily, numberFormatError, parseReference, resolveChartData, resolveDesignRecords, resolveFontScheme, resolveReference, resolveSlideVariables, resolveTableData, resolveVariables, suggestChartNumberFix, tableCellDisplayValue, toExcelNumberFormat, unresolvedReference, unusedDatasets, variableDeclarations } from './chunk-UAXSW6VV.js';
17
+ export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-VEHLQVGQ.js';
20
18
  export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-F7PLNWHQ.js';
21
19
 
22
20
  // src/browser.ts
@@ -125,4 +125,4 @@ declare function catalogReferenceSites(document: unknown, options?: {
125
125
  /** Records a picker can offer for `kind`: the document's embedded records, then those of the registered catalogs its groups name, with the reference to write for each. */
126
126
  declare function catalogRecords(document: unknown, kind: CatalogKind, options?: CatalogOptions): ResolvedReference[];
127
127
 
128
- export { type CatalogKind as C, OPFCatalogsOptionError as O, type RecordProvenance as R, type UnresolvedReferenceDiagnostic as U, type Catalog as a, type CatalogOptions as b, CATALOG_GROUP_PATTERN as c, CATALOG_REFERENCE_PATTERN as d, type CatalogRecordMap as e, type CatalogRecords as f, type CatalogReferenceSite as g, OPFUnresolvedReferenceError as h, type ResolvedReference as i, catalogGroupSource as j, catalogKinds as k, catalogRecords as l, catalogReferenceSites as m, parseReference as p, resolveReference as r, unresolvedReference as u };
128
+ export { type Catalog as C, OPFCatalogsOptionError as O, type RecordProvenance as R, type UnresolvedReferenceDiagnostic as U, type CatalogOptions as a, type CatalogKind as b, CATALOG_GROUP_PATTERN as c, CATALOG_REFERENCE_PATTERN as d, type CatalogRecordMap as e, type CatalogRecords as f, type CatalogReferenceSite as g, OPFUnresolvedReferenceError as h, type ResolvedReference as i, catalogGroupSource as j, catalogKinds as k, catalogRecords as l, catalogReferenceSites as m, parseReference as p, resolveReference as r, unresolvedReference as u };
@@ -1,8 +1,7 @@
1
- import { OPFDataImportError, parseTabularData } from './chunk-ZCFSDSUX.js';
2
- import { applyPatchWithInverse } from './chunk-WHHLGDCQ.js';
3
- import { validate, OPFValidationError } from './chunk-KA3ZPFVT.js';
4
- import { isRecord, visitContentPayloads, listVariables, resolveVariables, LOGO_SHAPES, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-MBU42S5Y.js';
5
- import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN } from './chunk-SPFV27O5.js';
1
+ import { OPFDataImportError, parseTabularData } from './chunk-W7G5LSXI.js';
2
+ import { applyPatchWithInverse } from './chunk-2XJUXMBS.js';
3
+ import { validate, OPFValidationError } from './chunk-7QUAOKS6.js';
4
+ import { embeddedCopy, checkCatalogsOption, catalogReferenceSites, parseReference, catalogGroupDeclared, resolveReference, dottedPath, unresolvedReference, recordReferenceSites, catalogGroupSource, registeredCatalog, catalogKinds, CATALOG_GROUP_PATTERN, isRecord, visitContentPayloads, listVariables, resolveVariables, LOGO_SHAPES, resolveDesignRecords, resolveFontFamilies, resolveCanvasDimensions, imageBackground } from './chunk-UAXSW6VV.js';
6
5
 
7
6
  // src/api-errors.ts
8
7
  var OPFApiError = class extends Error {
@@ -1,4 +1,4 @@
1
- import { validate } from './chunk-KA3ZPFVT.js';
1
+ import { validate } from './chunk-7QUAOKS6.js';
2
2
 
3
3
  // src/patch.ts
4
4
  var OPFPatchError = class extends Error {
@@ -1,4 +1,4 @@
1
- import { presentation } from './chunk-2PEWUUBR.js';
1
+ import { presentation } from './chunk-VEHLQVGQ.js';
2
2
 
3
3
  // src/format.ts
4
4
  var OPFFormatError = class extends Error {
@@ -66,7 +66,12 @@ function format(input, options = {}) {
66
66
  const indent = options.indent ?? 2;
67
67
  if (!Number.isInteger(indent) || indent < 0 || indent > 8) throw new OPFFormatError("indent must be an integer from 0 to 8.");
68
68
  if (options.eol !== void 0 && options.eol !== "lf" && options.eol !== "crlf") throw new OPFFormatError("eol must be lf or crlf.");
69
- const text = JSON.stringify(sortPresentationKeys(document), null, indent);
69
+ const sorted = sortPresentationKeys(document);
70
+ const slides = sorted !== null && typeof sorted === "object" && !Array.isArray(sorted) ? sorted.slides : void 0;
71
+ if (Array.isArray(slides)) {
72
+ for (const slide of slides) if (slide !== null && typeof slide === "object" && slide.layout === "auto") delete slide.layout;
73
+ }
74
+ const text = JSON.stringify(sorted, null, indent);
70
75
  if (text === void 0) throw new OPFFormatError("Nothing to format.");
71
76
  return options.eol === "crlf" ? `${text.replaceAll("\n", "\r\n")}\r
72
77
  ` : `${text}
@@ -1,9 +1,9 @@
1
- import { NOT_CHECKED, Ctx } from './chunk-R7KIASS4.js';
2
- import { sortPresentationKeys } from './chunk-JCOSZTOI.js';
3
- import { same } from './chunk-TRELE6I6.js';
4
- import { validate } from './chunk-KA3ZPFVT.js';
5
- import { checkCatalogsOption } from './chunk-SPFV27O5.js';
6
- import { presentation } from './chunk-2PEWUUBR.js';
1
+ import { NOT_CHECKED, Ctx } from './chunk-P6LMWUXV.js';
2
+ import { sortPresentationKeys } from './chunk-32MHL3B3.js';
3
+ import { same } from './chunk-ZU5EQ23T.js';
4
+ import { validate } from './chunk-7QUAOKS6.js';
5
+ import { checkCatalogsOption } from './chunk-UAXSW6VV.js';
6
+ import { presentation } from './chunk-VEHLQVGQ.js';
7
7
  import { Parser, parseDocument, isMap, Document, visit, isScalar, isAlias, isSeq } from 'yaml';
8
8
 
9
9
  var MAX_ALIAS_COUNT = 100;
@@ -1,11 +1,26 @@
1
- import { promotedRegionKeys, VARIABLE_KINDS, resolveChartData, chartPaletteForFill, imageBackground, tableGrid, timelineTextColor, LOGO_SHAPES, visitContentPayloads, readingRows, visualReadingOrder, intrinsicImageSize, textWidthMeasurer, normalizeHexColor, resolveColorRef, resolveDesignRecords, resolveFontFamilies, resolveColorRoles, resolveCanvasDimensions, resolveSlideVariables, defaultSlideBackground, isRecord, hasContentVariables, isTemplate, instantiateForValidation, resolveScriptFonts, unusedDatasets, MAX_COMPOSITION_DEPTH, datasetDiagnostics, pathFor, collectCitations, numberingFindings, walkCitationRuns, resolveTableData, resolveChartOptions, chartOptionTarget, codeHighlightLines, chartNumberFixesByCell, MAX_PLACEHOLDER_GROUP_DEPTH, OPFCompositionError, composeSlide } from './chunk-MBU42S5Y.js';
2
- import { catalogSchemaNames } from './chunk-TRDXRRQK.js';
3
- import { resolveReference, checkCatalogsOption, provenanceOf, unresolvedReference, OPFUnresolvedReferenceError, catalogReferenceSites, parseReference, catalogGroupDeclared, pointerPath, catalogRecords, catalogKinds, catalogGroupSource, registeredCatalog } from './chunk-SPFV27O5.js';
4
- import { schemaEntries, schemas } from './chunk-2PEWUUBR.js';
1
+ import { promotedRegionKeys, VARIABLE_KINDS, resolveChartData, chartPaletteForFill, imageBackground, tableGrid, timelineTextColor, LOGO_SHAPES, visitContentPayloads, readingRows, visualReadingOrder, intrinsicImageSize, resolveReference, textWidthMeasurer, normalizeHexColor, resolveColorRef, resolveDesignRecords, resolveFontFamilies, checkCatalogsOption, provenanceOf, unresolvedReference, OPFUnresolvedReferenceError, resolveColorRoles, resolveCanvasDimensions, resolveSlideVariables, defaultSlideBackground, isRecord, hasContentVariables, isTemplate, instantiateForValidation, layoutTemplateIssues, resolveScriptFonts, catalogReferenceSites, parseReference, catalogGroupDeclared, pointerPath, unusedDatasets, MAX_COMPOSITION_DEPTH, datasetDiagnostics, pathFor, catalogRecords, collectCitations, numberingFindings, walkCitationRuns, resolveTableData, resolveChartOptions, chartOptionTarget, codeHighlightLines, chartNumberFixesByCell, catalogKinds, catalogGroupSource, registeredCatalog, OPFCompositionError, composeSlide } from './chunk-UAXSW6VV.js';
2
+ import { schemaEntries, schemas } from './chunk-VEHLQVGQ.js';
5
3
  import Ajv2020 from 'ajv/dist/2020.js';
6
4
  import addFormats from 'ajv-formats';
7
5
  import { parseTree, printParseErrorCode, getNodePath } from 'jsonc-parser';
8
6
 
7
+ // src/catalog-schemas.ts
8
+ var CATALOG_SCHEMA = 3;
9
+ var catalogDisplayKinds = ["chartTypes", "languages", "socialPlatforms"];
10
+ var catalogSchemaNames = {
11
+ layouts: "layout",
12
+ themes: "theme",
13
+ colorSchemes: "colorScheme",
14
+ fontSchemes: "fontScheme",
15
+ narratives: "narrative",
16
+ audiences: "audience",
17
+ purposes: "purpose",
18
+ tones: "tone",
19
+ chartTypes: "chartType",
20
+ languages: "language",
21
+ socialPlatforms: "socialPlatform"
22
+ };
23
+
9
24
  // src/annotation-validation.ts
10
25
  var issue = (path, message, params) => ({ path, message, keyword: "opf", schemaPath: "#/x-opf-semantics", params });
11
26
  var pointer = (dotted) => `/${dotted.split(".").map((part) => part.replaceAll("~", "~0").replaceAll("/", "~1")).join("/")}`;
@@ -909,33 +924,6 @@ function dataUnionErrors(errors, value) {
909
924
  return { ...error, message: field === "fields" ? "'fields' applies only to a dataset-backed table; add 'dataset' or remove 'fields'" : datasetTableMessage(field) };
910
925
  });
911
926
  }
912
- var placeholderHeadings = /* @__PURE__ */ new Set(["title", "subtitle", "tag"]);
913
- function placeholderGroupIssues(value) {
914
- const issues = [];
915
- if (!isRecord(value) || !Array.isArray(value.placeholders)) return issues;
916
- const walk = (entries, path, depth) => entries.forEach((entry, index) => {
917
- if (!isRecord(entry)) return;
918
- const at2 = `${path}/${index}`;
919
- if (entry.type === "group") {
920
- if (depth >= MAX_PLACEHOLDER_GROUP_DEPTH) issues.push(semanticIssue(at2, `placeholder groups nest at most ${MAX_PLACEHOLDER_GROUP_DEPTH} levels inside a layout record; this group would be level ${depth + 1}`, { code: "layout-placeholder-group", depth: depth + 1, maxDepth: MAX_PLACEHOLDER_GROUP_DEPTH }));
921
- else if (Array.isArray(entry.placeholders)) walk(entry.placeholders, `${at2}/placeholders`, depth + 1);
922
- return;
923
- }
924
- if (depth === 0) return;
925
- if (typeof entry.type === "string" && placeholderHeadings.has(entry.type)) issues.push(semanticIssue(`${at2}/type`, `a placeholder group holds body regions only; a '${entry.type}' placeholder belongs at the record's top level`, { code: "layout-placeholder-group" }));
926
- if (hasOwn(entry, "placement")) issues.push(semanticIssue(`${at2}/placement`, "placement is only valid on a top-level image placeholder; a region inside a placeholder group cannot bleed to a slide edge", { code: "image-placement-invalid" }));
927
- });
928
- walk(value.placeholders, "/placeholders", 0);
929
- return issues;
930
- }
931
- function withPlaceholderGroupIssues(errors, value) {
932
- const issues = placeholderGroupIssues(value);
933
- const entries = issues.map((issue2) => issue2.path.replace(/\/(type|placement)$/, ""));
934
- const covered = (error) => entries.some((entry) => error.path === entry || error.path.startsWith(`${entry}/`));
935
- const kept = errors.filter((error) => !covered(error));
936
- const reported = [...kept.filter((error) => error.keyword !== "if"), ...issues].map((error) => error.path);
937
- return [...kept.filter((error) => error.keyword !== "if" || !reported.some((path) => path === error.path || path.startsWith(`${error.path}/`))), ...issues];
938
- }
939
927
  function validateAgainstSchema(value, schemaOrKind = "presentation", options = {}) {
940
928
  const resolved = resolveValidator(schemaOrKind);
941
929
  if (resolved.schemaName === "presentation") {
@@ -968,7 +956,8 @@ function validateAgainstSchema(value, schemaOrKind = "presentation", options = {
968
956
  const valid = resolved.validate(subject) === true;
969
957
  const ajvErrors = valid ? [] : typedVariableErrors(resolved.validate.errors ?? [], subject);
970
958
  const mapped = (resolved.schemaName === "presentation" ? dataUnionErrors(ajvErrors, subject) : ajvErrors).map(toIssue);
971
- const errors = resolved.schemaName === "layout" ? withPlaceholderGroupIssues(mapped, subject) : mapped;
959
+ const errors = mapped;
960
+ if (resolved.schemaName === "layout" && valid) for (const issue2 of layoutTemplateIssues(subject)) errors.push(semanticIssue(issue2.path, issue2.message, { code: issue2.code }));
972
961
  const warnings = [];
973
962
  if (resolved.schemaName === "presentation") {
974
963
  errors.push(...presentationSemanticIssues(subject));
@@ -1797,7 +1786,7 @@ var readingOrderRule = rule(
1797
1786
  {
1798
1787
  standard: 'WCAG 2.2 SC 1.3.2 Meaningful Sequence, level A (PowerPoint: "Check reading order")',
1799
1788
  cost: "composition",
1800
- approximations: "Compares the composed content order with a visual order recomputed from the composed boxes: items whose vertical centres fall in the same row are ordered along the reading direction (a right-to-left deck is checked by rows only), rows from top to bottom. Headings are expected first. Free-form overlap is not analysed."
1789
+ approximations: "Compares the composed content order with a visual order recomputed from the composed boxes: items whose vertical centres fall in the same row are ordered along the reading direction (a right-to-left deck is checked by rows only), rows from top to bottom. Headings are expected first. Free-form overlap is not analysed. On a slide with a template layout (OPF 0.19) the expected order is the binding order instead (the regions in reading order, then the blocks of each region), and items outside a region (placed images, the row below the grid) are not compared."
1801
1790
  }
1802
1791
  );
1803
1792
  var readingOrderRules = [
@@ -1819,8 +1808,11 @@ var readingOrderRules = [
1819
1808
  });
1820
1809
  }
1821
1810
  if (body.length < 2) continue;
1822
- const visual = visualOrder(body, slide.rtl);
1823
- const composed = body.map((item) => item.path);
1811
+ const regions = composition.regions;
1812
+ const ordered = regions ? body.filter((item) => item.region !== void 0) : body;
1813
+ if (ordered.length < 2) continue;
1814
+ const visual = regions ? bindingOrder(ordered, regions) : visualOrder(ordered, slide.rtl);
1815
+ const composed = ordered.map((item) => item.path);
1824
1816
  const index = composed.findIndex((path, i) => path !== visual[i]);
1825
1817
  if (index < 0) continue;
1826
1818
  const name = (path) => shortField(path);
@@ -1835,6 +1827,16 @@ var readingOrderRules = [
1835
1827
  }
1836
1828
  }
1837
1829
  ];
1830
+ function bindingOrder(items, regions) {
1831
+ const rank = new Map(regions.map((region, index) => [region.name, index]));
1832
+ const blockRank = (item) => {
1833
+ const region = regions.find((entry) => entry.name === item.region);
1834
+ const blocks = region ? [...region.content, ...region.overflow ?? []] : [];
1835
+ const found = blocks.findIndex((block) => item.path === block || item.path.startsWith(`${block}.`));
1836
+ return found < 0 ? blocks.length : found;
1837
+ };
1838
+ return items.map((item, index) => ({ item, index, region: rank.get(item.region ?? "") ?? regions.length, block: blockRank(item) })).sort((a, b) => a.region - b.region || a.block - b.block || a.index - b.index).map((entry) => entry.item.path);
1839
+ }
1838
1840
  function visualOrder(items, rtl) {
1839
1841
  if (rtl) return readingRows(items).flatMap((row) => row.map((item) => item.path));
1840
1842
  return visualReadingOrder(items).map((item) => item.path);
@@ -2160,10 +2162,43 @@ var minFontRule = rule(
2160
2162
  approximations: "Sizes are those composeSlide fitted, expressed on the 13.33 x 7.5 in reference slide (96 px per inch, so 1 px is 0.75 pt; a smaller canvas scales type down with it) and explicit run fontSize values in points. Per payload, the smallest part (a metric label or a quote attribution) is reported. Table cell text (default 11.25 pt), code and header/footer furniture are not checked."
2161
2163
  }
2162
2164
  );
2165
+ var regionUnknownRule = rule(
2166
+ "region-unknown",
2167
+ "layout",
2168
+ "warning",
2169
+ "A block is pinned to a region the layout does not have.",
2170
+ "A region pin (`region` on a root block) names a region of the slide's layout. A name the layout does not have is ignored: the block is placed by its kind, which may not be where the author meant.",
2171
+ { cost: "composition" }
2172
+ );
2173
+ var regionKindRule = rule(
2174
+ "region-kind",
2175
+ "layout",
2176
+ "warning",
2177
+ "A block is pinned to a region that does not accept its kind.",
2178
+ "A region says which content kinds it takes. A pin to a region that does not take the block's kind is ignored and the block is placed by its kind.",
2179
+ { cost: "composition" }
2180
+ );
2181
+ var regionFullRule = rule(
2182
+ "region-full",
2183
+ "layout",
2184
+ "warning",
2185
+ "A block is pinned to a region that is already full.",
2186
+ "A region holds at most `max` blocks on one slide. A pin to a full region is ignored and the block is placed by its kind.",
2187
+ { cost: "composition" }
2188
+ );
2189
+ var unplacedRule = rule(
2190
+ "layout-unplaced",
2191
+ "layout",
2192
+ "warning",
2193
+ "No region of the layout has room for a block.",
2194
+ "Content is never dropped: a block no region has room for is drawn in the layout's overflow region beyond its max (or below the grid), where it crowds the others. Paginate moves it to a continuation slide with the same layout.",
2195
+ { cost: "composition" }
2196
+ );
2197
+ var REGION_RULES = { "region-unknown": regionUnknownRule, "region-kind": regionKindRule, "region-full": regionFullRule, "layout-unplaced": unplacedRule };
2163
2198
  var layoutRules = [
2164
2199
  {
2165
2200
  info: overflowRule,
2166
- also: [unresolvedRule, layoutFailedRule, minFontRule],
2201
+ also: [unresolvedRule, layoutFailedRule, minFontRule, regionUnknownRule, regionKindRule, regionFullRule, unplacedRule],
2167
2202
  run(context) {
2168
2203
  const deckLevel = /* @__PURE__ */ new Set();
2169
2204
  for (const slide of context.slides) {
@@ -2179,6 +2214,8 @@ var layoutRules = [
2179
2214
  if (diagnostic.code === "text-overflow")
2180
2215
  context.report(overflowRule, { path, slide, message: diagnostic.message, help: "Shorten the text, give it more space (fewer blocks, a different composition) or split the slide (paginate); raising the readable minimum makes it worse." });
2181
2216
  else if (diagnostic.code === "small-cell") continue;
2217
+ else if (Object.hasOwn(REGION_RULES, diagnostic.code))
2218
+ context.report(REGION_RULES[diagnostic.code], { path, slide, message: diagnostic.message, help: diagnostic.code === "layout-unplaced" ? "Paginate the slide, choose a layout with more room, pin the block to a region with room, or remove a block." : "Pin the block to a region of the layout that accepts it and has room, or remove the pin." });
2182
2219
  else context.report(unresolvedRule, { path, slide: path.startsWith("/slides/") ? slide : void 0, message: diagnostic.message, help: "Supply what the message asks for, or remove the setting that cannot be honoured." });
2183
2220
  }
2184
2221
  for (const tv of slide.texts)
@@ -2512,6 +2549,22 @@ var referenceRules = [
2512
2549
  "A record that fails its companion schema cannot be resolved. Invalid records are left out of the lookup, so the references to them are reported too.",
2513
2550
  { standard: "spec/schemas/<kind>.schema.json" }
2514
2551
  ),
2552
+ rule(
2553
+ "layout-template",
2554
+ "references",
2555
+ "error",
2556
+ "A layout template's grid is malformed.",
2557
+ 'A layout (OPF 0.19) is a grid of named areas. Engines cannot compose a grid whose rows have different lengths, whose names do not form one filled rectangle each, whose column or row sizes do not match the grid, that is larger than 12 x 12, or that holds a word that is not a name or ".". composeSlide refuses such a record, so a slide that names it composes automatically.',
2558
+ { standard: "spec/schemas/layout.schema.json and the area rules of OPF 0.19 (docs/layout-templates.md)", approximations: "Checked on every layout record the document embeds and every registered record it uses, once the record passes its schema." }
2559
+ ),
2560
+ rule(
2561
+ "layout-region",
2562
+ "references",
2563
+ "error",
2564
+ "A layout template's regions do not match its areas.",
2565
+ "Every body area of a layout needs a region that says what it accepts, and every region needs an area. Region names may not be title, subtitle, tag, auto or a promoted-region word (left, center, right, top, middle, bottom), so a Markdown block's region= stays unambiguous; a subtitle area needs a title area; a region with flow 'none' holds one block; overflowRegion must name a region. composeSlide refuses such a record.",
2566
+ { standard: "spec/schemas/layout.schema.json and the region rules of OPF 0.19 (docs/layout-templates.md)" }
2567
+ ),
2515
2568
  rule(
2516
2569
  "unresolved-reference",
2517
2570
  "references",
@@ -2811,6 +2864,7 @@ function fields(document) {
2811
2864
  }
2812
2865
  return result;
2813
2866
  }
2867
+ var recordRuleId = (issue2) => issue2.keyword === "opf" && (issue2.params.code === "layout-template" || issue2.params.code === "layout-region") ? `opf/${issue2.params.code}` : "opf/catalog-record";
2814
2868
  var recordKey = (group, kind, id) => `${group}/${kind}/${id}`;
2815
2869
  function recordIssues(kind, id, value) {
2816
2870
  const schemaName = catalogSchemaNames[kind];
@@ -2826,7 +2880,7 @@ function embeddedRecordFindings(document, options, findings) {
2826
2880
  const path = pointer3(["catalogs", group, kind, id]);
2827
2881
  if (object(record) && (Object.hasOwn(record, "$schema") || Object.hasOwn(record, "id"))) continue;
2828
2882
  const validation = recordIssues(kind, id, record);
2829
- for (const issue2 of validation.errors) findings.push(issueFinding(issue2, "opf/catalog-record", catalogSchemaNames[kind], path, "document"));
2883
+ for (const issue2 of validation.errors) findings.push(issueFinding(issue2, recordRuleId(issue2), catalogSchemaNames[kind], path, "document"));
2830
2884
  if (!validation.valid) invalid.add(recordKey(group, kind, id));
2831
2885
  if (group === "custom") continue;
2832
2886
  const source = catalogGroupSource(document, group, options);
@@ -3011,7 +3065,7 @@ function contentReferenceFindings(document, options, findings) {
3011
3065
  if (found?.origin === "host" && !registeredChecked.has(recordKey(found.group, site.kind, found.id))) {
3012
3066
  registeredChecked.add(recordKey(found.group, site.kind, found.id));
3013
3067
  for (const issue2 of recordIssues(site.kind, found.id, found.record).errors)
3014
- findings.push(issueFinding(issue2, "opf/catalog-record", catalogSchemaNames[site.kind], pointer3(["catalogs", found.group, site.kind, found.id]), "context"));
3068
+ findings.push(issueFinding(issue2, recordRuleId(issue2), catalogSchemaNames[site.kind], pointer3(["catalogs", found.group, site.kind, found.id]), "context"));
3015
3069
  }
3016
3070
  if (found && !(found.origin === "document" && invalid.has(recordKey(found.group, site.kind, found.id)))) continue;
3017
3071
  const diagnostic = unresolvedReference(document, site.kind, site.reference, path, options);
@@ -3378,7 +3432,7 @@ function resolveSlideContext(presentation, index, options = {}) {
3378
3432
  const design = { ...rec2(deck.design), ...rec2(slide.design) };
3379
3433
  let layout;
3380
3434
  let layoutProvenance;
3381
- if (typeof slide.layout === "string") {
3435
+ if (typeof slide.layout === "string" && slide.layout !== "auto") {
3382
3436
  const found = resolveReference(presentation, "layouts", slide.layout, catalogs);
3383
3437
  if (found) {
3384
3438
  layout = { ...found.record };
@@ -3396,6 +3450,8 @@ function resolveSlideContext(presentation, index, options = {}) {
3396
3450
  fontFamilies: resolveFontFamilies(fontScheme),
3397
3451
  darkBackground: resolveColorRoles(colorScheme, { background: decisionColor(design.background ?? theme.background, colorScheme, rec2(deck.variables)) }).dark,
3398
3452
  ...theme.background !== void 0 ? { themeBackground: theme.background } : {},
3453
+ // OPF 0.19: a theme may carry the shared design keys (between the deck's design and the layout record's).
3454
+ ...theme.design !== void 0 && rec2(theme.design) === theme.design ? { themeDesign: theme.design } : {},
3399
3455
  ...options.fonts?.textMeasurement ? { textMeasurement: options.fonts.textMeasurement } : {},
3400
3456
  ...options.date !== void 0 ? { date: options.date } : {}
3401
3457
  };
@@ -3767,4 +3823,4 @@ function assertValidCatalogRecord(kind, value) {
3767
3823
  if (!report2.valid) throw new OPFValidationError(report2);
3768
3824
  }
3769
3825
 
3770
- export { DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, findValidationRule, parseSource, resolveSlideContext, resolveSlideScriptMeasurement, validate, validateCatalogRecord, validationCategories, validationRules };
3826
+ export { CATALOG_SCHEMA, DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, catalogDisplayKinds, catalogSchemaNames, findValidationRule, parseSource, resolveSlideContext, resolveSlideScriptMeasurement, validate, validateCatalogRecord, validationCategories, validationRules };
@@ -1,6 +1,5 @@
1
- import { assertValid, resolveSlideScriptMeasurement, resolveSlideContext } from './chunk-KA3ZPFVT.js';
2
- import { resolveSlideVariables, usesSlideBuiltin, composeSlide, codeHighlightSlice, tableRowBoundaries, visitContentPayloads, slideTokenSpans, sliceNumberedItems } from './chunk-MBU42S5Y.js';
3
- import { checkCatalogsOption } from './chunk-SPFV27O5.js';
1
+ import { assertValid, resolveSlideScriptMeasurement, resolveSlideContext } from './chunk-7QUAOKS6.js';
2
+ import { resolveSlideVariables, checkCatalogsOption, usesSlideBuiltin, composeSlide, codeHighlightSlice, tableRowBoundaries, visitContentPayloads, regionAccepts, slideTokenSpans, sliceNumberedItems } from './chunk-UAXSW6VV.js';
4
3
 
5
4
  // src/pagination.ts
6
5
  var OPFPaginationError = class extends Error {
@@ -110,16 +109,6 @@ function paginateSlide(input, options = {}) {
110
109
  const { fonts, catalogs, minFontSize: _minFontSize, maxSlides: _maxSlides, reservedIds: _reservedIds, ...engineOptions } = options;
111
110
  const textMeasurement = fonts?.textMeasurement && options.presentation !== void 0 ? resolveSlideScriptMeasurement(options.presentation, sourceIndex, fonts.textMeasurement, { ...catalogs !== void 0 ? { catalogs } : {}, ...options.fontFamilies ? { fontFamilies: options.fontFamilies } : {} }) : fonts?.textMeasurement;
112
111
  const composeOptions = { ...engineOptions, ...textMeasurement ? { textMeasurement } : {} };
113
- const readableLayout = (layout) => {
114
- if (!isRecord(layout) || !Array.isArray(layout.placeholders) || !layout.placeholders.some((entry) => isRecord(entry) && entry.type === "group")) return layout;
115
- const visit = (entries) => entries.map((entry) => {
116
- if (!isRecord(entry) || entry.type !== "group") return entry;
117
- const own = isRecord(entry.composition) ? entry.composition : {};
118
- return { ...entry, composition: { ...own, ...typeof own.minFontSize === "number" ? { minFontSize: Math.max(minFontSize, own.minFontSize) } : {}, overflow: "warn" }, placeholders: Array.isArray(entry.placeholders) ? visit(entry.placeholders) : entry.placeholders };
119
- });
120
- return { ...layout, placeholders: visit(layout.placeholders) };
121
- };
122
- if (options.layout !== void 0) composeOptions.layout = readableLayout(options.layout);
123
112
  const presentationSlides = options.presentation?.slides;
124
113
  const slideCount = options.slideCount ?? (Array.isArray(presentationSlides) && presentationSlides.length ? presentationSlides.length : void 0);
125
114
  const logoContext = options.presentation !== void 0 ? { presentation: options.presentation, darkBackground: options.darkBackground === true } : {};
@@ -129,7 +118,18 @@ function paginateSlide(input, options = {}) {
129
118
  return composeSlide(resolveSlideVariables(withReadability(slide, true), { slideNumber, ...slideCount !== void 0 ? { slideCount } : {}, ...logoContext }), { ...composeOptions, slideNumber });
130
119
  };
131
120
  const initial = geometry(source);
132
- const fit = (diagnostics) => diagnostics.filter((issue) => issue.code === "text-overflow" || issue.code === "small-cell" || !!initial.furniture?.diagnostics.includes(issue));
121
+ const movable = (issue) => {
122
+ if (issue.region !== void 0) return true;
123
+ const match = /^slides\.\d+\.blocks\.(\d+)$/.exec(issue.path);
124
+ const block = match && Array.isArray(source.blocks) ? source.blocks[Number(match[1])] : void 0;
125
+ return block !== void 0 && (initial.regions ?? []).some((region) => regionAccepts(region, block));
126
+ };
127
+ const fit = (diagnostics) => diagnostics.filter((issue) => issue.code === "text-overflow" || issue.code === "small-cell" || issue.code === "layout-unplaced" && movable(issue) || !!initial.furniture?.diagnostics.includes(issue));
128
+ const regionOfBlock = /* @__PURE__ */ new Map();
129
+ for (const region of initial.regions ?? []) for (const content of [...region.content, ...region.overflow ?? []]) {
130
+ const match = /\.blocks\.(\d+)$/.exec(content);
131
+ if (match) regionOfBlock.set(Number(match[1]), { name: region.name, accepts: region.accepts });
132
+ }
133
133
  const repeatedMappings = (pageIndex) => {
134
134
  if (!initial.furniture) return [];
135
135
  const paths = new Set(initial.items.filter((item) => headingFields.has(item.field)).map((item) => item.path));
@@ -149,7 +149,13 @@ function paginateSlide(input, options = {}) {
149
149
  for (const key of path.slice(sourceBase.length + 1).split(".")) node = isRecord(node) || Array.isArray(node) ? node[key] : void 0;
150
150
  return node === void 0 ? fallback : node;
151
151
  };
152
- const leaves = initial.items.filter((item) => !headingFields.has(item.field)).map((item) => leafFor(item.path, item.field, sourceValue(item.path, item.value)));
152
+ const blockIndex = (path) => {
153
+ const match = /^slides\.\d+\.blocks\.(\d+)/.exec(path);
154
+ return match ? Number(match[1]) : -1;
155
+ };
156
+ const bodyItems = initial.items.filter((item) => !headingFields.has(item.field));
157
+ if (initial.regions) bodyItems.sort((a, b) => blockIndex(a.path) - blockIndex(b.path));
158
+ const leaves = bodyItems.map((item) => leafFor(item.path, item.field, sourceValue(item.path, item.value)));
153
159
  const leafPaths = new Set(leaves.map((leaf) => leaf.path));
154
160
  const slides = [], pages = [];
155
161
  let selected = /* @__PURE__ */ new Map();
@@ -192,7 +198,10 @@ function paginateSlide(input, options = {}) {
192
198
  const children = [];
193
199
  value.forEach((child, index) => {
194
200
  const projected = visit(child, `${childPath}.${index}`, `${outputPath}.${children.length}`);
195
- if (projected) children.push(projected);
201
+ if (!projected) return;
202
+ const region = root && pageIndex > 0 && projected.region === void 0 ? regionOfBlock.get(index) : void 0;
203
+ if (region && regionAccepts(region, projected)) projected.region = region.name;
204
+ children.push(projected);
196
205
  });
197
206
  if (children.length) {
198
207
  result.blocks = children;
@@ -0,0 +1,16 @@
1
+ import { OPFApiError } from './chunk-2AGWO7RM.js';
2
+ import { CATALOG_SCHEMA } from './chunk-7QUAOKS6.js';
3
+ import { CATALOG_SCHEMA as CATALOG_SCHEMA$1, gallery } from '@openpresentation/gallery';
4
+
5
+ function galleryMismatch(declared, reads = CATALOG_SCHEMA) {
6
+ if (declared === reads) return void 0;
7
+ return `@openpresentation/gallery targets catalog schema ${JSON.stringify(declared)}, and this @openpresentation/opf reads catalog schema ${reads}. Install the gallery release for schema ${reads} (the range in @openpresentation/opf's dependencies), or pass catalogs explicitly.`;
8
+ }
9
+ var mismatch = galleryMismatch(CATALOG_SCHEMA$1);
10
+ var DEFAULTS = Object.freeze([gallery]);
11
+ function defaultCatalogs() {
12
+ if (mismatch) throw new OPFApiError(mismatch, "gallery-schema-mismatch", { details: { gallery: CATALOG_SCHEMA$1, core: CATALOG_SCHEMA } });
13
+ return DEFAULTS;
14
+ }
15
+
16
+ export { defaultCatalogs, galleryMismatch };