@openpresentation/opf 0.18.3 → 0.19.0

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 (763) hide show
  1. package/README.md +18 -17
  2. package/dist/browser.js +18 -20
  3. package/dist/{catalog-refs-BSfGELpt.d.ts → catalog-refs-CSHevLn1.d.ts} +1 -1
  4. package/dist/{chunk-KA3ZPFVT.js → chunk-65GDO6TJ.js} +96 -40
  5. package/dist/{chunk-JCOSZTOI.js → chunk-A6COIVTD.js} +7 -2
  6. package/dist/{chunk-ZCFSDSUX.js → chunk-AK4UXIRP.js} +1 -1
  7. package/dist/{chunk-WXSPETQ6.js → chunk-F7PLNWHQ.js} +25 -3
  8. package/dist/{chunk-MSFE2HUK.js → chunk-FGUQHD37.js} +16 -13
  9. package/dist/{chunk-GVOLSWAJ.js → chunk-GRN3U5JT.js} +5 -5
  10. package/dist/{chunk-TRELE6I6.js → chunk-HBFRNOP4.js} +1 -1
  11. package/dist/{chunk-R7KIASS4.js → chunk-LRPSMQ62.js} +1 -1
  12. package/dist/chunk-OOT5AY4V.js +16 -0
  13. package/dist/{chunk-FO3WGS4R.js → chunk-OVBGGGKO.js} +25 -16
  14. package/dist/{chunk-2PEWUUBR.js → chunk-R5T4H4ZV.js} +350 -314
  15. package/dist/{chunk-L5YACLWK.js → chunk-SEUJIS55.js} +2 -2
  16. package/dist/{chunk-ECP7QPGK.js → chunk-SIQWYDFF.js} +6 -6
  17. package/dist/chunk-UJSAR6GF.js +181 -0
  18. package/dist/{chunk-IM337HP5.js → chunk-V3RGXJJS.js} +4 -5
  19. package/dist/{chunk-WHHLGDCQ.js → chunk-WHKFIFN7.js} +1 -1
  20. package/dist/{chunk-K5EG3UMS.js → chunk-XWMKAJSS.js} +46 -17
  21. package/dist/{chunk-PNINP5IF.js → chunk-YAHPQRVU.js} +1 -1
  22. package/dist/{chunk-MBU42S5Y.js → chunk-ZPCKGGI6.js} +1152 -273
  23. package/dist/{composition-C-OoqvAr.d.ts → composition-DilAHoWM.d.ts} +385 -99
  24. package/dist/composition.d.ts +2 -2
  25. package/dist/composition.js +1 -2
  26. package/dist/conversion-NJQHH4QW.js +19 -0
  27. package/dist/{conversion-BxZbBd_0.d.ts → conversion-k9l5pQsq.d.ts} +11 -11
  28. package/dist/convert.d.ts +3 -3
  29. package/dist/convert.js +7 -9
  30. package/dist/data.d.ts +1 -1
  31. package/dist/data.js +2 -3
  32. package/dist/{deck-report-DiDf_Vew.d.ts → deck-report-D19fyuNu.d.ts} +3 -3
  33. package/dist/deck.d.ts +6 -6
  34. package/dist/deck.js +10 -12
  35. package/dist/diff.js +5 -7
  36. package/dist/docs.js +27 -21
  37. package/dist/examples.d.ts +1 -1
  38. package/dist/examples.js +23853 -20994
  39. package/dist/font-policy.js +1 -1
  40. package/dist/format.js +2 -2
  41. package/dist/index.d.ts +22 -21
  42. package/dist/index.js +24 -27
  43. package/dist/markdown.d.ts +4 -4
  44. package/dist/markdown.js +7 -9
  45. package/dist/node-engine.d.ts +26 -9
  46. package/dist/node-engine.js +23 -24
  47. package/dist/{pagination-BaUjDrTz.d.ts → pagination-BNj5UQn5.d.ts} +3 -3
  48. package/dist/pagination.d.ts +3 -3
  49. package/dist/pagination.js +4 -6
  50. package/dist/patch.js +4 -6
  51. package/dist/{presentation-81rNihF0.d.ts → presentation-B_e2Djga.d.ts} +35 -19
  52. package/dist/repo-readme.js +1 -1
  53. package/dist/schemas.d.ts +2 -18
  54. package/dist/schemas.js +1 -1
  55. package/dist/spec/README.md +12 -19
  56. package/dist/spec/reference/engine-vocabularies.json +1 -1
  57. package/dist/spec/reference/font-policy.json +25 -3
  58. package/dist/spec/schemas/catalog-index.schema.json +3 -3
  59. package/dist/spec/schemas/catalog-manifest.schema.json +1 -1
  60. package/dist/spec/schemas/chart-type.schema.json +2 -2
  61. package/dist/spec/schemas/language.schema.json +1 -1
  62. package/dist/spec/schemas/layout-preview-index.schema.json +25 -11
  63. package/dist/spec/schemas/layout.schema.json +193 -272
  64. package/dist/spec/schemas/opf.schema.json +63 -18
  65. package/dist/spec/schemas/social-platform.schema.json +1 -1
  66. package/dist/spec/schemas/theme.schema.json +60 -0
  67. package/dist/spec-files.d.ts +2 -2
  68. package/dist/spec-files.js +1 -1
  69. package/dist/types.d.ts +115 -40
  70. package/dist/{validation-types-PbGDrNUr.d.ts → validation-types-CWhPuYUt.d.ts} +2 -2
  71. package/dist/validator-Cse-AD32.d.ts +73 -0
  72. package/dist/validator.d.ts +6 -60
  73. package/dist/validator.js +3 -5
  74. package/dist/yaml.d.ts +4 -4
  75. package/dist/yaml.js +7 -9
  76. package/package.json +6 -9
  77. package/dist/catalog-schemas-CinPh5WA.d.ts +0 -12
  78. package/dist/catalog.d.ts +0 -91
  79. package/dist/catalog.js +0 -3
  80. package/dist/chunk-HXHOZ7AH.js +0 -4937
  81. package/dist/chunk-SPFV27O5.js +0 -210
  82. package/dist/chunk-TRDXRRQK.js +0 -17
  83. package/dist/chunk-WCG3THTD.js +0 -23712
  84. package/dist/conversion-4CLOEG6O.js +0 -21
  85. package/dist/spec/catalogs/audiences/academic.json +0 -24
  86. package/dist/spec/catalogs/audiences/all-hands.json +0 -25
  87. package/dist/spec/catalogs/audiences/board.json +0 -24
  88. package/dist/spec/catalogs/audiences/candidates.json +0 -23
  89. package/dist/spec/catalogs/audiences/customer.json +0 -25
  90. package/dist/spec/catalogs/audiences/engineering-team.json +0 -23
  91. package/dist/spec/catalogs/audiences/executive.json +0 -24
  92. package/dist/spec/catalogs/audiences/general-public.json +0 -25
  93. package/dist/spec/catalogs/audiences/index.json +0 -105
  94. package/dist/spec/catalogs/audiences/internal-team.json +0 -25
  95. package/dist/spec/catalogs/audiences/investor.json +0 -25
  96. package/dist/spec/catalogs/audiences/marketing.json +0 -25
  97. package/dist/spec/catalogs/audiences/media.json +0 -24
  98. package/dist/spec/catalogs/audiences/partner.json +0 -25
  99. package/dist/spec/catalogs/audiences/regulatory.json +0 -25
  100. package/dist/spec/catalogs/audiences/sales.json +0 -25
  101. package/dist/spec/catalogs/audiences/technical.json +0 -25
  102. package/dist/spec/catalogs/chart-types/100pct-stacked-area.json +0 -21
  103. package/dist/spec/catalogs/chart-types/100pct-stacked-bar.json +0 -22
  104. package/dist/spec/catalogs/chart-types/100pct-stacked-column.json +0 -22
  105. package/dist/spec/catalogs/chart-types/area.json +0 -20
  106. package/dist/spec/catalogs/chart-types/bar.json +0 -22
  107. package/dist/spec/catalogs/chart-types/box-and-whisker.json +0 -21
  108. package/dist/spec/catalogs/chart-types/column.json +0 -22
  109. package/dist/spec/catalogs/chart-types/combo.json +0 -37
  110. package/dist/spec/catalogs/chart-types/doughnut.json +0 -20
  111. package/dist/spec/catalogs/chart-types/filled-radar.json +0 -21
  112. package/dist/spec/catalogs/chart-types/funnel.json +0 -21
  113. package/dist/spec/catalogs/chart-types/histogram.json +0 -21
  114. package/dist/spec/catalogs/chart-types/index.json +0 -171
  115. package/dist/spec/catalogs/chart-types/line-with-markers.json +0 -21
  116. package/dist/spec/catalogs/chart-types/line.json +0 -20
  117. package/dist/spec/catalogs/chart-types/pareto.json +0 -22
  118. package/dist/spec/catalogs/chart-types/pie.json +0 -20
  119. package/dist/spec/catalogs/chart-types/radar-with-markers.json +0 -21
  120. package/dist/spec/catalogs/chart-types/radar.json +0 -21
  121. package/dist/spec/catalogs/chart-types/scatter.json +0 -21
  122. package/dist/spec/catalogs/chart-types/stacked-area.json +0 -21
  123. package/dist/spec/catalogs/chart-types/stacked-bar.json +0 -22
  124. package/dist/spec/catalogs/chart-types/stacked-column.json +0 -22
  125. package/dist/spec/catalogs/chart-types/stacked-line-with-markers.json +0 -22
  126. package/dist/spec/catalogs/chart-types/stacked-line.json +0 -21
  127. package/dist/spec/catalogs/chart-types/treemap.json +0 -21
  128. package/dist/spec/catalogs/chart-types/waterfall.json +0 -21
  129. package/dist/spec/catalogs/chart-types/world.json +0 -21
  130. package/dist/spec/catalogs/color-schemes/black-and-white.json +0 -26
  131. package/dist/spec/catalogs/color-schemes/bold-red.json +0 -26
  132. package/dist/spec/catalogs/color-schemes/boost.json +0 -26
  133. package/dist/spec/catalogs/color-schemes/burnt-orange.json +0 -26
  134. package/dist/spec/catalogs/color-schemes/cool-horizon.json +0 -26
  135. package/dist/spec/catalogs/color-schemes/corporate-blue.json +0 -26
  136. package/dist/spec/catalogs/color-schemes/deep-purple.json +0 -26
  137. package/dist/spec/catalogs/color-schemes/forest-green.json +0 -26
  138. package/dist/spec/catalogs/color-schemes/golden-yellow.json +0 -26
  139. package/dist/spec/catalogs/color-schemes/index.json +0 -79
  140. package/dist/spec/catalogs/color-schemes/luxury.json +0 -26
  141. package/dist/spec/catalogs/color-schemes/pastel-red.json +0 -26
  142. package/dist/spec/catalogs/color-schemes/slate-gray.json +0 -26
  143. package/dist/spec/catalogs/color-schemes/steel-blue.json +0 -26
  144. package/dist/spec/catalogs/color-schemes/vibes.json +0 -26
  145. package/dist/spec/catalogs/font-schemes/angsana-new.json +0 -15
  146. package/dist/spec/catalogs/font-schemes/aparajita.json +0 -16
  147. package/dist/spec/catalogs/font-schemes/aptos.json +0 -13
  148. package/dist/spec/catalogs/font-schemes/arabic-typesetting.json +0 -15
  149. package/dist/spec/catalogs/font-schemes/arial.json +0 -13
  150. package/dist/spec/catalogs/font-schemes/batang.json +0 -15
  151. package/dist/spec/catalogs/font-schemes/bookman.json +0 -13
  152. package/dist/spec/catalogs/font-schemes/calibri.json +0 -13
  153. package/dist/spec/catalogs/font-schemes/century-schoolbook.json +0 -13
  154. package/dist/spec/catalogs/font-schemes/consolas.json +0 -14
  155. package/dist/spec/catalogs/font-schemes/constantia.json +0 -13
  156. package/dist/spec/catalogs/font-schemes/courier-new.json +0 -14
  157. package/dist/spec/catalogs/font-schemes/daunpenh.json +0 -15
  158. package/dist/spec/catalogs/font-schemes/david.json +0 -15
  159. package/dist/spec/catalogs/font-schemes/dilleniaupc.json +0 -15
  160. package/dist/spec/catalogs/font-schemes/fangsong.json +0 -15
  161. package/dist/spec/catalogs/font-schemes/garamond.json +0 -13
  162. package/dist/spec/catalogs/font-schemes/gautami.json +0 -15
  163. package/dist/spec/catalogs/font-schemes/georgia.json +0 -13
  164. package/dist/spec/catalogs/font-schemes/gisha.json +0 -16
  165. package/dist/spec/catalogs/font-schemes/grandview.json +0 -13
  166. package/dist/spec/catalogs/font-schemes/gungsuh.json +0 -15
  167. package/dist/spec/catalogs/font-schemes/impact.json +0 -13
  168. package/dist/spec/catalogs/font-schemes/index.json +0 -454
  169. package/dist/spec/catalogs/font-schemes/kalinga.json +0 -15
  170. package/dist/spec/catalogs/font-schemes/kartika.json +0 -15
  171. package/dist/spec/catalogs/font-schemes/khmer-ui.json +0 -15
  172. package/dist/spec/catalogs/font-schemes/latha.json +0 -15
  173. package/dist/spec/catalogs/font-schemes/lucida-sans.json +0 -13
  174. package/dist/spec/catalogs/font-schemes/malgun-gothic.json +0 -15
  175. package/dist/spec/catalogs/font-schemes/mangal.json +0 -17
  176. package/dist/spec/catalogs/font-schemes/meiryo.json +0 -15
  177. package/dist/spec/catalogs/font-schemes/microsoft-jhenghei.json +0 -15
  178. package/dist/spec/catalogs/font-schemes/microsoft-yahei.json +0 -18
  179. package/dist/spec/catalogs/font-schemes/mingliu.json +0 -15
  180. package/dist/spec/catalogs/font-schemes/miriam.json +0 -15
  181. package/dist/spec/catalogs/font-schemes/montserrat.json +0 -13
  182. package/dist/spec/catalogs/font-schemes/ms-mincho.json +0 -15
  183. package/dist/spec/catalogs/font-schemes/nirmala-ui.json +0 -15
  184. package/dist/spec/catalogs/font-schemes/noto-naksh-arabic.json +0 -15
  185. package/dist/spec/catalogs/font-schemes/noto-nastaliq-urdu.json +0 -16
  186. package/dist/spec/catalogs/font-schemes/noto-sans-arabic.json +0 -17
  187. package/dist/spec/catalogs/font-schemes/noto-sans-armenian.json +0 -15
  188. package/dist/spec/catalogs/font-schemes/noto-sans-bengali.json +0 -16
  189. package/dist/spec/catalogs/font-schemes/noto-sans-devangari.json +0 -16
  190. package/dist/spec/catalogs/font-schemes/noto-sans-ethiopic.json +0 -15
  191. package/dist/spec/catalogs/font-schemes/noto-sans-georgian.json +0 -15
  192. package/dist/spec/catalogs/font-schemes/noto-sans-gujarati.json +0 -15
  193. package/dist/spec/catalogs/font-schemes/noto-sans-gurmukhi.json +0 -15
  194. package/dist/spec/catalogs/font-schemes/noto-sans-hebrew.json +0 -15
  195. package/dist/spec/catalogs/font-schemes/noto-sans-jp.json +0 -15
  196. package/dist/spec/catalogs/font-schemes/noto-sans-kannada.json +0 -15
  197. package/dist/spec/catalogs/font-schemes/noto-sans-khmer.json +0 -15
  198. package/dist/spec/catalogs/font-schemes/noto-sans-kr.json +0 -15
  199. package/dist/spec/catalogs/font-schemes/noto-sans-malayalam.json +0 -15
  200. package/dist/spec/catalogs/font-schemes/noto-sans-mongolian.json +0 -15
  201. package/dist/spec/catalogs/font-schemes/noto-sans-oriya.json +0 -15
  202. package/dist/spec/catalogs/font-schemes/noto-sans-sc.json +0 -18
  203. package/dist/spec/catalogs/font-schemes/noto-sans-tamil.json +0 -15
  204. package/dist/spec/catalogs/font-schemes/noto-sans-tc.json +0 -15
  205. package/dist/spec/catalogs/font-schemes/noto-sans-telugu.json +0 -15
  206. package/dist/spec/catalogs/font-schemes/noto-sans-thai.json +0 -15
  207. package/dist/spec/catalogs/font-schemes/noto-sans.json +0 -18
  208. package/dist/spec/catalogs/font-schemes/nyala.json +0 -15
  209. package/dist/spec/catalogs/font-schemes/open-sans.json +0 -13
  210. package/dist/spec/catalogs/font-schemes/pmingliu.json +0 -15
  211. package/dist/spec/catalogs/font-schemes/poppins.json +0 -13
  212. package/dist/spec/catalogs/font-schemes/pt-serif.json +0 -13
  213. package/dist/spec/catalogs/font-schemes/raavi.json +0 -15
  214. package/dist/spec/catalogs/font-schemes/raleway.json +0 -13
  215. package/dist/spec/catalogs/font-schemes/roboto.json +0 -13
  216. package/dist/spec/catalogs/font-schemes/rockwell.json +0 -13
  217. package/dist/spec/catalogs/font-schemes/sakkal-majalla.json +0 -17
  218. package/dist/spec/catalogs/font-schemes/seaford.json +0 -13
  219. package/dist/spec/catalogs/font-schemes/segoe-ui-light.json +0 -13
  220. package/dist/spec/catalogs/font-schemes/segoe-ui.json +0 -13
  221. package/dist/spec/catalogs/font-schemes/shonar-bangla.json +0 -16
  222. package/dist/spec/catalogs/font-schemes/shruti.json +0 -15
  223. package/dist/spec/catalogs/font-schemes/simsun.json +0 -15
  224. package/dist/spec/catalogs/font-schemes/skeena.json +0 -13
  225. package/dist/spec/catalogs/font-schemes/sylfaen.json +0 -16
  226. package/dist/spec/catalogs/font-schemes/tahoma.json +0 -13
  227. package/dist/spec/catalogs/font-schemes/tenorite.json +0 -13
  228. package/dist/spec/catalogs/font-schemes/times-new-roman.json +0 -13
  229. package/dist/spec/catalogs/font-schemes/traditional-arabic.json +0 -17
  230. package/dist/spec/catalogs/font-schemes/trebuchet-ms.json +0 -13
  231. package/dist/spec/catalogs/font-schemes/tunga.json +0 -15
  232. package/dist/spec/catalogs/font-schemes/verdana.json +0 -13
  233. package/dist/spec/catalogs/font-schemes/vrinda.json +0 -15
  234. package/dist/spec/catalogs/font-schemes/yu-gothic.json +0 -15
  235. package/dist/spec/catalogs/languages/afrikaans.json +0 -12
  236. package/dist/spec/catalogs/languages/albanian.json +0 -12
  237. package/dist/spec/catalogs/languages/amharic.json +0 -12
  238. package/dist/spec/catalogs/languages/arabic.json +0 -12
  239. package/dist/spec/catalogs/languages/armenian.json +0 -12
  240. package/dist/spec/catalogs/languages/aymara.json +0 -12
  241. package/dist/spec/catalogs/languages/azerbaijani.json +0 -12
  242. package/dist/spec/catalogs/languages/bengali.json +0 -12
  243. package/dist/spec/catalogs/languages/berber-latin.json +0 -12
  244. package/dist/spec/catalogs/languages/bosnian-latin.json +0 -12
  245. package/dist/spec/catalogs/languages/bulgarian.json +0 -12
  246. package/dist/spec/catalogs/languages/catalan.json +0 -12
  247. package/dist/spec/catalogs/languages/cebuano.json +0 -12
  248. package/dist/spec/catalogs/languages/chinese-simplified.json +0 -12
  249. package/dist/spec/catalogs/languages/chinese-traditional.json +0 -12
  250. package/dist/spec/catalogs/languages/chittagonian.json +0 -12
  251. package/dist/spec/catalogs/languages/croatian.json +0 -12
  252. package/dist/spec/catalogs/languages/czech.json +0 -12
  253. package/dist/spec/catalogs/languages/danish.json +0 -12
  254. package/dist/spec/catalogs/languages/dutch.json +0 -12
  255. package/dist/spec/catalogs/languages/english-au.json +0 -12
  256. package/dist/spec/catalogs/languages/english-ca.json +0 -12
  257. package/dist/spec/catalogs/languages/english-gb.json +0 -12
  258. package/dist/spec/catalogs/languages/english-in.json +0 -12
  259. package/dist/spec/catalogs/languages/english-us.json +0 -12
  260. package/dist/spec/catalogs/languages/english.json +0 -12
  261. package/dist/spec/catalogs/languages/estonian.json +0 -12
  262. package/dist/spec/catalogs/languages/filipino.json +0 -12
  263. package/dist/spec/catalogs/languages/finnish.json +0 -12
  264. package/dist/spec/catalogs/languages/french.json +0 -12
  265. package/dist/spec/catalogs/languages/fulfulde.json +0 -12
  266. package/dist/spec/catalogs/languages/galician.json +0 -12
  267. package/dist/spec/catalogs/languages/georgian.json +0 -12
  268. package/dist/spec/catalogs/languages/german.json +0 -12
  269. package/dist/spec/catalogs/languages/greek.json +0 -12
  270. package/dist/spec/catalogs/languages/gujarati.json +0 -12
  271. package/dist/spec/catalogs/languages/hausa.json +0 -12
  272. package/dist/spec/catalogs/languages/hebrew.json +0 -12
  273. package/dist/spec/catalogs/languages/hindi.json +0 -12
  274. package/dist/spec/catalogs/languages/hungarian.json +0 -12
  275. package/dist/spec/catalogs/languages/igbo.json +0 -12
  276. package/dist/spec/catalogs/languages/index.json +0 -567
  277. package/dist/spec/catalogs/languages/indonesian.json +0 -12
  278. package/dist/spec/catalogs/languages/italian.json +0 -12
  279. package/dist/spec/catalogs/languages/japanese.json +0 -12
  280. package/dist/spec/catalogs/languages/kannada.json +0 -12
  281. package/dist/spec/catalogs/languages/kazakh.json +0 -12
  282. package/dist/spec/catalogs/languages/khmer.json +0 -12
  283. package/dist/spec/catalogs/languages/kinyarwanda.json +0 -12
  284. package/dist/spec/catalogs/languages/korean.json +0 -12
  285. package/dist/spec/catalogs/languages/kurmanji.json +0 -12
  286. package/dist/spec/catalogs/languages/latvian.json +0 -12
  287. package/dist/spec/catalogs/languages/lithuanian.json +0 -12
  288. package/dist/spec/catalogs/languages/macedonian.json +0 -12
  289. package/dist/spec/catalogs/languages/malagasy.json +0 -12
  290. package/dist/spec/catalogs/languages/malay.json +0 -12
  291. package/dist/spec/catalogs/languages/malayalam.json +0 -12
  292. package/dist/spec/catalogs/languages/maori.json +0 -12
  293. package/dist/spec/catalogs/languages/marathi.json +0 -12
  294. package/dist/spec/catalogs/languages/mongolian.json +0 -12
  295. package/dist/spec/catalogs/languages/nepali.json +0 -12
  296. package/dist/spec/catalogs/languages/norwegian.json +0 -12
  297. package/dist/spec/catalogs/languages/odia.json +0 -12
  298. package/dist/spec/catalogs/languages/oromo.json +0 -12
  299. package/dist/spec/catalogs/languages/pashto.json +0 -12
  300. package/dist/spec/catalogs/languages/persian.json +0 -12
  301. package/dist/spec/catalogs/languages/polish.json +0 -12
  302. package/dist/spec/catalogs/languages/portuguese.json +0 -12
  303. package/dist/spec/catalogs/languages/punjabi-gurmukhi.json +0 -12
  304. package/dist/spec/catalogs/languages/punjabi-shahmukhi.json +0 -12
  305. package/dist/spec/catalogs/languages/romanian.json +0 -12
  306. package/dist/spec/catalogs/languages/russian.json +0 -12
  307. package/dist/spec/catalogs/languages/serbian-cyrillic.json +0 -12
  308. package/dist/spec/catalogs/languages/serbian-latin.json +0 -12
  309. package/dist/spec/catalogs/languages/shona.json +0 -12
  310. package/dist/spec/catalogs/languages/slovak.json +0 -12
  311. package/dist/spec/catalogs/languages/slovenian.json +0 -12
  312. package/dist/spec/catalogs/languages/somali.json +0 -12
  313. package/dist/spec/catalogs/languages/spanish.json +0 -12
  314. package/dist/spec/catalogs/languages/swahili.json +0 -12
  315. package/dist/spec/catalogs/languages/swedish.json +0 -12
  316. package/dist/spec/catalogs/languages/tagalog.json +0 -12
  317. package/dist/spec/catalogs/languages/tajik.json +0 -12
  318. package/dist/spec/catalogs/languages/tamil.json +0 -12
  319. package/dist/spec/catalogs/languages/telugu.json +0 -12
  320. package/dist/spec/catalogs/languages/thai.json +0 -12
  321. package/dist/spec/catalogs/languages/turkish.json +0 -12
  322. package/dist/spec/catalogs/languages/ukrainian.json +0 -12
  323. package/dist/spec/catalogs/languages/urdu.json +0 -12
  324. package/dist/spec/catalogs/languages/uzbek-latin.json +0 -12
  325. package/dist/spec/catalogs/languages/vietnamese-quoc-ngu.json +0 -12
  326. package/dist/spec/catalogs/languages/xhosa.json +0 -12
  327. package/dist/spec/catalogs/languages/yoruba.json +0 -12
  328. package/dist/spec/catalogs/languages/zulu.json +0 -12
  329. package/dist/spec/catalogs/layouts/action-plan.json +0 -29
  330. package/dist/spec/catalogs/layouts/agenda.json +0 -28
  331. package/dist/spec/catalogs/layouts/appendix-index.json +0 -30
  332. package/dist/spec/catalogs/layouts/architecture-stack.json +0 -29
  333. package/dist/spec/catalogs/layouts/assumptions-dependencies.json +0 -29
  334. package/dist/spec/catalogs/layouts/before-after.json +0 -35
  335. package/dist/spec/catalogs/layouts/benchmark-target-table.json +0 -29
  336. package/dist/spec/catalogs/layouts/blank.json +0 -16
  337. package/dist/spec/catalogs/layouts/bullet-list.json +0 -32
  338. package/dist/spec/catalogs/layouts/business-model-canvas.json +0 -94
  339. package/dist/spec/catalogs/layouts/capability-map.json +0 -80
  340. package/dist/spec/catalogs/layouts/case-study.json +0 -29
  341. package/dist/spec/catalogs/layouts/chapter-recap.json +0 -28
  342. package/dist/spec/catalogs/layouts/chart-1x-title-center.json +0 -30
  343. package/dist/spec/catalogs/layouts/chart-1x.json +0 -34
  344. package/dist/spec/catalogs/layouts/chart-2x-title-center.json +0 -36
  345. package/dist/spec/catalogs/layouts/chart-2x-vertical-title-left.json +0 -37
  346. package/dist/spec/catalogs/layouts/chart-2x.json +0 -65
  347. package/dist/spec/catalogs/layouts/chart-3x-bottom-vertical-title-left.json +0 -52
  348. package/dist/spec/catalogs/layouts/chart-3x-left-title-center.json +0 -51
  349. package/dist/spec/catalogs/layouts/chart-3x-left.json +0 -46
  350. package/dist/spec/catalogs/layouts/chart-3x-right-title-center.json +0 -51
  351. package/dist/spec/catalogs/layouts/chart-3x-right.json +0 -46
  352. package/dist/spec/catalogs/layouts/chart-3x-title-center.json +0 -39
  353. package/dist/spec/catalogs/layouts/chart-3x-top-vertical-title-left.json +0 -52
  354. package/dist/spec/catalogs/layouts/chart-3x.json +0 -83
  355. package/dist/spec/catalogs/layouts/circular-lifecycle.json +0 -29
  356. package/dist/spec/catalogs/layouts/code-1x.json +0 -29
  357. package/dist/spec/catalogs/layouts/comparison.json +0 -35
  358. package/dist/spec/catalogs/layouts/competitive-landscape.json +0 -30
  359. package/dist/spec/catalogs/layouts/customer-journey.json +0 -30
  360. package/dist/spec/catalogs/layouts/customer-logos.json +0 -32
  361. package/dist/spec/catalogs/layouts/dashboard.json +0 -67
  362. package/dist/spec/catalogs/layouts/data-visualization.json +0 -39
  363. package/dist/spec/catalogs/layouts/decision-tree.json +0 -30
  364. package/dist/spec/catalogs/layouts/detailed-data-table.json +0 -35
  365. package/dist/spec/catalogs/layouts/ecosystem-map.json +0 -30
  366. package/dist/spec/catalogs/layouts/executive-decision.json +0 -32
  367. package/dist/spec/catalogs/layouts/executive-summary.json +0 -32
  368. package/dist/spec/catalogs/layouts/extract/canonical.json +0 -575
  369. package/dist/spec/catalogs/layouts/faq.json +0 -29
  370. package/dist/spec/catalogs/layouts/feature-comparison-matrix.json +0 -29
  371. package/dist/spec/catalogs/layouts/forecast-scenario.json +0 -39
  372. package/dist/spec/catalogs/layouts/funnel-pyramid.json +0 -32
  373. package/dist/spec/catalogs/layouts/gantt-project-plan.json +0 -32
  374. package/dist/spec/catalogs/layouts/geographic-map.json +0 -30
  375. package/dist/spec/catalogs/layouts/heatmap-cohort.json +0 -32
  376. package/dist/spec/catalogs/layouts/hub-and-spoke.json +0 -29
  377. package/dist/spec/catalogs/layouts/icon-grid.json +0 -30
  378. package/dist/spec/catalogs/layouts/image-1x-crop-title-center.json +0 -32
  379. package/dist/spec/catalogs/layouts/image-1x-crop-title-left.json +0 -32
  380. package/dist/spec/catalogs/layouts/image-1x-crop.json +0 -27
  381. package/dist/spec/catalogs/layouts/image-1x-fit-title-center.json +0 -32
  382. package/dist/spec/catalogs/layouts/image-1x.json +0 -32
  383. package/dist/spec/catalogs/layouts/image-2x-crop-title-center.json +0 -38
  384. package/dist/spec/catalogs/layouts/image-2x-crop-vertical-title-left.json +0 -39
  385. package/dist/spec/catalogs/layouts/image-2x-crop-vertical.json +0 -34
  386. package/dist/spec/catalogs/layouts/image-2x-crop.json +0 -33
  387. package/dist/spec/catalogs/layouts/image-2x-fit-title-center.json +0 -38
  388. package/dist/spec/catalogs/layouts/image-2x-fit-vertical-title-left.json +0 -39
  389. package/dist/spec/catalogs/layouts/image-2x-fit-vertical.json +0 -34
  390. package/dist/spec/catalogs/layouts/image-2x.json +0 -63
  391. package/dist/spec/catalogs/layouts/image-3x-crop-title-center.json +0 -41
  392. package/dist/spec/catalogs/layouts/image-3x-crop-vertical-title-left.json +0 -42
  393. package/dist/spec/catalogs/layouts/image-3x-crop-vertical.json +0 -37
  394. package/dist/spec/catalogs/layouts/image-3x-crop.json +0 -36
  395. package/dist/spec/catalogs/layouts/image-3x-fit-title-center.json +0 -41
  396. package/dist/spec/catalogs/layouts/image-3x-fit-vertical-title-left.json +0 -42
  397. package/dist/spec/catalogs/layouts/image-3x-fit-vertical.json +0 -37
  398. package/dist/spec/catalogs/layouts/image-3x-fit.json +0 -36
  399. package/dist/spec/catalogs/layouts/image-3x.json +0 -81
  400. package/dist/spec/catalogs/layouts/image-focus.json +0 -30
  401. package/dist/spec/catalogs/layouts/image-only-1x-crop-title-center.json +0 -31
  402. package/dist/spec/catalogs/layouts/image-only-1x-fit-title-center.json +0 -31
  403. package/dist/spec/catalogs/layouts/image-only-2x-crop-title-center.json +0 -37
  404. package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical-title-left.json +0 -38
  405. package/dist/spec/catalogs/layouts/image-only-2x-crop-vertical.json +0 -33
  406. package/dist/spec/catalogs/layouts/image-only-2x-fit-title-center.json +0 -37
  407. package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical-title-left.json +0 -38
  408. package/dist/spec/catalogs/layouts/image-only-2x-fit-vertical.json +0 -33
  409. package/dist/spec/catalogs/layouts/image-only-3x-crop-title-center.json +0 -40
  410. package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical-title-left.json +0 -41
  411. package/dist/spec/catalogs/layouts/image-only-3x-crop-vertical.json +0 -36
  412. package/dist/spec/catalogs/layouts/image-only-3x-crop.json +0 -35
  413. package/dist/spec/catalogs/layouts/image-only-3x-fit-title-center.json +0 -40
  414. package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical-title-left.json +0 -41
  415. package/dist/spec/catalogs/layouts/image-only-3x-fit-vertical.json +0 -36
  416. package/dist/spec/catalogs/layouts/image-only-3x-fit.json +0 -35
  417. package/dist/spec/catalogs/layouts/index.json +0 -1399
  418. package/dist/spec/catalogs/layouts/key-takeaway.json +0 -25
  419. package/dist/spec/catalogs/layouts/kpi-scorecard.json +0 -83
  420. package/dist/spec/catalogs/layouts/list-1x-box-title-center.json +0 -32
  421. package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-center.json +0 -33
  422. package/dist/spec/catalogs/layouts/list-1x-box-vertical-title-left.json +0 -33
  423. package/dist/spec/catalogs/layouts/list-1x-box-vertical.json +0 -28
  424. package/dist/spec/catalogs/layouts/list-1x-box.json +0 -27
  425. package/dist/spec/catalogs/layouts/list-1x-itemimage-title-center.json +0 -32
  426. package/dist/spec/catalogs/layouts/list-1x-itemimage-vertical-title-center.json +0 -33
  427. package/dist/spec/catalogs/layouts/list-1x-title-center.json +0 -31
  428. package/dist/spec/catalogs/layouts/list-1x-vertical-title-center.json +0 -32
  429. package/dist/spec/catalogs/layouts/list-1x.json +0 -29
  430. package/dist/spec/catalogs/layouts/list-2x-box-title-center.json +0 -38
  431. package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-center.json +0 -39
  432. package/dist/spec/catalogs/layouts/list-2x-box-vertical-title-left.json +0 -39
  433. package/dist/spec/catalogs/layouts/list-2x-box-vertical.json +0 -34
  434. package/dist/spec/catalogs/layouts/list-2x-box.json +0 -33
  435. package/dist/spec/catalogs/layouts/list-2x-itemimage-title-center.json +0 -38
  436. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-center.json +0 -39
  437. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical-title-left.json +0 -39
  438. package/dist/spec/catalogs/layouts/list-2x-itemimage-vertical.json +0 -34
  439. package/dist/spec/catalogs/layouts/list-2x-title-center.json +0 -37
  440. package/dist/spec/catalogs/layouts/list-2x-vertical-title-center.json +0 -38
  441. package/dist/spec/catalogs/layouts/list-2x-vertical-title-left.json +0 -38
  442. package/dist/spec/catalogs/layouts/list-2x-vertical.json +0 -33
  443. package/dist/spec/catalogs/layouts/list-2x.json +0 -35
  444. package/dist/spec/catalogs/layouts/list-3x-box-title-center.json +0 -41
  445. package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-center.json +0 -42
  446. package/dist/spec/catalogs/layouts/list-3x-box-vertical-title-left.json +0 -42
  447. package/dist/spec/catalogs/layouts/list-3x-box-vertical.json +0 -37
  448. package/dist/spec/catalogs/layouts/list-3x-box.json +0 -36
  449. package/dist/spec/catalogs/layouts/list-3x-itemimage-title-center.json +0 -41
  450. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-center.json +0 -42
  451. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical-title-left.json +0 -42
  452. package/dist/spec/catalogs/layouts/list-3x-itemimage-vertical.json +0 -37
  453. package/dist/spec/catalogs/layouts/list-3x-itemimage.json +0 -36
  454. package/dist/spec/catalogs/layouts/list-3x-title-center.json +0 -40
  455. package/dist/spec/catalogs/layouts/list-3x-vertical-title-center.json +0 -41
  456. package/dist/spec/catalogs/layouts/list-3x-vertical-title-left.json +0 -41
  457. package/dist/spec/catalogs/layouts/list-3x-vertical.json +0 -36
  458. package/dist/spec/catalogs/layouts/list-3x.json +0 -38
  459. package/dist/spec/catalogs/layouts/list-4x-box-title-center.json +0 -45
  460. package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-center.json +0 -45
  461. package/dist/spec/catalogs/layouts/list-4x-box-vertical-title-left.json +0 -45
  462. package/dist/spec/catalogs/layouts/list-4x-box-vertical.json +0 -40
  463. package/dist/spec/catalogs/layouts/list-4x-box.json +0 -40
  464. package/dist/spec/catalogs/layouts/list-4x-itemimage-title-center.json +0 -45
  465. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-center.json +0 -45
  466. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical-title-left.json +0 -45
  467. package/dist/spec/catalogs/layouts/list-4x-itemimage-vertical.json +0 -40
  468. package/dist/spec/catalogs/layouts/list-4x-title-center.json +0 -44
  469. package/dist/spec/catalogs/layouts/list-4x-vertical-title-center.json +0 -44
  470. package/dist/spec/catalogs/layouts/list-4x-vertical-title-left.json +0 -44
  471. package/dist/spec/catalogs/layouts/list-4x-vertical.json +0 -39
  472. package/dist/spec/catalogs/layouts/list-4x.json +0 -42
  473. package/dist/spec/catalogs/layouts/list-5x-box-title-center.json +0 -48
  474. package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-center.json +0 -50
  475. package/dist/spec/catalogs/layouts/list-5x-box-vertical-title-left.json +0 -50
  476. package/dist/spec/catalogs/layouts/list-5x-box-vertical.json +0 -45
  477. package/dist/spec/catalogs/layouts/list-5x-box.json +0 -43
  478. package/dist/spec/catalogs/layouts/list-5x-itemimage-title-center.json +0 -48
  479. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-center.json +0 -48
  480. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical-title-left.json +0 -48
  481. package/dist/spec/catalogs/layouts/list-5x-itemimage-vertical.json +0 -43
  482. package/dist/spec/catalogs/layouts/list-5x-title-center.json +0 -47
  483. package/dist/spec/catalogs/layouts/list-5x-vertical-title-center.json +0 -47
  484. package/dist/spec/catalogs/layouts/list-5x-vertical-title-left.json +0 -47
  485. package/dist/spec/catalogs/layouts/list-5x-vertical.json +0 -42
  486. package/dist/spec/catalogs/layouts/list-5x.json +0 -45
  487. package/dist/spec/catalogs/layouts/list-6x-box-title-center.json +0 -51
  488. package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-center.json +0 -53
  489. package/dist/spec/catalogs/layouts/list-6x-box-vertical-title-left.json +0 -53
  490. package/dist/spec/catalogs/layouts/list-6x-box-vertical.json +0 -48
  491. package/dist/spec/catalogs/layouts/list-6x-box.json +0 -46
  492. package/dist/spec/catalogs/layouts/list-6x-itemimage-title-center.json +0 -51
  493. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-center.json +0 -51
  494. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical-title-left.json +0 -51
  495. package/dist/spec/catalogs/layouts/list-6x-itemimage-vertical.json +0 -46
  496. package/dist/spec/catalogs/layouts/list-6x-title-center.json +0 -50
  497. package/dist/spec/catalogs/layouts/list-6x-vertical-title-center.json +0 -50
  498. package/dist/spec/catalogs/layouts/list-6x-vertical-title-left.json +0 -50
  499. package/dist/spec/catalogs/layouts/list-6x-vertical.json +0 -45
  500. package/dist/spec/catalogs/layouts/list-6x.json +0 -48
  501. package/dist/spec/catalogs/layouts/logic-tree.json +0 -98
  502. package/dist/spec/catalogs/layouts/market-size.json +0 -53
  503. package/dist/spec/catalogs/layouts/matrix-quadrant.json +0 -42
  504. package/dist/spec/catalogs/layouts/media-1x.json +0 -29
  505. package/dist/spec/catalogs/layouts/network-dependency-map.json +0 -30
  506. package/dist/spec/catalogs/layouts/number-1x-box-title-center.json +0 -30
  507. package/dist/spec/catalogs/layouts/number-1x-box.json +0 -25
  508. package/dist/spec/catalogs/layouts/number-1x-title-center.json +0 -29
  509. package/dist/spec/catalogs/layouts/number-1x.json +0 -28
  510. package/dist/spec/catalogs/layouts/number-2x-box-title-center.json +0 -36
  511. package/dist/spec/catalogs/layouts/number-2x-box.json +0 -31
  512. package/dist/spec/catalogs/layouts/number-2x-title-center.json +0 -35
  513. package/dist/spec/catalogs/layouts/number-2x.json +0 -34
  514. package/dist/spec/catalogs/layouts/number-3x-box-title-center.json +0 -39
  515. package/dist/spec/catalogs/layouts/number-3x-box.json +0 -34
  516. package/dist/spec/catalogs/layouts/number-3x-title-center.json +0 -38
  517. package/dist/spec/catalogs/layouts/number-3x.json +0 -37
  518. package/dist/spec/catalogs/layouts/number-4x-box-title-center.json +0 -43
  519. package/dist/spec/catalogs/layouts/number-4x-box.json +0 -38
  520. package/dist/spec/catalogs/layouts/number-4x-title-center.json +0 -42
  521. package/dist/spec/catalogs/layouts/number-4x.json +0 -41
  522. package/dist/spec/catalogs/layouts/number-5x-box-title-center.json +0 -46
  523. package/dist/spec/catalogs/layouts/number-5x-box.json +0 -41
  524. package/dist/spec/catalogs/layouts/number-5x-title-center.json +0 -45
  525. package/dist/spec/catalogs/layouts/number-5x.json +0 -44
  526. package/dist/spec/catalogs/layouts/number-6x-box-title-center.json +0 -49
  527. package/dist/spec/catalogs/layouts/number-6x-box.json +0 -44
  528. package/dist/spec/catalogs/layouts/number-6x-title-center.json +0 -48
  529. package/dist/spec/catalogs/layouts/number-6x.json +0 -47
  530. package/dist/spec/catalogs/layouts/one-column-explainer.json +0 -29
  531. package/dist/spec/catalogs/layouts/org-chart.json +0 -86
  532. package/dist/spec/catalogs/layouts/persona-grid.json +0 -30
  533. package/dist/spec/catalogs/layouts/photo-grid.json +0 -43
  534. package/dist/spec/catalogs/layouts/pricing-table.json +0 -29
  535. package/dist/spec/catalogs/layouts/process-flow.json +0 -29
  536. package/dist/spec/catalogs/layouts/product-feature.json +0 -30
  537. package/dist/spec/catalogs/layouts/pros-cons.json +0 -35
  538. package/dist/spec/catalogs/layouts/qa-discussion.json +0 -30
  539. package/dist/spec/catalogs/layouts/quote-1x.json +0 -23
  540. package/dist/spec/catalogs/layouts/quote-highlight.json +0 -29
  541. package/dist/spec/catalogs/layouts/raci-matrix.json +0 -29
  542. package/dist/spec/catalogs/layouts/risk-heatmap.json +0 -29
  543. package/dist/spec/catalogs/layouts/roadmap.json +0 -29
  544. package/dist/spec/catalogs/layouts/screenshot-walkthrough.json +0 -30
  545. package/dist/spec/catalogs/layouts/section-divider.json +0 -28
  546. package/dist/spec/catalogs/layouts/single-message-statement.json +0 -25
  547. package/dist/spec/catalogs/layouts/stats-metrics.json +0 -39
  548. package/dist/spec/catalogs/layouts/status-rag.json +0 -29
  549. package/dist/spec/catalogs/layouts/swimlane-process.json +0 -30
  550. package/dist/spec/catalogs/layouts/swot-analysis.json +0 -42
  551. package/dist/spec/catalogs/layouts/table-1x.json +0 -29
  552. package/dist/spec/catalogs/layouts/team-bio.json +0 -30
  553. package/dist/spec/catalogs/layouts/testimonial-grid.json +0 -38
  554. package/dist/spec/catalogs/layouts/text-1x-box-title-center.json +0 -31
  555. package/dist/spec/catalogs/layouts/text-1x-box-title-left.json +0 -31
  556. package/dist/spec/catalogs/layouts/text-1x-center-box-title-center.json +0 -31
  557. package/dist/spec/catalogs/layouts/text-1x-center-box-title-left.json +0 -31
  558. package/dist/spec/catalogs/layouts/text-1x-center-box.json +0 -26
  559. package/dist/spec/catalogs/layouts/text-1x-center-title-center.json +0 -30
  560. package/dist/spec/catalogs/layouts/text-1x-center-title-left.json +0 -30
  561. package/dist/spec/catalogs/layouts/text-1x-center.json +0 -25
  562. package/dist/spec/catalogs/layouts/text-1x-left-box.json +0 -26
  563. package/dist/spec/catalogs/layouts/text-1x-title-center.json +0 -30
  564. package/dist/spec/catalogs/layouts/text-1x.json +0 -23
  565. package/dist/spec/catalogs/layouts/text-2x-box-title-center.json +0 -37
  566. package/dist/spec/catalogs/layouts/text-2x-box-vertical-title-left.json +0 -37
  567. package/dist/spec/catalogs/layouts/text-2x-center-box-title-center.json +0 -37
  568. package/dist/spec/catalogs/layouts/text-2x-center-box-vertical-title-left.json +0 -37
  569. package/dist/spec/catalogs/layouts/text-2x-center-box.json +0 -32
  570. package/dist/spec/catalogs/layouts/text-2x-center-title-center.json +0 -36
  571. package/dist/spec/catalogs/layouts/text-2x-center-vertical-title-left.json +0 -36
  572. package/dist/spec/catalogs/layouts/text-2x-center.json +0 -31
  573. package/dist/spec/catalogs/layouts/text-2x-left-box.json +0 -32
  574. package/dist/spec/catalogs/layouts/text-2x-title-center.json +0 -36
  575. package/dist/spec/catalogs/layouts/text-2x-vertical-title-left.json +0 -36
  576. package/dist/spec/catalogs/layouts/text-2x.json +0 -29
  577. package/dist/spec/catalogs/layouts/text-3x-box-title-center.json +0 -40
  578. package/dist/spec/catalogs/layouts/text-3x-box-vertical-title-left.json +0 -41
  579. package/dist/spec/catalogs/layouts/text-3x-center-box-title-center.json +0 -40
  580. package/dist/spec/catalogs/layouts/text-3x-center-box-vertical-title-left.json +0 -41
  581. package/dist/spec/catalogs/layouts/text-3x-center-box.json +0 -35
  582. package/dist/spec/catalogs/layouts/text-3x-center-title-center.json +0 -39
  583. package/dist/spec/catalogs/layouts/text-3x-center-vertical-title-left.json +0 -40
  584. package/dist/spec/catalogs/layouts/text-3x-center.json +0 -34
  585. package/dist/spec/catalogs/layouts/text-3x-left-box.json +0 -35
  586. package/dist/spec/catalogs/layouts/text-3x-left.json +0 -34
  587. package/dist/spec/catalogs/layouts/text-3x-title-center.json +0 -39
  588. package/dist/spec/catalogs/layouts/text-3x-vertical-title-left.json +0 -40
  589. package/dist/spec/catalogs/layouts/text-3x.json +0 -32
  590. package/dist/spec/catalogs/layouts/thank-you-cta.json +0 -28
  591. package/dist/spec/catalogs/layouts/three-column.json +0 -39
  592. package/dist/spec/catalogs/layouts/timeline-1x.json +0 -23
  593. package/dist/spec/catalogs/layouts/timeline.json +0 -32
  594. package/dist/spec/catalogs/layouts/title-center-box.json +0 -27
  595. package/dist/spec/catalogs/layouts/title-center-image-bottom.json +0 -34
  596. package/dist/spec/catalogs/layouts/title-center-image-top.json +0 -34
  597. package/dist/spec/catalogs/layouts/title-center.json +0 -26
  598. package/dist/spec/catalogs/layouts/title-left-image-bottom.json +0 -34
  599. package/dist/spec/catalogs/layouts/title-left-image-left.json +0 -34
  600. package/dist/spec/catalogs/layouts/title-left-image-right.json +0 -34
  601. package/dist/spec/catalogs/layouts/title-left-image-top.json +0 -34
  602. package/dist/spec/catalogs/layouts/title-slide.json +0 -28
  603. package/dist/spec/catalogs/layouts/title-subtitle.json +0 -23
  604. package/dist/spec/catalogs/layouts/title.json +0 -20
  605. package/dist/spec/catalogs/layouts/two-column.json +0 -36
  606. package/dist/spec/catalogs/layouts/venn-overlap.json +0 -29
  607. package/dist/spec/catalogs/layouts/waterfall-bridge.json +0 -39
  608. package/dist/spec/catalogs/layouts/wheel-radial.json +0 -29
  609. package/dist/spec/catalogs/manifest.json +0 -111
  610. package/dist/spec/catalogs/narratives/board-meeting.json +0 -192
  611. package/dist/spec/catalogs/narratives/business-narrative.json +0 -87
  612. package/dist/spec/catalogs/narratives/business-review.json +0 -119
  613. package/dist/spec/catalogs/narratives/capacity-planning.json +0 -88
  614. package/dist/spec/catalogs/narratives/challenge-resolution.json +0 -80
  615. package/dist/spec/catalogs/narratives/change-story.json +0 -64
  616. package/dist/spec/catalogs/narratives/classic-story.json +0 -78
  617. package/dist/spec/catalogs/narratives/company-intro.json +0 -96
  618. package/dist/spec/catalogs/narratives/conference-talk.json +0 -54
  619. package/dist/spec/catalogs/narratives/data-story.json +0 -65
  620. package/dist/spec/catalogs/narratives/early-startup-pitch.json +0 -119
  621. package/dist/spec/catalogs/narratives/educate.json +0 -95
  622. package/dist/spec/catalogs/narratives/employee-review.json +0 -87
  623. package/dist/spec/catalogs/narratives/failure-analysis.json +0 -104
  624. package/dist/spec/catalogs/narratives/focus.json +0 -120
  625. package/dist/spec/catalogs/narratives/golden-circle.json +0 -50
  626. package/dist/spec/catalogs/narratives/heros-journey.json +0 -64
  627. package/dist/spec/catalogs/narratives/index.json +0 -1041
  628. package/dist/spec/catalogs/narratives/innovation.json +0 -96
  629. package/dist/spec/catalogs/narratives/justice.json +0 -112
  630. package/dist/spec/catalogs/narratives/marketing-strategy.json +0 -111
  631. package/dist/spec/catalogs/narratives/performance-improvement-plan.json +0 -87
  632. package/dist/spec/catalogs/narratives/performance-review.json +0 -111
  633. package/dist/spec/catalogs/narratives/persuade.json +0 -94
  634. package/dist/spec/catalogs/narratives/persuasive-sales.json +0 -87
  635. package/dist/spec/catalogs/narratives/pitch-deck.json +0 -107
  636. package/dist/spec/catalogs/narratives/problem-solution.json +0 -61
  637. package/dist/spec/catalogs/narratives/product-launch.json +0 -104
  638. package/dist/spec/catalogs/narratives/project-proposal.json +0 -104
  639. package/dist/spec/catalogs/narratives/pyramid-principle.json +0 -48
  640. package/dist/spec/catalogs/narratives/qbr.json +0 -85
  641. package/dist/spec/catalogs/narratives/rags-to-riches.json +0 -80
  642. package/dist/spec/catalogs/narratives/reveal.json +0 -87
  643. package/dist/spec/catalogs/narratives/scqa.json +0 -55
  644. package/dist/spec/catalogs/narratives/situation-complication-resolution.json +0 -56
  645. package/dist/spec/catalogs/narratives/sparkline.json +0 -56
  646. package/dist/spec/catalogs/narratives/star-method.json +0 -56
  647. package/dist/spec/catalogs/narratives/status-update.json +0 -72
  648. package/dist/spec/catalogs/narratives/strategic-advisory.json +0 -85
  649. package/dist/spec/catalogs/narratives/strategic-narrative.json +0 -61
  650. package/dist/spec/catalogs/narratives/survey-analysis.json +0 -104
  651. package/dist/spec/catalogs/narratives/survival-story.json +0 -103
  652. package/dist/spec/catalogs/narratives/transformation-arc.json +0 -50
  653. package/dist/spec/catalogs/narratives/trend-analysis.json +0 -79
  654. package/dist/spec/catalogs/narratives/underdog-victory.json +0 -87
  655. package/dist/spec/catalogs/narratives/venture-pitch.json +0 -109
  656. package/dist/spec/catalogs/narratives/vision-roadmap.json +0 -65
  657. package/dist/spec/catalogs/narratives/weekly-progress.json +0 -103
  658. package/dist/spec/catalogs/narratives/what-so-what-now-what.json +0 -48
  659. package/dist/spec/catalogs/purposes/align.json +0 -16
  660. package/dist/spec/catalogs/purposes/decide.json +0 -16
  661. package/dist/spec/catalogs/purposes/educate.json +0 -16
  662. package/dist/spec/catalogs/purposes/index.json +0 -63
  663. package/dist/spec/catalogs/purposes/inform.json +0 -16
  664. package/dist/spec/catalogs/purposes/persuade.json +0 -16
  665. package/dist/spec/catalogs/purposes/pitch.json +0 -16
  666. package/dist/spec/catalogs/purposes/plan.json +0 -16
  667. package/dist/spec/catalogs/purposes/report.json +0 -16
  668. package/dist/spec/catalogs/purposes/sell.json +0 -16
  669. package/dist/spec/catalogs/social-platforms/bluesky.json +0 -14
  670. package/dist/spec/catalogs/social-platforms/facebook.json +0 -14
  671. package/dist/spec/catalogs/social-platforms/github.json +0 -15
  672. package/dist/spec/catalogs/social-platforms/index.json +0 -69
  673. package/dist/spec/catalogs/social-platforms/instagram.json +0 -13
  674. package/dist/spec/catalogs/social-platforms/linkedin.json +0 -15
  675. package/dist/spec/catalogs/social-platforms/mastodon.json +0 -14
  676. package/dist/spec/catalogs/social-platforms/threads.json +0 -13
  677. package/dist/spec/catalogs/social-platforms/tiktok.json +0 -14
  678. package/dist/spec/catalogs/social-platforms/x.json +0 -14
  679. package/dist/spec/catalogs/social-platforms/youtube.json +0 -14
  680. package/dist/spec/catalogs/themes/bold.json +0 -13
  681. package/dist/spec/catalogs/themes/classic.json +0 -13
  682. package/dist/spec/catalogs/themes/dark.json +0 -13
  683. package/dist/spec/catalogs/themes/index.json +0 -33
  684. package/dist/spec/catalogs/themes/minimal.json +0 -13
  685. package/dist/spec/catalogs/tones/authoritative.json +0 -31
  686. package/dist/spec/catalogs/tones/casual.json +0 -31
  687. package/dist/spec/catalogs/tones/conversational.json +0 -31
  688. package/dist/spec/catalogs/tones/formal.json +0 -31
  689. package/dist/spec/catalogs/tones/index.json +0 -51
  690. package/dist/spec/catalogs/tones/inspirational.json +0 -31
  691. package/dist/spec/catalogs/tones/persuasive.json +0 -32
  692. package/dist/spec/catalogs/tones/technical.json +0 -31
  693. package/dist/spec/previews/layouts/action-plan.html +0 -1
  694. package/dist/spec/previews/layouts/agenda.html +0 -1
  695. package/dist/spec/previews/layouts/appendix-index.html +0 -1
  696. package/dist/spec/previews/layouts/architecture-stack.html +0 -1
  697. package/dist/spec/previews/layouts/assumptions-dependencies.html +0 -1
  698. package/dist/spec/previews/layouts/before-after.html +0 -1
  699. package/dist/spec/previews/layouts/benchmark-target-table.html +0 -1
  700. package/dist/spec/previews/layouts/bullet-list.html +0 -1
  701. package/dist/spec/previews/layouts/business-model-canvas.html +0 -1
  702. package/dist/spec/previews/layouts/capability-map.html +0 -1
  703. package/dist/spec/previews/layouts/case-study.html +0 -1
  704. package/dist/spec/previews/layouts/chapter-recap.html +0 -1
  705. package/dist/spec/previews/layouts/circular-lifecycle.html +0 -1
  706. package/dist/spec/previews/layouts/comparison.html +0 -1
  707. package/dist/spec/previews/layouts/competitive-landscape.html +0 -1
  708. package/dist/spec/previews/layouts/customer-journey.html +0 -1
  709. package/dist/spec/previews/layouts/customer-logos.html +0 -1
  710. package/dist/spec/previews/layouts/dashboard.html +0 -1
  711. package/dist/spec/previews/layouts/data-visualization.html +0 -1
  712. package/dist/spec/previews/layouts/decision-tree.html +0 -1
  713. package/dist/spec/previews/layouts/detailed-data-table.html +0 -1
  714. package/dist/spec/previews/layouts/ecosystem-map.html +0 -1
  715. package/dist/spec/previews/layouts/executive-decision.html +0 -1
  716. package/dist/spec/previews/layouts/executive-summary.html +0 -1
  717. package/dist/spec/previews/layouts/faq.html +0 -1
  718. package/dist/spec/previews/layouts/feature-comparison-matrix.html +0 -1
  719. package/dist/spec/previews/layouts/forecast-scenario.html +0 -1
  720. package/dist/spec/previews/layouts/funnel-pyramid.html +0 -1
  721. package/dist/spec/previews/layouts/gantt-project-plan.html +0 -1
  722. package/dist/spec/previews/layouts/geographic-map.html +0 -1
  723. package/dist/spec/previews/layouts/heatmap-cohort.html +0 -1
  724. package/dist/spec/previews/layouts/hub-and-spoke.html +0 -1
  725. package/dist/spec/previews/layouts/icon-grid.html +0 -1
  726. package/dist/spec/previews/layouts/image-focus.html +0 -1
  727. package/dist/spec/previews/layouts/index.json +0 -357
  728. package/dist/spec/previews/layouts/key-takeaway.html +0 -1
  729. package/dist/spec/previews/layouts/kpi-scorecard.html +0 -1
  730. package/dist/spec/previews/layouts/logic-tree.html +0 -1
  731. package/dist/spec/previews/layouts/market-size.html +0 -1
  732. package/dist/spec/previews/layouts/matrix-quadrant.html +0 -1
  733. package/dist/spec/previews/layouts/network-dependency-map.html +0 -1
  734. package/dist/spec/previews/layouts/one-column-explainer.html +0 -1
  735. package/dist/spec/previews/layouts/org-chart.html +0 -1
  736. package/dist/spec/previews/layouts/persona-grid.html +0 -1
  737. package/dist/spec/previews/layouts/photo-grid.html +0 -1
  738. package/dist/spec/previews/layouts/pricing-table.html +0 -1
  739. package/dist/spec/previews/layouts/process-flow.html +0 -1
  740. package/dist/spec/previews/layouts/product-feature.html +0 -1
  741. package/dist/spec/previews/layouts/pros-cons.html +0 -1
  742. package/dist/spec/previews/layouts/qa-discussion.html +0 -1
  743. package/dist/spec/previews/layouts/quote-highlight.html +0 -1
  744. package/dist/spec/previews/layouts/raci-matrix.html +0 -1
  745. package/dist/spec/previews/layouts/risk-heatmap.html +0 -1
  746. package/dist/spec/previews/layouts/roadmap.html +0 -1
  747. package/dist/spec/previews/layouts/screenshot-walkthrough.html +0 -1
  748. package/dist/spec/previews/layouts/section-divider.html +0 -1
  749. package/dist/spec/previews/layouts/single-message-statement.html +0 -1
  750. package/dist/spec/previews/layouts/stats-metrics.html +0 -1
  751. package/dist/spec/previews/layouts/status-rag.html +0 -1
  752. package/dist/spec/previews/layouts/swimlane-process.html +0 -1
  753. package/dist/spec/previews/layouts/swot-analysis.html +0 -1
  754. package/dist/spec/previews/layouts/team-bio.html +0 -1
  755. package/dist/spec/previews/layouts/testimonial-grid.html +0 -1
  756. package/dist/spec/previews/layouts/thank-you-cta.html +0 -1
  757. package/dist/spec/previews/layouts/three-column.html +0 -1
  758. package/dist/spec/previews/layouts/timeline.html +0 -1
  759. package/dist/spec/previews/layouts/title-slide.html +0 -1
  760. package/dist/spec/previews/layouts/two-column.html +0 -1
  761. package/dist/spec/previews/layouts/venn-overlap.html +0 -1
  762. package/dist/spec/previews/layouts/waterfall-bridge.html +0 -1
  763. 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,23 +1,21 @@
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';
20
- export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-WXSPETQ6.js';
1
+ import { OPFApiError } from './chunk-V3RGXJJS.js';
2
+ export { OPFApiError, OPFExportError, OPFImportError, OPFMoveToCustomError, copySlides, edit, embed, fill, fillRecords, moveToCustom, parseSlideSelection, sameRecord, stats, updateFromCatalog } from './chunk-V3RGXJJS.js';
3
+ export { specFileEntries, specFileKinds, specFilePaths } from './chunk-UJSAR6GF.js';
4
+ export { OPFDataImportError, ingest, parseTabularData } from './chunk-AK4UXIRP.js';
5
+ export { DECK_FORMATS, deckFormatOf, parse, stringify } from './chunk-GRN3U5JT.js';
6
+ export { fromMarkdown, toMarkdown } from './chunk-FGUQHD37.js';
7
+ import './chunk-SIQWYDFF.js';
8
+ export { OPFMarkdownError } from './chunk-LRPSMQ62.js';
9
+ export { diff, merge } from './chunk-SEUJIS55.js';
10
+ export { OPFPatchError, OPFPatchValidationError, applyPatch } from './chunk-WHKFIFN7.js';
11
+ export { OPFFormatError, format } from './chunk-A6COIVTD.js';
12
+ export { OPFPaginationError, paginate, paginateSlide } from './chunk-OVBGGGKO.js';
13
+ import './chunk-YAHPQRVU.js';
14
+ import './chunk-HBFRNOP4.js';
15
+ export { CATALOG_SCHEMA, DEFAULT_CHART_PALETTE, DEFAULT_VALIDATION_THRESHOLDS, OPFValidationError, assertValid, assertValidCatalogRecord, catalogDisplayKinds, catalogSchemaNames, findValidationRule, resolveSlideContext, validate, validateCatalogRecord, validationCategories, validationRules } from './chunk-65GDO6TJ.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-ZPCKGGI6.js';
17
+ export { audience, chartType, colorScheme, fontScheme, language, layout, narrative, presentation, purpose, schemaEntries, schemaNames, schemas, socialPlatform, theme, tone } from './chunk-R5T4H4ZV.js';
18
+ export { FONT_POLICY, applyFontPolicyDecisions, fontAvailabilityDiagnostics, fontPolicyFor } from './chunk-F7PLNWHQ.js';
21
19
 
22
20
  // src/browser.ts
23
21
  var nodeOnly = (name, message) => new OPFApiError(`\`${name}\` ${message}`, "node-only", { details: { function: name, build: "browser" } });
@@ -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,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-ZPCKGGI6.js';
2
+ import { schemaEntries, schemas } from './chunk-R5T4H4ZV.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 = 2;
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,4 +1,4 @@
1
- import { presentation } from './chunk-2PEWUUBR.js';
1
+ import { presentation } from './chunk-R5T4H4ZV.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,4 +1,4 @@
1
- import { chartNumber } from './chunk-MBU42S5Y.js';
1
+ import { chartNumber } from './chunk-ZPCKGGI6.js';
2
2
 
3
3
  // src/data.ts
4
4
  var OPFDataImportError = class extends Error {
@@ -44,6 +44,11 @@ var fontPolicySource = {
44
44
  "replacement": {
45
45
  "family": "Noto Sans Thai",
46
46
  "compatibility": "visual",
47
+ "sizeAdjust": 0.75,
48
+ "lineAscent": 0.83,
49
+ "lineAscentMixed": 0.86,
50
+ "lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): 0.833 / 0.833 / 0.833 em at 18 / 24 / 32 pt, with a Latin run 0.856 / 0.866 / 0.862 (replaces the 0.85 read from 1280 px PNGs). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
51
+ "sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (Angsana New 5.06 advances over Noto Sans Thai's, fontkit, read in place). Exact 0.7401; worst line thai-digits +1.6 percent; Latin slack 42.9 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
47
52
  "measured": {
48
53
  "replacement": "Noto Sans Thai",
49
54
  "meanAbsWidthDelta": 0.7476,
@@ -275,9 +280,9 @@ var fontPolicySource = {
275
280
  "family": "Noto Naskh Arabic",
276
281
  "compatibility": "visual",
277
282
  "sizeAdjust": 0.64,
278
- "lineAscent": 0.7,
279
- "lineAscentMixed": 0.78,
280
- "lineAscentBasis": "RR-38 native PowerPoint 365 probe (probe-arabic.pptx, 18, 24 and 32 pt, 100 percent line spacing, zero insets, top anchor, rtl paragraph): the baseline of an Arabic Typesetting-only line (the most common ink-bottom row of the line) sits 0.68, 0.71 and 0.72 em below the box top (regular) and 0.68, 0.72 and 0.73 em (bold), against Arabic Typesetting's hhea ascent of 0.701 em; a line that also holds an Aptos run (Arabic, 'PowerPoint 365', Arabic) sits 0.77, 0.78 and 0.78 em below it. Core places the baseline one em below the line top, so the preview drew Arabic lines 0.22 to 0.30 em lower.",
283
+ "lineAscent": 0.74,
284
+ "lineAscentMixed": 0.8,
285
+ "lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): 0.741 / 0.736 / 0.740 em at 18 / 24 / 32 pt, with a Latin run 0.801 / 0.810 / 0.800. Corrects RR-38's 0.70 / 0.78 (an earlier estimator; RR-38's own 2560 px PNGs re-read 0.743 / 0.745 / 0.746 and 0.79 to 0.80 with this rule). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
281
286
  "sizeAdjustBasis": "RR-38: sum of Arabic Typesetting 6.85 advances over sum of Noto Naskh Arabic 400 advances (fontkit, each sample's OpenType language). 0.643 on the 12 Arabic-script corpus samples of opf-render test/fixtures/script-corpora.json (per-sample range 0.57 to 0.86); 0.598 on 29 Arabic strings of the RR-05b native deck (running Arabic text); 0.614 pooled; Noto Naskh Arabic 700 gives 0.62, 0.58 and 0.59, so bold runs draw about 3 percent long. Ink height of alef, lam, meem and heh is 0.71 of Noto Naskh Arabic's. 0.64 balances the two: lines come out about 4 percent longer than PowerPoint's and glyphs about 10 percent smaller. Native check (RR-38 probe): PowerPoint's BoundWidth of the 45-character probe line is 216.9, 289.0 and 386.1 pt at 18, 24 and 32 pt, 1.8 to 2.0 percent above the fontkit advance of the installed font (213.0, 284.0, 378.7).",
282
287
  "measured": {
283
288
  "replacement": "Noto Naskh Arabic",
@@ -1100,6 +1105,11 @@ var fontPolicySource = {
1100
1105
  "replacement": {
1101
1106
  "family": "Noto Sans Thai",
1102
1107
  "compatibility": "visual",
1108
+ "sizeAdjust": 0.68,
1109
+ "lineAscent": 0.82,
1110
+ "lineAscentMixed": 0.85,
1111
+ "lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): 0.815 / 0.819 / 0.813 em at 18 / 24 / 32 pt, with a Latin run 0.856 / 0.852 / 0.841. Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
1112
+ "sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (DilleniaUPC 5.05 advances over Noto Sans Thai's, fontkit, read in place). Exact 0.6704; worst line thai-digits +1.6 percent; Latin slack 41.5 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
1103
1113
  "measured": {
1104
1114
  "replacement": "Noto Sans Thai",
1105
1115
  "meanAbsWidthDelta": 0.7077,
@@ -1905,6 +1915,8 @@ var fontPolicySource = {
1905
1915
  "replacement": {
1906
1916
  "family": "Noto Sans KR",
1907
1917
  "compatibility": "visual",
1918
+ "sizeAdjust": 1.07,
1919
+ "sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (Malgun Gothic 6.69 advances over Noto Sans KR's, fontkit, read in place). Exact 1.0557 on precomposed Hangul; worst line kore-sentence +1.6 percent at 1.07 (Hangul); latn-numerals +2.7 percent (Latin, at any factor); Latin slack 1.6 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010. Decomposed conjoining jamo (U+1100-11FF, U+A960-A97F, U+D7B0-D7FF; sample kore-jamo, 1.0669) is a documented limitation outside the row decision: PowerPoint draws it unshaped. No lineAscent: the native baseline is 1.06 em, below core's 1.0.",
1908
1920
  "measured": {
1909
1921
  "replacement": "Noto Sans KR",
1910
1922
  "meanAbsWidthDelta": 0.0176,
@@ -2195,6 +2207,11 @@ var fontPolicySource = {
2195
2207
  "replacement": {
2196
2208
  "family": "Noto Sans Devanagari",
2197
2209
  "compatibility": "visual",
2210
+ "sizeAdjust": 1.07,
2211
+ "lineAscent": 0.97,
2212
+ "lineAscentMixed": 0.94,
2213
+ "lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): Devanagari stem bottoms 0.981 / 0.972 / 0.969 em at 18 / 24 / 32 pt, with a Latin run 0.930 / 0.935 / 0.935. Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
2214
+ "sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (Nirmala UI 1.46 advances over Noto Sans Devanagari's, fontkit, read in place). Exact 1.0695; worst line deva-matras +2.9 percent; Latin slack 6.0 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
2198
2215
  "measured": {
2199
2216
  "replacement": "Noto Sans Devanagari",
2200
2217
  "meanAbsWidthDelta": 0.0638,
@@ -2901,6 +2918,11 @@ var fontPolicySource = {
2901
2918
  "replacement": {
2902
2919
  "family": "Noto Naskh Arabic",
2903
2920
  "compatibility": "visual",
2921
+ "sizeAdjust": 0.89,
2922
+ "lineAscent": 0.76,
2923
+ "lineAscentMixed": 0.81,
2924
+ "lineAscentBasis": "opf#361 native probe, PowerPoint 365 16.0 build 20430 (RR-38 setup, 2880 px; bottom edge of the last row with 35 percent of the darkest row's ink): 0.759 / 0.764 / 0.760 em at 18 / 24 / 32 pt, with a Latin run 0.819 / 0.810 / 0.810 (replaces the 0.78 read from 1280 px PNGs). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
2925
+ "sizeAdjustBasis": "opf#361 rule: the smallest factor (0.01 steps, up) at which no line of the FF-44 script corpus or of the scheme's Latin overhangs over 3 percent natively, regular and bold (Sakkal Majalla 7.00 advances over Noto Naskh Arabic's, fontkit, read in place). Exact 0.8866; worst line arab-fa-digits +2.6 percent; Latin slack 35.1 percent (Latin is drawn by the replacement at the composed size). Evidence: docs/evidence/ff-46-sizeadjust-native-20261010.",
2904
2926
  "measured": {
2905
2927
  "replacement": "Noto Naskh Arabic",
2906
2928
  "meanAbsWidthDelta": 0.5423,
@@ -1,8 +1,8 @@
1
- import { Ctx, splitLines, lineRange, readYamlMapping, NOT_CHECKED, OPFMarkdownError, writeYaml, readCsv, DECIMAL, csvField, scalarText } from './chunk-R7KIASS4.js';
2
- import { parseQuoteLines, levelsFromIndents, parseCodeFence, splitWhen, fenceCode } from './chunk-PNINP5IF.js';
3
- import { same, isRecord, runText, isPlainRun, FORMATTING } from './chunk-TRELE6I6.js';
4
- import { validate } from './chunk-KA3ZPFVT.js';
5
- import { checkCatalogsOption } from './chunk-SPFV27O5.js';
1
+ import { Ctx, splitLines, lineRange, readYamlMapping, NOT_CHECKED, OPFMarkdownError, writeYaml, readCsv, DECIMAL, csvField, scalarText } from './chunk-LRPSMQ62.js';
2
+ import { parseQuoteLines, levelsFromIndents, parseCodeFence, splitWhen, fenceCode } from './chunk-YAHPQRVU.js';
3
+ import { same, isRecord, runText, isPlainRun, FORMATTING } from './chunk-HBFRNOP4.js';
4
+ import { validate } from './chunk-65GDO6TJ.js';
5
+ import { checkCatalogsOption, PROMOTED_REGION_KEY } from './chunk-ZPCKGGI6.js';
6
6
 
7
7
  // src/markdown/canon.ts
8
8
  var FORMAT_KEYS = FORMATTING;
@@ -1340,10 +1340,11 @@ var SlideParser = class {
1340
1340
  set("tag", options.tag);
1341
1341
  set("title", this.title);
1342
1342
  set("subtitle", this.subtitle);
1343
- const content = this.blocks.filter((block) => block.options?.region === void 0);
1344
- const regions = this.blocks.filter((block) => block.options?.region !== void 0);
1343
+ const promoted = (block) => typeof block.options?.region === "string" && PROMOTED_REGION_KEY.test(block.options.region);
1344
+ const content = this.blocks.filter((block) => !promoted(block));
1345
+ const regions = this.blocks.filter(promoted);
1345
1346
  const [only2] = content;
1346
- if (content.length === 1 && only2?.key !== void 0 && only2.options?.id === void 0 && only2.options?.type === void 0 && isContentKey(only2.key) && Object.keys(only2.payload).length === 1) {
1347
+ if (content.length === 1 && only2?.key !== void 0 && only2.options?.id === void 0 && only2.options?.type === void 0 && only2.options?.region === void 0 && isContentKey(only2.key) && Object.keys(only2.payload).length === 1) {
1347
1348
  slide[only2.key] = only2.payload[only2.key];
1348
1349
  ctx.ranges.set(`${path}/${only2.key}`, only2.range);
1349
1350
  } else if (content.length) {
@@ -1352,6 +1353,7 @@ var SlideParser = class {
1352
1353
  const out = {};
1353
1354
  if (block.options?.id !== void 0) out.id = block.options.id;
1354
1355
  if (block.options?.type !== void 0) out.type = block.options.type;
1356
+ if (block.options?.region !== void 0) out.region = block.options.region;
1355
1357
  return Object.assign(out, block.payload);
1356
1358
  });
1357
1359
  }
@@ -1596,7 +1598,7 @@ function nativeLines(key, canon, marker) {
1596
1598
  }
1597
1599
  function blockOptionsLine(spec, as) {
1598
1600
  const parts = [];
1599
- for (const [key, value] of [["id", spec.id], ["type", spec.type], ["as", as], ["region", spec.region]]) {
1601
+ for (const [key, value] of [["id", spec.id], ["type", spec.type], ["as", as], ["region", spec.region ?? spec.pin]]) {
1600
1602
  if (value === void 0) continue;
1601
1603
  const text = typeof value === "string" ? optionValue(value) : void 0;
1602
1604
  if (text === void 0) return void 0;
@@ -1615,7 +1617,7 @@ function nativeBlock(spec, marker) {
1615
1617
  const all = options ? [options, ...lines] : lines;
1616
1618
  const { slide, clean } = parseSlideText(all.join("\n"));
1617
1619
  if (!slide || !clean) continue;
1618
- const target = spec.region !== void 0 ? slide[spec.region] : spec.id !== void 0 || spec.type !== void 0 ? slide.blocks?.[0] : slide;
1620
+ const target = spec.region !== void 0 ? slide[spec.region] : spec.id !== void 0 || spec.type !== void 0 || spec.pin !== void 0 ? slide.blocks?.[0] : slide;
1619
1621
  if (target && same(target[spec.key], canon)) return all;
1620
1622
  }
1621
1623
  return void 0;
@@ -1695,9 +1697,10 @@ function emitSlide(slide, index, mode) {
1695
1697
  slide.blocks.forEach((block, i) => {
1696
1698
  const where = `${path}/blocks/${i}`;
1697
1699
  if (!isRecord(block)) return;
1698
- const keys = Object.keys(block).filter((key) => key !== "id" && key !== "type");
1700
+ const pin = typeof block.region === "string" ? block.region : void 0;
1701
+ const keys = Object.keys(block).filter((key) => key !== "id" && key !== "type" && !(key === "region" && pin !== void 0));
1699
1702
  const only3 = keys.length === 1 && isContent(keys[0]) ? keys[0] : void 0;
1700
- specs.push({ spec: { key: only3 ?? "", value: only3 ? block[only3] : void 0, id: block.id, type: block.type }, where, payload: block });
1703
+ specs.push({ spec: { key: only3 ?? "", value: only3 ? block[only3] : void 0, id: block.id, type: block.type, ...pin !== void 0 ? { pin } : {} }, where, payload: block });
1701
1704
  });
1702
1705
  for (const key of CONTENT2) if (slide[key] !== void 0) extras[key] = slide[key];
1703
1706
  } else {
@@ -1716,7 +1719,7 @@ function emitSlide(slide, index, mode) {
1716
1719
  const lines2 = spec.key ? nativeBlock(spec, marker) : void 0;
1717
1720
  if (lines2) {
1718
1721
  sections.push({ lines: lines2 });
1719
- const written = { ...spec.id !== void 0 ? { id: spec.id } : {}, ...spec.type !== void 0 ? { type: spec.type } : {}, [spec.key]: canonContent(spec.key, spec.value) };
1722
+ const written = { ...spec.id !== void 0 ? { id: spec.id } : {}, ...spec.type !== void 0 ? { type: spec.type } : {}, ...spec.pin !== void 0 ? { region: spec.pin } : {}, [spec.key]: canonContent(spec.key, spec.value) };
1720
1723
  if (spec.region !== void 0) exp[spec.region] = written;
1721
1724
  else expBlocks.push(written);
1722
1725
  const list = spec.key === "items" || spec.key === "bullets";
@@ -1,8 +1,8 @@
1
- import { fromMarkdown, toMarkdown } from './chunk-MSFE2HUK.js';
2
- import { fromYaml, toYaml } from './chunk-ECP7QPGK.js';
3
- import { NOT_CHECKED } from './chunk-R7KIASS4.js';
4
- import { parseSource, validate, OPFValidationError } from './chunk-KA3ZPFVT.js';
5
- import { checkCatalogsOption } from './chunk-SPFV27O5.js';
1
+ import { fromMarkdown, toMarkdown } from './chunk-FGUQHD37.js';
2
+ import { fromYaml, toYaml } from './chunk-SIQWYDFF.js';
3
+ import { NOT_CHECKED } from './chunk-LRPSMQ62.js';
4
+ import { parseSource, validate, OPFValidationError } from './chunk-65GDO6TJ.js';
5
+ import { checkCatalogsOption } from './chunk-ZPCKGGI6.js';
6
6
 
7
7
  // src/deck-report.ts
8
8
  var DECK_FORMATS = ["json", "yaml", "markdown"];